diff --git a/CHANGES.txt b/CHANGES.txt index ff783d5..320692c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -119,9 +119,14 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= -refactorisation de la vue 'view' pour toutes les 'autres' entités +------- +06/10/2020 v4.105.0-3.7.9 (EP) + - (i) refactorisation de la vue 'view' pour toutes les 'autres' entités (étape 2, étape 3 en cours...) + => dans AppController:view_generic() + => utilisation de mon helper src/View/Helper/MyHelperHelper/displayAssociatedEntitiesAsSectionShowHide() + => un seul template unique utilisé /src/Template/Common/view.ctp, évite toutes ces trop nombreuses redondances, + => plus efficace, on modifie tout en un seul endroit ! (au lieu d'une dizaine de pages web différentes avant !) -=> dans AppController:view_generic() ------- 05/10/2020 v4.104.5-3.7.9 (EP) diff --git a/README.md b/README.md index 60f07b8..88cb004 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 05/10/2020 -Version: 4.104.5-3.7.9 +Date: 06/10/2020 +Version: 4.105.0-3.7.9 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index becc0ba..c7f2350 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -481,7 +481,13 @@ class AppController extends Controller //return strtolower($this->name); //return __CLASS__; //return strtolower( substr($this->getName(),0,-1) ); - return substr($this->getTypeNamePlural(),0,-1); + $words = explode(' ',$this->getTypeNamePlural()); + //debug($words); + $type_name_singular = ''; + foreach($words as $word) $type_name_singular .= substr($word,0,-1).' '; + //debug($type_name_singular); + return rtrim($type_name_singular); + //return substr($this->getTypeNamePlural(),0,-1); } //@deprecated public function getNiceName() { return $this->getTypeNameSingular(); } @@ -2120,18 +2126,47 @@ class AppController extends Controller } // beforeFilter() - public function view_generic($id, $associated_entity_types) { + public function view_generic($id, $associated_entity_types, $parent_entity_controller_name=[]) { // ex: SurCategories $controller_name = $this->getName(); + //debug($controller_name); exit; /* $entity = $this->SurCategories->get($id, [ 'contain' => [] ]); */ $entity = $this->$controller_name->get($id, [ - 'contain' => [] + //'contain' => ['SurCategories'] + 'contain' => $parent_entity_controller_name ]); + + // S'il y a une entité parente, on récupère ses infos + $parent_entity_infos = []; + if ($parent_entity_controller_name) { + //$parent_entity_name=$entity->sur_category->nom; + //$c_parent = 'App\\Controller\\'.'SurCategories'.'Controller'; + $c_parent = 'App\\Controller\\'.$parent_entity_controller_name.'Controller'; + $c_parent = new $c_parent(); + // 'Domaine' + $parent_entity_type_name=$c_parent->getTypeNameSingular(); + //debug($parent_entity_type_name); + // nom de l'instance de l'entité parente + // 'sur_category' + $parent_entity_contained_name = Inflector::classify($parent_entity_controller_name); + $parent_entity_contained_name = Inflector::underscore($parent_entity_contained_name); + //debug($parent_entity_contained_name);exit; + //$parent_entity_name=$entity->sur_category->nom; + $parent_entity_name_field_label = $c_parent->getNameFieldLabel(); + $parent_entity_name=$entity->$parent_entity_contained_name->$parent_entity_name_field_label; + //debug($parent_entity_name);exit; + $parent_entity_id=$entity->$parent_entity_contained_name->id; + $parent_entity_infos['controller_name'] = $parent_entity_controller_name; + $parent_entity_infos['type_name'] = $parent_entity_type_name; + $parent_entity_infos['name'] = $parent_entity_name; + $parent_entity_infos['id'] = $parent_entity_id; + } + $entities_list = []; // ex: 'sur_categorie_id' $fk_name = $this->getFkName(); @@ -2220,6 +2255,9 @@ class AppController extends Controller 'entity_type_name_singular', 'entity_name', 'entity', + 'parent_entity_infos', + //'parent_entity_controller_name','parent_entity_type_name', + //'parent_entity_name','parent_entity_id', // Infos sur les entités associées 'entities_list' @@ -2699,7 +2737,7 @@ class AppController extends Controller $printTableRow = $displayElement; $this->set(compact('printTableRow')); //@deprecated - $this->set('displayElement', $displayElement); + $this->set(compact('displayElement')); // Pass this function to all views // @todo : Si cette fonction ne concerne que SuivisController, il faut la déplacer dans ce controleur diff --git a/src/Controller/CategoriesController.php b/src/Controller/CategoriesController.php index 7ff09f5..8028486 100755 --- a/src/Controller/CategoriesController.php +++ b/src/Controller/CategoriesController.php @@ -19,6 +19,7 @@ class CategoriesController extends AppController //@Override public function getTypeNamePlural() { return 'catégories'; } + //@deprecated public function getArticle() { return "La"; @@ -115,14 +116,13 @@ class CategoriesController extends AppController * @return \Cake\Network\Response|null * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ - public function view($id = null) - { + public function view($id = null) { $associated_entity_types = [ 'SousCategories', 'Materiels' ]; //return parent::view($id, $associated_entity_types); - return $this->view_generic($id, $associated_entity_types); + return $this->view_generic($id, $associated_entity_types, 'SurCategories'); /* $category = $this->Categories->get($id, [ diff --git a/src/Controller/GroupesThematiquesController.php b/src/Controller/GroupesThematiquesController.php index c15ed57..0324bf1 100755 --- a/src/Controller/GroupesThematiquesController.php +++ b/src/Controller/GroupesThematiquesController.php @@ -12,6 +12,15 @@ use Cake\ORM\TableRegistry; class GroupesThematiquesController extends AppController { + // Nom pluriel affichable pour cette entité + //@Override + public function getTypeNamePlural() { + //return strtolower($this->name); + //return strtolower($this->getName()); + //return 'sur-catégories'; + return 'groupes thématiques'; + } + /** * Give authorization for groupes thematiques * @@ -80,6 +89,15 @@ class GroupesThematiquesController extends AppController */ public function view($id = null) { + $associated_entity_types = [ + 'Users', + 'Materiels', + 'Suivis', + ]; + //return parent::view($id, $associated_entity_types); + return $this->view_generic($id, $associated_entity_types); + + /* $groupesThematique = $this->GroupesThematiques->get($id, [ 'contain' => [ 'Materiels' @@ -105,6 +123,7 @@ class GroupesThematiquesController extends AppController $this->set('_serialize', [ 'groupesThematique' ]); + */ } /** diff --git a/src/Controller/SousCategoriesController.php b/src/Controller/SousCategoriesController.php index 25e4cb5..67c0fa7 100755 --- a/src/Controller/SousCategoriesController.php +++ b/src/Controller/SousCategoriesController.php @@ -11,12 +11,28 @@ use Cake\ORM\TableRegistry; */ class SousCategoriesController extends AppController { - + // Genre + public $is_masculin = false; + + //@deprecated public function getArticle() { return "La"; } + // Surcharge pour corriger bug cakephp qui renvoie 'Souscategories' au lieu de 'SousCategories' !! + //@Override + public function getName() { + //return strtolower($this->name); + //return strtolower($this->getName()); + //return 'SousCategories'; + $controller_name = substr(__CLASS__,strlen('App\\Controller\\')); + return substr($controller_name,0,strpos($controller_name,'Controller')); + } + + // Nom pluriel affichable pour cette entité + //@Override + public function getTypeNamePlural() { return 'sous-catégories'; } /* * @Override @@ -99,8 +115,13 @@ class SousCategoriesController extends AppController * @return \Cake\Network\Response|null * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ - public function view($id = null) - { + public function view($id = null) { + $associated_entity_types = [ + 'Materiels' + ]; + //return parent::view($id, $associated_entity_types); + return $this->view_generic($id, $associated_entity_types, 'Categories'); + /* $sousCategory = $this->SousCategories->get($id, [ 'contain' => [ 'Categories' @@ -116,6 +137,7 @@ class SousCategoriesController extends AppController $this->set('_serialize', [ 'sousCategory' ]); + */ } /** diff --git a/src/Controller/SurCategoriesController.php b/src/Controller/SurCategoriesController.php index 03ce137..fe048aa 100755 --- a/src/Controller/SurCategoriesController.php +++ b/src/Controller/SurCategoriesController.php @@ -21,18 +21,34 @@ class SurCategoriesController extends AppController return 'domaine'; } */ - // Surcharge pour corriger bug cakephp qui renvoie 'Surcategories' au lieu de 'SurCategories' !! + /* + * Surcharge pour corriger bug cakephp qui renvoie 'Surcategories' au lieu de 'SurCategories' !! + * (alors qu'il renvoie bien 'GroupesThematiques' pour le controleur GroupesThematiquesController !!) + * + * En fait, ce bug n'arrive que si on tape une URL comme ceci : + * /surcategories/view/2 + * au lieu de : + * /sur-categories/view/2 + * + * Avec /sur-categories/view/2 => pas de problème, on a bien SurCategories + * Avec /surcategories/view/2 => problème, on a Surcategories !!! + * + */ //@Override public function getName() { //return strtolower($this->name); //return strtolower($this->getName()); - return 'SurCategories'; + //return 'SurCategories'; + //return __CLASS__; + $controller_name = substr(__CLASS__,strlen('App\\Controller\\')); + return substr($controller_name,0,strpos($controller_name,'Controller')); } // Nom pluriel affichable pour cette entité //@Override public function getTypeNamePlural() { //return strtolower($this->name); //return strtolower($this->getName()); + //return 'sur-catégories'; return 'domaines'; } diff --git a/src/Template/Common/view.ctp b/src/Template/Common/view.ctp index e2e7db6..2e7e668 100755 --- a/src/Template/Common/view.ctp +++ b/src/Template/Common/view.ctp @@ -1,4 +1,7 @@ MyHelper->displayElement(__('Nom'), h($entity_name)); $this->MyHelper->displayElement(__('Description'), h($entity->description)); - + // Affichage du nom de l'entité parente si elle existe + // (ex: Domaine pour une catégorie, ou catégorie pour une sous-catégorie) + //debug($entity->sur_category->getSource()); // 'SurCategories' + /* + $e = new SurCategory(); + debug($e->getSource()); + */ + if($parent_entity_infos) + //$this->MyHelper->displayElement(__('Domaine'), h($entity->sur_category->nom)); + //$this->MyHelper->displayElement(__(ucfirst($parent_entity_type_name)), h($parent_entity_name)); + $this->MyHelper->displayElement( + __(ucfirst($parent_entity_infos['type_name'])), + //$category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [ + $this->Html->link($parent_entity_infos['name'], [ + 'controller' => $parent_entity_infos['controller_name'], + //'controller' => 'SurCategories', + 'action' => 'view', + $parent_entity_infos['id'] + //$category->sur_category->id + ]) + ); + /* + $this->MyHelper->displayElement(__('Domaine'), $this->Html->link($entity->sur_category->nom, [ + 'controller' => 'SurCategories', + 'action' => 'view', + $entity->sur_category->id + ]) + ); + */ ?> diff --git a/src/Template/GroupesThematiques/view.ctp b/src/Template/GroupesThematiques/view.ctp index 10b590a..df7213a 100755 --- a/src/Template/GroupesThematiques/view.ctp +++ b/src/Template/GroupesThematiques/view.ctp @@ -1,143 +1,3 @@ - - -
-

Détail nom_groupe_thematique ?>

- - - - - - - - - Html->link(__(' Editer ce ' . $configuration->nom_groupe_thematique), [ - 'action' => 'edit', - $groupesThematique->id - ], [ - 'style' => 'margin-right: 40px; display: inline-block', - 'escape' => false, - 'onclick' => 'return true;' - ]); - } - - if (in_array($role, [ - 'Super Administrateur' - ])) { - echo $this->Form->postLink(__(' Supprimer ce ' . $configuration->nom_groupe_thematique), [ - 'action' => 'delete', - $groupesThematique->id - ], [ - 'style' => 'display: inline-block', - 'escape' => false, - 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $groupesThematique->id) - ]); - } - - $displayElement(__('Nom'), h($groupesThematique->nom)); - $displayElement(__('Description'), h($groupesThematique->description)); - ?> - - -
- -

