confLabinvent; $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; $action = $this->request->getAttribute('params')['action']; if($this->userHasRole('Responsable')) return true; //Pour un "utilisateur" if (in_array($action, ['edit', 'delete'])) { $id = (int)$this->request->getAttribute('params')['pass'][0]; if($this->isOwnedBy($id, $user['sn'][0].' '.$user['givenname'][0])) return true; } return parent::isAuthorized($user); } public function isOwnedBy($id, $nomCreateur) { return ($this->Emprunts->exists(['id' => $id, 'nom_createur' => $nomCreateur]) || $this->Emprunts->exists(['id' => $id, 'nom_emprunteur' => $nomCreateur])); } /** * Index method * * @return \Cake\Network\Response|null */ public function index() { $this->paginate = [ 'contain' => ['Materiels', 'Sites'] ]; $emprunts = $this->paginate($this->Emprunts); $this->set('nbEmprunts', $this->Emprunts->find('all')->count()); $this->set(compact('emprunts')); $this->set('_serialize', ['emprunts']); } /** * View method * * @param string|null $id Emprunt id. * @return \Cake\Network\Response|null * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function view($id = null) { $emprunt = $this->Emprunts->get($id, [ 'contain' => ['Materiels', 'Sites'] ]); $this->set('emprunt', $emprunt); $this->set('_serialize', ['emprunt']); } /** * Add method * * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise. */ public function add() { $emprunt = $this->Emprunts->newEntity(); if ($this->request->is('post')) { $emprunt = $this->Emprunts->patchEntity($emprunt, $this->request->data); if ($this->Emprunts->save($emprunt)) { $this->Flash->success(__('L\'emprunt a bien été ajouté.')); return $this->redirect(['controller' => 'Materiels', 'action' => 'view', $this->request->getAttribute('params')['pass'][0]]); } else { $this->Flash->error(__('L\'emprunt n\'a pas pu être ajouté..')); } } $materiels = $this->Emprunts->Materiels->find('list'); $numMateriel = $this->Emprunts->Materiels->find()->select('numero_laboratoire')->where(['id =' => $this->request->getAttribute('params')['pass'][0]])->first()['numero_laboratoire']; // Gestion du lieu de stockage : soit on cache la DIV 'interne' et on affiche la DIV 'externe', soit on fait l'inverse (par defaut, interne) $disp_interne = 'display:block'; $disp_externe = 'display:none'; $interne = $emprunt->get('emprunt_interne'); if ($interne !== null) { if ($emprunt->get('emprunt_interne') == 1) { $disp_interne = 'display:block'; $disp_externe = 'display:none'; } else { $disp_interne = 'display:none'; $disp_externe = 'display:block'; } } $nom_emprunteur_int = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0]; $mail_emprunteur_int = TableRegistry::get('Users')->find()->select('email')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['email']; $nom_emprunteur_ext = ''; $mail_emprunteur_ext = ''; $utilisateurs = TableRegistry::get('LdapConnections')->getListUsers(); $sites = $this->Emprunts->Sites->find('list', [ 'keyField' => 'id', 'valueField' => 'nom']); $this->set(compact('emprunt', 'materiels', 'numMateriel', 'disp_externe', 'disp_interne', 'nom_emprunteur_int', 'mail_emprunteur_int', 'nom_emprunteur_ext', 'mail_emprunteur_ext', 'utilisateurs', 'sites')); $this->set('_serialize', ['emprunt']); } /** * Edit method * * @param string|null $id Emprunt id. * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise. * @throws \Cake\Network\Exception\NotFoundException When record not found. */ public function edit($id = null) { $emprunt = $this->Emprunts->get($id, [ 'contain' => [] ]); if ($this->request->is(['patch', 'post', 'put'])) { $emprunt = $this->Emprunts->patchEntity($emprunt, $this->request->data); if ($this->Emprunts->save($emprunt)) { $this->Flash->success(__('L\'emprunt a bien été édité.')); return $this->redirect(['action' => 'view', $id]); } else { $this->Flash->error(__('L\'emprunt n\'a pas pu être édité.')); } } $materiels = $this->Emprunts->Materiels->find('list'); $numMateriel = $this->Emprunts->Materiels->find()->select('numero_laboratoire')->where(['id =' => $emprunt->get('materiel_id')])->first()['numero_laboratoire']; // Gestion du lieu de stockage : soit on cache la DIV 'interne' et on affiche la DIV 'externe', soit on fait l'inverse (par defaut, interne) $disp_interne = 'display:block'; $disp_externe = 'display:none'; $interne = $emprunt->get('emprunt_interne'); if ($interne !== null) { if ($emprunt->get('emprunt_interne') == 1) { $disp_interne = 'display:block'; $disp_externe = 'display:none'; } else { $disp_interne = 'display:none'; $disp_externe = 'display:block'; } } $nom_emprunteur_int = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0]; $mail_emprunteur_int = TableRegistry::get('Users')->find()->select('email')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['email']; $nom_emprunteur_ext = ''; $mail_emprunteur_ext = ''; $utilisateurs = TableRegistry::get('LdapConnections')->getListUsers(); $sites = $this->Emprunts->Sites->find('list', [ 'keyField' => 'id', 'valueField' => 'nom']); $this->set(compact('emprunt', 'materiels', 'numMateriel', 'disp_externe', 'disp_interne', 'nom_emprunteur_int', 'mail_emprunteur_int', 'nom_emprunteur_ext', 'mail_emprunteur_ext', 'utilisateurs', 'sites')); $this->set('_serialize', ['emprunt']); } /** * Delete method * * @param string|null $id Emprunt id. * @return \Cake\Network\Response|null Redirects to index. * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function delete($id = null) { $this->request->allowMethod(['post', 'delete']); $emprunt = $this->Emprunts->get($id); if ($this->Emprunts->delete($emprunt)) { $this->Flash->success(__('L\'emprunt a bien été supprimé.')); } else { $this->Flash->error(__('L\'emprunt n\'a pas pu être supprimé.')); } return $this->redirect(['action' => 'index']); } /** * GetConditionForField method * * @param unknown $fieldName * @return string[]|NULL */ private function getConditionForField($fieldName) { $searchFieldName = 's_' . $fieldName; if ( $this->request->getData($searchFieldName) !== null && ($this->request->getData($searchFieldName) != '')) return ["Suivis.$fieldName LIKE" => '%'.$this->request->getData($searchFieldName).'%']; return NULL; } public function find() { $s_site = $this->Emprunts->Sites->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'Sites.nom']); $s_nomEmprunteur = $this->Emprunts->find('list', [ 'keyField' => 'nom_emprunteur', 'valueField' => 'nom_emprunteur', 'order' => 'nom_emprunteur']); $s_e_lieu_detail = $this->Emprunts->find('list', [ 'keyField' => 'e_lieu_detail' , 'valueField' => 'e_lieu_detail', 'order' => 'e_lieu_detail', 'conditions' => array('emprunt_interne =' => '1')]); $materiels = $this->Emprunts->Materiels; $nom_emprunteur_ext = $this->Emprunts->find('list', [ 'keyField' => 'nom_emprunteur' , 'valueField' => 'nom_emprunteur', 'order' => 'nom_emprunteur', 'conditions' => ['emprunt_interne =' => '0' ]]); $nom_emprunteur_int = $this->Emprunts->find('list', [ 'keyField' => 'nom_emprunteur' , 'valueField' => 'nom_emprunteur', 'order' => 'nom_emprunteur', 'conditions' => array('emprunt_interne =' => '1' )]); $s_laboratoire =$this->Emprunts->find('list', [ 'keyField' => 'laboratoire' , 'valueField' => 'laboratoire', 'order' => 'laboratoire' , 'conditions' => array('emprunt_interne =' => '0')]); $sites = $this->Emprunts->Sites; $this->set(compact('s_site','s_nomEmprunteur', 'materiels','s_e_lieu_detail', 'nom_emprunteur_int','nom_emprunteur_ext','s_laboratoire','sites')); $resultTri = $this->request->session()->read("resultTri"); if ($this->request->is('post')) { $specificFieldsConditions = NULL; $nom_emprunteur = NULL; $periode_interventionRequest = NULL; if ($this->request->getData('s_date_emprunt') != '') $periode_interventionRequest['Emprunts.date_emprunt >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_emprunt')))); if ($this->request->getData('s_date_retour_emprunt') != '') $periode_interventionRequest['Emprunts.date_retour_emprunt <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_retour_emprunt')))); if($this->request->getData('emprunt_interne') == true){ $nom_emprunteur['Emprunts.emprunt_interne =']= true; if($this->request->getData('nom_emprunteur_int') != '') $nom_emprunteur['Emprunts.nom_emprunteur =']= $this->request->getData('nom_emprunteur_int'); if($this->request->getData('e_lieu_detail') != '') $nom_emprunteur['Emprunts.e_lieu_detail =']= $this->request->getData('e_lieu_detail'); if($this->request->getData('site') != '') $nom_emprunteur['Emprunts.site_id =']= $this->request->getData('site'); }else { $nom_emprunteur['Emprunts.emprunt_interne =']= false; if($this->request->getData('nom_emprunteur_ext') != '') $nom_emprunteur['Emprunts.nom_emprunteur =']= $this->request->getData('nom_emprunteur_ext'); if($this->request->getData('laboratoire') != '') $nom_emprunteur['Emprunts.laboratoire =']= $this->request->getData('laboratoire'); } /*if($this->request->getData('emprunt_interne') == true) $nom_emprunteur['Emprunts.emprunt_interne =']= true; else $nom_emprunteur['Emprunts.emprunt_interne =']= false;*/ $specificFieldsConditions = [ $periode_interventionRequest, $nom_emprunteur ]; // CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions // by default, no sort // $lastResults = $this->Emprunts->find('all' , ['conditions' => $specificFieldsConditions]); $this->paginate = ['limit' => 1000]; $_results = $this->paginate($lastResults); $this->set(compact('_results')); } // end if() else if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { $findedEmprunts = []; foreach($resultTri as $r) { array_push($findedEmprunts, $r->id); } $res = $this->Emprunts->find('all', ['limit' => 1000]); for($i = 0; $i < sizeof($findedEmprunts); $i++) { $res->orWhere(['id =' => $findedEmprunts[$i]]); } $this->paginate = ['limit' => 1000]; $_results = $this->paginate($res); $this->set(compact('_results')); } } }