<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\ORM\TableRegistry;

/**
 * Emprunts Controller
 *
 * @property \App\Model\Table\EmpruntsTable $Emprunts
 */
class EmpruntsController extends AppController
{

    // "l'" emprunt (et non pas "le emprunt")
    public function getArticle() { return "L'"; }
    

    /**
     *
     * @param
     *            $user
     * @return boolean Give authorization for emprunts
     */
    //public function isAuthorized($user)
    public function isAuthorized($user,
        $action = null, $id=null, $role=null) {
        //$action = null, $id=null, $role=null, $userCname=null) {
        // $configuration = $this->confLabinvent;
        // $action = $this->request->getAttribute('params')['action'];
        // $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
        //if (!$id) $id = $this->getIdPassed();
        if (!$id) $id = $this->e_id;
            
        //$action = $this->getActionPassed();
        if (!$action) $action = $this->a;
        
        /*
        $IS_RELATED_ENTITY_ID = false;
        if ($action=='add') $IS_RELATED_ENTITY_ID = true;
        return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID, $user); // $user, $userCname
        */
        $related_matos_id = null;
        if ($action=='add') {
            // Pas de création de prêt sans préciser (à l'avance, dans l'url) le matériel concerné
            // => access denied
            if (!$id) return false;
            // L'id est celui du matos associé
            $related_matos_id = $id;
            $id=null;
        }
        
        return $this->isAuthorizedAction($action, $id, $related_matos_id, $user); // $user, $userCname
        
        // LA SUITE EST A VIRER
        
        
        
        
        
        
        
        
        
        //$role = $this->getUserRole($user);
        $u = $this->getUserEntity($user);
        
        // add : only si le matos est VALIDATED et si can_manage
        if ($action == 'add') {
            //debug($this->getRelatedMateriel($id)->id);
            // Pour 'add', l'id n'est pas celui de l'emprunt mais du matos
            //if (!$id) $id=$this->getIdPassed();
            $m = $this->getRelatedMateriel($id);
            //return $m->is_validated && $m->isLendableByUser($this->getCurrentUserEntity());
            //return $m->is_validated && $m->isLendableByUser($this->getUserEntity($user));
            return $m->canBeLentByUser($u);
            //return $m->is_validated && $m->isManageableByUser($user);
            //return $m->is_validated && $m->isManageableByUser($this->u);
            //return $this->relatedMaterielIsValidated($id);
            //return $this->matosIsValidated($this->e->materiel_id);   
        }
        /*
        // Responsable + peut tout faire
        // if ($this->userHasRoleAtLeast('Responsable')) return true;
        if ($this->USER_IS_RESP_AT_LEAST()) return true;
        */
        
        // Pour un "utilisateur"
        if (in_array($action, [
            'edit',
            'delete'
        ])) {
            // (EP 20200515)
            $e = $this->getEntity($id, $WITH_RELATED_MATERIEL=true);
            return $e->materiel->canBeLentByUser($u);
            /* OLD conditions
            // $id = (int)$this->request->getAttribute('params')['pass'][0];
            if ($this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0]))
                return true;
            */
        }
        
        // Par défaut
        return parent::isAuthorized($user);
    }
    
    /*
    //@Override
    protected function getRelatedMaterielForId($id, $action=null) {
        // Si action 'add', id = celui du materiel
        if ($action == 'add') return $this->getMateriel($id);
        // Sinon, id = celui de l'entité (emprunt)
        return $this->getEntity($id, $WITH_RELATED_MATERIEL=true)->materiel;
    }
    */
    
