diff options
-rw-r--r-- | modules-available/statistics/inc/filter.inc.php | 13 | ||||
-rw-r--r-- | modules-available/statistics/page.inc.php | 2 |
2 files changed, 11 insertions, 4 deletions
diff --git a/modules-available/statistics/inc/filter.inc.php b/modules-available/statistics/inc/filter.inc.php index 6e437a71..be6df752 100644 --- a/modules-available/statistics/inc/filter.inc.php +++ b/modules-available/statistics/inc/filter.inc.php @@ -208,15 +208,22 @@ class LocationFilter extends Filter public function whereClause(&$args, &$joins) { + $recursive = (substr($this->operator, -1) === '~'); + $this->operator = str_replace('~', '=', $this->operator); + settype($this->argument, 'int'); + $neg = $this->operator === '=' ? '' : 'NOT'; if ($this->argument === 0) { - $neg = $this->operator === '=' ? '' : 'NOT'; return "machine.locationid IS $neg NULL"; } else { global $unique_key; $key = $this->column . '_arg' . ($unique_key++); - $args[$key] = $this->argument; - return "machine.locationid {$this->operator} :$key"; + if ($recursive) { + $args[$key] = array_keys(Location::getRecursiveFlat($this->argument)); + } else { + $args[$key] = $this->argument; + } + return "machine.locationid $neg IN (:$key)"; } } } diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php index df12c568..6d48cc66 100644 --- a/modules-available/statistics/page.inc.php +++ b/modules-available/statistics/page.inc.php @@ -116,7 +116,7 @@ class Page_Statistics extends Page ]; if (Module::isAvailable('locations')) { Page_Statistics::$columns['location'] = [ - 'op' => Page_Statistics::$op_nominal, + 'op' => Page_Statistics::$op_stringcmp, 'type' => 'enum', 'column' => false, 'values' => array_keys(Location::getLocationsAssoc()), |