Passed
Push — master ( 686cdd...e901da )
by Anthony
03:41
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
		private $parent_texte;
12
		private $erreur;
13
14
15
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
16
		public function __construct() {
17
18
		}
19
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
20
21
22
23
		//-------------------------- GETTER ----------------------------------------------------------------------------//
24
		public function getErreur() {
25
			return $this->erreur;
26
		}
27
28
		public function getParentTexte($parent) {
29
			$dbc = \core\App::getDb();
30
31
			$query = $dbc->select("titre")->from("page")->where("ID_page", "=", $parent)->get();
32
33
			if ((is_array($query)) && (count($query) > 0)) {
34
				foreach ($query as $obj) $this->parent_texte = $obj->titre;
35
			}
36
37
			return $this->parent_texte;
38
		}
39
40
		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...
41
			$dbc= App::getDb();
42
			$bloc_editable = 0;
43
44
			$query = $dbc->select("bloc_editable")->from("page")->where("ID_page", "=", $id_page_courante)->get();
45
46
			if ((is_array($query)) && (count($query) > 0)) {
47
				foreach ($query as $obj) {
48
					$bloc_editable = $obj->bloc_editable;
49
				}
50
			}
51
52
			return $bloc_editable;
53
		}
54
55
		private function getOrdrePage($parent) {
56
			if (($parent != "") || ($parent != 0)) {
57
				$dbc = \core\App::getDb();
58
				$ordre = "";
59
60
				$query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get();
61
				if ((is_array($query)) && (count($query) > 0)) {
62
					foreach ($query as $obj) {
63
						$ordre = $obj->ordre;
64
					}
65
				}
66
67
				return $ordre;
68
			}
69
		}
70
71
		private function getParentId($parent) {
72
			$dbc = \core\App::getDb();
73
74
			$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...
75
76
			if ((is_array($query)) && (count($query) == 1)) {
77
				foreach ($query as $obj) {
78
					return $obj->ID_page;
79
				}
80
			}
81
82
			return 0;
83
		}
84
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
85
86
87
88
		//-------------------------- SETTER ----------------------------------------------------------------------------//
89
90
		/**
91
		 * @param string $url
92
		 * @param string $err_balise_title
93
		 * @param string $err_url
94
		 * @param string $err_meta_description
95
		 * @param string $err_titre_page
96
		 */
97
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
98
			$_SESSION['balise_title'] = $balise_title;
99
			$_SESSION['url'] = $url;
100
			$_SESSION['meta_description'] = $meta_description;
101
			$_SESSION['titre_page'] = $titre_page;
102
			$_SESSION['parent'] = $parent;
103
			$_SESSION['err_modification_contenu'] = true;
104
105
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
106
			FlashMessage::setFlash($message);
107
		}
108
109
		/**
110
		 * fonction qui permet de créer un page
111
		 * @param $balise_title
112
		 * @param $url
113
		 * @param $meta_description
114
		 * @param $titre_page
115
		 * @param $parent
116
		 * @param $contenu
117
		 */
118
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
119
			$dbc = \core\App::getDb();
120
121
			$url = ChaineCaractere::setUrl($url);
122
123
			$nom_page = explode("/", $url);
124
			$nom_page = end($nom_page);
125
126
			$page_type = ROOT."config/page_type/page_type.php";
127
			$new_page = ROOT."app/views/".$nom_page.".php";
128
129
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
130
			$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";
131
			$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
132
133
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
134
			$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";
135
			$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
136
137
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
138
			$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";
139
			$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
140
141
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
142
			$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";
143
			$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
144
145
			if (App::getErreur() !== true) {
146
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
147
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
148
					$dbc->insert("titre", $titre_page)
149
						->insert("url", $url)
150
						->insert("meta_description", $meta_description)
151
						->insert("balise_title", $balise_title)
152
						->insert("ordre", $this->getOrdrePage($parent))
153
						->insert("parent", $parent)
154
						->insert("affiche", $affiche)
155
						->into("page")
156
						->set();
157
158
					$this->id_page = $dbc->lastInsertId();
159
					$this->setAjoutLienNavigation("ID_page", $this->id_page, 1);
160
				}
161
				else {
162
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
163
					$this->erreur = true;
164
				}
165
			}
166
			else {
167
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
168
			}
169
		}
170
171
		/**
172
		 * fonction qui permet de modifier une page en fonction de son id
173
		 * @param $id_page
174
		 * @param $balise_title
175
		 * @param $url
176
		 * @param $meta_description
177
		 * @param $titre_page
178
		 * @param $parent
179
		 * @param $contenu
180
		 */
181
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) {
182
			$dbc = \core\App::getDb();
183
184
			//on trouve l'ancien fichier à parir de la fin de l'url
185
			$this->getHeadPage($id_page);
186
			$this->getContenuPage($id_page);
187
			$old_url = explode("/", $this->url);
188
			$filename = ROOT."app/views/".end($old_url).".php";
189
190
			//si le fichier existe on modifie le tout
191
			if (file_exists($filename) || ($id_page == 1)) {
192
				$this->id_page = $id_page;
193
				$url = ChaineCaractere::setUrl($url);
194
195
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
196
				$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";
197
				$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
198
199
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
200
				$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";
201
				$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
202
203
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
204
				$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";
205
				$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
206
207
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
208
				$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";
209
				$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
210
211
				if (App::getErreur() !== true) {
212
					$new_url = explode("/", $url);
213
					$new_filename = ROOT."app/views/".end($new_url).".php";
214
215
					rename($filename, $new_filename);
216
217
					$parent = $this->getParentId($parent);
218
					$dbc->update("titre", $titre_page)
219
						->update("url", $url)
220
						->update("meta_description", $meta_description)
221
						->update("balise_title", $balise_title)
222
						->update("parent", $parent)
223
						->update("affiche", $affiche)
224
						->from("page")
225
						->where("ID_page", "=", $id_page, "", true)
226
						->set();
227
228
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
229
				}
230
				else {
231
					$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
232
				}
233
			}
234
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
235
			else {
236
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
237
				$this->erreur = true;
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($id_page) {
256
			$dbc = \core\App::getDb();
257
258
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
259
			if ($id_page != 1) {
260
				$this->getContenuPage($id_page);
261
262
				$url = explode("/", $this->url);
263
				$filename = ROOT."app/views/".end($url).".php";
264
265
				//si le fichier existe supprimer en bdd plus l fichier
266
				if (file_exists($filename)) {
267
					unlink($filename);
268
269
					$dbc->delete()->from("page")->where("ID_page", "=", $id_page)->del();
270
271
					$nav = new Navigation();
272
					$nav->setSupprimerLien("ID_page", $id_page);
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 supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
277
					$this->erreur = true;
278
				}
279
			}
280
			else {
281
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
282
				$this->erreur = true;
283
			}
284
		}
285
286
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
287
			if ($affiche !== null) {
288
				$nav = new Navigation();
289
				$nav->setAjoutLien($id, $value_id);
290
			}
291
		}
292
293
		/**
294
		 * @param string $id
295
		 * @param integer $affiche
296
		 */
297
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
298
			if ($parent != "") {
299
				$nav = new Navigation();
300
				$nav->setSupprimerLien($id, $id_page);
301
			}
302
			else if (($affiche == 1) && ($parent == "")) {
303
				$this->setAjoutLienNavigation($id, $id_page, $affiche);
304
			}
305
		}
306
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
307
	}