Commit a73a1dba78de1c050fb471191cae09519ec64523

Authored by Etienne Pallier
1 parent ce705bb6

Bugfix Emails : il manquait l'id du materiel concerné par l'action, et

c'est maintenant mieux organisé
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 = &#39;Labinvent 2&#39;;
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  
... ...