From efcaae5b09ef46d5ff7961bb23d35c50d567c6de Mon Sep 17 00:00:00 2001 From: Peter Rotich <peter@enhancesoft.com> Date: Thu, 22 Mar 2018 10:11:51 +0000 Subject: [PATCH] Advanced Search: Selection Fields Make selection fields play well with Advanced Search --- include/class.dept.php | 2 +- include/class.search.php | 46 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/include/class.dept.php b/include/class.dept.php index a1a87164f..4eb0b8e22 100644 --- a/include/class.dept.php +++ b/include/class.dept.php @@ -107,7 +107,7 @@ implements TemplateVariable, Searchable { 'name' => new TextboxField(array( 'label' => __('Name'), )), - 'manager' => new AgentSelectionField(array( + 'manager' => new DepartmentManagerSelectionField(array( 'label' => __('Manager'), )), ); diff --git a/include/class.search.php b/include/class.search.php index d305ab16f..f1d1510de 100644 --- a/include/class.search.php +++ b/include/class.search.php @@ -723,7 +723,33 @@ class AdvancedSearchForm extends SimpleForm { // Advanced search special fields -class HelpTopicChoiceField extends ChoiceField { +class AdvancedSearchSelectionField extends ChoiceField { + + function getSearchQ($method, $value, $name=false) { + + + switch ($method) { + case 'includes': + case '!includes': + $Q = new Q(); + if (count($value) > 1) + $Q->add(array("{$name}__in" => array_keys($value))); + else + $Q->add(array($name => key($value))); + + if ($method == '!includes') + $Q->negate(); + return $Q; + break; + default: + return parent::getSearchQ($method, $value, $name); + } + + } + +} + +class HelpTopicChoiceField extends AdvancedSearchSelectionField { function hasIdValue() { return true; } @@ -734,7 +760,7 @@ class HelpTopicChoiceField extends ChoiceField { } require_once INCLUDE_DIR . 'class.dept.php'; -class DepartmentChoiceField extends ChoiceField { +class DepartmentChoiceField extends AdvancedSearchSelectionField { var $_choices = null; function getChoices($verbose=false) { @@ -764,6 +790,7 @@ class DepartmentChoiceField extends ChoiceField { } } + class AssigneeChoiceField extends ChoiceField { function getChoices($verbose=false) { global $thisstaff; @@ -902,7 +929,7 @@ trait ZeroMeansUnset { } } -class AgentSelectionField extends ChoiceField { +class AgentSelectionField extends AdvancedSearchSelectionField { use ZeroMeansUnset; function getChoices($verbose=false) { @@ -940,6 +967,17 @@ class AgentSelectionField extends ChoiceField { } } +class DepartmentManagerSelectionField extends AgentSelectionField { + + function getChoices($verbose=false) { + return Staff::getStaffMembers(); + } + + function getSearchQ($method, $value, $name=false) { + return parent::getSearchQ($method, $value, 'dept__manager_id'); + } +} + class TeamSelectionField extends ChoiceField { use ZeroMeansUnset; @@ -953,7 +991,7 @@ class TeamSelectionField extends ChoiceField { } } -class TicketStateChoiceField extends ChoiceField { +class TicketStateChoiceField extends AdvancedSearchSelectionField { function getChoices($verbose=false) { return array( 'open' => __('Open'), -- GitLab