Commit ae5c963936e61a7e520cb7c80ecd4b2dd24de51e

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

Grosse amélioration et rationalisation de la gestion des emails

(étape 1)

v4.103.0-3.7.9
CHANGES.txt
... ... @@ -94,6 +94,10 @@ Outre ces changements, voici d'autres changements importants :
94 94 ======= CHANGES =======
95 95  
96 96 -------
  97 +18/09/2020 v4.103.0-3.7.9 (EP)
  98 + - (e) Grosse amélioration et rationalisation de la gestion des emails (étape 1)
  99 +
  100 +-------
97 101 17/09/2020 v4.102.0-3.7.9 (EP)
98 102 - (i) Tests Fixtures => toutes simplifiées pour utiliser le format de la table de prod par défaut
99 103  
... ...
README.md
... ... @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -Date: 15/09/2020
46   -Version: 4.102.0-3.7.9
  45 +Date: 18/09/2020
  46 +Version: 4.103.0-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
... ... @@ -1649,9 +1649,14 @@ class AppController extends Controller
1649 1649  
1650 1650  
1651 1651  
1652   -
1653   -
1654   -
  1652 + protected function getCurrentURL($WITH_REQUEST_URI=true) {
  1653 + $link =
  1654 + (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http")
  1655 + . "://"
  1656 + . $_SERVER['HTTP_HOST'];
  1657 + if ($WITH_REQUEST_URI) $link .= $_SERVER['REQUEST_URI'];
  1658 + return $link;
  1659 + }
1655 1660  
1656 1661 protected function getCurrentUserName() {
1657 1662 //debug($this->LdapAuth->user('id')); exit;
... ... @@ -2692,6 +2697,8 @@ class AppController extends Controller
2692 2697 }
2693 2698 }
2694 2699  
  2700 +
  2701 +
2695 2702 /**Version MI - version modifiée de la fonction sendEmail par malik du 18 juin au 24 août
2696 2703 *
2697 2704 * Envoi un mail avec un sujet, contenant un message à destination d'un email, selon l'action effectuée.
... ... @@ -2703,9 +2710,24 @@ class AppController extends Controller
2703 2710 * @param $msg :
2704 2711 * Message à envoyer. Si $msg n'est pas renseigné, un message par défaut sera généré.
2705 2712 */
  2713 + // PHP7:
  2714 + //public function sendmail(\App\Model\Entity $entity, $mode=3, $subject = null, $msg = null)
  2715 + //public function sendmail(\App\Model\Entity\Materiel $entity, $mode=3, $subject = null, $msg = null)
  2716 + // PHP5 :
