Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like Messagerie often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Messagerie, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
8 | class Messagerie { |
||
9 | public static $url_message; |
||
10 | |||
11 | private $id_message; |
||
12 | private $objet; |
||
13 | private $message; |
||
14 | private $date_message; |
||
15 | private $url; |
||
16 | |||
17 | private $id_expediteur; |
||
18 | private $pseudo_expediteur; |
||
19 | |||
20 | private $pseudo_receveur; |
||
21 | private $id_receveur; |
||
22 | |||
23 | private $values = []; |
||
24 | |||
25 | |||
26 | //-------------------------- BUILDER ----------------------------------------------------------------------------// |
||
27 | /** |
||
28 | * @param null $type_boite |
||
29 | * initialisation de la récupération des messages des différents boites |
||
30 | */ |
||
31 | public function __construct($type_boite = null) { |
||
44 | //-------------------------- END BUILDER ----------------------------------------------------------------------------// |
||
45 | |||
46 | |||
47 | |||
48 | //-------------------------- GETTER ----------------------------------------------------------------------------// |
||
49 | public function getIdMessage() { |
||
79 | |||
80 | /** |
||
81 | * fonction qui permet de récupérer tous les messages dans la boite de récéption |
||
82 | */ |
||
83 | View Code Duplication | private function getBoiteReception() { |
|
84 | $dbc = App::getDb(); |
||
85 | |||
86 | $query = $dbc->select() |
||
87 | ->from("_messagerie_boite_reception") |
||
88 | ->from("_messagerie_message") |
||
89 | ->from("identite") |
||
90 | ->where("_messagerie_boite_reception.ID_identite", "=", $_SESSION['idlogin'.CLEF_SITE], "AND") |
||
91 | ->where("_messagerie_boite_reception.supprimer", " IS ", "NULL", "AND", true) |
||
92 | ->where("_messagerie_boite_reception.ID_message", "=", "_messagerie_message.ID_message", "AND", true) |
||
93 | ->where("_messagerie_message.ID_expediteur", "=", "identite.ID_identite", "", true) |
||
94 | ->orderBy("date", "DESC") |
||
95 | ->get(); |
||
96 | |||
97 | if ((is_array($query)) && (count($query) > 0)) { |
||
98 | foreach ($query as $obj) { |
||
99 | $arr = [ |
||
100 | "id_message" => $obj->ID_message, |
||
101 | "objet" => $obj->objet, |
||
102 | "lu" => $obj->lu, |
||
103 | "date_message" => $obj->date, |
||
104 | "id_expediteur" => $obj->ID_expediteur, |
||
105 | "pseudo_expediteur" => $obj->pseudo, |
||
106 | "url" => $obj->url |
||
107 | ]; |
||
108 | |||
109 | $values[] = $arr; |
||
110 | } |
||
111 | |||
112 | $this->setValues($values); |
||
113 | } |
||
114 | } |
||
115 | |||
116 | /** |
||
117 | * fonction qui permet de récupérer tous les messages dans la boite des messages envoyes |
||
118 | */ |
||
119 | private function getMessagesEnvoyes() { |
||
120 | $dbc = App::getDb(); |
||
121 | |||
122 | $query = $dbc->select() |
||
123 | ->from("_messagerie_boite_reception") |
||
124 | ->from("_messagerie_message") |
||
125 | ->from("identite") |
||
126 | ->where("_messagerie_message.ID_expediteur", "=", $_SESSION['idlogin'.CLEF_SITE], "AND") |
||
127 | ->where("_messagerie_boite_reception.ID_message", "=", "_messagerie_message.ID_message", "AND", true) |
||
128 | ->where("_messagerie_boite_reception.ID_identite", "=", "identite.ID_identite", "", true) |
||
129 | ->orderBy("date", "DESC") |
||
130 | ->get(); |
||
131 | |||
132 | if ((is_array($query)) && (count($query) > 0)) { |
||
133 | foreach ($query as $obj) { |
||
134 | $arr = [ |
||
135 | "id_message" => $obj->ID_message, |
||
136 | "objet" => $obj->objet, |
||
137 | "date_message" => $obj->date, |
||
138 | "id_expediteur" => $obj->ID_expediteur, |
||
139 | "pseudo_receveur" => $obj->pseudo, |
||
140 | "url" => $obj->url |
||
141 | ]; |
||
142 | |||
143 | $values[] = $arr; |
||
144 | } |
||
145 | |||
146 | $this->setValues($values); |
||
147 | } |
||
148 | } |
||
149 | |||
150 | /** |
||
151 | * fonction qui récupère tous les messages supprimés |
||
152 | */ |
||
153 | View Code Duplication | private function getMessageSupprimes() { |
|
154 | $dbc = App::getDb(); |
||
155 | |||
156 | $query = $dbc->select() |
||
157 | ->from("_messagerie_boite_reception") |
||
158 | ->from("_messagerie_message") |
||
159 | ->from("identite") |
||
160 | ->where("_messagerie_boite_reception.ID_identite", "=", $_SESSION['idlogin'.CLEF_SITE], "AND") |
||
161 | ->where("_messagerie_boite_reception.supprimer", "=", 1, "AND") |
||
162 | ->where("_messagerie_boite_reception.ID_message", "=", "_messagerie_message.ID_message", "AND", true) |
||
163 | ->where("_messagerie_message.ID_expediteur", "=", "identite.ID_identite", "", true) |
||
164 | ->orderBy("date", "DESC") |
||
165 | ->get(); |
||
166 | |||
167 | if ((is_array($query)) && (count($query) > 0)) { |
||
168 | foreach ($query as $obj) { |
||
169 | $arr = [ |
||
170 | "id_message" => $obj->ID_message, |
||
171 | "objet" => $obj->objet, |
||
172 | "date_message" => $obj->date, |
||
173 | "id_expediteur" => $obj->ID_expediteur, |
||
174 | "pseudo_expediteur" => $obj->pseudo, |
||
175 | "url" => $obj->url |
||
176 | ]; |
||
177 | |||
178 | $values[] = $arr; |
||
179 | } |
||
180 | |||
181 | $this->setValues($values); |
||
182 | } |
||
183 | } |
||
184 | |||
185 | /* |
||
186 | * fonction qui permetlors de l'envoit d'un message d'être sur que le membre existe |
||
187 | */ |
||
188 | private function getIdIdentiteExist($pseudo) { |
||
203 | |||
204 | /** |
||
205 | * fonction qui sert à récupérer les messages non lus |
||
206 | */ |
||
207 | public function getMessageNonLu() { |
||
223 | |||
224 | /** |
||
225 | * @param $url_message |
||
226 | * fonction qui récupère un message suivant une url |
||
227 | */ |
||
228 | public function getUnMessage($url_message) { |
||
260 | //-------------------------- END GETTER ----------------------------------------------------------------------------// |
||
261 | |||
262 | |||
263 | |||
264 | //-------------------------- SETTER ----------------------------------------------------------------------------// |
||
265 | /** |
||
266 | * @param $values |
||
267 | * can set values while keep older infos |
||
268 | */ |
||
269 | public function setValues($values) { |
||
272 | |||
273 | /** |
||
274 | * @param $id_message |
||
275 | * fonction qui passe un message en lu un fois qu'il a été ouvert |
||
276 | */ |
||
277 | View Code Duplication | private function setLireMessage($id_message) { |
|
286 | |||
287 | /** |
||
288 | * @param $id_message |
||
289 | * pour passer le message en supprimé, il sera alors consultable dans la table messages supprimés |
||
290 | */ |
||
291 | View Code Duplication | public function setArchiverMessage($id_message) { |
|
292 | $dbc = App::getDb(); |
||
293 | |||
294 | $dbc->update("supprimer", 1)->update("lu", 1) |
||
295 | ->from("_messagerie_boite_reception") |
||
296 | ->where("ID_message", "=", $id_message, "AND") |
||
297 | ->where("ID_identite", "=", $_SESSION['idlogin'.CLEF_SITE]) |
||
298 | ->set(); |
||
299 | } |
||
300 | |||
301 | /** |
||
302 | * @param $objet |
||
303 | * @param $destinataire |
||
304 | * @param $message |
||
305 | * @return bool |
||
306 | * |
||
307 | * fonction qui sert à envoyer un message à un ou plusieurs destinataires |
||
308 | */ |
||
309 | public function setEnvoyerMessage($objet, $destinataire, $message) { |
||
365 | |||
366 | /** |
||
367 | * fonction qui permet de passer tous les messages en lu |
||
368 | */ |
||
369 | public function setLireAllMessage() { |
||
374 | |||
375 | /** |
||
376 | * fonction qui permet de supprimer tous les messages |
||
377 | */ |
||
378 | public function setArchiverAllMessage() { |
||
383 | //-------------------------- END SETTER ----------------------------------------------------------------------------// |
||
384 | } |
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.