Commit fe2c64d9cfc909c3797c3f35c506b37c9ecd5ee1

Authored by Etienne Pallier
1 parent 484f7858
Exists in master and in 1 other branch dev

Amélioration et rationalisation des notifications (étape 6)

Les noms et verbes associés aux actions (pour les notifs) sont désormais
aussi configurables, et par labo

v4.103.7-3.7.9
CHANGES.txt
... ... @@ -105,6 +105,15 @@ Outre ces changements, voici d'autres changements importants :
105 105  
106 106 ======= CHANGES =======
107 107  
  108 +TODO :
  109 + - (e) Ajout d'une page web "/pages/Notifications" qui donne l'état actuel des notifications (quelles notifs pour quelles actions)
  110 + (sur le modèle de /pages/acls)
  111 +
  112 +-------
  113 +25/09/2020 v4.103.7-3.7.9 (EP)
  114 + - (i) Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étape 6)
  115 + - (i) Les noms et verbes associés aux actions (pour les notifs) sont désormais aussi configurables, et par labo
  116 +
108 117 -------
109 118 24/09/2020 v4.103.6-3.7.9 (EP)
110 119 - (i) Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étapes 4 et 5)
... ...
README.md
... ... @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -Date: 24/09/2020
46   -Version: 4.103.6-3.7.9
  45 +Date: 25/09/2020
  46 +Version: 4.103.7-3.7.9
47 47  
48 48  
49 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
src/Controller/AppController.php
... ... @@ -31,6 +31,7 @@ use App\Model\Entity\Emprunt;
31 31 use Cake\Log\Log;
32 32 use Cake\Http\Exception\NotImplementedException;
33 33 use Cake\Controller\Component\AuthComponent;
  34 +use Cake\ORM\Entity;
