diff --git a/src/Search.php b/src/Search.php index fb54d929443..c6e46a66d6f 100644 --- a/src/Search.php +++ b/src/Search.php @@ -1350,7 +1350,7 @@ public static function constructCriteriaSQL($criteria = [], $data = [], $searcho } /** - * Construct aditionnal SQL (select, joins, etc) for meta-criteria + * Construct additional SQL (select, joins, etc) for meta-criteria * * @since 9.4 * @@ -5167,29 +5167,20 @@ public static function addWhere($link, $nott, $itemtype, $ID, $searchtype, $val, case "glpi_ticketvalidations.status": case "glpi_changes.global_validation": case "glpi_changevalidations.status": - if ($val == 'all') { + if ($val != 'can' && !is_numeric($val)) { return ""; } $tocheck = []; - switch ($val) { - case 'can': - $tocheck = CommonITILValidation::getCanValidationStatusArray(); - break; - - case 'all': - $tocheck = CommonITILValidation::getAllValidationStatusArray(); - break; + if ($val === 'can') { + $tocheck = CommonITILValidation::getCanValidationStatusArray(); } if (count($tocheck) == 0) { $tocheck = [$val]; } - if (count($tocheck)) { - if ($nott) { - return $link . " `$table`.`$field` NOT IN ('" . implode("','", $tocheck) . "')"; - } - return $link . " `$table`.`$field` IN ('" . implode("','", $tocheck) . "')"; + if ($nott) { + return $link . " `$table`.`$field` NOT IN ('" . implode("','", $tocheck) . "')"; } - break; + return $link . " `$table`.`$field` IN ('" . implode("','", $tocheck) . "')"; case "glpi_notifications.event": if (in_array($searchtype, ['equals', 'notequals']) && strpos($val, self::SHORTSEP)) { diff --git a/tests/functional/Search.php b/tests/functional/Search.php index bd2a4b99af7..3076e03ba41 100644 --- a/tests/functional/Search.php +++ b/tests/functional/Search.php @@ -5087,6 +5087,48 @@ public function testRichText( $this->array($items)->isEqualTo($expected); } + + public function testTicketValidationStatus() + { + $search_params = [ + 'reset' => 'reset', + 'is_deleted' => 0, + 'start' => 0, + 'search' => 'Search', + 'criteria' => [ + 0 => [ + 'field' => 'view', // items seen + 'searchtype' => 'contains', + 'value' => 'any string' + ] + ] + ]; + + $displaypref = new \DisplayPreference(); + $input = [ + 'itemtype' => 'Ticket', + 'users_id' => \Session::getLoginUserID(), + 'num' => 55, //Ticket glpi_ticketvalidations.status + ]; + $this->integer((int)$displaypref->add($input))->isGreaterThan(0); + + + $data = $this->doSearch('Ticket', $search_params); + + $this->string($data['sql']['search'])->notContains("`glpi_ticketvalidations`.`status` IN"); + + $search_params['criteria'][0]['value'] = 1; + $data = $this->doSearch('Ticket', $search_params); + $this->string($data['sql']['search'])->contains("`glpi_ticketvalidations`.`status` IN"); + + $search_params['criteria'][0]['value'] = 'all'; + $data = $this->doSearch('Ticket', $search_params); + $this->string($data['sql']['search'])->notContains("`glpi_ticketvalidations`.`status` IN"); + + $search_params['criteria'][0]['value'] = 'can'; + $data = $this->doSearch('Ticket', $search_params); + $this->string($data['sql']['search'])->contains("`glpi_ticketvalidations`.`status` IN"); + } } // @codingStandardsIgnoreStart