From 82721df27026b83a65c624882c23aaaa3fe31ab7 Mon Sep 17 00:00:00 2001 From: Thibaud Ajas Date: Fri, 12 May 2017 16:00:19 +0200 Subject: [PATCH] Modif des mails gardés en commentaires, pour l'instant ça fonctionne. La page /pages/acls respecte désormais la charte graphique du site. L'ajout d'un gestionnaire de référence à l'ajout d'un matériel est désormais obligatoire. --- src/Controller/AppController.php | 538 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ src/Controller/MaterielsController.php | 74 +++++++++++++++++++++++++++++++++++++------------------------------------- src/Model/Table/MaterielsTable.php | 5 +++++ src/Template/Materiels/add.ctp | 17 +++++++++++++++++ src/Template/Materiels/edit.ctp | 16 ++++++++++++++-- src/Template/Materiels/view.ctp | 1 + src/Template/Pages/acls.ctp | 508 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------ src/Template/Pages/home_app.ctp | 43 ++++++++++++++++++++----------------------- src/Template/Pages/infos.ctp | 11 +++++------ src/Template/Pages/printers.ctp | 166 ++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------- src/Template/Pages/tools.ctp | 2 +- 11 files changed, 752 insertions(+), 629 deletions(-) diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index a608134..6c189af 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -19,6 +19,7 @@ use Cake\Event\Event; use Cake\ORM\TableRegistry; use Cake\Mailer\Email; use Cake\Core\Configure; +use PhpParser\Node\Expr\Include_; /** * Application Controller @@ -200,39 +201,39 @@ 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é @@ -240,154 +241,154 @@ class AppController extends Controller * @param string $subject * @param string $message */ -// public function sendEmailToManagementWith($subject, $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) { + 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() { @@ -401,159 +402,132 @@ class AppController extends Controller } } + // Les fonctions suivantes sont en cours de developpement /** - * Envoie un mail avec un sujet, contenant un message à destination d'une liste de mails, selon l'action effectuée. - * @param string $subject -> Sujet du mail - * @param string $msg -> Message à envoyer - * @param array $listMails -> Liste des mails des destinataires - * @param id $idObj -> ID du matériel créé, modifié, supprimé ... + * 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 */ - public function sendEmail($subject, $msg, $listMails, $idObj = null) { - - $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); - - //if(!$configuration['envoi_mail_management_dev']) { - foreach($listMails as $mail){ - $mailInTable = TableRegistry::get('Users')->find()->select('email')->where(['email =' => $mail])->first(); - if ($mailInTable!= null) { // Tous les utilisateurs privilégiés, si le mode LDAP est activé, sinon tout le monde - $roleInTable = TableRegistry::get('Users')->find()->select('role')->where(['email =' => $mail])->first(); - Switch ($roleInTable){ - case 'Super Administrateur': - $this->sendEmailToSuperAdmin($subject, $msg, $mail, $idObj, $configuration); - break; - case 'Administration Plus': - // Role useless, mais il existe dans BD ... - break; - case 'Administration': - $this->sendEmailToManagement($subject, $msg, $mail, $idObj, $configuration); - break; - case 'Responsable': - $this->sendEmailToResponsable($subject, $msg, $mail, $idObj, $configuration); - break; - case 'Utilisateur': - $this->sendEmailToUser($subject, $msg, $mail, $idObj, $configuration); - break; - default : - break; - } - } else { // Si on utilise le LDAP, les seuls utilisateurs qui ne sont pas dans la BD du site sont les utilisateurs normaux - $this->sendEmailToUser($subject, $msg, $mail, $idObj, $configuration); // <-- - } - } - //} +// 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] +// */ - } - - private function sendEmailToResponsable($subject, $msg, $mail, $idObj = null, $config) { - - // Rajouter la vérif sur la colone adéquate de la bd +// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); +// $action = $this->request->params['action']; // add or edit or delete or ... - if ($mail != null && !$config->test && false) { // flase à remplacer - if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { - $email = new Email(); - - $etiquetteFrom = explode("@", $config->sender_mail); - - if($config->envoi_mail_management_dev) { // <-- Si la case 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); - } - } +// if($idObj != null || $nomObj != null) { - } - } - - private function sendEmailToUser($subject, $msg, $mail, $idObj = null, $config) { - - // Rajouter la vérif sur la colone adéquate de la bd - var_dump($mail); - if ($mail != null && !$config->test && true) { // flase à remplacer - if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { - $email = new Email(); - - $etiquetteFrom = explode("@", $config->sender_mail); - - if($config->envoi_mail_management_dev) { - $email->transport('dev') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } else { - $email->transport('default') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } - } +// if($idObj != null) $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $idObj])->first(); - } - } - - private function sendEmailToSuperAdmin($subject, $msg, $mail, $idObj = null, $config) { - - // Rajouter la vérif sur la colone adéquate de la bd - - if ($mail != null && !$config->test && false) { // flase à remplacer - if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { - $email = new Email(); - - $etiquetteFrom = explode("@", $config->sender_mail); - - if($config->envoi_mail_management_dev) { - $email->transport('dev') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } else { - $email->transport('default') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } - } - - } - } +// 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; +// } + +// $mailList = array(); + +// //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']; +// } + +// //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']; +// } + +// // 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); +// } +// } +// } - private function sendEmailToManagement($subject, $msg, $mail, $idObj = null, $config) { - - // Rajouter la vérif sur la colone adéquate de la bd - - if ($mail != null && !$config->test && false) { // flase à remplacer - if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { - $email = new Email(); +// 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); +// $etiquetteFrom = explode("@", $config->sender_mail); - if($config->envoi_mail_management_dev) { - $email->transport('dev') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } else { - $email->transport('default') - ->from([$config->sender_mail => $etiquetteFrom[0]]) - ->to($mail) - ->subject("[LabInvent] ".$subject) - ->send($msg); - } - } +// if($config->envoi_mail_management_dev) { // <-- Si la case 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); +// } +// } - } - } +// } +// } } diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 667ce8e..f872842 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -277,49 +277,49 @@ 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); + } - $msg = $materiel->get('nom_createur').' à ajouté le matériel "'.$materiel->get('designation').'" ('.$materiel->numero_laboratoire.')'; + $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); -// } + 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($subject, $msg, $listMails); +// $this->sendEmail($materiel->id); return $this->redirect(['action' => 'view', $materiel->id]); } else { @@ -371,11 +371,11 @@ 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')]); + } return $this->redirect(['action' => 'view', $id]); } else { $this->Flash->error(__('Le matériel n\'a pas pu être édité.')); @@ -492,7 +492,7 @@ class MaterielsController extends AppController $materiel = $this->Materiels->get($id); if ($this->Materiels->delete($materiel)) { $this->Flash->success(__('Le matériel a bien été supprimé.')); -// $this->sendEmailToManagement($id); + $this->sendEmailToManagement($id); } else { $this->Flash->error(__('Le matériel n\'a pas pu être supprimé.')); } @@ -520,13 +520,13 @@ 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')]); + $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é.')); @@ -1016,7 +1016,7 @@ class MaterielsController extends AppController fclose($csv_file); exit(); - //Sans le exit() ca ne fonctionne pas pour de petite liste, et dans tous les cas une ligne en javascript est écris si il n'y a pas exit() + //Sans le exit() ça ne fonctionne pas pour des petites listes, et dans tout les cas une ligne en javascript est écrite si il n'y a pas exit() //La redirection suivante fonctionne parfaitement, mais inutile à cause du exit() /* diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 3cc1634..d114003 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -194,6 +194,8 @@ class MaterielsTable extends AppTable $validator ->notEmpty('site_id', 'Ce champ doit être rempli'); +// ->allowEmpty('site_id'); +// A passer en non commenté pour lorsque le matos est validé $validator ->allowEmpty('lieu_detail') @@ -206,6 +208,9 @@ class MaterielsTable extends AppTable $validator ->allowEmpty('email_responsable') ->email('email_responsable'); + + $validator + ->notEmpty('nom_gestionnaire', 'Ce champ doit être rempli'); $validator ->allowEmpty('nom_createur'); diff --git a/src/Template/Materiels/add.ctp b/src/Template/Materiels/add.ctp index 96eeda8..285a256 100755 --- a/src/Template/Materiels/add.ctp +++ b/src/Template/Materiels/add.ctp @@ -1,4 +1,6 @@ designation; $Sur_categ_id = $cpMateriel->sur_categorie_id; @@ -132,6 +134,21 @@ else { 'readonly' => true, 'default' => $mail_responsable ]); + + // ==========================Zone de travail============================== + + // Modif BD : + // ALTER TABLE `materiels` ADD `nom_gestionnaire` VARCHAR( 45 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL AFTER `email_responsable` ; + + 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']) + ]); + + // ======================================================================= + echo $this->Form->input('fournisseur', ['label' => 'Fournisseur', 'default' => $Fournisseur]); echo $this->Form->input('organisme_id', ['options' => $organismes, 'style' => 'width: 380px', 'empty' => 'Choisir un organisme', 'default' => $Organisme_id]); echo $this->Form->input('prix_ht', ['label' => 'Prix HT (€)', 'default' => $Prix_ht]); diff --git a/src/Template/Materiels/edit.ctp b/src/Template/Materiels/edit.ctp index 0a273e9..17d4f8c 100755 --- a/src/Template/Materiels/edit.ctp +++ b/src/Template/Materiels/edit.ctp @@ -1,6 +1,8 @@ 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', + 'options' => $administrateurs + ]); + + echo $this->Form->input('fournisseur', [ 'label' => 'Fournisseur', @@ -405,6 +418,5 @@ $(document).ready(function () { } }); }); - diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index 6b59c53..c0ac11b 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -374,6 +374,7 @@ if (h ( $materiel->status ) == 'ARCHIVED') $displayElement ( __ ( 'Détail lieu de stockage' ), h ( $materiel->lieu_detail ) ); $displayElement ( __ ( 'Nom du propriétaire' ), $this->Html->link ( h ( $materiel->nom_responsable ), 'mailto:' . h ( $materiel->email_responsable ) ) ); + $displayElement ( __ ( 'Nom du gestionnaire de référence' ), h ( $materiel->nom_gestionnaire ) ); $displayElement ( __ ( 'N. interne (labo)' ), h ( $materiel->numero_laboratoire ) ); if ($role == 'Super Administrateur') { diff --git a/src/Template/Pages/acls.ctp b/src/Template/Pages/acls.ctp index db23c1f..34d8526 100755 --- a/src/Template/Pages/acls.ctp +++ b/src/Template/Pages/acls.ctp @@ -1,123 +1,391 @@ -- no title specified