2706 2717 public function sendmail($entity, $mode=3, $subject = null, $msg = null)
2707 2718 {
2708 2719  
  2720 + $configuration = $this->confLabinvent;
  2721 + // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction
  2722 + if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null;
  2723 +
  2724 +
  2725 + /*
  2726 + * 1) Définition des PARAMÈTRES GÉNÉRAUX : host, action, acteur, ...
  2727 + */
  2728 +
  2729 + $host = $this->getCurrentURL(false);
  2730 +
2709 2731 //$this->myDebug("photo send mail");
2710 2732 //debug("photo send mail");
2711 2733 //exit;
... ... @@ -2718,18 +2740,21 @@ class AppController extends Controller
2718 2740 * login $_SESSION['Auth']['User']['xxx'][0] /!\ Ce champ est suceptible de changer de nom, dans les tests ce champ est ['cn'][0]
2719 2741 * mdp $_SESSION['Auth']['User']['userpassword'][0]
2720 2742 */
2721   - $configuration = $this->confLabinvent;
2722 2743 $action = $this->request->getAttribute('params')['action']; // add or edit or delete or ...
2723 2744  
2724   - // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction
2725   - if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null;
2726   -
2727   - $mailList = [];
2728   - // On détermine le message et le sujet du mail en fonction de l'action effectuee
2729   - // on bloque l'envoi de mail à l'edition et à la validation pour eviter trop d'envoi de mail
2730   - // le temps que soit trouvé une autre solution
  2745 + // ex: 'Etienne Pallier'
2731 2746 $acteur = $_SESSION['Auth']['User']['givenname'][0] . ' ' . $_SESSION['Auth']['User']['sn'][0];
2732 2747  
  2748 + $materiel = null;
  2749 +
  2750 +
  2751 + /*
  2752 + * 2) CRÉATION DU MAIL (sujet et body)
  2753 + *
  2754 + * On détermine le message et le sujet du mail en fonction de l'action effectuee
  2755 + *
  2756 + */
  2757 +
2733 2758 /*
2734 2759 * - mail pour un MATERIEL
2735 2760 */
... ... @@ -2752,16 +2777,7 @@ class AppController extends Controller
2752 2777 case 'delete':
2753 2778 $subject = "Suppression d'un matériel";
2754 2779 $msg = "$acteur a supprimé le matériel \"$nom_materiel\"";
2755   - // @todo: mettre le nom des domaine, categ, et sous-categ, et non pas l'id
2756   - if ($materiel->sur_categorie_id != "")
2757   - $msgMore .= "\n\nDomaine : " . $materiel->sur_categorie_id;
2758   - if ($materiel->categorie_id != "")
2759   - $msgMore .= "\n\nCatégorie : " . $materiel->categorie_id;
2760   - if ($materiel->sous_categorie_id != "")
2761   - $msgMore .= "\n\nSous-catégorie : " . $materiel->sous_categorie_id;
2762   - if ($materiel->description != "")
2763   - $msgMore .= "\n\nDescription :\n" . $materiel->description;
2764   - break;
  2780 + break;
2765 2781 case 'statusCreated':
2766 2782 $subject = "Dé-validation d'un matériel";
2767 2783 $msg = "$acteur a dé-validé le matériel \"$nom_materiel\"";
... ... @@ -2785,85 +2801,52 @@ class AppController extends Controller
2785 2801 case 'printLabelRuban':
2786 2802 $subject = "Etiquette imprimée";
2787 2803 $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée";
2788   - $mailList[0] = $materiel->email_responsable;
  2804 + //$mailList[0] = $materiel->email_responsable;
2789 2805 default:
2790 2806 $subject = "Action \"$action\" sur un matériel";
2791 2807 $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\"";
2792 2808 break;
2793 2809 } // end switch
2794   - // (EP) Ajout de l'ID du materiel !!!
2795   - $msg .= " (id=" . $materiel->id . ").";
2796   - // Only for "delete" action (for the moment...)
2797   - if ($msgMore)
2798   - $msg .= $msgMore;
2799   - // $msg .= "\n\n";
2800   - } // subject is null
2801   -
2802   - // Et maintenant on construit la liste de mails...
2803   - // Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'):
2804   - if ($configuration->envoi_mail && $action != 'printLabelRuban') {
2805 2810  
2806   - // owner's mail (utilisateur du matériel)
2807   - $mailList[0] = $materiel->email_responsable;
2808   -
2809   - // resp's mail
2810   - $mailsRespMetier = [];
2811   - $mailRespThematique = [];
2812   -
2813   - //TODO: changer ça car c'est pas forcément id=1
2814   - //if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) {
2815   - if ($materiel->groupes_metier_id) {
2816   - // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe
2817   - $mailsRespMetier = TableRegistry::getTableLocator()->get('Users')->find()
2818   - ->select('email')
2819   - ->where([
2820   - 'role =' => 'Responsable',
2821   - 'groupes_metier_id =' => $materiel->groupes_metier_id
2822   - ])
2823   - ->toArray();
  2811 + // (EP) Ajout de l'url (ou id) du materiel
  2812 + $id = $materiel->id;
  2813 + $msg .= $action=='deleteD' ? " (id=$id)" : " ($host/materiels/view/$id)";
  2814 + //$msg .= "\n\nURL de la fiche : $host/materiels/view/{$materiel->id}";
  2815 + // $msg .= "\n\n";
  2816 +
  2817 + // (EP) On ajoute quelques informations sur le matériel
  2818 + $fields = [
  2819 + 'sur_categorie_id' => ['sur_category', 'Domaine'],
  2820 + 'categorie_id' => ['category', 'Catégorie'],
  2821 + 'sous_categorie_id' => ['sous_category', 'Sous-catégorie'],
  2822 + 'description' => ['hasnot!', 'Description']
  2823 + ];
  2824 + foreach ($fields as $fname=>$attrs) if ($materiel->$fname) {
  2825 + $val = $materiel->has($attrs[0]) ? $materiel->{$attrs[0]}->nom : $materiel->$fname;
  2826 + $msgMore .= "\n\n$attrs[1] : " . $val;
2824 2827 }
2825   -
2826   - //TODO: changer ça car c'est pas forcément id=1
2827   - //if ($materiel->groupes_thematique_id != null && $materiel->groupes_thematique_id != 1) {
2828   - if ($materiel->groupes_thematique_id) {
2829   - // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe
2830   - $mailRespThematique = TableRegistry::getTableLocator()->get('Users')->find()
2831   - ->select('email')
2832   - ->where([
2833   - 'role =' => 'Responsable',
2834   - 'groupes_thematique_id =' => $materiel->groupes_thematique_id
2835   - ])
2836   - ->toArray();
2837   - }
2838   -
2839   - if ($mailsRespMetier != [] || $mailRespThematique != []) {
2840   - $mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique));
2841   - /*
2842   - for ($i = 0; $i < sizeof($mailsResp); $i ++) {
2843   - $mailList[] = $mailsResp[$i]['email'];
2844   - // $mailList[sizeof($mailList)] = $mailsResp[$i]['email'];
2845   - }
2846   - */
2847   - foreach ($mailsResp as $mailResp) $mailList[] = $mailResp['email'];
2848   - $mailList = array_unique($mailList);
2849   - }
2850   - //debug($mailList);exit();
2851   -
2852   - // mail admin de reference (ici appele gestionnaire) -> Partie administration
2853   - // Cela a été mis en commentaire car de toute façon l'utilisateur va voir un administratif pour faire valider sa fiche,
2854   - // Pas la peine de spam l'administration de mails non plus hein !
2855   -
  2828 + if ($msgMore) $msg .= $msgMore;
