Passed
Push — master ( 8a1794...d608f5 )
by Anthony
02:52
created

GestionContenus::setMenu()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
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 7
rs 9.4285
cc 1
eloc 6
nc 1
nop 5
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 getParentTexte($parent) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
48
			$dbc = \core\App::getDb();
49
50
			$query = $dbc->query("SELECT titre FROM page WHERE ID_page=".$parent);
51
			if ((is_array($query)) && (count($query) > 0)) {
52
				foreach ($query as $obj) $this->parent_texte = $obj->titre;
53
			}
54
55
			return $this->parent_texte;
56
		}
57
		public function getErreur() {
58
			return $this->erreur;
59
		}
60
61
		private function getLastOrdre() {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
62
			$dbc = \core\App::getDb();
63
			$ordre = "";
64
65
			$query = $dbc->query("SELECT ordre FROM page ORDER BY ordre ASC LIMIT 1");
66
			if ((is_array($query)) && (count($query) > 0)) {
67
				foreach ($query as $obj) {
68
					$ordre = $obj->ordre;
69
				}
70
			}
71
72
			return $ordre;
73
		}
74
75
		/**
76
		 * @param $query
77
		 * fonction qui permet de récupérer le menu dans admin et front
78
		 */
79
		private function getMenu($query) {
80
			if ((is_array($query)) && (count($query) > 0)) {
81
				$id_page = [];
82
				$titre = [];
83
				$balise_title = [];
84
				$url = [];
85
				$parent = [];
86
87
				foreach ($query as $obj) {
88
					$id_page[] = $obj->ID_page;
89
					$titre[] = $obj->titre;
90
					$balise_title[] = $obj->balise_title;
91
					$url[] = $obj->url;
92
					$parent[] = $obj->parent;
93
				}
94
95
				$this->setMenu($id_page, $titre, $balise_title, $url, $parent);
96
			}
97
		}
98
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
99
100
101
102
		//-------------------------- SETTER ----------------------------------------------------------------------------//
103
		private function setMenu($id_page, $titre, $balise_title, $url, $parent) {
104
			$this->id_page = $id_page;
105
			$this->titre = $titre;
106
			$this->balise_title = $balise_title;
107
			$this->url = $url;
108
			$this->parent = $parent;
109
		}
110
111
		/**
112
		 * fonction qui permet de créer un page
113
		 * @param $balise_title
114
		 * @param $url
115
		 * @param $meta_description
116
		 * @param $titre_page
117
		 * @param $parent
118
		 * @param $contenu
119
		 */
120
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = null) {
0 ignored issues
show
Unused Code introduced by
The parameter $affiche is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
121
			$dbc = \core\App::getDb();
122
123
			$url = ChaineCaractere::setUrl($url);
124
125
			$nom_page = explode("/", $url);
126
			$nom_page = end($nom_page);
127
128
			$page_type = ROOT."config/page_type/page_type.php";
129
			$new_page = ROOT."app/views/".$nom_page.".php";
130
131
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
132
			$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";
133
			$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
134
135
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
136
			$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";
137
			$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
138
139
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
140
			$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";
141
			$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
142
143
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
144
			$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";
145
			$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
146
147
			if (App::getErreur() !== true) {
148
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
149
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
150
					$ordre = $this->getLastOrdre() + 1;
151
					$value = array(
152
						"balise_title" => $balise_title,
153
						"url" => $url,
154
						"meta_description" => $meta_description,
155
						"titre" => $titre_page,
156
						"parent" => $parent,
157
						"contenu" => $contenu,
158
						"ordre" => $ordre,
159
						"affiche" => 1
160
					);
161
162
					$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);
163
					$this->id_page = $dbc->lastInsertId();
164
					$this->setAjoutLienNavigation("ID_page", $this->id_page , 1);
165
				}
166
				else {
167
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
168
					$this->erreur = true;
169
				}
170
			}
171
			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...
172
				$_SESSION['balise_title'] = $balise_title;
173
				$_SESSION['url'] = $url;
174
				$_SESSION['meta_description'] = $meta_description;
