Commit ae5c963936e61a7e520cb7c80ecd4b2dd24de51e
1 parent
93790936
Exists in
master
and in
1 other branch
Grosse amélioration et rationalisation de la gestion des emails
(étape 1) v4.103.0-3.7.9
Showing
7 changed files
with
341 additions
and
152 deletions
Show diff stats
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', | ... | ... |