Passed
Push — master ( 1faf28...95951e )
by Anthony
02:22
created

GestionContenus   B

Complexity

Total Complexity 42

Size/Duplication

Total Lines 361
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
dl 0
loc 361
rs 8.295
c 0
b 0
f 0
wmc 42
lcom 1
cbo 7

How to fix   Complexity   

Complex Class

Complex classes like GestionContenus often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use GestionContenus, and based on these observations, apply Extract Interface, too.

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
	use core\Navigation;
9
10
	class GestionContenus extends Contenus {
11
		use ParentTexte;
12
13
		private $erreur;
14
15
16
		//-------------------------- GETTER ----------------------------------------------------------------------------//
17
		public function getErreur() {
18
			return $this->erreur;
19
		}
20
21
		public function getBlocEditable($id_page_courante) {
22
			$dbc = App::getDb();
23
			$bloc_editable = 0;
24
25
			$query = $dbc->select("bloc_editable")->from("page")->where("ID_page", "=", $id_page_courante)->get();
26
27
			if ((is_array($query)) && (count($query) > 0)) {
28
				foreach ($query as $obj) {
29
					$bloc_editable = $obj->bloc_editable;
30
				}
31
			}
32
33
			return $bloc_editable;
34
		}
35
36
		private function getOrdrePage($parent) {
37
			if (($parent != "") || ($parent != 0)) {
38
				$dbc = \core\App::getDb();
39
				$ordre = 1;
40
41
				$query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get();
42
				if ((is_array($query)) && (count($query) > 0)) {
43
					foreach ($query as $obj) {
44
						$ordre = $obj->ordre;
45
					}
46
				}
47
48
				return $ordre;
49
			}
50
		}
51
52
		private function getParentId($parent) {
53
			$dbc = \core\App::getDb();
54
55
			if ($parent == "") return 0;
56
57
			$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', "", true)->get();
58
59
			if ((is_array($query)) && (count($query) == 1)) {
60
				foreach ($query as $obj) {
61
					return $obj->ID_page;
62
				}
63
			}
64
65
			return 0;
66
		}
67
68
		/**
69
		 * @param $nom_table
70
		 * @param $nom_id_table
71
		 * @param $champ
72
		 * @param $value
73
		 * @param $limit_char
74
		 * @param $err_char
75
		 * @param $err_egalite
76
		 * @param null $value_id_table
77
		 * @return string
78
		 * fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons
79
		 */
80
		private function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) {
81
			$dbc = App::getDb();
82
83
			if (strlen(utf8_decode($value)) > $limit_char) {
84
				$this->erreur = true;
85
				return "<li>$err_char</li>";
86
			}
87
			else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) {
88
				$this->erreur = true;
89
				return "<li>$err_egalite</li>";
90
			}
91
		}
92
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
93
94
95
96
		//-------------------------- SETTER ----------------------------------------------------------------------------//
97
		/**
98
		 * @param string $url
99
		 * @param string $err_balise_title
100
		 * @param string $err_url
101
		 * @param string $err_meta_description
102
		 * @param string $err_titre_page
103
		 */
104
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
105
			$_SESSION['balise_title'] = $balise_title;
106
			$_SESSION['url'] = $url;
107
			$_SESSION['meta_description'] = $meta_description;
108
			$_SESSION['titre_page'] = $titre_page;
109
			$_SESSION['parent'] = $parent;
110
			$_SESSION['err_modification_contenu'] = true;
111
112
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
113
			FlashMessage::setFlash($message);
114
		}
115
116
		/**
117
		 * fonction qui permet de créer un page
118
		 * @param $balise_title
119
		 * @param $url
120
		 * @param $meta_description
121
		 * @param $titre_page
122
		 * @param $parent
123
		 */
124
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
125
			$dbc = \core\App::getDb();
126
127
			$url = ChaineCaractere::setUrl($url);
128
129
			$nom_page = explode("/", $url);
130
			$nom_page = end($nom_page);
131
132
			$page_type = ROOT."config/page_type/page_type.php";
133
			$new_page = ROOT."app/views/".$nom_page.".php";
134
135
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
136
			$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";
