Merge pull request #705 from guillegiu/master

add owner filter to ticketSearch BE
This commit is contained in:
Guillermo Giuliana 2020-01-24 16:34:09 -03:00 committed by GitHub
commit ae34631bca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 109 additions and 1 deletions

View File

@ -27,6 +27,7 @@ DataValidator::with('CustomValidations', true);
* @apiParam {String} query A string to find into a ticket to make a custom search.
* @apiParam {Number} page The number of the page of the tickets.
* @apiParam {Object} orderBy A object {value, asc}with string and boolean to make a especific order of the search.
* @apiParam {Number[]} owners The ids of the owners to make a custom search.
*
* @apiUse NO_PERMISSION
* @apiUse INVALID_TAG_FILTER
@ -86,6 +87,10 @@ class SearchController extends Controller {
'validation' => DataValidator::oneOf(DataValidator::validAuthorsId(),DataValidator::nullType()),
'error' => ERRORS::INVALID_AUTHOR_FILTER
],
'owners' => [
'validation' => DataValidator::oneOf(DataValidator::validOwnersId(),DataValidator::nullType()),
'error' => ERRORS::INVALID_OWNER_FILTER
],
'assigned' => [
'validation' => DataValidator::oneOf(DataValidator::in(['0','1']),DataValidator::nullType()),
'error' => ERRORS::INVALID_ASSIGNED_FILTER
@ -107,6 +112,7 @@ class SearchController extends Controller {
'dateRange' => json_decode(Controller::request('dateRange')),
'departments' => json_decode(Controller::request('departments')),
'authors' => json_decode(Controller::request('authors'),true),
'owners' => json_decode(Controller::request('owners')),
'assigned' => Controller::request('assigned'),
'query' => Controller::request('query'),
'orderBy' => json_decode(Controller::request('orderBy'),true),
@ -177,6 +183,7 @@ class SearchController extends Controller {
$this->setDepartmentFilter($inputs['departments'],$inputs['allowedDepartments'], $inputs['staffId'], $filters);
}
if(array_key_exists('authors',$inputs)) $this->setAuthorFilter($inputs['authors'], $filters);
if(array_key_exists('owners',$inputs)) $this->setOwnerFilter($inputs['owners'], $filters);
if(array_key_exists('query',$inputs)) $this->setStringFilter($inputs['query'], $filters);
if($filters != "") $filters = " WHERE " . $filters;
}
@ -289,9 +296,27 @@ class SearchController extends Controller {
$filters .= "ticket.author_id = " . $author['id'];
}
}
$filters .= ")";
}
}
private function setOwnerFilter($owners, &$filters){
if($owners){
$first = TRUE;
if ($filters != "") $filters .= " and ";
foreach($owners as $owner){
if($first){
$filters .= "(";
$first = FALSE;
} else {
$filters .= " or ";
}
$filters .= "ticket.owner_id = " . $owner;
}
$filters .= ")";
}
}

View File

@ -91,6 +91,46 @@
* @apiDefine INVALID_QUERY
* @apiError {String} INVALID_QUERY The query is invalid.
*/
/**
* @apiDefine INVALID_TAG_FILTER
* @apiError {String} INVALID_TAG_FILTER The tag filter is invalid.
*/
/**
* @apiDefine INVALID_CLOSED_FILTER
* @apiError {String} INVALID_CLOSED_FILTER The closed filter is invalid.
*/
/**
* @apiDefine INVALID_UNREAD_STAFF_FILTER
* @apiError {String} INVALID_UNREAD_STAFF_FILTER The unread-staff filter is invalid.
*/
/**
* @apiDefine INVALID_PRIORITY_FILTER
* @apiError {String} INVALID_PRIORITY_FILTER The priority filter is invalid.
*/
/**
* @apiDefine INVALID_DATE_RANGE_FILTER
* @apiError {String} INVALID_DATE_RANGE_FILTER The date-range filter is invalid.
*/
/**
* @apiDefine INVALID_DEPARTMENT_FILTER
* @apiError {String} INVALID_DEPARTMENT_FILTER The department filter is invalid.
*/
/**
* @apiDefine INVALID_AUTHOR_FILTER
* @apiError {String} INVALID_AUTHOR_FILTER The author filter is invalid.
*/
/**
* @apiDefine INVALID_OWNER_FILTER
* @apiError {String} INVALID_OWNER_FILTER The owner filter is invalid.
*/
/**
* @apiDefine INVALID_ASSIGNED_FILTER
* @apiError {String} INVALID_ASSIGNED_FILTER The assigned filter is invalid.
*/
/**
* @apiDefine INVALID_ORDER_BY
* @apiError {String} INVALID_ORDER_BY The order-by is invalid.
*/
/**
* @apiDefine INVALID_TOPIC
* @apiError {String} INVALID_TOPIC The topic is invalid.
@ -288,6 +328,7 @@ class ERRORS {
const INVALID_DATE_RANGE_FILTER = 'INVALID_DATE_RANGE_FILTER';
const INVALID_DEPARTMENT_FILTER = 'INVALID_DEPARTMENT_FILTER';
const INVALID_AUTHOR_FILTER = 'INVALID_AUTHOR_FILTER';
const INVALID_OWNER_FILTER = 'INVALID_OWNER_FILTER';
const INVALID_ASSIGNED_FILTER = 'INVALID_ASSIGNED_FILTER';
const INVALID_ORDER_BY = 'INVALID_ORDER_BY';
const INVALID_TOPIC = 'INVALID_TOPIC';

View File

@ -0,0 +1,19 @@
<?php
namespace CustomValidations;
use Respect\Validation\Rules\AbstractRule;
class ValidOwnersId extends AbstractRule {
public function validate($owners) {
if(is_array(json_decode($owners))){
foreach (json_decode($owners) as $owner) {
$author = \Staff::getDataStore($owner);
if($author->isNull()) return false;
}
return true;
}
return false;
}
}

View File

@ -169,6 +169,29 @@ class SearchControllerTest extends TestCase {
);
}
public function testOwnerFilter() {
$this->assertEquals(
$this->searchController->getSQLQuery([
'owners' => [1,2]
]),
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE (ticket.owner_id = 1 or ticket.owner_id = 2) GROUP BY ticket.id'
);
$this->assertEquals(
$this->searchController->getSQLQuery([
'owners' => [6,1,9]
]),
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE (ticket.owner_id = 6 or ticket.owner_id = 1 or ticket.owner_id = 9) GROUP BY ticket.id'
);
$this->assertEquals(
$this->searchController->getSQLQuery([
'owners' => []
]),
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) GROUP BY ticket.id'
);
}
public function testDepartmentsFilter() {
$this->assertEquals(
$this->searchController->getSQLQuery([