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 GestionContenus 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 GestionContenus, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 9 | class GestionContenus extends Contenus { |
||
| 10 | use ParentTexte; |
||
| 11 | |||
| 12 | private $erreur; |
||
| 13 | |||
| 14 | |||
| 15 | //-------------------------- GETTER ----------------------------------------------------------------------------// |
||
| 16 | public function getErreur() { |
||
| 17 | return $this->erreur; |
||
| 18 | } |
||
| 19 | |||
| 20 | private function getOrdrePage($parent) { |
||
| 21 | if (($parent != "") || ($parent != 0)) { |
||
| 22 | $dbc = \core\App::getDb(); |
||
| 23 | $ordre = 1; |
||
| 24 | |||
| 25 | $query = $dbc->select("ordre")->from("page")->orderBy("ordre", "DESC")->limit(0, 1)->get(); |
||
| 26 | View Code Duplication | if ((is_array($query)) && (count($query) > 0)) { |
|
|
|
|||
| 27 | foreach ($query as $obj) { |
||
| 28 | $ordre = $obj->ordre; |
||
| 29 | } |
||
| 30 | } |
||
| 31 | |||
| 32 | return $ordre; |
||
| 33 | } |
||
| 34 | } |
||
| 35 | |||
| 36 | private function getParentId($parent) { |
||
| 37 | $dbc = \core\App::getDb(); |
||
| 38 | |||
| 39 | if ($parent == "") return 0; |
||
| 40 | |||
| 41 | $query = $dbc->select("ID_page")->from("page")->where("titre", " LIKE ", '"%'.$parent.'%"', "", true)->get(); |
||
| 42 | |||
| 43 | View Code Duplication | if ((is_array($query)) && (count($query) == 1)) { |
|
| 44 | foreach ($query as $obj) { |
||
| 45 | return $obj->ID_page; |
||
| 46 | } |
||
| 47 | } |
||
| 48 | |||
| 49 | return 0; |
||
| 50 | } |
||
| 51 | |||
| 52 | /** |
||
| 53 | * @param $nom_table |
||
| 54 | * @param $nom_id_table |
||
| 55 | * @param $champ |
||
| 56 | * @param $value |
||
| 57 | * @param $limit_char |
||
| 58 | * @param $err_char |
||
| 59 | * @param $err_egalite |
||
| 60 | * @param null $value_id_table |
||
| 61 | * @return string |
||
| 62 | * fonction qui permet de vérifier qu'il n'y ait pas d'erreur dans le champ spécifié ni de doublons |
||
| 63 | */ |
||
| 64 | private function getVerifChamp($nom_table, $nom_id_table, $champ, $value, $limit_char, $err_char, $err_egalite, $value_id_table = null) { |
||
| 65 | $dbc = App::getDb(); |
||
| 66 | |||
| 67 | if (strlen(utf8_decode($value)) > $limit_char) { |
||
| 68 | $this->erreur = true; |
||
| 69 | return "<li>$err_char</li>"; |
||
| 70 | } |
||
| 71 | else if ($dbc->rechercherEgalite($nom_table, $champ, $value, $nom_id_table, $value_id_table) == true) { |
||
| 72 | $this->erreur = true; |
||
| 73 | return "<li>$err_egalite</li>"; |
||
| 74 | } |
||
| 75 | } |
||
| 76 | |||
| 77 | private function getTestBaliseTitle($balise_title) { |
||
| 78 | $err_balise_title_char = "Le titre pour le navigateur ne doit pas dépasser 70 caractères"; |
||
| 79 | $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"; |
||
| 80 | return $this->getVerifChamp("page", "ID_page", "balise_title", $balise_title, 70, $err_balise_title_char, $err_balise_title_egalite); |
||
| 81 | } |
||
| 82 | |||
| 83 | private function getTestUrl($url) { |
||
| 84 | $err_url_char = "L'url ne doit pas dépasser 92 caractères"; |
||
| 85 | $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"; |
||
| 86 | return $this->getVerifChamp("page", "ID_page", "url", $url, 92, $err_url_char, $err_url_egalite); |
||
| 87 | } |
||
| 88 | |||
| 89 | private function getTestMetaDescription($meta_description) { |
||
| 90 | $err_meta_description_char = "La description de cette page ne doit pas dépasser 158 caractères"; |
||
| 91 | $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"; |
||
| 92 | return $this->getVerifChamp("page", "ID_page", "meta_description", $meta_description, 158, $err_meta_description_char, $err_meta_description_egalite); |
||
| 93 | } |
||
| 94 | |||
| 95 | private function getTestTitrePage($titre_page) { |
||
| 96 | $err_titre_page_char = "Le titre de cette page ne doit pas dépasser 50 caractères"; |
||
| 97 | $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"; |
||
| 98 | return $this->getVerifChamp("page", "ID_page", "titre", $titre_page, 50, $err_titre_page_char, $err_titre_page_egalite); |
||
| 99 | } |
||
| 100 | //-------------------------- FIN GETTER ----------------------------------------------------------------------------// |
||
| 101 | |||
| 102 | |||
| 103 | |||
| 104 | //-------------------------- SETTER ----------------------------------------------------------------------------// |
||
| 105 | /** |
||
| 106 | * @param string $url |
||
| 107 | * @param string $err_balise_title |
||
| 108 | * @param string $err_url |
||
| 109 | * @param string $err_meta_description |
||
| 110 | * @param string $err_titre_page |
||
| 111 | */ |
||
| 112 | private function setErreurContenus($balise_title, $url, $meta_description, $titre_page, $parent, $err_balise_title, $err_url, $err_meta_description, $err_titre_page) { |
||
| 123 | |||
| 124 | /** |
||
| 125 | * fonction qui permet de créer un page |
||
| 126 | * @param $balise_title |
||
| 127 | * @param $url |
||
| 128 | * @param $meta_description |
||
| 129 | * @param $titre_page |
||
| 130 | * @param $parent |
||
| 131 | */ |
||
| 132 | public function setCreerPage($balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) { |
||
| 179 | |||
| 180 | /** |
||
| 181 | * function that will create a redirection on an other site |
||
| 182 | * @param $balise_title |
||
| 183 | * @param $url |
||
| 184 | * @param $titre_page |
||
| 185 | * @param $parent |
||
| 186 | */ |
||
| 187 | public function setCreerPageRedirect($balise_title, $url, $titre_page, $parent, $affiche = 1) { |
||
| 218 | |||
| 219 | /** |
||
| 220 | * fonction qui permet de modifier une page en fonction de son id |
||
| 221 | * @param $id_page |
||
| 222 | * @param $balise_title |
||
| 223 | * @param $url |
||
| 224 | * @param $meta_description |
||
| 225 | * @param $titre_page |
||
| 226 | * @param $parent |
||
| 227 | * @param $contenu |
||
| 228 | */ |
||
| 229 | public function setModifierPage($id_page, $balise_title, $url, $meta_description, $titre_page, $parent, $affiche = 1) { |
||
| 276 | |||
| 277 | /** |
||
| 278 | * @param $id_page |
||
| 279 | * @param $contenu |
||
| 280 | */ |
||
| 281 | public function setModifierContenu($id_page, $contenu) { |
||
| 286 | |||
| 287 | /** |
||
| 288 | * fonction qui permet de supprimer une page, test si fichier exist, si oui on delete |
||
| 289 | * @param $id_page |
||
| 290 | */ |
||
| 291 | public function setSupprimerPage() { |
||
| 310 | |||
| 311 | /** |
||
| 312 | * @param string $id |
||
| 313 | * @param $value_id |
||
| 314 | * @param integer $affiche |
||
| 315 | */ |
||
| 316 | private function setAjoutLienNavigation($id, $value_id, $affiche) { |
||
| 321 | |||
| 322 | /** |
||
| 323 | * @param string $id |
||
| 324 | * @param integer $affiche |
||
| 325 | */ |
||
| 326 | private function setModifierLienNavigation($id, $id_page, $parent, $affiche) { |
||
| 334 | |||
| 335 | /** |
||
| 336 | * delete link in nav and delete page in table |
||
| 337 | */ |
||
| 338 | private function setSupprimerLienNavigation() { |
||
| 345 | //-------------------------- FIN SETTER ----------------------------------------------------------------------------// |
||
| 346 | } |
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.