34 35  
35 36  
36 37  
... ... @@ -327,7 +328,10 @@ class AppController extends Controller
327 328 );
328 329 // $easyACL
329 330  
330   - const actionNounAndPastVerbs = [
  331 + // Valeurs par défaut pour TOUS les controleurs
  332 + //const actionNounAndPastVerbs = [
  333 + //protected static $actionNounAndPastVerbs = [
  334 + protected $actionsNounAndPastVerb = [
331 335 // C
332 336 'add' => ['Ajout','ajouté'],
333 337 // R
... ... @@ -338,9 +342,49 @@ class AppController extends Controller
338 342 // D
339 343 'delete' => ['Suppression','supprimé'],
340 344 ];
  345 + protected function setActionsNounAndPastVerb(array $actionsNounAndPastVerb) {
  346 + foreach ($actionsNounAndPastVerb as $action=>$nounAndPastVerb)
  347 + $this->actionsNounAndPastVerb[$action] = $nounAndPastVerb;
  348 + }
  349 + /*
  350 + * Retourne ['nom','verbe_au_passé'] correspondants à l'action $action
  351 + *
  352 + * ex:
  353 + * => ['Ajout','ajouté'] pour l'action 'add'
  354 + * => ['Modification','modifié'] pour l'action 'edit'
  355 + * ...
  356 + *
  357 + * Actions générales : add, edit, delete, view...
  358 + *
  359 + */
  360 + protected function getActionNounAndPastVerb($action) {
  361 + //if (in_array($action, array_keys($this->actionNounAndPastVerbs))) return $this->actionNounAndPastVerbs[$action];
  362 + //$control = $this->name.'Controller';
  363 + //if (in_array($action, array_keys($control::$actionNounAndPastVerbs)))
  364 + if (in_array($action, array_keys($this->actionsNounAndPastVerb)))
  365 + $elems = $this->actionsNounAndPastVerb[$action];
  366 + /*
  367 + //elseif (in_array($action, array_keys(AppController::actionNounAndPastVerbs))) $elems = AppController::actionNounAndPastVerbs[$action];
  368 + elseif (in_array($action, array_keys(AppController::$actionNounAndPastVerbs)))
  369 + $elems = AppController::$actionNounAndPastVerbs[$action];
  370 + */
  371 + // Pas de définition pour cette action
  372 + //return [null,null];
  373 + // par défaut, par exemple 'edit-ion' et 'edit-é' pour action 'edit'
  374 + else
  375 + $elems = [$action.'ion', $action.'é'];
  376 + //return $elems;
  377 + return [
  378 + 'noun' => $elems[0],
  379 + 'past_verb' => $elems[1],
  380 + 'noun_article' => isset($elems[2]) ? $elems[2] : null,
  381 + 'verb_article' => isset($elems[3]) ? $elems[3] : null,
  382 + ];
  383 + }
  384 +
341 385  
342 386  
343   - protected function is_vowel($char) { return in_array($char, ['a','e','i','o','u','y']); }
  387 + protected function is_vowel($char) { return in_array(strtolower($char), ['a','e','i','o','u','y']); }
344 388  
345 389 // $form=1 => 'le', 'la', ou "l'"
346 390 // $form=2 => 'du' ou 'de la' ou "de l'"
... ... @@ -349,18 +393,18 @@ class AppController extends Controller
349 393 $first_char_is_vowel = $this->is_vowel(substr($this->getName(),0,1));
350 394 // $form=1 => 'Le', 'La', ou "L'"
351 395 if ($form==1) {
352   - // Si commence par voyelle => "L'" (L'emprunt, L'utilisateur, L'entité...)
  396 + // Si commence par voyelle => "l'" (l'emprunt, l'utilisateur, l'entité...)
353 397 if ($first_char_is_vowel) return "l'";
354   - return $this->is_masculin ? "le" : "la";
  398 + return $this->is_masculin ? "le " : "la ";
355 399 }
356 400 // $form=2 => 'du' ou 'de la' ou "de l'"
357 401 elseif ($form==2) {
358 402 if ($first_char_is_vowel) return "de l'";
359   - return $this->is_masculin ? "du" : "de la";
  403 + return $this->is_masculin ? "du " : "de la ";
360 404 }
361 405 // $form=3 => "d'un" ou "d'une"
362 406 else
363   - return $this->is_masculin ? "d'un" : "d'une";
  407 + return $this->is_masculin ? "d'un " : "d'une ";
364 408 }
365 409  
366 410  
... ... @@ -378,34 +422,6 @@ class AppController extends Controller
378 422 return 'nom';
379 423 }
380 424  
381   - /*
382   - * Retourne ['nom','verbe_au_passé'] correspondants à l'action $action
383   - *
384   - * ex:
385   - * => ['Ajout','ajouté'] pour l'action 'add'
386   - * => ['Modification','modifié'] pour l'action 'edit'
387   - * ...
388   - *
389   - * Actions générales : add, edit, delete, view...
390   - *
391   - */
392   - protected function getActionNounAndPastVerb($action) {
393   - //if (in_array($action, array_keys($this->actionNounAndPastVerbs))) return $this->actionNounAndPastVerbs[$action];
394   - if (in_array($action, array_keys($this->actionNounAndPastVerbs))) $elems = $this->actionNounAndPastVerbs[$action];
395   - elseif (in_array($action, array_keys(AppController::actionNounAndPastVerbs))) $elems = AppController::actionNounAndPastVerbs[$action];
396   - // Pas de définition pour cette action
397   - //return [null,null];
398   - // par défaut, par exemple 'edit-ion' et 'edit-é' pour action 'edit'
399   - else $elems = [$action.'ion', $action.'é'];
400   - //return $elems;
401   - return [
402   - 'noun' => $elems[0],
403   - 'past_verb' => $elems[1],
404   - 'noun_article' => isset($elems[2]) ? $elems[2] : null,
405   - 'verb_article' => isset($elems[3]) ? $elems[3] : null,
406   - ];
407   - }
408   -
409 425  
410 426  
411 427 /*
... ... @@ -3078,15 +3094,47 @@ class AppController extends Controller
3078 3094 $article_dun = $action_attrs['noun_article'] ? $action_attrs['noun_article'] : $this->getMyArticle(3);
3079 3095 $id = $entity ? $entity->id : null;
3080 3096  
3081   - $materiel = null;
3082 3097  
3083 3098  
  3099 + /*
  3100 + * 2) Identification du type d'entité : 3 types
  3101 + *
  3102 + * - Materiel => $IS_ENTITY_MATERIEL => max d'infos
  3103 + * - Entité liée au Materiel (HasMany Document, Emprunt, Suivi, ...) => $IS_ENTITY_LINKED_TO_MATERIEL => infos sur l'entité ET sur le matériel lié
  3104 + * - Entité autre (BelongsTo User, Categorie, ...) => $IS_ENTITY_OTHER => infos minimum sur l'entité seulement
  3105 + */
  3106 + $IS_ENTITY_MATERIEL = $entity instanceof Materiel;
  3107 + $IS_ENTITY_LINKED_TO_MATERIEL = false;
  3108 + $entity_types_linked_to_materiel = ['Suivi', 'Emprunt', 'Document'];
  3109 + foreach ($entity_types_linked_to_materiel as $Entity_type_linked)
  3110 + // Si c'est une entité liée et qu'elle a bien un Materiel associé
  3111 + // (par exemple pour Document, ce n'est pas forcément le cas car il peut être associé à un Suivi et non un Materiel)
  3112 + //if ( ($entity instanceof $Entity_type_linked) && $entity->materiel_id ) {
  3113 + //if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) && $entity->materiel_id ) {
  3114 + if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) ) {
  3115 + if (! $entity->materiel_id)
  3116 + throw new \Exception("L'entité $entity devrait être liée à un matériel via son champ FK materiel_id, or ce champ est null !");
  3117 + $IS_ENTITY_LINKED_TO_MATERIEL = true;
  3118 + break;
  3119 + }
  3120 + $IS_ENTITY_OTHER = !$IS_ENTITY_MATERIEL && !$IS_ENTITY_LINKED_TO_MATERIEL;
  3121 + // On définit quelques infos sur le matériel s'il est disponible
  3122 + $materiel = null;
  3123 + $contain = ['SurCategories', 'Categories', 'SousCategories'];
  3124 + if ($IS_ENTITY_MATERIEL) {
  3125 + $materiel = $this->getEntity($entity->id, false, $contain);
  3126 + }
  3127 + else {
  3128 + $materiel = $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain);
  3129 + }
  3130 +
