Passed
Push — master ( bae2e5...39e222 )
by Anthony
03:12
created

GestionContenus::setSupprimerLienNavigation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 0
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) {
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...
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 {
1 ignored issue
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...
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 {
1 ignored issue
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...
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
	}