    //@Override parent
    protected function setAuthorizations() {
        
        // Action 'add' (ajout d'une nouvelle entité)
        $this->setAuthorizationsForAction('add', ['VALIDATED',1]);
        //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]);
        //$this->setAuthorizationsForAction('add', 'edit');
        
        // Action 'edit' (modif d'une entité) => comme pour 'add'
        $this->setAuthorizationsForAction('edit', 'add', [ 
            //'user' => 0,
            //'user' => -1,
            //'user' => ['default',0],
            //'user' => ['default',1],
            'super' => ['default',0],
        ]);
        // Action 'edit' (modif d'une entité) => comme pour 'add'
        $this->setAuthorizationsForAction('delete', 'add', [
            //'super' => ['default',0]
            'super' => 'edit'
        ]);
        
    } // setAuthorizations
    
    
    /*
    private function relatedMaterielIsValidated($matos_id=null) {
        //$parent_id = $IS_EDIT ? $entity->materiel_id : $this->request->getParam('pass.0');
        if (!$matos_id) $matos_id = $this->request->getParam('pass.0');
        $matos = $this->Emprunts->Materiels->get($matos_id);
        return $matos->is_validated;
    }
    */

    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'
        ]);
    }

    /*
    public function get_status_from_dates($date_emprunt,$date_retour) {
        $today = new \DateTime('now');
        //echo $today->format('d/m/y');
        $date_emprunt = new \DateTime(strtr($date_emprunt,'/','-')) ; //->format('d/m/y');
        // on ajoute 23h59m59s à date_retour pour autoriser le retour jqa la fin de la journée
        $date_retour = new \DateTime(strtr($date_retour,'/','-'));
        $date_retour->add(new \DateInterval('PT23H59M59S')); //->format('d/m/y');
        $delay = $today->diff($date_emprunt)->days;
        if ($today < $date_emprunt) {
            $status = "A VENIR";
            $delay = "dans " . ($delay==0?1:$delay);
        }
        else {
            if ($today <= $date_retour) {
                $status = "EN COURS";
            }
            else {
                $status = "TERMINÉ";
                $delay = $today->diff($date_retour)->days;
            }
            $delay = "depuis " . ($delay==0?1:$delay);
        }
        return [$status, $delay];
    }
    */
    
    /**
     * 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'
            ]
        ]);
        
        $entity = $emprunt;
        $this->set(compact('entity'));
        // envoi du controleur dans la vue, PAS BIEN mais pratique
        //$this->set('controller', $this);
        /* (EP) inutile
        $this->set('_serialize', [
            'emprunt'
        ]);
        */
    } //view()
    
    
    /**
     * Add or Edit method (do either add() or edit())
     * => Factorisation de add() et edit()
     * (voir aussi https://book.cakephp.org/3.0/en/orm.html)
     *
     * @param $IS_ADD: True = add ; False = edit
     * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise.
     */
    protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null,
        // uniquement à cause de parent::add_or_edit() :
        $entity_name=null, array $associated_entities=[], $with_parent=false) {
        
        $controller = 'Emprunts';
        
        // Si jamais la nouvelle méthode ne marche plus, revenir à l'ancienne en mettant à false
        $NEWWAY = TRUE;
        
        // On appelle la partie commune de cette méthode, dans AppController
        if ($NEWWAY) {
        /*
        parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "L'emprunt", [], $with_parent=true);
        if ($this->request->is(['patch','post','put'])) return;
        */
        $redirect = parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "L'emprunt", [], $with_parent=true);
        if ($redirect) return($redirect);
        $entity = $this->entityBuilt;
        $materiel = $this->parent;
        $materiels = $this->parents;
        /*
        $entity = $vars['entity'];
        $materiel = $vars['parent'];
        $materiels = $vars['parents'];
        */
        } // if $NEWWAY
        
        // (EP 20200429) déplacé tout ce bloc dans AppController
        else {
        $this->myDebug("step 3: EmpruntsController.add_or_edit()");
        
        $IS_EDIT = !$IS_ADD;
        
        /* (EP 20200326) 
         * Pour être plus générique,
         * On utilise désormais $entity au lieu d'un terme plus spécifique comme $emprunt 
         * (ou $suivi ou $materiel pour les controleurs de Suivis et Materiels, ...)
         * On utilisera aussi $this->$controller au lieu de $this->Emprunts (ou $this->Suivis ou $this->Materiels, ...)  
         */
        $controller = 'Emprunts';
        $entity = ($IS_ADD ?
            $this->$controller->newEntity()
            :
            // cf https://book.cakephp.org/3/fr/orm/retrieving-data-and-resultsets.html#eager-loading-associations
            // Ceci permettra des accès du type $suivi->type_suivi->nom depuis la vue
            //$this->Emprunts->get($id, ['contain' => ['TypeSuivis']]);
            $this->$controller->get($id, ['contain' => []])
        );
        //@deprecated
        $emprunt = $entity;
            
        //debug($suivi);
        // POST (on arrive ici après un SUBMIT)
        // add
        //if ($this->request->is('post')) {
        // edit
        if ($this->request->is(['patch','post','put'])) {
            //$entity = $this->Emprunts->patchEntity($suivi, $this->request->getData());
            $entity = $this->$controller->patchEntity($entity, $this->request->getData());
            $verb = $IS_ADD ? 'ajouté' : 'modifié';
            // SAVED OK
            //if ($this->Emprunts->save($suivi)) {
            if ($this->$controller->save($entity)) {
                $this->Flash->success(__("L'emprunt a bien été $verb"));
                $parent_id = $IS_ADD ? $this->request->getParam('pass.0') : $entity->materiel_id;
                // (EP) Redirection vers la vue parente (materiel emprunté) (depuis add ou edit)
                return $this->redirect([
                    'controller' => 'Materiels',
                    'action' => 'view',
                    $parent_id
                ]);
                /*                
                // ADD
                if ($IS_ADD) return $this->redirect([
                    'controller' => 'Materiels',
                    'action' => 'view',
                    $this->request->getAttribute('params')['pass'][0]
                ]);
                // EDIT
                else $this->setAction('view', $id);
                /S equivalent à
                else return $this->redirect([
                    'action' => 'view',
                    $id
                ]);
                S/
                */
            }
            // SAVED KO
            else {
                $this->Flash->error(__("L'emprunt n'a pas pu être $verb"));
            }
        } // POST
        
        
        // START (on arrive ici la première fois qu'on ouvre la vue)
        $materiels = $this->$controller->Materiels->find('list');
        $materiel_id = $IS_EDIT ? $entity->materiel_id : $this->request->getAttribute('params')['pass'][0];
        // parent = materiel
        $parent = $this->$controller->Materiels->get($materiel_id);
        //$materiel = $this->$controller->Materiels->get($materiel_id);
        /* (EP) inutile
        $numMateriel = $this->$controller->Materiels->find()
        ->select('numero_laboratoire')
        ->where([
            'id =' => $materiel_id
        ])
        ->first()['numero_laboratoire'];
        */
        } // if !$NEWWAY
        
        
        /* 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)
         */
        // 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';
        if ($entity->emprunt_interne !== null && $entity->emprunt_interne != 1) {
            $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->getSession()->read('authType')
                )[0]
            ])
            ->first()['email'];
        $nom_emprunteur_ext = '';
        $mail_emprunteur_ext = '';
        
        $utilisateurs = TableRegistry::get('LdapConnections')->getListUsers();
        
        $sites = $this->$controller->Sites->find('list', [
            'keyField' => 'id',
            'valueField' => 'nom'
        ]);
        
        /* déjà fait par AppController
         $this->set(compact(
         'IS_ADD',
         
         //'suivi',    // @deprecated
         'entity',   // nouveau nom
         
         'parent',   // nouveau nom
         'parents' // nouveau nom
         //'materiel', // @deprecated
         //'materiels', // @deprecated
         ));
         */
        $this->set(compact(
            // (EP) inutile
            //'numMateriel',
            
            'disp_externe', 'disp_interne', 
            'nom_emprunteur_int', 'mail_emprunteur_int', 
            'nom_emprunteur_ext', 'mail_emprunteur_ext', 
            'utilisateurs', 
            'sites'
        ));
        /* (EP) inutile
        $this->set('_serialize', [
            'emprunt'
        ]);
        */
    
    } //add_or_edit()
    
    
    /**
     * Add method
     *
     * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
     */
    // (EP 20200326) NEW add() action
    //public function add()
    public function add($valeurs = null, $erreurs = null) {
        $this->add_or_edit(TRUE, null, $valeurs, $erreurs);
    }
    // OLD add() action
    private function OLD_add() {
        $emprunt = $this->Emprunts->newEntity();
        if ($this->request->is('post')) {
            $emprunt = $this->Emprunts->patchEntity($emprunt, $this->request->getData());
            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->getSession()
                ->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.
     */
    // (EP 20200326) NEW edit() action
    public function edit($id = null) {
        $this->add_or_edit(FALSE, $id);
    }
    // OLD edit() action
    private function OLD_edit($id = null) {
        $emprunt = $this->Emprunts->get($id, [
            'contain' => []
        ]);
        if ($this->request->is([
            'patch',
            'post',
            'put'
        ])) {
            $emprunt = $this->Emprunts->patchEntity($emprunt, $this->request->getData());
            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->getSession()
                ->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é.'));
        }
        $this->setAction('index');
        /* equivaut à
        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->getSession()->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'));
        }
    }
}