From 484f785885d9272efe4dfcca46c71816a541409b Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Thu, 24 Sep 2020 19:08:37 +0200 Subject: [PATCH] Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étapes 4 et 5) --- CHANGES.txt | 5 +++-- README.md | 2 +- src/Controller/AppController.php | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------- src/Controller/DocumentsController.php | 11 ++++++++++- src/Controller/MaterielsController.php | 16 ++++++++++++---- src/Controller/UsersController.php | 9 +++++++-- src/Model/Table/AppTable.php | 28 ++++++++++++++++++++++++++++ 7 files changed, 211 insertions(+), 49 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c16dd5f..a3137c5 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -106,8 +106,9 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= ------- -24/09/2020 v4.103.5-3.7.9 (EP) - - (i) Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étape 4) +24/09/2020 v4.103.6-3.7.9 (EP) + - (i) Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étapes 4 et 5) + - (i) Sauvegarde de l'entité courante dans $current_entity (dans AppTable), disponible pour tous les controleurs (sur save() et delete()) ------- 23/09/2020 v4.103.4-3.7.9 (EP) diff --git a/README.md b/README.md index 492761c..4ebdb06 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 24/09/2020 -Version: 4.103.5-3.7.9 +Version: 4.103.6-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 42a27e6..78555e0 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -1226,7 +1226,25 @@ class AppController extends Controller protected function getMinimumListOfRelatedEntitiesToLoad() { return []; } - + + /* (EP 202009) + * + */ + public function getCurrentEntity() { + /* + debug($this->name); + debug($this->Users); + debug($this->Users->current_entity); + exit; + */ + /* + $control = $this->getName(); // Materiels, Suivis, Emprunts, Documents + //return $this->Materiels->current_entity; + return $this->$control->current_entity; + */ + return $this->{$this->name}->current_entity; + } + /* (EP 20200428) * * Méthode pour optimiser les accès à la BD. @@ -1243,7 +1261,8 @@ class AppController extends Controller // PHP7 only //protected function getEntity($id=null) : Entity { // PHP>=5 - public function getEntity($id=null, $WITH_RELATED_MATERIEL=false, $WITH_ASSOCIATED_ENTITIES=true) { + //public function getEntity($id=null, $WITH_RELATED_MATERIEL=false, $WITH_ASSOCIATED_ENTITIES=true) { + public function getEntity($id=null, $WITH_RELATED_MATERIEL=false, array $contain=[]) { // Si pas d'id => exception (stop) //assert($this->e_id>0); if (!$this->e_id && !$id) throw new \Exception(__("cette methode doit etre appelée avec un id déjà positionné !!!")); @@ -1259,6 +1278,20 @@ class AppController extends Controller //if (self::$RELOAD) $this->e=null; //pr("reload is ".(int)self::$RELOAD); + // Forcer le reload du matos si on veut des entités associées + if ($contain) $this->e = null; + /* TODO: à affiner, c'est bourrin, il faudrait plutot mettre à null SSI une (au moins) des entités associées demandées est absente, + * du style (exemple pour l'entité associée SurCategory) : + * + $DO_RELOAD = false; + foreach ($contain as $related_entity) { + if ( $m->sur_categorie_id && !$m->has('sur_category') ) { + $DO_RELOAD=true; break; + } + } + * + */ + // TODO: ? //if ($WITH_RELATED_MATERIEL && $this->e && !$this->e->has('Materiel')) $this->e = null; @@ -1282,9 +1315,13 @@ class AppController extends Controller //ex: if (! $this->e) $this->e = $this->Materiels->get($this->e_id); //$this->e = $this->$model->get($this->e_id); //$related_entities = $WITH_RELATED_MATERIEL ? ['Materiels']:[]; + $related_entities = $contain; + if ($WITH_RELATED_MATERIEL) $related_entities[] = 'Materiels'; + /* $related_entities = []; if ($WITH_ASSOCIATED_ENTITIES) $related_entities = $this->getMinimumListOfRelatedEntitiesToLoad(); if ($WITH_RELATED_MATERIEL) $related_entities[] = 'Materiels'; + */ $this->e = $this->$model->get($id, ['contain'=>$related_entities]); $this->e_id = $this->e->id; } @@ -2125,7 +2162,9 @@ class AppController extends Controller // Méthode utilisée (ou utilisable) par tous les controleurs liés à l'entité Materiel : Suivis, Emprunts, Documents (...) // Optimisée pour ne charger le "matériel lié" qu'une seule fois pour TOUS les controleurs intéressés - protected function getMateriel($matos_id=null) { + // @deprecated + protected function getMateriel($matos_id=null, array $contain=[]) { return $this->getCurrentEntityRelatedMateriel($matos_id, $contain); } + protected function getCurrentEntityRelatedMateriel($matos_id=null, array $contain=[]) { $control = $this->name; // ex: Suivis // Par défaut, on prend le matos id passé via la requete url @@ -2156,6 +2195,20 @@ class AppController extends Controller // Forcer la relecture du materiel ? (pour les tests) if (self::$RELOAD) $m=null; + // Forcer le reload du matos si on veut des entités associées + if ($contain) $m = null; + /* TODO: à affiner, c'est bourrin, il faudrait plutot mettre à null SSI une (au moins) des entités associées demandées est absente, + * du style (exemple pour l'entité associée SurCategory) : + * + $DO_RELOAD = false; + foreach ($contain as $related_entity) { + if ( $m->sur_categorie_id && !$m->has('sur_category') ) { + $DO_RELOAD=true; break; + } + } + * + */ + // Si le matériel n'est pas encore en mémoire, on va le chercher en BD // Moins optimisé : Un exemplaire PAR controleur appelant (car attribut d'instance) : //if (!$this->related_materiel) { @@ -2169,7 +2222,8 @@ class AppController extends Controller */ //$this->related_materiel = $this->Suivis->Materiels->get($matos_id); //$this->related_materiel = $this->$control->Materiels->get($matos_id); - $m = AppController::$related_materiel = $this->$control->Materiels->get($matos_id); + //$m = AppController::$related_materiel = $this->$control->Materiels->get($matos_id); + $m = AppController::$related_materiel = $this->$control->Materiels->get($matos_id, [ 'contain' => $contain ]); assert($m->id == AppController::$related_materiel->id); //debug($this->related_materiel); exit; } @@ -2183,6 +2237,7 @@ class AppController extends Controller parent::afterFilter($event); + $this->myDebug("step ?? (general): AppController.afterFilter()"); // Tout le temps 'index', why ??N //debug($this->request->getAttribute('params')['action']); @@ -2206,6 +2261,10 @@ class AppController extends Controller //debug($this->e); //if ($this->e) $emails = $this->sendNotificationForEntityAction($this->e); //$action = $this->request->getAttribute('params')['action']; + + // si l'user n'est pas loggé, on ne va pas plus loin + if ( ! isset($_SESSION['Auth']['User']) ) return true; + // pb avec QrCode : pas de $this->e, donc on évite if ($this instanceof QrCodesController) return true; if ( @@ -2225,11 +2284,14 @@ class AppController extends Controller //return true; */ //$emails = $this->sendNotificationForEntityAction($this->e); - //if ($this->isNotifierAction($this->a) && $this->e_id && !$this->e->getErrors()) - if ($this->isNotifierAction($this->a) && $this->e_id) { + //if ($this->isNotifierAction($this->a) && $this->e_id && !$this->e->getErrors()) + //if ($this->isNotifierAction($this->a) && $this->e_id) { + if ($this->isNotifierAction($this->a)) { // Positionne $this->e ssi il n'existe pas déjà - $this->getEntity($this->e_id); - if (!$this->e->getErrors()) + ////$this->getEntity($this->e_id); + //if (!$this->e->getErrors()) + //debug($this->getCurrentEntity()); exit; + if (!$this->getCurrentEntity() || !$this->getCurrentEntity()->getErrors()) $emails = $this->sendNotificationForEntityAction(); } } @@ -2937,19 +2999,25 @@ class AppController extends Controller $DEBUG = true; $control = $this->getName(); + //debug($control); exit; // Entité (Entity) // Si pas d'entité définie => return - $entity = $this->e; - if ( !$entity ) return null; - $entities_name = strtolower($this->getName()); // materiels, documents, suivis, emprunts... + ////$entity = $this->e; + $entity = $this->getCurrentEntity(); + ////if ( !$entity ) return null; + + $entities_name = strtolower($control); // materiels, documents, suivis, emprunts... $entity_name_field = $this->getNameFieldLabel(); - $entity_name = $entity->has($entity_name_field) ? $entity->$entity_name_field : $entity; + if ($entity) + $entity_name = $entity->has($entity_name_field) ? $entity->$entity_name_field : $entity; + else + $entity_name = null; // Action //$action = $this->request->getAttribute('params')['action']; // add or edit or delete or ... $action = $this->a; - //debug($action); + //debug($action); exit; // Si l'action n'est pas autorisée à déclencher une notification => on quitte // $this pointe sur le controleur en cours qui a appelé sendmail, par exemple MaterielsController ou DocuentsController... @@ -3005,10 +3073,10 @@ class AppController extends Controller $action_verb = $action_noun_and_verb[1]; */ //$entity_type = $this->getEntityTypeName(); - $entity_type = strtolower( substr($this->getName(),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->id; + $id = $entity ? $entity->id : null; $materiel = null; @@ -3022,16 +3090,22 @@ class AppController extends Controller // ex: "Document modifié = 'doc-toto' (id=112)" // ex: "Utilisateur connecté = 'Pierre Durand' (id=112)" // ex: "Utilisateur déconnecté = 'Pierre Durand' (id=112)" - - //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)"; - $msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)"; - //debug($msglog); - //(!$DEBUG) && - //$this->isNotifierActionSendingLog($action) && $this->ilog("$entity_name $action_verb = '$entity' (id=$id)"); - $this->isNotifierActionSendingLog($action) && $this->ilog($msglog); + + if ($this->isNotifierActionSendingLog($action)) { + //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)"; + //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)"; + $msglog = "$entity_type {$action_attrs['past_verb']}"; + if ($entity) $msglog .= " = '$entity_name' (id=$id)"; + //debug($msglog); + //(!$DEBUG) && + //$this->isNotifierActionSendingLog($action) && $this->ilog("$entity_name $action_verb = '$entity' (id=$id)"); + $this->isNotifierActionSendingLog($action) && $this->ilog($msglog); + } - + // Si notification email pas demandée, on quitte + ////if (! $this->isNotifierActionSendingEmail($action)) return null; + /* * 3) CRÉATION DU MAIL (sujet et body) * @@ -3041,6 +3115,28 @@ class AppController extends Controller // MESSAGE GÉNÉRIQUE + /* Identification du type d'entité : 3 types + * - Materiel => $IS_ENTITY_MATERIEL => max d'infos + * - Entité liée au Materiel (HasMany Document, Emprunt, Suivi, ...) => $IS_ENTITY_LINKED_TO_MATERIEL => infos sur l'entité ET sur le matériel lié + * - Entité autre (BelongsTo User, Categorie, ...) => $IS_ENTITY_OTHER => infos minimum sur l'entité seulement + */ + $IS_ENTITY_MATERIEL = $entity instanceof Materiel; + $IS_ENTITY_LINKED_TO_MATERIEL = false; + $entity_types_linked_to_materiel = ['Suivi', 'Emprunt', 'Document']; + foreach ($entity_types_linked_to_materiel as $Entity_type_linked) + // Si c'est une entité liée et qu'elle a bien un Materiel associé + // (par exemple pour Document, ce n'est pas forcément le cas car il peut être associé à un Suivi et non un Materiel) + //if ( ($entity instanceof $Entity_type_linked) && $entity->materiel_id ) { + //if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) && $entity->materiel_id ) { + if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) ) { + if (! $entity->materiel_id) + throw new \Exception("L'entité $entity devrait être liée à un matériel via son champ FK materiel_id, or ce champ est null !"); + $IS_ENTITY_LINKED_TO_MATERIEL = true; + break; + } + $IS_ENTITY_OTHER = !$IS_ENTITY_MATERIEL && !$IS_ENTITY_LINKED_TO_MATERIEL; + + // Sujet : $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun $entity_type"; @@ -3051,16 +3147,19 @@ class AppController extends Controller // - (1) TOUS : User a fait telle action (+url) $msg_mail = $msg; //$msg_mail .= "$user a {$action_attrs['past_verb']} $article_le $entity_type '$entity'"; - $msg_mail .= "$user a {$action_attrs['past_verb']} $article_le $entity_type '$entity_name'"; - // (EP) Ajout de l'url (ou id) du materiel - //$msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/materiels/view/$id)"; - $msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/$entities_name/view/$id)"; + $msg_mail .= "$user a ".$action_attrs['past_verb']; + if ($entity) { + $msg_mail .= " $article_le $entity_type '$entity_name'"; + // (EP) Ajout de l'url (ou id) du materiel + //$msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/materiels/view/$id)"; + $msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/$entities_name/view/$id)"; + } //$msg .= "\n\nURL de la fiche : $host/materiels/view/{$materiel->id}"; // $msg .= "\n\n"; - // - (2) Matos (direct ou associé) only : On ajoute quelques informations sur le matériel : domaine, catégorie, description + // - (2) Matos (direct ou associé) only : On ajoute quelques infos sur le matos: domaine, catégorie, sous-categ, description + /* // Entités (Entity) associées à une entité Materiel (1-N) - $msg_detail = ''; $ENTITY_TYPE_LINKED = false; $entity_types_linked_to_materiel = ['Suivi', 'Emprunt', 'Document']; foreach ($entity_types_linked_to_materiel as $Entity_type_linked) @@ -3071,9 +3170,14 @@ class AppController extends Controller $ENTITY_TYPE_LINKED = true; break; } - if ($entity instanceof Materiel || $ENTITY_TYPE_LINKED) { - $msg_detail .= "\n\nAttributs du matériel "; + */ + //if ($entity instanceof Materiel || $ENTITY_TYPE_LINKED) { + if ($IS_ENTITY_MATERIEL || $IS_ENTITY_LINKED_TO_MATERIEL) { + $msg_detail = "\n\nAttributs du matériel "; //$materiel = ($entity instanceof Materiel) ? $entity : $this->getMateriel($entity->materiel_id); + $contain = ['SurCategories', 'Categories', 'SousCategories']; + //$materiel = ($IS_ENTITY_MATERIEL) ? $this->getEntity($entity->id, false, $contain) : $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain); + /* if ($entity instanceof Materiel) $materiel = $entity; else { @@ -3082,9 +3186,13 @@ class AppController extends Controller 'contain' => ['SurCategories', 'Categories', 'SousCategories'] ]); } - if (! $ENTITY_TYPE_LINKED) + */ + if ($IS_ENTITY_MATERIEL) { + $materiel = $this->getEntity($entity->id, false, $contain); $msg_detail .= ':'; + } else { + $materiel = $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain); $msg_detail .= "lié ($host/materiels/view/{$materiel->id}) :"; $msg_detail .= "\n\n- Nom : {$materiel->designation}"; } @@ -3093,13 +3201,14 @@ class AppController extends Controller //$materiel = $entity; // marche pas pour 'edit' car sur_category contient l'ancien nom (avant modif)... //if (!$materiel->has('sur_category')) { - // OK - if ( ($entity instanceof Materiel) && in_array($action,['edit','add']) ) { + /* OK + if ( ($IS_ENTITY_MATERIEL) && in_array($action,['edit','add']) ) { debug("RELOAD materiel (2)!"); $materiel = $this->Materiels->get($materiel->id, [ 'contain' => ['SurCategories', 'Categories', 'SousCategories'] ]); } + */ //$msg_more = ''; $fields = [ 'sur_categorie_id' => ['sur_category', 'Domaine'], @@ -3114,7 +3223,8 @@ class AppController extends Controller //$linked = $ENTITY_TYPE_LINKED ? ' lié' : ''; //if ($msg_more) $msg_mail .= "\n\nAttributs du matériel$linked : $msg_more"; if ($msg_detail) $msg_mail .= $msg_detail; - } + + } // Entité Materiel ou associée // - (3) Matos only (sauf delete, dévalidé, TBA et archive) : Veuillez vérifier... $actions_no_need_to_be_checked = ['delete', 'statusCreated', 'statusTobearchived', 'statusArchived']; @@ -3122,12 +3232,13 @@ class AppController extends Controller $msg_mail .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante."; // - (4) TOUS : Vous recevez ce message car... (raison) - //if ($entity != null) { - $msg_mail .= "\n\nVous recevez ce message car"; + if ($entity) { + $msg_mail .= "\n\nVous recevez ce message car"; $raison = " vous êtes concerné(e) par cette action effectuée sur l'inventaire des matériels du laboratoire"; - $raison .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique, métier ou projet)."; + $raison .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique, métier ou projet)"; + $raison .= "\n\n(ou alors, vous êtes dans la liste mail spécifique gérée via la page de configuration du logiciel LabInvent)."; $msg_mail .= $raison; - //} + } debug($msg_mail); // Par défaut diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 3c254f4..25998c0 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -404,7 +404,9 @@ class DocumentsController extends AppController // if ($this->request->is('post')) { // (EP) Je suppose qu'on peut utiliser le meme test pour ADD ou EDIT // edit - if ($this->request->is(['post','patch','put'])) { + //if ($this->request->is(['post','patch','put'])) { + $authorized_actions = $IS_ADD ? ['post'] : ['post','patch','put']; + if ( $this->request->is($authorized_actions) ) { $document = $this->Documents->patchEntity($document, $this->request->getData()); //debug($document); @@ -426,6 +428,8 @@ class DocumentsController extends AppController $verb = $IS_ADD ? 'ajouté' : 'modifié'; // - NOT SAVED if (! $this->Documents->save($document)) { + // (EP202009) $this->e doit refléter le matériel mis à jour + ////$this->e = $document; //$this->myDebug($document->getErrors()); //debug($document->getErrors()); //debug($document); @@ -433,6 +437,11 @@ class DocumentsController extends AppController } // - SAVED ok else { + // (EP) Si ADD, l'id de la nouvelle entité a été mis à jour : + ////$this->e_id = $document->id; + //debug($document->id); + // (EP202009) $this->e doit refléter le matériel mis à jour (ou ajouté) + ////$this->e = $document; $this->Flash->success(__("Le fichier a bien été $verb")); //$id = $document->materiel_id; $parent_id = $document->materiel_id; diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 143340a..07ade31 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1753,17 +1753,22 @@ class MaterielsController extends AppController { //$action = $IS_ADD ? "add" : "edit"; //debug($materiel); exit; if (! $this->Materiels->save($materiel)) { + //debug($this->Materiels->current_entity); exit; + // (EP) Si ADD, l'id de la nouvelle entité a été mis à jour : + /////$this->e_id = $materiel->id; + //debug($document->id); // (EP202009) $this->e doit refléter le matériel mis à jour - $this->e = $materiel; + /////$this->e = $materiel; $this->myDebug($materiel->getErrors()); //debug($materiel->getErrors()); $this->Flash->error(__("Le matériel n'a pas pu être $verb")); } else { - //debug("iciii"); exit; + //debug($this->getCurrentEntity()); exit; + //debug($this->Materiels->current_entity); exit; // (EP202009) $this->e doit refléter le matériel mis à jour // ok mais ne copie pas les données associées... (c'est toujours les anciennes...) - $this->e = $materiel; + ////$this->e = $materiel; // marche pas non plus //$this->e = clone $materiel; //debug($this->e); exit; @@ -2286,12 +2291,15 @@ class MaterielsController extends AppController { //if ($materiel->has('sur_category')) debug($materiel->sur_category->nom); //debug($materiel); exit; - if ( !$DEBUG && $this->Materiels->delete($materiel) ) { + //if ( !$DEBUG && $this->Materiels->delete($materiel) ) { + if ( $this->Materiels->delete($materiel) ) { $this->Flash->success(__("Le matériel a bien été $verb")); + /* $this->ilog("Materiel $verb = '$materiel' (id=$id)"); //(EP202009) //$this->sendEmail($materiel); $this->sendmail($materiel); + */ } else $this->Flash->error(__("Le matériel n'a pas pu être $verb")); diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index f17528d..cb88f08 100755 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -69,12 +69,17 @@ class UsersController extends AppController // Actions qui envoient des notifs $this->setNotificationAllowedOnActions([ - 'login' => 'log', - 'logout' => 'log', + + //'login' => 'log', + + // Ne marchera pas car pas d'utilisateur en session + //'logout' => 'log', + 'add' => 'log', 'edit' => 'log', 'delete' => 'log', // ... + ]); // Actions autorisées à tous diff --git a/src/Model/Table/AppTable.php b/src/Model/Table/AppTable.php index 248c54c..382ce67 100644 --- a/src/Model/Table/AppTable.php +++ b/src/Model/Table/AppTable.php @@ -3,6 +3,7 @@ namespace App\Model\Table; use Cake\ORM\Table; use Cake\ORM\TableRegistry; +use Cake\Datasource\EntityInterface; /** * App Model @@ -10,6 +11,9 @@ use Cake\ORM\TableRegistry; class AppTable extends Table { + // Voir utilisation de cette propriété plus loin + public $current_entity = null; + // autoriser les caracteres habituels standards pour un ou plusieurs MOTs // accents + - _ / () . , \s (=space) private $string = "a-zA-Z0-9éèàùâêôîôûç%().,\/\s\+\-_'"; @@ -31,6 +35,30 @@ class AppTable extends Table return (bool) filter_var($check, FILTER_VALIDATE_EMAIL); } + // @Override parent Table + /* + * (EP202009) pour comportement commun à toutes les EntitiesTable à la fin du save() ou du delete() + * + * On crée une variable globale $this->current_entity qui contient l'entité (Entity) courante + * (après save, donc mise à jour avec les données du formulaire, et avec un new id si ADD, + * mais aussi avec les erreurs si le save s'est mal passé) + * Cette entité courante est récupérable depuis TOUT controleur, comme ceci : + * - $this->Materiels->current_entity + * ou plus simplement avec le raccourci AppController : + * - $this->getCurrentEntity() + * + */ + public function save(EntityInterface $entity, $options = []) { + $success = parent::save($entity,$options); + $this->current_entity = $entity; + return $success; + } + public function delete(EntityInterface $entity, $options = []) { + $this->current_entity = $entity; + //return parent::delete($entity,$options); + return true; + } + /* public function getEntity($id) { debug($this->get($id)); -- libgit2 0.21.2