Passed
Push — master ( 4e91a2...18b8ef )
by Anthony
02:58
created

GestionContenus::setModifierLienNavigation()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.2
cc 4
eloc 6
nc 3
nop 4
1
<?php
2
	namespace core\admin\contenus;
3
4
	use core\App;
5
	use core\contenus\Contenus;
6
	use core\admin\droitsacces\DroitAcces;
7
	use core\functions\ChaineCaractere;
8
	use core\HTML\flashmessage\FlashMessage;
9
	use core\Navigation;
10
11
	class GestionContenus extends Contenus {
12
		private $parent_texte;
13
		private $erreur;
14
15
16
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
17
		public function __construct($init_all = 0) {
18
			$dbc = \core\App::getDb();
19
20
			if ($init_all == 1) {
21
				$droit_acces = new DroitAcces();
22
				$id_identite = $_SESSION["idlogin".CLEF_SITE];
23
24
				//on construit le menu
25
				if ($droit_acces->getSuperAdmin() != 1) {
26
					$query = $dbc->query("SELECT page.ID_page, page.titre, page.balise_title, page.parent, page.url, droit_acces_page.seo, droit_acces_page.contenu, droit_acces_page.navigation, droit_acces_page.supprimer FROM page, droit_acces_page, liste_droit_acces, identite WHERE
27
                                    identite.liste_droit = liste_droit_acces.ID_liste_droit_acces AND
28
									liste_droit_acces.ID_liste_droit_acces = droit_acces_page.ID_liste_droit_acces AND
29
									page.ID_page = droit_acces_page.ID_page AND
30
									(droit_acces_page.seo != 0 OR droit_acces_page.contenu != 0 OR droit_acces_page.navigation != 0 OR droit_acces_page.supprimer != 0 OR identite.super_admin = 1) AND
31
									identite.ID_identite = $id_identite
32
                                    ORDER BY page.ordre
33
                    ");
34
				}
35
				else {
36
					$query = $dbc->query("SELECT ID_page, titre, balise_title, parent, url FROM page ORDER BY ordre");
37
				}
38
39
				$this->getMenu($query);
40
			}
41
		}
42
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
43
44
45
46
		//-------------------------- GETTER ----------------------------------------------------------------------------//
47
		public function getErreur() {
48
			return $this->erreur;
49
		}
50
51
		public function getParentTexte($parent) {
52
			$dbc = \core\App::getDb();
53
54
			if ($parent != "") {
55
				$query = $dbc->query("SELECT titre FROM page WHERE ID_page=".$parent);
56
				if ((is_array($query)) && (count($query) > 0)) {
57
					foreach ($query as $obj) $this->parent_texte = $obj->titre;
58
				}
59
60
				return $this->parent_texte;
61
			}
62
		}
63
64
		private function getOrdrePage($parent) {
65
			if (($parent != "") || ($parent != 0)) {
66
				$dbc = \core\App::getDb();
67
				$ordre = "";
68
69
				$query = $dbc->query("SELECT ordre FROM page ORDER BY ordre DESC LIMIT 1");
70
				if ((is_array($query)) && (count($query) > 0)) {
71
					foreach ($query as $obj) {
72
						$ordre = $obj->ordre;
73
					}
74
				}
75
76
				return $ordre;
77
			}
78
		}
79
80
		private function getParentId($parent) {
81
			if ($parent != "") {
82
				$dbc = \core\App::getDb();
83
84
				$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"')->get();
85
86
				if ((is_array($query)) && (count($query) > 0)) {
87
					foreach ($query as $obj) {
88
						return $obj->ID_page;
89
					}
90
				}
91
			}
92
93
			return 0;
94
		}
95
96
		/**
97
		 * @param $query
98
		 * fonction qui permet de récupérer le menu dans admin et front
99
		 */
100
		private function getMenu($query) {
101
			if ((is_array($query)) && (count($query) > 0)) {
102
				$id_page = [];
103
				$titre = [];
104
				$balise_title = [];
105
				$url = [];
106
				$parent = [];
107
108
				foreach ($query as $obj) {
109
					$id_page[] = $obj->ID_page;
110
					$titre[] = $obj->titre;
111
					$balise_title[] = $obj->balise_title;
112
					$url[] = $obj->url;
113
					$parent[] = $obj->parent;
114
				}
115
116
				$this->setMenu($id_page, $titre, $balise_title, $url, $parent);
117
			}
118
		}
119
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
120
121
122
123
		//-------------------------- SETTER ----------------------------------------------------------------------------//
124
		private function setMenu($id_page, $titre, $balise_title, $url, $parent) {
125
			$this->id_page = $id_page;
126
			$this->titre = $titre;
127
			$this->balise_title = $balise_title;
128
			$this->url = $url;
129
			$this->parent = $parent;
130
		}
131
132
		/**
133
		 * fonction qui permet de créer un page
134
		 * @param $balise_title
135
		 * @param $url
136
		 * @param $meta_description
137
		 * @param $titre_page
138
		 * @param $parent
139
		 * @param $contenu
140
		 */
141
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = 1) {
142
			$dbc = \core\App::getDb();
143
144
			$url = ChaineCaractere::setUrl($url);
145
146
			$nom_page = explode("/", $url);
147
			$nom_page = end($nom_page);
148
149
			$page_type = ROOT."config/page_type/page_type.php";
150
			$new_page = ROOT."app/views/".$nom_page.".php";
151
152
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
153
			$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";
154
			$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
155
156
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
157
			$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";
158
			$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
159
160
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
161
			$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";
162
			$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
163
164
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
165
			$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";
166
			$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
167
168
			if (App::getErreur() !== true) {
169
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
170
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
171
					$value = array(
172
						"balise_title" => $balise_title,
173
						"url" => $url,
174
						"meta_description" => $meta_description,
175
						"titre" => $titre_page,
176
						"parent" => $parent,
177
						"contenu" => $contenu,
178
						"ordre" => $this->getOrdrePage($parent),
179
						"affiche" => $affiche
180
					);
181
182
					$dbc->prepare("INSERT INTO page (titre, contenu, url, meta_description, balise_title, ordre, parent, affiche) VALUES (:titre, :contenu, :url, :meta_description, :balise_title, :ordre, :parent, :affiche)", $value);
183
					$this->id_page = $dbc->lastInsertId();
184
					$this->setAjoutLienNavigation("ID_page", $this->id_page , 1);
185
				}
186
				else {
187
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
188
					$this->erreur = true;
189
				}
190
			}
191
			else {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

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.

Loading history...
192
				$_SESSION['balise_title'] = $balise_title;
193
				$_SESSION['url'] = $url;
194
				$_SESSION['meta_description'] = $meta_description;
195
				$_SESSION['titre_page'] = $titre_page;
196
				$_SESSION['parent'] = $parent;
197
				$_SESSION['contenu'] = $contenu;
198
				$_SESSION['err_modification_contenu'] = true;
199
200
				$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
201
				FlashMessage::setFlash($message);
202
			}
203
		}
