Passed
Push — master ( 18b8ef...01ef95 )
by Anthony
03:02
created

GestionContenus::setModifierPage()   B

Complexity

Conditions 4
Paths 3

Size

Total Lines 60
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 60
rs 8.9618
cc 4
eloc 41
nc 3
nop 8

How to fix   Long Method    Many Parameters   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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\admin\droitsacces\DroitAcces;
7
	use core\functions\ChaineCaractere;
8
	use core\HTML\flashmessage\FlashMessage;
9
	use core\Navigation;
10
11
	class GestionContenus extends Contenus {
12
		private $parent_texte;
13
		private $erreur;
14
15
16
		//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------//
17
		public function __construct() {
18
19
		}
20
		//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------//
21
22
23
24
		//-------------------------- GETTER ----------------------------------------------------------------------------//
25
		public function getErreur() {
26
			return $this->erreur;
27
		}
28
29
		public function getParentTexte($parent) {
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...
30
			$dbc = \core\App::getDb();
31
32
			$query = $dbc->query("SELECT titre FROM page WHERE ID_page=".$parent);
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
		private function getOrdrePage($parent) {
41
			if (($parent != "") || ($parent != 0)) {
42
				$dbc = \core\App::getDb();
43
				$ordre = "";
44
45
				$query = $dbc->query("SELECT ordre FROM page ORDER BY ordre DESC LIMIT 1");
46
				if ((is_array($query)) && (count($query) > 0)) {
47
					foreach ($query as $obj) {
48
						$ordre = $obj->ordre;
49
					}
50
				}
51
52
				return $ordre;
53
			}
54
		}
55
56
		private function getParentId($parent) {
57
			$dbc = \core\App::getDb();
58
59
			$query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"')->get();
60
61
			if ((is_array($query)) && (count($query) == 1)) {
62
				foreach ($query as $obj) {
63
					return $obj->ID_page;
64
				}
65
			}
66
67
			return 0;
68
		}
69
		//-------------------------- FIN GETTER ----------------------------------------------------------------------------//
70
71
72
73
		//-------------------------- SETTER ----------------------------------------------------------------------------//
74
		private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) {
75
			$_SESSION['balise_title'] = $balise_title;
76
			$_SESSION['url'] = $url;
77
			$_SESSION['meta_description'] = $meta_description;
78
			$_SESSION['titre_page'] = $titre_page;
79
			$_SESSION['parent'] = $parent;
80
			$_SESSION['contenu'] = $contenu;
81
			$_SESSION['err_modification_contenu'] = true;
82
83
			$message = "<ul>".$err_balise_title.$err_url.$err_meta_description.$err_titre_page."</ul>";
84
			FlashMessage::setFlash($message);
85
		}
86
87
		/**
88
		 * fonction qui permet de créer un page
89
		 * @param $balise_title
90
		 * @param $url
91
		 * @param $meta_description
92
		 * @param $titre_page
93
		 * @param $parent
94
		 * @param $contenu
95
		 */
96
		public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = 1) {
97
			$dbc = \core\App::getDb();
98
99
			$url = ChaineCaractere::setUrl($url);
100
101
			$nom_page = explode("/", $url);
102
			$nom_page = end($nom_page);
103
104
			$page_type = ROOT."config/page_type/page_type.php";
105
			$new_page = ROOT."app/views/".$nom_page.".php";
106
107
			$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
108
			$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";
109
			$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite);
110
111
			$err_url_char = "L'url ne doit pas dépasser 92 caractères";
112
			$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";
113
			$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite);
114
115
			$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
116
			$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";
117
			$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite);
118
119
			$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
120
			$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";
121
			$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite);
122
123
			if (App::getErreur() !== true) {
124
				//si le fichier n'existe pas et que la copy est ok on insert en bdd
125
				if ((!file_exists($new_page)) && (copy($page_type, $new_page))) {
126
					$value = array(
127
						"balise_title" => $balise_title,
128
						"url" => $url,
129
						"meta_description" => $meta_description,
130
						"titre" => $titre_page,
131
						"parent" => $parent,
132
						"contenu" => $contenu,
133
						"ordre" => $this->getOrdrePage($parent),
134
						"affiche" => $affiche
135
					);
136
137
					$dbc->prepare("INSERT INTO page (titre, contenu, url, meta_description, balise_title, ordre, parent, affiche) VALUES (:titre, :contenu, :url, :meta_description, :balise_title, :ordre, :parent, :affiche)", $value);
138
					$this->id_page = $dbc->lastInsertId();
139
					$this->setAjoutLienNavigation("ID_page", $this->id_page , 1);
140
				}
141
				else {
142
					FlashMessage::setFlash("Impossible de créer cette page, veuillez réeseyer dans un moment. Si le problème persiste contactez votre administrateur.");
143
					$this->erreur = true;
144
				}
145
			}
