summaryrefslogtreecommitdiffstats
path: root/modules-available/statistics/inc/statisticsfilterset.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/statistics/inc/statisticsfilterset.inc.php')
-rw-r--r--modules-available/statistics/inc/statisticsfilterset.inc.php57
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;
+ }
+
}