Commit c6900c634c789a97025d63e2a036346e7b9086a2
1 parent
521ce3e5
Exists in
master
and in
1 other branch
refactorisation de la vue 'view' pour toutes les 'autres' entités
=> dans AppController:view_generic()
Showing
11 changed files
with
324 additions
and
184 deletions
Show diff stats
CHANGES.txt
@@ -119,6 +119,10 @@ Outre ces changements, voici d'autres changements importants : | @@ -119,6 +119,10 @@ Outre ces changements, voici d'autres changements importants : | ||
119 | 119 | ||
120 | ======= CHANGES ======= | 120 | ======= CHANGES ======= |
121 | 121 | ||
122 | +refactorisation de la vue 'view' pour toutes les 'autres' entités | ||
123 | + | ||
124 | +=> dans AppController:view_generic() | ||
125 | + | ||
122 | ------- | 126 | ------- |
123 | 05/10/2020 v4.104.5-3.7.9 (EP) | 127 | 05/10/2020 v4.104.5-3.7.9 (EP) |
124 | - (b) bugfix UPDATE script => les requetes sql n'étaient tout simplement PAS exécutées !!! | 128 | - (b) bugfix UPDATE script => les requetes sql n'étaient tout simplement PAS exécutées !!! |
src/Controller/AppController.php
@@ -32,6 +32,7 @@ use Cake\Log\Log; | @@ -32,6 +32,7 @@ use Cake\Log\Log; | ||
32 | use Cake\Http\Exception\NotImplementedException; | 32 | use Cake\Http\Exception\NotImplementedException; |
33 | use Cake\Controller\Component\AuthComponent; | 33 | use Cake\Controller\Component\AuthComponent; |
34 | use Cake\ORM\Entity; | 34 | use Cake\ORM\Entity; |
35 | +use Cake\Utility\Inflector; | ||
35 | 36 | ||
36 | 37 | ||
37 | 38 | ||
@@ -68,8 +69,14 @@ class AppController extends Controller | @@ -68,8 +69,14 @@ class AppController extends Controller | ||
68 | 69 | ||
69 | // - ATTRIBUTS VARIABLES | 70 | // - ATTRIBUTS VARIABLES |
70 | 71 | ||
71 | - // Par défaut, genre masculin | ||
72 | - protected $is_masculin = true; | 72 | + // Genre |
73 | + // Par défaut : masculin | ||
74 | + public $is_masculin = true; | ||
75 | + /* | ||
76 | + public function isMasculin() { | ||
77 | + return isset($this->is_masculin) ? $this->is_masculin ; true; | ||
78 | + } | ||
79 | + */ | ||
73 | 80 | ||
74 | // (EP) Seulement pour les tests | 81 | // (EP) Seulement pour les tests |
75 | // Permet à un test de forcer (si true) le re-chargement d'une entité (car modifiée en BD) | 82 | // Permet à un test de forcer (si true) le re-chargement d'une entité (car modifiée en BD) |
@@ -404,7 +411,6 @@ class AppController extends Controller | @@ -404,7 +411,6 @@ class AppController extends Controller | ||
404 | } | 411 | } |
405 | 412 | ||
406 | 413 | ||
407 | - | ||
408 | protected function is_vowel($char) { return in_array(strtolower($char), ['a','e','i','o','u','y']); } | 414 | protected function is_vowel($char) { return in_array(strtolower($char), ['a','e','i','o','u','y']); } |
409 | 415 | ||
410 | // $form=1 => 'le', 'la', ou "l'" | 416 | // $form=1 => 'le', 'la', ou "l'" |
@@ -470,12 +476,39 @@ class AppController extends Controller | @@ -470,12 +476,39 @@ class AppController extends Controller | ||
470 | * - User => 'utilisateur' | 476 | * - User => 'utilisateur' |
471 | * ... | 477 | * ... |
472 | */ | 478 | */ |
473 | - public function getNiceTypeName() { | 479 | + //public static function getNiceTypeName() { |
480 | + public function getTypeNameSingular() { | ||
474 | //return strtolower($this->name); | 481 | //return strtolower($this->name); |
475 | - return strtolower($this->getName()); | 482 | + //return __CLASS__; |
483 | + //return strtolower( substr($this->getName(),0,-1) ); | ||
484 | + return substr($this->getTypeNamePlural(),0,-1); | ||
476 | } | 485 | } |
477 | //@deprecated | 486 | //@deprecated |
478 | - public function getNiceName() { return $this->getNiceTypeName(); } | 487 | + public function getNiceName() { return $this->getTypeNameSingular(); } |
488 | + | ||
489 | + // Nom pluriel affichable pour cette entité | ||
490 | + // ex: 'suivis', 'matériels', 'catégories', ... | ||
491 | + public function getTypeNamePlural() { | ||
492 | + //return strtolower($this->name); | ||
493 | + //return __CLASS__; | ||
494 | + return strtolower( $this->getName() ); | ||
495 | + } | ||
496 | + | ||
497 | + // ex: 'sur_categorie_id' | ||
498 | + public function getFkName() { | ||
499 | + // ex: SurCategories => sur_categories | ||
500 | + //debug($this->getName()); | ||
501 | + //debug($this->name); | ||
502 | + //$fkname = Inflector::tableize($this->getName()); | ||
503 | + //$fkname = Inflector::humanize($this->getName()); | ||
504 | + //$fkname = Inflector::camelize($this->getName()); | ||
505 | + $fkname = Inflector::underscore($this->getName()); | ||
506 | + //debug($fkname); | ||
507 | + //exit; | ||
508 | + // ex: sur_categorie | ||
509 | + $fkname = substr($fkname,0,-1); | ||
510 | + return $fkname.'_id'; | ||
511 | + } | ||
479 | 512 | ||
480 | 513 | ||
481 | 514 | ||
@@ -2087,8 +2120,126 @@ class AppController extends Controller | @@ -2087,8 +2120,126 @@ class AppController extends Controller | ||
2087 | } // beforeFilter() | 2120 | } // beforeFilter() |
2088 | 2121 | ||
2089 | 2122 | ||
2123 | + public function view_generic($id, $associated_entity_types) { | ||
2124 | + | ||
2125 | + // ex: SurCategories | ||
2126 | + $controller_name = $this->getName(); | ||
2127 | + /* | ||
2128 | + $entity = $this->SurCategories->get($id, [ | ||
2129 | + 'contain' => [] | ||
2130 | + ]); | ||
2131 | + */ | ||
2132 | + $entity = $this->$controller_name->get($id, [ | ||
2133 | + 'contain' => [] | ||
2134 | + ]); | ||
2135 | + $entities_list = []; | ||
2136 | + // ex: 'sur_categorie_id' | ||
2137 | + $fk_name = $this->getFkName(); | ||
2138 | + //debug($fk_name);exit; | ||
2139 | + //debug($fk_name); | ||
2140 | + //$fk_name = 'sur_categorie_id'; | ||
2141 | + /* | ||
2142 | + $categories = TableRegistry::get('Categories')->find()->where([ | ||
2143 | + 'sur_categorie_id =' => $id | ||
2144 | + ]); | ||
2145 | + $materiels = TableRegistry::get('Materiels')->find('all')->where([ | ||
2146 | + 'sur_categorie_id =' => $id | ||
2147 | + ]); | ||
2148 | + */ | ||
2149 | + foreach ($associated_entity_types as $entity_type) { | ||
2150 | + $entities_list[$entity_type] = []; | ||
2151 | + // shortcut | ||
2152 | + $et = &$entities_list[$entity_type]; | ||
2153 | + $et['controller_name'] = $entity_type; | ||
2154 | + // ex: 'App\Controller\CategoriesController' | ||
2155 | + $c = 'App\\Controller\\'.$entity_type.'Controller'; | ||
2156 | + // instance du controleur | ||
2157 | + $c = new $c(); | ||
2158 | + // ex: 'catégorie' | ||
2159 | + $et['entity_type_name_singular'] = $c->getTypeNameSingular(); | ||
2160 | + // ex: 'catégories' | ||
2161 | + $et['entity_title'] = $c->getTypeNamePlural(); | ||
2162 | + $et['is_masculin'] = $c->is_masculin; | ||
2163 | + $et['name_field_label'] = $c->getNameFieldLabel(); | ||
2164 | + //$et['entities'] = $this->SurCategories->$entity_type->find()->where([ | ||
2165 | + //$et['entities'] = $this->$controller_name->$entity_type->find()->where([ | ||
2166 | + //$table = $this->$controller_name; | ||
2167 | + //$table = $this->getTableLocator()->get($controller_name); | ||
2168 | + //$table = $this->getTableLocator()->get($controller_name); | ||
2169 | + /* | ||
2170 | + $et['entities'] = $table->$entity_type->find()->where([ | ||
2171 | + "$fk_name =" => $id | ||
2172 | + ]); | ||
2173 | + */ | ||
2174 | + $table = TableRegistry::getTableLocator()->get($entity_type); | ||
2175 | + //$table = TableRegistry::getTableLocator()->get('SurCategories'); | ||
2176 | + //debug($table); exit; | ||
2177 | + $et['entities'] = $table->find()->where([ | ||
2178 | + "$fk_name =" => $id | ||
2179 | + ]); | ||
2180 | + } | ||
2181 | + //debug($entities_list); exit; | ||
2182 | + | ||
2183 | + //$controller_name = $this->SurCategories->get($id, [ | ||
2184 | + | ||
2185 | + /* | ||
2186 | + $categories = [ | ||
2187 | + 'controller_name' => 'Categories', | ||
2188 | + 'entity_type_name' => 'catégorie', | ||
2189 | + 'title' => 'Catégories', | ||
2190 | + //'id_name' => 'categs', | ||
2191 | + 'is_masculine' => false, | ||
2192 | + 'name_field_name' => 'nom', | ||
2193 | + 'entities' => $categories, | ||
2194 | + ]; | ||
2195 | + $materiels = [ | ||
2196 | + 'controller_name' => 'Materiels', | ||
2197 | + 'entity_type_name' => 'matériel', | ||
2198 | + 'title' => 'Matériels', | ||
2199 | + //'id_name' => 'categs', | ||
2200 | + 'is_masculine' => true, | ||
2201 | + 'name_field_name' => 'designation', | ||
2202 | + 'entities' => $materiels, | ||
2203 | + ]; | ||
2204 | + */ | ||
2205 | + | ||
2206 | + // On passe ces variables à la vue | ||
2207 | + //$entities_list = [$categories, $materiels]; | ||
2208 | + //$entity_article = 'le '; | ||
2209 | + $entity_article = $this->getMyArticle(); | ||
2210 | + //$entity_type_name = 'domaine'; | ||
2211 | + $entity_type_name_singular = $this->getTypeNameSingular(); | ||
2212 | + //$entity_name = $entity->getMyName(); | ||
2213 | + //$entity_name = $entity->nom; | ||
2214 | + $entity_name_field_label = $this->getNameFieldLabel(); | ||
2215 | + $entity_name = $entity->$entity_name_field_label; | ||
2216 | + $this->set(compact( | ||
2217 | + | ||
2218 | + // Infos sur l'entité courante | ||
2219 | + 'entity_article', | ||
2220 | + 'entity_type_name_singular', | ||
2221 | + 'entity_name', | ||
2222 | + 'entity', | ||
2223 | + | ||
2224 | + // Infos sur les entités associées | ||
2225 | + 'entities_list' | ||
2226 | + )); | ||
2227 | + //debug($this->viewVars);exit; | ||
2228 | + //$this->set('surCategory', $surCategory); | ||
2229 | + //$this->set('categories', $categories); | ||
2230 | + //$this->set('materiels', $materiels); | ||
2231 | + | ||
2232 | + // (EP) Automatique depuis 3.1 (et inutile pour nous) | ||
2233 | + /* | ||
2234 | + // Spécifie quelles variables de vues JsonView doit sérialiser | ||
2235 | + $this->set('_serialize', [ | ||
2236 | + 'surCategory' | ||
2237 | + ]); | ||
2238 | + */ | ||
2239 | + } // view() | ||
2240 | + | ||
2090 | /** | 2241 | /** |
2091 | - * Add or Edit method (do either add() or edit()) | 2242 | + * Add or Edit generic method (do either add() or edit()) |
2092 | * => Factorisation de add() et edit() | 2243 | * => Factorisation de add() et edit() |
2093 | * (voir aussi https://book.cakephp.org/3.0/en/orm.html) | 2244 | * (voir aussi https://book.cakephp.org/3.0/en/orm.html) |
2094 | * | 2245 | * |
@@ -3076,7 +3227,9 @@ class AppController extends Controller | @@ -3076,7 +3227,9 @@ class AppController extends Controller | ||
3076 | //debug($control); exit; | 3227 | //debug($control); exit; |
3077 | 3228 | ||
3078 | // Entité (Entity) | 3229 | // Entité (Entity) |
3079 | - $entity_nice_name = $this->getNiceName(); // matériel, domaine, utilisateur... | 3230 | + //$entity_nice_name = $this->getNiceName(); // matériel, domaine, utilisateur... |
3231 | + $entity_nice_type_name = $this->getTypeNameSingular(); // matériel, domaine, utilisateur... | ||
3232 | + | ||
3080 | // Si pas d'entité définie => return | 3233 | // Si pas d'entité définie => return |
3081 | ////$entity = $this->e; | 3234 | ////$entity = $this->e; |
3082 | $entity = $this->getCurrentEntity(); | 3235 | $entity = $this->getCurrentEntity(); |
@@ -3127,7 +3280,7 @@ class AppController extends Controller | @@ -3127,7 +3280,7 @@ class AppController extends Controller | ||
3127 | $action_verb = $action_noun_and_verb[1]; | 3280 | $action_verb = $action_noun_and_verb[1]; |
3128 | */ | 3281 | */ |
3129 | //$entity_type = $this->getEntityTypeName(); | 3282 | //$entity_type = $this->getEntityTypeName(); |
3130 | - $entity_type = strtolower( substr($control,0,-1) ); | 3283 | + //$entity_type = strtolower( substr($control,0,-1) ); |
3131 | $article_le = $action_attrs['verb_article'] ? $action_attrs['verb_article'] : $this->getMyArticle(1); | 3284 | $article_le = $action_attrs['verb_article'] ? $action_attrs['verb_article'] : $this->getMyArticle(1); |
3132 | $article_dun = $action_attrs['noun_article'] ? $action_attrs['noun_article'] : $this->getMyArticle(3); | 3285 | $article_dun = $action_attrs['noun_article'] ? $action_attrs['noun_article'] : $this->getMyArticle(3); |
3133 | $id = $entity ? $entity->id : null; | 3286 | $id = $entity ? $entity->id : null; |
@@ -3185,7 +3338,7 @@ class AppController extends Controller | @@ -3185,7 +3338,7 @@ class AppController extends Controller | ||
3185 | //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)"; | 3338 | //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)"; |
3186 | //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)"; | 3339 | //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)"; |
3187 | //$msglog = ucfirst($entity_type).' '.$action_attrs['past_verb_conj']; | 3340 | //$msglog = ucfirst($entity_type).' '.$action_attrs['past_verb_conj']; |
3188 | - $msglog = ucfirst($entity_nice_name).' '.$action_attrs['past_verb_conj']; | 3341 | + $msglog = ucfirst($entity_nice_type_name).' '.$action_attrs['past_verb_conj']; |
3189 | if ($entity) $msglog .= " = '$entity_name' (id=$id)"; | 3342 | if ($entity) $msglog .= " = '$entity_name' (id=$id)"; |
3190 | // Cas particulier d'un Document : on affiche son type | 3343 | // Cas particulier d'un Document : on affiche son type |
3191 | if ($entity instanceof Document) $msglog .= " (type={$entity->type_doc})"; | 3344 | if ($entity instanceof Document) $msglog .= " (type={$entity->type_doc})"; |
@@ -3228,7 +3381,7 @@ class AppController extends Controller | @@ -3228,7 +3381,7 @@ class AppController extends Controller | ||
3228 | // (1) Sujet : | 3381 | // (1) Sujet : |
3229 | 3382 | ||
3230 | //$subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_type"; | 3383 | //$subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_type"; |
3231 | - $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_nice_name"; | 3384 | + $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_nice_type_name"; |
3232 | $DEBUG && debug($subject); | 3385 | $DEBUG && debug($subject); |
3233 | 3386 | ||
3234 | // (2) Message (body) : | 3387 | // (2) Message (body) : |
@@ -3244,7 +3397,7 @@ class AppController extends Controller | @@ -3244,7 +3397,7 @@ class AppController extends Controller | ||
3244 | $msg_mail .= "$user a ".$action_attrs['past_verb']; | 3397 | $msg_mail .= "$user a ".$action_attrs['past_verb']; |
3245 | if ($entity) { | 3398 | if ($entity) { |
3246 | //$msg_mail .= " $article_le$entity_type '$entity_name'"; | 3399 | //$msg_mail .= " $article_le$entity_type '$entity_name'"; |
3247 | - $msg_mail .= " $article_le$entity_nice_name '$entity_name'"; | 3400 | + $msg_mail .= " $article_le$entity_nice_type_name '$entity_name'"; |
3248 | // Cas particulier d'un Document : on affiche son type | 3401 | // Cas particulier d'un Document : on affiche son type |
3249 | if ($entity instanceof Document) $msg_mail .= " (type={$entity->type_doc})"; | 3402 | if ($entity instanceof Document) $msg_mail .= " (type={$entity->type_doc})"; |
3250 | // (EP) Ajout de l'url (ou id) du materiel | 3403 | // (EP) Ajout de l'url (ou id) du materiel |
src/Controller/CategoriesController.php
@@ -12,6 +12,13 @@ use Cake\ORM\TableRegistry; | @@ -12,6 +12,13 @@ use Cake\ORM\TableRegistry; | ||
12 | class CategoriesController extends AppController | 12 | class CategoriesController extends AppController |
13 | { | 13 | { |
14 | 14 | ||
15 | + // Genre | ||
16 | + public $is_masculin = false; | ||
17 | + | ||
18 | + // Nom pluriel affichable pour cette entité | ||
19 | + //@Override | ||
20 | + public function getTypeNamePlural() { return 'catégories'; } | ||
21 | + | ||
15 | public function getArticle() | 22 | public function getArticle() |
16 | { | 23 | { |
17 | return "La"; | 24 | return "La"; |
@@ -110,6 +117,14 @@ class CategoriesController extends AppController | @@ -110,6 +117,14 @@ class CategoriesController extends AppController | ||
110 | */ | 117 | */ |
111 | public function view($id = null) | 118 | public function view($id = null) |
112 | { | 119 | { |
120 | + $associated_entity_types = [ | ||
121 | + 'SousCategories', | ||
122 | + 'Materiels' | ||
123 | + ]; | ||
124 | + //return parent::view($id, $associated_entity_types); | ||
125 | + return $this->view_generic($id, $associated_entity_types); | ||
126 | + | ||
127 | + /* | ||
113 | $category = $this->Categories->get($id, [ | 128 | $category = $this->Categories->get($id, [ |
114 | 'contain' => [ | 129 | 'contain' => [ |
115 | 'SurCategories' | 130 | 'SurCategories' |
@@ -129,6 +144,7 @@ class CategoriesController extends AppController | @@ -129,6 +144,7 @@ class CategoriesController extends AppController | ||
129 | $this->set('_serialize', [ | 144 | $this->set('_serialize', [ |
130 | 'category' | 145 | 'category' |
131 | ]); | 146 | ]); |
147 | + */ | ||
132 | } | 148 | } |
133 | 149 | ||
134 | /** | 150 | /** |
src/Controller/MaterielsController.php
@@ -38,9 +38,14 @@ class MaterielsController extends AppController { | @@ -38,9 +38,14 @@ class MaterielsController extends AppController { | ||
38 | 38 | ||
39 | // - ATTRIBUTS VARIABLES | 39 | // - ATTRIBUTS VARIABLES |
40 | 40 | ||
41 | - // Nom affichable pour cette entité | 41 | + /* |
42 | + // Nom singulier affichable pour cette entité | ||
42 | // @Override | 43 | // @Override |
43 | - public function getNiceName() { return "matériel"; } | 44 | + public function getTypeNameSingular() { return "matériel"; } |
45 | + */ | ||
46 | + // Nom pluriel affichable pour cette entité | ||
47 | + //@Override | ||
48 | + public function getTypeNamePlural() { return 'matériels'; } | ||
44 | 49 | ||
45 | 50 | ||
46 | private $NOTARCHIVED = [ | 51 | private $NOTARCHIVED = [ |
src/Controller/SurCategoriesController.php
@@ -11,17 +11,38 @@ use Cake\ORM\TableRegistry; | @@ -11,17 +11,38 @@ use Cake\ORM\TableRegistry; | ||
11 | */ | 11 | */ |
12 | class SurCategoriesController extends AppController | 12 | class SurCategoriesController extends AppController |
13 | { | 13 | { |
14 | + | ||
15 | + /* | ||
16 | + // Nom singulier affichable pour cette entité | ||
17 | + // @Override parent | ||
18 | + public function getTypeNameSingular() { | ||
19 | + //return strtolower($this->name); | ||
20 | + //return strtolower($this->getName()); | ||
21 | + return 'domaine'; | ||
22 | + } | ||
23 | + */ | ||
24 | + // Surcharge pour corriger bug cakephp qui renvoie 'Surcategories' au lieu de 'SurCategories' !! | ||
25 | + //@Override | ||
26 | + public function getName() { | ||
27 | + //return strtolower($this->name); | ||
28 | + //return strtolower($this->getName()); | ||
29 | + return 'SurCategories'; | ||
30 | + } | ||
31 | + // Nom pluriel affichable pour cette entité | ||
32 | + //@Override | ||
33 | + public function getTypeNamePlural() { | ||
34 | + //return strtolower($this->name); | ||
35 | + //return strtolower($this->getName()); | ||
36 | + return 'domaines'; | ||
37 | + } | ||
38 | + | ||
14 | 39 | ||
15 | // Genre | 40 | // Genre |
16 | // @Override | 41 | // @Override |
17 | - protected $is_masculin = false; | 42 | + //public $is_masculin = false; |
18 | // @deprected | 43 | // @deprected |
19 | public function getArticle() { return "La "; } | 44 | public function getArticle() { return "La "; } |
20 | 45 | ||
21 | - // Nom affichable pour cette entité | ||
22 | - // @Override | ||
23 | - public function getNiceName() { return "domaine"; } | ||
24 | - | ||
25 | /* | 46 | /* |
26 | static public function getActions() { | 47 | static public function getActions() { |
27 | // Toutes les actions CRUD | 48 | // Toutes les actions CRUD |
@@ -134,6 +155,7 @@ class SurCategoriesController extends AppController | @@ -134,6 +155,7 @@ class SurCategoriesController extends AppController | ||
134 | */ | 155 | */ |
135 | } | 156 | } |
136 | 157 | ||
158 | + | ||
137 | /** | 159 | /** |
138 | * View method | 160 | * View method |
139 | * | 161 | * |
@@ -144,24 +166,15 @@ class SurCategoriesController extends AppController | @@ -144,24 +166,15 @@ class SurCategoriesController extends AppController | ||
144 | */ | 166 | */ |
145 | public function view($id = null) | 167 | public function view($id = null) |
146 | { | 168 | { |
147 | - $surCategory = $this->SurCategories->get($id, [ | ||
148 | - 'contain' => [] | ||
149 | - ]); | ||
150 | - $categories = TableRegistry::get('Categories')->find()->where([ | ||
151 | - 'sur_categorie_id =' => $id | ||
152 | - ]); | ||
153 | - $this->set('categories', $categories); | ||
154 | - | ||
155 | - $materiels = TableRegistry::get('Materiels')->find('all')->where([ | ||
156 | - 'sur_categorie_id =' => $id | ||
157 | - ]); | ||
158 | - $this->set('materiels', $materiels); | ||
159 | - | ||
160 | - $this->set('surCategory', $surCategory); | ||
161 | - $this->set('_serialize', [ | ||
162 | - 'surCategory' | ||
163 | - ]); | 169 | + $associated_entity_types = [ |
170 | + 'Categories', | ||
171 | + 'Users', | ||
172 | + 'Materiels' | ||
173 | + ]; | ||
174 | + //return parent::view($id, $associated_entity_types); | ||
175 | + return $this->view_generic($id, $associated_entity_types); | ||
164 | } | 176 | } |
177 | + | ||
165 | 178 | ||
166 | /** | 179 | /** |
167 | * Add method | 180 | * Add method |
src/Controller/UsersController.php
@@ -14,9 +14,19 @@ class UsersController extends AppController | @@ -14,9 +14,19 @@ class UsersController extends AppController | ||
14 | { | 14 | { |
15 | 15 | ||
16 | 16 | ||
17 | + /* | ||
17 | // Nom affichable pour cette entité | 18 | // Nom affichable pour cette entité |
18 | // @Override | 19 | // @Override |
19 | public function getNiceName() { return "utilisateur"; } | 20 | public function getNiceName() { return "utilisateur"; } |
21 | + */ | ||
22 | + // Nom pluriel affichable pour cette entité | ||
23 | + //@Override | ||
24 | + public function getTypeNamePlural() { | ||
25 | + //return strtolower($this->name); | ||
26 | + //return strtolower($this->getName()); | ||
27 | + return 'utilisateurs'; | ||
28 | + } | ||
29 | + | ||
20 | 30 | ||
21 | // "l'" utilisateur (et non pas "le utilisateur") | 31 | // "l'" utilisateur (et non pas "le utilisateur") |
22 | // @deprecated | 32 | // @deprecated |
src/Model/Table/SurCategoriesTable.php
@@ -25,12 +25,27 @@ class SurCategoriesTable extends AppTable | @@ -25,12 +25,27 @@ class SurCategoriesTable extends AppTable | ||
25 | parent::initialize($config); | 25 | parent::initialize($config); |
26 | 26 | ||
27 | $this->setTable('sur_categories'); | 27 | $this->setTable('sur_categories'); |
28 | - $this->setDisplayField('id'); | 28 | + //$this->setDisplayField('id'); |
29 | + $this->setDisplayField('nom'); | ||
29 | $this->setPrimaryKey('id'); | 30 | $this->setPrimaryKey('id'); |
30 | - | 31 | + |
32 | + /* C'EST FAUX | ||
31 | $this->hasMany('Users', [ | 33 | $this->hasMany('Users', [ |
32 | 'foreignKey' => 'groupes_thematique_id' | 34 | 'foreignKey' => 'groupes_thematique_id' |
33 | ]); | 35 | ]); |
36 | + */ | ||
37 | + $this->hasMany('Users', [ | ||
38 | + 'foreignKey' => 'sur_categorie_id' | ||
39 | + ]); | ||
40 | + | ||
41 | + $this->hasMany('Categories') | ||
42 | + ->setForeignKey('sur_categorie_id') | ||
43 | + ->setDependent(true); // si le domaine est supprimé, les catégories liées le seront aussi | ||
44 | + | ||
45 | + $this->hasMany('Materiels') | ||
46 | + ->setForeignKey('sur_categorie_id') | ||
47 | + ->setDependent(false); // si le domaine est supprimé, les matos liés eux NE LE SERONT PAS !! | ||
48 | + | ||
34 | } | 49 | } |
35 | 50 | ||
36 | /** | 51 | /** |
src/Template/Categories/view.ctp
1 | - | ||
2 | -<div class="categories view"> | ||
3 | - <h2>Détail catégorie</h2> | ||
4 | - <table style="margin-bottom: 30px;"> | ||
5 | - | ||
6 | - <tr> | ||
7 | - <th style="width: 250px;"></th> | ||
8 | - <th></th> | ||
9 | - </tr> | ||
10 | - | ||
11 | - <?php | ||
12 | - if (in_array($role, [ | ||
13 | - 'Administration Plus', | ||
14 | - 'Super Administrateur' | ||
15 | - ])) { | ||
16 | - echo $this->Html->link(__('<i class="icon-pencil"></i> Editer cette catégorie'), [ | ||
17 | - 'action' => 'edit', | ||
18 | - $category->id | ||
19 | - ], [ | ||
20 | - 'style' => 'margin-right: 40px; display: inline-block', | ||
21 | - 'escape' => false, | ||
22 | - 'onclick' => 'return true;' | ||
23 | - ]); | ||
24 | - } | ||
25 | - | ||
26 | - if (in_array($role, [ | ||
27 | - 'Super Administrateur' | ||
28 | - ])) { | ||
29 | - echo $this->Form->postLink(__('<i class="icon-trash"></i> Supprimer cette catégorie'), [ | ||
30 | - 'action' => 'delete', | ||
31 | - $category->id | ||
32 | - ], [ | ||
33 | - 'style' => 'display: inline-block', | ||
34 | - 'escape' => false, | ||
35 | - 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $category->id) | ||
36 | - ]); | ||
37 | - } | ||
38 | - | ||
39 | - $displayElement(__('Nom'), h($category->nom)); | ||
40 | - $displayElement(__('Domaine'), $category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [ | ||
41 | - 'controller' => 'SurCategories', | ||
42 | - 'action' => 'view', | ||
43 | - $category->sur_category->id | ||
44 | - ]) : ''); | ||
45 | - | ||
46 | - ?> | ||
47 | - | ||
48 | - </table> | ||
49 | - | ||
50 | - | ||
51 | - <h3 id="t_souscategs" class='toggle' style="cursor: pointer;"> | ||
52 | - <i class="icon-chevron-down" style="font-size: 14px;" id="i_souscategs"></i> | ||
53 | - <span style="text-decoration: underline;">Sous-Catégories associées (<?= $sousCategories->count()?>)</span> | ||
54 | - </h3> | ||
55 | - <div id="souscategs" style="margin-bottom: 20px;"> | ||
56 | - | ||
57 | - <?php if (!empty($sousCategories)) { ?> | ||
58 | - <table> | ||
59 | - <tr> | ||
60 | - <th><?= __('Nom') ?></th> | ||
61 | - <th style="width: 50px;"><?= __('Détail') ?></th> | ||
62 | - </tr> | ||
63 | - <?php foreach ($sousCategories as $sous_category): ?> | ||
64 | - <tr> | ||
65 | - | ||
66 | - <td><?= $this->Html->link(h($sous_category->nom), ['controller' => 'SousCategories', 'action' => 'view', h($sous_category->id)]); ?></td> | ||
67 | - | ||
68 | - <td class="actions"> | ||
69 | - <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'SousCategories', 'action' => 'view', $sous_category->id], ['escape' => false, 'style' => 'margin:0']) ?> | ||
70 | - </td> | ||
71 | - </tr> | ||
72 | - <?php endforeach; ?> | ||
73 | - </table> | ||
74 | - <?php }else { echo 'Aucune sous-catégorie lié à cette catégorie.'; } ?> | ||
75 | - </div> | ||
76 | - | ||
77 | - | ||
78 | - <h3 id="t_matos" class='toggle' style="cursor: pointer;"> | ||
79 | - <i class="icon-chevron-down" style="font-size: 14px;" id="i_matos"></i> | ||
80 | - <span style="text-decoration: underline;">Materiels associés (<?= $materiels->count()?>)</span> | ||
81 | - </h3> | ||
82 | - <div id="matos" style="margin-bottom: 20px;"> | ||
83 | - | ||
84 | - <?php if (!empty($materiels)) { ?> | ||
85 | - <table> | ||
86 | - <tr> | ||
87 | - <th><?= __('Désignation') ?></th> | ||
88 | - <th style="width: 50px;"><?= __('Détail') ?></th> | ||
89 | - </tr> | ||
90 | - <?php foreach ($materiels as $materiel): ?> | ||
91 | - <tr> | ||
92 | - | ||
93 | - <!-- (EP 20200310) bugfix: si on utilise h(), les accents sont mal affichés... | ||
94 | - <td><?= $this->Html->link(h($materiel->designation), ['controller' => 'Materiels', 'action' => 'view', h($materiel->id)]); ?></td> | ||
95 | - --> | ||
96 | - <td><?= $this->Html->link($materiel->designation, ['controller' => 'Materiels', 'action' => 'view', h($materiel->id)]); ?></td> | ||
97 | - | ||
98 | - <td class="actions"> | ||
99 | - <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Materiels', 'action' => 'view', $materiel->id], ['escape' => false, 'style' => 'margin:0']) ?> | ||
100 | - </td> | ||
101 | - </tr> | ||
102 | - <?php endforeach; ?> | ||
103 | - </table> | ||
104 | - <?php }else { echo 'Aucun matériel lié à cette catégorie.'; } ?> | ||
105 | - </div> | ||
106 | - | ||
107 | - | ||
108 | -</div> | ||
109 | - | ||
110 | -<!-- | ||
111 | -<div class="actions"> | ||
112 | - <php echo $this->element('menu') ?> | ||
113 | - <php | ||
114 | - | ||
115 | -echo $this->element('menu_view', [ | ||
116 | - 'pluralHumanName' => 'Catégories', | ||
117 | - 'singularHumanName' => 'Catégorie', | ||
118 | - 'lien' => $category->id | ||
119 | -])?> | ||
120 | - </div> | ||
121 | ---> | ||
122 | \ No newline at end of file | 1 | \ No newline at end of file |
2 | +<!-- src/Template/Categories/view.ctp --> | ||
3 | + | ||
4 | +<?php | ||
5 | +/* | ||
6 | +Le fichier de vue étendu ici est utilisé comme une vue parente. | ||
7 | +Il s’attend à ce que la vue l’étendant (celle-ci par exemple) | ||
8 | +définisse des blocks sidebar et title. | ||
9 | +Le block content est un block spécial que CakePHP crée. | ||
10 | +Il contiendra tous les contenus non capturés de la vue étendue. | ||
11 | +*/ | ||
12 | +$this->extend('/Common/view'); | ||
13 | + | ||
14 | +/* | ||
15 | +//Vous pouvez récupérer la liste de tous blocks existants en utilisant la méthode blocks(): | ||
16 | +$list = $this->blocks(); | ||
17 | + | ||
18 | +(En admettant que notre fichier de vue a une variable $post avec les données sur notre post) | ||
19 | + | ||
20 | +$this->assign('title', $post->title); | ||
21 | +$this->start('sidebar'); | ||
22 | +?> | ||
23 | + <li> | ||
24 | + <?php | ||
25 | + echo $this->Html->link('edit', [ | ||
26 | + 'action' => 'edit', | ||
27 | + $post->id | ||
28 | + ]); ?> | ||
29 | + </li> | ||
30 | +<?php | ||
31 | +$this->end(); | ||
32 | +?> | ||
33 | + | ||
34 | +// The remaining content will be available as the 'content' block | ||
35 | +// In the parent view. | ||
36 | +<?= h($post->body) ?> | ||
37 | +*/ |
src/Template/Common/view.ctp
1 | <?php | 1 | <?php |
2 | +$DEBUG=false; | ||
3 | +//$DEBUG=true; | ||
4 | + | ||
2 | // Variables passées par le contrôleur | 5 | // Variables passées par le contrôleur |
3 | 6 | ||
4 | -// fonctions | ||
5 | -//$displayElement = $displayElement; | ||
6 | -$categories = $categories; | ||
7 | -$materiels = $materiels; | 7 | +$role = $role; |
8 | 8 | ||
9 | -$entity = $surCategory; | ||
10 | $entity = $entity; | 9 | $entity = $entity; |
10 | +//$categories = $categories; | ||
11 | +//$materiels = $materiels; | ||
12 | +$entity_article = $entity_article; | ||
13 | +$entity_type_name_singular = $entity_type_name_singular; | ||
14 | +$entity_name = $entity_name; | ||
15 | + | ||
16 | +// Liste des entités à afficher (en tant qu'entité associée) : | ||
17 | +// En général, par défaut : "Matériels associés" et "Utilisateurs associés" | ||
18 | +$entities_list = $entities_list; | ||
19 | + | ||
20 | +// Fonctions | ||
21 | +//$displayElement = $displayElement; | ||
22 | + | ||
11 | //debug($entity); | 23 | //debug($entity); |
12 | //debug($entity->getSource()); | 24 | //debug($entity->getSource()); |
13 | - | ||
14 | -$DEBUG=false; | ||
15 | -//$DEBUG=true; | 25 | +//exit; |
16 | 26 | ||
17 | if ($DEBUG) { | 27 | if ($DEBUG) { |
18 | - $article = 'le '; | ||
19 | - $entity_type_name = 'domaine'; | 28 | + $entity_article = 'le '; |
29 | + $entity_type_name_singular = 'domaine'; | ||
20 | //$entity_name = $entity->getMyName(); | 30 | //$entity_name = $entity->getMyName(); |
21 | $entity_name = $entity->nom; | 31 | $entity_name = $entity->nom; |
22 | 32 | ||
@@ -45,15 +55,9 @@ if ($DEBUG) { | @@ -45,15 +55,9 @@ if ($DEBUG) { | ||
45 | $entities_list = [$categories, $materiels]; | 55 | $entities_list = [$categories, $materiels]; |
46 | } | 56 | } |
47 | 57 | ||
48 | -$entity_name = $entity_name; | ||
49 | - | ||
50 | - | ||
51 | - | ||
52 | -// Liste des entités à afficher (en tant qu'entité associée) : | ||
53 | -// En général, par défaut : "Matériels associés" et "Utilisateurs associés" | ||
54 | -$entities_list = $entities_list; | ||
55 | ?> | 58 | ?> |
56 | 59 | ||
60 | + | ||
57 | <!-- | 61 | <!-- |
58 | <div class="surCategories view"> | 62 | <div class="surCategories view"> |
59 | --> | 63 | --> |
@@ -62,8 +66,13 @@ $entities_list = $entities_list; | @@ -62,8 +66,13 @@ $entities_list = $entities_list; | ||
62 | <!-- | 66 | <!-- |
63 | <h2>Détail domaine</h2> | 67 | <h2>Détail domaine</h2> |
64 | --> | 68 | --> |
65 | - <h2>Informations sur <?=$article.$entity_type_name." $entity_name"?></h2> | 69 | + |
70 | + <h2>Informations sur <?=$entity_article.$entity_type_name_singular.' "'.$entity_name.'"'?></h2> | ||
66 | 71 | ||
72 | + <?= $this->Html->link("Voir toutes les entités (liste)", ['action'=>'index']) ?> | ||
73 | + <br /> | ||
74 | + <br /> | ||
75 | + | ||
67 | <table style="margin-bottom: 30px;"> | 76 | <table style="margin-bottom: 30px;"> |
68 | 77 | ||
69 | <tr> | 78 | <tr> |
@@ -121,11 +130,11 @@ $entities_list = $entities_list; | @@ -121,11 +130,11 @@ $entities_list = $entities_list; | ||
121 | // function displaySectionShowHide($controller_name, $entity_type_name, $title, $id_name, $is_masculine, $name_field_name, $entities) { | 130 | // function displaySectionShowHide($controller_name, $entity_type_name, $title, $id_name, $is_masculine, $name_field_name, $entities) { |
122 | $this->MyHelper->displayAssociatedEntitiesAsSectionShowHide( | 131 | $this->MyHelper->displayAssociatedEntitiesAsSectionShowHide( |
123 | $es['controller_name'], | 132 | $es['controller_name'], |
124 | - $es['entity_type_name'], | ||
125 | - $es['title'], | 133 | + $es['entity_type_name_singular'], |
134 | + $es['entity_title'], | ||
126 | //$es['id_name'], | 135 | //$es['id_name'], |
127 | - $es['is_masculine'], | ||
128 | - $es['name_field_name'], | 136 | + $es['is_masculin'], |
137 | + $es['name_field_label'], | ||
129 | $es['entities'] | 138 | $es['entities'] |
130 | ); | 139 | ); |
131 | //displaySectionShowHide($this->Html, false, 'Aucune catégorie liée', 'categs', 'Catégories', $categories, 'nom', 'Categories', 'catégorie'); | 140 | //displaySectionShowHide($this->Html, false, 'Aucune catégorie liée', 'categs', 'Catégories', $categories, 'nom', 'Categories', 'catégorie'); |
src/Template/Materiels/view.ctp
@@ -582,12 +582,12 @@ else if (h($entity->materiel_technique) == 1) | @@ -582,12 +582,12 @@ else if (h($entity->materiel_technique) == 1) | ||
582 | //$displayElement(__('Nom du materiel'),$entity->designation); | 582 | //$displayElement(__('Nom du materiel'),$entity->designation); |
583 | //$displayElement(__('Description'),$entity->description); | 583 | //$displayElement(__('Description'),$entity->description); |
584 | //$displayElement(__('Materiel inventorié'), $type); | 584 | //$displayElement(__('Materiel inventorié'), $type); |
585 | -$this->MyButton->displayElement('Nom du materiel',$entity->designation); | 585 | +$this->MyHelper->displayElement('Nom du materiel',$entity->designation); |
586 | 586 | ||
587 | // (EP202009) Deplacé tout en bas du tableau et affiché avec Text->autoParagraph() | 587 | // (EP202009) Deplacé tout en bas du tableau et affiché avec Text->autoParagraph() |
588 | //$this->MyButton->displayElement('Description',$entity->description); | 588 | //$this->MyButton->displayElement('Description',$entity->description); |
589 | 589 | ||
590 | -$this->MyButton->displayElement('Materiel inventorié',$type); | 590 | +$this->MyHelper->displayElement('Materiel inventorié',$type); |
591 | $displayElement(__('Domaine'), $entity->has('sur_category') ? h($entity->sur_category->nom) : ''); | 591 | $displayElement(__('Domaine'), $entity->has('sur_category') ? h($entity->sur_category->nom) : ''); |
592 | $displayElement(__('Catégorie'), $entity->has('category') ? h($entity->category->nom) : ''); | 592 | $displayElement(__('Catégorie'), $entity->has('category') ? h($entity->category->nom) : ''); |
593 | $displayElement(__('Sous-Catégorie'), $entity->has('sous_category') ? h($entity->sous_category->nom) : ''); | 593 | $displayElement(__('Sous-Catégorie'), $entity->has('sous_category') ? h($entity->sous_category->nom) : ''); |
src/View/Helper/MyHelperHelper.php
@@ -62,7 +62,7 @@ class MyHelperHelper extends Helper { | @@ -62,7 +62,7 @@ class MyHelperHelper extends Helper { | ||
62 | $id_name = $controller_name; | 62 | $id_name = $controller_name; |
63 | $id_h3 = 't_'.$id_name; | 63 | $id_h3 = 't_'.$id_name; |
64 | $id_i = 'i_'.$id_name; | 64 | $id_i = 'i_'.$id_name; |
65 | - $title = $title.' associé'. ($is_masculine ? 's' : 'es'); | 65 | + $title = ucfirst($title).' associé'. ($is_masculine ? 's' : 'es'); |
66 | 66 | ||
67 | echo "<h3 id='$id_h3' class='toggle' style='cursor: pointer;'>"; | 67 | echo "<h3 id='$id_h3' class='toggle' style='cursor: pointer;'>"; |
68 | echo "<i class='icon-chevron-down' style='font-size: 14px;' id='$id_i'></i>"; | 68 | echo "<i class='icon-chevron-down' style='font-size: 14px;' id='$id_i'></i>"; |