Commit 63f8e704df0b37093770eca6b1bf8e3e7f46a2a5

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

Grosse amélioration et rationalisation (généralisation) notifications

(VERSION FINALE)

Aussi :
- Bugfix action /materiels/mailDevis
- Divers bugfixes

v4.103.8-3.7.9
CHANGES.txt
... ... @@ -110,6 +110,12 @@ TODO :
110 110 (sur le modèle de /pages/acls)
111 111  
112 112 -------
  113 +25/09/2020 v4.103.8-3.7.9 (EP)
  114 + - (i) Grosse amélioration et rationalisation (généralisation) de la gestion des notifications : log et/ou email (VERSION FINALE)
  115 + - (b) Bugfix action /materiels/mailDevis
  116 + - (b) Divers bugfixes
  117 +
  118 +-------
113 119 25/09/2020 v4.103.7-3.7.9 (EP)
114 120 - (i) Grosse amélioration et rationalisation de la gestion des notifications : log et/ou email (étape 6)
115 121 - (i) Les noms et verbes associés aux actions (pour les notifs) sont désormais aussi configurables, et par labo
... ...
README.md
... ... @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes :
43 43 --------------------------------------------------------------------------------------------
44 44  
45 45 Date: 25/09/2020
46   -Version: 4.103.7-3.7.9
  46 +Version: 4.103.8-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
... ... @@ -2282,7 +2282,7 @@ class AppController extends Controller
2282 2282 if ( ! isset($_SESSION['Auth']['User']) ) return true;
2283 2283  
2284 2284 // pb avec QrCode : pas de $this->e, donc on évite
2285   - if ($this instanceof QrCodesController) return true;
  2285 + ////if ($this instanceof QrCodesController) return true;
