Commit 92acc9fe1235ab07235a9147638a5ec3e62ed4b7

Authored by Etienne Pallier
1 parent da7f42f6
Exists in master and in 1 other branch dev

Harmonisation (v3.7.9.26)

	- shortcuts dans AppController (donc disponible pour TOUS les
controleurs) :
		- $this->u = user courant
		- $this->e = entité courante
		- $this->e_id = id de l'entité courante
		- $this->a = action en cours
		- $this->c = controleur en cours (?)
		- $this->getEntity($id=null) // id=null si matos courant
	- harmonisation des noms de méthodes pour MaterielsController :
		- $this->isCreated($id=null) // id=null si matos courant
		- $this->belongsToUser($username, $id=null) // id=null si matos
courant
		 	et $this->belongsToCurrentUser($id=null) // id=null si matos courant
		- $this->isSameGroupAsUser($userlogin, $id=null) // id=null si matos
courant
		 	et $this->isSameGroupAsCurrentUser($id=null) // // id=null si matos
courant
	- harmonisation des méthodes dans entité Materiel (Entity) :
		- is_created, is_validated, is_tobearchived, is_archived
		- belongsToUser($username) // owned or declared by user
		- isSameGroupAsUser($usergroup1, $usergroup2) // is same group as user
groups
		- ...
	- poursuite généralisation utilisation de la fonction
isAuthorizedAction() partout où on a besoin de connaitre les droits d'un
user (view, index, ...)
@@ -53,16 +53,31 @@ Logiciel testé et validé sur les configurations suivantes : @@ -53,16 +53,31 @@ Logiciel testé et validé sur les configurations suivantes :
53 53
54 VERSION ACTUELLE 54 VERSION ACTUELLE
55 55
56 -Date: 05/05/2020  
57 -Version: 3.7.9.25 56 +Date: 07/05/2020
  57 +Version: 3.7.9.26
58 Author: EP 58 Author: EP
59 Commentaire: 59 Commentaire:
60 Diverses améliorations, simplifications, refactorisations, optimisations : 60 Diverses améliorations, simplifications, refactorisations, optimisations :
61 - - LOG : ajout de messages log sur actions importantes (add, edit, delete, ...)  
62 - - SIMPLIFICATION : Suppression des valeurs "N/A" (inutile et pose des problèmes) dans 4 tables : groupes_thematiques, groupes_metiers, sites, et type_documents  
63 - => remplacement des liens vers ces champs par NULL dans tables materiels, suivis, emprunts, et documents !!!  
64 - - Utilisation __toString() pour afficher une entité rapidement avec echo $entity  
65 - - bugfix ACLs isAuthorizedAction() de Materiels => début de généralisation de l'utilisation de cette fonction partout où on a besoin de connaitre les droits d'un user (view, index, ...) 61 + Harmonisation :
  62 + - shortcuts dans AppController (donc disponible pour TOUS les controleurs) :
  63 + - $this->u = user courant
  64 + - $this->e = entité courante
  65 + - $this->e_id = id de l'entité courante
  66 + - $this->a = action en cours
  67 + - $this->c = controleur en cours (?)
  68 + - $this->getEntity($id=null) // id=null si matos courant
  69 + - harmonisation des noms de méthodes pour MaterielsController :
  70 + - $this->isCreated($id=null) // id=null si matos courant
  71 + - $this->belongsToUser($username, $id=null) // id=null si matos courant
  72 + et $this->belongsToCurrentUser($id=null) // id=null si matos courant
  73 + - $this->isSameGroupAsUser($userlogin, $id=null) // id=null si matos courant
  74 + et $this->isSameGroupAsCurrentUser($id=null) // // id=null si matos courant
  75 + - harmonisation des méthodes dans entité Materiel (Entity) :
  76 + - is_created, is_validated, is_tobearchived, is_archived
  77 + - belongsToUser($username) // owned or declared by user
  78 + - isSameGroupAsUser($usergroup1, $usergroup2) // is same group as user groups
  79 + - ...
  80 + - poursuite généralisation utilisation de la fonction isAuthorizedAction() partout où on a besoin de connaitre les droits d'un user (view, index, ...)
66 81
67 IMPORTANT : 82 IMPORTANT :
68 - Pour connaitre la version actuelle, taper "./VERSION" 83 - Pour connaitre la version actuelle, taper "./VERSION"
src/Controller/AppController.php
@@ -66,15 +66,46 @@ class AppController extends Controller @@ -66,15 +66,46 @@ class AppController extends Controller
66 protected $SUPERADMIN_CAN_DO_EVERYTHING = false; // (prod) Par défaut (false), il se comporte un peu comme ADMIN 66 protected $SUPERADMIN_CAN_DO_EVERYTHING = false; // (prod) Par défaut (false), il se comporte un peu comme ADMIN
67 //protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!) 67 //protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!)
68 68
69 - protected $confLabinvent;  
70 - protected $action;  
71 - protected $entity;  
72 - protected $entity_id; 69 + protected $confLabinvent = null;
  70 +
  71 + // Le Controleur courant
  72 + protected $c = null;
  73 +
  74 + // L'Action courante
  75 + //protected $action = null;
  76 + protected $a = null;
  77 +
  78 + /* La table courante (objet Table)
  79 + *
  80 + * $t = TableRegistry::getTableLocator()->get('Materiels'); (ou autre entité telle que 'Suivis' par exemple...)
  81 + *
  82 + */
  83 + protected $t = null;
  84 +
  85 + /* L'entité courante (objet Entity)
  86 + *
  87 + * $e = $t->newEntity();
  88 + * ou encore
  89 + * $e = $t->get(12);
  90 + * ou encore
  91 + * $e = $t->find(...)->first();
  92 + * ou encore
  93 + * $e = $t->find(...)->last();
  94 + * ...
  95 + */
  96 + //protected $entity =null;
  97 + protected $e = null; // remplace $entity
  98 +
  99 + // id de l'entité courante (shortcut pour $this->e->id)
  100 + //protected $entity_id = null;
  101 + protected $e_id = null; // remplace $entity_id
  102 +
  103 + // L'utilisateur courant (objet User Entity)
73 // Current (priviledged) USER (if so, otherwise = NULL) from DB (Entity class) 104 // Current (priviledged) USER (if so, otherwise = NULL) from DB (Entity class)
74 //private $CURRENT_PRIVILEDGED_USER = null; 105 //private $CURRENT_PRIVILEDGED_USER = null;
75 - protected $current_user_entity = null; 106 + //protected $current_user_entity = null;
  107 + protected $u = null; // remplace $current_user_entity
76 protected $userName = null; 108 protected $userName = null;
77 -  
78 // Current ROLE (by default = "Utilisateur") 109 // Current ROLE (by default = "Utilisateur")
79 private $CURRENT_ROLE = null; 110 private $CURRENT_ROLE = null;
80 111
@@ -386,7 +417,8 @@ class AppController extends Controller @@ -386,7 +417,8 @@ class AppController extends Controller
386 /* (EP 20200428) 417 /* (EP 20200428)
387 * 418 *
388 * Méthode pour optimiser les accès à la BD. 419 * Méthode pour optimiser les accès à la BD.
389 - * Retourne l'entité concernée par l'action. 420 + * Retourne l'entité dont l'id est $id (en la mettant en cache pour éviter de la rechercher 2 fois)
  421 + * Si $id = null => retourne l'entité courante ($this->e) (entité concernée par l'action en cours)
390 * 422 *
391 * Cette méthode ne doit être appelée que lorsque c'est approprié 423 * Cette méthode ne doit être appelée que lorsque c'est approprié
392 * (actions 'edit', 'view', ..., mais pas 'add', 'find', 'index', ...) 424 * (actions 'edit', 'view', ..., mais pas 'add', 'find', 'index', ...)
@@ -395,37 +427,61 @@ class AppController extends Controller @@ -395,37 +427,61 @@ class AppController extends Controller
395 * Optimisation : l'entité n'est récupérée dans la BD qu'une seule fois pour toutes 427 * Optimisation : l'entité n'est récupérée dans la BD qu'une seule fois pour toutes
396 * 428 *
397 */ 429 */
  430 + // PHP7 only
  431 + //protected function getEntity($id=null) : Entity {
  432 + // PHP>=5