137
			$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
138
139
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
140
			$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";
141
			$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
142
143
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
144
			$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";
145
			$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
146
147
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
148
			$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";
149
			$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
150
151
			if (App::getErreur() !== true) {
152
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
153
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
154
					$parent = intval($this->getParentId($parent));
155
					$ordre = intval($this->getOrdrePage($parent));
156
					$dbc->insert("titre", $titre_page)
157
						->insert("url", $url)
158
						->insert("meta_description", $meta_description)
159
						->insert("balise_title", $balise_title)
160
						->insert("ordre", $ordre)
161
						->insert("parent", $parent)
162
						->insert("affiche", $affiche)
163
						->into("page")
164
						->set();
165
166
					$this->id_page = $dbc->lastInsertId();
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
			else {
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 (App::getErreur() !== 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
			else {
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
			$this->getHeadPage($id_page);
244
			$this->getContenuPage($id_page);
245
			$old_url = explode("/", $this->url);
246
			$filename = ROOT."app/views/".end($old_url).".php";
247
248
			//si le fichier existe on modifie le tout
249
			if (file_exists($filename) || ($id_page == 1)) {
250
				$this->id_page = $id_page;
251
				$url = ChaineCaractere::setUrl($url);
252
253
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
254
				$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";
255
				$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
256
257
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
258
				$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";
259
				$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
260
261
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
262
				$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";
263
				$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
264
265
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
266
				$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";
267
				$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
268
269
				if (App::getErreur() !== true) {
270
					$new_url = explode("/", $url);
271
					$new_filename = ROOT."app/views/".end($new_url).".php";
272
273
					rename($filename, $new_filename);
274
275
					$parent = intval($this->getParentId($parent));
276
					$dbc->update("titre", $titre_page)
277
						->update("url", $url)
278
						->update("meta_description", $meta_description)
279
						->update("balise_title", $balise_title)
280
						->update("parent", $parent)
281
						->update("affiche", $affiche)
282
						->from("page")
283
						->where("ID_page", "=", $id_page, "", true)
284
						->set();
285
286
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
287
				}
288
				else {
289
					$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
290
				}
291
			}
292
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
293
			else {
294
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
295
				$this->erreur = true;
296
			}
297
		}
298
299
		/**
300
		 * @param $id_page
301
		 * @param $contenu
302
		 */
303
		public function setModifierContenu($id_page, $contenu) {
304
			$dbc = \core\App::getDb();
305
306
			$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set();
307
		}
308
309
		/**
310
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
311
		 * @param $id_page
312
		 */
313
		public function setSupprimerPage($id_page) {
314
			$dbc = \core\App::getDb();
315
316
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
317
			if ($id_page != 1) {
318
				$this->getContenuPage($id_page);
319
320
				$url = explode("/", $this->url);
321
				$filename = ROOT."app/views/".end($url).".php";
322
323
				//si le fichier existe supprimer en bdd plus l fichier
324
				if (file_exists($filename)) {
325
					unlink($filename);
326
327
					$dbc->delete()->from("page")->where("ID_page", "=", $id_page)->del();
328
329
					$nav = new Navigation();
330
					$nav->setSupprimerLien("ID_page", $id_page);
331
				}
332
				//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
333
				else {
334
					FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
335
					$this->erreur = true;
336
				}
337
			}
338
			else {
339
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
340
				$this->erreur = true;
341
			}
342
		}
343
344
		/**
345
		 * @param string $id
346
		 * @param $value_id
347
		 * @param integer $affiche
348
		 */
349
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
350
			if ($affiche !== null) {
351
				$nav = new Navigation();
352
				$nav->setAjoutLien($id, $value_id);
353
			}
354
		}
355
356
		/**
357
		 * @param string $id
358
		 * @param integer $affiche
359
		 */
360
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
361
			if ($parent != "") {
362
				$nav = new Navigation();
363
				$nav->setSupprimerLien($id, $id_page);
364
			}
365
			else if (($affiche == 1) && ($parent == "")) {
366
				$this->setAjoutLienNavigation($id, $id_page, $affiche);
367
			}
368
		}
369
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
370
	}