2856 2829 /*
2857   - * if ($action != 'statusValidated' && $action != 'statusArchived') {
2858   - * $mailsAdmin = TableRegistry::getTableLocator()->get('Users')->find()->select('email')
2859   - * ->where(['role =' => 'Administration'])
2860   - * ->toArray();
2861   - * for ($i = 0; $i < sizeof($mailsAdmin); $i ++) {
2862   - * $mailList[sizeof($mailList)] = $mailsAdmin[$i]['email'];
2863   - * }
2864   - * }
  2830 + //if ($materiel->sur_categorie_id != "")
  2831 + if ($materiel->sur_categorie_id) {
  2832 + $val = $materiel->has('sur_category') ? $materiel->sur_category->nom : $materiel->sur_categorie_id;
  2833 + $msgMore .= "\n\nDomaine : " . $val;
  2834 + }
  2835 + if ($materiel->categorie_id)
  2836 + $msgMore .= "\n\nCatégorie : " . $materiel->categorie_id;
  2837 + if ($materiel->sous_categorie_id)
  2838 + $msgMore .= "\n\nSous-catégorie : " . $materiel->sous_categorie_id;
  2839 + //if ($materiel->description != "")
  2840 + if ($materiel->description)
  2841 + $msgMore .= "\n\nDescription :\n" . $materiel->description;
2865 2842 */
2866   - }
  2843 +
  2844 + // Dans la liste des mails, on ajoute l'utilisateur (responsable) du matériel
  2845 + //$mailList[0] = $materiel->email_responsable;
  2846 +
  2847 + } // subject is null
  2848 +
  2849 +
2867 2850 } // Materiel
2868 2851  
2869 2852  
... ... @@ -2912,41 +2895,29 @@ class AppController extends Controller
2912 2895 break;
2913 2896 } // end switch
2914 2897 // (EP) Ajout de l'ID du document, et de l'id du materiel associé !!!
2915   - //On change le contenu en fonction de si le document a été lié à un matériel, ou a un suivi
2916   - if (!$id_mat == Null) {
  2898 + // On change le contenu en fonction de si le document a été lié à un matériel, ou à un suivi
  2899 + $id = $id_mat;
  2900 + $entity_name = 'matériel';
  2901 + if (!$id) {
  2902 + $id = $id_suiv;
  2903 + $entity_name = 'suivi';
  2904 + }
  2905 + $msg .= "\n\n (id doc = {$doc->id}, id du $entity_name associé = $id)";
  2906 + $nomFic =$id."_".$nom_doc."_".$id_doc.".".$type_doc;
  2907 + /*
  2908 + //if (!$id_mat == Null) {
  2909 + if ($id_mat) {
2917 2910 $msg .= "\n\n (id doc=".$doc->id.", Materiel associé d'id=\"$id_mat\")";
2918 2911 $nomFic =$id_mat."_".$nom_doc."_".$id_doc.".".$type_doc;
2919 2912 } else {
2920   - $msg .= "\n\n (id doc=".$doc->id.", Materiel associé d'id=\"$id_suiv\")";
  2913 + $msg .= "\n\n (id doc=".$doc->id.", Suivi associé d'id=\"$id_suiv\")";
2921 2914 $nomFic =$id_suiv."_".$nom_doc."_".$id_doc.".".$type_doc;
2922 2915 }
2923   - }
  2916 + */
  2917 + } // sujet null
