ticket search list frontend
This commit is contained in:
parent
5219b91388
commit
2678947f85
|
@ -0,0 +1,84 @@
|
||||||
|
import React from 'react';
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
import API from 'lib-app/api-call';
|
||||||
|
import i18n from 'lib-app/i18n';
|
||||||
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
|
import TicketList from 'app-components/ticket-list';
|
||||||
|
import Message from 'core-components/message';
|
||||||
|
|
||||||
|
class TicketQueryList extends React.Component {
|
||||||
|
|
||||||
|
state = {
|
||||||
|
tickets: [],
|
||||||
|
page: 1,
|
||||||
|
pages: 0,
|
||||||
|
error: null,
|
||||||
|
loading: true
|
||||||
|
};
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
this.getTickets();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{(this.state.error) ? <Message type="error">{i18n('ERROR_RETRIEVING_TICKETS')}</Message> : <TicketList {...this.getTicketListProps()}/>}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getTickets() {
|
||||||
|
this.setState({
|
||||||
|
loading:true
|
||||||
|
})
|
||||||
|
API.call({
|
||||||
|
path: '/ticket/search',
|
||||||
|
data: {
|
||||||
|
page : this.state.page,
|
||||||
|
...this.props.filters
|
||||||
|
}
|
||||||
|
}).then((result) => {
|
||||||
|
this.setState({
|
||||||
|
tickets: result.data.tickets,
|
||||||
|
page: result.data.page,
|
||||||
|
pages: result.data.pages,
|
||||||
|
error: null,
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
}).catch((result) => this.setState({
|
||||||
|
loading: false,
|
||||||
|
error: result.message
|
||||||
|
}));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onPageChange(event) {
|
||||||
|
this.setState({page: event.target.value}, () => this.getTickets());
|
||||||
|
}
|
||||||
|
|
||||||
|
getTicketListProps () {
|
||||||
|
const {page,pages,loading,tickets} = this.state;
|
||||||
|
return {
|
||||||
|
userId: this.props.userId,
|
||||||
|
ticketPath: '/admin/panel/tickets/view-ticket/',
|
||||||
|
tickets,
|
||||||
|
page,
|
||||||
|
pages,
|
||||||
|
loading,
|
||||||
|
type: 'secondary',
|
||||||
|
showDepartmentDropdown: false,
|
||||||
|
closedTicketsShown: false,
|
||||||
|
onPageChange:this.onPageChange.bind(this)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect((store) => {
|
||||||
|
return {
|
||||||
|
userId: store.session.userId
|
||||||
|
};
|
||||||
|
})(TicketQueryList);
|
|
@ -33,6 +33,7 @@ import AdminPanelMyAccount from 'app/admin/panel/dashboard/admin-panel-my-accoun
|
||||||
import AdminPanelMyTickets from 'app/admin/panel/tickets/admin-panel-my-tickets';
|
import AdminPanelMyTickets from 'app/admin/panel/tickets/admin-panel-my-tickets';
|
||||||
import AdminPanelNewTickets from 'app/admin/panel/tickets/admin-panel-new-tickets';
|
import AdminPanelNewTickets from 'app/admin/panel/tickets/admin-panel-new-tickets';
|
||||||
import AdminPanelAllTickets from 'app/admin/panel/tickets/admin-panel-all-tickets';
|
import AdminPanelAllTickets from 'app/admin/panel/tickets/admin-panel-all-tickets';
|
||||||
|
import AdminPanelSearchTickets from 'app/admin/panel/tickets/admin-panel-search-tickets';
|
||||||
import AdminPanelViewTicket from 'app/admin/panel/tickets/admin-panel-view-ticket';
|
import AdminPanelViewTicket from 'app/admin/panel/tickets/admin-panel-view-ticket';
|
||||||
import AdminPanelCustomResponses from 'app/admin/panel/tickets/admin-panel-custom-responses';
|
import AdminPanelCustomResponses from 'app/admin/panel/tickets/admin-panel-custom-responses';
|
||||||
|
|
||||||
|
@ -113,6 +114,7 @@ export default (
|
||||||
<Route path="my-tickets" component={AdminPanelMyTickets} />
|
<Route path="my-tickets" component={AdminPanelMyTickets} />
|
||||||
<Route path="new-tickets" component={AdminPanelNewTickets} />
|
<Route path="new-tickets" component={AdminPanelNewTickets} />
|
||||||
<Route path="all-tickets" component={AdminPanelAllTickets} />
|
<Route path="all-tickets" component={AdminPanelAllTickets} />
|
||||||
|
<Route path="search-tickets" component={AdminPanelSearchTickets} />
|
||||||
<Route path="custom-responses" component={AdminPanelCustomResponses} />
|
<Route path="custom-responses" component={AdminPanelCustomResponses} />
|
||||||
<Route path="view-ticket/:ticketNumber" component={AdminPanelViewTicket} />
|
<Route path="view-ticket/:ticketNumber" component={AdminPanelViewTicket} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import React from 'react';
|
||||||
|
import {connect} from 'react-redux';
|
||||||
|
|
||||||
|
import i18n from 'lib-app/i18n';
|
||||||
|
|
||||||
|
import TicketQueryList from 'app-components/ticket-query-list';
|
||||||
|
|
||||||
|
import Header from 'core-components/header';
|
||||||
|
import Message from 'core-components/message';
|
||||||
|
|
||||||
|
class AdminPanelSearchTickets extends React.Component {
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="admin-panel-all-tickets">
|
||||||
|
<Header title={i18n('ALL_TICKETS')} description={i18n('SEARCH_TICKETS_DESCRIPTION')} />
|
||||||
|
{(this.props.error) ? <Message type="error">{i18n('ERROR_RETRIEVING_TICKETS')}</Message> : <TicketQueryList filters ={this.getFilters()}/>}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getFilters() {
|
||||||
|
return {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect((store) => {
|
||||||
|
return {
|
||||||
|
error: store.adminData.allTicketsError
|
||||||
|
};
|
||||||
|
})(AdminPanelSearchTickets);
|
|
@ -93,6 +93,7 @@ export default {
|
||||||
'CHANGE_EMAIL': 'Change email',
|
'CHANGE_EMAIL': 'Change email',
|
||||||
'CHANGE_PASSWORD': 'Change password',
|
'CHANGE_PASSWORD': 'Change password',
|
||||||
'NAME': 'Name',
|
'NAME': 'Name',
|
||||||
|
'SEARCH': 'Search',
|
||||||
'SIGNUP_DATE': 'Sign up date',
|
'SIGNUP_DATE': 'Sign up date',
|
||||||
'SEARCH_USERS': 'Search users...',
|
'SEARCH_USERS': 'Search users...',
|
||||||
'SEARCH_EMAIL': 'Search email...',
|
'SEARCH_EMAIL': 'Search email...',
|
||||||
|
@ -293,6 +294,7 @@ export default {
|
||||||
'MY_TICKETS_DESCRIPTION': 'Here you can view the tickets you are responsible for.',
|
'MY_TICKETS_DESCRIPTION': 'Here you can view the tickets you are responsible for.',
|
||||||
'NEW_TICKETS_DESCRIPTION': 'Here you can view all the new tickets that are not assigned by anyone.',
|
'NEW_TICKETS_DESCRIPTION': 'Here you can view all the new tickets that are not assigned by anyone.',
|
||||||
'ALL_TICKETS_DESCRIPTION': 'Here you can view the tickets of the departments you are assigned.',
|
'ALL_TICKETS_DESCRIPTION': 'Here you can view the tickets of the departments you are assigned.',
|
||||||
|
'SEARCH_TICKETS_DESCRIPTION': 'Here you can search tickets by specifics filters.',
|
||||||
'TICKET_VIEW_DESCRIPTION': 'This ticket has been sent by a customer. Here you can respond or assign the ticket',
|
'TICKET_VIEW_DESCRIPTION': 'This ticket has been sent by a customer. Here you can respond or assign the ticket',
|
||||||
'BAN_USERS_DESCRIPTION': 'Here you can see a list of banned emails, you can un-ban them or add more emails to the list.',
|
'BAN_USERS_DESCRIPTION': 'Here you can see a list of banned emails, you can un-ban them or add more emails to the list.',
|
||||||
'LIST_USERS_DESCRIPTION': 'This is the list of users that are registered in this platform. You can search for someone in particular, delete it or ban it.',
|
'LIST_USERS_DESCRIPTION': 'This is the list of users that are registered in this platform. You can search for someone in particular, delete it or ban it.',
|
||||||
|
|
|
@ -50,6 +50,7 @@ class GetAllTicketsStaffController extends Controller {
|
||||||
]);
|
]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response::respondSuccess([
|
Response::respondSuccess([
|
||||||
'tickets' => $this->getTicketList()->toArray(true),
|
'tickets' => $this->getTicketList()->toArray(true),
|
||||||
'pages' => $this->getTotalPages()
|
'pages' => $this->getTotalPages()
|
||||||
|
|
|
@ -116,17 +116,21 @@ class SearchController extends Controller {
|
||||||
|
|
||||||
$query = $this->getSQLQuery($inputs);
|
$query = $this->getSQLQuery($inputs);
|
||||||
$queryWithOrder = $this->getSQLQueryWithOrder($inputs);
|
$queryWithOrder = $this->getSQLQueryWithOrder($inputs);
|
||||||
|
|
||||||
$totalCount = RedBean::getAll("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2")[0]['COUNT(*)'];
|
$totalCount = RedBean::getAll("SELECT COUNT(*) FROM (SELECT COUNT(*) " . $query . " ) AS T2")[0]['COUNT(*)'];
|
||||||
$ticketList = RedBean::getAll($queryWithOrder);
|
$ticketIdList = RedBean::getAll($queryWithOrder);
|
||||||
|
$ticketList = [];
|
||||||
|
|
||||||
|
foreach ($ticketIdList as $item) {
|
||||||
|
$ticket = Ticket::getDataStore($item['id']);
|
||||||
|
array_push($ticketList, $ticket->toArray());
|
||||||
|
}
|
||||||
|
|
||||||
$ticketTableExists = RedBean::exec("select table_name from information_schema.tables where table_name = 'ticket';");
|
$ticketTableExists = RedBean::exec("select table_name from information_schema.tables where table_name = 'ticket';");
|
||||||
|
|
||||||
if($ticketTableExists){
|
if($ticketTableExists){
|
||||||
Response::respondSuccess([
|
Response::respondSuccess([
|
||||||
'tickets' => $ticketList,
|
'tickets' => $ticketList,
|
||||||
'pages' => ceil($totalCount / 10),
|
'pages' => ceil($totalCount / 10),
|
||||||
'page' => $inputs['page'] ? $inputs['page'] : 1
|
'page' => $inputs['page'] ? ($inputs['page']*1) : 1
|
||||||
]);
|
]);
|
||||||
}else{
|
}else{
|
||||||
Response::respondSuccess([]);
|
Response::respondSuccess([]);
|
||||||
|
@ -151,7 +155,7 @@ class SearchController extends Controller {
|
||||||
public function getSQLQueryWithOrder($inputs) {
|
public function getSQLQueryWithOrder($inputs) {
|
||||||
$query = $this->getSQLQuery($inputs);
|
$query = $this->getSQLQuery($inputs);
|
||||||
$order = "";
|
$order = "";
|
||||||
$query = "SELECT ticket.id,ticket.title,ticket.ticket_number, ticket.priority ,ticket.department_id, ticket.author_id , ticket.date " . $query;
|
$query = "SELECT" . " ticket.id " . $query;
|
||||||
|
|
||||||
$this->setQueryOrder($inputs, $order);
|
$this->setQueryOrder($inputs, $order);
|
||||||
$inputs['page'] ? $page = $inputs['page'] : $page = 1 ;
|
$inputs['page'] ? $page = $inputs['page'] : $page = 1 ;
|
||||||
|
|
|
@ -0,0 +1,258 @@
|
||||||
|
<?php
|
||||||
|
// MOCKS
|
||||||
|
include_once 'tests/__lib__/Mock.php';
|
||||||
|
include_once 'tests/__mocks__/NullDataStoreMock.php';
|
||||||
|
include_once 'tests/__mocks__/ResponseMock.php';
|
||||||
|
include_once 'tests/__mocks__/ControllerMock.php';
|
||||||
|
include_once 'tests/__mocks__/SessionMock.php';
|
||||||
|
include_once 'tests/__mocks__/UserMock.php';
|
||||||
|
include_once 'tests/__mocks__/HashingMock.php';
|
||||||
|
include_once 'tests/__mocks__/SessionCookieMock.php';
|
||||||
|
include_once 'tests/__mocks__/RedBeanMock.php';
|
||||||
|
include_once 'data/ERRORS.php';
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use RedBeanPHP\Facade as RedBean;
|
||||||
|
|
||||||
|
class SearchControllerTest extends TestCase {
|
||||||
|
private $searchController;
|
||||||
|
|
||||||
|
protected function setUp() {
|
||||||
|
Session::initStubs();
|
||||||
|
Response::initStubs();
|
||||||
|
RedBean::initStubs();
|
||||||
|
RedBean::setStatics([
|
||||||
|
'exec' => \Mock::stub()->returns(1)
|
||||||
|
]);
|
||||||
|
Controller::$requestReturnMock = null;
|
||||||
|
$_SERVER['REMOTE_ADDR'] = 'MOCK_REMOTE';
|
||||||
|
$this->searchController = new SearchController();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTagsFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => []
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => [0]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( tag_ticket.tag_id = 0) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => [0,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 ( tag_ticket.tag_id = 0 or tag_ticket.tag_id = 1 or tag_ticket.tag_id = 2) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testClosedFilter() {
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'closed'=> null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'closed'=> 1
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ticket.closed = 1 GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'closed'=> '0'
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ticket.closed = 0 GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
public function testAssignedFilter(){
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'assigned'=> null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'assigned'=> '0'
|
||||||
|
]),
|
||||||
|
'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 IS NULL GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'assigned'=> 1
|
||||||
|
]),
|
||||||
|
'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 IS NOT NULL GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
public function testUnreadStaffFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'unreadStaff' => null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'unreadStaff' => '0'
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ticket.unread_staff = 0 GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'unreadStaff' => 1
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ticket.unread_staff = 1 GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPriorityFilter() {
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => []
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => [1]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( tag_ticket.tag_id = 1) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => [2,3]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( tag_ticket.tag_id = 2 or tag_ticket.tag_id = 3) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'tags' => [1,2,3]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( tag_ticket.tag_id = 1 or tag_ticket.tag_id = 2 or tag_ticket.tag_id = 3) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testdateRangeFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'dateRange' => null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'dateRange' => [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.date >= 1 and ticket.date <= 2) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
public function testDepartmentsFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'departments' => null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'departments' => [1]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( ticket.department_id = 1) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'departments' => [1,2,3]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( ticket.department_id = 1 or ticket.department_id = 2 or ticket.department_id = 3) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
public function testAuthorsFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'authors' => null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'authors' => [
|
||||||
|
[
|
||||||
|
'id' => 1,
|
||||||
|
'staff' => 1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 2,
|
||||||
|
'staff' => 0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]),
|
||||||
|
'FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE ( ticket.author_staff_id = 1 or ticket.author_id = 2) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testQueryFilter() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'query' => null
|
||||||
|
]),
|
||||||
|
'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'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'query' => 'hello world'
|
||||||
|
]),
|
||||||
|
"FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE (ticket.title LIKE '%hello world%' or ticket.content LIKE '%hello world%' or ticket.ticket_number LIKE '%hello world%' or (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%hello world%') ) GROUP BY ticket.id"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
public function testQueryWithOrder() {
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQueryWithOrder([
|
||||||
|
'page' => 1
|
||||||
|
]),
|
||||||
|
"SELECT ticket.id,ticket.title,ticket.ticket_number, ticket.priority ,ticket.department_id, ticket.author_id , ticket.date 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 ORDER BY ticket.closed asc, ticket.owner_id asc, ticket.unread_staff asc, ticket.priority desc, ticket.date desc LIMIT 10 OFFSET 0"
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQueryWithOrder([
|
||||||
|
'page' => 1,
|
||||||
|
'query' => 'stark'
|
||||||
|
]),
|
||||||
|
"SELECT ticket.id,ticket.title,ticket.ticket_number, ticket.priority ,ticket.department_id, ticket.author_id , ticket.date FROM (ticket LEFT JOIN tag_ticket ON tag_ticket.ticket_id = ticket.id LEFT JOIN ticketevent ON ticketevent.ticket_id = ticket.id) WHERE (ticket.title LIKE '%stark%' or ticket.content LIKE '%stark%' or ticket.ticket_number LIKE '%stark%' or (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%stark%') ) GROUP BY ticket.id ORDER BY CASE WHEN (ticket.ticket_number LIKE '%stark%') THEN ticket.ticket_number END desc,CASE WHEN (ticket.title LIKE '%stark%') THEN ticket.title END desc, CASE WHEN ( ticket.content LIKE '%stark%') THEN ticket.content END desc, CASE WHEN (ticketevent.type = 'COMMENT' and ticketevent.content LIKE '%stark%') THEN ticketevent.content END desc,ticket.closed asc, ticket.owner_id asc, ticket.unread_staff asc, ticket.priority desc, ticket.date desc LIMIT 10 OFFSET 0"
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQueryWithOrder([
|
||||||
|
'page' => 1,
|
||||||
|
'orderBy' => ['value' => 'closed', 'asc' => 1]
|
||||||
|
]),
|
||||||
|
"SELECT ticket.id,ticket.title,ticket.ticket_number, ticket.priority ,ticket.department_id, ticket.author_id , ticket.date 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 ORDER BY ticket.closed asc,ticket.closed asc, ticket.owner_id asc, ticket.unread_staff asc, ticket.priority desc, ticket.date desc LIMIT 10 OFFSET 0"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,10 +22,11 @@ require './user/send-recover-password.rb'
|
||||||
require './user/recover-password.rb'
|
require './user/recover-password.rb'
|
||||||
require './user/edit-password.rb'
|
require './user/edit-password.rb'
|
||||||
require './user/edit-email.rb'
|
require './user/edit-email.rb'
|
||||||
|
#require './ticket/search.rb'
|
||||||
require './user/get.rb'
|
require './user/get.rb'
|
||||||
require './user/enable-disable.rb'
|
require './user/enable-disable.rb'
|
||||||
require './ticket/create.rb'
|
|
||||||
require './ticket/seen.rb'
|
require './ticket/seen.rb'
|
||||||
|
require './ticket/create.rb'
|
||||||
require './ticket/comment.rb'
|
require './ticket/comment.rb'
|
||||||
require './ticket/get.rb'
|
require './ticket/get.rb'
|
||||||
require './ticket/custom-response.rb'
|
require './ticket/custom-response.rb'
|
||||||
|
|
Loading…
Reference in New Issue