204
205
		/**
206
		 * fonction qui permet de modifier une page en fonction de son id
207
		 * @param $id_page
208
		 * @param $balise_title
209
		 * @param $url
210
		 * @param $meta_description
211
		 * @param $titre_page
212
		 * @param $parent
213
		 * @param $contenu
214
		 */
215
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = 1) {
216
			$dbc = \core\App::getDb();
217
218
			//on trouve l'ancien fichier à parir de la fin de l'url
219
			$this->getHeadPage($id_page);
220
			$this->getContenuPage($id_page);
221
			$old_url = explode("/", $this->url);
222
			$filename = ROOT."app/views/".end($old_url).".php";
223
224
			//si le fichier existe on modifie le tout
225
			if (file_exists($filename) || ($id_page == 1)) {
226
				$this->id_page = $id_page;
227
				$url = ChaineCaractere::setUrl($url);
228
229
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
230
				$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";
231
				$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
232
233
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
234
				$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";
235
				$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
236
237
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
238
				$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";
239
				$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
240
241
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
242
				$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";
243
				$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
244
245
				if (App::getErreur() !== true) {
246
					$new_url = explode("/", $url);
247
					$new_filename = ROOT."app/views/".end($new_url).".php";
248
249
					rename($filename, $new_filename);
250
251
					$value = array(
252
						"id_page" => $id_page,
253
						"balise_title" => $balise_title,
254
						"url" => $url,
255
						"meta_description" => $meta_description,
256
						"titre_page" => $titre_page,
257
						"parent" => $this->getParentId($parent),
258
						"contenu" => $contenu,
259
						"affiche" => $affiche
260
					);
261
262
					$dbc->prepare("UPDATE page SET titre=:titre_page, contenu=:contenu, url=:url, meta_description=:meta_description, balise_title=:balise_title, parent=:parent, affiche=:affiche WHERE ID_page=:id_page", $value);
263
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
264
				}
265
				else {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

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.

Loading history...
266
					$_SESSION['balise_title'] = $balise_title;
267
					$_SESSION['url'] = $url;
268
					$_SESSION['meta_description'] = $meta_description;
269
					$_SESSION['titre_page'] = $titre_page;
270
					$_SESSION['parent'] = $parent;
271
					$_SESSION['contenu'] = $contenu;
272
					$_SESSION['err_modification_contenu'] = true;
273
274
					$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
275
					FlashMessage::setFlash($message);
276
				}
277
			}
278
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
279
			else {
280
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
281
				$this->erreur = true;
282
			}
283
		}
284
285
		/**
286
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
287
		 * @param $id_page
288
		 */
289
		public function setSupprimerPage($id_page) {
290
			$dbc = \core\App::getDb();
291
292
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
293
			if ($id_page != 1) {
294
				$this->getContenuPage($id_page);
295
296
				$url = explode("/", $this->url);
297
				$filename = ROOT."app/views/".end($url).".php";
298
299
				//si le fichier existe supprimer en bdd plus l fichier
300
				if (file_exists($filename)) {
301
					unlink($filename);
302
303
					$value = array(
304
						"id_page" => $id_page
305
					);
306
307
					$dbc->prepare("DELETE FROM page WHERE ID_page=:id_page", $value);
308
309
					$nav = new Navigation();
310
					$nav->setSupprimerLien("ID_page", $id_page);
311
				}
312
				//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
313
				else {
314
					FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
315
					$this->erreur = true;
316
				}
317
			}
318
			else {
319
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
320
				$this->erreur = true;
321
			}
322
		}
323
324
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
325
			if ($affiche !== null) {
326
				$nav = new Navigation();
327
				$nav->setTestAjoutLien($id, $value_id, $affiche);
328
			}
329
		}
330
331
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
332
			if ($parent != "") {
333
				$nav = new Navigation();
334
				$nav->setSupprimerLien($id, $id_page);
335
			}
336
			else if (($affiche == 1) && ($parent == "")) {
337
				$this->setAjoutLienNavigation($id, $id_page, $affiche);
338
			}
339
		}
340
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
341
	}