2924 2918  
2925   - // Si le doc est lié à un matos, on ajoute le mail du gestionnaire du matos
2926   - // (ssi l'envoi général est activé et que l'action ne correspond pas à 'printLabelRuban')
2927   - if ( !$id_mat == Null && $configuration->envoi_mail && $action!='printLabelRuban' ) {
2928   - // (EP) Recup du materiel associé
2929   - /*
2930   - $materiel = TableRegistry::getTableLocator()->get('Materiels')->find()
2931   - ->where([
2932   - 'id =' => $doc->materiel_id
2933   - ])->first();
2934   - */
2935   - $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($doc->materiel_id);
2936   - //debug("envoi");
2937   - //debug("matos = ".$materiel);
2938   - //exit;
2939   - // owner's mail (utilisateur du matériel associé )
2940   - //$mailList[0] = $entity->materiel->email_responsable;
2941   - // (MI) - gestionaire ratachée au matériel
2942   - //$mailList[1]= TableRegistry::getTableLocator()->get('Users')->find()
2943   - $mailList[]= TableRegistry::getTableLocator()->get('Users')->find()
2944   - ->select('email')
2945   - ->where([
2946   - 'role =' => 'Administration',
2947   - 'id =' => $materiel->gestionnaire_id
2948   - ]);
2949   - } // if matos
  2919 + // Si le doc est attaché à un matériel, on recupère ce matériel
  2920 + if ($id_mat) $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($doc->materiel_id);
