diff --git a/README-LABINVENT.md b/README-LABINVENT.md index 40ce1e7..f3d099f 100755 --- a/README-LABINVENT.md +++ b/README-LABINVENT.md @@ -47,9 +47,9 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 11/09/2017 -Version: 2.8.0.3 - - Tests paramétrés (pour exécuter les tests sur différents roles sans redondance) +Date: 15/09/2017 +Version: 2.8.0.4 + - Bugfix Emails : il manquait l'id du materiel concerné par l'action, et c'est maintenant mieux organisé Version majeure en cours (2.8): https://projects.irap.omp.eu/versions/162 diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 4e0ed7a..2c2500a 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -22,6 +22,10 @@ use Cake\Mailer\Email; use Cake\Core\Configure; use Cake\I18n\Time; use Cake\I18n\Date; +use App\Model\Entity\Materiel; +use App\Model\Entity\Document; +use App\Model\Entity\Suivi; +use App\Model\Entity\Emprunt; /** * Application Controller @@ -615,14 +619,14 @@ class AppController extends Controller { /** * Envoi un mail avec un sujet, contenant un message à destination d'une liste de mails, selon l'action effectuée. * - * @param $obj : - * Matériel concerné + * @param $entity : + * L'entité concernée (principalement un Matériel, mais ça peut aussi etre un Document) * @param $subject : * Sujet du message à envoyer. Si $subject n'est pas renseigné, un sujet par défaut sera généré. * @param $msg : * Message à envoyer. Si $msg n'est pas renseigné, un message par défaut sera généré. */ - public function sendEmail($obj, $subject = null, $msg = null) { + public function sendEmail($entity, $subject = null, $msg = null) { /* * $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) : * nom $_SESSION['Auth']['User']['sn'][0] @@ -634,92 +638,102 @@ class AppController extends Controller { $configuration = $this->confLabinvent; $action = $this->request->getAttribute('params')['action']; // add or edit or delete or ... - // Si les deux cases "Activer l'envoi des mails.." sont décochée, on se fatigue pas à exécuter la fonction - if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) - return null; + // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction + if (!$configuration->envoi_mail && !$configuration->envoi_mail_guests) return null; - $materiel = $obj; $mailList = array(); // On détermine le message et le sujet du mail en fonction de l'action effectuee $acteur = $_SESSION['Auth']['User']['givenname'][0] . ' ' . $_SESSION['Auth']['User']['sn'][0]; - if ($materiel != null) { + //if ($entity != null) { + if ($entity instanceof Materiel) { + $materiel = $entity; $nom_materiel = $materiel->designation; if ($subject == null && $msg == null) { + $msgMore = ''; Switch ($action) { case 'add' : $subject = "Ajout d'un matériel"; - $msg = "$acteur a ajouté le matériel \"$nom_materiel\"."; + $msg = "$acteur a ajouté le matériel \"$nom_materiel\""; break; case 'edit' : $subject = "Modification d'un matériel"; - $msg = "$acteur a modifié le matériel \"$nom_materiel\"."; + $msg = "$acteur a modifié le matériel \"$nom_materiel\""; break; case 'delete' : $subject = "Suppression d'un matériel"; - $msg = "$acteur a supprimé le matériel \"$nom_materiel\"."; - - if ($materiel-> sur_categorie_id != "") $msg .= "\n\nDomaine : ". $materiel->description; - if ($materiel-> categorie_id != "") $msg .= "\n\nCatégorie : ". $materiel->description; - if ($materiel-> sous_categorie_id != "") $msg .= "\n\nSous-catégorie : ". $materiel->description; - if ($materiel->description != "") $msg .= "\n\nDescription :\n\n". $materiel->description; - + $msg = "$acteur a supprimé le matériel \"$nom_materiel\""; + //@todo: mettre le nom des domaine, categ, et sous-categ, et non pas l'id + if ($materiel->sur_categorie_id != "") $msgMore .= "\n\nDomaine : ". $materiel->sur_categorie_id; + if ($materiel->categorie_id != "") $msgMore .= "\n\nCatégorie : ". $materiel->categorie_id; + if ($materiel->sous_categorie_id != "") $msgMore .= "\n\nSous-catégorie : ". $materiel->sous_categorie_id; + if ($materiel->description != "") $msgMore .= "\n\nDescription :\n". $materiel->description; break; case 'statusCreated' : $subject = "Dé-validation d'un matériel"; - $msg = "$acteur a dé-validé le matériel \"$nom_materiel\"."; + $msg = "$acteur a dé-validé le matériel \"$nom_materiel\""; break; case 'statusValidated' : $subject = "Validation d'un matériel"; - $msg = "$acteur a validé le matériel \"$nom_materiel\"."; + $msg = "$acteur a validé le matériel \"$nom_materiel\""; break; case 'statusToBeArchived' : $subject = "Demande d'archivage d'un matériel"; - $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\"."; + $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\""; break; case 'statusArchived' : $subject = "Archivage d'un matériel"; - $msg = "$acteur a archivé le matériel \"$nom_materiel\"."; + $msg = "$acteur a archivé le matériel \"$nom_materiel\""; break; case 'setLabelIsPlaced' : $subject = "Etiquette posée sur un matériel"; - $msg = "Etiquette posée sur le matériel \"$nom_materiel\"."; + $msg = "Etiquette posée sur le matériel \"$nom_materiel\""; break; case 'printLabelRuban' : $subject = "Etiquette imprimée"; - $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée."; + $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée"; $mailList[0] = $materiel->email_responsable; default : $subject = "Action \"$action\" sur un matériel"; - $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\"."; + $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\""; break; - } - } - - // Et maintenant on construit la liste de mails ... + } // end switch + // (EP) Ajout de l'ID du materiel !!! + $msg .= " (id=".$materiel->id.")."; + // Only for "delete" action (for the moment...) + if ($msgMore) $msg .= $msgMore; + //$msg .= "\n\n"; + } // subject is null + + // Et maintenant on construit la liste de mails... // Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'): if ($configuration->envoi_mail && $action != 'printLabelRuban') { - // mail owner + // owner's mail (utilisateur du matériel) $mailList[0] = $materiel->email_responsable; - // mail resp - $mailsRespMetier = null; + // resp's mail $mailsRespMetier = null; + $mailRespThematique = null; - if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) + if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) { // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe $mailsRespMetier = TableRegistry::get('Users')->find()->select('email') ->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->groupes_metier_id]) ->toArray(); - - if ($mailsRespMetier != null && $mailsRespMetier != null) { - $mailResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); + $mailRespThematique = TableRegistry::get('Users')->find()->select('email') + ->where(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->groupes_thematique_id]) + ->toArray(); + } + + if ($mailsRespMetier != null || $mailRespThematique != null) { + $mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); for ($i = 0; $i < sizeof($mailsResp); $i ++) { - $mailList[sizeof($mailList)] = $mailsResp[$i]['email']; + $mailList[] = $mailsResp[$i]['email']; + //$mailList[sizeof($mailList)] = $mailsResp[$i]['email']; } } - + // mail admin de reference (ici appele gestionnaire) -> Partie administration // Cela a été mis en commentaire car de toute façon l'utilisateur va voir un administratif pour faire valider sa fiche, // Pas la peine de spam l'administration de mails non plus hein ! @@ -735,43 +749,57 @@ class AppController extends Controller { * } */ } - } + } // Materiel + //@todo: ajouter quelques infos dans ces cas : + else if ($entity instanceof Document) { + ; + } + else if ($entity instanceof Suivi) { + ; + } + else if ($entity instanceof Emprunt) { + ; + } + // Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'): + $specificUsers = []; if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') { // mail aux adresses specifiees dans la config for ($i = 0; $i < 11; $i ++) { - if ($configuration['emailGuest' . $i]) - $mailList[sizeof($mailList)] = $configuration['emailGuest' . $i]; - // Le if vérifie que la ligne soit pas null + $specificUser = $configuration['emailGuest' . $i]; + if ($specificUser) + $specificUsers[] = $specificUser; + //$mailList[sizeof($mailList)] = $configuration['emailGuest' . $i]; + $mailList[] = $specificUser; + // Le if vérifie que la ligne soit pas null } } // 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 ! - $List = array_unique($mailList); + $mailList = array_unique($mailList); // ... Pour envoyer les mails aux personnes concernees - foreach ($List as $mail) { + foreach ($mailList as $mail) { // 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 - if ($mail != $_SESSION['Auth']['User']['mail'][0]) { - $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 + if ($mail == $_SESSION['Auth']['User']['mail'][0]) continue; + $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 + // Génération du message "Vous recevez ce message en tant que $role" + // 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. [...]" + if ($specificUsers) + $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.'; + else { $role = TableRegistry::get('Users')->find()->select('role')->where(['email =' => $mail])->first()['role']; - - if ($action != 'statusValidated' && $materiel != null) - $message .= "\nVeuillez vérifier et compléter si besoin la fiche corespondante."; - - // Génération du message "Vous recevez ce message en tant que $role" - // 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. [...]" - if ($role) - $role = 'en tant que ' . $role; - else - $role = 'car vous avez demandé à le recevoir. Pour faire retirer votre mail de la liste, veuillez contacter un SuperAdmin.'; - - $message .= "\n\n" . 'Vous recevez ce message ' . $role; - $this->sendEmailTo("$subject", $message, $mail, $configuration); + // Default role is Utilisateur (for people in LDAP but without priviledge, not in the users table) + if (is_null($role)) $role = 'Utilisateur'; + $role = 'en tant que ' . $role; } + if ($entity != null && !in_array($action, ['delete', 'statusValidated', 'statusCreated'])) + $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche corespondante."; + $message .= "\n\nVous recevez ce message " . $role; + $this->sendEmailTo("$subject", $message, $mail, $configuration); } - return $List; + return $mailList; } // Fonction d'envoi de mails diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 8b18d81..6828def 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -233,7 +233,7 @@ class DocumentsController extends AppController { // Ajout de doc au suivi $id = $document->suivi_id; // $this->sendEmailToManagementWith('[LabInvent] Ajout d\'un document', $userName.' (email = '.$userEmail.') a ajouté un document de type "'.$nomType.'" au suivi "Suivi '.$document->suivi_id.'".'); - $this->sendEmail(null, '[LabInvent] Ajout d\'un document', $userName . ' a ajouté un document de type "' . $nomType . '" au suivi "Suivi ' . $document->suivi_id . '".'); + $this->sendEmail($document, '[LabInvent] Ajout d\'un document', $userName . ' a ajouté un document de type "' . $nomType . '" au suivi "Suivi ' . $document->suivi_id . '".'); return $this->redirect([ 'controller' => 'suivis', 'action' => 'view', @@ -242,7 +242,7 @@ class DocumentsController extends AppController { } else { // Ajout de doc au matériel // $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.').'); - $this->sendEmail(null, '[LabInvent] Ajout d\'un document', $userName . ' a ajouté un document de type "' . $nomType . '" au matériel "' . $materiel->designation . '" (id = ' . $materiel->id . ').'); + $this->sendEmail($document, '[LabInvent] Ajout d\'un document', $userName . ' a ajouté un document de type "' . $nomType . '" au matériel "' . $materiel->designation . '" (id = ' . $materiel->id . ').'); return $this->redirect([ 'controller' => 'materiels', 'action' => 'view', diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 09bcde4..f1ed227 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -649,10 +649,10 @@ class MaterielsController extends AppController { TableRegistry::get('Users')->find('list', ['keyField' => 'id','valueField' => 'nom']) ->where(['role =' => 'Administration']) ->toArray())) { - $gestionnaireID = TableRegistry::get('Users')->find()->where([ - 'nom' => $_SESSION['Auth']['User']['sn'][0] - ])->first()->id; - $materiel->gestionnaire_id = $gestionnaireID; + $gestionnaireID = TableRegistry::get('Users')->find()->where([ + 'nom' => $_SESSION['Auth']['User']['sn'][0] + ])->first()->id; + $materiel->gestionnaire_id = $gestionnaireID; } if ($this->Materiels->save($materiel)) { $this->Flash->success(__('Le matériel a bien été ajouté.')); diff --git a/src/Template/Layout/default.ctp b/src/Template/Layout/default.ctp index ecca4bb..8b06b45 100755 --- a/src/Template/Layout/default.ctp +++ b/src/Template/Layout/default.ctp @@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2'; - VERSION 2.8.0.3 (11/09/2017) + VERSION 2.8.0.4 (15/09/2017)