175
				$_SESSION['titre_page'] = $titre_page;
176
				$_SESSION['parent'] = $parent;
177
				$_SESSION['contenu'] = $contenu;
178
				$_SESSION['err_modification_contenu'] = true;
179
180
				$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
181
				FlashMessage::setFlash($message);
182
			}
183
		}
184
185
		/**
186
		 * fonction qui permet de modifier une page en fonction de son id
187
		 * @param $id_page
188
		 * @param $balise_title
189
		 * @param $url
190
		 * @param $meta_description
191
		 * @param $titre_page
192
		 * @param $parent
193
		 * @param $contenu
194
		 */
195
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = null) {
0 ignored issues
show
Unused Code introduced by
The parameter $affiche is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
196
			$dbc = \core\App::getDb();
197
198
			//on trouve l'ancien fichier à parir de la fin de l'url
199
			$this->getHeadPage($id_page);
200
			$this->getContenuPage($id_page);
201
			$old_url = explode("/", $this->url);
202
			$filename = ROOT."app/views/".end($old_url).".php";
203
204
			//si le fichier existe on modifie le tout
205
			if (file_exists($filename) || ($id_page == 1)) {
206
				$this->id_page = $id_page;
207
				$url = ChaineCaractere::setUrl($url);
208
209
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
210
				$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";
211
				$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
212
213
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
214
				$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";
215
				$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
216
217
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
218
				$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";
219
				$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
220
221
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
222
				$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";
223
				$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
224
225
				if (App::getErreur() !== true) {
226
					$new_url = explode("/", $url);
227
					$new_filename = ROOT."app/views/".end($new_url).".php";
228
229
					rename($filename, $new_filename);
230
231
					$value = array(
232
						"id_page" => $id_page,
233
						"balise_title" => $balise_title,
234
						"url" => $url,
235
						"meta_description" => $meta_description,
236
						"titre_page" => $titre_page,
237
						"parent" => $parent,
238
						"contenu" => $contenu
239
					);
240
241
					$dbc->prepare("UPDATE page SET titre=:titre_page, contenu=:contenu, url=:url, meta_description=:meta_description, balise_title=:balise_title, parent=:parent WHERE ID_page=:id_page", $value);
242
					$this->setAjoutLienNavigation("ID_page", $id_page, 1);
243
				}
244
				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...
245
					$_SESSION['balise_title'] = $balise_title;
246
					$_SESSION['url'] = $url;
247
					$_SESSION['meta_description'] = $meta_description;
248
					$_SESSION['titre_page'] = $titre_page;
249
					$_SESSION['parent'] = $parent;
250
					$_SESSION['contenu'] = $contenu;
251
					$_SESSION['err_modification_contenu'] = true;
252
253
					$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
254
					FlashMessage::setFlash($message);
255
				}
256
			}
257
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
258
			else {
259
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
260
				$this->erreur = true;
261
			}
262
		}
263
264
		/**
265
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
266
		 * @param $id_page
267
		 */
268
		public function setSupprimerPage($id_page) {
269
			$dbc = \core\App::getDb();
270
271
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
272
			if ($id_page != 1) {
273
				$this->getContenuPage($id_page);
274
275
				$url = explode("/", $this->url);
276
				$filename = ROOT."app/views/".end($url).".php";
277
278
				//si le fichier existe supprimer en bdd plus l fichier
279
				if (file_exists($filename)) {
280
					unlink($filename);
281
282
					$value = array(
283
						"id_page" => $id_page
284
					);
285
286
					$dbc->prepare("DELETE FROM page WHERE ID_page=:id_page", $value);
287
288
					$nav = new Navigation();
289
					$nav->setSupprimerLien("ID_page", $id_page);
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 supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
294
					$this->erreur = true;
295
				}
296
			}
297
			else {
298
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
299
				$this->erreur = true;
300
			}
301
		}
302
303
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
304
			if ($affiche !== null) {
305
				$nav = new Navigation();
306
				$nav->setTestAjoutLien($id, $value_id, $affiche);
307
			}
308
		}
309
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
310
	}