Commit aec79c69bd4708192fad9c0b94a5329111941efd

Authored by Etienne Pallier
1 parent 6aca6d83
Exists in master and in 2 other branches dev, dev-IRAP

Refactorisation add() et edit() de Materiels + BUGFIX gestionnaire

DESCRIPTION :
- Refactorisation des actions add() et edit() de MaterielsController en
une seule fonction add_or_edit() car elles étaient très semblables
- Gestionnaire de reference : maintenant bien sauvegardé (avant il était
perdu...)

IMPORTANT :
- Pour connaitre la version actuelle, taper "./VERSION"
- Pour mettre à jour le code, utiliser ./UPDATE depuis la racine du
projet (ne plus se contenter de faire "git pull")
(UPDATE fait "git pull" mais il met aussi à jour la BD, seulement si
nécessaire)
- Pour s'assurer que la version récupérée est stable, taper "./TESTS.sh"
(tout doit passer ok)
- En cas de problème, taper ./SHOW_LOGS pour voir si les logs d'erreur
peuvent aider
- Pour que "./TESTS.sh" s'exécute sans "deprecated error",
			il faut ajouter cette ligne dans la clé 'Error' de votre fichier
config/app.php
			    'Error' => [
			    		...
			        'errorLevel' => E_ALL & ~E_USER_DEPRECATED,
			       	...
			    ],
README.md
... ... @@ -54,11 +54,15 @@ Logiciel testé et validé sur les configurations suivantes :
54 54 VERSION ACTUELLE
55 55  
56 56 Date: 25/03/2019
57   -Version: 2.11.1
  57 +Version: 2.11.2
58 58 Author: EP
59   - Bugfix searchLdap()
  59 + Refactorisation des actions add() et edit() de MaterielsController + BUGFIX gestionnaire
60 60  
61   - IMPORTANT:
  61 + DESCRIPTION :
  62 + - Refactorisation des actions add() et edit() de MaterielsController en une seule fonction add_or_edit() car elles étaient très semblables
  63 + - Gestionnaire de reference : maintenant bien sauvegardé (avant il était perdu...)
  64 +
  65 + IMPORTANT :
62 66 - Pour connaitre la version actuelle, taper "./VERSION"
63 67 - Pour mettre à jour le code, utiliser ./UPDATE depuis la racine du projet (ne plus se contenter de faire "git pull")
64 68 (UPDATE fait "git pull" mais il met aussi à jour la BD, seulement si nécessaire)
... ...
src/Controller/MaterielsController.php
... ... @@ -695,33 +695,399 @@ class MaterielsController extends AppController
695 695 $this->set('_serialize', [
696 696 'materiel'
697 697 ]);
698   - }
699   -
  698 + } // view
  699 +
  700 +
700 701 /**
701   - * Add method
  702 + * Add or Edit method (do either add() or edit())
  703 + * => Factorisation de add() et edit()
  704 + * (voir aussi https://book.cakephp.org/3.0/en/orm.html)
702 705 *
703   - * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
  706 + * @param $IS_ADD: True = add ; False = edit
  707 + * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise.
704 708 */
705   - public function add($valeurs = null, $erreurs = null)
  709 + public function add_or_edit($is_add, $id = null, $valeurs = null, $erreurs = null)
