diff --git a/database/labinvent_2.1_12-05-16.sql b/database/labinvent_2.1_12-05-16.sql index e7b3d71..73d4563 100755 --- a/database/labinvent_2.1_12-05-16.sql +++ b/database/labinvent_2.1_12-05-16.sql @@ -346,7 +346,7 @@ CREATE TABLE IF NOT EXISTS `configurations` ( `hasPrinter` tinyint(1) DEFAULT NULL, `nom_groupe_thematique` varchar(50) DEFAULT 'Groupe thematique', `nom_groupe_metier` varchar(50) DEFAULT 'Groupe metier', - `envoi_mail_management_dev` tinyint(1) NOT NULL DEFAULT 1, + `envoi_mail` tinyint(1) NOT NULL DEFAULT 0, `sender_mail` varchar(500) DEFAULT 'labinvent@irap.omp.eu', `emailGuest1` varchar(45) DEFAULT NULL, `emailGuest2` varchar(45) DEFAULT NULL, @@ -448,44 +448,8 @@ Insert into type_documents(nom) values ('Certificat de conformité'); Insert into type_documents(nom) values ('Manuel d\'utilisation'); -- Insertion par défaut pour la table configuration -Insert into `configurations`( -`nom`, -`mode_install`, -`mode_debug`, -`use_ldap`, -`host_ldap`, -`port_ldap`, -`authentificationType_ldap`, -`baseDn_ldap`, -`filter_ldap`, -`labName`, -`labNameShort`, -`labPresent`, -`labUmr`, -`hasPrinter`, -`envoi_mail_management_dev` -`emailGuest1`, -`emailGuest2`, -`emailGuest3`) -values ( -'default', -'1', -'0', -'0', -'', -'', -'xxx', -'', -'', -'LABONAME', -'LABO', -'du ', -'', -'0', -'0', -'', -'', -''); +Insert into `configurations`(`nom`, `mode_install`, `mode_debug`, `use_ldap`, `host_ldap`, `port_ldap`, `authentificationType_ldap`, `baseDn_ldap`, `filter_ldap`, `labName`, `labNameShort`, `labPresent`, `labUmr`, `hasPrinter`, `emailGuest1`, `emailGuest2`, `emailGuest3`) +values ('default', '1', '0', '0', '', '', 'xxx', '', '', 'LABONAME', 'LABO', 'du ', '', '0', '', '', ''); diff --git a/database/update/db-update-2017-05-18.sh b/database/update/db-update-2017-05-18.sh new file mode 100644 index 0000000..6722181 --- /dev/null +++ b/database/update/db-update-2017-05-18.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Pour Mac OS recent (10.10, Yosemite), la syntaxe du SED est differente +# Il faut donc faire une copie de ce fichier et transformer les instructions sed a l'interieur +# Pour cela, il suffit d'executer ces 2 lignes : +# cp ce_script.sh ce_script_macosx.sh +# sed -e "s/ -i / -i '' /" -i '' ce_script_macosx.sh + +if [ ! -f ../../config/app.php ] ; then +echo "Vous devez executer ce script depuis le dossier database/update/" +exit 1 +fi + + +# Get login, pass, dbname, and hostname +username=$(grep "/\*d\*/'username'" ../../config/app.php | cut -d"'" -f4) +password=$(grep "/\*d\*/'password'" ../../config/app.php | cut -d"'" -f4) +database=$(grep "/\*d\*/'database'" ../../config/app.php | cut -d"'" -f4) +host=$(grep "/\*d\*/'host'" ../../config/app.php | cut -d"'" -f4) + + +cp -p ./script_sql/db-update-2017-05-18.sql ./script_sql/db-update-2017-05-18-build.sql + +# Execute sql update script +sed -e "s/database/$database/" -i ./script_sql/db-update-2017-05-18-build.sql +mysql --user=$username --password=$password -h $host < ./script_sql/db-update-2017-05-18-build.sql + +# Delete cakephp cache +sudo rm ../../tmp/cache/models/* +sudo rm ../../tmp/cache/persistent/* + +sudo chmod -R 777 ../../tmp +sudo chmod -R 777 ../../vendor +sudo chmod -R 777 ../../webroot diff --git a/database/update/script_sql/db-update-2017-05-18.sql b/database/update/script_sql/db-update-2017-05-18.sql new file mode 100644 index 0000000..d248bd0 --- /dev/null +++ b/database/update/script_sql/db-update-2017-05-18.sql @@ -0,0 +1,3 @@ +use database; + +ALTER TABLE `configurations` CHANGE `envoi_mail_management_dev` `envoi_mail` TINYINT( 1 ) NOT NULL DEFAULT '0'; diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 6c189af..6347739 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -31,6 +31,7 @@ use PhpParser\Node\Expr\Include_; */ class AppController extends Controller { + public $confLabinvent; /** * Initialization hook method. @@ -58,6 +59,7 @@ class AppController extends Controller 'action' => 'home', ] ]); + $this->confLabinvent = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); } @@ -70,7 +72,7 @@ class AppController extends Controller */ public function isAuthorized($user) { - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); + $configuration = $this->confLabinvent; $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; $action = $this->request->params['action']; @@ -201,194 +203,194 @@ class AppController extends Controller * @param string $message * @param string[] $to */ - public function sendEmailTo($subject, $message, $to = null) { +// public function sendEmailTo($subject, $message, $to = null) { - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); +// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); - if ($to != null && !$configuration->test) { +// if ($to != null && !$configuration->test) { - for($i = 0; $i < sizeof($to); $i++) { +// for($i = 0; $i < sizeof($to); $i++) { - if (filter_var($to[$i], FILTER_VALIDATE_EMAIL)) { - $email = new Email(); +// if (filter_var($to[$i], FILTER_VALIDATE_EMAIL)) { +// $email = new Email(); - $etiquetteFrom = explode("@", $configuration->sender_mail); +// $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); - } - } +// 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) { +// /** +// * 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(); +// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); - for($i = 1; $i < 11; $i++) { - $t = 'emailGuest'.$i; - $to = $configuration->$t; +// 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(); +// if ($to != null && !$configuration->test) { +// if (filter_var($to, FILTER_VALIDATE_EMAIL)) { +// $email = new Email(); - $etiquetteFrom = explode("@", $configuration->sender_mail); +// $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); - } - } +// 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) { +// public function sendEmailToManagement($idObj = null) { - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); +// $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'; +// $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; +// $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.")."; +// 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; +// $subject = $actionFrench[0].$controller; - if($id != null) { - $entityName = TableRegistry::get($modelName)->find('all')->where(['id =' => $id])->first(); +// 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; - } +// 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; +// $message = $this->getArticle().$controller." ".$entityName." (id=".$id.") a ".$actionFrench[1]." par ".$doneBy; - $this->sendEmailToManagementWith($subject, $message); +// $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) { +// /** +// * 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; +// $id = $idObj; - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); - $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $id])->first(); +// $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; +// $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'; +// $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.'; +// $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(); +// if ($toEmail != null && !$configuration->test) { +// if (filter_var($toEmail, FILTER_VALIDATE_EMAIL)) { +// $email = new Email(); - $etiquetteFrom = explode("@", $configuration->sender_mail); +// $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); - } - } +// 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() { @@ -405,129 +407,161 @@ class AppController extends Controller // Les fonctions suivantes sont en cours de developpement /** * Envoi un mail avec un sujet, contenant un message à destination d'une liste de mails, selon l'action effectuée. - * @param idObj -> ID du matériel concerné - * @param nomObj -> A utiliser uniquement dans le cadre d'un supression de matériel + * + * @param $idObj : ID du matériel concerné + * @param $nomObj : A utiliser uniquement dans le cadre d'une supression de matériel, et mettre idObj à null + * @param $mailOwner : Idem + * @param $groupesMetier : Idem + * @param $groupesThematique : Idem */ -// public function sendEmail($idObj = null, $nomObj = null) { -// /* -// * $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) : -// * nom[sn] -// * prennom[givenname] -// * mail[mail] -// * login[xxx] -// * mdp[userpassword] -// */ + public function sendEmail($idObj, $nomObj = null, $mailOwner = null, $groupesMetier = null, $groupesThematique = null) { + /* + * $_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 = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); + $action = $this->request->params['action']; // add or edit or delete or ... -// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); -// $action = $this->request->params['action']; // add or edit or delete or ... + if(!$configuration->envoi_mail) return null; -// if($idObj != null || $nomObj != null) { + // On détermine le message et le sujet du mail en fonction de l'action effectuee + if($idObj != null || $nomObj != null) { -// if($idObj != null) $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $idObj])->first(); - -// Switch ($action) { -// case 'add': -// $subject = "Ajout d'un matériel"; -// $actionneur = $materiel->nom_createur; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur a ajouté le matériel $nom_materiel"; -// break; -// case 'edit': -// $subject = "Modification d'un matériel"; -// $actionneur= $materiel->nom_modificateur; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur a modifié le matériel $nom_materiel"; -// break; -// case 'delete': -// $subject = "Suppression d'un matériel"; -// $actionneur= $_SESSION['Auth']['User']['givenname'].' '.$_SESSION['Auth']['User']['sn']; -// $nom_materiel = $nomObj; -// $msg = "$actionneur a supprimé le matériel $nom_materiel"; -// break; -// case 'statusValidated': -// $subject = "Validation d'un matériel"; -// $actionneur= $_SESSION['Auth']['User']['givenname'].' '.$_SESSION['Auth']['User']['sn']; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur a validé le matériel $nom_materiel"; -// break; -// case 'statusToBeArchived': -// $subject = "Demande d'archivage d'un matériel"; -// $actionneur= $_SESSION['Auth']['User']['givenname'].' '.$_SESSION['Auth']['User']['sn']; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur a demandé l'archivage du matériel $nom_materiel"; -// break; -// case 'statusArchived': -// $subject = "Archivage d'un matériel"; -// $actionneur= $_SESSION['Auth']['User']['givenname'].' '.$_SESSION['Auth']['User']['sn']; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur 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; -// default: -// $subject = "Action \"$action\" sur un matériel"; -// $actionneur= $_SESSION['Auth']['User']['givenname'].' '.$_SESSION['Auth']['User']['sn']; -// $nom_materiel = $materiel->designation; -// $msg = "$actionneur a effectué l'action \"$action\" sur le matériel $nom_materiel"; -// break; -// } + if($idObj != null) $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $idObj])->first(); + $actionneur= $_SESSION['Auth']['User']['givenname'][0].' '.$_SESSION['Auth']['User']['sn'][0]; + Switch ($action) { + case 'add': + $subject = "Ajout d'un matériel"; + $actionneur = $materiel->nom_createur; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a ajouté le matériel $nom_materiel"; + break; + case 'edit': + $subject = "Modification d'un matériel"; + $actionneur= $materiel->nom_modificateur; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a modifié le matériel $nom_materiel"; + break; + case 'delete': + $subject = "Suppression d'un matériel"; + $nom_materiel = $nomObj; + $msg = "$actionneur a supprimé le matériel $nom_materiel"; + break; + case 'statusValidated': + $subject = "Validation d'un matériel"; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a validé le matériel $nom_materiel"; + break; + case 'statusToBeArchived': + $subject = "Demande d'archivage d'un matériel"; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a demandé l'archivage du matériel $nom_materiel"; + break; + case 'statusArchived': + $subject = "Archivage d'un matériel"; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a archivé le matériel $nom_materiel"; + break; + case 'setLabelIsPlaced': + $subject = "Etiquette posée sur un matériel"; + $nom_materiel = $materiel->designation; + $msg = "Etiquette posée sur le matériel $nom_materiel"; + break; + default: + $subject = "Action \"$action\" sur un matériel"; + $nom_materiel = $materiel->designation; + $msg = "$actionneur a effectué l'action \"$action\" sur le matériel $nom_materiel"; + break; + } + + // Et maintenant on construit la liste de mails ... + $mailList = array(); + + //mail owner + if($idObj != null) $mailList[0] = $materiel->email_responsable; + else $mailList[0] = $mailOwner; -// $mailList = array(); + //mail resp + $mailsRespMetier = null; + $mailsRespMetier = null; -// //Envoi mail responsable -// $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->groupes_metier_id])->orWhere(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->groupes_thematique_id])->toArray(); -// for($i = 0; $i < sizeof($mailsResp); $i++) { -// $mailList[$i] = $mailsResp[$i]['email']; -// } + if ($idObj != null){ + if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) $mailsRespMetier = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->groupes_metier_id])->toArray(); + if ($materiel->groupes_thematique_id != null && $materiel->groupes_thematique_id != 1) $mailRespThematique = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->groupes_thematique_id])->toArray(); + } else { + if ($groupesMetier != null) $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $groupesMetier])->toArray(); + if ($groupesThematique != null) $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupe_thematique_id =' => $groupesThematique])->toArray(); + } + // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe + + 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']; + } + } -// //Envoi mail administratif -// $mailsAdmin = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration'])->toArray(); -// $size = sizeof($mailList); -// $sizeMax = sizeof($mailList) + sizeof($mailsAdmin); -// $taille = "$size | $sizeMax"; -// for($i = $size; $i < $sizeMax; $i++) { -// $mailList[$i] = $mailsAdmin[$i]['email']; -// } + //mail admin de reference (ici appele gestionnaire) + 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']; + } + } -// // envoi de mail aux adresses spécifiés dans la config -// for($i = 0; $i < 11; $i++) { -// $mailList[$i + sizeof($mailList) + sizeof($mailsAdmin)] = 'emailGuest'.$i; -// } - -// $j = 0; -// foreach($mailList as $mail) { -// $j += 1; -// $this->sendEmailTo($subject, $msg, $mail, $configuration); -// } -// } -// } + //de 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 besion de le spam non plus hein + if ($mail != $_SESSION['Auth']['User']['mail'][0]) { + $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 =$msg."\n\n".'Vous recevez ce message '.$role; + $this->sendEmailTo("$subject", $message, $mail, $configuration); + } + } + } + return $List; + } -// private function sendEmailTo($subject, $msg, $mail, $config) { + // 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(); + if ($mail != null && !$config->test) { + if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { + $email = new Email(); -// $etiquetteFrom = explode("@", $config->sender_mail); + $etiquetteFrom = explode("@", $config->sender_mail); -// if($config->envoi_mail_management_dev) { // <-- Si la case est cochée +// 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); + $email->transport('default') + ->from([$config->sender_mail => $etiquetteFrom[0]]) + ->to($mail) + ->subject("[LabInvent] ".$subject) + ->send($msg); // } -// } + } -// } -// } - -} + } + } +} \ No newline at end of file diff --git a/src/Controller/ConfigurationsController.php b/src/Controller/ConfigurationsController.php index 01e0f62..911e4e8 100644 --- a/src/Controller/ConfigurationsController.php +++ b/src/Controller/ConfigurationsController.php @@ -3,6 +3,7 @@ namespace App\Controller; use App\Controller\AppController; use Cake\ORM\TableRegistry; +use Migrations\Table; /** * Configurations Controller @@ -79,14 +80,15 @@ class ConfigurationsController extends AppController if ($this->request->is(['patch', 'post', 'put'])) { $configurationObj = $this->Configurations->patchEntity($configurationObj, $this->request->data); if ($this->Configurations->save($configurationObj)) { - $this->Flash->success(__('La configuration a bien été sauvegardé.')); + $this->Flash->success(__('La configuration a bien été sauvegardée.')); + $this->confLabinvent = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); if($configurationObj->get('mode_install')) { return $this->redirect(['controller' => 'pages', 'action' => 'home']); } else { return $this->redirect(['action' => 'view', $id]); } } else { - $this->Flash->error(__('La configuration n\'a pas pu être sauvegardé.')); + $this->Flash->error(__('La configuration n\'a pas pu être sauvegardée.')); } } diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index e80b981..474da96 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -171,7 +171,7 @@ class MaterielsController extends AppController * @return \Cake\Network\Response|null */ public function index() - { + { // Remplacement de $this->passedArgs[0] (deprecated) // Par $this->request->params['pass'][0] $condition = ''; @@ -278,51 +278,51 @@ class MaterielsController extends AppController * * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise. */ - public function add() { - + public function add() { + $materiel = $this->Materiels->newEntity(); if ($this->request->is('post')) { $materiel = $this->Materiels->patchEntity($materiel, $this->request->data); if ($this->Materiels->save($materiel)) { $this->Flash->success(__('Le matériel a bien été ajouté.')); - $this->sendEmailToManagement($materiel->id); +// $this->sendEmailToManagement($materiel->id); - if($materiel->nom_createur != $materiel->nom_responsable) { - $this->sendEmailToCreate($materiel->id); - } +// if($materiel->nom_createur != $materiel->nom_responsable) { +// $this->sendEmailToCreate($materiel->id); +// } - $message = $materiel->get('nom_createur').' à ajouté le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.')'; - $subject = 'Ajout de matériel'; - $listMails = []; +// $message = $materiel->get('nom_createur').' à ajouté le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.')'; +// $subject = 'Ajout de matériel'; +// $listMails = []; - //Envoi mail responsable - $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->get('groupes_metier_id')])->orWhere(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->get('groupes_thematique_id')])->toArray(); - $mails = []; - for($i = 0; $i < sizeof($mailsResp); $i++) { - $mails[$i] = $mailsResp[$i]['email']; - } - $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); +// //Envoi mail responsable +// $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->get('groupes_metier_id')])->orWhere(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->get('groupes_thematique_id')])->toArray(); +// $mails = []; +// for($i = 0; $i < sizeof($mailsResp); $i++) { +// $mails[$i] = $mailsResp[$i]['email']; +// } +// $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); - //Envoi mail administratif - //$mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration Plus'])->orWhere(['role =' => 'Administration'])->toArray(); - $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration Plus'])->toArray(); - $mails = []; - for($i = 0; $i < sizeof($mailsResp); $i++) { - $mails[$i] = $mailsResp[$i]['email']; - } +// //Envoi mail administratif +// //$mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration Plus'])->orWhere(['role =' => 'Administration'])->toArray(); +// $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration Plus'])->toArray(); +// $mails = []; +// for($i = 0; $i < sizeof($mailsResp); $i++) { +// $mails[$i] = $mailsResp[$i]['email']; +// } - // Rajout condition d'envoi de mail ou pas - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); +// // Rajout condition d'envoi de mail ou pas +// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); - if(!$configuration['envoi_mail_management_dev']){ // Si false, on envoie les mails, sinon on les envoie pas - $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); - } - -// $this->sendEmail($materiel->id); +// if(!$configuration['envoi_mail_management_dev']){ // Si false, on envoie les mails, sinon on les envoie pas +// $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); +// } + + $this->sendEmail($materiel->id); - return $this->redirect(['action' => 'view', $materiel->id]); +// return $this->redirect(['action' => 'view', $materiel->id]); } else { $this->Flash->error(__('Le matériel n\'a pas pu être ajouté.')); } @@ -344,6 +344,7 @@ class MaterielsController extends AppController $utilisateurs[$users[$i]] = $users[$i]; } + // Ne pas commenter la ligne suivante, on en a besoin dans add.cpt $mail_responsable = TableRegistry::get('Users')->find()->select('email')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['email']; if(isset($this->request->params['pass'][0])) { @@ -372,11 +373,12 @@ class MaterielsController extends AppController $materiel = $this->Materiels->patchEntity($materiel, $this->request->data); if ($this->Materiels->save($materiel)) { $this->Flash->success(__('Le matériel a bien été édité.')); - $this->sendEmailToManagement($id); - if($materiel->nom_modificateur != $materiel->nom_responsable) { - $message = $materiel->get('nom_modificateur').' a édité le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.')'; - $this->sendEmailTo('Modification d\'un matériel', $message, [$materiel->get('email_responsable')]); - } +// $this->sendEmailToManagement($id); +// if($materiel->nom_modificateur != $materiel->nom_responsable) { +// $message = $materiel->get('nom_modificateur').' a édité le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.')'; +// $this->sendEmailTo('Modification d\'un matériel', $message, [$materiel->get('email_responsable')]); +// } + $this->sendEmail($id); return $this->redirect(['action' => 'view', $id]); } else { $this->Flash->error(__('Le matériel n\'a pas pu être édité.')); @@ -491,9 +493,16 @@ class MaterielsController extends AppController { //$this->request->allowMethod(['post', 'delete']); $materiel = $this->Materiels->get($id); + // On récupère les infos dont on a besoin pour l'envoi de mails AVANT la supression, on s'appelle pas Chuck Norris + $nom = $materiel->designation; + $grpMetier = $materiel->groupes_metier_id; + $mailOwner = $materiel->email_responsable; + $grpThematique = $materiel->groupes_thematique_id; + if ($this->Materiels->delete($materiel)) { $this->Flash->success(__('Le matériel a bien été supprimé.')); - $this->sendEmailToManagement($id); +// $this->sendEmailToManagement($id); + $this->sendEmail(null, $nom, $mailOwner, $grpMetier, $grpThematique); } else { $this->Flash->error(__('Le matériel n\'a pas pu être supprimé.')); } @@ -521,13 +530,18 @@ class MaterielsController extends AppController $this->Flash->error('Pour valider un matériel, les champs suivants ne doivent pas être vide : Nom propriétaire, Fournisseur, Numéro de commande, Organisme, prix et date de reception'); return $this->redirect(['action' => 'edit', $id]); } - $message = 'Le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.') a été validé.'; - $this->sendEmailTo('Validation d\'un matériel', $message, [$materiel->get('email_responsable')]); + $role_session = TableRegistry::get('Users')->find()->select('id')->where(['email' => $_SESSION['Auth']['User']['mail'][0], 'role' => 'Administration'])->first(); + if ($role_session) { + $nom_gest = $_SESSION['Auth']['User']['givenname'][0].' '.$_SESSION['Auth']['User']['sn'][0]; + $materiel->set('nom_gestionnaire', $nom_gest ); + } +// $message = 'Le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.') a été validé.'; +// $this->sendEmailTo('Validation d\'un matériel', $message, [$materiel->get('email_responsable')]); } if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) { $this->Flash->success(__($message)); - $this->sendEmailToManagement($id); +// $this->sendEmailToManagement($id); } else { $this->Flash->error(__('Le statut n\'a pas pu être édité.')); @@ -545,6 +559,7 @@ class MaterielsController extends AppController */ public function statusValidated($id = null, $from = 'index') { $this->statusSetTo('VALIDATED', 'Le matériel a bien été validé', $id, $from); + $this->sendEmail($id); } /** @@ -555,6 +570,7 @@ class MaterielsController extends AppController */ public function statusToBeArchived($id = null, $from = 'index') { $this->statusSetTo('TOBEARCHIVED', 'La sortie d\'inventaire a bien été demandée', $id, $from); + $this->sendEmail($id); } /** @@ -565,6 +581,7 @@ class MaterielsController extends AppController */ public function statusArchived($id = null, $from = 'index') { $this->statusSetTo('ARCHIVED', 'Le matériel a bien été sorti de l\'inventaire', $id, $from); + $this->sendEmail($id); } /** @@ -1042,14 +1059,15 @@ class MaterielsController extends AppController $materiel = $this->Materiels->get($id)->set('etiquette', $printed); if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) { - $this->Flash->success(__('L\'étiquette a bien été éditer.')); + $this->Flash->success(__('L\'étiquette a bien été éditée.')); // Envoi email seulement si etiquette posée if ($printed) { // $this->sendEmailToManagement($id); + $this->sendEmail($id); } } else { - $this->Flash->error(__('L\'étiquette n\'a pas pu être édité.')); + $this->Flash->error(__('L\'étiquette n\'a pas pu être éditée.')); } return $this->redirect($this->referer()); diff --git a/src/Template/Configurations/edit.ctp b/src/Template/Configurations/edit.ctp index 630f85d..ef999b1 100644 --- a/src/Template/Configurations/edit.ctp +++ b/src/Template/Configurations/edit.ctp @@ -52,7 +52,7 @@ echo 'Emails'; echo ''; echo '
'; - echo $this->Form->input('envoi_mail_management_dev', ['label' => 'Ne pas envoyer les mails de management']); + echo $this->Form->input('envoi_mail', ['label' => 'Activer l\'envoi des mails']); echo $this->Form->input('sender_mail', ['label' => 'Attribut "sender" (mail)']); echo $this->Form->input('emailGuest1', ['label' => 'Mail guest 1']); echo $this->Form->input('emailGuest2', ['label' => 'Mail guest 2']); diff --git a/src/Template/Configurations/view.ctp b/src/Template/Configurations/view.ctp index 688af6b..8719479 100644 --- a/src/Template/Configurations/view.ctp +++ b/src/Template/Configurations/view.ctp @@ -32,7 +32,7 @@ }else { $ldap="Non"; } - if(h($configurationObj->envoi_mail_management_dev) == 1) { + if(h($configurationObj->envoi_mail) == 0) { $local="Non"; }else { $local="Oui"; @@ -102,7 +102,7 @@ echo '
'; echo ''; echo ''; - $displayElement(__('Envoi des mails de management en local'), $local); + $displayElement(__('Activer l\'envoi des mails'), $local); $displayElement(__('Attribut "sender" (mail)'), h($configurationObj->sender_mail)); $displayElement(__('Mail guest 1'), h($configurationObj->emailGuest1)); $displayElement(__('Mail guest 2'), h($configurationObj->emailGuest2)); diff --git a/src/Template/Layout/default.ctp b/src/Template/Layout/default.ctp index f692485..9b2725b 100755 --- a/src/Template/Layout/default.ctp +++ b/src/Template/Layout/default.ctp @@ -33,6 +33,9 @@ $cakeDescription = 'Labinvent 2'; fetch('meta')?> fetch('css')?> fetch('script')?> + @@ -95,6 +98,8 @@ $cakeDescription = 'Labinvent 2';
VERSION 2.6.2 (12/05/2017) +
+ Documentation utilisateurs | Wiki installation
diff --git a/src/Template/Materiels/add.ctp b/src/Template/Materiels/add.ctp index b1c7eff..3484a27 100755 --- a/src/Template/Materiels/add.ctp +++ b/src/Template/Materiels/add.ctp @@ -137,11 +137,14 @@ else { // Modif BD : // ALTER TABLE `materiels` ADD `nom_gestionnaire` VARCHAR( 45 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `email_responsable` ; + // Condition pour vérifier que se soit un admin qui est connecté : (!is_null($res)) ? + $res = TableRegistry::get('Users')->find()->where(['username' => $username, 'role' => 'Administration'])->first(); + $administrateurs = TableRegistry::get('Users')->find('list', [ 'keyField' => 'nom', 'valueField' => 'nom'])->where(['role =' => 'Administration'])->toArray(); echo $this->Form->input('nom_gestionnaire', [ - 'label' => 'Nom du gestionnaire de référence du matériel', - 'empty' => 'Choisir un utilisateur', - 'default' => $username, - 'options' => TableRegistry::get('Users')->find('list', [ 'keyField' => 'nom', 'valueField' => 'nom'])->where(['role =' => 'Administration']) + 'label' => 'Nom du gestionnaire de référence du matériel', + 'empty' => 'Choisir un gestionnaire', + 'default' => $_SESSION['Auth']['User']['sn'][0], + 'options' => $administrateurs ]); echo $this->Form->input('fournisseur', ['label' => 'Fournisseur', 'default' => $Fournisseur]); @@ -214,7 +217,7 @@ $(document).ready(function () { updateSelectOptionsFromAnother("#categorie-id", "#sur-categorie-id", "Categories/getAll", "Choisir une catégorie"); else updateSelectOptionsFromAnother("#categorie-id", "#sur-categorie-id", "Categories/getBySurCategorie", "Choisir une catégorie"); - emptySelectOptions("#sous-categorie-id","Choisir une sous-catégorie"); + emptySelectOptions("#sous-categorie-id","Choisir une sous-catégorie"); return false; }); }); diff --git a/src/Template/Materiels/edit.ctp b/src/Template/Materiels/edit.ctp index 17d4f8c..89eb6aa 100755 --- a/src/Template/Materiels/edit.ctp +++ b/src/Template/Materiels/edit.ctp @@ -226,18 +226,15 @@ if ($IS_VALIDATED) 'readonly' => true, 'default' => $mail_responsable ]); - + $res = TableRegistry::get('Users')->find()->where(['username' => $username, 'role' => 'Administration'])->first(); - $administrateurs = TableRegistry::get('Users')->find('list', [ 'keyField' => 'nom', 'valueField' => 'nom'])->where(['role =' => 'Administration']); - // Condition pour vérifier que se soit un admin qui est connecté : (!is_null($res)) ? - echo $this->Form->input('nom_gestionnaire', [ - 'label' => 'Nom du gestionnaire de référence du matériel', - 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields), - 'empty' => 'Choisir un gestionnaire', + $administrateurs = TableRegistry::get('Users')->find('list', [ 'keyField' => 'nom', 'valueField' => 'nom'])->where(['role =' => 'Administration'])->toArray(); + echo $this->Form->input('nom_gestionnaire', [ + 'label' => 'Nom du gestionnaire de référence du matériel', + 'empty' => 'Choisir un gestionnaire', + 'default' => $_SESSION['Auth']['User']['sn'][0], 'options' => $administrateurs ]); - - echo $this->Form->input('fournisseur', [ 'label' => 'Fournisseur', @@ -324,7 +321,14 @@ if ($IS_VALIDATED) ?> \ No newline at end of file diff --git a/src/Template/Pages/acls.ctp b/src/Template/Pages/acls.ctp index 34d8526..05fb5dc 100755 --- a/src/Template/Pages/acls.ctp +++ b/src/Template/Pages/acls.ctp @@ -140,7 +140,7 @@

ACL (Access Control List)

(Etienne Pallier – 24/06/2016)

 

-

 

+

Cette page n'est plus à jour, se référer à ce document

 

I – Cycle de vie du statut du matériel

 

diff --git a/src/Template/Pages/home_app.ctp b/src/Template/Pages/home_app.ctp index 989e7a4..2aacca7 100755 --- a/src/Template/Pages/home_app.ctp +++ b/src/Template/Pages/home_app.ctp @@ -12,7 +12,7 @@ echo ''; echo ''; - echo ''; echo '
'.$this->Html->link('Voir mes matériels', [ + echo '
'.$this->Html->link('Voir les matériels à mon nom', [ 'controller' => 'materiels', 'action' => 'index', 'MY' => $username]).'
'; @@ -20,9 +20,9 @@ if (in_array($role, ['Administration', 'Administration Plus'])) { echo ''; echo ''; - echo ''; - echo ''; echo '
'.$this->Html->link('Voir les matériels à valider', [ + echo '
'.$this->Html->link('Voir les matériels à valider dont je suis gestionnaire', [ 'controller' => 'materiels', 'action' => 'index', 'CREATED']).'
'.$this->Html->link('Voir les matériels à sortir de l\'inventaire', [ + echo '
'.$this->Html->link('Voir les matériels à sortir de l\'inventaire dont je suis gestionnaire', [ 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).'
'; } @@ -33,7 +33,7 @@ echo ''; echo ' '.$this->Html->link('Voir les matériels dont je suis responsable', [ 'controller' => 'materiels', 'action' => 'index', 'GM' => $userConnected->groupes_metier_id, 'GT' => $userConnected->groupe_thematique_id]).' '; - echo ' '.$this->Html->link('Voir les matériels à valider dont je suis responsable', [ + echo ' '.$this->Html->link('Voir les matériels à valider dont je suis responsable', [ 'controller' => 'materiels', 'action' => 'index', 'GMV' => $userConnected->groupes_metier_id, 'GTV' => $userConnected->groupe_thematique_id]).' '; echo ' '.$this->Html->link('Voir les suivis des materiels dont je suis responsable', [ 'controller' => 'suivis', 'action' => 'index', 'GM' => $userConnected->groupes_metier_id, 'GT' => $userConnected->groupe_thematique_id]).' '; -- libgit2 0.21.2