loadComponent('Security');` * * @return void */ public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler'); $this->loadComponent('Flash'); $this->loadComponent('LdapAuth', [ 'authorize' => [ 'Controller' ], 'loginRedirect' => [ 'controller' => 'Pages', 'action' => 'home' ], 'logoutRedirect' => [ 'controller' => 'Pages', 'action' => 'home' ] ]); $this->confLabinvent = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first(); } /** * * @param $user Give * authorization in general * @return boolean */ public function isAuthorized($user) { $configuration = $this->confLabinvent; $role = TableRegistry::get('Users')->find() ->where([ 'username' => $user[$configuration->authentificationType_ldap][0] ]) ->first()['role']; $action = $this->request->params['action']; // error_log($action); // Super-Admin peut accéder à chaque action if ($role == 'Super Administrateur') return true; // Pour tout le monde if (in_array($action, [ 'index', 'find', 'view', 'creer', 'add', 'getNextDate', 'getDateGarantie' ])) return true; // Par défaut refuser return false; } function userHasRole($roleDefine) { $configuration = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first(); $role = TableRegistry::get('Users')->find() ->where([ 'username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0] ]) ->first()['role']; $isAuthorized = false; switch ($roleDefine) { case 'Super Administrateur': if (in_array($role, [ 'Super Administrateur' ])) $isAuthorized = true; break; case 'Administration Plus': if (in_array($role, [ 'Administration Plus', 'Super Administrateur' ])) $isAuthorized = true; break; case 'Administration': if (in_array($role, [ 'Administration', 'Administration Plus', 'Super Administrateur' ])) $isAuthorized = true; break; case 'Responsable': if (in_array($role, [ 'Responsable', 'Administration', 'Administration Plus', 'Super Administrateur' ])) $isAuthorized = true; break; case 'Utilisateur': if (in_array($role, [ 'Utilisateur', 'Responsable', 'Administration', 'Administration Plus', 'Super Administrateur' ])) $isAuthorized = true; break; } return $isAuthorized; } /** * * {@inheritdoc} * * @see \Cake\Controller\Controller::beforeFilter() */ public function beforeFilter(Event $event) { // !!! Ne jamais autoriser l'action 'login', sinon cela va créer des problèmes sur le fonctionnement normal de AuthComponent (cf doc) !!! $configuration = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first(); if ($configuration->mode_install) { $this->LdapAuth->allow([ 'display', 'add', 'edit', 'installOff' ]); } else { $this->LdapAuth->allow([ 'display' ]); } $this->LdapAuth->config('authError', "Désolé, vous n'êtes pas autorisé à accéder à cette zone."); } public function afterFilter(Event $event) { if (in_array($this->request->params['action'], [ 'edit', 'add' ])) { $this->request->session()->write("retourForm1", true); } else if ($this->request->params['action'] != 'creer') { $this->request->session()->write("retourForm1", false); } } /** * Before render callback. * * @param \Cake\Event\Event $event * The beforeRender event. * @return void */ public function beforeRender(Event $event) { if (! array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), [ 'application/json', 'application/xml' ])) { $this->set('_serialize', true); } $this->set('username', $this->LdapAuth->user('sn')[0] . ' ' . $this->LdapAuth->user('givenname')[0]); $configuration = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first(); $this->set('configuration', $configuration); $this->request->session()->write("authType", $configuration->authentificationType_ldap); $user = TableRegistry::get('Users')->find() ->where([ 'username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0] ]) ->first(); $role = $user['role']; if ($role == null) $role = 'Utilisateur'; $this->set('role', $role); $this->set('userConnected', $user); $this->set('idGmNa', TableRegistry::get('GroupesMetiers')->find() ->where([ 'nom =' => 'N/A' ]) ->first()['id']); $this->set('idGtNa', TableRegistry::get('GroupesThematiques')->find() ->where([ 'nom =' => 'N/A' ]) ->first()['id']); $displayElement = function ($nom, $valeur, $params = "") { $balise = ($params != "") ? '' : ''; // Ca c'est parce que sinon y'a au moins deux tests qui passent pas, a cause de l'espace dans la balise ... if ($valeur != "") echo '' . $nom . ' ' . $balise . $valeur . ''; }; $this->set('displayElement', $displayElement); } // "le materiel", "le suivi"... protected function getArticle() { return "Le "; } /** * * @param string $subject * @param string $message * @param string[] $to */ // public function sendEmailTo($subject, $message, $to = null) { // $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); // if ($to != null && !$configuration->test) { // for($i = 0; $i < sizeof($to); $i++) { // if (filter_var($to[$i], FILTER_VALIDATE_EMAIL)) { // $email = new Email(); // $etiquetteFrom = explode("@", $configuration->sender_mail); // if($configuration->envoi_mail_management_dev) { // $email->transport('dev') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($to[$i]) // ->subject("[LabInvent] ".$subject) // ->send($message); // } else { // $email->transport('default') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($to[$i]) // ->subject("[LabInvent] ".$subject) // ->send($message); // } // } // } // } // } // /** // * Envoi d'un email à la gestion (et aux devs) pour prévenir qu'un matériel a été créé ou modifié // * (cf howto dans http://book.cakephp.org/2.0/fr/core-utility-libraries/email.html) // * @param string $subject // * @param string $message // */ // public function sendEmailToManagementWith($subject, $message) { // $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); // for($i = 1; $i < 11; $i++) { // $t = 'emailGuest'.$i; // $to = $configuration->$t; // if ($to != null && !$configuration->test) { // if (filter_var($to, FILTER_VALIDATE_EMAIL)) { // $email = new Email(); // $etiquetteFrom = explode("@", $configuration->sender_mail); // if($configuration->envoi_mail_management_dev) { // $email->transport('dev') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($to) // ->subject("[LabInvent] ".$subject) // ->send($message); // } else { // $email->transport('default') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($to) // ->subject("[LabInvent] ".$subject) // ->send($message); // } // } // } // } // } // public function sendEmailToManagement($idObj = null) { // $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); // $userAuth = $this->LdapAuth->user($configuration->authentificationType_ldap)[0]; // $controller = substr($this->request->params['controller'], 0, -1); // materiel // $action = $this->request->params['action']; // add or edit or delete or ... // $userName = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0]; // $userEmail = $this->LdapAuth->user('mail')[0]; // $role = TableRegistry::get('Users')->find()->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]])->first()['role']; // if($role == null) $role = 'Utilisateur'; // $modelName = $this->modelClass; // 'Materiels' // $id = $idObj; // switch ($action) { // case 'add': // $actionFrench = ['Création d\'un ', 'été créé']; // break; // case 'edit': // $actionFrench = ['Modification d\'un ', 'été modifié']; // break; // case 'delete': // $actionFrench = ['Suppression d\'un ', 'été supprimé']; // break; // case 'statusValidated': // $actionFrench = ['Validation d\'un ', 'été validé']; // break; // case 'statusToBeArchived': // $actionFrench = ['Demande Archivage d\'un ', 'été demandé pour archivage']; // break; // case 'statusArchived': // $actionFrench = ['Archivage d\'un ', 'été archivé']; // break; // case 'setLabelIsPlaced': // $actionFrench = ['Etiquette posé sur un ', 'reçu une étiquette']; // break; // default: // $actionFrench = [$action.' d\'un ', 'été '.$action]; // break; // } // $doneBy = $userName." (".$userEmail.", login=".$userAuth.", profil=".$role.")."; // $subject = $actionFrench[0].$controller; // if($id != null) { // $entityName = TableRegistry::get($modelName)->find('all')->where(['id =' => $id])->first(); // if($modelName == 'Materiels') { // $entityName = $entityName['designation']; // } // else if ($modelName == 'Suivis' || $modelName == 'Emprunts') { // $entityName = $entityName['id']; // } // else { // $entityName = $entityName['nom']; // } // } // else { // $entityName = NULL; // } // $message = $this->getArticle().$controller." ".$entityName." (id=".$id.") a ".$actionFrench[1]." par ".$doneBy; // $this->sendEmailToManagementWith($subject, $message); // } // /** // * Envoi d'un email au propriétaire pour prévenir qu'un matériel a été créé // * @param string $subject // * @param string $message // */ // public function sendEmailToCreate($idObj = null) { // $id = $idObj; // $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); // $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $id])->first(); // $createurName = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0]; // $createurEmail = $this->LdapAuth->user('mail')[0]; // $toEmail = $materiel->email_responsable; // $role = TableRegistry::get('Users')->find()->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]])->first()['role']; // if($role == null) $role = 'Utilisateur'; // $subject = 'Ajout d\'un matériel'; // $message = $createurName.' (email = '.$createurEmail.', role = '.$role.') a ajouté le matériel "'.$materiel->designation.'" ('.$materiel->numero_laboratoire.') et vous a nommé propriétaire de ce matériel.'; // if ($toEmail != null && !$configuration->test) { // if (filter_var($toEmail, FILTER_VALIDATE_EMAIL)) { // $email = new Email(); // $etiquetteFrom = explode("@", $configuration->sender_mail); // if($configuration->envoi_mail_management_dev) { // $email->transport('dev') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($toEmail) // ->subject("[LabInvent] ".$subject) // ->send($message); // } else { // $email->transport('default') // ->from([$configuration->sender_mail => $etiquetteFrom[0]]) // ->to($toEmail) // ->subject("[LabInvent] ".$subject) // ->send($message); // } // } // } // } static function isLabinventDebugMode() { return TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first()->mode_debug; } function myDebug($arg, $stop = false) { if ($this->isLabinventDebugMode()) { Configure::write('debug', true); debug($arg); if ($stop) exit(); } } /** * 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é */ public function sendEmail($obj) { /* * $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) : * nom['sn'][0] * prenom['givenname'][0] * mail['mail'][0] * login['xxx'][0] /!\ Ce champ est suceptible de changer de nom, dans les tests ce champ est ['cn'][0] * mdp['userpassword'][0] */ $configuration = $this->confLabinvent; $action = $this->request->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; $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]; $nom_materiel = $materiel->designation; Switch ($action) { case 'add': $subject = "Ajout d'un matériel"; $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"; break; case 'delete': $subject = "Suppression d'un matériel"; $msg = "$acteur a supprimé le matériel $nom_materiel"; break; case 'statusValidated': $subject = "Validation d'un matériel"; $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"; break; case 'statusArchived': $subject = "Archivage d'un matériel"; $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"; break; case 'printLabelRuban': $subject = "Etiquette imprimée"; $msg = "L'étiquette concerant votre matériel $nom_materiel a été imprimée. Veuillez vérifier et compléter si besoin la fiche corespondante."; $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"; break; } // 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 $mailList[0] = $materiel->email_responsable; // mail resp $mailsRespMetier = null; $mailsRespMetier = null; 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)); for ($i = 0; $i < sizeof($mailsResp); $i ++) { $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 ! /* * if ($action != 'statusValidated' && $action != 'statusArchived') { * $mailsAdmin = TableRegistry::get('Users')->find() * ->select('email') * ->where([ * 'role =' => 'Administration' * ]) * ->toArray(); * for ($i = 0; $i < sizeof($mailsAdmin); $i ++) { * $mailList[sizeof($mailList)] = $mailsAdmin[$i]['email']; * } * } */ } // Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'): 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 } } // 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); // ... Pour envoyer les mails aux personnes concernees foreach ($List 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 ($action != 'statusValidated') $message .= " Veuillez vérifier et compléter si besoin la fiche corespondante."; $role = TableRegistry::get('Users')->find() ->select('role') ->where([ 'email =' => $mail ]) ->first()['role']; 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); } } return $List; } // Fonction d'envoi de mails private function sendEmailTo($subject, $msg, $mail, $config) { if ($mail != null && ! $config->test) { if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { $email = new Email(); $etiquetteFrom = explode("@", $config->sender_mail); // if($config->envoi_mail) { // <-- Si la case "Envoi des mails de management en local " est cochée // $email->transport('dev') // ->from([$config->sender_mail => $etiquetteFrom[0]]) // ->to($mail) // ->subject("[LabInvent] ".$subject) // ->send($msg); // } else { // <-- Si la case n'est pas cochée $email->transport('default') ->from([ $config->sender_mail => $etiquetteFrom[0] ]) ->to($mail) ->subject("[LabInvent] " . $subject) ->send($msg); // } } } } }