- - Utilisateurs associés (count()?>) -

-
- - - - - - - - - - - - - - - -
Html->link(h($utilisateur->nom), ['controller' => 'Users', 'action' => 'view', h($utilisateur->id)]); ?> - Html->link(__(''), ['controller' => 'Users', 'action' => 'view', $utilisateur->id], ['escape' => false, 'style' => 'margin:0']) ?> -
- nom_groupe_thematique; } ?> -
- - -

- - Suivis associés (count()?>) -

-
- - - - - - - - - - - - - - - -
Html->link('Suivi '.h($suivi->id), ['controller' => 'Suivis', 'action' => 'view', h($suivi->id)]); ?> - Html->link(__(''), ['controller' => 'Suivis', 'action' => 'view', $suivi->id], ['escape' => false, 'style' => 'margin:0']) ?> -
- nom_groupe_thematique; } ?> -
- - -

- - Materiels associés (count()?>) -

-
- - - - - - - - - - - - - - - -
Html->link(h($materiel->designation), ['controller' => 'Materiels', 'action' => 'view', h($materiel->id)]); ?> - Html->link(__(''), ['controller' => 'Materiels', 'action' => 'view', $materiel->id], ['escape' => false, 'style' => 'margin:0']) ?> -
- nom_groupe_thematique.'.'; } ?> -
- - - -
- - \ No newline at end of file + +extend('/Common/view'); \ No newline at end of file diff --git a/src/Template/SousCategories/view.ctp b/src/Template/SousCategories/view.ctp index d08385e..db2b3cc 100755 --- a/src/Template/SousCategories/view.ctp +++ b/src/Template/SousCategories/view.ctp @@ -1,91 +1,10 @@ - - -
-

