From 5b75e5d732168a9e9fb195ac9833cc0c2b250f4c Mon Sep 17 00:00:00 2001 From: Guillermo Giuliana Date: Mon, 2 Mar 2020 19:08:19 -0300 Subject: [PATCH] allow empty query in get authors path, changes names --- server/controllers/ticket/get-authors.php | 24 +++++++++---------- server/controllers/ticket/search.php | 7 +++--- ...lackList.php => validAuthorsBlackList.php} | 2 +- tests/ticket/get-authors.rb | 7 ++++++ 4 files changed, 23 insertions(+), 17 deletions(-) rename server/libs/validations/{validBlackList.php => validAuthorsBlackList.php} (89%) diff --git a/server/controllers/ticket/get-authors.php b/server/controllers/ticket/get-authors.php index 09c63c21..c97c93c8 100644 --- a/server/controllers/ticket/get-authors.php +++ b/server/controllers/ticket/get-authors.php @@ -35,11 +35,11 @@ class GetAuthorsController extends Controller { 'permission' => 'staff_1', 'requestData' => [ 'query' => [ - 'validation' => DataValidator::oneOf(DataValidator::notBlank(),DataValidator::nullType()), + 'validation' => DataValidator::oneOf(DataValidator::stringType(),DataValidator::nullType()), 'error' => ERRORS::INVALID_QUERY ], 'blackList' => [ - 'validation' => DataValidator::oneOf(DataValidator::validBlackList(),DataValidator::nullType()), + 'validation' => DataValidator::oneOf(DataValidator::validAuthorsBlackList(),DataValidator::nullType()), 'error' => ERRORS::INVALID_BLACK_LIST ] ] @@ -49,25 +49,25 @@ class GetAuthorsController extends Controller { public function handler() { $query = Controller::request('query'); - $idAuthorsQuery = "SELECT id,name,level FROM staff " . $this->GenerateAuthorsIdQuery($query) . " LIMIT 10"; - $authorsIdList = RedBean::getAll($idAuthorsQuery, [':query' => "%" .$query . "%",':query2' => $query . "%"] ); - $authorsList = []; + $authorsQuery = "SELECT id,name,level FROM staff " . $this->generateAuthorsIdQuery($query) . " LIMIT 10"; + $authorsMatch = RedBean::getAll($authorsQuery, [':query' => "%" .$query . "%",':queryAtBeginning' => $query . "%"] ); + $authors = []; - foreach($authorsIdList as $item) { - if($item['level'] >=1 && $item['level'] <= 3){ - $author = Staff::getDataStore($item['id']*1); + foreach($authorsMatch as $authorMatch) { + if($authorMatch['level'] >=1 && $authorMatch['level'] <= 3){ + $author = Staff::getDataStore($authorMatch['id']*1); } else { - $author = User::getDataStore($item['id']*1); + $author = User::getDataStore($authorMatch['id']*1); } - array_push($authorsList, $author->toArray()); + array_push($authors, $author->toArray()); } Response::respondSuccess([ - 'authors' => $authorsList + 'authors' => $authors ]); } public function generateAuthorsIdQuery($query) { if ($query){ - return "WHERE name LIKE :query " . $this->generateStaffBlackListQuery() . " UNION SELECT id,name,signup_date FROM user WHERE name LIKE :query " . $this->generateUserBlackListQuery() . " ORDER BY CASE WHEN (name LIKE :query2) THEN 1 ELSE 2 END ASC "; + return "WHERE name LIKE :query " . $this->generateStaffBlackListQuery() . " UNION SELECT id,name,signup_date FROM user WHERE name LIKE :query " . $this->generateUserBlackListQuery() . " ORDER BY CASE WHEN (name LIKE :queryAtBeginning) THEN 1 ELSE 2 END ASC "; } else { return "WHERE 1=1 ". $this->generateStaffBlackListQuery() . " UNION SELECT id,name,signup_date FROM user WHERE 1=1". $this->generateUserBlackListQuery() ." ORDER BY id"; } diff --git a/server/controllers/ticket/search.php b/server/controllers/ticket/search.php index 4729eefa..0634c970 100644 --- a/server/controllers/ticket/search.php +++ b/server/controllers/ticket/search.php @@ -134,9 +134,8 @@ class SearchController extends Controller { $query = $this->getSQLQuery($inputs); $queryWithOrder = $this->getSQLQueryWithOrder($inputs); - //throw new Exception($queryWithOrder); - $totalCount = RedBean::getAll("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2", [':query' => "%" . $inputs['query'] . "%", ':query2' => $inputs['query'] . "%" ])[0]['COUNT(*)']; - $ticketIdList = RedBean::getAll($queryWithOrder, [':query' => "%" . $inputs['query'] . "%", ':query2' => $inputs['query'] . "%"]); + $totalCount = RedBean::getAll("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2", [':query' => "%" . $inputs['query'] . "%", ':queryAtBeginning' => $inputs['query'] . "%" ])[0]['COUNT(*)']; + $ticketIdList = RedBean::getAll($queryWithOrder, [':query' => "%" . $inputs['query'] . "%", ':queryAtBeginning' => $inputs['query'] . "%"]); $ticketList = []; foreach ($ticketIdList as $item) { $ticket = Ticket::getDataStore($item['id']); @@ -411,7 +410,7 @@ class SearchController extends Controller { if($querysearch !== null){ $ticketeventOrder = ( $ticketEventTableExists ? " WHEN (ticketevent.content LIKE :query) THEN 5 " : ""); - $order .= "CASE WHEN (ticket.ticket_number LIKE :query) THEN 1 WHEN (ticket.title LIKE :query2) THEN 2 WHEN (ticket.title LIKE :query) THEN 3 WHEN ( ticket.content LIKE :query) THEN 4 " . $ticketeventOrder ."END asc, "; + $order .= "CASE WHEN (ticket.ticket_number LIKE :query) THEN 1 WHEN (ticket.title LIKE :queryAtBeginning) THEN 2 WHEN (ticket.title LIKE :query) THEN 3 WHEN ( ticket.content LIKE :query) THEN 4 " . $ticketeventOrder ."END asc, "; } } diff --git a/server/libs/validations/validBlackList.php b/server/libs/validations/validAuthorsBlackList.php similarity index 89% rename from server/libs/validations/validBlackList.php rename to server/libs/validations/validAuthorsBlackList.php index 8dd644d0..017ae62c 100644 --- a/server/libs/validations/validBlackList.php +++ b/server/libs/validations/validAuthorsBlackList.php @@ -4,7 +4,7 @@ namespace CustomValidations; use Respect\Validation\Rules\AbstractRule; -class ValidBlackList extends AbstractRule { +class ValidAuthorsBlackList extends AbstractRule { public function validate($blackList) { if(is_array(json_decode($blackList))){ diff --git a/tests/ticket/get-authors.rb b/tests/ticket/get-authors.rb index 80c0ef93..04982816 100644 --- a/tests/ticket/get-authors.rb +++ b/tests/ticket/get-authors.rb @@ -73,5 +73,12 @@ describe '/ticket/get-authors/' do (result['status']).should.equal('success') (result['data']['authors'].size).should.equal(1) (result['data']['authors'][0]['name']).should.equal('eemilia') + + result = request('/ticket/get-authors', { + csrf_userid: $csrf_userid, + csrf_token: $csrf_token, + query: '', + }) + (result['status']).should.equal('success') end end \ No newline at end of file