Passed
Push — master ( 5cf2de...b9dd6c )
by Anthony
04:19
created

Navigation::getSousMenu()   B

Complexity

Conditions 4
Paths 2

Size

Total Lines 25
Code Lines 18

Duplication

Lines 12
Ratio 48 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 12
loc 25
rs 8.5806
cc 4
eloc 18
nc 2
nop 1
1
<?php
2
	namespace core;
3
	use core\functions\ChaineCaractere;
4
5
	class Navigation {
6
		private $last_ordre;
7
		
8
		
9
		
10
		//-------------------------- BUILDER ----------------------------------------------------------------------------//
11
		/**
12
		 * Navigation constructor.
13
		 * @param null $no_module
14
		 * to init get navigation link (if no module != null) whe only get page it's for admin content gestion pages
15
		 */
16
		public function __construct($no_module = null) {
17
			$dbc = App::getDb();
18
			$navigation = [];
19
			$last_ordre = "";
20
21
			if ($no_module === null) {
22
				$query = $dbc->select()->from("navigation")->orderBy("ordre")->get();
23
			}
24
			else {
25
				$query = $dbc->select()->from("navigation")->where("ID_page", " IS NOT ", "NULL", "", true)->orderBy("ordre")->get();
26
			}
27
28
			if (is_array($query) && (count($query) > 0)) {
29
				foreach ($query as $obj) {
30
					if ($obj->ID_page === null) {
31
						$navigation[] = $this->getLienNavigationModule($obj->ID_module);
32
					}
33
					else {
34
						$navigation[] = $this->getLienNavigationPage($obj->ID_page);
35
					}
36
					$last_ordre = $obj->ordre;
37
				}
38
39
				$this->last_ordre = $last_ordre;
40
				
41
				App::setValues(["navigation" => $navigation]);
42
			}
43
		}
44
		//-------------------------- END BUILDER ----------------------------------------------------------------------------//
45
		
46
		
47
		
48
		//-------------------------- GETTER ----------------------------------------------------------------------------//
49
		/**
50
		 * @param $id_page
51
		 * @return array
52
		 * to get the navigation link of pages of the website
53
		 */
54
		private function getLienNavigationPage($id_page) {
55
			$dbc = App::getDb();
56
57
			$query = $dbc->select()
58
				->from("navigation")
59
				->from("page")
60
				->where("page.ID_page", "=", $id_page, "AND")
61
				->where("page.affiche", "=", 1, "AND")
62
				->where("page.parent", "=", 0, "AND")
63
				->where("navigation.ID_page", "=", "page.ID_page", "", true)
64
				->get();
65
66
			if (is_array($query) && (count($query) > 0)) {
67
				$nav = [];
68
				foreach ($query as $obj) {
69
					$nav = [
70
						"id" => $obj->ID_page,
71
						"titre" => $obj->titre,
72
						"lien_page" => $this->getLienPage($obj->url),
73
						"balise_title" => $obj->balise_title,
74
						"sous_menu" => $this->getSousMenu($id_page),
75
						"type" => "page",
76
						"target" => $obj->target,
77
					];
78
				}
79
				
80
				return $nav;
81
			}
82
		}
83
84
		/**
85
		 * @param $id_page
86
		 * @return array
87
		 * to get the sub navigation of a page which have it
88
		 */
89
		private function getSousMenu($id_page) {
90
			$dbc = App::getDb();
91
			$sous_menu = [];
92
93
			$query = $dbc->select()
94
				->from("page")
95
				->where("parent", "=", $id_page, "AND")
96
				->where("affiche", "=", 1)
97
				->get();
98
99 View Code Duplication
			if (is_array($query) && (count($query) > 0)) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across 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...
100
				foreach ($query as $obj) {
101
					$sous_menu[] = [
102
						"id" => $obj->ID_page,
103
						"titre" => $obj->titre,
104
						"lien_page" => $this->getLienPage($obj->url),
105
						"balise_title" => $obj->balise_title,
106
						"type" => "page",
107
						"target" => $obj->target,
108
					];
109
				}
110
			}
111
112
			return $sous_menu;
113
		}
114
115
		/**
116
		 * @param $id_module
117
		 * @return array
118
		 * to get the navigation link of modules of the website
119
		 */
120
		private function getLienNavigationModule($id_module) {
121
			$dbc = App::getDb();
122
123
			$query = $dbc->select()
124
				->from("navigation")
125
				->from("module")
126
				->where("module.ID_module", "=", $id_module, "AND")
127
				->where("module.installer", "=", 1, "AND")
128
				->where("module.activer", "=", 1, "AND")
129
				->where("navigation.ID_module", "=", "module.ID_module", "", true)
130
				->get();
131
132 View Code Duplication
			if (is_array($query) && (count($query) > 0)) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across 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...
133
				foreach ($query as $obj) {
134
					$nav = [
135
						"id" => $obj->ID_module,
136
						"titre" => $obj->nom_module,
137
						"lien_page" => $this->getLienPage($obj->url),
138
						"balise_title" => $obj->nom_module,
139
						"type" => "module",
140
						"target" => $obj->target,
141
					];
142
					
143
					return $nav;
144
				}
145
			}
146
		}
147
148
		/*to verify if page exist*/
149
		private function getLienPageExist($id_page) {
150
			$dbc = App::getDb();
151
152
			$query = $dbc->select("ID_page")->from("navigation")->where("ID_page", "=", $id_page)->get();
153
154
			if (count($query) < 1) {
155
				return false;
156
			}
157
158
			return true;
159
		}
160
161
		private function getLienPage($url) {
162
			if (ChaineCaractere::FindInString($url, "http://")) {
163
				return $url;
164
			}
165
			else {
166
				return WEBROOT.$url;
167
			}
168
		}
169
		//-------------------------- END GETTER ----------------------------------------------------------------------------//
170
		
171
		
172
		
173
		//-------------------------- SETTER ----------------------------------------------------------------------------//
174
		/**
175
		 * @param $id
176
		 * @param $value_id
177
		 * to add a link in navigation table
178
		 */
179
		public function setAjoutLien($id, $value_id) {
180
			$dbc = App::getDb();
181
182
			if ($this->getLienPageExist($id) === false) {
183
				$dbc->insert($id, $value_id)->insert("ordre", $this->last_ordre + 1)->into("navigation")->set();
184
			}
185
		}
186
187
		/**
188
		 * @param $id
189
		 * @param $value_id
190
		 * to delete a link in navigation table
191
		 */
192
		public function setSupprimerLien($id, $value_id) {
193
			$dbc = App::getDb();
194
195
			$dbc->delete()->from("navigation")->where($id, "=", $value_id)->del();
196
		}
197
		//-------------------------- END SETTER ----------------------------------------------------------------------------//
198
	}