ACL (Access Control List)

(Etienne Pallier – 24/06/2016)

 

 

 

I – Cycle de vie du statut du matériel

 

Créer un matériel ==> passe alors en statut CREATED ==> peut alors être éventuellement supprimé (mais ne pourra plus être supprimé ensuite)

Valider un matériel CREATED ==> passe alors en statut VALIDATED (resp et admin only)

Demander l'Archivage d'un materiel VALIDATED ==> passe alors en statut TOBEARCHIVED (resp et admin only)

Sortir de l'inventaire (Valider une demande d'archivage d'un matériel TOBEARCHIVED) ==> statut ARCHIVED (admin only)

Désarchiver un matériel ==> repasse de TOBEARCHIVED ou ARCHIVED à VALIDATED (admin only)

 

En résumé :

 

CREATED ==>  VALIDATED ==>  TOBEARCHIVED ==>  ARCHIVED

     I                        /\                        I                                I

    V                                    I ------------------------        I ---------------------------------        I (adminplus only)

DELETED

 

 

 

II - Droits des utilisateurs selon leur profil

 

A – Globalement (principes généraux)

 

Un utilisateur non logué ne doit RIEN pouvoir faire. Seulement se loguer, c'est tout. Il n'a accès qu'à la page d'accueil (de login).

