diff --git a/CHANGES.txt b/CHANGES.txt
index 7026f07..ff783d5 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -119,6 +119,10 @@ Outre ces changements, voici d'autres changements importants :
======= CHANGES =======
+refactorisation de la vue 'view' pour toutes les 'autres' entités
+
+=> dans AppController:view_generic()
+
-------
05/10/2020 v4.104.5-3.7.9 (EP)
- (b) bugfix UPDATE script => les requetes sql n'étaient tout simplement PAS exécutées !!!
diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php
index 86c8353..becc0ba 100755
--- a/src/Controller/AppController.php
+++ b/src/Controller/AppController.php
@@ -32,6 +32,7 @@ use Cake\Log\Log;
use Cake\Http\Exception\NotImplementedException;
use Cake\Controller\Component\AuthComponent;
use Cake\ORM\Entity;
+use Cake\Utility\Inflector;
@@ -68,8 +69,14 @@ class AppController extends Controller
// - ATTRIBUTS VARIABLES
- // Par défaut, genre masculin
- protected $is_masculin = true;
+ // Genre
+ // Par défaut : masculin
+ public $is_masculin = true;
+ /*
+ public function isMasculin() {
+ return isset($this->is_masculin) ? $this->is_masculin ; true;
+ }
+ */
// (EP) Seulement pour les tests
// 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
}
-
protected function is_vowel($char) { return in_array(strtolower($char), ['a','e','i','o','u','y']); }
// $form=1 => 'le', 'la', ou "l'"
@@ -470,12 +476,39 @@ class AppController extends Controller
* - User => 'utilisateur'
* ...
*/
- public function getNiceTypeName() {
+ //public static function getNiceTypeName() {
+ public function getTypeNameSingular() {
//return strtolower($this->name);
- return strtolower($this->getName());
+ //return __CLASS__;
+ //return strtolower( substr($this->getName(),0,-1) );
+ return substr($this->getTypeNamePlural(),0,-1);
}
//@deprecated
- public function getNiceName() { return $this->getNiceTypeName(); }
+ public function getNiceName() { return $this->getTypeNameSingular(); }
+
+ // Nom pluriel affichable pour cette entité
+ // ex: 'suivis', 'matériels', 'catégories', ...
+ public function getTypeNamePlural() {
+ //return strtolower($this->name);
+ //return __CLASS__;
+ return strtolower( $this->getName() );
+ }
+
+ // ex: 'sur_categorie_id'
+ public function getFkName() {
+ // ex: SurCategories => sur_categories
+ //debug($this->getName());
+ //debug($this->name);
+ //$fkname = Inflector::tableize($this->getName());
+ //$fkname = Inflector::humanize($this->getName());
+ //$fkname = Inflector::camelize($this->getName());
+ $fkname = Inflector::underscore($this->getName());
+ //debug($fkname);
+ //exit;
+ // ex: sur_categorie
+ $fkname = substr($fkname,0,-1);
+ return $fkname.'_id';
+ }
@@ -2087,8 +2120,126 @@ class AppController extends Controller
} // beforeFilter()
+ public function view_generic($id, $associated_entity_types) {
+
+ // ex: SurCategories
+ $controller_name = $this->getName();
+ /*
+ $entity = $this->SurCategories->get($id, [
+ 'contain' => []
+ ]);
+ */
+ $entity = $this->$controller_name->get($id, [
+ 'contain' => []
+ ]);
+ $entities_list = [];
+ // ex: 'sur_categorie_id'
+ $fk_name = $this->getFkName();
+ //debug($fk_name);exit;
+ //debug($fk_name);
+ //$fk_name = 'sur_categorie_id';
+ /*
+ $categories = TableRegistry::get('Categories')->find()->where([
+ 'sur_categorie_id =' => $id
+ ]);
+ $materiels = TableRegistry::get('Materiels')->find('all')->where([
+ 'sur_categorie_id =' => $id
+ ]);
+ */
+ foreach ($associated_entity_types as $entity_type) {
+ $entities_list[$entity_type] = [];
+ // shortcut
+ $et = &$entities_list[$entity_type];
+ $et['controller_name'] = $entity_type;
+ // ex: 'App\Controller\CategoriesController'
+ $c = 'App\\Controller\\'.$entity_type.'Controller';
+ // instance du controleur
+ $c = new $c();
+ // ex: 'catégorie'
+ $et['entity_type_name_singular'] = $c->getTypeNameSingular();
+ // ex: 'catégories'
+ $et['entity_title'] = $c->getTypeNamePlural();
+ $et['is_masculin'] = $c->is_masculin;
+ $et['name_field_label'] = $c->getNameFieldLabel();
+ //$et['entities'] = $this->SurCategories->$entity_type->find()->where([
+ //$et['entities'] = $this->$controller_name->$entity_type->find()->where([
+ //$table = $this->$controller_name;
+ //$table = $this->getTableLocator()->get($controller_name);
+ //$table = $this->getTableLocator()->get($controller_name);
+ /*
+ $et['entities'] = $table->$entity_type->find()->where([
+ "$fk_name =" => $id
+ ]);
+ */
+ $table = TableRegistry::getTableLocator()->get($entity_type);
+ //$table = TableRegistry::getTableLocator()->get('SurCategories');
+ //debug($table); exit;
+ $et['entities'] = $table->find()->where([
+ "$fk_name =" => $id
+ ]);
+ }
+ //debug($entities_list); exit;
+
+ //$controller_name = $this->SurCategories->get($id, [
+
+ /*
+ $categories = [
+ 'controller_name' => 'Categories',
+ 'entity_type_name' => 'catégorie',
+ 'title' => 'Catégories',
+ //'id_name' => 'categs',
+ 'is_masculine' => false,
+ 'name_field_name' => 'nom',
+ 'entities' => $categories,
+ ];
+ $materiels = [
+ 'controller_name' => 'Materiels',
+ 'entity_type_name' => 'matériel',
+ 'title' => 'Matériels',
+ //'id_name' => 'categs',
+ 'is_masculine' => true,
+ 'name_field_name' => 'designation',
+ 'entities' => $materiels,
+ ];
+ */
+
+ // On passe ces variables à la vue
+ //$entities_list = [$categories, $materiels];
+ //$entity_article = 'le ';
+ $entity_article = $this->getMyArticle();
+ //$entity_type_name = 'domaine';
+ $entity_type_name_singular = $this->getTypeNameSingular();
+ //$entity_name = $entity->getMyName();
+ //$entity_name = $entity->nom;
+ $entity_name_field_label = $this->getNameFieldLabel();
+ $entity_name = $entity->$entity_name_field_label;
+ $this->set(compact(
+
+ // Infos sur l'entité courante
+ 'entity_article',
+ 'entity_type_name_singular',
+ 'entity_name',
+ 'entity',
+
+ // Infos sur les entités associées
+ 'entities_list'
+ ));
+ //debug($this->viewVars);exit;
+ //$this->set('surCategory', $surCategory);
+ //$this->set('categories', $categories);
+ //$this->set('materiels', $materiels);
+
+ // (EP) Automatique depuis 3.1 (et inutile pour nous)
+ /*
+ // Spécifie quelles variables de vues JsonView doit sérialiser
+ $this->set('_serialize', [
+ 'surCategory'
+ ]);
+ */
+ } // view()
+
/**
- * Add or Edit method (do either add() or edit())
+ * Add or Edit generic method (do either add() or edit())
* => Factorisation de add() et edit()
* (voir aussi https://book.cakephp.org/3.0/en/orm.html)
*
@@ -3076,7 +3227,9 @@ class AppController extends Controller
//debug($control); exit;
// Entité (Entity)
- $entity_nice_name = $this->getNiceName(); // matériel, domaine, utilisateur...
+ //$entity_nice_name = $this->getNiceName(); // matériel, domaine, utilisateur...
+ $entity_nice_type_name = $this->getTypeNameSingular(); // matériel, domaine, utilisateur...
+
// Si pas d'entité définie => return
////$entity = $this->e;
$entity = $this->getCurrentEntity();
@@ -3127,7 +3280,7 @@ class AppController extends Controller
$action_verb = $action_noun_and_verb[1];
*/
//$entity_type = $this->getEntityTypeName();
- $entity_type = strtolower( substr($control,0,-1) );
+ //$entity_type = strtolower( substr($control,0,-1) );
$article_le = $action_attrs['verb_article'] ? $action_attrs['verb_article'] : $this->getMyArticle(1);
$article_dun = $action_attrs['noun_article'] ? $action_attrs['noun_article'] : $this->getMyArticle(3);
$id = $entity ? $entity->id : null;
@@ -3185,7 +3338,7 @@ class AppController extends Controller
//$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)";
//$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)";
//$msglog = ucfirst($entity_type).' '.$action_attrs['past_verb_conj'];
- $msglog = ucfirst($entity_nice_name).' '.$action_attrs['past_verb_conj'];
+ $msglog = ucfirst($entity_nice_type_name).' '.$action_attrs['past_verb_conj'];
if ($entity) $msglog .= " = '$entity_name' (id=$id)";
// Cas particulier d'un Document : on affiche son type
if ($entity instanceof Document) $msglog .= " (type={$entity->type_doc})";
@@ -3228,7 +3381,7 @@ class AppController extends Controller
// (1) Sujet :
//$subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_type";
- $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_nice_name";
+ $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_nice_type_name";
$DEBUG && debug($subject);
// (2) Message (body) :
@@ -3244,7 +3397,7 @@ class AppController extends Controller
$msg_mail .= "$user a ".$action_attrs['past_verb'];
if ($entity) {
//$msg_mail .= " $article_le$entity_type '$entity_name'";
- $msg_mail .= " $article_le$entity_nice_name '$entity_name'";
+ $msg_mail .= " $article_le$entity_nice_type_name '$entity_name'";
// Cas particulier d'un Document : on affiche son type
if ($entity instanceof Document) $msg_mail .= " (type={$entity->type_doc})";
// (EP) Ajout de l'url (ou id) du materiel
diff --git a/src/Controller/CategoriesController.php b/src/Controller/CategoriesController.php
index f22002d..7ff09f5 100755
--- a/src/Controller/CategoriesController.php
+++ b/src/Controller/CategoriesController.php
@@ -12,6 +12,13 @@ use Cake\ORM\TableRegistry;
class CategoriesController extends AppController
{
+ // Genre
+ public $is_masculin = false;
+
+ // Nom pluriel affichable pour cette entité
+ //@Override
+ public function getTypeNamePlural() { return 'catégories'; }
+
public function getArticle()
{
return "La";
@@ -110,6 +117,14 @@ class CategoriesController extends AppController
*/
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);
+
+ /*
$category = $this->Categories->get($id, [
'contain' => [
'SurCategories'
@@ -129,6 +144,7 @@ class CategoriesController extends AppController
$this->set('_serialize', [
'category'
]);
+ */
}
/**
diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php
index 5b1ebfa..12347c4 100755
--- a/src/Controller/MaterielsController.php
+++ b/src/Controller/MaterielsController.php
@@ -38,9 +38,14 @@ class MaterielsController extends AppController {
// - ATTRIBUTS VARIABLES
- // Nom affichable pour cette entité
+ /*
+ // Nom singulier affichable pour cette entité
// @Override
- public function getNiceName() { return "matériel"; }
+ public function getTypeNameSingular() { return "matériel"; }
+ */
+ // Nom pluriel affichable pour cette entité
+ //@Override
+ public function getTypeNamePlural() { return 'matériels'; }
private $NOTARCHIVED = [
diff --git a/src/Controller/SurCategoriesController.php b/src/Controller/SurCategoriesController.php
index a316081..03ce137 100755
--- a/src/Controller/SurCategoriesController.php
+++ b/src/Controller/SurCategoriesController.php
@@ -11,17 +11,38 @@ use Cake\ORM\TableRegistry;
*/
class SurCategoriesController extends AppController
{
+
+ /*
+ // Nom singulier affichable pour cette entité
+ // @Override parent
+ public function getTypeNameSingular() {
+ //return strtolower($this->name);
+ //return strtolower($this->getName());
+ return 'domaine';
+ }
+ */
+ // Surcharge pour corriger bug cakephp qui renvoie 'Surcategories' au lieu de 'SurCategories' !!
+ //@Override
+ public function getName() {
+ //return strtolower($this->name);
+ //return strtolower($this->getName());
+ return 'SurCategories';
+ }
+ // Nom pluriel affichable pour cette entité
+ //@Override
+ public function getTypeNamePlural() {
+ //return strtolower($this->name);
+ //return strtolower($this->getName());
+ return 'domaines';
+ }
+
// Genre
// @Override
- protected $is_masculin = false;
+ //public $is_masculin = false;
// @deprected
public function getArticle() { return "La "; }
- // Nom affichable pour cette entité
- // @Override
- public function getNiceName() { return "domaine"; }
-
/*
static public function getActions() {
// Toutes les actions CRUD
@@ -134,6 +155,7 @@ class SurCategoriesController extends AppController
*/
}
+
/**
* View method
*
@@ -144,24 +166,15 @@ class SurCategoriesController extends AppController
*/
public function view($id = null)
{
- $surCategory = $this->SurCategories->get($id, [
- 'contain' => []
- ]);
- $categories = TableRegistry::get('Categories')->find()->where([
- 'sur_categorie_id =' => $id
- ]);
- $this->set('categories', $categories);
-
- $materiels = TableRegistry::get('Materiels')->find('all')->where([
- 'sur_categorie_id =' => $id
- ]);
- $this->set('materiels', $materiels);
-
- $this->set('surCategory', $surCategory);
- $this->set('_serialize', [
- 'surCategory'
- ]);
+ $associated_entity_types = [
+ 'Categories',
+ 'Users',
+ 'Materiels'
+ ];
+ //return parent::view($id, $associated_entity_types);
+ return $this->view_generic($id, $associated_entity_types);
}
+
/**
* Add method
diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php
index 6e9a7e5..3040b8a 100755
--- a/src/Controller/UsersController.php
+++ b/src/Controller/UsersController.php
@@ -14,9 +14,19 @@ class UsersController extends AppController
{
+ /*
// Nom affichable pour cette entité
// @Override
public function getNiceName() { return "utilisateur"; }
+ */
+ // Nom pluriel affichable pour cette entité
+ //@Override
+ public function getTypeNamePlural() {
+ //return strtolower($this->name);
+ //return strtolower($this->getName());
+ return 'utilisateurs';
+ }
+
// "l'" utilisateur (et non pas "le utilisateur")
// @deprecated
diff --git a/src/Model/Table/SurCategoriesTable.php b/src/Model/Table/SurCategoriesTable.php
index 1ff5613..239e109 100755
--- a/src/Model/Table/SurCategoriesTable.php
+++ b/src/Model/Table/SurCategoriesTable.php
@@ -25,12 +25,27 @@ class SurCategoriesTable extends AppTable
parent::initialize($config);
$this->setTable('sur_categories');
- $this->setDisplayField('id');
+ //$this->setDisplayField('id');
+ $this->setDisplayField('nom');
$this->setPrimaryKey('id');
-
+
+ /* C'EST FAUX
$this->hasMany('Users', [
'foreignKey' => 'groupes_thematique_id'
]);
+ */
+ $this->hasMany('Users', [
+ 'foreignKey' => 'sur_categorie_id'
+ ]);
+
+ $this->hasMany('Categories')
+ ->setForeignKey('sur_categorie_id')
+ ->setDependent(true); // si le domaine est supprimé, les catégories liées le seront aussi
+
+ $this->hasMany('Materiels')
+ ->setForeignKey('sur_categorie_id')
+ ->setDependent(false); // si le domaine est supprimé, les matos liés eux NE LE SERONT PAS !!
+
}
/**
diff --git a/src/Template/Categories/view.ctp b/src/Template/Categories/view.ctp
index 67e8ec9..da8d19d 100755
--- a/src/Template/Categories/view.ctp
+++ b/src/Template/Categories/view.ctp
@@ -1,121 +1,36 @@
-
-
-
Détail catégorie
-
-
-
- |
- |
-
-
- Html->link(__(' Editer cette catégorie'), [
- 'action' => 'edit',
- $category->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 catégorie'), [
- 'action' => 'delete',
- $category->id
- ], [
- 'style' => 'display: inline-block',
- 'escape' => false,
- 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $category->id)
- ]);
- }
-
- $displayElement(__('Nom'), h($category->nom));
- $displayElement(__('Domaine'), $category->has('sur_category') ? $this->Html->link($category->sur_category->nom, [
- 'controller' => 'SurCategories',
- 'action' => 'view',
- $category->sur_category->id
- ]) : '');
-
- ?>
-
-
-
-
-
-
- Sous-Catégories associées (= $sousCategories->count()?>)
-
-
-
-
-
-
- = __('Nom') ?> |
- = __('Détail') ?> |
-
-
-
-
- = $this->Html->link(h($sous_category->nom), ['controller' => 'SousCategories', 'action' => 'view', h($sous_category->id)]); ?> |
-
-
- = $this->Html->link(__(''), ['controller' => 'SousCategories', 'action' => 'view', $sous_category->id], ['escape' => false, 'style' => 'margin:0']) ?>
- |
-
-
-
-
-
-
-
-
-
- Materiels associés (= $materiels->count()?>)
-
-
-
-
-
-
- = __('Désignation') ?> |
- = __('Détail') ?> |
-
-
-
-
-
- = $this->Html->link($materiel->designation, ['controller' => 'Materiels', 'action' => 'view', h($materiel->id)]); ?> |
-
-
- = $this->Html->link(__(''), ['controller' => 'Materiels', 'action' => 'view', $materiel->id], ['escape' => false, 'style' => 'margin:0']) ?>
- |
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+extend('/Common/view');
+
+/*
+//Vous pouvez récupérer la liste de tous blocks existants en utilisant la méthode blocks():
+$list = $this->blocks();
+
+(En admettant que notre fichier de vue a une variable $post avec les données sur notre post)
+
+$this->assign('title', $post->title);
+$this->start('sidebar');
+?>
+
+ Html->link('edit', [
+ 'action' => 'edit',
+ $post->id
+ ]); ?>
+
+end();
+?>
+
+// The remaining content will be available as the 'content' block
+// In the parent view.
+= h($post->body) ?>
+*/
diff --git a/src/Template/Common/view.ctp b/src/Template/Common/view.ctp
index 3d8d6d8..e2e7db6 100755
--- a/src/Template/Common/view.ctp
+++ b/src/Template/Common/view.ctp
@@ -1,22 +1,32 @@
getSource());
-
-$DEBUG=false;
-//$DEBUG=true;
+//exit;
if ($DEBUG) {
- $article = 'le ';
- $entity_type_name = 'domaine';
+ $entity_article = 'le ';
+ $entity_type_name_singular = 'domaine';
//$entity_name = $entity->getMyName();
$entity_name = $entity->nom;
@@ -45,15 +55,9 @@ if ($DEBUG) {
$entities_list = [$categories, $materiels];
}
-$entity_name = $entity_name;
-
-
-
-// Liste des entités à afficher (en tant qu'entité associée) :
-// En général, par défaut : "Matériels associés" et "Utilisateurs associés"
-$entities_list = $entities_list;
?>
+
@@ -62,8 +66,13 @@ $entities_list = $entities_list;
- Informations sur =$article.$entity_type_name." $entity_name"?>
+
+ Informations sur =$entity_article.$entity_type_name_singular.' "'.$entity_name.'"'?>
+ = $this->Html->link("Voir toutes les entités (liste)", ['action'=>'index']) ?>
+
+
+
@@ -121,11 +130,11 @@ $entities_list = $entities_list;
// function displaySectionShowHide($controller_name, $entity_type_name, $title, $id_name, $is_masculine, $name_field_name, $entities) {
$this->MyHelper->displayAssociatedEntitiesAsSectionShowHide(
$es['controller_name'],
- $es['entity_type_name'],
- $es['title'],
+ $es['entity_type_name_singular'],
+ $es['entity_title'],
//$es['id_name'],
- $es['is_masculine'],
- $es['name_field_name'],
+ $es['is_masculin'],
+ $es['name_field_label'],
$es['entities']
);
//displaySectionShowHide($this->Html, false, 'Aucune catégorie liée', 'categs', 'Catégories', $categories, 'nom', 'Categories', 'catégorie');
diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp
index b8ac0f7..0ecd414 100755
--- a/src/Template/Materiels/view.ctp
+++ b/src/Template/Materiels/view.ctp
@@ -582,12 +582,12 @@ else if (h($entity->materiel_technique) == 1)
//$displayElement(__('Nom du materiel'),$entity->designation);
//$displayElement(__('Description'),$entity->description);
//$displayElement(__('Materiel inventorié'), $type);
-$this->MyButton->displayElement('Nom du materiel',$entity->designation);
+$this->MyHelper->displayElement('Nom du materiel',$entity->designation);
// (EP202009) Deplacé tout en bas du tableau et affiché avec Text->autoParagraph()
//$this->MyButton->displayElement('Description',$entity->description);
-$this->MyButton->displayElement('Materiel inventorié',$type);
+$this->MyHelper->displayElement('Materiel inventorié',$type);
$displayElement(__('Domaine'), $entity->has('sur_category') ? h($entity->sur_category->nom) : '');
$displayElement(__('Catégorie'), $entity->has('category') ? h($entity->category->nom) : '');
$displayElement(__('Sous-Catégorie'), $entity->has('sous_category') ? h($entity->sous_category->nom) : '');
diff --git a/src/View/Helper/MyHelperHelper.php b/src/View/Helper/MyHelperHelper.php
index c81df1e..f5b9cbe 100644
--- a/src/View/Helper/MyHelperHelper.php
+++ b/src/View/Helper/MyHelperHelper.php
@@ -62,7 +62,7 @@ class MyHelperHelper extends Helper {
$id_name = $controller_name;
$id_h3 = 't_'.$id_name;
$id_i = 'i_'.$id_name;
- $title = $title.' associé'. ($is_masculine ? 's' : 'es');
+ $title = ucfirst($title).' associé'. ($is_masculine ? 's' : 'es');
echo "";
echo "";
--
libgit2 0.21.2