706 710 {
707   - $materiel = $this->Materiels->newEntity();
708   - if ($this->request->is('post')) {
  711 + $usersTable = TableRegistry::getTableLocator()->get('Users');
  712 +
  713 + // ADD
  714 + if ($is_add) {
  715 + $materiel = $this->Materiels->newEntity();
  716 + }
  717 + // EDIT
  718 + else {
  719 + $materiel = $this->Materiels->get($id, [
  720 + 'contain' => []
  721 + ]);
  722 + }
  723 +
  724 + /* SI POST
  725 + * Les données ont été saisies et postées
  726 + * On va donc les sauvegarder
  727 + */
  728 + if (
  729 +
  730 + // ADD
  731 + // Nouveau materiel saisi et posted
  732 + ($is_add && $this->request->is('post'))
  733 +
  734 + ||
  735 +
  736 + // EDIT
  737 + // materiel modifié et posted
  738 + ( (!$is_add) && $this->request->is(['patch','post','put']) )
  739 +
  740 + ) {
  741 +
  742 + // (1) On rempli $materiel avec les données de ce materiel
709 743 $materiel = $this->Materiels->patchEntity($materiel, $this->request->getData());
710   - if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')->find('list', [
  744 +
  745 + // (2) Si l'utilisateur courant est un "administratif" => le mettre comme gestionnaire du materiel
  746 + // (tout ça pour ça !!! Faudra réduire ce bazarre)
  747 + $current_user_name = $_SESSION['Auth']['User']['sn'][0];
  748 + if (in_array(
  749 + $current_user_name,
  750 + $usersTable
  751 + ->find('list', [
  752 + 'keyField' => 'id',
  753 + 'valueField' => 'nom'
  754 + ])
  755 + ->where([
  756 + 'role =' => 'Administration'
  757 + ])
  758 + ->toArray()
  759 + )) {
  760 + $materiel->gestionnaire_id = $usersTable
  761 + ->find()
  762 + ->where([
  763 + 'nom' => $current_user_name
  764 + ])
  765 + ->first()->id;
  766 + }
  767 +
  768 + // (3) On l'ajoute en BD, on envoie un email, et on affiche ok sur page accueil
  769 + $action = $is_add ? "ajouté" : "modifié";
  770 + if ($this->Materiels->save($materiel)) {
  771 + $this->Flash->success(__("Le matériel a bien été $action"."."));
  772 + if ($is_add) {
  773 + $this->sendEmail($materiel);
  774 + $id = $materiel->id;
  775 + }
  776 + /*
  777 + * EDIT
  778 + //En attendant un remaniement complet de la fonction
  779 + //1 = img, doc = 2, mail normal = tout autre argument
  780 + //$this->sendmail($materiel,5);
  781 + */
  782 + return $this->redirect([
  783 + 'action' => 'view',
  784 + $id
  785 + ]);
  786 + } else
  787 + $this->Flash->error(__("Le matériel n'a pas pu être $action"."."));
  788 + } // if POST
  789 +
  790 +
  791 + /* SINON (PAS POST)
  792 + * C'est la première fois qu'on vient sur cette vue,
  793 + * donc on va préparer le formulaire de saisie)
  794 + */
  795 +
  796 + //--- 1) INITIALISATION DE LISTES POUR ASSISTER LA SAISIE (listes de choix proposés)
  797 +
  798 + $surCategories = $this->Materiels->SurCategories->find('list', [
  799 + 'keyField' => 'id',
  800 + 'valueField' => 'nom',
  801 + 'order' => 'SurCategories.nom',
  802 + // only for add() (was not in edit()) :
  803 + 'conditions' => array(
  804 + 'nom !=' => 'N/A'
  805 + )
  806 + ]);
  807 + $categories = $this->Materiels->Categories->find('list', [
  808 + 'keyField' => 'id',
  809 + 'valueField' => 'nom',
  810 + 'order' => 'Categories.nom'
  811 + ]);
  812 + $sousCategories = $this->Materiels->SousCategories->find('list', [
  813 + 'keyField' => 'id',
  814 + 'valueField' => 'nom',
  815 + 'order' => 'SousCategories.nom'
  816 + ]);
  817 + $groupesThematiques = $this->Materiels->GroupesThematiques->find('list', [
  818 + 'keyField' => 'id',
  819 + 'valueField' => 'nom',
  820 + 'order' => 'GroupesThematiques.nom'
  821 + ]);
  822 + $groupesMetiers = $this->Materiels->GroupesMetiers->find('list', [
  823 + 'keyField' => 'id',
  824 + 'valueField' => 'nom',
  825 + 'order' => 'GroupesMetiers.nom'
  826 + ]);
  827 + $organismes = $this->Materiels->Organismes->find('list', [
  828 + 'keyField' => 'id',
  829 + 'valueField' => 'nom',
  830 + 'order' => 'Organismes.nom'
  831 + ]);
  832 + $sites = $this->Materiels->Sites->find('list', [
  833 + 'keyField' => 'id',
  834 + 'valueField' => 'nom',
  835 + 'order' => 'Sites.nom'
  836 + ]);
  837 + $designation = $this->Materiels->find('list', [
  838 + 'keyField' => 'designation',
  839 + 'valueField' => 'designation',
  840 + 'conditions' => array(
  841 + 'designation !=' => ''
  842 + ),
  843 + 'order' => 'designation',
  844 + 'group' => 'designation'
  845 + ]);
  846 +
  847 + // autocomplete + saisie sites
  848 + $lieu_detail = $this->Materiels->find('list', [
  849 + 'keyField' => 'lieu_detail',
  850 + 'valueField' => 'lieu_detail',
  851 + 'conditions' => array(
  852 + 'lieu_detail !=' => ''
  853 + ),
  854 + 'order' => 'lieu_detail',
  855 + // only for add() (was not in edit()) :
  856 + 'group' => 'lieu_detail'
  857 + ]);
  858 +
  859 + // Liste fournisseurs
  860 + $fournisseurs = $this->Materiels->Fournisseurs->find('list', [
  861 + 'keyField' => 'id',
  862 + 'valueField' => 'nom',
  863 + 'order' => 'Fournisseurs.nom'
  864 + ]);
  865 +
  866 + // Liste des gestionnaires (admin)
  867 + //$administrateurs = TableRegistry::get('Users')->find('list', [
  868 + $administrateurs = $usersTable
  869 + ->find('list', [
  870 + //'keyField' => 'nom',
711 871 'keyField' => 'id',
712 872 'valueField' => 'nom'
713 873 ])
714   - ->where([
  874 + ->where([
715 875 'role =' => 'Administration'
716 876 ])
717   - ->toArray())) {
718   - $gestionnaireID = TableRegistry::get('Users')->find()
719   - ->where([
720   - 'nom' => $_SESSION['Auth']['User']['sn'][0]
721   - ])
722   - ->first()->id;
723   - $materiel->gestionnaire_id = $gestionnaireID;
  877 + ->toArray();
  878 +
  879 + $domaineresp = $usersTable->find()
  880 + ->select('sur_categorie_id')
  881 + ->where([
  882 + 'username =' => $this->LdapAuth->user($this->request->getSession()
  883 + ->read('authType'))[0]
  884 + ])
  885 + ->first()['sur_categorie_id'];
  886 + if ($domaineresp == null) $domaineresp = false;
  887 +
  888 + // EDIT only
  889 + if (! $is_add) {
  890 +
  891 + $designation_edit = $this->Materiels->find('list', [
  892 + 'keyField' => 'id',
  893 + 'valueField' => 'designation',
  894 + 'conditions' => array(
  895 + 'id =' => $materiel->id
  896 + )
  897 + ])->toArray();
  898 + //$designation_edit = $designation_edit->toArray();
  899 +
  900 + $lieu_detail_edit = $this->Materiels->find('list', [
  901 + 'keyField' => 'id',
  902 + 'valueField' => 'lieu_detail',
  903 + 'conditions' => array(
  904 + 'id =' => $materiel->id
  905 + )
  906 + ])->toArray();
  907 + //$lieu_detail_edit = $lieu_detail_edit->toArray();
  908 +
  909 + //(EP) TODO: debug ce truc, c'est du grand n'importe nawak !
  910 + $dom = TableRegistry::get('Materiels')->find()
  911 + ->select('sur_categorie_id')
  912 + ->where([
  913 + 'id =' => $materiel->id
  914 + ])
  915 + ->first()['sur_categorie_id'];
  916 + $domaines = TableRegistry::get('Users')->find()
  917 + ->select('sur_categorie_id')
  918 + ->where([
  919 + 'username =' => $this->LdapAuth->user($this->request->getSession()
  920 + ->read('authType'))[0]
  921 + ])
  922 + ->first()['sur_categorie_id'];
  923 + $role = TableRegistry::get('Users')->find()
  924 + ->select('role')
  925 + ->where([
  926 + 'username =' => $this->LdapAuth->user($this->request->getSession()
  927 + ->read('authType'))[0]
  928 + ])
  929 + ->first()['role'];
  930 + $domaineresp = ($dom == $domaines);
  931 + } // EDIT only
  932 +
  933 + //--- 2) INITIALISATION DE VARIABLES QU'ON VA PASSER A LA VUE (add.ctp ou edit.ctp)
  934 +
  935 + // not used
  936 + //$utilisateurconnect = $usersTable->find('all')->toArray();
  937 +
  938 + // TODO: code redondant avec edit(), à factoriser
  939 + // HOWTO: https://book.cakephp.org/3.0/en/orm.html
  940 + //$users = TableRegistry::get('LdapConnections')->getListUsers();
  941 + //$users = TableRegistry::get('LdapConnections')->getUsersWithNameAndEmail();
  942 + $users_name_and_email = TableRegistry::getTableLocator()->get('LdapConnections')->getUsersWithNameAndEmail();
  943 + $users_name = array_keys($users_name_and_email);
  944 + $users_option_list = [];
  945 + for ($i = 0; $i < sizeof($users_name); $i ++) {
  946 + // $users_option_list["Etienne Pallier"] = "Etienne Pallier"
  947 + $users_option_list[$users_name[$i]] = $users_name[$i];
  948 + }
  949 +
  950 + $mail_responsable = $usersTable->find()
  951 + ->select('email')
  952 + ->where([
  953 + 'username =' => $this->LdapAuth->user($this->request->getSession()
  954 + ->read('authType'))[0]
  955 + ])
  956 + ->first()['email'];
  957 +
  958 + // ADD only
  959 + if ( $is_add) {
  960 + if (isset($this->request->getAttribute('params')['pass'][0])) {
  961 + $cpMateriel = $this->Materiels->get($this->request->getAttribute('params')['pass'][0]);
  962 + $this->set('cpMateriel', $cpMateriel);
724 963 }
  964 + }
  965 +
  966 + // EDIT only
  967 + else {
  968 +
  969 + if (! empty($materiel->get('nom_responsable'))) {
  970 + //if (! in_array($materiel->get('nom_responsable'), $utilisateurs)) {
  971 + if (! in_array($materiel->get('nom_responsable'), $users_name)) {
  972 + $nom_ancien_responsable = $materiel->get('nom_responsable');
  973 + $this->set(compact('nom_ancien_responsable'));
  974 + }
  975 + }
  976 +
  977 + // (EP) Fonction utilisée dans la vue, déclarée ici pour éviter les problèmes de tests
  978 + $isReadonlyField = function ($fieldName, $myReadonlyFields) {
  979 + if (! empty($myReadonlyFields) && $myReadonlyFields[0] == '*') {
  980 + $modifiableFields = $myReadonlyFields;
  981 + array_shift($modifiableFields);
  982 + return ! in_array($fieldName, $modifiableFields);
  983 + }
  984 + return in_array($fieldName, $myReadonlyFields);
  985 + };
  986 +
  987 + $this->set('isReadonlyField', $isReadonlyField);
  988 + $this->set('IS_CREATED', $materiel->status == 'CREATED');
  989 + $this->set('IS_VALIDATED', $materiel->status == 'VALIDATED');
  990 + $this->set('IS_ARCHIVED_OR_TOBE', in_array($materiel->status, [
  991 + 'TOBEARCHIVED',
  992 + 'ARCHIVED'
  993 + ]));
  994 +
  995 + $this->set(compact(
  996 + 'role',
  997 + 'designation_edit',
  998 + 'lieu_detail_edit'
  999 + ));
  1000 +
  1001 + } // EDIT only
  1002 +
  1003 + /* About set and compact :
  1004 + *
  1005 + * The compact (php) function returns an associative array, built by taking the names specified in the input array,
  1006 + * using them as keys, and taking the values of the variables referenced by those names and making those the values.
  1007 + * For example:
  1008 + * $fred = 'Fred Flinstone';
  1009 + * $barney = 'Barney Rubble';
  1010 + * $names = compact('fred', 'barney');
  1011 + * => is equivalent to: $names = array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble')
  1012 + *
  1013 + * So when you use compact in conjunction with set,
  1014 + * you're using the single parameter form of the set function,
  1015 + * by passing it an associative array of key-value pairs.
  1016 + *
  1017 + * If you just have one variable you want to set on the view, and you want to use the single parameter form, you must invoke set in the same way:
  1018 + * $variable_to_pass = 'Fred';
  1019 + * $this->set(compact('variable_to_pass'));
  1020 + *
  1021 + * Otherwise, the two parameter form of set can be used:
  1022 + * $variable_to_pass = 'Fred';
  1023 + * $this->set('variable_to_pass', $variable_to_pass);
  1024 + *
  1025 + * Both achieve the same thing.
  1026 + */
  1027 + //$this->set(compact('designation', 'utilisateurconnect', 'users', 'materiel', 'surCategories', 'categories', 'sousCategories', 'groupesThematiques', 'groupesMetiers', 'organismes', 'sites', 'utilisateurs', 'mail_responsable', 'domaineresp', 'lieu_detail', 'fournisseurs'));
  1028 + $this->set(compact(
  1029 + 'materiel',
  1030 + // not used
  1031 + //'utilisateurconnect',
  1032 + 'surCategories', 'categories', 'sousCategories',
  1033 + 'groupesThematiques', 'groupesMetiers',
  1034 + 'organismes', 'sites',
  1035 + 'mail_responsable',
  1036 + 'domaineresp',
  1037 + 'designation',
  1038 + 'lieu_detail',
  1039 + 'fournisseurs',
  1040 + //'utilisateurs',
  1041 + 'users_name_and_email', 'users_option_list',
  1042 + // Gestionnaires (id=>name):
  1043 + 'administrateurs'
  1044 + ));
  1045 +
  1046 + $this->set('_serialize', [
  1047 + 'materiel'
  1048 + ]);
  1049 +
  1050 + } //add_or_edit()
  1051 +
  1052 +
  1053 + /**
  1054 + * Add method
  1055 + *
  1056 + * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
  1057 + */
  1058 + public function add($valeurs = null, $erreurs = null) { $this->add_or_edit(TRUE, null, $valeurs, $erreurs); }
  1059 + /*
  1060 + {
  1061 + $usersTable = TableRegistry::getTableLocator()->get('Users');
  1062 + $materiel = $this->Materiels->newEntity();
  1063 +
  1064 + // Nouveau materiel saisi et posted
  1065 + if ($this->request->is('post')) {
  1066 + // (1) On rempli $materiel avec les données de ce materiel
  1067 + $materiel = $this->Materiels->patchEntity($materiel, $this->request->getData());
  1068 + // (2) Si l'utilisateur courant est un "administratif" => le mettre comme gestionnaire du materiel
  1069 + // (tout ça pour ça !!! Faudra réduire ce bazarre)
  1070 + $current_user_name = $_SESSION['Auth']['User']['sn'][0];
  1071 + if (in_array(
  1072 + $current_user_name,
  1073 + $usersTable
  1074 + ->find('list', [
  1075 + 'keyField' => 'id',
  1076 + 'valueField' => 'nom'
  1077 + ])
  1078 + ->where([
  1079 + 'role =' => 'Administration'
  1080 + ])
  1081 + ->toArray()
  1082 + )) {
  1083 + $materiel->gestionnaire_id = $usersTable
  1084 + ->find()
  1085 + ->where([
  1086 + 'nom' => $current_user_name
  1087 + ])
  1088 + ->first()->id;
  1089 + }
  1090 + // (3) On l'ajoute en BD
725 1091 if ($this->Materiels->save($materiel)) {
726 1092 $this->Flash->success(__('Le matériel a bien été ajouté.'));
727 1093 $this->sendEmail($materiel);
... ... @@ -733,6 +1099,7 @@ class MaterielsController extends AppController
733 1099 $this->Flash->error(__('Le matériel n\'a pas pu être ajouté.'));
734 1100 }
735 1101  
  1102 + // Dans tous les cas (posted ou pas)
736 1103 $surCategories = $this->Materiels->SurCategories->find('list', [
737 1104 'keyField' => 'id',
738 1105 'valueField' => 'nom',
... ... @@ -794,7 +1161,7 @@ class MaterielsController extends AppController
794 1161 'order' => 'designation',
795 1162 'group' => 'designation'
796 1163 ]);
797   - $domaineresp = TableRegistry::getTableLocator()->get('Users')->find()
  1164 + $domaineresp = $usersTable->find()
798 1165 ->select('sur_categorie_id')
799 1166 ->where([
800 1167 'username =' => $this->LdapAuth->user($this->request->getSession()
... ... @@ -803,7 +1170,7 @@ class MaterielsController extends AppController
803 1170 ->first()['sur_categorie_id'];
804 1171 if ($domaineresp == null)
805 1172 $domaineresp = false;
806   - $utilisateurconnect = TableRegistry::getTableLocator()->get('Users')->find('all')->toArray();
  1173 + $utilisateurconnect = $usersTable->find('all')->toArray();
807 1174  
808 1175 // TODO: code redondant avec edit(), à factoriser
809 1176 // HOWTO: https://book.cakephp.org/3.0/en/orm.html
... ... @@ -820,7 +1187,7 @@ class MaterielsController extends AppController
820 1187 $users_name = NULL; //unset($users_name);
821 1188  
822 1189 // Ne pas commenter la ligne suivante, on en a besoin dans add.cpt
823   - $mail_responsable = TableRegistry::get('Users')->find()
  1190 + $mail_responsable = $usersTable->find()
824 1191 ->select('email')
825 1192 ->where([
826 1193 'username =' => $this->LdapAuth->user($this->request->getSession()
... ... @@ -847,7 +1214,8 @@ class MaterielsController extends AppController
847 1214 $this->set('_serialize', [
848 1215 'materiel'
849 1216 ]);
850   - }
  1217 + } // add()
  1218 + */
851 1219  
852 1220 /**
853 1221 * Edit method
... ... @@ -857,12 +1225,13 @@ class MaterielsController extends AppController
857 1225 * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise.
858 1226 * @throws \Cake\Network\Exception\NotFoundException When record not found.
859 1227 */
860   - public function edit($id = null)
  1228 + public function edit($id = null) { $this->add_or_edit(FALSE, $id); }
  1229 + /*
861 1230 {
862 1231 $materiel = $this->Materiels->get($id, [
863 1232 'contain' => []
864 1233 ]);
865   - if ($this->request->is([
  1234 + if ($this->request->is([
866 1235 'patch',
867 1236 'post',
868 1237 'put'
... ... @@ -994,12 +1363,11 @@ class MaterielsController extends AppController
994 1363 ])
995 1364 ->first()['role'];
996 1365  
997   - /* NUL, franchement faudrait reflechir un peu quand meme, ya des limites !!!
998   - if ($dom == $domaines)
999   - $domaineresp = true;
1000   - else
1001   - $domaineresp = false;
1002   - */
  1366 + // NUL, franchement faudrait reflechir un peu quand meme, ya des limites !!!
  1367 + //if ($dom == $domaines)
  1368 + // $domaineresp = true;
  1369 + //else
  1370 + // $domaineresp = false;
1003 1371 $domaineresp = ($dom == $domaines);
1004 1372  
1005 1373 // TODO: code redondant avec add(), à factoriser
... ... @@ -1059,7 +1427,8 @@ class MaterielsController extends AppController
1059 1427 $this->set('_serialize', [
1060 1428 'materiel'
1061 1429 ]);
1062   - }
  1430 + } // edit()
  1431 + */