3084 3131  
3085 3132 /*
3086   - * 2) LOG
  3133 + * 3) LOG
3087 3134 */
3088 3135  
3089   - // ex: "Matériel ajouté = 'toto' (id=15)"
  3136 + // ex: "/materiels/add fait par Pallier Etienne (Super Administrateur) - Matériel ajouté = 'toto' (id=15)"
  3137 + // ex: "/emprunts/delete/29 fait par Pallier Etienne (Super Administrateur) - emprunt supprimé = 'Emprunt#29 (de toto)' (id=29) - matériel lié 'tititoto' (http://labinvent.devv/materiels/view/12042)"
3090 3138 // ex: "Document modifié = 'doc-toto' (id=112)"
3091 3139 // ex: "Utilisateur connecté = 'Pierre Durand' (id=112)"
3092 3140 // ex: "Utilisateur déconnecté = 'Pierre Durand' (id=112)"
... ... @@ -3096,6 +3144,11 @@ class AppController extends Controller
3096 3144 //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)";
3097 3145 $msglog = "$entity_type {$action_attrs['past_verb']}";
3098 3146 if ($entity) $msglog .= " = '$entity_name' (id=$id)";
  3147 + // Si c'est une entité liée à un matériel, on ajoute des infos sur le matériel : " - matériel lié 'tititoto' (url)"
  3148 + if ($IS_ENTITY_LINKED_TO_MATERIEL) {
  3149 + //$msglog .= " - matériel lié '{$materiel->designation}' ($host/materiels/view/{$materiel->id})";
  3150 + $msglog .= " - matériel lié '{$materiel->designation}' (id={$materiel->id})";
  3151 + }
