1
|
|
|
<?php |
2
|
|
|
namespace core\admin\contenus; |
3
|
|
|
|
4
|
|
|
use core\App; |
5
|
|
|
use core\contenus\Contenus; |
6
|
|
|
use core\functions\ChaineCaractere; |
7
|
|
|
use core\HTML\flashmessage\FlashMessage; |
8
|
|
|
|
9
|
|
|
class GestionContenus extends Contenus { |
10
|
|
|
use ParentTexte; |
11
|
|
|
|
12
|
|
|
private $erreur; |
13
|
|
|
|
14
|
|
|
|
15
|
|
|
//-------------------------- GETTER ----------------------------------------------------------------------------// |
16
|
|
|
public function getErreur() { |
17
|
|
|
return $this->erreur; |
18
|
|
|
} |
19
|
|
|
|
20
|
|
|
public function getBlocEditable($id_page_courante) { |
|
|
|
|
21
|
|
|
$dbc = App::getDb(); |
22
|
|
|
$bloc_editable = 0; |
23
|
|
|
|
24
|
|
|
$query = $dbc->select("bloc_editable")->from("page")->where("ID_page", "=", $id_page_courante)->get(); |
25
|
|
|
|
26
|
|
|
if ((is_array($query)) && (count($query) > 0)) { |
27
|
|
|
foreach ($query as $obj) { |
28
|
|
|
$bloc_editable = $obj->bloc_editable; |
29
|
|
|
} |
30
|
|
|
} |
31
|
|
|
|
32
|
|
|
return $bloc_editable; |
33
|
|
|
} |
34
|
|
|
|
35
|
|
|
private function getOrdrePage($parent) { |
36
|
|
|
if (($parent != "") || ($parent != 0)) { |
37
|
|
|
$dbc = \core\App::getDb(); |
38
|
|
|
$ordre = 1; |
39
|
|
|
|
40
|
|
|
$query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get(); |
41
|
|
|
if ((is_array($query)) && (count($query) > 0)) { |
42
|
|
|
foreach ($query as $obj) { |
43
|
|
|
$ordre = $obj->ordre; |
44
|
|
|
} |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
return $ordre; |
48
|
|
|
} |
49
|
|
|
} |
50
|
|
|
|
51
|
|
|
private function getParentId($parent) { |
52
|
|
|
$dbc = \core\App::getDb(); |
53
|
|
|
|
54
|
|
|
if ($parent == "") return 0; |
55
|
|
|
|
56
|
|
|
$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', "", true)->get(); |
57
|
|
|
|
58
|
|
|
if ((is_array($query)) && (count($query) == 1)) { |
59
|
|
|
foreach ($query as $obj) { |
60
|
|
|
return $obj->ID_page; |
61
|
|
|
} |
62
|
|
|
} |
63
|
|
|
|
64
|
|
|
return 0; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
/** |
68
|
|
|
* @param $nom_table |
69
|
|
|
* @param $nom_id_table |
70
|
|
|
* @param $champ |
71
|
|
|
* @param $value |
72
|
|
|
* @param $limit_char |
73
|
|
|
* @param $err_char |
74
|
|
|
* @param $err_egalite |
75
|
|
|
* @param null $value_id_table |
76
|
|
|
* @return string |
77
|
|
|
* fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons |
78
|
|
|
*/ |
79
|
|
|
private function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) { |
80
|
|
|
$dbc = App::getDb(); |
81
|
|
|
|
82
|
|
|
if (strlen(utf8_decode($value)) > $limit_char) { |
83
|
|
|
$this->erreur = true; |
84
|
|
|
return "<li>$err_char</li>"; |
85
|
|
|
} |
86
|
|
|
else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) { |
87
|
|
|
$this->erreur = true; |
88
|
|
|
return "<li>$err_egalite</li>"; |
89
|
|
|
} |
90
|
|
|
} |
91
|
|
|
//-------------------------- FIN GETTER ----------------------------------------------------------------------------// |
92
|
|
|
|
93
|
|
|
|
94
|
|
|
|
95
|
|
|
//-------------------------- SETTER ----------------------------------------------------------------------------// |
96
|
|
|
/** |
97
|
|
|
* @param string $url |
98
|
|
|
* @param string $err_balise_title |
99
|
|
|
* @param string $err_url |
100
|
|
|
* @param string $err_meta_description |
101
|
|
|
* @param string $err_titre_page |
102
|
|
|
*/ |
103
|
|
|
private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) { |
104
|
|
|
$_SESSION['balise_title'] = $balise_title; |
105
|
|
|
$_SESSION['url'] = $url; |
106
|
|
|
$_SESSION['meta_description'] = $meta_description; |
107
|
|
|
$_SESSION['titre_page'] = $titre_page; |
108
|
|
|
$_SESSION['parent'] = $parent; |
109
|
|
|
$_SESSION['err_modification_contenu'] = true; |
110
|
|
|
|
111
|
|
|
$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>"; |
112
|
|
|
FlashMessage::setFlash($message); |
113
|
|
|
} |
114
|
|
|
|
115
|
|
|
/** |
116
|
|
|
* fonction qui permet de créer un page |
117
|
|
|
* @param $balise_title |
118
|
|
|
* @param $url |
119
|
|
|
* @param $meta_description |
120
|
|
|
* @param $titre_page |
121
|
|
|
* @param $parent |
122
|
|
|
*/ |
123
|
|
|
public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) { |
124
|
|
|
$dbc = \core\App::getDb(); |
125
|
|
|
|
126
|
|
|
$url = ChaineCaractere::setUrl($url); |
127
|
|
|
|
128
|
|
|
$nom_page = explode("/", $url); |
129
|
|
|
$nom_page = end($nom_page); |
130
|
|
|
|
131
|
|
|
$page_type = ROOT."config/page_type/page_type.html"; |
132
|
|
|
$new_page = ROOT."app/views/".$nom_page.".html"; |
133
|
|
|
|
134
|
|
|
$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères"; |
135
|
|
|
$err_balise_title_egalite = "Ce titre est déjà présent en base de données, merci d'en choisir un autre pour optimiser le référencement de votre site"; |
136
|
|
|
$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite); |
137
|
|
|
|
138
|
|
|
$err_url_char = "L'url ne doit pas dépasser 92 caractères"; |
139
|
|
|
$err_url_egalite = "Cette url est déjà présent en base de données, merci d'en choisir une autre pour ne pas avoir de conflit entre vos pages"; |
140
|
|
|
$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite); |
141
|
|
|
|
142
|
|
|
$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères"; |
143
|
|
|
$err_meta_description_egalite = "Cette description est déjà présent en base de données, merci d'en choisir une autre pour optimiser le référencement de votre site"; |
144
|
|
|
$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite); |
145
|
|
|
|
146
|
|
|
$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères"; |
147
|
|
|
$err_titre_page_egalite = "Cette titre de page est déjà présent en base de données, merci d'en choisir un autre pour ne pas avoir de conflit dans votre navigation"; |
148
|
|
|
$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite); |
149
|
|
|
|
150
|
|
|
if ($this->erreur !== true) { |
151
|
|
|
//si le fichier n'existe pas et que la copy est ok on insert en bdd |
152
|
|
|
if ((!file_exists($new_page)) && (copy($page_type, $new_page))) { |
153
|
|
|
$parent = intval($this->getParentId($parent)); |
154
|
|
|
$ordre = intval($this->getOrdrePage($parent)); |
155
|
|
|
$dbc->insert("titre", $titre_page) |
156
|
|
|
->insert("url", $url) |
157
|
|
|
->insert("meta_description", $meta_description) |
158
|
|
|
->insert("balise_title", $balise_title) |
159
|
|
|
->insert("ordre", $ordre) |
160
|
|
|
->insert("parent", $parent) |
161
|
|
|
->insert("affiche", $affiche) |
162
|
|
|
->into("page") |
163
|
|
|
->set(); |
164
|
|
|
|
165
|
|
|
$this->id_page = $dbc->lastInsertId(); |
166
|
|
|
$this->url = $url; |
167
|
|
|
if ($parent == "") { |
168
|
|
|
$this->setAjoutLienNavigation("ID_page", $this->id_page, 1); |
169
|
|
|
} |
170
|
|
|
} |
171
|
|
|
else { |
172
|
|
|
FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur."); |
173
|
|
|
$this->erreur = true; |
174
|
|
|
} |
175
|
|
|
} |
176
|
|
View Code Duplication |
else { |
|
|
|
|
177
|
|
|
$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page); |
178
|
|
|
$this->erreur = true; |
179
|
|
|
} |
180
|
|
|
} |
181
|
|
|
|
182
|
|
|
/** |
183
|
|
|
* function that will create a redirection on an other site |
184
|
|
|
* @param $balise_title |
185
|
|
|
* @param $url |
186
|
|
|
* @param $titre_page |
187
|
|
|
* @param $parent |
188
|
|
|
*/ |
189
|
|
|
public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) { |
190
|
|
|
$dbc = \core\App::getDb(); |
191
|
|
|
|
192
|
|
|
$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères"; |
193
|
|
|
$err_balise_title_egalite = "Ce titre est déjà présent en base de données, merci d'en choisir un autre pour optimiser le référencement de votre site"; |
194
|
|
|
$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite); |
195
|
|
|
|
196
|
|
|
$err_url_char = "L'url ne doit pas dépasser 92 caractères"; |
197
|
|
|
$err_url_egalite = "Cette url est déjà présent en base de données, merci d'en choisir une autre pour ne pas avoir de conflit entre vos pages"; |
198
|
|
|
$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite); |
199
|
|
|
|
200
|
|
|
$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères"; |
201
|
|
|
$err_titre_page_egalite = "Cette titre de page est déjà présent en base de données, merci d'en choisir un autre pour ne pas avoir de conflit dans votre navigation"; |
202
|
|
|
$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite); |
203
|
|
|
|
204
|
|
|
if ($this->erreur !== true) { |
205
|
|
|
//si le fichier n'existe pas et que la copy est ok on insert en bdd |
206
|
|
|
$parent = intval($this->getParentId($parent)); |
207
|
|
|
$ordre = intval($this->getOrdrePage($parent)); |
208
|
|
|
$dbc->insert("titre", $titre_page) |
209
|
|
|
->insert("url", $url) |
210
|
|
|
->insert("balise_title", $balise_title) |
211
|
|
|
->insert("ordre", $ordre) |
212
|
|
|
->insert("parent", $parent) |
213
|
|
|
->insert("affiche", $affiche) |
214
|
|
|
->insert("target", "_blanck") |
215
|
|
|
->into("page") |
216
|
|
|
->set(); |
217
|
|
|
|
218
|
|
|
$this->id_page = $dbc->lastInsertId(); |
219
|
|
|
if ($parent == "") { |
220
|
|
|
$this->setAjoutLienNavigation("ID_page", $this->id_page, 1); |
221
|
|
|
} |
222
|
|
|
} |
223
|
|
View Code Duplication |
else { |
|
|
|
|
224
|
|
|
$this->setErreurContenus($balise_title, $url, "", $titre_page, $parent, $err_balise_title, $err_url, "", $err_titre_page); |
225
|
|
|
$this->erreur = true; |
226
|
|
|
} |
227
|
|
|
} |
228
|
|
|
|
229
|
|
|
/** |
230
|
|
|
* fonction qui permet de modifier une page en fonction de son id |
231
|
|
|
* @param $id_page |
232
|
|
|
* @param $balise_title |
233
|
|
|
* @param $url |
234
|
|
|
* @param $meta_description |
235
|
|
|
* @param $titre_page |
236
|
|
|
* @param $parent |
237
|
|
|
* @param $contenu |
238
|
|
|
*/ |
239
|
|
|
public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) { |
240
|
|
|
$dbc = \core\App::getDb(); |
241
|
|
|
|
242
|
|
|
//on trouve l'ancien fichier à parir de la fin de l'url |
243
|
|
|
$old_url = explode("/", $this->url); |
244
|
|
|
$filename = ROOT."app/views/".end($old_url).".html"; |
245
|
|
|
|
246
|
|
|
//si le fichier existe on modifie le tout |
247
|
|
|
if (file_exists($filename) || ($id_page == 1)) { |
248
|
|
|
$this->id_page = $id_page; |
249
|
|
|
$url = ChaineCaractere::setUrl($url); |
250
|
|
|
|
251
|
|
|
$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères"; |
252
|
|
|
$err_balise_title_egalite = "Ce titre est déjà présent en base de données, merci d'en choisir un autre pour optimiser le référencement de votre site"; |
253
|
|
|
$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page); |
254
|
|
|
|
255
|
|
|
$err_url_char = "L'url ne doit pas dépasser 92 caractères"; |
256
|
|
|
$err_url_egalite = "Cette url est déjà présent en base de données, merci d'en choisir une autre pour ne pas avoir de conflit entre vos pages"; |
257
|
|
|
$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page); |
258
|
|
|
|
259
|
|
|
$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères"; |
260
|
|
|
$err_meta_description_egalite = "Cette description est déjà présent en base de données, merci d'en choisir une autre pour optimiser le référencement de votre site"; |
261
|
|
|
$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page); |
262
|
|
|
|
263
|
|
|
$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères"; |
264
|
|
|
$err_titre_page_egalite = "Cette titre de page est déjà présent en base de données, merci d'en choisir un autre pour ne pas avoir de conflit dans votre navigation"; |
265
|
|
|
$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page); |
266
|
|
|
|
267
|
|
|
if ($this->erreur !== true) { |
268
|
|
|
$new_url = explode("/", $url); |
269
|
|
|
$new_filename = ROOT."app/views/".end($new_url).".html"; |
270
|
|
|
|
271
|
|
|
rename($filename, $new_filename); |
272
|
|
|
|
273
|
|
|
$parent = intval($this->getParentId($parent)); |
274
|
|
|
$dbc->update("titre", $titre_page) |
275
|
|
|
->update("url", $url) |
276
|
|
|
->update("meta_description", $meta_description) |
277
|
|
|
->update("balise_title", $balise_title) |
278
|
|
|
->update("parent", $parent) |
279
|
|
|
->update("affiche", $affiche) |
280
|
|
|
->from("page") |
281
|
|
|
->where("ID_page", "=", $id_page, "", true) |
282
|
|
|
->set(); |
283
|
|
|
|
284
|
|
|
$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche); |
285
|
|
|
$this->url = $url; |
286
|
|
|
} |
287
|
|
|
else { |
288
|
|
|
$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page); |
289
|
|
|
} |
290
|
|
|
} |
291
|
|
|
//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur |
292
|
|
|
else { |
293
|
|
|
FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème"); |
294
|
|
|
$this->erreur = true; |
295
|
|
|
} |
296
|
|
|
} |
297
|
|
|
|
298
|
|
|
/** |
299
|
|
|
* @param $id_page |
300
|
|
|
* @param $contenu |
301
|
|
|
*/ |
302
|
|
|
public function setModifierContenu($id_page, $contenu) { |
303
|
|
|
$dbc = \core\App::getDb(); |
304
|
|
|
|
305
|
|
|
$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set(); |
306
|
|
|
} |
307
|
|
|
|
308
|
|
|
/** |
309
|
|
|
* fonction qui permet de supprimer une page, test si fichier exist, si oui on delete |
310
|
|
|
* @param $id_page |
311
|
|
|
*/ |
312
|
|
|
public function setSupprimerPage() { |
313
|
|
|
$url = explode("/", $this->url); |
314
|
|
|
$filename = ROOT."app/views/".end($url).".html"; |
315
|
|
|
|
316
|
|
|
if (file_exists($filename) && $this->id_page != 1) { |
317
|
|
|
unlink($filename); |
318
|
|
|
$this->setSupprimerLienNavigation(); |
319
|
|
|
|
320
|
|
|
return true; |
321
|
|
|
} |
322
|
|
|
else if (ChaineCaractere::FindInString($this->url, "http://") === true) { |
323
|
|
|
$this->setSupprimerLienNavigation(); |
324
|
|
|
} |
325
|
|
|
else { |
326
|
|
|
FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème"); |
327
|
|
|
$this->erreur = true; |
328
|
|
|
return false; |
329
|
|
|
} |
330
|
|
|
} |
331
|
|
|
|
332
|
|
|
/** |
333
|
|
|
* @param string $id |
334
|
|
|
* @param $value_id |
335
|
|
|
* @param integer $affiche |
336
|
|
|
*/ |
337
|
|
|
private function setAjoutLienNavigation($id, $value_id, $affiche) { |
338
|
|
|
if ($affiche !== null) { |
339
|
|
|
App::getNav()->setAjoutLien($id, $value_id); |
340
|
|
|
} |
341
|
|
|
} |
342
|
|
|
|
343
|
|
|
/** |
344
|
|
|
* @param string $id |
345
|
|
|
* @param integer $affiche |
346
|
|
|
*/ |
347
|
|
|
private function setModifierLienNavigation($id, $id_page, $parent, $affiche) { |
348
|
|
|
if ($parent != "") { |
349
|
|
|
App::getNav()->setSupprimerLien($id, $id_page); |
350
|
|
|
} |
351
|
|
|
else if (($affiche == 0) && ($parent == "")) { |
352
|
|
|
App::getNav()->setSupprimerLien($id, $id_page); |
353
|
|
|
} |
354
|
|
|
} |
355
|
|
|
|
356
|
|
|
/** |
357
|
|
|
* delete link in nav and delete page in table |
358
|
|
|
*/ |
359
|
|
|
private function setSupprimerLienNavigation() { |
360
|
|
|
$dbc = App::getDb(); |
361
|
|
|
|
362
|
|
|
$dbc->delete()->from("page")->where("ID_page", "=", $this->id_page)->del(); |
363
|
|
|
|
364
|
|
|
App::getNav()->setSupprimerLien("ID_page", $this->id_page); |
365
|
|
|
} |
366
|
|
|
//-------------------------- FIN SETTER ----------------------------------------------------------------------------// |
367
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.