From 4d0f315d7449429abd6d4da2089987750f02e619 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Mon, 20 May 2019 17:45:03 +0200 Subject: [PATCH] Bugfix et amelioration tests + Simplification des vues (en cours) --- README.md | 19 +++++++++++++++---- src/Controller/AppController.php | 46 +++++++++++++++++++++++++++++++++++++++------- src/Controller/MaterielsController.php | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ src/Template/Materiels/view.ctp | 313 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/Template/Suivis/view.ctp | 14 +++++++++----- tests/TestCase/Controller/MaterielsControllerTest.php | 56 ++++++++++++++++++++++++++++---------------------------- 6 files changed, 268 insertions(+), 249 deletions(-) diff --git a/README.md b/README.md index d56deb2..83b25e1 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,13 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 16/05/2019 -Version: 2.12.14 +Date: 20/05/2019 +Version: 2.12.17 Author: EP -Commentaire: Ajout tests pour fonctionnalité "Copier ce materiel" +Commentaire: + Bugfix et amelioration tests + Simplification des vues (en cours) + IMPORTANT : - Pour connaitre la version actuelle, taper "./VERSION" @@ -92,11 +95,19 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https ----------------------------------------------------------------------------------------------------------- +20/05/2019 Version: 2.12.17 (EP) + + +17/05/2019 Version: 2.12.15-17 (EP) + Bugfix modif matos: on ne doit plus pouvoir modifier un materiel validé (ou plus) => il faut le dé-valider avant ! + Bugfix et amelioration tests + Simplification des vues (en cours) + 16/05/2019 Version: 2.12.12-14 (EP) Bugfix ajout materiel Bugfix tests Ajout tests pour fonctionnalité "Copier ce materiel" - + 15/05/2019 Version: 2.12.11 (EP) Bugfix, simplification, et amélioration de la fonctionnalité "Copier ce matériel" diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 4a327ca..ffbede1 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -197,7 +197,7 @@ class AppController extends Controller * @param string $id */ // public function isAuthorizedAction(AppController $controller, $roleLong, $action, $id=null, $user=null) { - public function isAuthorizedAction($controller, $roleLong, $action, $id = null, $user = null) + public function isAuthorizedAction2($controller, $roleLong, $action, $id = null, $user = null) { $doDEBUG = true; $doDEBUG = false; @@ -273,7 +273,7 @@ class AppController extends Controller } if ($doDEBUG) debug("CAS6"); - return $this->isAuthorizedAction($controller, $this->getPreviousRole($role), $action, $id, $user); + return $this->isAuthorizedAction2($controller, $this->getPreviousRole($role), $action, $id, $user); } // @todo @@ -587,6 +587,11 @@ class AppController extends Controller * * @see \Cake\Controller\Controller::beforeFilter() 1) Autorisations SANS (ou AVANT) connexion * 2) Ensuite, c'est isAuthorized qui gère + * + * Cette méthode est appelée pendant l’event Controller.initialize qui se produit + * AVANT chaque action du controller. + * C’est un endroit pratique pour vérifier le statut d’une session ou les permissions d’un utilisateur. + * ATTENTION: cette méthode sera appelée pour les actions manquantes. * */ public function beforeFilter(Event $event) @@ -697,7 +702,7 @@ class AppController extends Controller $this->set('USER_IS_ADMINPLUS', $USER_IS_ADMINPLUS); $this->set('USER_IS_SUPERADMIN', $USER_IS_SUPERADMIN); $this->set('USER_IS_RESPONSABLE_OR_MORE', $USER_IS_RESPONSABLE_OR_MORE); - $this->set('USER_IS_ADMIN_OR_MORE', $USER_IS_ADMIN_OR_MORE); + $this->set(compact('USER_IS_ADMIN_OR_MORE')); $this->set('USER_IS_ADMINPLUS_OR_MORE', $USER_IS_ADMINPLUS_OR_MORE); $this->set('priviledgedUser', $priviledgedUser); @@ -747,10 +752,13 @@ class AppController extends Controller ->first()['id']); $displayElement = function ($nom, $valeur, $params = "") { - $balise = ($params != "") ? '' : ''; + $TD = ($params=="") ? 'TD' : "TD $params"; + //$TD = ($params=="") ? '' : ''; + //$tdstyle = $params!="" ? $params : ''; // Ca c'est parce que sinon y'a au moins deux tests qui passent pas, a cause de l'espace dans la balise ... - if ($valeur != "") - echo '' . $nom . ' ' . $balise . $valeur . ''; + //if ($valeur != "") echo ' '.$nom.' ' . $TD.$valeur.''; + //if ($valeur != "") echo '' . $nom . ' ' . $balise . $valeur . ''; + if ($valeur!="") echo " $nom <$TD>$valeur "; }; $this->set('displayElement', $displayElement); @@ -766,7 +774,31 @@ class AppController extends Controller return (int) $strInterval; }; $this->set('dateProchainControleVerif', $dateProchainControleVerif); - } + + // Pass this function to all views + //function echoActionButton($html, $icon_class, $title, $action, $id, $tip='', $controller='materiels', $mat=NULL, $photo=NULL) { + $echoActionButton = function($html, $icon_class, $title, $action, $id, $tip='', $controller='materiels', $mat=NULL, $photo=NULL) { + echo $html->link( + __(" $title"), + [ + 'controller' => $controller, + 'action' => $action, + $id, + $mat, + $photo + ], + [ + 'title' => $tip, + 'escape' => false, + 'onclick' => 'return true;', + 'style' => 'margin-right: 10px' + ] + ); + }; + $this->set(compact('echoActionButton')); + + + } // beforeRender() // "le materiel", "le suivi"... protected function getArticle() diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index e604790..b62e372 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -140,14 +140,37 @@ class MaterielsController extends AppController ) ); // $ACL + + /* + * Cette méthode est appelée pendant l’event Controller.initialize qui se produit avant chaque action du controller. + * C’est un endroit pratique pour vérifier le statut d’une session ou les permissions d’un utilisateur. + * Attention: La méthode beforeFilter() sera appelée pour les actions manquantes. + * Retourner une réponse à partir d’une méthode beforeFilter ne va pas empêcher l’appel des autres écouteurs du même event. + * Vous devez explicitement stopper l’event (cf https://book.cakephp.org/3.0/fr/controllers.html) + * + */ + //use Cake\Event\Event; + public function beforeFilter(\Cake\Event\Event $event) + { + $this->myDebug("step 0: beforeFilter()"); + parent::beforeFilter($event); + } /* * EP added 13/6/17 * Set some useful global variables for all (Materiel) views * Overload beforeRender() + * + * Cette méthode est appelée pendant l’event Controller.beforeRender qui se produit + * APRES l’action du controller mais AVANT que la vue ne soit rendue. + * Ce callback n’est pas souvent utilisé, mais peut-être nécessaire si vous appelez render() manuellement à la fin d’une action donnée + * + * Voir aussi beforeFilter() appellée AVANT l'action du controller */ public function beforeRender(\Cake\Event\Event $event) { + $this->myDebug("step 3: beforeRender()"); + parent::beforeRender($event); // $this->layout = 'default'; @@ -175,6 +198,16 @@ class MaterielsController extends AppController * } * } */ + + //TODO: temporaire, à MOVE dans AppController + /* + $action = $this->getActionPassed(); + if ($action == 'view') { + $CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER); + $this->set(compact('CAN_EDIT')); + } + */ + } @@ -182,14 +215,15 @@ class MaterielsController extends AppController /** * - * @param - * $user + * //param $user + * @param $userFromSession * @return boolean Give authorization for materiels */ + // CAKEPHP function public function isAuthorized($userFromSession) { //if (parent::isAuthorized($userFromSession)) return TRUE; - + $this->myDebug("step 1: isAuthorized()"); $user = $userFromSession; $configuration = $this->confLabinvent; $userCname = $user[$configuration->ldap_authenticationType][0]; @@ -221,8 +255,20 @@ class MaterielsController extends AppController * * Tout le reste en dessous de cette ligne devient inutile !!! */ - $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction($this, $role, $action, $id, $user)); + $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $role, $action, $id, $user)); + return $this->isAuthorizedAction($role, $action, $id, $userFromSession, $userCname); + + } // isAuthorized + + /* + * EP own defined function (18/5/19), date importante + * Avantage: TOUTES les ACL (droits des utilisateurs) sont définies en UN SEUL UNIQUE endroit: ICI + * Les 3 niveaux successifs parcourus par cakephp (isAuthorized() puis beforeRender() puis la VUE) font tous appels à cette MEME fonction + * On ne définit et modifie les droits qu'ici et nulle part ailleurs, surtout pas dans les vues !!! + */ + private function isAuthorizedAction($role, $action, $id, $user, $userCname) { + /* * Structure mise en place: * @@ -230,7 +276,6 @@ class MaterielsController extends AppController * switch ROLE * */ - switch ($action) { // INDEX, VIEW, ADD, FIND @@ -452,7 +497,7 @@ class MaterielsController extends AppController } // end of switch case // DEFAULT PARENT RULE - return parent::isAuthorized($userFromSession); + return parent::isAuthorized($user); } /* @@ -548,6 +593,8 @@ class MaterielsController extends AppController */ public function index() { + $this->myDebug("step 2: index()"); + $condition = ''; if (isset($this->request->getAttribute('params')['pass'][0])) { $condition = [ @@ -685,6 +732,7 @@ class MaterielsController extends AppController */ public function view($id = null) { + $this->myDebug("step 2: view()"); $materiel = $this->Materiels->get($id, [ 'contain' => [ 'SurCategories', @@ -750,6 +798,13 @@ class MaterielsController extends AppController $this->set('_serialize', [ 'materiel' ]); + + // TODO, mais plutot dans le beforeFilter() ou beforeRender()... + /* + $CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER); + $this->set(compact('CAN_EDIT')); + */ + } // view @@ -763,6 +818,8 @@ class MaterielsController extends AppController */ public function add_or_edit($is_add, $id=null, $valeurs=null, $erreurs=null) { + $this->myDebug("step 2: add_or_edit()"); + $usersTable = TableRegistry::getTableLocator()->get('Users'); // Set $materiel diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index ab44f76..6a27f7e 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -3,6 +3,40 @@ use Cake\I18n\Time; use Cake\I18n\Date; use Cake\ORM\TableRegistry; +// (EP 18/5/19) Elements set by Controller for this view: +// - Constants : +//$CAN_EDIT = $CAN_EDIT; +$PDF_ENGINE = $PDF_ENGINE; +$USER_IS_ADMIN_OR_MORE = $USER_IS_ADMIN_OR_MORE; +// - Fonctions : +$displayElement = $displayElement; +$dateProchainControleVerif = $dateProchainControleVerif; +$echoActionButton = $echoActionButton; +// TODO: yena plein d'autres +// ... + +/* (EP) moved to controller +function $echoActionButton($html, $icon_class, $title, $action, $id, $tip='', $controller='materiels', $mat=NULL, $photo=NULL) { + echo $html->link( + __(" $title"), + [ + 'controller' => $controller, + 'action' => $action, + $id, + $mat, + $photo + ], + [ + 'title' => $tip, + 'escape' => false, + 'onclick' => 'return true;', + 'style' => 'margin-right: 10px' + ] + ); +} +*/ + + //$PDF_ENGINE = "FPDF"; //$PDF_ENGINE = "DOMPDF"; @@ -82,6 +116,13 @@ $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER = $USER_IS_RESPONSABLE && in_array($us $USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)); + +// TODO: to be set by controller +$CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER); +$CAN_ATTACH_A_DOC = $USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER; +$CAN_COPY = $IS_CREATED and ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER); +$CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN_OR_MORE; + ?> @@ -89,52 +130,28 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledg

