Passed
Push — master ( 3bc871...7ee1fc )
by Anthony
03:10
created

GestionContenus::getBlocEditable()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 14
rs 9.2
cc 4
eloc 8
nc 2
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
		private function getOrdrePage($parent) {
21
			if (($parent != "") || ($parent != 0)) {
22
				$dbc = \core\App::getDb();
23
				$ordre = 1;
24
25
				$query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get();
26
				if ((is_array($query)) && (count($query) > 0)) {
27
					foreach ($query as $obj) {
28
						$ordre = $obj->ordre;
29
					}
30
				}
31
32
				return $ordre;
33
			}
34
		}
35
36
		private function getParentId($parent) {
37
			$dbc = \core\App::getDb();
38
39
			if ($parent == "") return 0;
40
41
			$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', "", true)->get();
42
43
			if ((is_array($query)) && (count($query) == 1)) {
44
				foreach ($query as $obj) {
45
					return $obj->ID_page;
46
				}
47
			}
48
49
			return 0;
50
		}
51
52
		/**
53
		 * @param $nom_table
54
		 * @param $nom_id_table
55
		 * @param $champ
56
		 * @param $value
57
		 * @param $limit_char
58
		 * @param $err_char
59
		 * @param $err_egalite
60
		 * @param null $value_id_table
61
		 * @return string
62
		 * fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons
63
		 */
64
		private function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) {
65
			$dbc = App::getDb();
66
67
			if (strlen(utf8_decode($value)) > $limit_char) {
68
				$this->erreur = true;
69
				return "<li>$err_char</li>";
70
			}
71
			else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) {
72
				$this->erreur = true;
73
				return "<li>$err_egalite</li>";
74
			}
75
		}
76
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
77
78
79
80
		//-------------------------- SETTER ----------------------------------------------------------------------------//
81
		/**
82
		 * @param string $url
83
		 * @param string $err_balise_title
84
		 * @param string $err_url
85
		 * @param string $err_meta_description
86
		 * @param string $err_titre_page
87
		 */
88
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
89
			$_SESSION['balise_title'] = $balise_title;
90
			$_SESSION['url'] = $url;
91
			$_SESSION['meta_description'] = $meta_description;
92
			$_SESSION['titre_page'] = $titre_page;
93
			$_SESSION['parent'] = $parent;
94
			$_SESSION['err_modification_contenu'] = true;
95
96
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
97
			FlashMessage::setFlash($message);
98
		}
99
100
		/**
101
		 * fonction qui permet de créer un page
102
		 * @param $balise_title
103
		 * @param $url
104
		 * @param $meta_description
105
		 * @param $titre_page
106
		 * @param $parent
107
		 */
108
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
109
			$dbc = \core\App::getDb();
110
111
			$url = ChaineCaractere::setUrl($url);
112
113
			$nom_page = explode("/", $url);
114
			$nom_page = end($nom_page);
115
116
			$page_type = ROOT."config/page_type/page_type.html";
117
			$new_page = ROOT."app/views/".$nom_page.".html";
118
119
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
120
			$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";
121
			$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
122
123
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
124
			$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";
125
			$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
126
127
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
128
			$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";
129
			$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
130
131
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
132
			$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";
133
			$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
134
135
			if ($this->erreur !== true) {
136
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
137
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
138
					$parent = intval($this->getParentId($parent));
139
					$ordre = intval($this->getOrdrePage($parent));
140
					$dbc->insert("titre", $titre_page)
141
						->insert("url", $url)
142
						->insert("meta_description", $meta_description)
143
						->insert("balise_title", $balise_title)
144
						->insert("ordre", $ordre)
145
						->insert("parent", $parent)
146
						->insert("affiche", $affiche)
147
						->into("page")
148
						->set();
149
150
					$this->id_page = $dbc->lastInsertId();
151
					$this->url = $url;
152
					if ($parent == "") {
153
						$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
154
					}
155
				}
156
				else {
157
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
158
					$this->erreur = true;
159
				}
160
			}
161 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...
162
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
163
				$this->erreur = true;
164
			}
165
		}
166
167
		/**
168
		 * function that will create a redirection on an other site
169
		 * @param $balise_title
170
		 * @param $url
171
		 * @param $titre_page
172
		 * @param $parent
173
		 */
174
		public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) {
175
			$dbc = \core\App::getDb();
176
177
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
178
			$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";
179
			$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
180
181
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
182
			$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";
183
			$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
184
185
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
186
			$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";
187
			$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
188
189
			if ($this->erreur !== true) {
190
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
191
				$parent = intval($this->getParentId($parent));
192
				$ordre = intval($this->getOrdrePage($parent));
193
				$dbc->insert("titre", $titre_page)
194
					->insert("url", $url)
195
					->insert("balise_title", $balise_title)
196
					->insert("ordre", $ordre)
197
					->insert("parent", $parent)
198
					->insert("affiche", $affiche)
199
					->insert("target", "_blanck")
200
					->into("page")
201
					->set();
202
203
				$this->id_page = $dbc->lastInsertId();
204
				if ($parent == "") {
205
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
206
				}
207
			}
208 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...
209
				$this->setErreurContenus($balise_title, $url, "", $titre_page, $parent, $err_balise_title, $err_url, "", $err_titre_page);
210
				$this->erreur = true;
211
			}
212
		}
213
214
		/**
215
		 * fonction qui permet de modifier une page en fonction de son id
216
		 * @param $id_page
217
		 * @param $balise_title
218
		 * @param $url
219
		 * @param $meta_description
220
		 * @param $titre_page
221
		 * @param $parent
222
		 * @param $contenu
223
		 */
224
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
225
			$dbc = \core\App::getDb();
226
227
			//on trouve l'ancien fichier à parir de la fin de l'url
228
			$old_url = explode("/", $this->url);
229
			$filename = ROOT."app/views/".end($old_url).".html";
230
231
			//si le fichier existe on modifie le tout
232
			if (file_exists($filename) || ($id_page == 1)) {
233
				$this->id_page = $id_page;
234
				$url = ChaineCaractere::setUrl($url);
235
236
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
237
				$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";
238
				$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
239
240
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
241
				$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";
242
				$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
243
244
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
245
				$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";
246
				$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
247
248
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
249
				$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";
250
				$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_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 $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
	}