2286 2286 if (
2287 2287 // Pour toutes les actions autres que 'add' ou 'edit'
2288 2288 ! in_array($this->a,['add','edit'])
... ... @@ -2307,11 +2307,18 @@ class AppController extends Controller
2307 2307 ////$this->getEntity($this->e_id);
2308 2308 //if (!$this->e->getErrors())
2309 2309 //debug($this->getCurrentEntity()); exit;
2310   - if (!$this->getCurrentEntity() || !$this->getCurrentEntity()->getErrors())
  2310 + if (
  2311 + // Cas de Users avec l'action /users/login par exemple (ou Materiel avec l'action QrCode...)
  2312 + !$this->getCurrentEntity()
  2313 + ||
  2314 + // Toutes les autres actions
  2315 + !$this->getCurrentEntity()->getErrors()
  2316 + ) {
2311 2317 $emails = $this->sendNotificationForEntityAction();
  2318 + //debug($emails);
  2319 + }
2312 2320 }
2313 2321 }
2314   - //debug($emails);
2315 2322 //exit;
2316 2323  
2317 2324 } // afterFilter()
... ... @@ -2620,7 +2627,7 @@ class AppController extends Controller
2620 2627 function ilog($msg=null) {
2621 2628  
2622 2629 // true => n'envoie pas de log
2623   - $DEBUG = true;
  2630 + $DEBUG = false;
2624 2631  
2625 2632 //$controller = $this->request->getParam('controller');
2626 2633 //$action = $this->getActionPassed();
... ... @@ -2894,7 +2901,13 @@ class AppController extends Controller
2894 2901 // Fonction d'envoi de mails
2895 2902 private function sendEmailTo($subject, $msg, $mail, $config)
2896 2903 {
2897   - if ($mail != null && ! $config->test) {
  2904 + /*
  2905 + debug($subject);
  2906 + debug($msg);
  2907 + debug($mail);
  2908 + exit;
  2909 + */
  2910 + if ($mail != null && !$config->test) {
2898 2911 if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
2899 2912 //debug("icii");
2900 2913 $email = new Email();
... ... @@ -3006,13 +3019,14 @@ class AppController extends Controller
3006 3019 // PHP5 :
3007 3020 // @obsolete
3008 3021 public function sendmail($entity, $mode=3, $subject = null, $msg = null) {
3009   - $this->sendNotificationForEntityAction($mode,$subject,$msg);
  3022 + //$this->sendNotificationForEntityAction($mode,$subject,$msg);
  3023 + $this->sendNotificationForEntityAction($mode, $entity);
3010 3024 }
3011   - public function sendNotificationForEntityAction($mode=3, $subject = null, $msg = null) {
  3025 + public function sendNotificationForEntityAction($mode=3, $given_entity=null, $subject = null, $msg = null) {
3012 3026 //return null;
3013 3027  
3014 3028 // true => n'envoie pas de notif
3015   - $DEBUG = true;
  3029 + $DEBUG = false;
3016 3030  
3017 3031 $control = $this->getName();
3018 3032 //debug($control); exit;
... ... @@ -3023,6 +3037,10 @@ class AppController extends Controller
3023 3037 $entity = $this->getCurrentEntity();
3024 3038 ////if ( !$entity ) return null;
3025 3039  
  3040 + // Par exemple, pour les actions documents/mail-devis ou users/login ...
  3041 + if (!$entity && $this->e_id) $entity = $this->getEntity($this->e_id);
  3042 + //debug($entity); exit;
  3043 +
3026 3044 $entities_name = strtolower($control); // materiels, documents, suivis, emprunts...
3027 3045 $entity_name_field = $this->getNameFieldLabel();
3028 3046 if ($entity)
... ... @@ -3106,29 +3124,32 @@ class AppController extends Controller
3106 3124 $IS_ENTITY_MATERIEL = $entity instanceof Materiel;
3107 3125 $IS_ENTITY_LINKED_TO_MATERIEL = false;
3108 3126 $entity_types_linked_to_materiel = ['Suivi', 'Emprunt', 'Document'];
3109   - foreach ($entity_types_linked_to_materiel as $Entity_type_linked)
  3127 + foreach ($entity_types_linked_to_materiel as $Entity_type_linked) {
3110 3128 // Si c'est une entité liée et qu'elle a bien un Materiel associé
3111 3129 // (par exemple pour Document, ce n'est pas forcément le cas car il peut être associé à un Suivi et non un Materiel)
3112 3130 //if ( ($entity instanceof $Entity_type_linked) && $entity->materiel_id ) {
3113 3131 //if ( is_a($entity, "App\\Model\\Entity\\".$Entity_type_linked) && $entity->materiel_id ) {
3114 3132 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;
  3133 + // On vérifie que cette entité est bien liée à un matériel
  3134 + // car ce n'est pas toujours le cas.
  3135 + // Par exemple, un Document peut être lié à un Suivi (au lieu d'un Materiel)
  3136 + if ($entity->materiel_id) {
  3137 + $IS_ENTITY_LINKED_TO_MATERIEL = true;
  3138 + break;
  3139 + }
  3140 + //else throw new \Exception("L'entité $entity devrait être liée à un matériel via son champ FK materiel_id, or ce champ est null !");
3119 3141 }
  3142 + }
3120 3143 $IS_ENTITY_OTHER = !$IS_ENTITY_MATERIEL && !$IS_ENTITY_LINKED_TO_MATERIEL;
3121 3144 // On définit quelques infos sur le matériel s'il est disponible
3122 3145 $materiel = null;
3123 3146 $contain = ['SurCategories', 'Categories', 'SousCategories'];
3124   - if ($IS_ENTITY_MATERIEL) {
  3147 + if ($IS_ENTITY_MATERIEL)
3125 3148 $materiel = $this->getEntity($entity->id, false, $contain);
3126   - }
3127   - else {
  3149 + elseif ($IS_ENTITY_LINKED_TO_MATERIEL)
3128 3150 $materiel = $this->getCurrentEntityRelatedMateriel($entity->materiel_id, $contain);
3129   - }
3130   -
3131 3151  
  3152 +
3132 3153 /*
3133 3154 * 3) LOG
3134 3155 */
... ... @@ -3138,26 +3159,36 @@ class AppController extends Controller
3138 3159 // ex: "Document modifié = 'doc-toto' (id=112)"
3139 3160 // ex: "Utilisateur connecté = 'Pierre Durand' (id=112)"
3140 3161 // ex: "Utilisateur déconnecté = 'Pierre Durand' (id=112)"
3141   -
3142 3162 if ($this->isNotifierActionSendingLog($action)) {
3143 3163 //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity' (id=$id)";
3144 3164 //$msglog = "$entity_type {$action_attrs['past_verb']} = '$entity_name' (id=$id)";
3145   - $msglog = "$entity_type {$action_attrs['past_verb']}";
  3165 + $msglog = ucfirst($entity_type).' '.$action_attrs['past_verb'];
3146 3166 if ($entity) $msglog .= " = '$entity_name' (id=$id)";
  3167 + // Cas particulier d'un Document : on affiche son type
  3168 + if ($entity instanceof Document) $msglog .= " (type={$entity->type_doc})";
3147 3169 // Si c'est une entité liée à un matériel, on ajoute des infos sur le matériel : " - matériel lié 'tititoto' (url)"
3148 3170 if ($IS_ENTITY_LINKED_TO_MATERIEL) {
3149 3171 //$msglog .= " - matériel lié '{$materiel->designation}' ($host/materiels/view/{$materiel->id})";
3150   - $msglog .= " - matériel lié '{$materiel->designation}' (id={$materiel->id})";
  3172 + $msglog .= " - lié au Materiel '{$materiel->designation}' (id={$materiel->id})";
  3173 + }
  3174 + // CAS TRES PARTICULIER d'un Document lié à un Suivi (et non pas à un Materiel)
  3175 + if ($IS_ENTITY_OTHER && $entity instanceof Document && $entity->suivi_id) {
  3176 + //$msglog .= " - suivi lié '{$entity->Suivi->nom}' (id={$entity->suivi_id})";
  3177 + $msglog .= " - lié au Suivi (id={$entity->suivi_id})";
3151 3178 }
3152 3179 //debug($msglog);
3153 3180 //(!$DEBUG) &&
3154 3181 //$this->isNotifierActionSendingLog($action) && $this->ilog("$entity_name $action_verb = '$entity' (id=$id)");
3155   - $this->isNotifierActionSendingLog($action) && $this->ilog($msglog);
  3182 + $this->ilog($msglog);
3156 3183 }
3157 3184  
3158 3185  
3159 3186 // Si notification email pas demandée, on quitte
3160   - ////if (! $this->isNotifierActionSendingEmail($action)) return null;
  3187 + if (!$DEBUG) if (! $this->isNotifierActionSendingEmail($action) ) return null;
  3188 + // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction
  3189 + $configuration = $this->confLabinvent;
  3190 + if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null;
  3191 +
3161 3192  
3162 3193 /*
3163 3194 * 4) CRÉATION DU MAIL (sujet et body)
... ... @@ -3166,12 +3197,10 @@ class AppController extends Controller
3166 3197 *
3167 3198 */
3168 3199  
3169   - // MESSAGE GÉNÉRIQUE
3170   -
3171 3200 // Sujet :
3172 3201  
3173 3202 $subject = $subject ? $subject : "{$action_attrs['noun']} $article_dun$entity_type";
3174   - debug($subject);
  3203 + $DEBUG && debug($subject);
3175 3204  
3176 3205 // Message (body) :
3177 3206  
... ... @@ -3181,6 +3210,8 @@ class AppController extends Controller
3181 3210 $msg_mail .= "$user a ".$action_attrs['past_verb'];
3182 3211 if ($entity) {
3183 3212 $msg_mail .= " $article_le$entity_type '$entity_name'";
  3213 + // Cas particulier d'un Document : on affiche son type
  3214 + if ($entity instanceof Document) $msg_mail .= " (type={$entity->type_doc})";
3184 3215 // (EP) Ajout de l'url (ou id) du materiel
3185 3216 //$msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/materiels/view/$id)";
3186 3217 $msg_mail .= $action=='delete' ? " (id=$id)" : " ($host/$entities_name/view/$id)";
... ... @@ -3203,6 +3234,11 @@ class AppController extends Controller
3203 3234 }
3204 3235 */
3205 3236 //if ($entity instanceof Materiel || $ENTITY_TYPE_LINKED) {
  3237 + // CAS TRES PARTICULIER d'un Document lié à un Suivi (et non pas à un Materiel)
  3238 + if ($IS_ENTITY_OTHER && $entity instanceof Document && $entity->suivi_id) {
  3239 + //$msglog .= " - suivi lié '{$entity->Suivi->nom}' (id={$entity->suivi_id})";
  3240 + $msg_mail .= " - lié au Suivi (id={$entity->suivi_id})";
  3241 + }
3206 3242 if ($IS_ENTITY_MATERIEL || $IS_ENTITY_LINKED_TO_MATERIEL) {
3207 3243 $msg_detail = "\n\nAttributs du matériel ";
3208 3244 //$materiel = ($entity instanceof Materiel) ? $entity : $this->getMateriel($entity->materiel_id);
... ... @@ -3258,19 +3294,23 @@ class AppController extends Controller
3258 3294 } // Entité Materiel ou associée
3259 3295  
3260 3296 // - (3) Matos only (sauf delete, dévalidé, TBA et archive) : Veuillez vérifier...
3261   - $actions_no_need_to_be_checked = ['delete', 'statusCreated', 'statusTobearchived', 'statusArchived'];
3262   - if ( $entity instanceof Materiel && !in_array($action,$actions_no_need_to_be_checked) )
3263   - $msg_mail .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante.";
  3297 + $actions_no_need_to_be_checked = ['view', 'index', 'delete', 'statusCreated', 'statusTobearchived', 'statusArchived'];
  3298 + if ( $IS_ENTITY_MATERIEL && !in_array($action,$actions_no_need_to_be_checked) )
  3299 + $msg_mail .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante.";
3264 3300  
3265 3301 // - (4) TOUS : Vous recevez ce message car... (raison)
3266 3302 if ($entity) {
3267 3303 $msg_mail .= "\n\nVous recevez ce message car";
3268 3304 $raison = " vous êtes concerné(e) par cette action effectuée sur l'inventaire des matériels du laboratoire";
3269   - $raison .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique, métier ou projet)";
3270   - $raison .= "\n\n(ou alors, vous êtes dans la liste mail spécifique gérée via la page de configuration du logiciel LabInvent).";
  3305 + if ($action == 'mailDevis')
  3306 + $raison .= "\n\n(vous êtes le gestionnaire de référence du matériel)";
  3307 + else
  3308 + $raison .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique, métier ou projet)";
  3309 + if ($action != 'mailDevis')
  3310 + $raison .= "\n\n(ou alors, vous êtes dans la liste mail spécifique gérée via la page de configuration du logiciel LabInvent).";
3271 3311 $msg_mail .= $raison;
3272 3312 }
3273   - debug($msg_mail);
  3313 + $DEBUG && debug($msg_mail);
3274 3314  
3275 3315 // Par défaut
3276 3316 /*
... ... @@ -3278,11 +3318,12 @@ class AppController extends Controller
3278 3318 $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\"";
3279 3319 */
3280 3320  
3281   - exit;
  3321 + // PLUS BESOIN DE TOUT CE BLABLA TROP SPÉCIFIQUE
3282 3322  
3283 3323 /*
  3324 + /S
3284 3325 * - mail pour un MATERIEL
3285   - */
  3326 + S/
3286 3327  
3287 3328 // if ($entity != null) {
3288 3329 if ($entity instanceof Materiel) {
... ... @@ -3351,7 +3392,7 @@ class AppController extends Controller
3351 3392 $msgMore .= "\n\n$attrs[1] : " . $val;
3352 3393 }
3353 3394 if ($msgMore) $msg .= $msgMore;
3354   - /*
  3395 + /S
3355 3396 //if ($materiel->sur_categorie_id != "")
3356 3397 if ($materiel->sur_categorie_id) {
3357 3398 $val = $materiel->has('sur_category') ? $materiel->sur_category->nom : $materiel->sur_categorie_id;
... ... @@ -3364,7 +3405,7 @@ class AppController extends Controller
3364 3405 //if ($materiel->description != "")
3365 3406 if ($materiel->description)
3366 3407 $msgMore .= "\n\nDescription :\n" . $materiel->description;
3367   - */
  3408 + S/
3368 3409  
3369 3410 // Dans la liste des mails, on ajoute l'utilisateur (responsable) du matériel
3370 3411 //$mailList[0] = $materiel->email_responsable;
... ... @@ -3385,9 +3426,9 @@ class AppController extends Controller
3385 3426 $entity instanceof Document
3386 3427 ) {
3387 3428  
3388   - /*
  3429 + /S
3389 3430 * - mail pour un DOCUMENT LIÉ
3390   - */
  3431 + S/
3391 3432 // @todo: ajouter quelques infos dans ces cas :
3392 3433 if ($entity instanceof Document) {
3393 3434  
... ... @@ -3438,7 +3479,7 @@ class AppController extends Controller
3438 3479 }
3439 3480 $msg .= "\n\n (id doc = {$doc->id}, id du $entity_name associé = $id)";
3440 3481 $nomFic =$id."_".$nom_doc."_".$id_doc.".".$type_doc;
3441   - /*
  3482 + /S
3442 3483 //if (!$id_mat == Null) {
3443 3484 if ($id_mat) {
3444 3485 $msg .= "\n\n (id doc=".$doc->id.", Materiel associé d'id=\"$id_mat\")";
... ... @@ -3447,7 +3488,7 @@ class AppController extends Controller
3447 3488 $msg .= "\n\n (id doc=".$doc->id.", Suivi associé d'id=\"$id_suiv\")";
3448 3489 $nomFic =$id_suiv."_".$nom_doc."_".$id_doc.".".$type_doc;
3449 3490 }
3450   - */
  3491 + S/
3451 3492 } // sujet null
3452 3493  
3453 3494 // Si le doc est attaché à un matériel, on recupère ce matériel
... ... @@ -3465,45 +3506,41 @@ class AppController extends Controller
3465 3506  
3466 3507 } // Entités (Entity) liées à un Materiel
3467 3508  
3468   - /*
  3509 + /S
3469 3510 * @todo:
3470 3511 * else if ($entity instanceof Configuration) {
3471 3512 * ;
3472 3513 * }
3473 3514 * ... etc ... (il faut qu'on soit plus précis)
3474   - */
  3515 + S/
3475 3516  
3476   -
  3517 + */
3477 3518  
3478 3519 /*
3479 3520 * 4) DESTINATAIRES du mail : on construit la liste des destinataires
3480 3521 */
3481 3522  
3482   - // Si l'action n'est pas autorisée à envoyer un mai => on quitte
3483   - if (! $this->isNotifierActionSendingEmail($action) ) return null;
3484   -
3485   - // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction
3486   - $configuration = $this->confLabinvent;
3487   - if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null;
3488   -
3489 3523 // Pas de matériel défini => pas de mail (pas de bras, pas de chocolat) !
3490   - if ($materiel == null) return null;
  3524 + ////if ($materiel == null) return null;
3491 3525  
3492 3526 $mailList = [];
3493 3527  
3494 3528 /*
3495   - * 4a) Envoi général
  3529 + * 4a) Envoi général (uniquement pour les entités liées à un matériel)
3496 3530 *
3497 3531 * Si l'envoi général est activé, on ajoute les mails des personnes concernées :
3498   - * - le proprio (l'utilisateur) du matériel (sauf s'il est l'acteur de l'action)
3499   - * - le gestionnaire de référence du matos
3500   - * - les responsables thématiques et métier
  3532 + * - (1) le proprio (l'utilisateur) du matériel (sauf s'il est l'acteur de l'action)
  3533 + * - (2) le gestionnaire de référence du matos
  3534 + * - (3) les responsables thématiques et métier
3501 3535 * - (TODO:) les responsables (scientifique et chef projet) du projet
3502 3536 */
  3537 +
  3538 + if (!$IS_ENTITY_OTHER) {
  3539 +
3503 3540 //if ($configuration->envoi_mail && $action != 'printLabelRuban') {
3504 3541 if ($configuration->envoi_mail) {
3505 3542  
3506   - // - Ajout de l'utilisateur du matériel (sauf s'il est l'acteur de l'action)
  3543 + // - (1) Ajout de l'utilisateur du matériel (sauf s'il est l'acteur de l'action)
3507 3544 /*
3508 3545 debug($acteur);
3509 3546 debug($this->userName);
... ... @@ -3515,7 +3552,11 @@ class AppController extends Controller
3515 3552 //if ($this->userName == $materiel->nom_responsable)
3516 3553 $mailList[] = $materiel->email_responsable;
3517 3554  
3518   - // - Ajout du gestionnaire de référence du matos (s'il y en a un)
  3555 + // - (2) Ajout du Gestionnaire de référence du matos (s'il y en a un)
  3556 + if ($materiel->gestionnaire_id) {
  3557 + $gestionnaire_ref_email = TableRegistry::getTableLocator()->get('Users')->get($materiel->gestionnaire_id)->email;
  3558 + $mailList[] = $gestionnaire_ref_email;
  3559 + }
3519 3560 /*
3520 3561 if ($materiel->gestionnaire_id)
3521 3562 $mailList[] = TableRegistry::getTableLocator()->get('Users')
... ... @@ -3527,11 +3568,9 @@ class AppController extends Controller
3527 3568 ->select('email')
3528 3569 //->toArray();
3529 3570 */
3530   - if ($materiel->gestionnaire_id)
3531   - $mailList[] = TableRegistry::getTableLocator()->get('Users')->get($materiel->gestionnaire_id)->email;
3532 3571 //debug($mailList); exit;
3533 3572  
3534   - // - Ajout des Responsables de groupe thématique ou métier
  3573 + // - (3) Ajout des Responsables de groupe thématique ou métier
3535 3574 /*
3536 3575 $mailsRespMetier = [];
3537 3576 $mailRespThematique = [];
... ... @@ -3609,6 +3648,9 @@ class AppController extends Controller
3609 3648 */
3610 3649 } // si envoi général activé
3611 3650  
  3651 + } // uniquement pour entité liée à un matériel
  3652 +
  3653 +
3612 3654 /*
3613 3655 * 4b) Envoi à la liste spécifique
3614 3656 *
... ... @@ -3667,7 +3709,7 @@ class AppController extends Controller
3667 3709 break;
3668 3710 }
3669 3711 */
3670   - $DEBUG && debug($mailList);
  3712 + //$DEBUG && debug($mailList);
3671 3713 //$DEBUG && exit;
3672 3714  
3673 3715 /*
... ... @@ -3709,13 +3751,17 @@ class AppController extends Controller
3709 3751 //$mailList = array_unique($mailList);
3710 3752  
3711 3753 // ... Pour envoyer les mails aux personnes concernees
  3754 + // Si action 'mailDevis', on envoie un mail SEULEMENT au gestionnaire de référence du matériel
  3755 + if ($action == 'mailDevis') $mailList = [$gestionnaire_ref_email];
3712 3756 //$mailList = ['epallier@irap.omp.eu'];
3713   - $mailList = ['etiennoury@gmail.com'];
3714   - foreach ($mailList as $mail) {
  3757 + //$mailList = ['etienne.pallier@irap.omp.eu'];
  3758 + //$mailList = ['etiennoury@gmail.com'];
  3759 + foreach ($mailList as $email_addr) {
3715 3760 // On envoi des mails à toute la liste, sauf pour "l'acteur", il sait ce qu'il a fait, pas besoin de le spam non plus hein
3716 3761 //if ($mail == $_SESSION['Auth']['User']['mail'][0])
3717 3762 //continue;
3718   - $message = $msg; // Sisi, cette variable $message est utile, m'enfin vous pouvez toujours essayer de la supprimer ..... Et pensez à regarder le contenu de vos mails !!! Sinon ca fait une tumeur
  3763 + //$message = $msg; // Sisi, cette variable $message est utile, m'enfin vous pouvez toujours essayer de la supprimer ..... Et pensez à regarder le contenu de vos mails !!! Sinon ca fait une tumeur
  3764 + $message = $msg_mail;
3719 3765 // Génération du message "Vous recevez ce message en tant que $role"
3720 3766 // Si $role inexistant (lorsque c'est un mail de la liste entrée en configuration), le message est plutot "Vous recevez ce message car vous avez demandé à le recevoir. [...]"
3721 3767 //if ($specificUsers)
... ... @@ -3723,8 +3769,10 @@ class AppController extends Controller
3723 3769 $role = "car vous etes dans la liste spécifique des emails de LabInvent.";
3724 3770 $role .= "\n\nPour faire retirer votre mail de cette liste, veuillez contacter un super-administrateur.";
3725 3771 */
  3772 + /*
3726 3773 $role = "car vous êtes concerné(e) par cette action effectuée sur l'inventaire des matériels du laboratoire";
3727 3774 $role .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique, métier ou projet).";
  3775 + */
3728 3776 /* (EP 13/319) : à quoi sert toute cette suite du texte du mail ???
3729 3777 * Ca sent le bon vieux copier-coller sans réfléchir...
3730 3778 //else {
... ... @@ -3741,41 +3789,44 @@ class AppController extends Controller
3741 3789 //}
3742 3790 */
3743 3791 //if ($entity != null && !in_array($action, ['delete','statusValidated','statusCreated'])) {
3744   - if ($entity != null) {
3745   - //if (!in_array($action, ['delete']))
3746   - if ( ($entity instanceof Materiel) && $action != 'delete')
3747   - $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante.";
3748   - $message .= "\n\nVous recevez ce message " . $role;
3749   - //en fonction du mode à l'appel, on utilise un envoi de mail différent
3750   -
3751   - $DEBUG && debug($message);
3752   - //debug($message); exit;
3753   - //debug($mode);
3754   -
3755   - if (! $DEBUG) switch($mode) {
3756   -
3757   - //si le mode 1 est sélectionné c'est un envoi de mail avec ajout d'une photo
3758   - //explique le document qui a été ajouté, et le met en pièce jointe
3759   - case 1 :
3760   - $this->sendEmailImgTo("$subject", $message, $mail, $configuration, $nomFic);
3761   - break;
3762   -
3763   - //si le mode 2 est sélectionné c'est un envoi de mail avec ajout d'un document
3764   - //à personnaliser
3765   - case 2 :
3766   - $this->sendEmailPJTo("$subject", $message, $mail, $configuration, $nomFic);
3767   - break;
3768   -
3769   - //si le mode defaut est sélectionné c'est un simple envoi de mail
3770   - //récapitule une action (mieux pour les add...)
3771   - default :
3772   - $this->sendEmailTo("$subject", $message, $mail, $configuration);
3773   - break;
  3792 + ////if ($entity != null) {
  3793 + //if (!in_array($action, ['delete']))
  3794 + /*
  3795 + if ( ($entity instanceof Materiel) && $action != 'delete')
  3796 + $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante.";
  3797 + $message .= "\n\nVous recevez ce message " . $role;
  3798 + */
  3799 +
  3800 + // Si action 'mailDevis', on ajoute le nom du fichier attaché
  3801 + if ($action == 'mailDevis') {
  3802 + // On change le contenu en fonction de si le document a été lié à un matériel ou à un suivi
  3803 + $id_mat = $entity->materiel_id;
  3804 + $id_suiv = $entity->suivi_id;
  3805 + $id = $id_mat ? $id_mat : $id_suiv;
  3806 + //$msg .= "\n\n (id doc = {$doc->id}, id du $entity_name associé = $id)";
  3807 + $nomFic = $id."_".$entity->nom."_".$entity->id.".".$entity->type_doc;
  3808 + //$subject = "$acteur a partagé un document avec vous";
  3809 + //$msg = "$acteur après avoir ajouté le document \"$nom_doc\", a voulu le partager avec vous, c'est un document ayant le format \"$type_doc\" .";
  3810 + //$msg .="\n\n Le document est en pièce jointe.";
  3811 + //si le mode 1 est sélectionné c'est un envoi de mail avec ajout d'une photo (explique le document qui a été ajouté, et le met en pièce jointe)
  3812 + //si le mode 2 est sélectionné c'est un envoi de mail avec ajout d'un doc à personnaliser
  3813 + $fn = $entity->photo ? 'sendEmailImgTo' : 'sendEmailPJTo';
  3814 + !$DEBUG && $this->$fn("$subject", $message, $email_addr, $configuration, $nomFic);
  3815 + }
  3816 + // Pour toutes les autres actions, mode par defaut (3) => simple envoi de mail
  3817 + else {
  3818 + //debug($subject);
  3819 + //debug($message);
  3820 + !$DEBUG && $this->sendEmailTo("$subject", $message, $email_addr, $configuration);
  3821 + }
3774 3822  
3775   - } // switch
3776   - }
  3823 + ////} // entity not null
  3824 +
3777 3825 } //foreach ($mailList as $mail)
3778   - return $mailList;
  3826 + $DEBUG && debug($mailList);
  3827 + $DEBUG && exit;
  3828 +
  3829 + return $mailList;
