From d30ec3563644fe4c5f8a69b8078b68e13a802548 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 13 Nov 2017 12:17:26 +0100 Subject: [PATCH] Now history.view.search searches through users+machines (as on its views) + TODO: manage space separated keywords --- build/database/repo/history.php | 50 +++++++++++++++++++++++++-------- build/database/repo/machine.php | 4 +++ build/database/repo/user.php | 14 +++++---- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/build/database/repo/history.php b/build/database/repo/history.php index 8bf3fb1..55e914b 100755 --- a/build/database/repo/history.php +++ b/build/database/repo/history.php @@ -235,34 +235,60 @@ /* [1] Recherche dans les relations 'machines' =========================================================*/ /* (1) On exécute la requête */ - $machines_r = new Repo('machine/search', [$id_warehouse, $keyword]); + $machines_rq = new Repo('machine/search', [$id_warehouse, $keyword]); + + $machines_rs = $machines_rq->answer(); /* (2) Gestion succès */ - if( $machines_r->error->get() == Err::Success ) - foreach($machines_r->answer() as $row) + if( is_array($machines_rs) ) + foreach($machines_rs as $row) $machine_ids[] = $row['id_machine']; /* [2] Recherche dans les relations 'users' =========================================================*/ /* (1) On cherche dans les utilisateurs */ - $users_r = new Repo('user/search', [$id_warehouse, $keyword]); + $users_rq = new Repo('user/search', [$id_warehouse, $keyword]); + + $users_rs = $users_rq->answer(); /* (2) Gestion succès */ - if( $users_r->error->get() == Err::Success ) - foreach($users_r->answer() as $row) + if( is_array($users_rs) ) + foreach($users_rs as $row) $user_ids[] = $row['id_user']; /* [3] On rédige/execute la requête =========================================================*/ - $history_r = DatabaseDriver::getPDO()->prepare("SELECT id_history FROM history - WHERE id_user IN (SELECT id_user FROM user WHERE username LIKE '%$keyword%') - or id_machine IN (SELECT id_machine FROM machine WHERE name LIKE '%$keyword%') - ORDER BY timestamp DESC;"); + /* (1) Recherche par utilisateur */ + $history_r_user = Table::get('history') + ->select('id_history') + ->whereIdUser([ $user_ids, Rows::COND_IN ]); - $history_r->execute(); + /* (2) Recherche par utilisateur */ + $history_r_machine = Table::get('history') + ->select('id_history') + ->whereIdMachine([ $machine_ids, Rows::COND_IN ]); - return DatabaseDriver::delNumeric( $history_r->fetchAll() ); + /* (3) On enregistre les entrées par utilisateur */ + $already_id = []; + $ids = $history_r_user->fetch(); + + foreach($ids as $user_result) + $already_id[ $user_result['id_history'] ] = null; + + /* (4) On ajoute les entrées par machines (si pas déja) */ + foreach($history_r_machine->fetch() as $machine_result) + + if( !isset($already_id[$machine_result['id_history']]) ){ + + $ids[] = $machine_result; + $already_id[ $machine_result['id_history'] ] = null; + + } + + + /* (5) On retourne le total */ + return $ids; } diff --git a/build/database/repo/machine.php b/build/database/repo/machine.php index 028834f..8cbcf21 100755 --- a/build/database/repo/machine.php +++ b/build/database/repo/machine.php @@ -65,6 +65,10 @@ * */ public static function search($id_warehouse, $keyword){ + + // make keyword lowercase + $keyword = strtolower($keyword); + // On recupere les donnees $search = Table::get('machine') ->whereIdWarehouse($id_warehouse) diff --git a/build/database/repo/user.php b/build/database/repo/user.php index c0f22a2..16a41ba 100755 --- a/build/database/repo/user.php +++ b/build/database/repo/user.php @@ -66,14 +66,18 @@ * */ public static function search($id_warehouse, $keyword){ + + // make keyword lowercase + $keyword = strtolower($keyword); + // On recupere les donnees $searchusers = DatabaseDriver::getPDO()->prepare("SELECT * FROM user WHERE id_warehouse = :id_warehouse - AND ( code LIKE '%".$keyword."%' - OR username LIKE '%".$keyword."%' - OR firstname LIKE '%".$keyword."%' - OR lastname LIKE '%".$keyword."%' - OR mail LIKE '%".$keyword."%' + AND ( LOWER(code) LIKE '%".$keyword."%' + OR LOWER(username) LIKE '%".$keyword."%' + OR LOWER(firstname) LIKE '%".$keyword."%' + OR LOWER(lastname) LIKE '%".$keyword."%' + OR LOWER(mail) LIKE '%".$keyword."%' ) ");