Passed
Push — master ( 86e6da...16ec04 )
by Anthony
02:54
created

GestionContenus::getParentId()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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