2950 2921  
2951 2922 } // DOC lié
2952 2923  
... ... @@ -2966,25 +2937,209 @@ class AppController extends Controller
2966 2937 * ... etc ... (il faut qu'on soit plus précis)
2967 2938 */
2968 2939  
2969   - // Et maintenant on construit la liste de mails...
  2940 + // Pas de matériel défini => pas de mail (pas de bras, pas de chocolat) !
  2941 + if ($materiel == null) return null;
  2942 +
2970 2943  
2971   - // Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'):
2972   - $specificUsers = [];
2973   - if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') {
  2944 + /*
  2945 + * 3) DESTINATAIRES : on construit la liste des destinataires
  2946 + */
  2947 +
  2948 + $mailList = [];
  2949 +
  2950 + /*
  2951 + * 3a) Envoi général
  2952 + *
  2953 + * Si l'envoi général est activé, on ajoute les mails des personnes concernées :
  2954 + * - le proprio (l'utilisateur) du matériel (sauf s'il est l'acteur de l'action)
  2955 + * - le gestionnaire de référence du matos
  2956 + * - les responsables thématiques et métier
  2957 + * - (TODO:) les responsables (scientifique et chef projet) du projet
  2958 + */
  2959 + //if ($configuration->envoi_mail && $action != 'printLabelRuban') {
  2960 + if ($configuration->envoi_mail) {
  2961 +
  2962 + // - Ajout de l'utilisateur du matériel (sauf s'il est l'acteur de l'action)
  2963 + /*
  2964 + debug($acteur);
  2965 + debug($this->userName);
  2966 + debug($materiel->nom_responsable);
  2967 + debug($this->userName == $materiel->nom_responsable);
  2968 + exit;
  2969 + */
  2970 + //if ($this->userName != $materiel->nom_responsable) $mailList[0] = $materiel->email_responsable;
  2971 + if ($this->userName == $materiel->nom_responsable) $mailList[] = $materiel->email_responsable;
  2972 +
  2973 + // - Ajout du gestionnaire de référence du matos (s'il y en a un)
  2974 + /*
  2975 + if ($materiel->gestionnaire_id)
  2976 + $mailList[] = TableRegistry::getTableLocator()->get('Users')
  2977 + ->find()
  2978 + ->where([
  2979 + 'id =' => $materiel->gestionnaire_id,
  2980 + 'role =' => 'Administration',
  2981 + ])
  2982 + ->select('email')
  2983 + //->toArray();
  2984 + */
  2985 + if ($materiel->gestionnaire_id)
  2986 + $mailList[] = TableRegistry::getTableLocator()->get('Users')->get($materiel->gestionnaire_id)->email;
  2987 + //debug($mailList); exit;
  2988 +
  2989 + // - Ajout des Responsables de groupe thématique ou métier
  2990 + /*
  2991 + $mailsRespMetier = [];
  2992 + $mailRespThematique = [];
  2993 + */
  2994 + $resp_mails = [];
  2995 + $groups_fk = [ 'groupes_metier_id', 'groupes_thematique_id' ];
  2996 + foreach ($groups_fk as $group_fk) if ($materiel->$group_fk) {
  2997 + //$mailsRespMetier = TableRegistry::getTableLocator()->get('Users')->find()
  2998 + $resp_mails[$group_fk] = TableRegistry::getTableLocator()->get('Users')->find()
  2999 + ->select('email')
  3000 + ->where([
  3001 + 'role =' => 'Responsable',
  3002 + "$group_fk =" => $materiel->$group_fk
  3003 + ])
  3004 + ->toArray();
  3005 + }
  3006 + debug($resp_mails);
  3007 + //exit;
  3008 + /*
  3009 + if ($materiel->groupes_metier_id) {
  3010 + $mailsRespMetier = TableRegistry::getTableLocator()->get('Users')->find()
  3011 + ->select('email')
  3012 + ->where([
  3013 + 'role =' => 'Responsable',
  3014 + 'groupes_metier_id =' => $materiel->groupes_metier_id
  3015 + ])
  3016 + ->toArray();
  3017 + }
  3018 + if ($materiel->groupes_thematique_id) {
  3019 + $mailRespThematique = TableRegistry::getTableLocator()->get('Users')->find()
  3020 + ->select('email')
  3021 + ->where([
  3022 + 'role =' => 'Responsable',
  3023 + 'groupes_thematique_id =' => $materiel->groupes_thematique_id
  3024 + ])
  3025 + ->toArray();
  3026 + }
  3027 + */
  3028 + // On ajoute ces responsables à la liste générale
  3029 + //$resp_mails = array_merge($resp_mails);
  3030 + //$resp_mails = array_values($resp_mails);
  3031 + //$resp_mails = array_values($resp_mails);
  3032 + //$resp_mails['groupes_metier_id']=[]; $resp_mails['groupes_thematique_id']=[];
  3033 + $resp_mails = array_merge($resp_mails['groupes_metier_id'], $resp_mails['groupes_thematique_id']);
  3034 + debug($resp_mails);
  3035 + foreach ($resp_mails as $resp_mail) $mailList[] = $resp_mail['email'];
  3036 + //exit;
  3037 + /*
  3038 + if ($mailsRespMetier != [] || $mailRespThematique != []) {
  3039 + //$mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique));
  3040 + /S
  3041 + for ($i = 0; $i < sizeof($mailsResp); $i ++) {
  3042 + $mailList[] = $mailsResp[$i]['email'];
  3043 + // $mailList[sizeof($mailList)] = $mailsResp[$i]['email'];
  3044 + }
  3045 + S/
  3046 + foreach ($mailsResp as $mailResp) $mailList[] = $mailResp['email'];
  3047 + }
  3048 + */
  3049 +
  3050 + // mail admin de reference (ici appele gestionnaire) -> Partie administration
  3051 + // Cela a été mis en commentaire car de toute façon l'utilisateur va voir un administratif pour faire valider sa fiche,
  3052 + // Pas la peine de spam l'administration de mails non plus hein !
  3053 + /*
  3054 + if ($action != 'statusValidated' && $action != 'statusArchived') {
  3055 + $mailsAdmin = TableRegistry::getTableLocator()->get('Users')->find()->select('email')
  3056 + ->where(['role =' => 'Administration'])
  3057 + ->toArray();
  3058 + for ($i = 0; $i < sizeof($mailsAdmin); $i ++) {
  3059 + $mailList[sizeof($mailList)] = $mailsAdmin[$i]['email'];
  3060 + }
  3061 + }
  3062 + */
  3063 + } // si envoi général activé
  3064 +
  3065 + /*
  3066 + * 3b) Envoi à la liste spécifique
  3067 + *
  3068 + * Si l'envoi à la liste spécifique est activé,
  3069 + * on ajoute simplement TOUS les mails de cette liste,
  3070 + * sans condition aucune,
  3071 + * car ce sont des personnes qui ont demandé à être informées
  3072 + * systématiquement de toutes les actions
  3073 + *
  3074 + */
  3075 + //$specificUsers = [];
  3076 + //if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') {
  3077 + if ($configuration->envoi_mail_guests) {
2974 3078 // mail aux adresses specifiees dans la config
2975 3079 for ($i = 0; $i < 11; $i ++) {
2976   - $specificUser = $configuration['emailGuest' . $i];
2977   - if ($specificUser)
2978   - $specificUsers[] = $specificUser;
2979   - // $mailList[sizeof($mailList)] = $configuration['emailGuest' . $i];
2980   - $mailList[] = $specificUser;
2981   - // Le if vérifie que la ligne soit pas null
  3080 + /*
  3081 + $mail_field = "emailGuest$i";
  3082 + $specificUser = $configuration->$mail_field;
  3083 + */
  3084 + $specificUser = $configuration["emailGuest$i"];
  3085 + if ($specificUser) $mailList[] = $specificUser;
  3086 + //$specificUsers[] = $specificUser;
  3087 + // $mailList[sizeof($mailList)] = $configuration['emailGuest' . $i];
2982 3088 }
2983 3089 }
2984 3090  
2985   - // 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 !
2986   - // Ca supprime aussi les lignes vides
  3091 + // On supprime les doublons éventuels
  3092 + /* test : ajout de doublons
  3093 + $mailList[] = 'Etienne.Pallier@irap.omp.eu';
  3094 + $mailList[] = 'etienne.Pallier@irap.omp.eu';
  3095 + $mailList[] = 'elodie.bourrec@irap.omp.eu';
  3096 + $mailList[] = 'Elodie.bourrec@irap.omp.eu';
  3097 + */
  3098 + // on met tous les mails en minuscule car sinon certains doublons pourraient ne pas être identifiés...
  3099 + $mailList = array_map('strtolower', $mailList);
2987 3100 $mailList = array_unique($mailList);
  3101 + debug($mailList);
  3102 + //exit();
  3103 +
  3104 + /*
  3105 + // - DOC only
  3106 + // Si le doc est lié à un matos, on ajoute le mail du gestionnaire du matos
  3107 + // (ssi l'envoi général est activé et que l'action ne correspond pas à 'printLabelRuban')
  3108 + if ( !$id_mat == Null && $configuration->envoi_mail && $action!='printLabelRuban' ) {
  3109 + // (EP) Recup du materiel associé
  3110 + /S
  3111 + $materiel = TableRegistry::getTableLocator()->get('Materiels')->find()
  3112 + ->where([
  3113 + 'id =' => $doc->materiel_id
  3114 + ])->first();
  3115 + S/
  3116 + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($doc->materiel_id);
  3117 + //debug("envoi");
  3118 + //debug("matos = ".$materiel);
  3119 + //exit;
  3120 + // owner's mail (utilisateur du matériel associé )
  3121 + //$mailList[0] = $entity->materiel->email_responsable;
  3122 + // (MI) - gestionaire ratachée au matériel
  3123 + //$mailList[1]= TableRegistry::getTableLocator()->get('Users')->find()
  3124 + $mailList[]= TableRegistry::getTableLocator()->get('Users')->find()
  3125 + ->select('email')
  3126 + ->where([
  3127 + 'role =' => 'Administration',
  3128 + 'id =' => $materiel->gestionnaire_id
  3129 + ]);
  3130 + } // si lié à un matos
  3131 + */
  3132 +
  3133 +
  3134 +
  3135 + /*
  3136 + * 4) ENVOI : enfin, on envoie le mail à toute la liste de destinataires
  3137 + */
  3138 +
  3139 + // On dédoublonne la liste des mails pour éviter de spammer les gens, non mais !
  3140 + // Ca supprime aussi les lignes vides
  3141 + //$mailList = array_unique($mailList);
  3142 +
2988 3143 // ... Pour envoyer les mails aux personnes concernees
2989 3144 foreach ($mailList as $mail) {
2990 3145 // 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
... ... @@ -2994,7 +3149,12 @@ class AppController extends Controller
2994 3149 // Génération du message "Vous recevez ce message en tant que $role"
2995 3150 // 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. [...]"
2996 3151 //if ($specificUsers)
2997   - $role = "car vous etes dans la liste spécifique des emails de LabInvent. \n\nPour faire retirer votre mail de cette liste, veuillez contacter un super-administrateur.";
  3152 + /*
  3153 + $role = "car vous etes dans la liste spécifique des emails de LabInvent.";
  3154 + $role .= "\n\nPour faire retirer votre mail de cette liste, veuillez contacter un super-administrateur.";
  3155 + */
  3156 + $role = "car vous êtes concerné(e) par cette action effectuée sur l'inventaire des matériels du laboratoire.";
  3157 + $role .= "\n\n(vous êtes l'utilisateur du matériel, ou bien le gestionnaire, ou encore le responsable thématique ou métier ou projet).";
2998 3158 /* (EP 13/319) : à quoi sert toute cette suite du texte du mail ???
2999 3159 * Ca sent le bon vieux copier-coller sans réfléchir...
3000 3160 //else {
... ... @@ -3012,7 +3172,8 @@ class AppController extends Controller
3012 3172 */
3013 3173 //if ($entity != null && !in_array($action, ['delete','statusValidated','statusCreated'])) {
3014 3174 if ($entity != null) {
3015   - if (!in_array($action, ['delete']))
  3175 + //if (!in_array($action, ['delete']))
  3176 + if ( ($entity instanceof Materiel) && $action != 'delete')
3016 3177 $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante.";
3017 3178 $message .= "\n\nVous recevez ce message " . $role;
3018 3179 //en fonction du mode à l'appel, on utilise un envoi de mail différent
... ... @@ -3041,7 +3202,7 @@ class AppController extends Controller
3041 3202 } //foreach ($mailList as $mail)
3042 3203 return $mailList;
3043 3204  
3044   - } // function sendmail
  3205 + } // sendmail()
