Controllers

MéthodeModifications

Dans chaque fichier, nous conservons uniquement le code situé avant le doctype et mettons à jour les URLs des require.

Nous ajoutons un require pointant vers la vue correspondante.

Nous devons garder à l’esprit que le fichier initial qui lance nos scripts se trouve dans le dossier public ou dans l’un de ses sous-dossiers. Nous raisonnons donc comme si nous étions dans le dossier de ce fichier, et toutes les URLs sont relatives à l’emplacement du fichier initial qui appelle nos controllers.

Pour les fichiers qui ne contiennent pas de HTML, nous laissons la balise PHP ouverte.

app/controllers/home/index.php

1
<?php
2
// ==============================
3
// INCLUSION DE LA VUE
4
// ==============================
5
require '../app/views/home/index.php';

app/controllers/utilisateur/index.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS
4
// ==============================
5
require '../../app/models/model.php';
6
7
// ==============================
8
// RÉCUPÉRATION DE LA LISTE
9
// ==============================
10
$listeUtilisateurs = all('utilisateurs');
11
12
// ==============================
13
// VARIABLES POUR LA VUE
14
// ==============================
15
16
// Chemin de base pour les inclusions
17
$page_base = '../';
18
// Titre dynamique de la page
19
$page_title = 'Afficher les utilisateurs';
20
// Feuilles de styles spécifiques à la page
21
$page_styles = ['utilisateur', 'card'];
22
23
// ==============================
24
// INCLUSION DE LA VUE  
25
// ==============================
26
27
require '../../app/views/utilisateur/index.php';
28

app/controllers/utilisateur/show.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS
4
// ==============================
5
require '../../app/models/model.php';
6
7
// ==============================
8
// RÉCUPÉRATION DE L’ID
9
// ==============================
10
// récupération de l'ID dans l'URL
11
$id = (int) ($_GET['id'] ?? 0);
12
13
// ==============================
14
// RÉCUPÉRATION DE L’UTILISATEUR
15
// ==============================
16
17
$utilisateur = find('utilisateurs', $id);
18
19
// Si aucun utilisateur n’est trouvé → redirection vers la liste
20
if (!$utilisateur) {
21
    header('location:../utilisateur/index.php');
22
    exit();
23
}
24
25
// ==============================
26
// VARIABLES POUR LA VUE
27
// ==============================
28
29
// Chemin de base pour les inclusions
30
$page_base = '../';
31
// Titre dynamique de la page
32
$page_title = "Afficher-{$utilisateur['nom']}";
33
// Feuilles de styles spécifiques à la page
34
$page_styles = ['utilisateur', 'card'];
35
36
// ==============================
37
// INCLUSION DE LA VUE  
38
// ==============================
39
require '../../app/views/utilisateur/show.php';
40

app/controllers/utilisateur/create.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
5
require '../../app/models/model.php';
6
7
// ==============================
8
// INCLUSION HELPERS
9
// =============================
10
require '../../app/helpers.php';
11
12
// ==============================
13
// TRAITEMENT DU FORMULAIRE
14
// ==============================
15
16
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['ajouter'])) {
17
18
  // ------------------------------
19
  // RÉCUPÉRATION DES DONNÉES
20
  // ------------------------------
21
22
  // Nettoyage des champs texte
23
  $nom = trim($_POST['nom'] ?? '');
24
  $prenom = trim($_POST['prenom'] ?? '');
25
26
  // Cast en entier pour le champ âge
27
  $age = (int) ($_POST['age'] ?? 0);
28
29
  // Slug utilisé pour l’URL et le nom du fichier photo
30
  $baseSlug = slug("$prenom-$nom");
31
  $slug = $baseSlug;
32
33
  $i = 1;
34
  // Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique
35
  while (where('utilisateurs', ['slug' => $slug])) {
36
    $slug = "{$baseSlug}_{$i}";
37
    $i++;
38
  }
39
40
  // ------------------------------
41
  // GESTION DE LA PHOTO
42
  // ------------------------------
43
44
  // Dossier relatif de stockage des photos
45
  // par rapport à la racine du projet
46
  $relDir =  '../';
47
  // Dossier de stockage des photos
48
  $photoDir = 'images/photos/';
49
50
  // Création du dossier s’il n’existe pas
51
  if (!is_dir($relDir . $photoDir)) {
52
    mkdir($relDir . $photoDir, 0755, true);
53
  }
54
55
  // Cas 1 : une photo a été uploadée
56
  if (
57
    isset($_FILES['photo']) &&
58
    is_uploaded_file($_FILES['photo']['tmp_name'])
59
  ) {
60
61
    // Récupération de l’extension du fichier (en minuscule)
62
    $extension = strtolower(
63
      pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION)
64
    );
65
66
    // Nom final du fichier photo
67
    $photo = "{$photoDir}{$slug}.{$extension}";
68
69
    // Déplacement du fichier temporaire vers le dossier photos
70
    move_uploaded_file(
71
      $_FILES['photo']['tmp_name'],
72
      "{$relDir}{$photo}"
73
    );
74
75
    // Cas 2 : aucune photo envoyée → image par défaut
76
  } else {
77
78
    // Nom de la photo par défaut
79
    $photo = "{$photoDir}{$slug}.png";
80
81
    // Copie de l’image générique
82
    copy(
83
      "{$relDir}{$photoDir}photo.png",
84
      "{$relDir}{$photo}"
85
    );
86
  }
