Passed
Push — master ( e7c715...8e5587 )
by Anthony
02:50
created

GroupeUnite::setCreerGroupe()   B

Complexity

Conditions 5
Paths 5

Size

Total Lines 32
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 32
rs 8.439
cc 5
eloc 20
nc 5
nop 4
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 $nombre_unite
68
		 * @param $nom_unite
69
		 * @param $type_unite
70
		 * @param $nom_groupe
71
		 * @return bool
72
		 * fonction qui permet de créer un groupe
73
		 */
74
		public function setCreerGroupe($nombre_unite, $nom_unite, $type_unite, $nom_groupe) {
75
			$dbc = App::getDb();
76
			
77
			if (ChaineCaractere::testMinLenght($nom_groupe) == false) {
78
				FlashMessage::setFlash("Le nom du groupe ne peut pas être vide !");
79
				return false;
80
			}
81
			
82
			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...
83
				FlashMessage::setFlash("Un groupe portant ce nom existe déjà, merci d'en choisir un autre !");
84
				return false;
85
			}
86
			
87
			if (array_sum($nombre_unite) == 0) {
88
				FlashMessage::setFlash("Vous ne pouvez pas créer un groupe vide !");
89
				return false;
90
			}
91
			
92
			$dbc->insert("nom_groupe", $nom_groupe)
93
				->insert("niveau_groupe", 1)
94
				->insert("ID_base", Bataille::getIdBase())
95
				->into("_bataille_groupe_unite")
96
				->set();
97
			
98
			$id_groupe = $dbc->lastInsertId();
99
			
100
			$count = count($nombre_unite);
101
			
102
			for ($i=0 ; $i<$count ; $i++) {
103
				$this->setAjouterUniteGroupe($nombre_unite[$i], $nom_unite[$i], $type_unite[$i], $id_groupe);
104
			}
105
		}
106
		
107
		/**
108
		 * @param $nombre_unite
109
		 * @param $nom_unite
110
		 * @param $type_unite
111
		 * @param $id_groupe
112
		 * @return bool
113
		 * fonction qui permet d'ajouter des unités a un groupe
114
		 */
115
		private function setAjouterUniteGroupe($nombre_unite, $nom_unite, $type_unite, $id_groupe) {
116
			$dbc = App::getDb();
117
			
118
			$nombre_unite_base = $this->getNombreUniteNom($type_unite, $nom_unite);
119
			
120
			if ($nombre_unite > $nombre_unite_base) {
121
				FlashMessage::setFlash("Pas assez d'unités ".$nom_unite." disponibles dans les ajouter à ce groupe");
122
				return false;
123
			}
124
			
125
			$dbc->update("ID_groupe", $id_groupe)
126
				->from("_bataille_unite")
127
				->where("type", "=", $type_unite, "AND")
128
				->where("nom", "=", $nom_unite, "AND")
129
				->where("ID_base", "=", Bataille::getIdBase(), "AND")
130
				->where("(ID_groupe IS NULL OR ID_groupe = 0)", "", "", "", true)
131
				->limit($nombre_unite, "no")
132
				->set();
133
			
134
			return true;
135
		}
136
		
137
		/**
138
		 * @param $id_groupe
139
		 * @param $id_mission
140
		 * @return bool
141
		 * fonction qui sert à envoyer toutes les troupes d'un groupe en mission
142
		 */
143
		public function setCommencerExpedition($id_groupe, $id_mission) {
144
			$dbc = App::getDb();
145
			
146
			$dbc->update("ID_mission", $id_mission)
147
				->from("_bataille_unite")
148
				->where("ID_groupe", "=", $id_groupe, "AND")
149
				->where("ID_base", "=", Bataille::getIdBase())
150
				->set();
151
			
152
			$dbc->update("ID_mission", $id_mission)
153
				->from("_bataille_groupe_unite")
154
				->where("ID_groupe_unite", "=", $id_groupe, "AND")
155
				->where("ID_base", "=", Bataille::getIdBase())
156
				->set();
157
			
158
			return true;
159
		}
160
		
161
		/**
162
		 * @param $id_mission
163
		 * fonction qui termine la mission pour tous les groupes qui y ont été assignés
164
		 */
165
		public function setTerminerExpedition($id_mission) {
166
			$dbc = App::getDb();
167
			
168
			$dbc->update("ID_mission", 0)->from("_bataille_groupe_unite")->where("ID_base", "=", Bataille::getIdBase())->set();
169
		}
170
		//-------------------------- END SETTER ----------------------------------------------------------------------------//    
171
	}