diff options
Diffstat (limited to 'modules-available/statistics/inc/statisticsfilterset.inc.php')
-rw-r--r-- | modules-available/statistics/inc/statisticsfilterset.inc.php | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/modules-available/statistics/inc/statisticsfilterset.inc.php b/modules-available/statistics/inc/statisticsfilterset.inc.php index a38f9d3f..26595e93 100644 --- a/modules-available/statistics/inc/statisticsfilterset.inc.php +++ b/modules-available/statistics/inc/statisticsfilterset.inc.php @@ -9,7 +9,10 @@ class StatisticsFilterSet private $cache = false; - public function __construct($filters) + /** + * @param DatabaseFilter[] $filters + */ + public function __construct(array $filters) { $this->filters = $filters; } @@ -37,16 +40,10 @@ class StatisticsFilterSet $join = implode(' ', array_unique($joins)); $this->cache = compact('where', 'join', 'args'); } - - public function isNoId44Filter() - { - $filter = $this->hasFilter('Id44GbStatisticsFilter'); - return $filter !== false && $filter->argument == 0; - } public function filterNonClients() { - if (Module::get('runmode') === false || $this->hasFilter('IsClientStatisticsFilter') !== false) + if (Module::get('runmode') === false || $this->hasFilter('IsClientStatisticsFilter') !== null) return; $this->cache = false; // Runmode module exists, add filter @@ -55,27 +52,27 @@ class StatisticsFilterSet /** * @param string $type filter type (class name) - * @return false|DatabaseFilter The filter, false if not found + * @return ?DatabaseFilter The filter, null if not found */ - public function hasFilter($type) + public function hasFilter(string $type): ?DatabaseFilter { foreach ($this->filters as $filter) { if ($filter->isClass($type)) { return $filter; } } - return false; + return null; } /** * @param string $type filter type key/id - * @return false|DatabaseFilter The filter, false if not found + * @return ?DatabaseFilter The filter, null if not found */ - public function hasFilterKey($type) + public function hasFilterKey(string $type): ?DatabaseFilter { if (isset($this->filters[$type])) return $this->filters[$type]; - return false; + return null; } /** @@ -85,7 +82,7 @@ class StatisticsFilterSet * @param string $permission permission to use * @return bool false if no permission for any location, true otherwise */ - public function setAllowedLocationsFromPermission($permission) + public function setAllowedLocationsFromPermission(string $permission): bool { if (!Module::isAvailable('locations')) return true; @@ -108,9 +105,35 @@ class StatisticsFilterSet */ public function getAllowedLocations() { - if (isset($this->filters['permissions']->argument) && is_array($this->filters['permissions']->argument)) - return $this->filters['permissions']->argument; + if (isset($this->filters['permissions']) && is_array($this->filters['permissions']->argument)) + return (array)$this->filters['permissions']->argument; return false; } + public function suitableForUsageGraph(): bool + { + foreach ($this->filters as $filter) { + switch ($filter->getClass()) { + case 'LocationStatisticsFilter': + case 'IsClientStatisticsFilter': + break; + case 'DateStatisticsFilter': + if ($filter->op !== '>' && $filter->op !== '>=') + return false; + if (strtotime($filter->argument) + 3*86400 > time()) + return false; + break; + case 'RuntimeStatisticsFilter': + if ($filter->op !== '>' && $filter->op !== '>=') + return false; + if ($filter->argument < 3 * 24) + return false; + break; + default: + return false; + } + } + return true; + } + } |