Passed
Push — master ( 954e58...8ebbc0 )
by Anthony
03:24
created

GestionContenus::setModifierContenu()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
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) {
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...
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 = "";
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
			$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', true)->get();
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
56
57
			if ((is_array($query)) && (count($query) == 1)) {
58
				foreach ($query as $obj) {
59
					return $obj->ID_page;
60
				}
61
			}
62
63
			return 0;
64
		}
65
66
		/**
67
		 * @param $nom_table
68
		 * @param $nom_id_table
69
		 * @param $champ
70
		 * @param $value
71
		 * @param $limit_char
72
		 * @param $err_char
73
		 * @param $err_egalite
74
		 * @param null $value_id_table
75
		 * @return string
76
		 * fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons
77
		 */
78
		public static function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) {
79
			$dbc = App::getDb();
80
81
			if (strlen(utf8_decode($value)) > $limit_char) {
82
				self::$erreur = true;
83
				return "<li>$err_char</li>";
84
			}
85
			else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) {
86
				self::$erreur = true;
87
				return "<li>$err_egalite</li>";
88
			}
89
		}
90
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
91
92
93
94
		//-------------------------- SETTER ----------------------------------------------------------------------------//
95
		/**
96
		 * @param string $url
97
		 * @param string $err_balise_title
98
		 * @param string $err_url
99
		 * @param string $err_meta_description
100
		 * @param string $err_titre_page
101
		 */
102
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
103
			$_SESSION['balise_title'] = $balise_title;
104
			$_SESSION['url'] = $url;
105
			$_SESSION['meta_description'] = $meta_description;
106
			$_SESSION['titre_page'] = $titre_page;
107
			$_SESSION['parent'] = $parent;
108
			$_SESSION['err_modification_contenu'] = true;
109
110
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
111
			FlashMessage::setFlash($message);
112
		}
113
114
		/**
115
		 * fonction qui permet de créer un page
116
		 * @param $balise_title
117
		 * @param $url
118
		 * @param $meta_description
119
		 * @param $titre_page
120
		 * @param $parent
121
		 * @param $contenu
122
		 */
123
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
124
			$dbc = \core\App::getDb();
125
126
			$url = ChaineCaractere::setUrl($url);
127
128
			$nom_page = explode("/", $url);
129
			$nom_page = end($nom_page);
130
131
			$page_type = ROOT."config/page_type/page_type.php";
132
			$new_page = ROOT."app/views/".$nom_page.".php";
133
134
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
135
			$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";
136
			$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
137
138
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
139
			$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";
140
			$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
141
142
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
143
			$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";
144
			$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
145
146
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
147
			$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";
148
			$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
149
150
			if (App::getErreur() !== true) {
151
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
152
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
153
					$dbc->insert("titre", $titre_page)
154
						->insert("url", $url)
155
						->insert("meta_description", $meta_description)
156
						->insert("balise_title", $balise_title)
157
						->insert("ordre", $this->getOrdrePage($parent))
158
						->insert("parent", $parent)
159
						->insert("affiche", $affiche)
160
						->into("page")
161
						->set();
162
163
					$this->id_page = $dbc->lastInsertId();
164
					if ($parent != "") {
165
						$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
166
					}
167
				}
168
				else {
169
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
170
					$this->erreur = true;
171
				}
172
			}
173
			else {
174
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
175
			}
176
		}
177
178
		/**
179
		 * fonction qui permet de modifier une page en fonction de son id
180
		 * @param $id_page
181
		 * @param $balise_title
182
		 * @param $url
183
		 * @param $meta_description
184
		 * @param $titre_page
185
		 * @param $parent
186
		 * @param $contenu
187
		 */
188
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
189
			$dbc = \core\App::getDb();
190
191
			//on trouve l'ancien fichier à parir de la fin de l'url
192
			$this->getHeadPage($id_page);
193
			$this->getContenuPage($id_page);
194
			$old_url = explode("/", $this->url);
195
			$filename = ROOT."app/views/".end($old_url).".php";
196
197
			//si le fichier existe on modifie le tout
198
			if (file_exists($filename) || ($id_page == 1)) {
199
				$this->id_page = $id_page;
200
				$url = ChaineCaractere::setUrl($url);
201
202
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
203
				$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";
204
				$err_balise_title = $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
205
206
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
207
				$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";
208
				$err_url = $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
209
210
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
211
				$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";
212
				$err_meta_description = $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
213
214
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
215
				$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";
216
				$err_titre_page = $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
217
218
				if (App::getErreur() !== true) {
219
					$new_url = explode("/", $url);
220
					$new_filename = ROOT."app/views/".end($new_url).".php";
221
222
					rename($filename, $new_filename);
223
224
					$parent = $this->getParentId($parent);
225
					$dbc->update("titre", $titre_page)
226
						->update("url", $url)
227
						->update("meta_description", $meta_description)
228
						->update("balise_title", $balise_title)
229
						->update("parent", $parent)
230
						->update("affiche", $affiche)
231
						->from("page")
232
						->where("ID_page", "=", $id_page, "", true)
233
						->set();
234
235
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
236
				}
237
				else {
238
					$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
239
				}
240
			}
241
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
242
			else {
243
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
244
				$this->erreur = true;
245
			}
246
		}
247
248
		/**
249
		 * @param $id_page
250
		 * @param $contenu
251
		 */
252
		public function setModifierContenu($id_page, $contenu) {
253
			$dbc = \core\App::getDb();
254
255
			$dbc->update("contenu", $contenu)->from("page")->where("ID_page", "=", $id_page)->set();
256
		}
257
258
		/**
259
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
260
		 * @param $id_page
261
		 */
262
		public function setSupprimerPage($id_page) {
263
			$dbc = \core\App::getDb();
264
265
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
266
			if ($id_page != 1) {
267
				$this->getContenuPage($id_page);
268
269
				$url = explode("/", $this->url);
270
				$filename = ROOT."app/views/".end($url).".php";
271
272
				//si le fichier existe supprimer en bdd plus l fichier
273
				if (file_exists($filename)) {
274
					unlink($filename);
275
276
					$dbc->delete()->from("page")->where("ID_page", "=", $id_page)->del();
277
278
					$nav = new Navigation();
279
					$nav->setSupprimerLien("ID_page", $id_page);
280
				}
281
				//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
282
				else {
283
					FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
284
					$this->erreur = true;
285
				}
286
			}
287
			else {
288
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
289
				$this->erreur = true;
290
			}
291
		}
292
293
		/**
294
		 * @param string $id
295
		 * @param $value_id
296
		 * @param integer $affiche
297
		 */
298
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
299
			if ($affiche !== null) {
300
				$nav = new Navigation();
301
				$nav->setAjoutLien($id, $value_id);
302
			}
303
		}
304
305
		/**
306
		 * @param string $id
307
		 * @param integer $affiche
308
		 */
309
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
310
			if ($parent != "") {
311
				$nav = new Navigation();
312
				$nav->setSupprimerLien($id, $id_page);
313
			}
314
			else if (($affiche == 1) && ($parent == "")) {
315
				$this->setAjoutLienNavigation($id, $id_page, $affiche);
316
			}
317
		}
318
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
319
	}