Détail sous-catégorie

- - - - - - - - Html->link(__(' Editer cette sous-catégorie'), [ - 'action' => 'edit', - $sousCategory->id - ], [ - 'style' => 'margin-right: 40px; display: inline-block', - 'escape' => false, - 'onclick' => 'return true;' - ]); - } - - if (in_array($role, [ - 'Super Administrateur' - ])) { - echo $this->Form->postLink(__(' Supprimer cette sous-catégorie'), [ - 'action' => 'delete', - $sousCategory->id - ], [ - 'style' => 'display: inline-block', - 'escape' => false, - 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $sousCategory->id) - ]); - } - - $displayElement(__('Nom'), h($sousCategory->nom)); - $displayElement(__('Catégorie'), $sousCategory->has('category') ? $this->Html->link($sousCategory->category->nom, [ - 'controller' => 'Categories', - 'action' => 'view', - $sousCategory->category->id - ]) : ''); - - ?> - -
- -

- - Materiels associés (count()?>) -

-
- - - - - - - - - - - - - - - -
Html->link(h($materiel->designation), ['controller' => 'Materiels', 'action' => 'view', h($materiel->id)]); ?> - Html->link(__(''), ['controller' => 'Materiels', 'action' => 'view', $materiel->id], ['escape' => false, 'style' => 'margin:0']) ?> -
- -
- - -
- - \ No newline at end of file + +extend('/Common/view'); \ No newline at end of file diff --git a/src/View/Helper/MyHelperHelper.php b/src/View/Helper/MyHelperHelper.php index f5b9cbe..16b3f9e 100644 --- a/src/View/Helper/MyHelperHelper.php +++ b/src/View/Helper/MyHelperHelper.php @@ -52,17 +52,21 @@ class MyHelperHelper extends Helper { // Ca c'est parce que sinon y'a au moins deux tests qui passent pas, a cause de l'espace dans la balise ... //if ($valeur != "") echo ' '.$nom.' ' . $TD.$valeur.''; //if ($valeur != "") echo '' . $nom . ' ' . $balise . $valeur . ''; - if ($valeur!="") echo " ".__($nom)." <$TD>".h($valeur)." "; + //if ($valeur!="") echo " ".__($nom)." <$TD>".h($valeur)." "; + if ($valeur!="") echo " ".__($nom)." <$TD>".$valeur." "; + //if ($valeur!="") echo " $nom <$TD>$valeur "; } + + //function displaySectionShowHide($controller_name, $entity_type_name, $title, $id_name, $is_masculine, $name_field_name, $entities) { //function displaySectionShowHide($controller_name, $entity_type_name, $title, $is_masculine, $name_field_name, $entities) { - function displayAssociatedEntitiesAsSectionShowHide($controller_name, $entity_type_name, $title, $is_masculine, $name_field_name, $entities) { + function displayAssociatedEntitiesAsSectionShowHide($controller_name, $entity_type_name, $title, $is_masculin, $name_field_name, $entities) { $id_name = $controller_name; $id_h3 = 't_'.$id_name; $id_i = 'i_'.$id_name; - $title = ucfirst($title).' associé'. ($is_masculine ? 's' : 'es'); + $title = ucfirst($title).' associé'. ($is_masculin ? 's' : 'es'); echo "

"; echo ""; @@ -71,9 +75,12 @@ class MyHelperHelper extends Helper { echo "
"; //if (true) { - if (empty($entities)) { + //if (empty($entities)) { + $shift3 = '   '; + $shift5 = '     '; + if ($entities->isEmpty()) { //echo "Aucune $entity_name liée à ce domaine."; - echo ($is_masculine ? "Aucun $entity_type_name associé" : "Aucune $entity_type_name associée"); + echo $shift5.($is_masculin ? "Aucun $entity_type_name associé" : "Aucune $entity_type_name associée"); } else { echo ""; @@ -86,7 +93,7 @@ class MyHelperHelper extends Helper { foreach ($entities as $entity) { echo ""; echo ""; /*
"; - echo '   '.$this->Html->link(h($entity->$name_field_name), ['controller' => $controller_name, 'action' => 'view', h($entity->id)]); + echo $shift3.$this->Html->link(h($entity->$name_field_name), ['controller' => $controller_name, 'action' => 'view', h($entity->id)]); echo " -- libgit2 0.21.2