3779 3830  
3780 3831 } // sendmail()
3781 3832  
... ...
src/Controller/DocumentsController.php
... ... @@ -54,6 +54,7 @@ class DocumentsController extends AppController
54 54 'add' => 'both',
55 55 'edit' => 'log',
56 56 'delete' => 'both',
  57 + 'mailDevis' => 'both',
57 58 // ...
58 59 ]);
59 60 /*
... ... @@ -1017,7 +1018,7 @@ class DocumentsController extends AppController
1017 1018  
1018 1019  
1019 1020 /** MI
1020   - * Envoi de mail - cette fonction sera appelée si l'on clique sur le bouton envelloppe d'un document sur la page vue d'un matériel
  1021 + * Envoi de mail - cette fonction sera appelée si l'on clique sur le bouton enveloppe d'un document sur la page vue d'un matériel
1021 1022 * Met en place l'envoi de mail
1022 1023 * @param string $id : document id
1023 1024 */
... ...
src/Controller/MaterielsController.php
... ... @@ -288,10 +288,10 @@ class MaterielsController extends AppController {
288 288 'statusCreated' => ['Dé-validation','dé-validé'],
289 289 'statusValidated' => ['Validation','validé'],
290 290 //TODO: spécial
291   - 'statusTobearchived' => ["Demande d'archivage","demandé l'archivage", '', "d'un"],
  291 + 'statusTobearchived' => ["Demande d'archivage","demandé l'archivage", '', "d'un "],
292 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'],
  293 + 'setLabelIsPlaced' => ["Positionnement d'étiquette","posé l'étiquette", 'sur un ', 'sur le '],
  294 + 'printLabelRuban' => ["Impression de l'étiquette", "imprimé l'étiquette", '', 'sur le '],
295 295 ]);
296 296  
297 297  
... ... @@ -304,15 +304,24 @@ class MaterielsController extends AppController {
304 304 *
305 305 */
306 306 $this->setNotificationAllowedOnActions([
  307 +
  308 + // CRUD
307 309 'add' => 'both',
308   - 'edit' => 'log',
  310 + //'edit' => 'log',
  311 + //'edit' => 'mail',
  312 + 'edit' => 'both',
309 313 'delete' => 'both',
310 314 //'view',
  315 +
  316 + // status changed
311 317 'statusCreated' => 'log',
312 318 'statusTobearchived' => 'both',
313 319 'statusValidated' => 'both',
314 320 'statusArchived' => 'both',
315 321 // ...
  322 +
  323 + // autres
  324 + 'printLabelRuban' => 'log',
316 325 'setLabelIsPlaced' => 'log',
317 326 ]);
318 327 /*
... ... @@ -474,15 +483,54 @@ class MaterielsController extends AppController {
474 483 // 2) Puis on fait nos petites règles locales pour notre petit labo à nous tout seul
475 484  
476 485 /*
477   - // a) Adaptation des règles de notification
478   - // Actions de ce controleur qui enverront des notifications (emails)
  486 + * a) Noms et verbes à utiliser (surtout dans les notifications) pour les actions
  487 + *
  488 + */
  489 + /*
  490 + $this->setActionsNounAndPastVerb([
  491 + // Changement des noms et verbes utilisés pour la notif sur l'action 'dévalider'
  492 + 'statusCreated' => ['Dé-VAvalidation','dé-VAvalidé'],
  493 +
  494 + 'statusValidated' => ['Validation','validé'],
  495 + 'statusTobearchived' => ["Demande d'archivage","demandé l'archivage", '', "d'un "],
  496 + 'statusArchived' => ['Archivage','archivé'],
  497 + 'setLabelIsPlaced' => ["Positionnement d'étiquette","posé l'étiquette", 'sur un ', 'sur le '],
  498 + 'printLabelRuban' => ["Impression de l'étiquette", "imprimé l'étiquette", '', 'sur le '],
  499 + ]);
  500 + */
  501 +
  502 + /*
  503 + * b) Actions de ce controleur qui enverront des notifications (log et/ou email)
  504 + *
  505 + * 'log' = logger seulement
  506 + * 'mail' => envoyer un mail seulement
  507 + * 'both' = faire les 2 (logger ET envoyer un mail)
  508 + *
  509 + */
  510 + /*
479 511 $this->setNotificationAllowedOnActions([
480   - 'add', 'edit', 'delete',
481   - 'statusCreated', 'statusTobearchived', 'statusValidated', 'statusArchived',
  512 + // CRUD
  513 + 'add' => 'both',
  514 + 'edit' => 'log',
  515 + 'delete' => 'both',
  516 + //'view',
  517 + // status changed
  518 + 'statusCreated' => 'log',
  519 + 'statusTobearchived' => 'both',
  520 + 'statusValidated' => 'both',
  521 + 'statusArchived' => 'both',
482 522 // ...
  523 + // autres
  524 + 'printLabelRuban' => 'log',
  525 + 'setLabelIsPlaced' => 'log',
483 526 ]);
  527 + */
484 528  
485   - // b) Adaptation des règles d'accès (ACLs)
  529 + /*
  530 + * c) Règles d'accès (ACLs)
  531 + *
  532 + */
  533 + /*
486 534 // - Adaptation de la règle pour "ajout par copie"
487 535 $this->setAuthorizationsForAction('add_by_copy', '', ['CREATED',0], [
488 536 'user' => ['CREATED',1],
... ... @@ -501,6 +549,7 @@ class MaterielsController extends AppController {
501 549 ]);
502 550 */
503 551 }
  552 +