1063 1432  
1064 1433 /**
1065 1434 * Administrer method
... ...
src/Model/Table/LdapConnectionsTable.php
... ... @@ -615,8 +615,10 @@ class LdapConnectionsTable extends AppTable
615 615 // En cas de LDAP anonyme, binding quand même pour vérifier le mot de passe de l'utilisateur.
616 616 // Sans cette ligne, on passe avec n'importe quel password !!!
617 617 if ($user_login && $user_password)
618   - $ldapbind = ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password)
619   - or die("Could not bind to LDAP server.". ldap_error($ldapConnection) );
  618 + $ldapbind = ldap_bind($ldapConnection, $this->authenticationType . '=' . $user_login . ',' . $this->baseDn, $user_password);
  619 + // or die("Could not bind to LDAP server: ". ldap_error($ldapConnection) );
  620 + // (EP) Ne pas faire die() ici car ça stopperait net la mauvaise connexion d'un utilisateur, avec ce message d'erreur
  621 + // Il vaut mieux retourner FALSE et afficher un joli message de refus sur la page d'accueil
620 622 /*
621 623 else {
622 624 $ldapbind = TRUE;
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -101,16 +101,21 @@ class MaterielsTable extends AppTable
101 101 'foreignKey' => 'fournisseur_id'
102 102 ]);
103 103  
104   - // 9/6/17 EP added :
105   - $this->belongsTo('Users', [
106   - 'foreignKey' => 'gestionnaire_id'
107   - ]);
108 104 // 14/1/19 cake bake auto added:
109 105 /*
110 106 $this->belongsTo('Gestionnaires', [
111 107 'foreignKey' => 'gestionnaire_id'
112 108 ]);
113 109 */
  110 + // 9/6/17 EP added :
  111 + $this->belongsTo('Users', [
  112 + 'foreignKey' => 'gestionnaire_id'
  113 + ]);
  114 + /* EP TODO:
  115 + update `materiels` set gestionnaire_id = null where gestionnaire_id = 0;
  116 + ALTER TABLE `materiels`
  117 + ADD CONSTRAINT `fk_materiels_gestionnaire_id` FOREIGN KEY (`gestionnaire_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
  118 + */