Une fois logué, un utilisateur a des droits différents selon son profil, globalement :

- un USER ne peut que créer un matériel, un suivi, ou un emprunt, consulter, et modifier (uniquement ce qu'il a créé lui-même)

- un RESPONSABLE a tous les droits sauf accès à certains champs et certaines vues réservées à l'administration (ADMIN). Il ne peut pas non plus archiver un matériel, mais seulement demander l'archivage (comme un USER)(uniquement ce lié à son groupe métier ou thématiques)

- un ADMIN(istratif) a tous les droits (y-compris champs réservés à l'administration)

- un ADMINPLUS (administratif Plus) a tous les droits de ADMIN et en plus il peut modifier un matériel quelque soit son statut (y-compris TOBEARCHIVED et ARCHIVED), notamment il peut modifier le statut du matériel (pour le rétrograder)

- un SUPERADMIN a tous les droits : ceux d'ADMINPLUS et certains droits supplémentaires pour lui permettre des corrections d'erreur et la configuration de l'application (notamment l'administration des utilisateurs...)

 

Concernant les informations internes permettant de savoir qui a fait quoi (mises en place en février 2014), elles ne sont bien sûr pas modifiables puisque gérées automatiquement par le système, mais sont visibles par tous excepté le profil USER.

B - sur la table MATERIEL

 

ALL (TOUS)

(droits par defaut)

Utilisateur  (quelconque)

Responsable

Administration

Administration Plus

Super-Administrateur

Read (un seul ou une liste)

(view ou index)

Y

champs caches: donnees admin

idem ALL

idem ALL

(idem Responsable +  donnees admin)

 

En mode edit (update), si VALIDATED, on ajoute aux donnees readonly les donnees admin

idem Admin

idem Adminplus

Create (1)

(add)

Y

champs caches:

donnees admin + statut + etiquette

Idem ALL

champs readonly :

nom_responsable

idem ALL

(+ etiquette)

Update (1)

(edit)

Y

ssi

CREATED (tous les champs)

ou VALIDATED (quelques champs visibles sont readonly) (1)

 

champs caches:

donnees admin + statut + etiquette

idem ALL

ssi createur

idem Admin

(tous les statuts)

(+ champ statut)

 

TOBEARCHIVED ou ARCHIVED: seulement le statut

Delete

(delete)

Y

ssi CREATED

idem ALL

idem Responsable

idem Admin

Valider

(statusValidated)

N

(resp+)

idem ALL

Y

ssi

CREATED

 

Demander archivage

(statusToBeArchived)

N

(resp+)

Y

ssi

VALIDATED

Sortir de l'inventaire

 (statusArchived)

N

(admin+)

idem ALL

Y

ssi

TOBEARCHIVED

Desarchiver (2)

N

(adminplus+)

idem Responsable

Y

ssi

ARCHIVED ou

TOBEARCHIVED

Exporter

(csv)

N

(resp+)

Y

idem Admin

Montee de statut groupée

N

(admin+)

idem ALL

Y

Edition (4)

DOCUMENTS

N

(admin+)

Y

- admission : ssi VALIDATED

- sortie : ssi TOBEARCHIVED ou ARCHIVED

Fiche Matériel

Y (sans partie admin)

Y (sans partie admin)

Y (sans partie admin)

Y

Y

Y (sans partie admin)

 

 

 

Par défaut, le superadmin a TOUS les droits

 

Conventions d'écriture :

- resp+ = possible pour un Responsable et plus (responsable, admin, adminplus, et superadmin)

- admin+ = possible pour un Admin et plus (admin, adminplus, et superadmin)

- ...

 

Notes :

 

  1. (1)Droits en modification (edit) : 

- Un simple « user » ne doit pas pouvoir modifier le responsable, ni le statut, ni l'étiquette, ni les données admin d'un matériel (en mode Création comme Modification)

- Un  «responsable » ne doit pas pouvoir modifier le statut, ni les données admin d'un matériel (en mode Création comme Modification)

- Les données admin ne sont accessibles qu'aux profils admin+

- Le champ "status" n'est modifiable que par les profils adminplus+

- Tout le monde peut modifier un matériel VALIDATED (user ne peut modifier que ses matériels, resp ne peut modifier que les matériels de son groupe thématique ou métier),

MAIS PAS certains champs qui sont readonly (sur_categorie_id', 'categorie_id', 'materiel_administratif', 'materiel_technique', 'date_acquisition', 'nom_responsable', 'fournisseur', 'organisme', 'prix_ht')

Les seuls champs qu'on peut éditer sont donc : (designation, sous_categorie, materiel_administratif, materiel_technique, description, etiquette, lieu_stockage, lieu_detail, numero_serie, groupes_thematique, groupes_metier),
- Seuls les profils
adminplus+ peuvent modifier un matériel TOBEARCHIVED, ou ARCHIVED mais UNIQUEMENT le champ "status" (pour pouvoir rétrograder à CREATED ou VALIDATED)

- Le seul moyen de modifier COMPLÈTEMENT un matériel VALIDATED, TOBEARCHIVED, ou ARCHIVED,
c'est de
changer son statut, en le rétrogradant à CREATED (seuls les profils adminplus+ peuvent le faire)

 

  1. (2)Désarchiver : consiste à rétrograder un matériel ARCHIVED ou TOBEARCHIVED dans le statut VALIDATED ou CREATED (adminplus+ only) ; utile en cas d'erreur 

 

  1. (3)Montée de statut groupée : seul ADMIN peut (exporter tout ou partie de la liste des matériels, et) augmenter (+1) le statut d'un groupe de matériels, depuis la vue « index » (vue spéciale pour ADMIN, avec des cases à cocher et boutons pour exporter ou faire évoluer le statut) 

 

  1. (4)Edition des documents : 

Admission : quand on "VALIDE" un matériel "CREATED", le statut passe en VALIDATED et le document d'admission est automatiquement édité

Sortie : quand on "ARCHIVE" un document "TOBEARCHIVED", le statut passe en ARCHIVED et le document de sortie est automatiquement édité

De plus :

- Bouton "Doc admission" affiché à partir du statut "VALIDATED"

- Bouton "Doc Sortie" affiché à partir du statut TOBEARCHIVED (et donc aussi pour ARCHIVED)

Enfin, Le doc de sortie doit être couplée avec la liste des matériels a archiver (TOBEARCHIVED) quand il y a une demande de sortie.

 

 

C - sur les différentes VUES liées au matériel

 

Page accueil :

 Administration & Administration Plus voit un menu avec 2 options :

Page Outils :

User n'a pas accès à cette page

Les autres ont quelques options

superadmin a ces options en plus :

 

Vue materiel/index (liste) : limiter aux matériels actifs (non archivés)

 

Vue materiel/find : limiter aux matériels actifs (non archivés)

 Seul les profils Admin+ voit TOUS les matériels (y-compris archivés)

 

Vue materiel/view :

 boutons « Imprimer Etiquettes » : resp+

 

Vue materiel/edit :

 

 

 

D - sur un SUIVI et un EMPRUNT

 

Un USER peut modifier/supprimer un emprunt dont il est soit le créateur soit l'emprunteur.

Un USER qui créé un emprunt ne doit pas pouvoir changer le nom de l'emprunteur (par défaut, c'est lui). Ainsi, il pourra modifier/supprimer cette fiche au besoin plus tard. Par défaut donc, pour un user, emprunt.emprunteur=creator, materiel.responsable=creator

Tout le monde peut rechercher un suivi,

 

 

E - sur les UTILISATEURS

Par défaut, superadmin a tous les droits, et les autres profils n'ont que le droit de lecture (view et index)

 

 

F - sur tous les autres objets métiers

Voici la liste des autres objets métiers :

Par défaut, pour tous ces objets, superadmin a tous les droits, adminplus a tous les droits sauf « delete », et les autres profils n'ont que le droit de lecture (view et index)

- -
+ + + + + - no title specified + + + + + + + + + + + + + + + + + +
+

ACL (Access Control List)

+

(Etienne Pallier – 24/06/2016)

+

 

+

 

+

 

+

I – Cycle de vie du statut du matériel

+

 

+

Créer un matériel ==> passe alors en statut CREATED ==> peut alors être éventuellement supprimé (mais ne pourra plus être supprimé ensuite)

Valider un matériel CREATED ==> passe alors en statut VALIDATED (resp et admin only)

+

Demander l'Archivage d'un materiel VALIDATED ==> passe alors en statut TOBEARCHIVED (resp et admin only)

+

Sortir de l'inventaire (Valider une demande d'archivage d'un matériel TOBEARCHIVED) ==> statut ARCHIVED (admin only)

+

Désarchiver un matériel ==> repasse de TOBEARCHIVED ou ARCHIVED à VALIDATED (admin only)

+

 

+

En résumé :

+

 

+

CREATED ==>  VALIDATED ==>  TOBEARCHIVED ==>  ARCHIVED

+

     I                        /\                        I                                I

+

    V                                    I ------------------------        I ---------------------------------        I (adminplus only)

+

DELETED

+

 

+

 

+

 

+

II - Droits des utilisateurs selon leur profil

+

 

+

A – Globalement (principes généraux)

+ +

 

+

Un utilisateur non logué ne doit RIEN pouvoir faire. Seulement se loguer, c'est tout. Il n'a accès qu'à la page d'accueil (de login).

+

Une fois logué, un utilisateur a des droits différents selon son profil, globalement :

+

- un USER ne peut que créer un matériel, un suivi, ou un emprunt, consulter, et modifier (uniquement ce qu'il a créé lui-même)

+

- un RESPONSABLE a tous les droits sauf accès à certains champs et certaines vues réservées à l'administration (ADMIN). Il ne peut pas non plus archiver un matériel, mais seulement demander l'archivage (comme un USER)(uniquement ce lié à son groupe métier ou thématiques)

+

- un ADMIN(istratif) a tous les droits (y-compris champs réservés à l'administration)

+

- un ADMINPLUS (administratif Plus) a tous les droits de ADMIN et en plus il peut modifier un matériel quelque soit son statut (y-compris TOBEARCHIVED et ARCHIVED), notamment il peut modifier le statut du matériel (pour le rétrograder)

+

- un SUPERADMIN a tous les droits : ceux d'ADMINPLUS et certains droits supplémentaires pour lui permettre des corrections d'erreur et la configuration de l'application (notamment l'administration des utilisateurs...)

+

 

+

Concernant les informations internes permettant de savoir qui a fait quoi (mises en place en février 2014), elles ne sont bien sûr pas modifiables puisque gérées automatiquement par le système, mais sont visibles par tous excepté le profil USER.

+

+

B - sur la table MATERIEL

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

 

ALL (TOUS)

(droits par defaut)

Utilisateur  (quelconque)

Responsable

Administration

Administration Plus

Super-Administrateur

Read (un seul ou une liste)

(view ou index)

Y

champs caches: donnees admin

idem ALL

idem ALL

(idem Responsable +  donnees admin)

 

En mode edit (update), si VALIDATED, on ajoute aux donnees readonly les donnees admin

idem Admin

idem Adminplus

Create (1)

(add)

Y

champs caches:

donnees admin + statut + etiquette

Idem ALL

champs readonly :

nom_responsable

idem ALL

(+ etiquette)

Update (1)

(edit)

Y

ssi

CREATED (tous les champs)

ou VALIDATED (quelques champs visibles sont readonly) (1)

 

champs caches:

donnees admin + statut + etiquette

idem ALL

ssi createur

idem Admin

(tous les statuts)

(+ champ statut)

 

TOBEARCHIVED ou ARCHIVED: seulement le statut

Delete

(delete)

Y

ssi CREATED

idem ALL

idem Responsable

idem Admin

Valider

(statusValidated)

N

(resp+)

idem ALL

Y

ssi

CREATED

 

Demander archivage

(statusToBeArchived)

N

(resp+)

Y

ssi

VALIDATED

Sortir de l'inventaire

 (statusArchived)

N

(admin+)

idem ALL

Y

ssi

TOBEARCHIVED

Desarchiver (2)

N

(adminplus+)

idem Responsable

Y

ssi

ARCHIVED ou

TOBEARCHIVED

Exporter

(csv)

N

(resp+)

Y

idem Admin

Montee de statut groupée

N

(admin+)

idem ALL

Y

Edition (4)

DOCUMENTS

N

(admin+)

Y

- admission : ssi VALIDATED

- sortie : ssi TOBEARCHIVED ou ARCHIVED

Fiche Matériel

Y (sans partie admin)

Y (sans partie admin)

Y (sans partie admin)

Y

Y

Y (sans partie admin)

+

 

+

 

+

 

+

Par défaut, le superadmin a TOUS les droits

+

 

+

Conventions d'écriture :

+

- resp+ = possible pour un Responsable et plus (responsable, admin, adminplus, et superadmin)

+

- admin+ = possible pour un Admin et plus (admin, adminplus, et superadmin)

+

- ...

 

Notes :

+

 

+
    +
  1. (1)Droits en modification (edit) : 

  2. +
+

- Un simple « user » ne doit pas pouvoir modifier le responsable, ni le statut, ni l'étiquette, ni les données admin d'un matériel (en mode Création comme Modification)

- Un  «responsable » ne doit pas pouvoir modifier le statut, ni les données admin d'un matériel (en mode Création comme Modification)

+

- Les données admin ne sont accessibles qu'aux profils admin+

+

- Le champ "status" n'est modifiable que par les profils adminplus+

+

- Tout le monde peut modifier un matériel VALIDATED (user ne peut modifier que ses matériels, resp ne peut modifier que les matériels de son groupe thématique ou métier),

+

MAIS PAS certains champs qui sont readonly (sur_categorie_id', 'categorie_id', 'materiel_administratif', 'materiel_technique', 'date_acquisition', 'nom_responsable', 'fournisseur', 'organisme', 'prix_ht')

+

Les seuls champs qu'on peut éditer sont donc : (designation, sous_categorie, materiel_administratif, materiel_technique, description, etiquette, lieu_stockage, lieu_detail, numero_serie, groupes_thematique, groupes_metier),
- Seuls les profils
adminplus+ peuvent modifier un matériel TOBEARCHIVED, ou ARCHIVED mais UNIQUEMENT le champ "status" (pour pouvoir rétrograder à CREATED ou VALIDATED)

+

- Le seul moyen de modifier COMPLÈTEMENT un matériel VALIDATED, TOBEARCHIVED, ou ARCHIVED,
c'est de
changer son statut, en le rétrogradant à CREATED (seuls les profils adminplus+ peuvent le faire)

 

+
    +
  1. (2)Désarchiver : consiste à rétrograder un matériel ARCHIVED ou TOBEARCHIVED dans le statut VALIDATED ou CREATED (adminplus+ only) ; utile en cas d'erreur 

  2. +
+

 

+
    +
  1. (3)Montée de statut groupée : seul ADMIN peut (exporter tout ou partie de la liste des matériels, et) augmenter (+1) le statut d'un groupe de matériels, depuis la vue « index » (vue spéciale pour ADMIN, avec des cases à cocher et boutons pour exporter ou faire évoluer le statut) 

  2. +
+

 

+
    +
  1. (4)Edition des documents : 

  2. +
+

Admission : quand on "VALIDE" un matériel "CREATED", le statut passe en VALIDATED et le document d'admission est automatiquement édité

+

Sortie : quand on "ARCHIVE" un document "TOBEARCHIVED", le statut passe en ARCHIVED et le document de sortie est automatiquement édité

+

De plus :

+

- Bouton "Doc admission" affiché à partir du statut "VALIDATED"

+

- Bouton "Doc Sortie" affiché à partir du statut TOBEARCHIVED (et donc aussi pour ARCHIVED)

+

Enfin, Le doc de sortie doit être couplée avec la liste des matériels a archiver (TOBEARCHIVED) quand il y a une demande de sortie.

+

 

+

 

+

C - sur les différentes VUES liées au matériel

+

 

+

Page accueil :

+

 Administration & Administration Plus voit un menu avec 2 options :

+
    +
  • +
      +
    • +
        +
      • .« Voir les matériels à valider » 

      • +
      • .« Voir les matériels à sortir de l'inventaire » 

      • +
      +
    • +
    +

    Responsable voit un menu avec 3 options : 

    +
      +
    • +
        +
      • .« Voir les matériels de mon groupe métier » 

      • +
      • .« Voir les matériels de mon groupe métier à valider » 

      • +
      • .« Voir les suivis des matériels donc je suis responsable » 

      • +
      +
    • +
    +
  • +
+

Page Outils :

+

User n'a pas accès à cette page

+

Les autres ont quelques options

+

superadmin a ces options en plus :

+
    +
  • .Configuration générale de l'application 

  • +
  • .Gérer les utilisateurs privilégiés 

  • +
  • .Passer en mode debug 

  • +
  • .Passer en mode install 

  • +
+

 

+

Vue materiel/index (liste) : limiter aux matériels actifs (non archivés)

+
    +
  • +
      +
    • .Admin+ voit des boutons pour filtrer par « tous », « à valider », « validés », « à sortir », « archivés » 

    • +
    +
  • +
+

 

+

Vue materiel/find : limiter aux matériels actifs (non archivés)

+

 Seul les profils Admin+ voit TOUS les matériels (y-compris archivés)

 

+

Vue materiel/view :

+

 boutons « Imprimer Etiquettes » : resp+

+

 

Vue materiel/edit :

+
    +
  • .Etiquette O/N (admin+) 

  • +
  • .Statut (superadmin+) 

  • +
  • .Informations administratives (admin+) 

  • +
+

 

+

 

+

 

+

D - sur un SUIVI et un EMPRUNT

+

 

+
    +
  • .Dans tous les cas, on ne doit pas pouvoir emprunter ou suivre un materiel non validé (CREATED) 

  • +
  • .User a les droits C, R, U (si créateur), D (si créateur) 

  • +
  • .Resp+ a les droits C, R, U, D 

  • +
+

Un USER peut modifier/supprimer un emprunt dont il est soit le créateur soit l'emprunteur.

+

Un USER qui créé un emprunt ne doit pas pouvoir changer le nom de l'emprunteur (par défaut, c'est lui). Ainsi, il pourra modifier/supprimer cette fiche au besoin plus tard. Par défaut donc, pour un user, emprunt.emprunteur=creator, materiel.responsable=creator

+

Tout le monde peut rechercher un suivi,

+

 

+

 

+

E - sur les UTILISATEURS

+

Par défaut, superadmin a tous les droits, et les autres profils n'ont que le droit de lecture (view et index)

+

 

+

 

+

F - sur tous les autres objets métiers

+

Voici la liste des autres objets métiers :

+
    +
  • .Catégories (et domaines et sous-catégories) 

  • +
+
    +
  • .Groupes thématiques 

  • +
  • .Groupes métiers 

  • +
+

Par défaut, pour tous ces objets, superadmin a tous les droits, adminplus a tous les droits sauf « delete », et les autres profils n'ont que le droit de lecture (view et index)

+
+
element('menu') ?>
- \ No newline at end of file diff --git a/src/Template/Pages/home_app.ctp b/src/Template/Pages/home_app.ctp index c92de10..989e7a4 100755 --- a/src/Template/Pages/home_app.ctp +++ b/src/Template/Pages/home_app.ctp @@ -2,33 +2,30 @@

Accueil

-

Bienvenue sur l'inventaire administratif et technique labPresent.' '.$configuration->labName ?>.

+

Bienvenue sur l'inventaire administratif et technique labPresent.' '.$configuration->labName ?>.

Vous êtes connecté en tant que ' . $username . ' '; - echo 'et avec le niveau d\'authentification '.$role.'.'; - echo '

'; - - echo ''; - echo ''; - echo ''; - echo '
'.$this->Html->link('Voir mes matériels', [ - 'controller' => 'materiels', 'action' => 'index', 'MY' => $username]).'
'; - - //Utilisateur admin/super admin - if (in_array($role, ['Administration', 'Administration Plus'])) { - echo ''; - echo ''; - echo ''; - echo ''; - echo '
'.$this->Html->link('Voir les matériels à valider', [ - 'controller' => 'materiels', 'action' => 'index', 'CREATED']).'
'.$this->Html->link('Voir les matériels à sortir de l\'inventaire', [ - 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).'
'; - } - + //Utilisateur connecté + echo '

Vous êtes connecté en tant que ' . $username . ' '; + echo 'et avec le niveau d\'authentification '.$role.'.'; + echo '

'; + echo ''; + echo ''; + echo ''; + echo '
'.$this->Html->link('Voir mes matériels', [ + 'controller' => 'materiels', 'action' => 'index', 'MY' => $username]).'
'; + //Utilisateur admin/super admin + if (in_array($role, ['Administration', 'Administration Plus'])) { + echo ''; + echo ''; + echo ''; + echo ''; + echo '
'.$this->Html->link('Voir les matériels à valider', [ + 'controller' => 'materiels', 'action' => 'index', 'CREATED']).'
'.$this->Html->link('Voir les matériels à sortir de l\'inventaire', [ + 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).'
'; + } //Utilisateur responsable if ($role == 'Responsable') { diff --git a/src/Template/Pages/infos.ctp b/src/Template/Pages/infos.ctp index 21eaac4..22d16c9 100755 --- a/src/Template/Pages/infos.ctp +++ b/src/Template/Pages/infos.ctp @@ -1,12 +1,11 @@ -

- element('menu') ?> -

INFORMATIONS SYSTEME

- - + ?>
+
+ element('menu') ?> +
diff --git a/src/Template/Pages/printers.ctp b/src/Template/Pages/printers.ctp index 5aa8316..3eb0686 100755 --- a/src/Template/Pages/printers.ctp +++ b/src/Template/Pages/printers.ctp @@ -1,165 +1,15 @@
-

ETIQUETEUSES INSTALLEES

+

ETIQUETEUSE

-

-

REFERENCE DE L'ETIQUETEUSE (TITREUSE)

-
- -

-Nom : "Imprimante d'étiquettes - Dymo - LabelManager PnP - USB" -

- -

-Prix : environ 50 € HT -

- -

-Ruban à commander : "D1 en 12mm" -

- -

-Lien chez Lyreco (Réf : 4.976.543) -

- -

-Lien chez OfficeDepot (Réf : 5375844) -

- -

-Lien chez le constructeur DYMO (Réf : S0915350) -

- - -Html->image('etiqueteuse.jpg', ['alt' => 'Image de l\'etiqueteuse Dymo - LabelManager PnP - USB']) ?> - -
-    Pas de logiciel ni de pilote à installer. Le logiciel intégré s’ouvre à l’écran, prêt à l’emploi.
-    Garantie 2 ans.
-    Fonctionne avec les rubans D1 6, 9 et 12 mm.
-    Petite et compacte, elle trouve facilement sa place sur un bureau.
-    Batterie lithium-ion fournie, rechargeable par USB - pas d’adaptateur secteur ni de piles.
-    Personnalisez vos étiquettes avec les polices et graphiques de votre ordinateur.
-    Connectez-là à votre PC ou Mac et imprimez instantanément et très facilement des étiquettes professionnelles !
-    Connexion USB à votre PC ou Mac.
-
- -
- -

-Fiche technique -

- -

-Manuel d'utilisation -

- -

-

LOGICIEL DLS (DYMO LABEL SOFTWARE) A INSTALLER

-
- -
-

-Page d'aide et de documentation -

- -

-Téléchargement logiciel -

- -

-Autre lien pour le téléchargement -

- - -



-

ETIQUETEUSES INSTALLEES SUR LE LABORATOIRE

-
- - -
-Dans l'idéal, il faudrait une étiqueteuse par gestionnaire financier : -

- - SUR LE SITE ROCHE : -
    -
  • - Jean-Louis Lefort (site Roche 101) ==> installée le 1/12/14 (pc8008, Windows 7 Pro 2009 SP1, version soft DLS 8.5.1) -
    - Aucun problème, installée sur lettre G: - laissé 1 ruban D1 12mm de 7m en plus du ruban installé (3m seulement) -
    - - Pour info, ancienne installation faite sur son pc XP (23/5/14) (version soft DLS 8.5.1) - Problème : si le logiciel DLS (Dymo Label Soft) est déjà ouvert, ça provoque une erreur Windows. Il faut donc refermer le logiciel avant de demander l'impression d'un ruban - (c'est peut-être dû à cette version 8.5.1, la dernière version sortie, car sur l'ancienne version, je ne crois pas qu'il y ait cette erreur sur XP) - -
  • - -
  • - Dorine Roma (site Roche 102) ==> installée le 1/12/14 (pc8006 Optiplex 7010, Windows 7 Pro 2009 SP1, version soft DLS 8.5.1) -
    - - Installée sur lettre G: - ruban installé = 3m seulement - -
  • - -
  • - Carole Lecinana (site Roche 104) ==> installée le 1/12/14 (pc8005 Optiplex 7010, Windows 7 Pro 2009 SP1, version soft DLS 8.5.1) -
    - - Installée sur lettre G: - ruban installé = 3m seulement - -
  • - -
  • - Marjorie Cloup (site Roche 104) ==> installée le 1/12/14 (pc8007 Optiplex 7010, Windows 7 Pro 2009 SP1, version soft DLS 8.5.1) -
    - - Installée sur lettre G: - ruban installé = 3m seulement - -
  • -
+

+

DOCUMENTATION ET INSTALLATION DE L'ETIQUETEUSE (TITREUSE)

+

- SUR LE SITE BELIN : -
    -
  • - Carole Gaiti (site Belin 61) ==> installée le 24/6/14 (pc Win 7 - version soft DLS 8.5.1) -
  • - -
  • - Dolores Granat (site Belin 80bis) ==> A FAIRE -
  • - -
  • - Isabelle Moro (site Belin B064) ==> A FAIRE -
  • - -
  • - De plus, Etienne Pallier (site Roche 63, Mac OS 10.7) et Elodie Bourrec (site Belin 59, Win 7) sont tous les deux équipés d'une étiqueteuse -
  • - -
  • - Enfin, l'étiqueteuse (ancienne) de Gilbert Rouaix (site Roche 19, Win XP) semble compatible puisqu'on a réussi à imprimer des étiquettes dessus. -
  • - -
- -

-
-Au total, ça fait donc 9. -

-"; -?> - +

Lien vers le wiki

- -
- element('menu') ?> -
+
+ element('menu') ?> +
\ No newline at end of file diff --git a/src/Template/Pages/tools.ctp b/src/Template/Pages/tools.ctp index 58ab90c..2fa8e8c 100755 --- a/src/Template/Pages/tools.ctp +++ b/src/Template/Pages/tools.ctp @@ -35,7 +35,7 @@ echo ''; echo ''; - echo $this->Html->link('Voir les étiqueteuses installées', ['controller'=>'pages', 'action'=>'printers']); + echo $this->Html->link('Etiqueteuse', ['controller'=>'pages', 'action'=>'printers']); echo ''; echo ''; -- libgit2 0.21.2