504 553 // Méthode de définition des autorisations SPÉCIFIQUES au laboratoire CRAL
505 554 protected function setAuthorizations_CRAL() {
506 555 $this->d("SPECIFIC CRAL!");
... ... @@ -3718,7 +3767,7 @@ class MaterielsController extends AppController {
3718 3767 $this->printLabel('ruban', $id, $from);
3719 3768 //(EP202009)
3720 3769 //$this->sendEmail($this->Materiels->get($id));
3721   - $this->sendmail($this->Materiels->get($id));
  3770 + ////$this->sendmail($this->Materiels->get($id));
3722 3771  
3723 3772 }
3724 3773  
... ...
src/Controller/UsersController.php
... ... @@ -82,7 +82,7 @@ class UsersController extends AppController
82 82 *
83 83 */
84 84 $this->setNotificationAllowedOnActions([
85   - //'login' => 'log',
  85 + 'login' => 'log',
86 86  
87 87 // Ne marchera pas car pas d'utilisateur en session
88 88 //'logout' => 'log',
... ...
src/Model/Table/AppTable.php
... ... @@ -54,8 +54,9 @@ class AppTable extends Table
54 54 return $success;
55 55 }
56 56 public function delete(EntityInterface $entity, $options = []) {
  57 + $DEBUG = false;
57 58 $this->current_entity = $entity;
58   - //return parent::delete($entity,$options);
  59 + if (!$DEBUG) return parent::delete($entity,$options);
59 60 return true;
60 61 }
61 62  
... ...