3045 3206  
3046 3207  
3047 3208  
... ...
src/Controller/MaterielsController.php
... ... @@ -2157,23 +2157,32 @@ class MaterielsController extends AppController {
2157 2157 public function delete($id = null)
2158 2158 {
2159 2159 // $this->request->allowMethod(['post', 'delete']);
2160   -
2161 2160 $verb = 'supprimé';
2162   - $materiel = $this->Materiels->get($id);
  2161 + $materiel = $this->Materiels->get($id,
  2162 + [
  2163 + 'contain'=>['SurCategories', 'Categories', 'SousCategories']
  2164 + ]
  2165 + );
2163 2166  
  2167 + // DEBUG
  2168 + $this->sendmail($materiel);
  2169 + exit;
  2170 +
  2171 + //if ($materiel->has('sur_category')) debug($materiel->sur_category->nom);
  2172 + //debug($materiel); exit;
2164 2173 if ($this->Materiels->delete($materiel)) {
2165   - $this->Flash->success(__('Le matériel a bien été supprimé'));
  2174 + $this->Flash->success(__("Le matériel a bien été $verb"));
2166 2175 $this->ilog("Materiel $verb = '$materiel' (id=$id)");
2167 2176 //(EP202009)
2168 2177 //$this->sendEmail($materiel);
2169 2178 $this->sendmail($materiel);
2170   -
2171 2179 } else
2172   - $this->Flash->error(__('Le matériel n\'a pas pu être supprimé'));
  2180 + $this->Flash->error(__("Le matériel n'a pas pu être $verb"));
2173 2181 return $this->redirect([
2174 2182 'action' => 'index'
2175 2183 ]);
2176 2184 }
  2185 +
2177 2186  
2178 2187 /**
2179 2188 * StatusSetTo method
... ...
src/Template/Configurations/edit.ctp
... ... @@ -160,17 +160,24 @@ function echoSection($title, $section) {
160 160 echo '<div id="emprunts" style="margin-bottom: 20px;">';
161 161 */
162 162  
163   - echo $this->Form->control('envoi_mail', [
164   - 'label' => 'Activer l\'envoi des mails général'
165   - ]);
166 163 echo $this->Form->control('sender_mail', [
167   - 'label' => 'Attribut "sender" (mail)'
  164 + 'label' => "Attribut 'sender' (expéditeur)"
  165 + ]);
  166 + echo $this->Form->control('envoi_mail', [
  167 + 'label' => "Activer l'envoi 'général' des mails"
168 168 ]);
169 169 echo $this->Form->control('envoi_mail_guests', [
170   - 'label' => 'Activer l\'envoi des mails pour la liste spécifique ci-dessous'
  170 + 'label' => "Activer l'envoi 'spécifique' des mails pour la liste ci-dessous"
171 171 ]);
  172 + // (EP202009) non mais, faudrait arrêter d'être fainénant aussi...
  173 + for ($i=1 ; $i<=10; $i++) {
  174 + echo $this->Form->control('emailGuest'.$i, [
  175 + 'label' => "Destinataire $i"
  176 + ]);
  177 + }
  178 + /*
172 179 echo $this->Form->control('emailGuest1', [
173   - 'label' => 'Mail guest 1'
  180 + 'label' => 'Destinataire 1'
174 181 ]);
175 182 echo $this->Form->control('emailGuest2', [
176 183 'label' => 'Mail guest 2'
... ... @@ -199,6 +206,7 @@ function echoSection($title, $section) {
199 206 echo $this->Form->control('emailGuest10', [
200 207 'label' => 'Mail guest 10'
201 208 ]);
  209 + */
202 210 echo '</div>';
203 211  
204 212  
... ...
src/Template/Configurations/view.ctp
... ... @@ -103,9 +103,15 @@ function echoSection($title, $section) {
103 103 echo '<table>';
104 104 echo '<tr><th style="width: 250px;"></th><th></th></tr>';
105 105 */
106   - $displayElement(__('Activer l\'envoi des mails général'), h($configurationObj->envoi_mail)?'Oui':'Non');
107   - $displayElement(__('Attribut "sender" (mail)'), h($configurationObj->sender_mail));
108   - $displayElement(__('Activer l\'envoi des mails pour la liste spécifique ci-dessous'), h($configurationObj->envoi_mail_guests)?'Oui':'Non');
  106 + $displayElement(__("Attribut 'sender' (expéditeur)"), h($configurationObj->sender_mail));
  107 + $displayElement(__("Activer l'envoi 'général' des mails"), h($configurationObj->envoi_mail)?'Oui':'Non');
  108 + $displayElement(__("Activer l'envoi 'spécifique' des mails pour la liste ci-dessous"), h($configurationObj->envoi_mail_guests)?'Oui':'Non');
  109 + // (EP202009) non mais, faudrait arrêter d'être fainénant aussi...
  110 + for ($i=1 ; $i<=10; $i++) {
  111 + $dest = "emailGuest$i";
  112 + $displayElement( __("Destinataire $i"), h($configurationObj->$dest) );
  113 + }
  114 + /*
109 115 $displayElement(__('Mail guest 1'), h($configurationObj->emailGuest1));
110 116 $displayElement(__('Mail guest 2'), h($configurationObj->emailGuest2));
111 117 $displayElement(__('Mail guest 3'), h($configurationObj->emailGuest3));
... ... @@ -116,6 +122,7 @@ function echoSection($title, $section) {
116 122 $displayElement(__('Mail guest 8'), h($configurationObj->emailGuest8));
117 123 $displayElement(__('Mail guest 9'), h($configurationObj->emailGuest9));
118 124 $displayElement(__('Mail guest 10'), h($configurationObj->emailGuest10));
  125 + */
119 126 echo '</table>';
120 127 echo '</div>';
121 128  
... ...
tests/Fixture/ConfigurationsFixture.php
... ... @@ -122,7 +122,7 @@ class ConfigurationsFixture extends TestFixture
122 122  
123 123 //'envoi_mail_management_dev' => 1,
124 124 'envoi_mail' => 1,
125   - //'envoi_mail_guests' => 0,
  125 + 'envoi_mail_guests' => 0,
126 126 'sender_mail' => 'ezarear@localhost.com',
127 127 'emailGuest1' => 'Lorem ipsum dolor sit amet',
128 128 'emailGuest2' => 'Lorem ipsum dolor sit amet',
... ...