3099 3152 //debug($msglog);
3100 3153 //(!$DEBUG) &&
3101 3154 //$this->isNotifierActionSendingLog($action) && $this->ilog("$entity_name $action_verb = '$entity' (id=$id)");
... ... @@ -3107,7 +3160,7 @@ class AppController extends Controller
3107 3160 ////if (! $this->isNotifierActionSendingEmail($action)) return null;
3108 3161  
3109 3162 /*
3110   - * 3) CRÉATION DU MAIL (sujet et body)
  3163 + * 4) CRÉATION DU MAIL (sujet et body)
3111 3164 *
3112 3165 * On détermine le message et le sujet du mail en fonction de l'action effectuee
3113 3166 *
... ... @@ -3115,31 +3168,9 @@ class AppController extends Controller
3115 3168  
3116 3169 // MESSAGE GÉNÉRIQUE
3117 3170  
3118   - /* Identification du type d'entité : 3 types
3119   - * - Materiel => $IS_ENTITY_MATERIEL => max d'infos
3120   - * - Entité liée au Materiel (HasMany Document, Emprunt, Suivi, ...) => $IS_ENTITY_LINKED_TO_MATERIEL => infos sur l'entité ET sur le matériel lié
3121   - * - Entité autre (BelongsTo User, Categorie, ...) => $IS_ENTITY_OTHER => infos minimum sur l'entité seulement
3122   - */
3123   - $IS_ENTITY_MATERIEL = $entity instanceof Materiel;
3124   - $IS_ENTITY_LINKED_TO_MATERIEL = false;
3125   - $entity_types_linked_to_materiel = ['Suivi', 'Emprunt', 'Document'];
3126   - foreach ($entity_types_linked_to_materiel as $Entity_type_linked)
3127   - // Si c'est une entité liée et qu'elle a bien un Materiel associé
3128   - // (par exemple pour Document, ce n'est pas forcément le cas car il peut être associé à un Suivi et non un Materiel)
3129   - //if ( ($entity instanceof $Entity_type_linked) && $entity->materiel_id ) {
3130   - //if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) && $entity->materiel_id ) {
3131   - if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) ) {
3132   - if (! $entity->materiel_id)
3133   - throw new \Exception("L'entité $entity devrait être liée à un matériel via son champ FK materiel_id, or ce champ est null !");
3134   - $IS_ENTITY_LINKED_TO_MATERIEL = true;
3135   - break;
3136   - }
3137   - $IS_ENTITY_OTHER = !$IS_ENTITY_MATERIEL && !$IS_ENTITY_LINKED_TO_MATERIEL;
3138   -
3139   -
3140 3171 // Sujet :
3141 3172  
3142   - $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun $entity_type";
  3173 + $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_type";