398 protected function getEntity($id=null) { 433 protected function getEntity($id=null) {
399 // Si pas d'id => exception (stop) 434 // Si pas d'id => exception (stop)
400 - //assert($this->entity_id>0);  
401 - if (!$this->entity_id && !$id) throw new \Exception(__("cette methode doit etre appelée avec un id déjà positionné !!!"));  
402 -  
403 - // Si l'entité actuellement en mémoire n'est pas la bonne, la mettre à null pour obliger à la recharger  
404 - if ($id && $this->entity && $this->entity->id != $id) $this->entity = null;  
405 -  
406 - // Les 3 sont possibles  
407 - //$model = $this->request->getParam('controller'); // ex: Materiels  
408 - //$model = $this->name; // ex: Materiels  
409 - $model = $this->modelClass; // ex: Materiels  
410 -  
411 - /*  
412 - debug("model2");  
413 - $model = $this->$model;  
414 - debug($model);  
415 - */  
416 -  
417 - //ex: if (! $this->entity) $this->entity = $this->Materiels->get($this->entity_id);  
418 - if (!$this->entity) $this->entity = $this->$model->get($this->entity_id); 435 + //assert($this->e_id>0);
  436 + if (!$this->e_id && !$id) throw new \Exception(__("cette methode doit etre appelée avec un id déjà positionné !!!"));
  437 +
  438 + // Par défaut id = id de l'entité courante
  439 + if (is_null($id)) $id = $this->e_id;
  440 +
  441 + // Si l'entité courante n'est pas la bonne, la mettre à null pour obliger à la recharger
  442 + //if ($id && $this->e && $this->e->id!=$id) $this->e = null;
  443 + //if ($id && $this->e && $this->e_id!=$id) $this->e = null;
  444 + if ($this->e && $this->e_id!=$id) $this->e = null;
  445 +
  446 + if (!$this->e) {
  447 + // Les 3 sont possibles
  448 + //$model = $this->request->getParam('controller'); // ex: Materiels
  449 + //$model = $this->name; // ex: Materiels
  450 + $model = $this->modelClass; // ex: Materiels
  451 + /*
  452 + debug("model2");
  453 + $model = $this->$model;
  454 + debug($model);
  455 + */
  456 + //ex: if (! $this->e) $this->e = $this->Materiels->get($this->e_id);
  457 + //$this->e = $this->$model->get($this->e_id);
  458 + $this->e = $this->$model->get($id);
  459 + $this->e_id = $this->e->id;
  460 + }
419 /* 461 /*
420 * Avec les entités associées : 462 * Avec les entités associées :
421 - if (! $this->entity) $this->entity = $this->$model->get($this->entity_id, [ 463 + if (! $this->e) $this->e = $this->$model->get($this->e_id, [
422 'contain' => ['Comments'] 464 'contain' => ['Comments']
423 ]); 465 ]);
424 */ 466 */
425 - //debug($this->entity);  
426 - return $this->entity; 467 + //debug($this->e);
  468 + return $this->e;
427 } 469 }
428 470
  471 +
  472 + public function getUsersTable() { return TableRegistry::getTableLocator()->get('Users'); }
  473 + // Retourne l'entity User qui a le login $userlogin ("epallier")
  474 + public function getUserByLogin($userlogin) {
  475 + if ($this->u && $this->u->username == $userlogin) return $this->u;
  476 + //return $users->find()->where(['username' => $userlogin])->first();
  477 + return $this->getUsersTable()->findByUsername($userlogin);
  478 + }
  479 + // Retourne l'entity User qui a le nom complet $fullname ("Pallier Etienne")
  480 + public function getUserByFullname($fullname) {
  481 + if ($this->u && $this->u->nom == $fullname) return $this->u;
  482 + //return $users->find()->where(['username' => $userlogin])->first();
  483 + return $this->getUsersTable()->findByNom($fullname);
  484 + }
