Passed
Push — master ( 8e5587...46e706 )
by Anthony
04:25
created

GroupeUnite::testNomGroupe()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 3
eloc 8
nc 3
nop 1
1
<?php
2
	namespace modules\bataille\app\controller;
3
	
4
	
5
	use core\App;
6
	use core\functions\ChaineCaractere;
7
	use core\HTML\flashmessage\FlashMessage;
8
	
9
	class GroupeUnite extends Unite {
10
		
11
		
12
		//-------------------------- BUILDER ----------------------------------------------------------------------------//
13
		//-------------------------- END BUILDER ----------------------------------------------------------------------------//
14
		
15
		
16
		//-------------------------- GETTER ----------------------------------------------------------------------------//
17
		/**
18
		 * fonction qui récupère tous les groupes de la bases
19
		 */
20
		public function getAllGroupeUnite() {
21
			$dbc = App::getDb();
22
			
23
			$query = $dbc->select()->from("_bataille_groupe_unite")
24
				->where("ID_base", "=", Bataille::getIdBase(), "AND")
25
				->where("(ID_mission IS NULL OR ID_mission = 0)", "", "", "", true)->get();
26
			
27 View Code Duplication
			if ((is_array($query)) && (count($query))) {
0 ignored issues
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...
28
				$groupe = [];
29
				
30
				foreach ($query as $obj) {
31
					$groupe[] = [
32
						"id_groupe" => $obj->ID_groupe_unite,
33
						"nom_groue" => $obj->nom_groupe,
34
						"unites" => $this->getAllUnites(Bataille::getIdBase(), $obj->ID_groupe_unite)
35
					];
36
				}
37
				
38
				Bataille::setValues(["groupe_unites" => $groupe]);
39
			}
40
		}
41
		
42
		/**
43
		 * @param $nom_groupe
44
		 * @return bool
45
		 * fonction qui test si un groupe existe déjà ou pas dans cette base
46
		 */
47
		private function getTestGroupExist($nom_groupe) {
48
			$dbc = App::getDb();
49
			
50
			$query = $dbc->select("ID_groupe_unite")
51
				->from("_bataille_groupe_unite")
52
				->where("nom_groupe", "=", $nom_groupe, "AND")
53
				->where("ID_base", "=", Bataille::getIdBase())
54
				->get();
55
			
56
			if (count($query) > 0) {
57
				return false;
58
			}
59
			
60
			return true;
61
		}
62
		//-------------------------- END GETTER ----------------------------------------------------------------------------//
63
		
64
		
65
		//-------------------------- SETTER ----------------------------------------------------------------------------//
66
		/**
67
		 * @param $nom_groupe
68
		 * @return bool
69
		 * permet de tester le nom d'un groupe si > a 0 caractere et qu'il soit libre
70
		 */
71
		private function testNomGroupe($nom_groupe) {
72
			if (ChaineCaractere::testMinLenght($nom_groupe) == false) {
73
				FlashMessage::setFlash("Le nom du groupe ne peut pas être vide !");
74
				return false;
75
			}
76
			
77
			if ($this->getTestGroupExist($nom_groupe) == false) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
78
				FlashMessage::setFlash("Un groupe portant ce nom existe déjà, merci d'en choisir un autre !");
79
				return false;
80
			}
81
			
82
			return true;
83
		}
84
		
85
		/**
86
		 * @param $nombre_unite
87
		 * @param $nom_unite
88
		 * @param $type_unite
89
		 * @param $nom_groupe
90
		 * @return bool
91
		 * fonction qui permet de créer un groupe
92
		 */
93
		public function setCreerGroupe($nombre_unite, $nom_unite, $type_unite, $nom_groupe) {
94
			$dbc = App::getDb();
95
			
96
			if ($this->testNomGroupe($nom_groupe) == false) {
0 ignored issues
show
Coding Style Best Practice introduced by
It seems like you are loosely comparing two booleans. Considering using the strict comparison === instead.

When comparing two booleans, it is generally considered safer to use the strict comparison operator.

Loading history...
97
				return false;
98
			}
99
			
100
			if (array_sum($nombre_unite) == 0) {
101
				FlashMessage::setFlash("Vous ne pouvez pas créer un groupe vide !");
102
				return false;
103
			}
104
			
105
			$dbc->insert("nom_groupe", $nom_groupe)
106
				->insert("niveau_groupe", 1)
107
				->insert("ID_base", Bataille::getIdBase())
108
				->into("_bataille_groupe_unite")
109
				->set();
110
			
111
			$id_groupe = $dbc->lastInsertId();
112
			
113
			$count = count($nombre_unite);
114
			
115
			for ($i=0 ; $i<$count ; $i++) {
116
				$this->setAjouterUniteGroupe($nombre_unite[$i], $nom_unite[$i], $type_unite[$i], $id_groupe);
117
			}
118
			
119
			return true;
120
		}
121
		
122
		/**
123
		 * @param $nombre_unite
124
		 * @param $nom_unite
125
		 * @param $type_unite
126
		 * @param $id_groupe
127
		 * @return bool
128
		 * fonction qui permet d'ajouter des unités a un groupe
129
		 */
130
		private function setAjouterUniteGroupe($nombre_unite, $nom_unite, $type_unite, $id_groupe) {
131
			$dbc = App::getDb();
132
			
133
			$nombre_unite_base = $this->getNombreUniteNom($type_unite, $nom_unite);
134
			
135
			if ($nombre_unite > $nombre_unite_base) {
136
				FlashMessage::setFlash("Pas assez d'unités ".$nom_unite." disponibles dans les ajouter à ce groupe");
137
				return false;
138
			}
139
			
140
			$dbc->update("ID_groupe", $id_groupe)
141
				->from("_bataille_unite")
142
				->where("type", "=", $type_unite, "AND")
143
				->where("nom", "=", $nom_unite, "AND")
144
				->where("ID_base", "=", Bataille::getIdBase(), "AND")
145
				->where("(ID_groupe IS NULL OR ID_groupe = 0)", "", "", "", true)
146
				->limit($nombre_unite, "no")
147
				->set();
148
			
149
			return true;
150
		}
151
		
152
		/**
153
		 * @param $id_groupe
154
		 * @param $id_mission
155
		 * @return bool
156
		 * fonction qui sert à envoyer toutes les troupes d'un groupe en mission
157
		 */
158
		public function setCommencerExpedition($id_groupe, $id_mission) {
159
			$dbc = App::getDb();
160
			
161
			$dbc->update("ID_mission", $id_mission)
162
				->from("_bataille_unite")
163
				->where("ID_groupe", "=", $id_groupe, "AND")
164
				->where("ID_base", "=", Bataille::getIdBase())
165
				->set();
166
			
167
			$dbc->update("ID_mission", $id_mission)
168
				->from("_bataille_groupe_unite")
169
				->where("ID_groupe_unite", "=", $id_groupe, "AND")
170
				->where("ID_base", "=", Bataille::getIdBase())
171
				->set();
172
			
173
			return true;
174
		}
175
		
176
		/**
177
		 * @param $id_mission
178
		 * fonction qui termine la mission pour tous les groupes qui y ont été assignés
179
		 */
180
		public function setTerminerExpedition($id_mission) {
181
			$dbc = App::getDb();
182
			
183
			$dbc->update("ID_mission", 0)->from("_bataille_groupe_unite")->where("ID_base", "=", Bataille::getIdBase())->set();
184
		}
185
		//-------------------------- END SETTER ----------------------------------------------------------------------------//    
186
	}