- find('all', [ - 'conditions' => [ - 'numero_laboratoire' => "IRAP18-2018-0001" - ], - 'contain' => ['Fournisseurs', 'Organismes'] - ] - )->first(); - $materiel2 = TableRegistry::get('Materiels')->find('all')->contain(['Fournisseurs', 'Organismes']); - foreach ($materiel2 as $matos) { - echo $matos; - echo "fournisseur=".$matos->fournisseur->nom; - echo "id=".$matos->id; - } - echo "fournisseur=".$materiel2->fournisseur->nom; - echo "
"; - */ - -// if (h($materiel->status) == 'ARCHIVED') echo ' '; -if ($IS_ARCHIVED) - echo ' '; -$panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; -?> - designation) . $panne?> - - - numero_laboratoire)?> - status) == 'ARCHIVED') echo ' (Archivé)'; - if ($IS_ARCHIVED) - echo ' (Archivé)'; - ?> - + status) == 'ARCHIVED') echo ' '; + if ($IS_ARCHIVED) echo ' '; + $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; + ?> + designation) . $panne?> + numero_laboratoire)?> + +


documents as $documents) : - //et si le document est la photo liée, on l'affiche, pour cela + /* Maintenant que les dénominations des fichiers dl on changé on a besoin des + * informations de la photo pour retrouver son nom et l'afficher, l'id ne suffit plus + * on parcourt donc les documents liés à ce matériel + */ + foreach ($materiel->documents as $documents) { + // et si le document est la photo liée, on l'affiche, pour cela if($documents->photo) { //on récupère le doc $photo = $documents; @@ -149,11 +166,10 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'max-width: 300px; text-align: center;' ]); } - } - endforeach ; - + } + } - // Url transformed in QrCode + // QRCODE (Url) $this->request->getSession()->write("qrUrl", $this->request->env('SERVER_NAME') . $this->request->env('REQUEST_URI')); $this->requestAction('/QrCodes/creer/'); echo $this->Html->image('qrcodes/' . $this->request->getSession() @@ -167,50 +183,29 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; - -
+
status, ['CREATED','VALIDATED']) ) { // (EP 17/5/19) Ben non, on peut pas éditer si validé !!! //if ($IS_CREATED || $IS_VALIDATED) { - if ($IS_CREATED) { - if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER)/* - //in_array($role, ['Administration','Administration Plus','Super Administrateur']) - || - ( - //$role == 'Utilisateur' - //&& in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]) - ) - || - ( - $role == 'Responsable' - && ( - ( - isset($priviledgedUser->groupes_metier_id) - && $priviledgedUser->groupes_metier_id != $idGmNa - && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id - ) - || - ( - isset($priviledgedUser->groupe_thematique_id) - && $priviledgedUser->groupe_thematique_id != $idGtNa - && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id - ) - ) - ) - */ - echo $this->Html->link(__(' Editer ce matériel'), [ - 'action' => 'edit', - $materiel->id - ], [ - 'escape' => false, - 'onclick' => 'return true;', - 'style' => 'margin-right: 10px' - ]); - } + //if ($IS_CREATED) { + if ($CAN_EDIT) $echoActionButton($this->Html, 'icon-pencil', 'Editer ce matériel', 'edit', $materiel->id); + /* + echo $this->Html->link( + __(' Editer ce matériel'), + [ + 'action' => 'edit', + $materiel->id + ], + [ + 'escape' => false, + 'onclick' => 'return true;', + 'style' => 'margin-right: 10px' + ] + ); + */ /* * // TOBEARCHIVED+ @@ -231,6 +226,8 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; if ($IS_VALIDATED) { // BOUTON NOUVEAU SUIVI + $echoActionButton($this->Html, 'icon-plus', 'Nouv. Suivi', 'add', $materiel->id, 'Faire un nouveau suivi de ce matériel', 'suivis'); + /* echo $this->Html->link(' Nouv. Suivi', [ 'controller' => 'suivis', 'action' => 'add', @@ -240,8 +237,11 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); // End link - + */ + // BOUTON NOUVEL EMPRUNT + $echoActionButton($this->Html, 'icon-plus', 'Nouv. Emprunt', 'add', $materiel->id, 'Faire un nouvel emprunt de ce matériel', 'emprunts'); + /* echo $this->Html->link(' Nouv. Emprunt', [ 'controller' => 'emprunts', 'action' => 'add', @@ -251,36 +251,19 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); // End link + */ } - // BOUTON "Lier un Doc" - if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) { + // BOUTONS "Lier un Doc" et "Remplacer/Lier photo" + if ($CAN_ATTACH_A_DOC) { + //if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) { + $echoActionButton($this->Html, 'icon-file', 'Lier un Doc.', 'add', $materiel->id, 'Attacher un Doc. à ce matériel', 'documents', 'mat'); + // BOUTON "photo" + if ($materiel->photo_id != null) + $echoActionButton($this->Html, 'icon-file', 'Remplacer la photo.', 'add', $materiel->id, 'Remplacer la photo de ce matériel', 'documents', 'mat', 'photo'); + else + $echoActionButton($this->Html, 'icon-file', 'Lier une photo.', 'add', $materiel->id, 'Attacher une photo à ce matériel', 'documents', 'mat', 'photo'); /* - * if ( - * in_array($role, ['Administration','Administration Plus','Super Administrateur']) - * || - * ( - * $role == 'Utilisateur' - * && in_array($username, [$materiel->nom_createur,$materiel->nom_responsable]) - * ) - * || ( - * $role == 'Responsable' - * && ( - * ( - * isset($priviledgedUser->groupes_metier_id) - * && $priviledgedUser->groupes_metier_id != $idGmNa - * && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id - * ) - * || - * ( - * isset($priviledgedUser->groupe_thematique_id) - * && $priviledgedUser->groupe_thematique_id != $idGtNa - * && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id - * ) - * ) - * ) - * ) { - */ echo $this->Html->link(' Lier un Doc.', [ 'controller' => 'documents', 'action' => 'add', @@ -291,9 +274,9 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); + */ - // BOUTON "photo" - if ($materiel->photo_id != null) { + /* echo $this->Html->link(' Remplacer la photo.', [ 'controller' => 'documents', 'action' => 'add', @@ -305,7 +288,8 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); - } else { + */ + /* echo $this->Html->link(' Lier une photo.', [ 'controller' => 'documents', 'action' => 'add', @@ -317,7 +301,7 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); - } + */ } // BOUTON Lier un doc // Doc admission et sortie (admin+) @@ -337,12 +321,14 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; $data = $materiel->numero_laboratoire . ".pdf"; } // if (($materiel->status == 'VALIDATED') || ($materiel->status == 'CREATED')) { + $echoActionButton($this->Html, 'icon-file', 'Doc. admission', $action, $data, "Voir le document d'admission", 'documents'); + /* echo $this->Html->link(' Doc. admission', [ 'controller' => 'documents', - /* + /// 'action' => 'admission', $materiel->numero_laboratoire - */ + /// 'action' => $action, $data ], [ @@ -350,6 +336,7 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); + */ } // Doc sortie (admin only) @@ -365,6 +352,8 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; $data = $materiel->numero_laboratoire . ".pdf"; } // else if (($materiel->status == 'ARCHIVED') || ($materiel->status == 'TOBEARCHIVED')) { + $echoActionButton($this->Html, 'icon-file', 'Doc. sortie', $action, $data, "Voir le document de sortie", 'documents'); + /* echo $this->Html->link(' Doc. sortie', [ 'controller' => 'documents', 'action' => $action, @@ -380,6 +369,7 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px', 'escape' => false ]); + */ } } @@ -473,6 +463,8 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; } // BOUTON changement statut // BOUTON Copier (seulement pour les materiels qui sont CREATED et pour les ADMINet+ ou USER owner) + if ($CAN_COPY) $echoActionButton($this->Html, 'icon-plus', 'Copier ce matériel', 'add', $materiel->id, "Copier ce matériel"); + /* if ( $IS_CREATED and ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER) ) echo $this->Html->link(' Copier ce matériel', [ @@ -485,9 +477,11 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; 'style' => 'margin-right: 10px; margin-top: 10px; display: inline-block', 'escape' => false ]); + */ // BOUTON ETIQUETTE (si imprimante disponible) - if ($IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN_OR_MORE) { + if ($CAN_PRINT_LABEL) { + //if ($IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN_OR_MORE) { /* in_array($role, [ 'Administration', @@ -707,32 +701,6 @@ if ($USER_IS_ADMIN_OR_MORE) { nom_createur,$materiel->nom_responsable]) - * ) - * || ( - * $role == 'Responsable' - * && ( - * ( - * isset($priviledgedUser->groupes_metier_id) - * && $priviledgedUser->groupes_metier_id != $idGmNa - * && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id - * ) - * || - * ( - * isset($priviledgedUser->groupe_thematique_id) - * && $priviledgedUser->groupe_thematique_id != $idGtNa - * && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id - * ) - * ) - * ) - * ) { - */ echo $this->Html->link(__(''), [ 'controller' => 'Suivis', 'action' => 'edit', @@ -797,7 +765,7 @@ if ($USER_IS_ADMIN_OR_MORE) { emprunts as $emprunt) : + foreach ($materiel->emprunts as $emprunt) : $type = 'Externe'; $lieu = $emprunt['laboratoire']; if ($emprunt['emprunt_interne'] == 1) { @@ -812,33 +780,7 @@ foreach ($materiel->emprunts as $emprunt) : nom_createur,$materiel->nom_responsable]) - * ) - * || ( - * $role == 'Responsable' - * && ( - * ( - * isset($priviledgedUser->groupes_metier_id) - * && $priviledgedUser->groupes_metier_id != $idGmNa - * && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id - * ) - * || - * ( - * isset($priviledgedUser->groupe_thematique_id) - * && $priviledgedUser->groupe_thematique_id != $idGtNa - * && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id - * ) - * ) - * ) - * ) { - */ + if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER ) { echo $this->Html->link(__(''), [ 'controller' => 'Emprunts', 'action' => 'edit', @@ -919,33 +861,6 @@ foreach ($materiel->emprunts as $emprunt) : ]); } if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) { - /* - * if ( - * in_array($role, ['Administration','Administration Plus','Super Administrateur']) - * || - * ( - * $role == 'Utilisateur' - * && in_array($username, [$materiel->nom_createur,$materiel->nom_responsable]) - * ) - * || - * ( - * $role == 'Responsable' - * && ( - * ( - * isset($priviledgedUser->groupes_metier_id) - * && $priviledgedUser->groupes_metier_id != $idGmNa - * && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id - * ) - * || - * ( - * isset($priviledgedUser->groupe_thematique_id) - * && $priviledgedUser->groupe_thematique_id != $idGtNa - * && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id - * ) - * ) - * ) - * ) { - */ echo $this->Html->link(__(''), [ 'controller' => 'Documents', 'action' => 'edit', diff --git a/src/Template/Suivis/view.ctp b/src/Template/Suivis/view.ctp index 19e5bec..e84da8c 100755 --- a/src/Template/Suivis/view.ctp +++ b/src/Template/Suivis/view.ctp @@ -58,11 +58,15 @@ else $style = '"color: green"'; - $displayElement(__('Materiel'), $suivi->has('materiel') ? $this->Html->link($suivi->materiel->designation, [ - 'controller' => 'Materiels', - 'action' => 'view', - $suivi->materiel->id - ]) : ''); + $displayElement(__('Materiel'), $suivi->has('materiel') ? + $this->Html->link($suivi->materiel->designation, [ + 'controller' => 'Materiels', + 'action' => 'view', + $suivi->materiel->id + ]) + : + '' + ); $displayElement(__('Numéro interne (labo)'), $suivi->has('materiel') ? h($suivi->materiel->numero_laboratoire) : ''); $displayElement(__('Statut'), h($suivi->statut)); $displayElement(__('Prestataire'), h($suivi->organisme)); diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index 99476a5..3b7526b 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -125,6 +125,23 @@ class MaterielsControllerTest extends General { // Idem dataProviderRoles5 mais avec USER_from_ldap en plus: public function dataProviderRoles6() { return $this->ROLES6; } + + private function _checkMaterielExistsInViewsIndexAndViewAndInDatabase($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkMaterielExistsInViewsIndexAndView($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkMaterielExistsInViewIndex($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkMaterielExistsInViewView($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkMaterielExistsInDatabase($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkMaterielViewIsOK($role, $id, $designation=NULL, $num_inventaire=NULL) {} + private function _checkNbMaterielInIndexViewIs(bool $COPIED, $role, $nbmat, $designation=NULL, $num_inventaire=NULL) { + $this->get('/materiels/index'); + if (! $COPIED) + $this->assertResponseNotContains("Liste des matériels (".$nbmat.")", $role); + else { + $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role); + if (isset($designation)) $this->assertResponseContains($designation, "Le matériel ne s'ajoute pas correctement."); + if (isset($num_inventaire)) $this->assertResponseContains($num_inventaire, "La génération du n°de labo n'est pas bonne."); + } + } /* @@ -225,7 +242,7 @@ class MaterielsControllerTest extends General { */ } private function _testEasyACL(AppController $controller, $roleLong, $action, $expectedRule) { - $rule = $controller->isAuthorizedAction($controller, $roleLong, $action); + $rule = $controller->isAuthorizedAction2($controller, $roleLong, $action); $this->assertEquals($expectedRule, $rule, $roleLong.' do '.$action); } @@ -655,7 +672,7 @@ class MaterielsControllerTest extends General { $this->_testMatCopy(2, TRUE, $role, 1, $modified_data, 'TEST-2016-0015'); // 3) RULE MATERIEL.COPY.3 : - // Impossible de copier un matos de status superieur à CREATED (sauf pour SUPERADMIN) + // Impossible de copier un matos de statut superieur à CREATED (sauf pour SUPERADMIN) $this->_testMatCopy(3, $role=="SUPER", $role, 3); // 4) RULE MATERIEL.COPY.4 : @@ -666,26 +683,8 @@ class MaterielsControllerTest extends General { } - - private function _checkMaterielExistsInViewsIndexAndViewAndInDatabase($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkMaterielExistsInViewsIndexAndView($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkMaterielExistsInViewIndex($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkMaterielExistsInViewView($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkMaterielExistsInDatabase($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkMaterielViewIsOK($role, $id, $designation=NULL, $num_inventaire=NULL) {} - private function _checkNbMaterielInIndexViewIs(bool $COPIED, $role, $nbmat, $designation=NULL, $num_inventaire=NULL) { - $this->get('/materiels/index'); - if (! $COPIED) - $this->assertResponseNotContains("Liste des matériels (".$nbmat.")", $role); - else { - $this->assertResponseContains("Liste des matériels (".$nbmat.")", $role); - if (isset($designation)) $this->assertResponseContains($designation, "Le matériel ne s'ajoute pas correctement."); - if (isset($num_inventaire)) $this->assertResponseContains($num_inventaire, "La génération du n°de labo n'est pas bonne."); - } - } - - // Called by testMatCopy() - private function _testMatCopy(int $testnum, bool $COPIED, string $role, $id, array $materiel_new_data=[], $num_inventaire=NULL) { + // Called by testMatCopy() just above + private function _testMatCopy($testnum, $COPIED, $role, $id, array $materiel_new_data=[], $num_inventaire=NULL) { //debug("_testMatCopy numéro ".$testnum); echo("\n"); echo("_testMatCopy (with role ".$role.") numéro ".$testnum." :"); @@ -728,12 +727,13 @@ class MaterielsControllerTest extends General { if ($COPIED) { // On supprime le dernier materiel pour garder toujours la meme fixture de départ //debug(TableRegistry::getTableLocator()->get('Materiels')->find()->last()->id); - $matos_last = TableRegistry::getTableLocator()->get('Materiels')->find()->last(); - //debug($matos_last->id); + //$matos_last = TableRegistry::getTableLocator()->get('Materiels')->find()->last(); + $matos_last = $this->Materiels->find()->last(); + $this->Materiels->delete($matos_last); + // Ca marche aussi comme ça, mais c'est moins rapide: + //$this->post('/materiels/delete/'.$matos_last->id); //$this->post('/materiels/delete/15'); - $this->post('/materiels/delete/'.$matos_last->id); //$this->get('/materiels/view/15'); - //$this->assertResponseContains($designation, "Le matériel ne s'ajoute pas correctement."); } } @@ -1269,7 +1269,7 @@ class MaterielsControllerTest extends General { $this->post('/materiels/set-label-is-placed/11/view'); $this->get('/materiels/view/11'); - $this->assertResponseContains('Etiquette posée Oui', "Le placement de l'étiquette sur le materiel ne se fait pas correctement."); + $this->assertResponseContains('Etiquette posée Oui', "Le placement de l'étiquette sur le materiel ne se fait pas correctement."); } /** @@ -1283,7 +1283,7 @@ class MaterielsControllerTest extends General { $this->post('/materiels/set-label-is-not-placed/12/view'); $this->get('/materiels/view/12'); - $this->assertResponseContains('Etiquette posée Non', "L'enlevement de l'étiquette sur le materiel ne se fait pas correctement."); + $this->assertResponseContains('Etiquette posée Non', "L'enlevement de l'étiquette sur le materiel ne se fait pas correctement."); } /** -- libgit2 0.21.2