429 485
430 /** 486 /**
431 * (EP) 487 * (EP)
@@ -512,14 +568,14 @@ class AppController extends Controller @@ -512,14 +568,14 @@ class AppController extends Controller
512 568
513 // error_log($action); 569 // error_log($action);
514 //$this->myDebug("- action is $action"); 570 //$this->myDebug("- action is $action");
515 - $this->myDebug("- action is $this->action"); 571 + $this->myDebug("- action is $this->a");
516 572
517 // On autorise ou pas l’action demandée : 573 // On autorise ou pas l’action demandée :
518 // - Super-Admin peut accéder à toutes les actions 574 // - Super-Admin peut accéder à toutes les actions
519 //if ($role == 'Super Administrateur') return true; 575 //if ($role == 'Super Administrateur') return true;
520 if ($this->USER_IS_SUPERADMIN) return true; 576 if ($this->USER_IS_SUPERADMIN) return true;
521 // - Actions générales accessibles à TOUS les roles (profils), pour TOUT controleur 577 // - Actions générales accessibles à TOUS les roles (profils), pour TOUT controleur
522 - if (in_array($this->action, [ 578 + if (in_array($this->a, [
523 'index', 579 'index',
524 'view', 580 'view',
525 'add', 581 'add',
@@ -564,7 +620,7 @@ class AppController extends Controller @@ -564,7 +620,7 @@ class AppController extends Controller
564 } 620 }
565 public function getUserEntity($user = null) { 621 public function getUserEntity($user = null) {
566 //if (! $this->CURRENT_PRIVILEDGED_USER) { 622 //if (! $this->CURRENT_PRIVILEDGED_USER) {
567 - if (! $this->current_user_entity) { 623 + if (! $this->u) {
568 $configuration = $this->confLabinvent; 624 $configuration = $this->confLabinvent;
569 $ldapAuthType = $configuration->ldap_authenticationType; 625 $ldapAuthType = $configuration->ldap_authenticationType;
570 $username = $user ? $user[$ldapAuthType] : $this->LdapAuth->user($ldapAuthType); 626 $username = $user ? $user[$ldapAuthType] : $this->LdapAuth->user($ldapAuthType);
@@ -575,9 +631,9 @@ class AppController extends Controller @@ -575,9 +631,9 @@ class AppController extends Controller
575 ->first(); 631 ->first();
576 // ->where(['username' => $this->LdapAuth->user('cn')[0]]) 632 // ->where(['username' => $this->LdapAuth->user('cn')[0]])
577 // if (! $priviledgedUser) $priviledgedUser = "Unpriviledged User (not in table utilisateurs)"; 633 // if (! $priviledgedUser) $priviledgedUser = "Unpriviledged User (not in table utilisateurs)";
578 - $this->current_user_entity = $priviledgedUser; 634 + $this->u = $priviledgedUser;
579 } 635 }
580 - return $this->current_user_entity; 636 + return $this->u;
581 } 637 }
582 638
583 public function getUserRole($user = null) 639 public function getUserRole($user = null)
@@ -804,22 +860,25 @@ class AppController extends Controller @@ -804,22 +860,25 @@ class AppController extends Controller
804 // Affichages pour debug 860 // Affichages pour debug
805 //pr($event); 861 //pr($event);
806 $this->myDebug("step 1B (general): AppController.beforeFilter()"); 862 $this->myDebug("step 1B (general): AppController.beforeFilter()");
  863 +
807 $controllerName = $this->request->getParam('controller'); 864 $controllerName = $this->request->getParam('controller');
808 $this->myDebug("- controller passed : $controllerName"); 865 $this->myDebug("- controller passed : $controllerName");
  866 +
809 $passedArgs = $this->request->getParam('pass'); 867 $passedArgs = $this->request->getParam('pass');
810 $this->myDebug("- args passed : ", $passedArgs); 868 $this->myDebug("- args passed : ", $passedArgs);
  869 +
811 $query = $this->request->getQueryParams(); 870 $query = $this->request->getQueryParams();
812 $this->myDebug("- query passed : ", $query); 871 $this->myDebug("- query passed : ", $query);
813 872
814 // Initialisations pour la suite 873 // Initialisations pour la suite
815 // - L'entité concernée par l'action 874 // - L'entité concernée par l'action
816 // Par défaut null car certaines actions n'ont pas d'entité (ex : 'add', 'find', 'index', ...) 875 // Par défaut null car certaines actions n'ont pas d'entité (ex : 'add', 'find', 'index', ...)
817 - $this->entity = null; 876 + $this->e = null;
818 // - L'action demandée et son id le cas échéant (nul par défaut, égal 0) 877 // - L'action demandée et son id le cas échéant (nul par défaut, égal 0)
819 - $this->action = $this->getActionPassed();  
820 - $this->myDebug("- action passed : ".$this->action);  
821 - $this->entity_id = $this->getIdPassed();  
822 - $this->myDebug("- id passed : ".$this->action); 878 + $this->a = $this->getActionPassed();
  879 + $this->myDebug("- action passed : ".$this->a);
  880 + $this->e_id = $this->getIdPassed();
  881 + $this->myDebug("- id passed : ".$this->a);
823 882
824 parent::beforeFilter($event); 883 parent::beforeFilter($event);
825 884
@@ -867,11 +926,11 @@ class AppController extends Controller @@ -867,11 +926,11 @@ class AppController extends Controller
867 // ATTENTION, $priviledgedUser = NULL si l'utilisateur courant n'est pas un utilisateur privilégié 926 // ATTENTION, $priviledgedUser = NULL si l'utilisateur courant n'est pas un utilisateur privilégié
868 // (c'est à dire s'il n'est pas dans la table "utilisateurs") 927 // (c'est à dire s'il n'est pas dans la table "utilisateurs")
869 //$this->priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists(); 928 //$this->priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists();
870 - $this->current_user_entity = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists(); 929 + $this->u = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists();
871 //$role = $this->getUserRole(); 930 //$role = $this->getUserRole();
872 $this->userRole = $this->getUserRole(); 931 $this->userRole = $this->getUserRole();
873 $profile = self::PROFILES["$this->userRole"]; 932 $profile = self::PROFILES["$this->userRole"];
874 - $this->myDebug("- priviledgedUser is {$this->current_user_entity}"); 933 + $this->myDebug("- priviledgedUser is {$this->u}");
875 $this->myDebug("- userRole is {$this->getUserRole()}", "- profile is: $profile"); 934 $this->myDebug("- userRole is {$this->getUserRole()}", "- profile is: $profile");
876 // L'utilisateur connecté (return null si pas connecté) 935 // L'utilisateur connecté (return null si pas connecté)
877 // $this->Auth->user('id'); 936 // $this->Auth->user('id');
@@ -891,7 +950,7 @@ class AppController extends Controller @@ -891,7 +950,7 @@ class AppController extends Controller
891 $this->set('role', $this->userRole); 950 $this->set('role', $this->userRole);
892 $this->set('profile', $profile); 951 $this->set('profile', $profile);
893 $this->set('username', $this->getCurrentUserName()); 952 $this->set('username', $this->getCurrentUserName());
894 - $this->set('priviledgedUser', $this->current_user_entity); 953 + $this->set('priviledgedUser', $this->u);
895 954
896 $this->set('USER_IS_UTILISATEUR', $this->USER_IS_UTILISATEUR); 955 $this->set('USER_IS_UTILISATEUR', $this->USER_IS_UTILISATEUR);
897 $this->set('USER_IS_ADMIN', $this->USER_IS_ADMIN); 956 $this->set('USER_IS_ADMIN', $this->USER_IS_ADMIN);
@@ -1197,24 +1256,24 @@ class AppController extends Controller @@ -1197,24 +1256,24 @@ class AppController extends Controller
1197 * @todo EP 08/2017 Nouvelle organisation des ACL avec $easyACL 1256 * @todo EP 08/2017 Nouvelle organisation des ACL avec $easyACL
1198 */ 1257 */
1199 //$action = $this->getActionPassed(); 1258 //$action = $this->getActionPassed();
1200 - if (in_array($this->action, array( 1259 + if (in_array($this->a, array(
1201 'add', 1260 'add',
1202 'edit', 1261 'edit',
1203 'view', 1262 'view',
1204 'index' 1263 'index'
1205 ))) { 1264 ))) {
1206 - $hiddenFields = $this->getHiddenFieldsForAction($this->action); 1265 + $hiddenFields = $this->getHiddenFieldsForAction($this->a);
1207 $this->set('hiddenFields', $hiddenFields); 1266 $this->set('hiddenFields', $hiddenFields);
1208 $this->myDebug(compact("hiddenFields")); 1267 $this->myDebug(compact("hiddenFields"));
1209 - if (in_array($this->action, array( 1268 + if (in_array($this->a, array(
1210 'add', 1269 'add',
1211 'edit' 1270 'edit'
1212 ))) { 1271 ))) {
1213 - $mandatoryFields = $this->getMandatoryFieldsForAction($this->action); 1272 + $mandatoryFields = $this->getMandatoryFieldsForAction($this->a);
1214 $this->set('mandatoryFields', $mandatoryFields); 1273 $this->set('mandatoryFields', $mandatoryFields);
1215 - $readOnlyFields = $this->getReadOnlyFieldsForAction($this->action); 1274 + $readOnlyFields = $this->getReadOnlyFieldsForAction($this->a);
1216 $this->set('readOnlyFields', $readOnlyFields); 1275 $this->set('readOnlyFields', $readOnlyFields);
1217 - $haveDefaultValueFields = $this->getDefaultValueFieldsForAction($this->action); 1276 + $haveDefaultValueFields = $this->getDefaultValueFieldsForAction($this->a);
1218 1277
1219 // only for DEBUG : 1278 // only for DEBUG :
1220 //$this->myDebug("mandat, ro, default fields=", $mandatoryFields, $readOnlyFields, $haveDefaultValueFields); 1279 //$this->myDebug("mandat, ro, default fields=", $mandatoryFields, $readOnlyFields, $haveDefaultValueFields);
src/Controller/DocumentsController.php
@@ -269,8 +269,9 @@ class DocumentsController extends AppController @@ -269,8 +269,9 @@ class DocumentsController extends AppController
269 * @param $IS_ADD: True = add ; False = edit 269 * @param $IS_ADD: True = add ; False = edit
270 * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. 270 * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise.
271 */ 271 */
272 - private function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null) {  
273 - 272 + protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null,
  273 + // uniquement à cause de parent::add_or_edit() :
  274 + $entity_name=null, array $associated_entities=[], $with_parent=false) {
274 $this->myDebug("step 3: DocumentsController.add_or_edit()"); 275 $this->myDebug("step 3: DocumentsController.add_or_edit()");
275 276
276 $document = $IS_ADD ? $this->Documents->newEntity() : $this->Documents->get($id, ['contain' => []]); 277 $document = $IS_ADD ? $this->Documents->newEntity() : $this->Documents->get($id, ['contain' => []]);
src/Controller/MaterielsController.php
@@ -6,6 +6,7 @@ use Cake\ORM\TableRegistry; @@ -6,6 +6,7 @@ use Cake\ORM\TableRegistry;
6 use Cake\Mailer\Email; 6 use Cake\Mailer\Email;
7 #use Cake\ORM\Locator\TableLocator; 7 #use Cake\ORM\Locator\TableLocator;
8 use Cake\Auth\FallbackPasswordHasher; 8 use Cake\Auth\FallbackPasswordHasher;
  9 +use App\Model\Entity\Materiel;
9 10
10 /** 11 /**
11 * Materiels Controller 12 * Materiels Controller
@@ -260,28 +261,28 @@ class MaterielsController extends AppController { @@ -260,28 +261,28 @@ class MaterielsController extends AppController {
260 $this->myDebug("step 2A (specific): MaterielsController.isAuthorized(user)"); 261 $this->myDebug("step 2A (specific): MaterielsController.isAuthorized(user)");
261 $this->myDebug("- user is:", $user); 262 $this->myDebug("- user is:", $user);
262 263
263 - //$this->current_user_entity = $this->getUserEntity();  
264 - assert($this->current_user_entity != null);  
265 - if ($this->current_user_entity == null) throw new \Exception("pas d'utilisateur défini !!!"); 264 + //$this->u = $this->getUserEntity();
  265 + assert($this->u != null);
  266 + if ($this->u == null) throw new \Exception("pas d'utilisateur défini !!!");
266 267
267 if ($this->isLabinventDebugMode()) { 268 if ($this->isLabinventDebugMode()) {
268 269
269 - debug($this->current_user_entity); 270 + debug($this->u);
270 271
271 debug("user is xxx :"); 272 debug("user is xxx :");
272 - debug($this->current_user_entity->is_user);  
273 - debug($this->current_user_entity->is_resp);  
274 - debug($this->current_user_entity->is_admin);  
275 - debug($this->current_user_entity->is_adminplus);  
276 - debug($this->current_user_entity->is_super); 273 + debug($this->u->is_user);
  274 + debug($this->u->is_resp);
  275 + debug($this->u->is_admin);
  276 + debug($this->u->is_adminplus);
  277 + debug($this->u->is_super);
277 278
278 debug("user is xxx or more :"); 279 debug("user is xxx or more :");
279 - debug($this->current_user_entity->is_resp_or_more);  
280 - debug($this->current_user_entity->is_admin_or_more); 280 + debug($this->u->is_resp_or_more);
  281 + debug($this->u->is_admin_or_more);
281 282
282 debug("user is xxx or less :"); 283 debug("user is xxx or less :");
283 - debug($this->current_user_entity->is_resp_or_less);  
284 - debug($this->current_user_entity->is_admin_or_less); 284 + debug($this->u->is_resp_or_less);
  285 + debug($this->u->is_admin_or_less);
285 286
286 } 287 }
287 288
@@ -318,7 +319,7 @@ class MaterielsController extends AppController { @@ -318,7 +319,7 @@ class MaterielsController extends AppController {
318 319
319 // $id = (int) $this->request->getParam('pass.0'); 320 // $id = (int) $this->request->getParam('pass.0');
320 //$id = $this->getIdPassed(); 321 //$id = $this->getIdPassed();
321 - ///$this->entity_id = $this->getIdPassed(); 322 + ///$this->e_id = $this->getIdPassed();
322 //debug($id); 323 //debug($id);
323 324
324 // ACTIONS QUI SONT TOUJOURS AUTORISÉES QUELQUE SOIT LE PROFIL 325 // ACTIONS QUI SONT TOUJOURS AUTORISÉES QUELQUE SOIT LE PROFIL
@@ -340,7 +341,7 @@ class MaterielsController extends AppController { @@ -340,7 +341,7 @@ class MaterielsController extends AppController {
340 return $article->user_id === $user['id']; 341 return $article->user_id === $user['id'];
341 */ 342 */
342 343
343 - $id = $this->entity_id; 344 + $id = $this->e_id;
344 345
345 /* (EP 20200430 déplacé dans isAuthorizedAction()) 346 /* (EP 20200430 déplacé dans isAuthorizedAction())
346 // On autorise ou pas l’action demandée : 347 // On autorise ou pas l’action demandée :
@@ -348,9 +349,9 @@ class MaterielsController extends AppController { @@ -348,9 +349,9 @@ class MaterielsController extends AppController {
348 // (sauf certaines actions afin de lui donner un comportement proche de ADMIN) 349 // (sauf certaines actions afin de lui donner un comportement proche de ADMIN)
349 if ($this->USER_IS_SUPERADMIN) { 350 if ($this->USER_IS_SUPERADMIN) {
350 // edit ou add by copy => ssi CREATED 351 // edit ou add by copy => ssi CREATED
351 - if ( $this->action =='edit' || ($this->action=='add' && $id>0) ) return $this->isCreated($id); 352 + if ( $this->a =='edit' || ($this->a=='add' && $id>0) ) return $this->isCreated($id);
352 // archivage => admin only 353 // archivage => admin only
353 - //if ($this->action == 'statusArchived') return false; 354 + //if ($this->a == 'statusArchived') return false;
354 // tout le reste => ok 355 // tout le reste => ok
355 return true; 356 return true;
356 } 357 }
@@ -360,12 +361,12 @@ class MaterielsController extends AppController { @@ -360,12 +361,12 @@ class MaterielsController extends AppController {
360 * //return $this->isAuthorizedAction($this, $user, $role, $action, $id); 361 * //return $this->isAuthorizedAction($this, $user, $role, $action, $id);
361 * Tout le reste en dessous de cette ligne devient inutile !!! 362 * Tout le reste en dessous de cette ligne devient inutile !!!
362 */ 363 */
363 - $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->action, $id, $user)); 364 + $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user));
364 return $this->isAuthorizedAction(); 365 return $this->isAuthorizedAction();
365 /* 366 /*
366 return $this->isAuthorizedAction( 367 return $this->isAuthorizedAction(
367 $this->userRole, 368 $this->userRole,
368 - $this->action, $id, 369 + $this->a, $id,
369 $user, 370 $user,
370 $this->userCname 371 $this->userCname
371 ); 372 );
@@ -389,13 +390,13 @@ class MaterielsController extends AppController { @@ -389,13 +390,13 @@ class MaterielsController extends AppController {
389 * 390 *
390 */ 391 */
391 private function isAuthorizedAction($action = null) { 392 private function isAuthorizedAction($action = null) {
392 - if (!$action) $action = $this->action; 393 + if (!$action) $action = $this->a;
393 //$id = $this->getIdPassed(); 394 //$id = $this->getIdPassed();
394 - //debug("action $action, id $this->entity_id"); 395 + //debug("action $action, id $this->e_id");
395 //return $this->isAuthorizedActionFor($action, $this->getIdPassed(), $this->userRole, $this->userFromSession, $this->userCname); 396 //return $this->isAuthorizedActionFor($action, $this->getIdPassed(), $this->userRole, $this->userFromSession, $this->userCname);
396 return $this->isAuthorizedActionFor( 397 return $this->isAuthorizedActionFor(
397 - $action ? $action : $this->action,  
398 - $this->entity_id, 398 + $action ? $action : $this->a,
  399 + $this->e_id,
399 $this->userRole, 400 $this->userRole,
400 $this->userFromSession, $this->userCname 401 $this->userFromSession, $this->userCname
401 ); 402 );
@@ -419,7 +420,7 @@ class MaterielsController extends AppController { @@ -419,7 +420,7 @@ class MaterielsController extends AppController {
419 420
420 //$this->myDebug("- user is ", $user); 421 //$this->myDebug("- user is ", $user);
421 422
422 - //debug($this->entity->tititoto()); 423 + //debug($this->e->tititoto());
423 // Raccourci pour SUPERADMIN : par défaut il a (presque) TOUS les droits, donc c'est vite vu ! 424 // Raccourci pour SUPERADMIN : par défaut il a (presque) TOUS les droits, donc c'est vite vu !
424 // (sauf certaines actions afin de lui donner un comportement proche de ADMIN) 425 // (sauf certaines actions afin de lui donner un comportement proche de ADMIN)
425 if ($this->USER_IS_SUPERADMIN) { 426 if ($this->USER_IS_SUPERADMIN) {
@@ -443,14 +444,14 @@ class MaterielsController extends AppController { @@ -443,14 +444,14 @@ class MaterielsController extends AppController {
443 if ( ($action=='add' && $id>0) || in_array($action,['edit', 'delete', 'statusValidated']) ) { 444 if ( ($action=='add' && $id>0) || in_array($action,['edit', 'delete', 'statusValidated']) ) {
444 return $this->isCreated($id); 445 return $this->isCreated($id);
445 } 446 }
446 - //if ($this->action==’statusValidated’) return $this->isCreated($id); 447 + //if ($this->a==’statusValidated’) return $this->isCreated($id);
447 if ($action=='statusToBeArchived') return $this->isValidated($id); 448 if ($action=='statusToBeArchived') return $this->isValidated($id);
448 if ($action=='statusArchived') return $this->isToBeArchived($id); 449 if ($action=='statusArchived') return $this->isToBeArchived($id);
449 if ($action=='statusCreated') return ! $this->isCreated($id); 450 if ($action=='statusCreated') return ! $this->isCreated($id);
450 if ($action=='printLabelRuban') return $this->confLabinvent->hasPrinter && $this->isValidated($id); 451 if ($action=='printLabelRuban') return $this->confLabinvent->hasPrinter && $this->isValidated($id);
451 } 452 }
452 // archivage => admin only 453 // archivage => admin only
453 - //if ($this->action == 'statusArchived') return false; 454 + //if ($this->a == 'statusArchived') return false;
454 // tout le reste => ok 455 // tout le reste => ok
455 return true; 456 return true;
456 } 457 }
@@ -498,7 +499,10 @@ class MaterielsController extends AppController { @@ -498,7 +499,10 @@ class MaterielsController extends AppController {
498 //$isHis = $this->isHis($id, $user); 499 //$isHis = $this->isHis($id, $user);
499 //$isHis = $this->isHis($id); 500 //$isHis = $this->isHis($id);
500 $isHis = $this->belongsToCurrentUser($id); 501 $isHis = $this->belongsToCurrentUser($id);
501 - return $role=='Utilisateur' ? $isHis : $isHis||$this->isRespGroup($id, $userCname); 502 + //return $role=='Utilisateur' ? $isHis : $isHis||$this->isRespGroup($id, $userCname);
  503 + //return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsUser($id, $userCname);
  504 + ///////return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsUser($userCname, $id);
  505 + return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsCurrentUser($id);
502 /* 506 /*
503 if ($role=='Utilisateur') return $isHis; 507 if ($role=='Utilisateur') return $isHis;
504 // Responsable 508 // Responsable
@@ -634,9 +638,9 @@ class MaterielsController extends AppController { @@ -634,9 +638,9 @@ class MaterielsController extends AppController {
634 // if ($action == 'edit') { 638 // if ($action == 'edit') {
635 case 'edit': 639 case 'edit':
636 /S 640 /S
637 - debug("entity is"); debug($this->entity); 641 + debug("entity is"); debug($this->e);
638 $this->getEntity(); 642 $this->getEntity();
639 - debug("entity is"); debug($this->entity); 643 + debug("entity is"); debug($this->e);
640 S/ 644 S/
641 // BETTER: 645 // BETTER:
642 // $id = (int) $this->request->getAttribute('params')['pass'][0]; 646 // $id = (int) $this->request->getAttribute('params')['pass'][0];
@@ -752,7 +756,9 @@ class MaterielsController extends AppController { @@ -752,7 +756,9 @@ class MaterielsController extends AppController {
752 case 'statusCreated': 756 case 'statusCreated':
753 if ($this->isCreated($id)) return FALSE; 757 if ($this->isCreated($id)) return FALSE;
754 if ($this->USER_IS_USER()) return FALSE; 758 if ($this->USER_IS_USER()) return FALSE;
755 - if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname); 759 + //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($id, $userCname);
  760 + /////if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
  761 + if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
756 return true; 762 return true;
757 763
758 // VALIDATION d'un materiel (passe à VALIDATED) 764 // VALIDATION d'un materiel (passe à VALIDATED)
@@ -760,7 +766,8 @@ class MaterielsController extends AppController { @@ -760,7 +766,8 @@ class MaterielsController extends AppController {
760 //$id = (int) $this->request->getAttribute('params')['pass'][0]; 766 //$id = (int) $this->request->getAttribute('params')['pass'][0];
761 if (! $this->isCreated($id)) return FALSE; 767 if (! $this->isCreated($id)) return FALSE;
762 if ($this->USER_IS_USER()) return FALSE; 768 if ($this->USER_IS_USER()) return FALSE;
763 - if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname); 769 + //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
  770 + if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
764 return true; 771 return true;
765 772
766 /* 773 /*
@@ -792,7 +799,8 @@ class MaterielsController extends AppController { @@ -792,7 +799,8 @@ class MaterielsController extends AppController {
792 case 'statusToBeArchived': 799 case 'statusToBeArchived':
793 if (! $this->isValidated($id)) return FALSE; 800 if (! $this->isValidated($id)) return FALSE;
794 if ($this->USER_IS_USER()) return FALSE; 801 if ($this->USER_IS_USER()) return FALSE;
795 - if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname); 802 + //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
  803 + if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
796 return TRUE; 804 return TRUE;
797 /* 805 /*
798 if ($this->isValidated($id)) 806 if ($this->isValidated($id))
@@ -870,11 +878,13 @@ class MaterielsController extends AppController { @@ -870,11 +878,13 @@ class MaterielsController extends AppController {
870 * cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html 878 * cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
871 */ 879 */
872 // True if materiel with id $id is owned by $nomCreateur 880 // True if materiel with id $id is owned by $nomCreateur
873 - public function isOwnedBy($id, $user_name)  
874 - { 881 + //public function isOwnedBy($id, $username)
  882 + public function belongsToUser($username, $id=null) {
  883 + if (is_null($id)) $id = $this->e_id;
875 //$entity = $this->getEntity($id); 884 //$entity = $this->getEntity($id);
876 //return in_array($user_name, [$entity->nom_createur, $entity->nom_responsable]); 885 //return in_array($user_name, [$entity->nom_createur, $entity->nom_responsable]);
877 - return $this->getEntity($id)->isOwnedOrDeclaredByUser($user_name); 886 + //return $this->getEntity($id)->isOwnedOrDeclaredByUser($username);
  887 + return $this->getEntity($id)->belongsToUser($username);
878 /* 888 /*
879 return ($this->Materiels->exists([ 889 return ($this->Materiels->exists([
880 'id' => $id, 890 'id' => $id,
@@ -887,22 +897,42 @@ class MaterielsController extends AppController { @@ -887,22 +897,42 @@ class MaterielsController extends AppController {
887 } 897 }
888 898
889 // True if materiel with id $id is owned by current user 899 // True if materiel with id $id is owned by current user
  900 + // Par défaut, si $id = null => id du materiel courant
890 //public function isHis($id, $userFromSession) { 901 //public function isHis($id, $userFromSession) {
891 //public function isHis($matos_id) { 902 //public function isHis($matos_id) {
892 - public function belongsToCurrentUser($id) { 903 + public function belongsToCurrentUser($id=null) {
  904 + if (is_null($id)) $id = $this->e_id;
893 //return ($this->isOwnedBy($id, $userFromSession['sn'][0] . ' ' . $userFromSession['givenname'][0])); 905 //return ($this->isOwnedBy($id, $userFromSession['sn'][0] . ' ' . $userFromSession['givenname'][0]));
894 - return $this->isOwnedBy($id, $this->current_user_entity->nom); 906 + //return $this->isOwnedBy($id, $this->u->nom);
  907 + return $this->belongsToUser($this->u->nom, $id);
895 } 908 }
896 909
897 -  
898 - public function isRespGroup($id, $loginResponsable)  
899 - { 910 + // Par défaut, si $id = null => id du materiel courant
  911 + public function isSameGroupAsCurrentUser($id=null) {
  912 + if (is_null($id)) $id = $this->e_id;
  913 + $u = $this->u;
  914 + return $this->isSameGroupAsUser($u->username, $id);
  915 + }
  916 +
  917 + // Par défaut, si $id = null => id du materiel courant
  918 + //public function isRespGroup($id, $loginResponsable)
  919 + //public function isSameGroupAsUser($id, $loginResponsable)
  920 + public function isSameGroupAsUser($userlogin, $id=null) {
  921 + if (is_null($id)) $id = $this->e_id;
900 // Get user 922 // Get user
  923 + if ($this->u && $this->u->username == $userlogin)
  924 + $u = $this->u;
  925 + else
  926 + $u = $this->getUserByLogin($userlogin);
  927 + /*
901 $u = TableRegistry::getTableLocator()->get('Users') 928 $u = TableRegistry::getTableLocator()->get('Users')
902 ->find() 929 ->find()
903 - ->where(['username' => $loginResponsable]) 930 + ->where(['username' => $userlogin])
904 ->first(); 931 ->first();
  932 + */
  933 + return $this->getEntity($id)->isSameGroupAsUser($u->groupes_metier_id, $u->groupes_thematique_id);
905 934
  935 + /* OLD WAY
906 // Responsable groupe métier ? 936 // Responsable groupe métier ?
907 $group = 'groupes_metier'; 937 $group = 'groupes_metier';
908 $group_fk = $group.'_id'; 938 $group_fk = $group.'_id';
@@ -914,15 +944,15 @@ class MaterielsController extends AppController { @@ -914,15 +944,15 @@ class MaterielsController extends AppController {
914 ->where(['nom =' => 'N/A']) 944 ->where(['nom =' => 'N/A'])
915 ->first()['id'] 945 ->first()['id']
916 ) return $this->getEntity($id)->$group_fk == $u[$group_fk]; 946 ) return $this->getEntity($id)->$group_fk == $u[$group_fk];
917 - /* 947 + /S
918 return $this->Materiels->exists([ 948 return $this->Materiels->exists([
919 'id' => $id, 949 'id' => $id,
920 'groupes_metier_id' => $u['groupes_metier_id'] 950 'groupes_metier_id' => $u['groupes_metier_id']
921 ]); 951 ]);
922 - */ 952 + S/
923 953
924 // Responsable groupe thématique ? 954 // Responsable groupe thématique ?
925 - $group = 'groupe_thematique'; 955 + $group = 'groupes_thematique';
926 $group_fk = $group.'_id'; 956 $group_fk = $group.'_id';
927 if ( 957 if (
928 $u[$group_fk] !== null 958 $u[$group_fk] !== null
@@ -932,20 +962,23 @@ class MaterielsController extends AppController { @@ -932,20 +962,23 @@ class MaterielsController extends AppController {
932 ->where(['nom =' => 'N/A']) 962 ->where(['nom =' => 'N/A'])
933 ->first()['id'] 963 ->first()['id']
934 ) return $this->getEntity($id)->$group_fk == $u[$group_fk]; 964 ) return $this->getEntity($id)->$group_fk == $u[$group_fk];
935 - /* 965 + /S
936 return $this->Materiels->exists([ 966 return $this->Materiels->exists([
937 'id' => $id, 967 'id' => $id,
938 'groupes_thematique_id' => $u['groupe_thematique_id'] 968 'groupes_thematique_id' => $u['groupe_thematique_id']
939 ]); 969 ]);
940 - */ 970 + S/
941 971
942 // sinon, pas responsable de groupe 972 // sinon, pas responsable de groupe
943 return false; 973 return false;
  974 + */
944 975
945 - } // isRespGroup 976 + } // isSameGroupAsUser (ex isRespGroup)
946 977
947 978
948 - public function hasStatus($id, $status) { 979 + // $id = id du materiel => si null alors id du materiel courant
  980 + public function hasStatus($id=null, $status) {
  981 + if (is_null($id)) $id = $this->e_id;
949 return $this->getEntity($id)->status == $status; 982 return $this->getEntity($id)->status == $status;
950 /* 983 /*
951 return $this->Materiels->exists([ 984 return $this->Materiels->exists([
@@ -954,10 +987,10 @@ class MaterielsController extends AppController { @@ -954,10 +987,10 @@ class MaterielsController extends AppController {
954 ]); 987 ]);
955 */ 988 */
956 } 989 }
957 - public function isCreated($id) { return $this->hasStatus($id, 'CREATED'); }  
958 - public function isValidated($id) { return $this->hasStatus($id, 'VALIDATED'); }  
959 - public function isToBeArchived($id) { return $this->hasStatus($id, 'TOBEARCHIVED'); }  
960 - public function isArchived($id) { return $this->hasStatus($id, 'ARCHIVED'); } 990 + public function isCreated($id=null) { return $this->hasStatus($id, 'CREATED'); }
  991 + public function isValidated($id=null) { return $this->hasStatus($id, 'VALIDATED'); }
  992 + public function isToBeArchived($id=null) { return $this->hasStatus($id, 'TOBEARCHIVED'); }
  993 + public function isArchived($id=null) { return $this->hasStatus($id, 'ARCHIVED'); }
961 994
962 995
963 /** 996 /**
@@ -1097,6 +1130,7 @@ class MaterielsController extends AppController { @@ -1097,6 +1130,7 @@ class MaterielsController extends AppController {
1097 ]); 1130 ]);
1098 } // index() 1131 } // index()
1099 1132
  1133 +
1100 /** 1134 /**
1101 * View method 1135 * View method
1102 * 1136 *
@@ -1134,6 +1168,7 @@ class MaterielsController extends AppController { @@ -1134,6 +1168,7 @@ class MaterielsController extends AppController {
1134 'Fournisseurs' 1168 'Fournisseurs'
1135 ] 1169 ]
1136 ]); 1170 ]);
  1171 + $e = $materiel;
1137 1172
1138 /* 1173 /*
1139 * (EP) TODO: 1174 * (EP) TODO:
@@ -1151,44 +1186,75 @@ class MaterielsController extends AppController { @@ -1151,44 +1186,75 @@ class MaterielsController extends AppController {
1151 * 1186 *
1152 */ 1187 */
1153 1188
  1189 + /*
1154 $IS_CREATED = ($materiel->status == 'CREATED'); 1190 $IS_CREATED = ($materiel->status == 'CREATED');
1155 $IS_VALIDATED = ($materiel->status == 'VALIDATED'); 1191 $IS_VALIDATED = ($materiel->status == 'VALIDATED');
1156 $IS_TOBEARCHIVED = ($materiel->status == 'TOBEARCHIVED'); 1192 $IS_TOBEARCHIVED = ($materiel->status == 'TOBEARCHIVED');
1157 $IS_ARCHIVED = ($materiel->status == 'ARCHIVED'); 1193 $IS_ARCHIVED = ($materiel->status == 'ARCHIVED');
1158 - 1194 + */
  1195 + $IS_CREATED = $e->is_created;
  1196 + $IS_VALIDATED = $e->is_validated;
  1197 + $IS_TOBEARCHIVED = $e->is_tobearchived;
  1198 + $IS_ARCHIVED = $e->is_archived;
  1199 + $this->set(compact('IS_CREATED', 'IS_VALIDATED', 'IS_TOBEARCHIVED', 'IS_ARCHIVED'));
1159 1200
1160 // Current user is creator or owner of current materiel 1201 // Current user is creator or owner of current materiel
  1202 + /*
1161 $USER_IS_CREATOR_OR_OWNER = in_array($this->userName, [ 1203 $USER_IS_CREATOR_OR_OWNER = in_array($this->userName, [
1162 $materiel->nom_createur, 1204 $materiel->nom_createur,
1163 $materiel->nom_responsable 1205 $materiel->nom_responsable
1164 ]); 1206 ]);
  1207 + */
  1208 + //$USER_IS_CREATOR_OR_OWNER = $e->isOwnedOrDeclaredByUser($this->userName);
  1209 + $USER_IS_CREATOR_OR_OWNER = $e->belongsToUser($this->userName);
1165 $this->set(compact('USER_IS_CREATOR_OR_OWNER')); 1210 $this->set(compact('USER_IS_CREATOR_OR_OWNER'));
1166 1211
1167 // Current user is same group as current materiel 1212 // Current user is same group as current materiel
1168 - $USER_IS_SAME_GROUP_AS_MATERIEL = ( 1213 + /*
  1214 + //$USER_IS_SAME_GROUP_AS_MATERIEL = $e->isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id);
  1215 + $USER_IS_SAME_GROUP_AS_MATERIEL =
  1216 + (
1169 //( isset($this->priviledgedUser->groupes_metier_id) && $this->priviledgedUser->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->priviledgedUser->groupes_metier_id ) 1217 //( isset($this->priviledgedUser->groupes_metier_id) && $this->priviledgedUser->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->priviledgedUser->groupes_metier_id )
1170 - ( isset($this->current_user_entity->groupes_metier_id) && $this->current_user_entity->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->current_user_entity->groupes_metier_id ) 1218 + ( isset($this->u->groupes_metier_id) && $this->u->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->u->groupes_metier_id )
1171 || 1219 ||
1172 - ( isset($this->current_user_entity->groupe_thematique_id) && $this->current_user_entity->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->current_user_entity->groupe_thematique_id ) 1220 + ( isset($this->u->groupe_thematique_id) && $this->u->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->u->groupe_thematique_id )
1173 ); 1221 );
  1222 + */
  1223 + //$USER_IS_SAME_GROUP_AS_MATERIEL = $this->currentMaterielIsSameGroupAsCurrentUser();
  1224 + $USER_IS_SAME_GROUP_AS_MATERIEL = $this->isSameGroupAsCurrentUser();
1174 $this->set(compact('USER_IS_SAME_GROUP_AS_MATERIEL')); 1225 $this->set(compact('USER_IS_SAME_GROUP_AS_MATERIEL'));
1175 1226
1176 $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL = $this->USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL; 1227 $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL = $this->USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL;
1177 $this->set(compact('USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL')); 1228 $this->set(compact('USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL'));
1178 1229
1179 $CONTEXT1 = $this->USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL; 1230 $CONTEXT1 = $this->USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL;
  1231 +
  1232 + /*
1180 $CAN_VALIDATE_OR_INVALIDATE = $this->USER_IS_ADMIN_OR_MORE || ( $materiel->materiel_administratif==0 && $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL ); 1233 $CAN_VALIDATE_OR_INVALIDATE = $this->USER_IS_ADMIN_OR_MORE || ( $materiel->materiel_administratif==0 && $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL );
1181 $CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; 1234 $CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;
1182 -  
1183 - $CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;  
1184 - $CAN_TBA = $IS_VALIDATED && $CONTEXT1;  
1185 - $CAN_ARCHIVE = $IS_TOBEARCHIVED && $this->USER_IS_ADMIN_OR_MORE; 1235 + */
  1236 + $CAN_VALIDATE = $this->isAuthorizedAction('statusValidated');
  1237 + //$CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;
  1238 + $CAN_INVALIDATE = $this->isAuthorizedAction('statusCreated');
  1239 + //$CAN_TBA = $IS_VALIDATED && $CONTEXT1;
  1240 + $CAN_TBA = $this->isAuthorizedAction('statusTobearchived');
  1241 + //$CAN_ARCHIVE = $IS_TOBEARCHIVED && $this->USER_IS_ADMIN_OR_MORE;
  1242 + $CAN_ARCHIVE = $this->isAuthorizedAction('statusArchived');
1186 $this->set(compact('CAN_VALIDATE', 'CAN_INVALIDATE', 'CAN_TBA', 'CAN_ARCHIVE')); 1243 $this->set(compact('CAN_VALIDATE', 'CAN_INVALIDATE', 'CAN_TBA', 'CAN_ARCHIVE'));
1187 - 1244 +
  1245 + // TODO:
  1246 + //$CAN_ATTACH_A_DOC = DocumentsController::isAuthorizedAction('add');
  1247 + // et idem pour tous les autres
1188 $CAN_ATTACH_A_DOC = $CONTEXT1; 1248 $CAN_ATTACH_A_DOC = $CONTEXT1;
  1249 +
1189 $CAN_MANAGE_SUIVIS = $CONTEXT1; 1250 $CAN_MANAGE_SUIVIS = $CONTEXT1;
  1251 + $CAN_EDIT_OR_DELETE_SUIVIS = $CAN_MANAGE_SUIVIS;
  1252 +
1190 $CAN_MANAGE_EMPRUNTS = $CONTEXT1; 1253 $CAN_MANAGE_EMPRUNTS = $CONTEXT1;
1191 - $CAN_MANAGE_FILES = $CONTEXT1; 1254 + $CAN_EDIT_OR_DELETE_EMPRUNTS = $CAN_MANAGE_EMPRUNTS;
  1255 +
  1256 + $CAN_MANAGE_FILES = $CONTEXT1; // edit, delete, ou envoi devis par mail
  1257 +
1192 $this->set(compact('CAN_ATTACH_A_DOC', 'CAN_MANAGE_SUIVIS', 'CAN_MANAGE_EMPRUNTS', 'CAN_MANAGE_FILES')); 1258 $this->set(compact('CAN_ATTACH_A_DOC', 'CAN_MANAGE_SUIVIS', 'CAN_MANAGE_EMPRUNTS', 'CAN_MANAGE_FILES'));
1193 1259
1194 // NEW 1260 // NEW
@@ -1197,8 +1263,9 @@ class MaterielsController extends AppController { @@ -1197,8 +1263,9 @@ class MaterielsController extends AppController {
1197 $CAN_EDIT = $this->isAuthorizedAction('edit'); 1263 $CAN_EDIT = $this->isAuthorizedAction('edit');
1198 // OLD 1264 // OLD
1199 //$CAN_EDIT = $IS_CREATED && $CAN_ATTACH_A_DOC; 1265 //$CAN_EDIT = $IS_CREATED && $CAN_ATTACH_A_DOC;
1200 - $CAN_COPY = $CAN_EDIT;  
1201 - 1266 + //$CAN_COPY = $CAN_EDIT;
  1267 + $CAN_COPY = $this->isAuthorizedAction('add', $id);
  1268 +
1202 $CAN_DELETE = $this->isAuthorizedAction('delete'); 1269 $CAN_DELETE = $this->isAuthorizedAction('delete');
1203 //debug($CAN_DELETE); 1270 //debug($CAN_DELETE);
1204 1271
@@ -1210,7 +1277,7 @@ class MaterielsController extends AppController { @@ -1210,7 +1277,7 @@ class MaterielsController extends AppController {
1210 1277
1211 // $status = $this->allStatus[$materiel->status]; 1278 // $status = $this->allStatus[$materiel->status];
1212 $status = self::allStatus[$materiel->status]; 1279 $status = self::allStatus[$materiel->status];
1213 - $this->set(compact('status', 'IS_CREATED', 'IS_VALIDATED', 'IS_TOBEARCHIVED', 'IS_ARCHIVED')); 1280 + $this->set(compact('status'));
1214 1281
1215 $sites = TableRegistry::getTableLocator()->get('Sites'); 1282 $sites = TableRegistry::getTableLocator()->get('Sites');
1216 //$sites = TableLocator::get('Sites'); 1283 //$sites = TableLocator::get('Sites');
@@ -1226,16 +1293,17 @@ class MaterielsController extends AppController { @@ -1226,16 +1293,17 @@ class MaterielsController extends AppController {
1226 //$fournisseurs = TableLocator::get('Fournisseurs'); 1293 //$fournisseurs = TableLocator::get('Fournisseurs');
1227 1294
1228 if ($materiel->photo_id != null) { 1295 if ($materiel->photo_id != null) {
1229 - $imgMateriel = $materiel->photo_id . '.' . TableRegistry::get('Documents')->get($materiel->photo_id)->get('type_doc'); 1296 + $imgMateriel = $materiel->photo_id . '.' . TableRegistry::getTableLocator()->get('Documents')->get($materiel->photo_id)->get('type_doc');
1230 $this->set('imgMateriel', $imgMateriel); 1297 $this->set('imgMateriel', $imgMateriel);
1231 } 1298 }
1232 1299
1233 $this->set('PDF_ENGINE', $this->confLabinvent->pdf_engine); 1300 $this->set('PDF_ENGINE', $this->confLabinvent->pdf_engine);
1234 1301
1235 $entity = $materiel; 1302 $entity = $materiel;
1236 - $this->set(compact('sites', 'typeDocuments', 'fournisseurs',  
1237 - 'entity' 1303 + $this->set(compact('entity'));
  1304 + $this->set(compact(
1238 //'materiel', // @deprecated 1305 //'materiel', // @deprecated
  1306 + 'sites', 'typeDocuments', 'fournisseurs'
1239 )); 1307 ));
1240 /* (EP) inutile 1308 /* (EP) inutile
1241 $this->set('_serialize', [ 1309 $this->set('_serialize', [
src/Controller/QrCodesController.php
@@ -8,7 +8,8 @@ class QrCodesController extends AppController @@ -8,7 +8,8 @@ class QrCodesController extends AppController
8 { 8 {
9 9
10 public function isAuthorized($user) { 10 public function isAuthorized($user) {
11 - return ($this->action == 'creer'); 11 + //return ($this->action == 'creer');
  12 + return ($this->a == 'creer');
12 // Si aucune règle ci-dessus n'a return true (ou false) 13 // Si aucune règle ci-dessus n'a return true (ou false)
13 // => DEFAULT PARENT RULE 14 // => DEFAULT PARENT RULE
14 // (on appelle la méthode isAuthorized() de AppController) 15 // (on appelle la méthode isAuthorized() de AppController)
src/Model/Entity/Materiel.php
@@ -57,8 +57,7 @@ use Cake\ORM\Entity; @@ -57,8 +57,7 @@ use Cake\ORM\Entity;
57 * @property \App\Model\Entity\Fournisseur $fournisseur 57 * @property \App\Model\Entity\Fournisseur $fournisseur
58 * @property bool $metrologie 58 * @property bool $metrologie
59 */ 59 */
60 -class Materiel extends Entity  
61 -{ 60 +class Materiel extends Entity {
62 61
63 /** 62 /**
64 * Fields that can be mass assigned using newEntity() or patchEntity(). 63 * Fields that can be mass assigned using newEntity() or patchEntity().
@@ -90,10 +89,16 @@ class Materiel extends Entity @@ -90,10 +89,16 @@ class Materiel extends Entity
90 protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; } 89 protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; }
91 protected function _getIsArchived() { return $this->status == 'ARCHIVED'; } 90 protected function _getIsArchived() { return $this->status == 'ARCHIVED'; }
92 91
  92 + // Ce matériel est utilisé ou déclaré par l'utilisateur $userfullname
  93 + // is Owned Or Declared By User
  94 + // fullname = "Pallier Etienne"
93 //public function isUsedOrCreatedByUser($user) { 95 //public function isUsedOrCreatedByUser($user) {
94 - public function isOwnedOrDeclaredByUser($username) {  
95 - return in_array($username, [$this->nom_createur, $this->nom_responsable]); 96 + //public function isOwnedOrDeclaredByUser($username) {
  97 + public function belongsToUser($userfullname) {
  98 + return in_array($userfullname, [$this->nom_createur, $this->nom_responsable]);
96 } 99 }
  100 +
  101 + // Ce matériel a le même groupe que l'un de ceux de l'utilisateur courant
97 public function isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id) { 102 public function isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id) {
98 // Responsable groupe métier ? 103 // Responsable groupe métier ?
99 //if ($this->groupes_metier_id==null && $this->groupes_thematique_id==null) return false; 104 //if ($this->groupes_metier_id==null && $this->groupes_thematique_id==null) return false;
src/Model/Table/MaterielsTable.php
@@ -467,7 +467,7 @@ class MaterielsTable extends AppTable @@ -467,7 +467,7 @@ class MaterielsTable extends AppTable
467 * 467 *
468 * On récupère le NOM du fournisseur saisi dans le champ appelé fournisseur.name (en php) 468 * On récupère le NOM du fournisseur saisi dans le champ appelé fournisseur.name (en php)
469 * En Html ça correspond à fournisseur['name'] 469 * En Html ça correspond à fournisseur['name']
470 - * Si saisie vide => mettre à nul 470 + * Si saisie vide => mettre à null
471 * Sinon, chercher le fournisseur_id correspondant à ce nom 471 * Sinon, chercher le fournisseur_id correspondant à ce nom
472 * Si id trouvé => fournisseur_id = cet id 472 * Si id trouvé => fournisseur_id = cet id
473 * Sinon, créer un nouveau fournisseur avec ce nom 473 * Sinon, créer un nouveau fournisseur avec ce nom
src/Template/Materiels/view.ctp
@@ -672,7 +672,8 @@ if ($role == 'Super Administrateur') { @@ -672,7 +672,8 @@ if ($role == 'Super Administrateur') {
672 || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)) { 672 || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)) {
673 */ 673 */
674 if ($CAN_MANAGE_SUIVIS) { 674 if ($CAN_MANAGE_SUIVIS) {
675 - // Edit Suivis 675 +
  676 + // - Edit Suivis
676 $echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Suivis', 'edit', $suivi->id); 677 $echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Suivis', 'edit', $suivi->id);
677 /* 678 /*
678 echo $this->Html->link(__('<i class="icon-pencil"></i>'), [ 679 echo $this->Html->link(__('<i class="icon-pencil"></i>'), [
@@ -684,7 +685,8 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -684,7 +685,8 @@ if ($role == &#39;Super Administrateur&#39;) {
684 'style' => 'margin:0' 685 'style' => 'margin:0'
685 ]); 686 ]);
686 */ 687 */
687 - // Delete Suivis 688 +
  689 + // - Delete Suivis
688 //$echoActionButton($this->Html, 'icon-trash', $bStyle, '', 'Suivis', 'delete', $suivi->id, [], "", ""); 690 //$echoActionButton($this->Html, 'icon-trash', $bStyle, '', 'Suivis', 'delete', $suivi->id, [], "", "");
689 echo ' '.$this->Form->postLink(__('<i class="icon-trash"></i>'), [ 691 echo ' '.$this->Form->postLink(__('<i class="icon-trash"></i>'), [
690 'controller' => 'Suivis', 692 'controller' => 'Suivis',
@@ -695,6 +697,7 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -695,6 +697,7 @@ if ($role == &#39;Super Administrateur&#39;) {
695 'style' => 'margin:0', 697 'style' => 'margin:0',
696 'confirm' => __('Êtes-vous sur de vouloir annuler ce suivi #{0} ?', $suivi->id) 698 'confirm' => __('Êtes-vous sur de vouloir annuler ce suivi #{0} ?', $suivi->id)
697 ]); 699 ]);
  700 +
698 } 701 }
699 ?> 702 ?>
700 </td> 703 </td>
@@ -800,7 +803,8 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -800,7 +803,8 @@ if ($role == &#39;Super Administrateur&#39;) {
800 $bEdit = $bDelete = ''; 803 $bEdit = $bDelete = '';
801 //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 ) { 804 //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 ) {
802 if ($CAN_MANAGE_EMPRUNTS) { 805 if ($CAN_MANAGE_EMPRUNTS) {
803 - // Edit Emprunt 806 +
  807 + // - Edit Emprunt
804 $bEdit = $this->MyButton->getActionButton('icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id); 808 $bEdit = $this->MyButton->getActionButton('icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id);
805 //$bEdit = $getActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id); 809 //$bEdit = $getActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id);
806 //echo $bEdit; 810 //echo $bEdit;
@@ -814,7 +818,8 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -814,7 +818,8 @@ if ($role == &#39;Super Administrateur&#39;) {
814 'style' => 'margin:0' 818 'style' => 'margin:0'
815 ]); 819 ]);
816 */ 820 */
817 - // Delete Emprunt 821 +
  822 + // - Delete Emprunt
818 $bDelete = $this->Form->postLink(__('<i class="icon-trash"></i>'), [ 823 $bDelete = $this->Form->postLink(__('<i class="icon-trash"></i>'), [
819 'controller' => 'Emprunts', 824 'controller' => 'Emprunts',
820 'action' => 'delete', 825 'action' => 'delete',
@@ -826,6 +831,7 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -826,6 +831,7 @@ if ($role == &#39;Super Administrateur&#39;) {
826 'confirm' => __('Êtes-vous sur de vouloir annuler cet emprunt #{0}?', $emprunt->id) 831 'confirm' => __('Êtes-vous sur de vouloir annuler cet emprunt #{0}?', $emprunt->id)
827 ] 832 ]
828 ); 833 );
  834 +
829 } 835 }
830 // champ virtuel (calculé) statut 836 // champ virtuel (calculé) statut
831 $style_red = 'style="color: red"'; 837 $style_red = 'style="color: red"';
@@ -930,9 +936,10 @@ if ($role == &#39;Super Administrateur&#39;) { @@ -930,9 +936,10 @@ if ($role == &#39;Super Administrateur&#39;) {
930 ]); 936 ]);
931 } 937 }
932 938
933 - // 2 - icone EDIT  
934 //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) { 939 //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) {
935 if ($CAN_MANAGE_FILES) { 940 if ($CAN_MANAGE_FILES) {
  941 +
  942 + // 2 - icone EDIT
936 $echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Documents', 'edit', $document->id); 943 $echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Documents', 'edit', $document->id);
937 /* 944 /*
938 echo $this->Html->link(__('<i class="icon-pencil"></i>'), [ 945 echo $this->Html->link(__('<i class="icon-pencil"></i>'), [
src/Template/Suivis/view.ctp
@@ -10,7 +10,7 @@ $role = $role; @@ -10,7 +10,7 @@ $role = $role;
10 $priviledgedUser = $priviledgedUser; 10 $priviledgedUser = $priviledgedUser;
11 // functions 11 // functions
12 $printTableRow = $printTableRow; 12 $printTableRow = $printTableRow;
13 -debug($suivi); 13 +//debug($suivi);
14 /* 14 /*
15 debug($suivi->nom_createur); 15 debug($suivi->nom_createur);
16 debug($username); 16 debug($username);