87
88
  // ------------------------------
89
  // INSERTION EN BASE DE DONNÉES
90
  // ------------------------------
91
92
  create('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo'));
93
94
  // ------------------------------
95
  // REDIRECTION
96
  // ------------------------------
97
98
  // Redirection après succès (évite la resoumission du formulaire)
99
  header('location:../utilisateur/index.php');
100
  exit;
101
}
102
103
// ==============================
104
// VARIABLES POUR LA VUE
105
// ==============================
106
107
// Chemin de base pour les inclusions
108
$page_base = '../';
109
// Titre dynamique de la page
110
$page_title = 'Ajouter un utilisateur';
111
// Feuilles de styles spécifiques à la page
112
$page_styles = ['utilisateur', 'form'];
113
114
// Inclusion du template
115
116
require '../../app/views/utilisateur/create.php';
117

app/controllers/utilisateur/update.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS
4
// ==============================
5
require '../../app/models/model.php';
6
7
// ==============================
8
// INCLUSION HELPERS
9
// =============================
10
require '../../app/helpers.php';
11
12
// ==============================
13
// RÉCUPÉRATION DE L’ID 
14
// ==============================
15
$id = (int) ($_GET['id'] ?? 0);
16
17
// ==============================
18
// RÉCUPÉRATION DE L’UTILISATEUR
19
// ==============================
20
21
// Récupération de l'utilisateur
22
$utilisateur = find('utilisateurs', $id);
23
24
// Si aucun utilisateur n’est trouvé, redirection vers la liste
25
if (!$utilisateur) {
26
    header('location:../utisateur/index.php');
27
    exit;
28
}
29
30
// ==============================
31
// TRAITEMENT DU FORMULAIRE
32
// ==============================
33
34
// Vérification de la soumission du formulaire
35
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['modifier'])) {
36
37
    // Sauvegarde de l’ancien slug (utile pour renommer la photo)
38
    $oldSlug = $utilisateur['slug'];
39
40
    // Récupération et nettoyage des champs du formulaire
41
    $nom = trim($_POST['nom'] ?? '');
42
    $prenom = trim($_POST['prenom'] ?? '');
43
    $age = (int) ($_POST['age'] ?? 0);
44
45
    // ------------------------------
46
    // Génération du slug à partir du prénom et du nom
47
    // ------------------------------
48
    $baseSlug = slug("$prenom-$nom");
49
    $slug = $baseSlug;
50
51
    $i = 1;
52
    // Tant qu’un enregistrement existe avec ce slug, on ajoute un suffixe numérique
53
    while (where('utilisateurs', ['slug' => $slug])) {
54
        $slug = "{$baseSlug}_{$i}";
55
        $i++;
56
    }
57
58
    // ------------------------------
59
    // GESTION DE LA PHOTO
60
    // ------------------------------
61
62
    // Dossier relatif de stockage des photos
63
    // par rapport à la racine du projet
64
    $relDir =  '../';
65
    // Dossier de stockage des photos
66
    $photoDir = 'images/photos/';
67
68
    // Par défaut, on conserve la photo existante
69
    $photo = $utilisateur['photo'];
70
71
    // Création du dossier s’il n’existe pas
72
    if (!is_dir($relDir . $photoDir)) {
73
        mkdir($relDir . $photoDir, 0755, true);
74
    }
75
76
    // Chemin complet de l’ancienne photo
77
    $oldPathPhoto = "{$relDir}{$photo}";
78
79
    // ------------------------------ 
80
    // RENOMMAGE DE LA PHOTO SI LE SLUG A CHANGÉ 
81
    // ------------------------------
82
83
    // Si le slug a changé et que la photo existe
84
    if ($oldSlug !== $slug && is_file($oldPathPhoto)) {
85
86
        // Récupération de l’extension du fichier
87
        $extension = pathinfo($oldPathPhoto, PATHINFO_EXTENSION);
88
89
        // Nouveau nom de fichier
90
        $photo = "{$photoDir}{$slug}.{$extension}";
91
92
        // Renommage du fichier sur le serveur
93
        rename($oldPathPhoto, "{$relDir}{$photo}");
94
    }
95
96
    // ------------------------------
97
    // UPLOAD D’UNE NOUVELLE PHOTO
98
    // ------------------------------
99
100
    // Vérifie qu’un fichier a bien été envoyé
101
    if (
102
        isset($_FILES['photo']) &&
103
        is_uploaded_file($_FILES['photo']['tmp_name'])
104
    ) {
105
106
        // Suppression de la photo si elle existe
107
        if (is_file("{$relDir}{$photo}")) {
108
            unlink("{$relDir}{$photo}");
109
        }
110
111
        // Récupération de l’extension de la nouvelle photo
112
        $extension = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
113
114
        // Nouveau nom de fichier
115
        $photo = "{$photoDir}{$slug}.{$extension}";
116
117
        // Déplacement du fichier temporaire vers le dossier photos
118
        move_uploaded_file(
119
            $_FILES['photo']['tmp_name'],
120
            "{$relDir}{$photo}"
121
        );
122
    }
123
124
    // ------------------------------   
125
    // MISE À JOUR EN BASE DE DONNÉES
126
    // ------------------------------
127
128
    update('utilisateurs', compact('nom', 'prenom', 'age', 'slug', 'photo', 'id'));
129
130
    // Redirection après succès
131
    header('location:../utilisateur/index.php');
132
    exit;
133
}
134
135
// ==============================
136
// VARIABLES POUR LA VUE
137
// ==============================
138
139
// Chemin de base pour les inclusions
140
$page_base = '../';
141
// Titre dynamique de la page
142
$page_title = "Modifier-{$utilisateur['nom']}";
143
// Feuilles de styles spécifiques à la page
144
$page_styles = ['utilisateur', 'card', 'form'];
145
146
// ==============================
147
// INCLUSION DE LA VUE
148
// ==============================
149
require '../../app/views/utilisateur/update.php';
150

