mirror of
https://github.com/opensupports/opensupports.git
synced 2025-07-31 01:35:15 +02:00
fix department filter of ticket search
This commit is contained in:
parent
e44559618f
commit
74de20641f
@ -254,13 +254,28 @@ class SearchController extends Controller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setDepartmentFilter($departments,$allowedDepartments, $idStaff, &$filters){
|
private function setDepartmentFilter($departments,$ownDepartments, $idStaff, &$filters){
|
||||||
if ($filters != "") $filters .= " and ";
|
if ($filters != "") $filters .= " and ";
|
||||||
|
|
||||||
$validDepartments = $this->generateValidDepartmentList($departments, $allowedDepartments);
|
$restOfDepartments = $this->generateValidDepartmentList($departments, $ownDepartments);
|
||||||
|
$allowedDepartments = $this->generateValidDepartmentList($departments, $ownDepartments, true);
|
||||||
$first = TRUE;
|
$first = TRUE;
|
||||||
if($validDepartments){
|
|
||||||
foreach($validDepartments as $department) {
|
if(!$allowedDepartments && !$restOfDepartments){
|
||||||
|
foreach($ownDepartments as $department) {
|
||||||
|
if($first){
|
||||||
|
$filters .= " ( ";
|
||||||
|
$first = FALSE;
|
||||||
|
} else {
|
||||||
|
$filters .= " or ";
|
||||||
|
}
|
||||||
|
$filters .= "ticket.department_id = " . $department['id'];
|
||||||
|
}
|
||||||
|
$filters .= ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
if($allowedDepartments){
|
||||||
|
foreach($allowedDepartments as $department) {
|
||||||
if($first){
|
if($first){
|
||||||
$filters .= " ( ";
|
$filters .= " ( ";
|
||||||
$first = FALSE;
|
$first = FALSE;
|
||||||
@ -269,11 +284,24 @@ class SearchController extends Controller {
|
|||||||
}
|
}
|
||||||
$filters .= "ticket.department_id = " . $department;
|
$filters .= "ticket.department_id = " . $department;
|
||||||
}
|
}
|
||||||
$filters .= " or ";
|
|
||||||
}else{
|
|
||||||
$filters .= "(";
|
|
||||||
}
|
}
|
||||||
$filters .= "ticket.author_staff_id = " . $idStaff . ")";
|
|
||||||
|
if($restOfDepartments){
|
||||||
|
if($allowedDepartments) $filters .= " or ";
|
||||||
|
$filters .= "(ticket.author_staff_id = " . $idStaff . " and ";
|
||||||
|
$first = TRUE;
|
||||||
|
foreach($restOfDepartments as $department) {
|
||||||
|
if($first){
|
||||||
|
$filters .= " ( ";
|
||||||
|
$first = FALSE;
|
||||||
|
} else {
|
||||||
|
$filters .= " or ";
|
||||||
|
}
|
||||||
|
$filters .= "ticket.department_id = " . $department;
|
||||||
|
}
|
||||||
|
$filters .= "))";
|
||||||
|
}
|
||||||
|
if($allowedDepartments) $filters .= " )";
|
||||||
}
|
}
|
||||||
|
|
||||||
private function setAuthorFilter($authors, &$filters){
|
private function setAuthorFilter($authors, &$filters){
|
||||||
@ -339,20 +367,22 @@ class SearchController extends Controller {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private function generateValidDepartmentList($departments, $allowedDepartments){
|
private function generateValidDepartmentList($departments, $allowedDepartments, $allowed = false){
|
||||||
$result = [];
|
$allowedDepartmentsresult = [];
|
||||||
$managedDepartments = [];
|
$managedDepartments = [];
|
||||||
if($departments == null) $departments = [];
|
if($departments == null) $departments = [];
|
||||||
foreach ($allowedDepartments as $department) {
|
foreach ($allowedDepartments as $department) {
|
||||||
array_push($managedDepartments,$department['id']);
|
array_push($managedDepartments,$department['id']);
|
||||||
}
|
}
|
||||||
$result = array_intersect($departments,$managedDepartments);
|
|
||||||
|
|
||||||
if(empty($result)) $result = $managedDepartments;
|
$allowedDepartmentsresult = array_values(array_unique(array_intersect($departments,$managedDepartments)));
|
||||||
|
$authorsDepartments = array_values(array_diff($departments,$allowedDepartmentsresult));
|
||||||
|
|
||||||
$result = array_unique($result);
|
if($allowed){
|
||||||
|
return $allowedDepartmentsresult;
|
||||||
return $result;
|
}else{
|
||||||
|
return $authorsDepartments;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
//ORDER
|
//ORDER
|
||||||
|
@ -209,7 +209,7 @@ class SearchControllerTest extends TestCase {
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]),
|
]),
|
||||||
'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 = 2 or ticket.department_id = 1 or ticket.department_id = 3 or ticket.author_staff_id = 1) GROUP BY ticket.id'
|
'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 = 2 or ticket.department_id = 1 or ticket.department_id = 3) GROUP BY ticket.id'
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
@ -228,12 +228,12 @@ class SearchControllerTest extends TestCase {
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]),
|
]),
|
||||||
'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.author_staff_id = 1) GROUP BY ticket.id'
|
'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->assertEquals(
|
||||||
$this->searchController->getSQLQuery([
|
$this->searchController->getSQLQuery([
|
||||||
'departments' => [1,2,3],
|
'departments' => [1,2,3,4],
|
||||||
'staffId' => 1,
|
'staffId' => 1,
|
||||||
'allowedDepartments' => [
|
'allowedDepartments' => [
|
||||||
[
|
[
|
||||||
@ -241,13 +241,26 @@ class SearchControllerTest extends TestCase {
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 1
|
'id' => 1
|
||||||
],
|
|
||||||
[
|
|
||||||
'id' => 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 or ticket.author_staff_id = 1) GROUP BY ticket.id'
|
'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.author_staff_id = 1 and ( ticket.department_id = 3 or ticket.department_id = 4)) ) GROUP BY ticket.id'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$this->searchController->getSQLQuery([
|
||||||
|
'departments' => [2],
|
||||||
|
'staffId' => 1,
|
||||||
|
'allowedDepartments' => [
|
||||||
|
[
|
||||||
|
'id' => 5
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'id' => 6
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]),
|
||||||
|
'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 and ( ticket.department_id = 2)) GROUP BY ticket.id'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user