Passed
Push — master ( f84bdb...82b3f8 )
by Anthony
02:51
created

GestionContenus::setErreurContenus()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 11
rs 9.4285
cc 1
eloc 9
nc 1
nop 9

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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
		private function setCreerFichier($new_page) {
131
			$page_type = ROOT."config/page_type/page_type.html";
132
			
133
			if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
134
				return true;
135
			}
136
			
137
			FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
138
			$this->erreur = true;
139
			return false;
140
		}
141
142
		/**
143
		 * fonction qui permet de créer un page
144
		 * @param $balise_title
145
		 * @param $url
146
		 * @param $meta_description
147
		 * @param $titre_page
148
		 * @param $parent
149
		 */
150
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
151
			$dbc = \core\App::getDb();
152
			$url = ChaineCaractere::setUrl($url);
153
			$nom_page = explode("/", $url);
154
			$nom_page = end($nom_page);
155
			$new_page = ROOT."app/views/".$nom_page.".html";
156
			$err_balise_title = $this->getTestBaliseTitle($balise_title);
157
			$err_url = $this->getTestUrl($url);
158
			$err_meta_description = $this->getTestMetaDescription($meta_description);
159
			$err_titre_page = $this->getTestTitrePage($titre_page);
160
			
161
			if ($this->erreur === true) {
162
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
163
				return false;
164
			}
165
			
166
			if ($this->setCreerFichier($new_page) === false) {
167
				return false;
168
			}
169
			
170
			$parent = intval($this->getParentId($parent));
171
			$ordre = intval($this->getOrdrePage($parent));
172
			$dbc->insert("titre", $titre_page)->insert("url", $url)->insert("meta_description", $meta_description)
173
				->insert("balise_title", $balise_title)->insert("ordre", $ordre)->insert("parent", $parent)
174
				->insert("affiche", $affiche)->into("page")->set();
175
			
176
			$this->id_page = $dbc->lastInsertId();
177
			$this->url = $url;
178
			if ($parent == "") {
179
				$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
180
			}
181
		}
182
183
		/**
184
		 * function that will create a redirection on an other site
185
		 * @param $balise_title
186
		 * @param $url
187
		 * @param $titre_page
188
		 * @param $parent
189
		 */
190
		public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) {
191
			$dbc = \core\App::getDb();
192
193
			$err_balise_title = $this->getTestBaliseTitle($balise_title);
194
			$err_url = $this->getTestUrl($url);
195
			$err_titre_page = $this->getTestTitrePage($titre_page);
196
			
197
			if ($this->erreur !== true) {
198
				$parent = intval($this->getParentId($parent));
199
				$ordre = intval($this->getOrdrePage($parent));
200
				$dbc->insert("titre", $titre_page)->insert("url", $url)->insert("balise_title", $balise_title)
201
					->insert("ordre", $ordre)->insert("parent", $parent)->insert("affiche", $affiche)
202
					->insert("target", "_blanck")->into("page")->set();
203
204
				$this->id_page = $dbc->lastInsertId();
205
				if ($parent == "") {
206
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
207
				}
208
			}
209
			else {
210
				$this->setErreurContenus($balise_title, $url, "", $titre_page, $parent, $err_balise_title, $err_url, "", $err_titre_page);
211
				$this->erreur = true;
212
			}
213
		}
214
215
		/**
216
		 * fonction qui permet de modifier une page en fonction de son id
217
		 * @param $id_page
218
		 * @param $balise_title
219
		 * @param $url
220
		 * @param $meta_description
221
		 * @param $titre_page
222
		 * @param $parent
223
		 * @param $contenu
224
		 */
225
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
226
			$dbc = \core\App::getDb();
227
			$old_url = explode("/", $this->url);
228
			$filename = ROOT."app/views/".end($old_url).".html";
229
			
230
			if (file_exists($filename) || ($id_page == 1)) {
231
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
232
				$this->erreur = true;
233
				return false;
234
			}
235
			
236
			$this->id_page = $id_page;
237
			$url = ChaineCaractere::setUrl($url);
238
			$err_balise_title = $this->getTestBaliseTitle($balise_title, $id_page);
239
			$err_url = $this->getTestUrl($url, $id_page);
240
			$err_meta_description = $this->getTestMetaDescription($meta_description, $id_page);
241
			$err_titre_page = $this->getTestTitrePage($titre_page, $id_page);
242
			
243
			if ($this->erreur !== true) {
244
				$new_url = explode("/", $url);
245
				$new_filename = ROOT."app/views/".end($new_url).".html";
246
				
247
				rename($filename, $new_filename);
248
				
249
				$parent = intval($this->getParentId($parent));
250
				$dbc->update("titre", $titre_page)->update("url", $url)->update("meta_description", $meta_description)
251
					->update("balise_title", $balise_title)->update("parent", $parent)->update("affiche", $affiche)
252
					->from("page")->where("ID_page", "=", $id_page, "", true)->set();
253
				
254
				$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
255
				$this->url = $url;
256
			}
257
			else {
258
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
259
			}
260
		}
261
262
		/**
263
		 * @param $id_page
264
		 * @param $contenu
265
		 */
266
		public function setModifierContenu($id_page, $contenu) {
267
			$dbc = \core\App::getDb();
268
269
			$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set();
270
		}
271
272
		/**
273
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
274
		 * @param $id_page
275
		 */
276
		public function setSupprimerPage() {
277
			$url = explode("/", $this->url);
278
			$filename = ROOT."app/views/".end($url).".html";
279
			
280
			if (file_exists($filename) && $this->id_page != 1) {
281
				unlink($filename);
282
				$this->setSupprimerLienNavigation();
283
				
284
				return true;
285
			}
286
			else if (ChaineCaractere::FindInString($this->url, "http://") === true) {
287
				$this->setSupprimerLienNavigation();
288
			}
289
			else {
290
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
291
				$this->erreur = true;
292
				return false;
293
			}
294
		}
295
296
		/**
297
		 * @param string $id
298
		 * @param string $value_id
299
		 * @param integer $affiche
300
		 */
301
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
302
			if ($affiche !== null) {
303
				App::getNav()->setAjoutLien($id, $value_id);
304
			}
305
		}
306
307
		/**
308
		 * @param string $id
309
		 * @param integer $affiche
310
		 */
311
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
312
			if ($parent != "") {
313
				App::getNav()->setSupprimerLien($id, $id_page);
314
			}
315
			else if (($affiche == 0) && ($parent == "")) {
316
				App::getNav()->setSupprimerLien($id, $id_page);
317
			}
318
		}
319
		
320
		/**
321
		 * delete link in nav and delete page in table
322
		 */
323
		private function setSupprimerLienNavigation() {
324
			$dbc = App::getDb();
325
			
326
			$dbc->delete()->from("page")->where("ID_page", "=", $this->id_page)->del();
327
			
328
			App::getNav()->setSupprimerLien("ID_page", $this->id_page);
329
		}
330
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
331
	}