app/controllers/utilisateur/delete.php

1
<?php
2
// ==============================
3
// INCLUSION DES FONCTIONS DU MODÈLE
4
// ==============================
5
require '../../app/models/model.php';
6
7
// ==============================
8
// RÉCUPÉRATION DE L’ID 
9
// ==============================
10
$id = (int) ($_GET['id'] ?? 0);
11
12
// ============================== 
13
// RÉCUPÉRATION DE L’UTILISATEUR 
14
// ==============================  
15
$utilisateur = find('utilisateurs', $id);
16
17
if (!$utilisateur) {
18
    header('location:../utilisateur/index.php');
19
    exit;
20
}
21
22
// ==============================
23
// TRAITEMENT DU FORMULAIRE
24
// ==============================
25
26
// Vérification de la soumission du formulaire
27
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['supprimer'])) {
28
    // suppression de l'utilisateur
29
    delete('utilisateurs', $id);
30
31
    // Dossier relatif de stockage des photos
32
    // par rapport à la racine du projet
33
    $relDir =  '../';
34
35
    // suppression de la photo si elle existe
36
    if (is_file("{$relDir}{$utilisateur['photo']}")) {
37
        unlink("{$relDir}{$utilisateur['photo']}");
38
    }
39
    // redirection
40
    header('location:../utilisateur/index.php');
41
    exit;
42
}
43
44
// ==============================
45
// VARIABLES POUR LA VUE
46
// ==============================
47
48
// Chemin de base pour les inclusions
49
$page_base = '../';
50
// Titre dynamique de la page
51
$page_title = "Supprimer-{$utilisateur['nom']}";
52
// Feuilles de styles spécifiques à la page
53
$page_styles = ['utilisateur', 'card', 'form'];
54
55
// ==============================
56
// INCLUSION DE LA VUE
57
// ==============================
58
59
require '../../app/views/utilisateur/delete.php';
60