146
			else {
147
				$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
148
			}
149
		}
150
151
		/**
152
		 * fonction qui permet de modifier une page en fonction de son id
153
		 * @param $id_page
154
		 * @param $balise_title
155
		 * @param $url
156
		 * @param $meta_description
157
		 * @param $titre_page
158
		 * @param $parent
159
		 * @param $contenu
160
		 */
161
		public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $affiche = 1) {
162
			$dbc = \core\App::getDb();
163
164
			//on trouve l'ancien fichier à parir de la fin de l'url
165
			$this->getHeadPage($id_page);
166
			$this->getContenuPage($id_page);
167
			$old_url = explode("/", $this->url);
168
			$filename = ROOT."app/views/".end($old_url).".php";
169
170
			//si le fichier existe on modifie le tout
171
			if (file_exists($filename) || ($id_page == 1)) {
172
				$this->id_page = $id_page;
173
				$url = ChaineCaractere::setUrl($url);
174
175
				$err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères";
176
				$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";
177
				$err_balise_title = App::getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite, $this->id_page);
178
179
				$err_url_char = "L'url ne doit pas dépasser 92 caractères";
180
				$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";
181
				$err_url = App::getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite, $this->id_page);
182
183
				$err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères";
184
				$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";
185
				$err_meta_description = App::getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite, $this->id_page);
186
187
				$err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères";
188
				$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";
189
				$err_titre_page = App::getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite, $this->id_page);
190
191
				if (App::getErreur() !== true) {
192
					$new_url = explode("/", $url);
193
					$new_filename = ROOT."app/views/".end($new_url).".php";
194
195
					rename($filename, $new_filename);
196
197
					$value = array(
198
						"id_page" => $id_page,
199
						"balise_title" => $balise_title,
200
						"url" => $url,
201
						"meta_description" => $meta_description,
202
						"titre_page" => $titre_page,
203
						"parent" => $this->getParentId($parent),
204
						"contenu" => $contenu,
205
						"affiche" => $affiche
206
					);
207
208
					$dbc->prepare("UPDATE page SET titre=:titre_page, contenu=:contenu, url=:url, meta_description=:meta_description, balise_title=:balise_title, parent=:parent, affiche=:affiche WHERE ID_page=:id_page", $value);
209
					$this->setModifierLienNavigation("ID_page", $id_page, $this->getParentId($parent), $affiche);
210
				}
211
				else {
212
					$this->setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $contenu, $err_balise_title, $err_url, $err_meta_description, $err_titre_page);
213
				}
214
			}
215
			//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
216
			else {
217
				FlashMessage::setFlash("Impossible de modifier cette page, veuillez contacter votre administrateur pour corriger ce problème");
218
				$this->erreur = true;
219
			}
220
		}
221
222
		/**
223
		 * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete
224
		 * @param $id_page
225
		 */
226
		public function setSupprimerPage($id_page) {
227
			$dbc = \core\App::getDb();
228
229
			//le premier id_page sera tojours l'accueil donc on ne peut pas le delete
230
			if ($id_page != 1) {
231
				$this->getContenuPage($id_page);
232
233
				$url = explode("/", $this->url);
234
				$filename = ROOT."app/views/".end($url).".php";
235
236
				//si le fichier existe supprimer en bdd plus l fichier
237
				if (file_exists($filename)) {
238
					unlink($filename);
239
240
					$value = array(
241
						"id_page" => $id_page
242
					);
243
244
					$dbc->prepare("DELETE FROM page WHERE ID_page=:id_page", $value);
245
246
					$nav = new Navigation();
247
					$nav->setSupprimerLien("ID_page", $id_page);
248
				}
249
				//sinon on renvoi une erreur en disant que le fichier n'existe pas et qu'il faut contacter un administrateur
250
				else {
251
					FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
252
					$this->erreur = true;
253
				}
254
			}
255
			else {
256
				FlashMessage::setFlash("Impossible de supprimer cette page, veuillez contacter votre administrateur pour corriger ce problème");
257
				$this->erreur = true;
258
			}
259
		}
260
261
		private function setAjoutLienNavigation($id, $value_id, $affiche) {
262
			if ($affiche !== null) {
263
				$nav = new Navigation();
264
				$nav->setTestAjoutLien($id, $value_id, $affiche);
265
			}
266
		}
267
268
		private function setModifierLienNavigation($id, $id_page, $parent, $affiche) {
269
			if ($parent != "") {
270
				$nav = new Navigation();
271
				$nav->setSupprimerLien($id, $id_page);
272
			}
273
			else if (($affiche == 1) && ($parent == "")) {
274
				$this->setAjoutLienNavigation($id, $id_page, $affiche);
275
			}
276
		}
277
		//-------------------------- FIN SETTER ----------------------------------------------------------------------------//
278
	}