3143 3174 debug($subject);
3144 3175  
3145 3176 // Message (body) :
... ... @@ -3149,7 +3180,7 @@ class AppController extends Controller
3149 3180 //$msg_mail .= "$user a {$action_attrs['past_verb']} $article_le $entity_type '$entity'";
3150 3181 $msg_mail .= "$user a ".$action_attrs['past_verb'];
3151 3182 if ($entity) {
3152   - $msg_mail .= " $article_le $entity_type '$entity_name'";
  3183 + $msg_mail .= " $article_le$entity_type '$entity_name'";
3153 3184 // (EP) Ajout de l'url (ou id) du materiel
3154 3185 //$msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/materiels/view/$id)";
3155 3186 $msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/$entities_name/view/$id)";
... ... @@ -3175,7 +3206,7 @@ class AppController extends Controller
3175 3206 if ($IS_ENTITY_MATERIEL || $IS_ENTITY_LINKED_TO_MATERIEL) {
3176 3207 $msg_detail = "\n\nAttributs du matériel ";
3177 3208 //$materiel = ($entity instanceof Materiel) ? $entity : $this->getMateriel($entity->materiel_id);
3178   - $contain = ['SurCategories', 'Categories', 'SousCategories'];
  3209 + ////$contain = ['SurCategories', 'Categories', 'SousCategories'];
3179 3210 //$materiel = ($IS_ENTITY_MATERIEL) ? $this->getEntity($entity->id, false, $contain) : $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain);
3180 3211 /*
3181 3212 if ($entity instanceof Materiel)
... ... @@ -3188,11 +3219,11 @@ class AppController extends Controller
3188 3219 }
3189 3220 */
3190 3221 if ($IS_ENTITY_MATERIEL) {
3191   - $materiel = $this->getEntity($entity->id, false, $contain);
  3222 + ///$materiel = $this->getEntity($entity->id, false, $contain);
3192 3223 $msg_detail .= ':';
3193 3224 }
3194 3225 else {
3195   - $materiel = $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain);
  3226 + ///$materiel = $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain);
3196 3227 $msg_detail .= "lié ($host/materiels/view/{$materiel->id}) :";
3197 3228 $msg_detail .= "\n\n- Nom : {$materiel->designation}";
3198 3229 }
... ...
src/Controller/DocumentsController.php
... ... @@ -20,10 +20,6 @@ class DocumentsController extends AppController
20 20 // Formats autorisés pour photo
21 21 var $photo_formats = ['png','jpg','jpeg'];
22 22  
23   - // @override parent
24   - protected $actionNounAndPastVerbs = [
25   - 'mailDevis' => ['Partage','partagé'],
26   - ];
27 23  
28 24 // private pour qu'elle ne puisse pas être appelée via url comme une action
29 25 private function is_photo_type_from_extension($doc) {
... ... @@ -38,7 +34,16 @@ class DocumentsController extends AppController
38 34  
39 35  
40 36 /*
41   - * a) Actions de ce controleur qui enverront des notifications (log et/ou email)
  37 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  38 + *
  39 + */
  40 + $this->setActionsNounAndPastVerb([
  41 + 'mailDevis' => ['Partage (devis)','partagé (devis)'],
  42 + ]);
  43 +
  44 +
  45 + /*
  46 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
42 47 *
43 48 * 'log' = logger seulement
44 49 * 'mail' => envoyer un mail seulement
... ... @@ -59,7 +64,7 @@ class DocumentsController extends AppController
59 64 ]);
60 65 */
61 66  
62   - // b) Règles d'accès (ACLs)
  67 + // c) Règles d'accès (ACLs)
63 68  
64 69 // Action 'add' (ajout d'une nouvelle entité) : statut quelconque mais doit appartenir au user
65 70 // Proprio only
... ...
src/Controller/EmpruntsController.php
... ... @@ -127,6 +127,49 @@ class EmpruntsController extends AppController
127 127 //@Override parent
128 128 protected function setAuthorizations() {
129 129  
  130 +
  131 + /*
  132 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  133 + *
  134 + */
  135 + /*
  136 + $this->setActionsNounAndPastVerb([
  137 + 'add' => ['Ajoutage','ajoutéeee'],
  138 + // C
  139 + 'add' => ['Ajout','ajouté'],
  140 + // R
  141 + 'view' => ['Visualisation (détail)','visualisé'],
  142 + 'index' => ['Visualisation (liste)','visualisé'],
  143 + // U
  144 + 'edit' => ['Modification','modifié'],
  145 + // D
  146 + 'delete' => ['Suppression','supprimé'],
  147 + ]);
  148 + */
  149 +
  150 +
  151 + /*
  152 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
  153 + *
  154 + * 'log' = logger seulement
  155 + * 'mail' => envoyer un mail seulement
  156 + * 'both' = faire les 2 (logger ET envoyer un mail)
  157 + *
  158 + */
  159 + $this->setNotificationAllowedOnActions([
  160 + //'add' => 'both',
  161 + //'add' => 'mail',
  162 + 'add' => 'log',
  163 + 'edit' => 'log',
  164 + 'delete' => 'log',
  165 + ]);
  166 +
  167 +
  168 + /*
  169 + * c) Règles d'accès (ACLs)
  170 + *
  171 + */
  172 +
130 173 // Action 'add' (ajout d'une nouvelle entité)
131 174 $this->setAuthorizationsForAction('add', ['VALIDATED',1]);
132 175 //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]);
... ...
src/Controller/MaterielsController.php
... ... @@ -53,18 +53,6 @@ class MaterielsController extends AppController {
53 53 );
54 54  
55 55  
56   - // @override parent
57   - protected $actionNounAndPastVerbs = [
58   - 'statusCreated' => ['Dé-validation','dé-validé'],
59   - 'statusValidated' => ['Validation','validé'],
60   - //TODO: spécial
61   - 'statusTobearchived' => ["Demande d'archivage","demandé l'archivage", '', "d'un"],
62   - 'statusArchived' => ['Archivage','archivé'],
63   - 'setLabelIsPlaced' => ["Positionnement d'étiquette","posé l'étiquette", 'sur un', 'sur un'],
64   - 'printLabelRuban' => ["Impression de l'étiquette", "imprimé l'étiquette", '', 'sur un'],
65   - ];
66   -
67   -
68 56 // EP 08/2017
69 57 // protected $easyACL = array(
70 58 const OLD_easyACL = array(
... ... @@ -293,7 +281,22 @@ class MaterielsController extends AppController {
293 281 //debug("GENERIC!");
294 282  
295 283 /*
296   - * a) Actions de ce controleur qui enverront des notifications (log et/ou email)
  284 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  285 + *
  286 + */
  287 + $this->setActionsNounAndPastVerb([
  288 + 'statusCreated' => ['Dé-validation','dé-validé'],
  289 + 'statusValidated' => ['Validation','validé'],
  290 + //TODO: spécial
  291 + 'statusTobearchived' => ["Demande d'archivage","demandé l'archivage", '', "d'un"],
  292 + 'statusArchived' => ['Archivage','archivé'],
  293 + 'setLabelIsPlaced' => ["Positionnement d'étiquette","posé l'étiquette", 'sur un', 'sur un'],
  294 + 'printLabelRuban' => ["Impression de l'étiquette", "imprimé l'étiquette", '', 'sur un'],
  295 + ]);
  296 +
  297 +
  298 + /*
  299 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
297 300 *
298 301 * 'log' = logger seulement
299 302 * 'mail' => envoyer un mail seulement
... ... @@ -321,7 +324,10 @@ class MaterielsController extends AppController {
321 324 ]);
322 325 */
323 326  
324   - // b) Règles d'accès (ACLs)
  327 + /*
  328 + * c) Règles d'accès (ACLs)
  329 + *
  330 + */
325 331  
326 332 // - Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous
327 333 //$this->setAuthorizationsForAction('add', 0);
... ...
src/Controller/SuivisController.php
... ... @@ -11,6 +11,7 @@ use Cake\ORM\TableRegistry;
11 11 */
12 12 class SuivisController extends AppController
13 13 {
  14 +
14 15  
15 16 //@Override
16 17 public function getNameFieldLabel() {
... ... @@ -86,6 +87,47 @@ class SuivisController extends AppController
86 87 */
87 88 protected function setAuthorizations() {
88 89  
  90 + /*
  91 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  92 + *
  93 + */
  94 + /*
  95 + $this->setActionsNounAndPastVerb([
  96 + 'add' => ['Ajoutage','ajoutéeee'],
  97 + // C
  98 + 'add' => ['Ajout','ajouté'],
  99 + // R
  100 + 'view' => ['Visualisation (détail)','visualisé'],
  101 + 'index' => ['Visualisation (liste)','visualisé'],
  102 + // U
  103 + 'edit' => ['Modification','modifié'],
  104 + // D
  105 + 'delete' => ['Suppression','supprimé'],
  106 + ]);
  107 + */
  108 +
  109 +
  110 + /*
  111 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
  112 + *
  113 + * 'log' = logger seulement
  114 + * 'mail' => envoyer un mail seulement
  115 + * 'both' = faire les 2 (logger ET envoyer un mail)
  116 + *
  117 + */
  118 + $this->setNotificationAllowedOnActions([
  119 + //'add' => 'both',
  120 + //'add' => 'mail',
  121 + 'add' => 'log',
  122 + 'edit' => 'log',
  123 + 'delete' => 'log',
  124 + ]);
  125 +
  126 + /*
  127 + * c) Règles d'accès (ACLs)
  128 + *
  129 + */
  130 +
89 131 // Action 'add' (ajout d'une nouvelle entité)
90 132 $this->setAuthorizationsForAction('add', ['VALIDATED',1]);
91 133 //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]);
... ...
src/Controller/UsersController.php
... ... @@ -45,11 +45,6 @@ class UsersController extends AppController
45 45 return "L'";
46 46 }
47 47  
48   - // @override parent
49   - protected $actionNounAndPastVerbs = [
50   - 'login' => ['Connexion','connecté'],
51   - 'logout' => ['Déconnexion','déconnecté'],
52   - ];
53 48  
54 49 // 1) AVANT connexion
55 50 public function beforeFilter(Event $event)
... ... @@ -67,9 +62,26 @@ class UsersController extends AppController
67 62 */
68 63 protected function setAuthorizations() {
69 64  
70   - // Actions qui envoient des notifs
  65 +
  66 + /*
  67 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  68 + *
  69 + */
  70 + $this->setActionsNounAndPastVerb([
  71 + 'login' => ['Connexion','connecté'],
  72 + 'logout' => ['Déconnexion','déconnecté'],
  73 + ]);
  74 +
  75 +
  76 + /*
  77 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
  78 + *
  79 + * 'log' = logger seulement
  80 + * 'mail' => envoyer un mail seulement
  81 + * 'both' = faire les 2 (logger ET envoyer un mail)
  82 + *
  83 + */
71 84 $this->setNotificationAllowedOnActions([
72   -
73 85 //'login' => 'log',
74 86  
75 87 // Ne marchera pas car pas d'utilisateur en session
... ... @@ -79,9 +91,14 @@ class UsersController extends AppController
79 91 'edit' => 'log',
80 92 'delete' => 'log',
81 93 // ...
82   -
83 94 ]);
84 95  
  96 +
  97 + /*
  98 + * c) Règles d'accès (ACLs)
  99 + *
  100 + */
  101 +
85 102 // Actions autorisées à tous
86 103 foreach (['login', 'logout', 'getLdapLogin', 'getLdapEmail', 'indexRecap'] as $action)
87 104 $this->setAuthorizationsForAction($action, 0);
... ...
src/Model/Entity/Emprunt.php
... ... @@ -50,6 +50,8 @@ class Emprunt extends Entity {
50 50 // Instance du controleur EmpruntsController pour messages de debug
51 51 private $mycontroller = null;
52 52  
  53 + // Ce qui s'affiche quand on fait echo $entity
  54 + public function __toString() { return "Emprunt#{$this->id} (de {$this->nom_emprunteur})"; }
53 55  
54 56 private function d($arg) {
55 57 if (! $this->mycontroller) $this->mycontroller = new EmpruntsController();
... ...