114 119 $this->belongsTo('Photos', [
115 120 'foreignKey' => 'photo_id'
116 121 ]);
... ...
src/Template/Materiels/add.ctp
... ... @@ -232,6 +232,7 @@ if (isset($cpMateriel)) {
232 232 ])
233 233 ->first();
234 234 */
  235 + /*
235 236 $administrateurs = TableRegistry::get('Users')->find('list', [
236 237 'keyField' => 'id',
237 238 'valueField' => 'nom'
... ... @@ -240,6 +241,7 @@ if (isset($cpMateriel)) {
240 241 'role =' => 'Administration'
241 242 ])
242 243 ->toArray();
  244 + */
243 245  
244 246 echo $this->Form->control('gestionnaire_id', [
245 247 'label' => 'Nom du gestionnaire de référence du matériel',
... ...
src/Template/Materiels/edit.ctp
... ... @@ -301,12 +301,15 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie)
301 301 'readonly' => true,
302 302 'default' => $mail_responsable
303 303 ]);
  304 +
  305 + // (EP) TODO: Pour Javascript only (bidouille sale à éviter...)
304 306 $res = TableRegistry::get('Users')->find()
305 307 ->where([
306 308 'username' => $username,
307 309 'role' => 'Administration'
308 310 ])
309   - ->first();
  311 + ->first();
  312 + /*
310 313 $administrateurs = TableRegistry::get('Users')->find('list', [
311 314 'keyField' => 'nom',
312 315 'valueField' => 'nom'
... ... @@ -315,6 +318,7 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie)
315 318 'role =' => 'Administration'
316 319 ])
317 320 ->toArray();
  321 + */
318 322 echo $this->Form->control('gestionnaire_id', [
319 323 'label' => 'Nom du gestionnaire de référence du matériel',
320 324 'empty' => 'Choisir un gestionnaire',
... ...