Commit 63f8e704df0b37093770eca6b1bf8e3e7f46a2a5
1 parent
fe2c64d9
Exists in
master
and in
1 other branch
Grosse amélioration et rationalisation (généralisation) notifications
(VERSION FINALE) Aussi : - Bugfix action /materiels/mailDevis - Divers bugfixes v4.103.8-3.7.9
Showing
7 changed files
with
219 additions
and
111 deletions
Show diff stats
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
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 | ... | ... |