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

GestionContenus::setCreerFichier()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 2
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
		/**
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
	}