Passed
Push — master ( febd2a...555f13 )
by Anthony
02:59
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
		private function getParentId($parent) {
21
			$dbc = \core\App::getDb();
22
23
			if ($parent == "") {
24
				return 0;
25
			}
26
27
			$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', "", true)->get();
28
29
			if (count($query) == 1) {
30
				foreach ($query as $obj) {
31
					return $obj->ID_page;
32
				}
33
			}
34
35
			return 0;
36
		}
37
38
		/**
39
		 * @param string $nom_table
40
		 * @param string $nom_id_table
41
		 * @param string $champ
42
		 * @param $value
43
		 * @param integer $limit_char
44
		 * @param string $err_char
45
		 * @param string $err_egalite
46
		 * @param null $value_id_table
47
		 * @return string
48
		 * fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons
49
		 */
50
		private function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) {
51
			$dbc = App::getDb();
52
53
			if (strlen(utf8_decode($value)) > $limit_char) {
54
				$this->erreur = true;
55
				return "<li>$err_char</li>";
56
			}
57
			else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) {
58
				$this->erreur = true;
59
				return "<li>$err_egalite</li>";
60
			}
61
		}
62
		
63
		private function getTestBaliseTitle($balise_title, $id_page = null) {
64
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
65
			$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";
66
			return $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $id_page);
67
		}
68
		
69
		private function getTestUrl($url, $id_page = null) {
70
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
71
			$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";
72
			return $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $id_page);
73
		}
74
		
75
		private function getTestMetaDescription($meta_description, $id_page = null) {
76
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
77
			$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";
78
			return $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $id_page);
79
		}
80
		
81
		private function getTestTitrePage($titre_page, $id_page = null) {
82
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
83
			$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";
84
			return $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $id_page);
85
		}
86
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
87
88
89
90
		//-------------------------- SETTER ----------------------------------------------------------------------------//
91
		/**
92
		 * @param string $url
93
		 * @param string $err_balise_title
94
		 * @param string $err_url
95
		 * @param string $err_meta_description
96
		 * @param string $err_titre_page
97
		 */
98
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
99
			$_SESSION['balise_title'] = $balise_title;
100
			$_SESSION['url'] = $url;
101
			$_SESSION['meta_description'] = $meta_description;
102
			$_SESSION['titre_page'] = $titre_page;
103
			$_SESSION['parent'] = $parent;
104
			$_SESSION['err_modification_contenu'] = true;
105
106
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
107
			FlashMessage::setFlash($message);
108
		}
109
		
110
		private function setCreerFichier($new_page) {
111
			$page_type = ROOT."config/page_type/page_type.html";
112
			
113
			if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
114
				return true;
115
			}
116
			
117
			FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
118
			$this->erreur = true;
119
			return false;
120
		}
121
122
		/**
123
		 * fonction qui permet de créer un page
124
		 * @param $balise_title
125
		 * @param $url
126
		 * @param $meta_description
127
		 * @param $titre_page
128
		 * @param $parent
129
		 */
130
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
131
			$dbc = \core\App::getDb();
132
			$url = ChaineCaractere::setUrl($url);
133
			$nom_page = explode("/", $url);
134
			$nom_page = end($nom_page);
135
			$new_page = ROOT."app/views/".$nom_page.".html";
136
			$err_balise_title = $this->getTestBaliseTitle($balise_title);
137
			$err_url = $this->getTestUrl($url);
138
			$err_meta_description = $this->getTestMetaDescription($meta_description);
139
			$err_titre_page = $this->getTestTitrePage($titre_page);
140
			
141
			if ($this->erreur === true) {
142
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
143
				return false;
144
			}
145
			
146
			if ($this->setCreerFichier($new_page) === false) {
147
				return false;
148
			}
149
			
150
			$parent = intval($this->getParentId($parent));
151
			$dbc->insert("titre", $titre_page)->insert("url", $url)->insert("meta_description", $meta_description)
152
				->insert("balise_title", $balise_title)->insert("parent", $parent)
153
				->insert("affiche", $affiche)->into("page")->set();
154
			
155
			$this->id_page = $dbc->lastInsertId();
156
			$this->url = $url;
157
			if ($parent == "") {
158
				$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
159
			}
160
		}
161
162
		/**
163
		 * function that will create a redirection on an other site
164
		 * @param $balise_title
165
		 * @param $url
166
		 * @param $titre_page
167
		 * @param $parent
168
		 */
