Passed
Push — master ( febd2a...555f13 )
by Anthony
02:59
created

GestionContenus::getOrdrePage()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
rs 9.2
c 0
b 0
f 0
cc 4
eloc 9
nc 3
nop 1
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
	}