Commit a73a1dba78de1c050fb471191cae09519ec64523
1 parent
ce705bb6
Exists in
master
and in
3 other branches
Bugfix Emails : il manquait l'id du materiel concerné par l'action, et
c'est maintenant mieux organisé
Showing
5 changed files
with
97 additions
and
69 deletions
Show diff stats
README-LABINVENT.md
... | ... | @@ -47,9 +47,9 @@ Logiciel testé et validé sur les configurations suivantes : |
47 | 47 | |
48 | 48 | VERSION ACTUELLE |
49 | 49 | |
50 | -Date: 11/09/2017 | |
51 | -Version: 2.8.0.3 | |
52 | - - Tests paramétrés (pour exécuter les tests sur différents roles sans redondance) | |
50 | +Date: 15/09/2017 | |
51 | +Version: 2.8.0.4 | |
52 | + - Bugfix Emails : il manquait l'id du materiel concerné par l'action, et c'est maintenant mieux organisé | |
53 | 53 | |
54 | 54 | Version majeure en cours (2.8): https://projects.irap.omp.eu/versions/162 |
55 | 55 | ... | ... |
src/Controller/AppController.php
... | ... | @@ -22,6 +22,10 @@ use Cake\Mailer\Email; |
22 | 22 | use Cake\Core\Configure; |
23 | 23 | use Cake\I18n\Time; |
24 | 24 | use Cake\I18n\Date; |
25 | +use App\Model\Entity\Materiel; | |
26 | +use App\Model\Entity\Document; | |
27 | +use App\Model\Entity\Suivi; | |
28 | +use App\Model\Entity\Emprunt; | |
25 | 29 | |
26 | 30 | /** |
27 | 31 | * Application Controller |
... | ... | @@ -615,14 +619,14 @@ class AppController extends Controller { |
615 | 619 | /** |
616 | 620 | * Envoi un mail avec un sujet, contenant un message à destination d'une liste de mails, selon l'action effectuée. |
617 | 621 | * |
618 | - * @param $obj : | |
619 | - * Matériel concerné | |
622 | + * @param $entity : | |
623 | + * L'entité concernée (principalement un Matériel, mais ça peut aussi etre un Document) | |
620 | 624 | * @param $subject : |
621 | 625 | * Sujet du message à envoyer. Si $subject n'est pas renseigné, un sujet par défaut sera généré. |
622 | 626 | * @param $msg : |
623 | 627 | * Message à envoyer. Si $msg n'est pas renseigné, un message par défaut sera généré. |
624 | 628 | */ |
625 | - public function sendEmail($obj, $subject = null, $msg = null) { | |
629 | + public function sendEmail($entity, $subject = null, $msg = null) { | |
626 | 630 | /* |
627 | 631 | * $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) : |
628 | 632 | * nom $_SESSION['Auth']['User']['sn'][0] |
... | ... | @@ -634,92 +638,102 @@ class AppController extends Controller { |
634 | 638 | $configuration = $this->confLabinvent; |
635 | 639 | $action = $this->request->getAttribute('params')['action']; // add or edit or delete or ... |
636 | 640 | |
637 | - // Si les deux cases "Activer l'envoi des mails.." sont décochée, on se fatigue pas à exécuter la fonction | |
638 | - if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) | |
639 | - return null; | |
641 | + // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction | |
642 | + if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null; | |
640 | 643 | |
641 | - $materiel = $obj; | |
642 | 644 | $mailList = array(); |
643 | 645 | |
644 | 646 | // On détermine le message et le sujet du mail en fonction de l'action effectuee |
645 | 647 | $acteur = $_SESSION['Auth']['User']['givenname'][0] . ' ' . $_SESSION['Auth']['User']['sn'][0]; |
646 | - if ($materiel != null) { | |
648 | + //if ($entity != null) { | |
649 | + if ($entity instanceof Materiel) { | |
650 | + $materiel = $entity; | |
647 | 651 | $nom_materiel = $materiel->designation; |
648 | 652 | if ($subject == null && $msg == null) { |
653 | + $msgMore = ''; | |
649 | 654 | Switch ($action) { |
650 | 655 | case 'add' : |
651 | 656 | $subject = "Ajout d'un matériel"; |
652 | - $msg = "$acteur a ajouté le matériel \"$nom_materiel\"."; | |
657 | + $msg = "$acteur a ajouté le matériel \"$nom_materiel\""; | |
653 | 658 | break; |
654 | 659 | case 'edit' : |
655 | 660 | $subject = "Modification d'un matériel"; |
656 | - $msg = "$acteur a modifié le matériel \"$nom_materiel\"."; | |
661 | + $msg = "$acteur a modifié le matériel \"$nom_materiel\""; | |
657 | 662 | break; |
658 | 663 | case 'delete' : |
659 | 664 | $subject = "Suppression d'un matériel"; |
660 | - $msg = "$acteur a supprimé le matériel \"$nom_materiel\"."; | |
661 | - | |
662 | - if ($materiel-> sur_categorie_id != "") $msg .= "\n\nDomaine : ". $materiel->description; | |
663 | - if ($materiel-> categorie_id != "") $msg .= "\n\nCatégorie : ". $materiel->description; | |
664 | - if ($materiel-> sous_categorie_id != "") $msg .= "\n\nSous-catégorie : ". $materiel->description; | |
665 | - if ($materiel->description != "") $msg .= "\n\nDescription :\n\n". $materiel->description; | |
666 | - | |
665 | + $msg = "$acteur a supprimé le matériel \"$nom_materiel\""; | |
666 | + //@todo: mettre le nom des domaine, categ, et sous-categ, et non pas l'id | |
667 | + if ($materiel->sur_categorie_id != "") $msgMore .= "\n\nDomaine : ". $materiel->sur_categorie_id; | |
668 | + if ($materiel->categorie_id != "") $msgMore .= "\n\nCatégorie : ". $materiel->categorie_id; | |
669 | + if ($materiel->sous_categorie_id != "") $msgMore .= "\n\nSous-catégorie : ". $materiel->sous_categorie_id; | |
670 | + if ($materiel->description != "") $msgMore .= "\n\nDescription :\n". $materiel->description; | |
667 | 671 | break; |
668 | 672 | case 'statusCreated' : |
669 | 673 | $subject = "Dé-validation d'un matériel"; |
670 | - $msg = "$acteur a dé-validé le matériel \"$nom_materiel\"."; | |
674 | + $msg = "$acteur a dé-validé le matériel \"$nom_materiel\""; | |
671 | 675 | break; |
672 | 676 | case 'statusValidated' : |
673 | 677 | $subject = "Validation d'un matériel"; |
674 | - $msg = "$acteur a validé le matériel \"$nom_materiel\"."; | |
678 | + $msg = "$acteur a validé le matériel \"$nom_materiel\""; | |
675 | 679 | break; |
676 | 680 | case 'statusToBeArchived' : |
677 | 681 | $subject = "Demande d'archivage d'un matériel"; |
678 | - $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\"."; | |
682 | + $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\""; | |
679 | 683 | break; |
680 | 684 | case 'statusArchived' : |
681 | 685 | $subject = "Archivage d'un matériel"; |
682 | - $msg = "$acteur a archivé le matériel \"$nom_materiel\"."; | |
686 | + $msg = "$acteur a archivé le matériel \"$nom_materiel\""; | |
683 | 687 | break; |
684 | 688 | case 'setLabelIsPlaced' : |
685 | 689 | $subject = "Etiquette posée sur un matériel"; |
686 | - $msg = "Etiquette posée sur le matériel \"$nom_materiel\"."; | |
690 | + $msg = "Etiquette posée sur le matériel \"$nom_materiel\""; | |
687 | 691 | break; |
688 | 692 | case 'printLabelRuban' : |
689 | 693 | $subject = "Etiquette imprimée"; |
690 | - $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée."; | |
694 | + $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée"; | |
691 | 695 | $mailList[0] = $materiel->email_responsable; |
692 | 696 | default : |
693 | 697 | $subject = "Action \"$action\" sur un matériel"; |
694 | - $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\"."; | |
698 | + $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\""; | |
695 | 699 | break; |
696 | - } | |
697 | - } | |
698 | - | |
699 | - // Et maintenant on construit la liste de mails ... | |
700 | + } // end switch | |
701 | + // (EP) Ajout de l'ID du materiel !!! | |
702 | + $msg .= " (id=".$materiel->id.")."; | |
703 | + // Only for "delete" action (for the moment...) | |
704 | + if ($msgMore) $msg .= $msgMore; | |
705 | + //$msg .= "\n\n"; | |
706 | + } // subject is null | |
707 | + | |
708 | + // Et maintenant on construit la liste de mails... | |
700 | 709 | // Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'): |
701 | 710 | if ($configuration->envoi_mail && $action != 'printLabelRuban') { |
702 | 711 | |
703 | - // mail owner | |
712 | + // owner's mail (utilisateur du matériel) | |
704 | 713 | $mailList[0] = $materiel->email_responsable; |
705 | 714 | |
706 | - // mail resp | |
707 | - $mailsRespMetier = null; | |
715 | + // resp's mail | |
708 | 716 | $mailsRespMetier = null; |
717 | + $mailRespThematique = null; | |
709 | 718 | |
710 | - if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) | |
719 | + if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) { | |
711 | 720 | // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe |
712 | 721 | $mailsRespMetier = TableRegistry::get('Users')->find()->select('email') |
713 | 722 | ->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->groupes_metier_id]) |
714 | 723 | ->toArray(); |
715 | - | |
716 | - if ($mailsRespMetier != null && $mailsRespMetier != null) { | |
717 | - $mailResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); | |
724 | + $mailRespThematique = TableRegistry::get('Users')->find()->select('email') | |
725 | + ->where(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->groupes_thematique_id]) | |
726 | + ->toArray(); | |
727 | + } | |
728 | + | |
729 | + if ($mailsRespMetier != null || $mailRespThematique != null) { | |
730 | + $mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); | |
718 | 731 | for ($i = 0; $i < sizeof($mailsResp); $i ++) { |
719 | - $mailList[sizeof($mailList)] = $mailsResp[$i]['email']; | |
732 | + $mailList[] = $mailsResp[$i]['email']; | |
733 | + //$mailList[sizeof($mailList)] = $mailsResp[$i]['email']; | |
720 | 734 | } |
721 | 735 | } |
722 | - | |
736 | + | |
723 | 737 | // mail admin de reference (ici appele gestionnaire) -> Partie administration |
724 | 738 | // Cela a été mis en commentaire car de toute façon l'utilisateur va voir un administratif pour faire valider sa fiche, |
725 | 739 | // Pas la peine de spam l'administration de mails non plus hein ! |
... | ... | @@ -735,43 +749,57 @@ class AppController extends Controller { |
735 | 749 | * } |
736 | 750 | */ |
737 | 751 | } |
738 | - } | |
752 | + } // Materiel | |
739 | 753 | |
754 | + //@todo: ajouter quelques infos dans ces cas : | |
755 | + else if ($entity instanceof Document) { | |
756 | + ; | |
757 | + } | |
758 | + else if ($entity instanceof Suivi) { | |
759 | + ; | |
760 | + } | |
761 | + else if ($entity instanceof Emprunt) { | |
762 | + ; | |
763 | + } | |
764 | + | |
740 | 765 | // Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'): |
766 | + $specificUsers = []; | |
741 | 767 | if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') { |
742 | 768 | // mail aux adresses specifiees dans la config |
743 | 769 | for ($i = 0; $i < 11; $i ++) { |
744 | - if ($configuration['emailGuest' . $i]) | |
745 | - $mailList[sizeof($mailList)] = $configuration['emailGuest' . $i]; | |
746 | - // Le if vérifie que la ligne soit pas null | |
770 | + $specificUser = $configuration['emailGuest' . $i]; | |
771 | + if ($specificUser) | |
772 | + $specificUsers[] = $specificUser; | |
773 | + //$mailList[sizeof($mailList)] = $configuration['emailGuest' . $i]; | |
774 | + $mailList[] = $specificUser; | |
775 | + // Le if vérifie que la ligne soit pas null | |
747 | 776 | } |
748 | 777 | } |
749 | 778 | |
750 | 779 | // On dedoublonne la liste des mails, c'pas tres cool de se faire spam 2-3 fois pour la meme action sur le meme materiel, non mais ! |
751 | - $List = array_unique($mailList); | |
780 | + $mailList = array_unique($mailList); | |
752 | 781 | |
753 | 782 | // ... Pour envoyer les mails aux personnes concernees |
754 | - foreach ($List as $mail) { | |
783 | + foreach ($mailList as $mail) { | |
755 | 784 | // 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 |
756 | - if ($mail != $_SESSION['Auth']['User']['mail'][0]) { | |
757 | - $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 | |
785 | + if ($mail == $_SESSION['Auth']['User']['mail'][0]) continue; | |
786 | + $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 | |
787 | + // Génération du message "Vous recevez ce message en tant que $role" | |
788 | + // 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. [...]" | |
789 | + if ($specificUsers) | |
790 | + $role = 'car vous etes dans la liste spécifique des emails de LabInvent. Pour faire retirer votre mail de cette liste, veuillez contacter un SuperAdmin.'; | |
791 | + else { | |
758 | 792 | $role = TableRegistry::get('Users')->find()->select('role')->where(['email =' => $mail])->first()['role']; |
759 | - | |
760 | - if ($action != 'statusValidated' && $materiel != null) | |
761 | - $message .= "\nVeuillez vérifier et compléter si besoin la fiche corespondante."; | |
762 | - | |
763 | - // Génération du message "Vous recevez ce message en tant que $role" | |
764 | - // Si $role innexistant (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. [...]" | |
765 | - if ($role) | |
766 | - $role = 'en tant que ' . $role; | |
767 | - else | |
768 | - $role = 'car vous avez demandé à le recevoir. Pour faire retirer votre mail de la liste, veuillez contacter un SuperAdmin.'; | |
769 | - | |
770 | - $message .= "\n\n" . 'Vous recevez ce message ' . $role; | |
771 | - $this->sendEmailTo("$subject", $message, $mail, $configuration); | |
793 | + // Default role is Utilisateur (for people in LDAP but without priviledge, not in the users table) | |
794 | + if (is_null($role)) $role = 'Utilisateur'; | |
795 | + $role = 'en tant que ' . $role; | |
772 | 796 | } |
797 | + if ($entity != null && !in_array($action, ['delete', 'statusValidated', 'statusCreated'])) | |
798 | + $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche corespondante."; | |
799 | + $message .= "\n\nVous recevez ce message " . $role; | |
800 | + $this->sendEmailTo("$subject", $message, $mail, $configuration); | |
773 | 801 | } |
774 | - return $List; | |
802 | + return $mailList; | |
775 | 803 | } |
776 | 804 | |
777 | 805 | // Fonction d'envoi de mails | ... | ... |
src/Controller/DocumentsController.php
... | ... | @@ -233,7 +233,7 @@ class DocumentsController extends AppController { |
233 | 233 | // Ajout de doc au suivi |
234 | 234 | $id = $document->suivi_id; |
235 | 235 | // $this->sendEmailToManagementWith('[LabInvent] Ajout d\'un document', $userName.' (email = '.$userEmail.') a ajouté un document de type "'.$nomType.'" au suivi "Suivi '.$document->suivi_id.'".'); |
236 | - $this->sendEmail(null, '[LabInvent] Ajout dun document', $userName . ' a ajouté un document de type "' . $nomType . '" au suivi "Suivi ' . $document->suivi_id . '".'); | |
236 | + $this->sendEmail($document, '[LabInvent] Ajout dun document', $userName . ' a ajouté un document de type "' . $nomType . '" au suivi "Suivi ' . $document->suivi_id . '".'); | |
237 | 237 | return $this->redirect([ |
238 | 238 | 'controller' => 'suivis', |
239 | 239 | 'action' => 'view', |
... | ... | @@ -242,7 +242,7 @@ class DocumentsController extends AppController { |
242 | 242 | } else { |
243 | 243 | // Ajout de doc au matériel |
244 | 244 | // $this->sendEmailToManagementWith('[LabInvent] Ajout d\'un document', $userName.' (email = '.$userEmail.') a ajouté un document de type "'.$nomType.'" au matériel "'.$materiel->designation.'" (id = '.$materiel->id.').'); |
245 | - $this->sendEmail(null, '[LabInvent] Ajout dun document', $userName . ' a ajouté un document de type "' . $nomType . '" au matériel "' . $materiel->designation . '" (id = ' . $materiel->id . ').'); | |
245 | + $this->sendEmail($document, '[LabInvent] Ajout dun document', $userName . ' a ajouté un document de type "' . $nomType . '" au matériel "' . $materiel->designation . '" (id = ' . $materiel->id . ').'); | |
246 | 246 | return $this->redirect([ |
247 | 247 | 'controller' => 'materiels', |
248 | 248 | 'action' => 'view', | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -649,10 +649,10 @@ class MaterielsController extends AppController { |
649 | 649 | TableRegistry::get('Users')->find('list', ['keyField' => 'id','valueField' => 'nom']) |
650 | 650 | ->where(['role =' => 'Administration']) |
651 | 651 | ->toArray())) { |
652 | - $gestionnaireID = TableRegistry::get('Users')->find()->where([ | |
653 | - 'nom' => $_SESSION['Auth']['User']['sn'][0] | |
654 | - ])->first()->id; | |
655 | - $materiel->gestionnaire_id = $gestionnaireID; | |
652 | + $gestionnaireID = TableRegistry::get('Users')->find()->where([ | |
653 | + 'nom' => $_SESSION['Auth']['User']['sn'][0] | |
654 | + ])->first()->id; | |
655 | + $materiel->gestionnaire_id = $gestionnaireID; | |
656 | 656 | } |
657 | 657 | if ($this->Materiels->save($materiel)) { |
658 | 658 | $this->Flash->success(__('Le matériel a bien été ajouté.')); | ... | ... |
src/Template/Layout/default.ctp
... | ... | @@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2'; |
115 | 115 | </i></td> |
116 | 116 | <td id="version"> |
117 | 117 | <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) --> |
118 | - <font color="black">VERSION 2.8.0.3 (11/09/2017)</font> | |
118 | + <font color="black">VERSION 2.8.0.4 (15/09/2017)</font> | |
119 | 119 | <br/> |
120 | 120 | <font color="black"><a href="<?php |
121 | 121 | ... | ... |