Passed
Push — master ( e0b597...f1cdd9 )
by Anthony
02:43
created

GestionContenus::setModifierPage()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 57
Code Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 57
rs 9.0309
c 0
b 0
f 0
cc 4
eloc 39
nc 3
nop 7

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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