Passed
Push — master ( 517a2a...57bcce )
by Anthony
02:58
created

GestionContenus   B

Complexity

Total Complexity 41

Size/Duplication

Total Lines 342
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 41
lcom 1
cbo 7
dl 0
loc 342
rs 8.2769
c 0
b 0
f 0

17 Methods

Rating   Name   Duplication   Size   Complexity  
A getErreur() 0 3 1
A getVerifChamp() 0 12 3
A setErreurContenus() 0 11 1
A getParentId() 0 17 4
A getOrdrePage() 0 15 4
A getTestBaliseTitle() 0 5 1
A getTestUrl() 0 5 1
A getTestMetaDescription() 0 5 1
A getTestTitrePage() 0 5 1
B setCreerPage() 0 45 5
B setCreerPageRedirect() 0 31 3
B setModifierPage() 0 47 4
A setModifierContenu() 0 5 1
A setSupprimerPage() 0 19 4
A setAjoutLienNavigation() 0 5 2
A setModifierLienNavigation() 0 8 4
A setSupprimerLienNavigation() 0 7 1

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
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 != "") {
26
				$dbc = \core\App::getDb();
27
				$ordre = 1;
28
29
				$query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get();
30
				if (count($query) > 0) {
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, $id_page = null) {
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, $id_page);
87
		}
88
		
89
		private function getTestUrl($url, $id_page = null) {
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, $id_page);
93
		}
94
		
95
		private function getTestMetaDescription($meta_description, $id_page = null) {
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, $id_page);
99
		}
100
		
101
		private function getTestTitrePage($titre_page, $id_page = null) {
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, $id_page);
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
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
156
				return false;
157
			}
158
			
159
			if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
160
				$parent = intval($this->getParentId($parent));
161
				$ordre = intval($this->getOrdrePage($parent));
162
				$dbc->insert("titre", $titre_page)
163
					->insert("url", $url)
164
					->insert("meta_description", $meta_description)
165
					->insert("balise_title", $balise_title)
166
					->insert("ordre", $ordre)
167
					->insert("parent", $parent)
168
					->insert("affiche", $affiche)
169
					->into("page")
170
					->set();
171
				
172
				$this->id_page = $dbc->lastInsertId();
173
				$this->url = $url;
174
				if ($parent == "") {
175
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
176
				}
177
			}
178
			else {
179
				FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
180
				$this->erreur = true;
181
			}
182
		}
183
184
		/**
185
		 * function that will create a redirection on an other site
186
		 * @param $balise_title
187
		 * @param $url
188
		 * @param $titre_page
189
		 * @param $parent
190
		 */
191
		public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) {
192
			$dbc = \core\App::getDb();
193
194
			$err_balise_title = $this->getTestBaliseTitle($balise_title);
195
			$err_url = $this->getTestUrl($url);
196
			$err_titre_page = $this->getTestTitrePage($titre_page);
197
			
198
			if ($this->erreur !== true) {
199
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
200
				$parent = intval($this->getParentId($parent));
201
				$ordre = intval($this->getOrdrePage($parent));
202
				$dbc->insert("titre", $titre_page)
203
					->insert("url", $url)
204
					->insert("balise_title", $balise_title)
205
					->insert("ordre", $ordre)
206
					->insert("parent", $parent)
207
					->insert("affiche", $affiche)
208
					->insert("target", "_blanck")
209
					->into("page")
210
					->set();
211
212
				$this->id_page = $dbc->lastInsertId();
213
				if ($parent == "") {
214
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
215
				}
216
			}
217
			else {
218
				$this->setErreurContenus($balise_title, $url, "", $titre_page, $parent, $err_balise_title, $err_url, "", $err_titre_page);
219
				$this->erreur = true;
220
			}
221
		}
222
223
		/**
224
		 * fonction qui permet de modifier une page en fonction de son id
225
		 * @param $id_page
226
		 * @param $balise_title
227
		 * @param $url
228
		 * @param $meta_description
229
		 * @param $titre_page
230
		 * @param $parent
231
		 * @param $contenu
232
		 */
233
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
234
			$dbc = \core\App::getDb();
235
236
			//on trouve l'ancien fichier à parir de la fin de l'url
237
			$old_url = explode("/", $this->url);
238
			$filename = ROOT."app/views/".end($old_url).".html";
239
240
			//si le fichier existe on modifie le tout
241
			if (file_exists($filename) || ($id_page == 1)) {
242
				$this->id_page = $id_page;
243
				$url = ChaineCaractere::setUrl($url);
244
				
245
				$err_balise_title = $this->getTestBaliseTitle($balise_title, $id_page);
246
				$err_url = $this->getTestUrl($url, $id_page);
247
				$err_meta_description = $this->getTestMetaDescription($meta_description , $id_page);
248
				$err_titre_page = $this->getTestTitrePage($titre_page, $id_page);
249
				
250
				if ($this->erreur !== true) {
251
					$new_url = explode("/", $url);
252
					$new_filename = ROOT."app/views/".end($new_url).".html";
253
254
					rename($filename, $new_filename);
255
256
					$parent = intval($this->getParentId($parent));
257
					$dbc->update("titre", $titre_page)
258
						->update("url", $url)
259
						->update("meta_description", $meta_description)
260
						->update("balise_title", $balise_title)
261
						->update("parent", $parent)
262
						->update("affiche", $affiche)
263
						->from("page")
264
						->where("ID_page", "=", $id_page, "", true)
265
						->set();
266
267
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
268
					$this->url = $url;
269
				}
270
				else {
271
					$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
272
				}
273
			}
274
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
275
			else {
276
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
277
				$this->erreur = true;
278
			}
279
		}
280
281
		/**
282
		 * @param $id_page
283
		 * @param $contenu
284
		 */
285
		public function setModifierContenu($id_page, $contenu) {
286
			$dbc = \core\App::getDb();
287
288
			$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set();
289
		}
290
291
		/**
292
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
293
		 * @param $id_page
294
		 */
295
		public function setSupprimerPage() {
296
			$url = explode("/", $this->url);
297
			$filename = ROOT."app/views/".end($url).".html";
298
			
299
			if (file_exists($filename) && $this->id_page != 1) {
300
				unlink($filename);
301
				$this->setSupprimerLienNavigation();
302
				
303
				return true;
304
			}
305
			else if (ChaineCaractere::FindInString($this->url, "http://") === true) {
306
				$this->setSupprimerLienNavigation();
307
			}
308
			else {
309
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
310
				$this->erreur = true;
311
				return false;
312
			}
313
		}
314
315
		/**
316
		 * @param string $id
317
		 * @param string $value_id
318
		 * @param integer $affiche
319
		 */
320
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
321
			if ($affiche !== null) {
322
				App::getNav()->setAjoutLien($id, $value_id);
323
			}
324
		}
325
326
		/**
327
		 * @param string $id
328
		 * @param integer $affiche
329
		 */
330
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
331
			if ($parent != "") {
332
				App::getNav()->setSupprimerLien($id, $id_page);
333
			}
334
			else if (($affiche == 0) && ($parent == "")) {
335
				App::getNav()->setSupprimerLien($id, $id_page);
336
			}
337
		}
338
		
339
		/**
340
		 * delete link in nav and delete page in table
341
		 */
342
		private function setSupprimerLienNavigation() {
343
			$dbc = App::getDb();
344
			
345
			$dbc->delete()->from("page")->where("ID_page", "=", $this->id_page)->del();
346
			
347
			App::getNav()->setSupprimerLien("ID_page", $this->id_page);
348
		}
349
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
350
	}