169
		public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) {
170
			$dbc = \core\App::getDb();
171
			$err_balise_title = $this->getTestBaliseTitle($balise_title);
172
			$err_url = $this->getTestUrl($url);
173
			$err_titre_page = $this->getTestTitrePage($titre_page);
174
			
175
			if ($this->erreur !== true) {
176
				$parent = intval($this->getParentId($parent));
177
				$dbc->insert("titre", $titre_page)->insert("url", $url)->insert("balise_title", $balise_title)->insert("parent", $parent)->insert("affiche", $affiche)->insert("target", "_blanck")->into("page")->set();
178
				$this->id_page = $dbc->lastInsertId();
179
				if ($parent == "") {
180
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
181
				}
182
			}
183
			else {
184
				$this->setErreurContenus($balise_title, $url, "", $titre_page, $parent, $err_balise_title, $err_url, "", $err_titre_page);
185
				$this->erreur = true;
186
			}
187
		}
188
189
		/**
190
		 * fonction qui permet de modifier une page en fonction de son id
191
		 * @param $id_page
192
		 * @param $balise_title
193
		 * @param $url
194
		 * @param $meta_description
195
		 * @param $titre_page
196
		 * @param $parent
197
		 * @param $contenu
198
		 */
199
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
200
			$dbc = \core\App::getDb();
201
			$old_url = explode("/", $this->url);
202
			$filename = ROOT."app/views/".end($old_url).".html";
203
			
204
			if (file_exists($filename) || ($id_page == 1)) {
205
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
206
				$this->erreur = true;
207
				return false;
208
			}
209
			
210
			$this->id_page = $id_page;
211
			$url = ChaineCaractere::setUrl($url);
212
			$err_balise_title = $this->getTestBaliseTitle($balise_title, $id_page);
213
			$err_url = $this->getTestUrl($url, $id_page);
214
			$err_meta_description = $this->getTestMetaDescription($meta_description, $id_page);
215
			$err_titre_page = $this->getTestTitrePage($titre_page, $id_page);
216
			
217
			if ($this->erreur !== true) {
218
				$new_url = explode("/", $url);
219
				$new_filename = ROOT."app/views/".end($new_url).".html";
220
				
221
				rename($filename, $new_filename);
222
				
223
				$parent = intval($this->getParentId($parent));
224
				$dbc->update("titre", $titre_page)
225
					->update("url", $url)
226
					->update("meta_description", $meta_description)
227
					->update("balise_title", $balise_title)
228
					->update("parent", $parent)
229
					->update("affiche", $affiche)
230
					->from("page")->where("ID_page", "=", $id_page, "", true)
231
					->set();
232
				
233
				$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
234
				$this->url = $url;
235
			}
236
			else {
237
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
238
			}
239
		}
240
241
		/**
242
		 * @param $id_page
243
		 * @param $contenu
244
		 */
245
		public function setModifierContenu($id_page, $contenu) {
246
			$dbc = \core\App::getDb();
247
248
			$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set();
249
		}
250
251
		/**
252
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
253
		 * @param $id_page
254
		 */
255
		public function setSupprimerPage() {
256
			$url = explode("/", $this->url);
257
			$filename = ROOT."app/views/".end($url).".html";
258
			
259
			if (file_exists($filename) && $this->id_page != 1) {
260
				unlink($filename);
261
				$this->setSupprimerLienNavigation();
262
				
263
				return true;
264
			}
265
			else if (ChaineCaractere::FindInString($this->url, "http://") === true) {
266
				$this->setSupprimerLienNavigation();
267
			}
268
			else {
269
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
270
				$this->erreur = true;
271
				return false;
272
			}
273
		}
274
275
		/**
276
		 * @param string $id
277
		 * @param string $value_id
278
		 * @param integer $affiche
279
		 */
280
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
281
			if ($affiche !== null) {
282
				App::getNav()->setAjoutLien($id, $value_id);
283
			}
284
		}
285
286
		/**
287
		 * @param string $id
288
		 * @param integer $affiche
289
		 */
290
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
291
			if ($parent != "") {
292
				App::getNav()->setSupprimerLien($id, $id_page);
293
			}
294
			else if (($affiche == 0) && ($parent == "")) {
295
				App::getNav()->setSupprimerLien($id, $id_page);
296
			}
297
		}
298
		
299
		/**
300
		 * delete link in nav and delete page in table
301
		 */
302
		private function setSupprimerLienNavigation() {
303
			$dbc = App::getDb();
304
			
305
			$dbc->delete()->from("page")->where("ID_page", "=", $this->id_page)->del();
306
			
307
			App::getNav()->setSupprimerLien("ID_page", $this->id_page);
308
		}
309
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
310
	}