summaryrefslogtreecommitdiffstats
path: root/modules-available/statistics
diff options
context:
space:
mode:
authorSimon Rettberg2023-05-10 16:44:40 +0200
committerSimon Rettberg2023-05-10 16:44:40 +0200
commit5b24b5c7c8a5717b66df26447f50d0f4d5d853df (patch)
tree70a89795f8def93c74dc27e245da8360c86502b0 /modules-available/statistics
parent[statistics] Fix typo (diff)
downloadslx-admin-5b24b5c7c8a5717b66df26447f50d0f4d5d853df.tar.gz
slx-admin-5b24b5c7c8a5717b66df26447f50d0f4d5d853df.tar.xz
slx-admin-5b24b5c7c8a5717b66df26447f50d0f4d5d853df.zip
[statistics] Fix system model filter
Diffstat (limited to 'modules-available/statistics')
-rw-r--r--modules-available/statistics/inc/hardwarequerycolumn.inc.php6
-rw-r--r--modules-available/statistics/inc/statisticsfilter.inc.php33
2 files changed, 38 insertions, 1 deletions
diff --git a/modules-available/statistics/inc/hardwarequerycolumn.inc.php b/modules-available/statistics/inc/hardwarequerycolumn.inc.php
index 8aab6a54..01e32978 100644
--- a/modules-available/statistics/inc/hardwarequerycolumn.inc.php
+++ b/modules-available/statistics/inc/hardwarequerycolumn.inc.php
@@ -78,6 +78,12 @@ class HardwareQueryColumn
} else {
$other->conditions[] = $cond;
}
+ } elseif ($op === '~' || $op === '!~') {
+ $op = $op === '~' ? 'LIKE' : 'NOT LIKE';
+ $other = str_replace(array('=', '_', '%', '*', '?'), array('==', '=_', '=%', '%', '_'), $other);
+ $pid = self::getId();
+ $this->conditions[] = "{$this->tableAlias}.`$valueCol` $op (:$pid) ESCAPE '='";
+ $this->params[$pid] = $other;
} else {
$pid = self::getId();
$this->conditions[] = "{$this->tableAlias}.`$valueCol` $op (:$pid)";
diff --git a/modules-available/statistics/inc/statisticsfilter.inc.php b/modules-available/statistics/inc/statisticsfilter.inc.php
index 76b29cb1..55e88880 100644
--- a/modules-available/statistics/inc/statisticsfilter.inc.php
+++ b/modules-available/statistics/inc/statisticsfilter.inc.php
@@ -262,7 +262,7 @@ abstract class StatisticsFilter
'lastboot' => new DateStatisticsFilter('lastboot', '2020-10-15 14:00'),
'runtime' => new RuntimeStatisticsFilter(),
'realcores' => new SimpleStatisticsFilter('realcores', self::OP_ORDINAL, ''),
- 'systemmodel' => new SimpleStatisticsFilter('systemmodel', self::OP_STRCMP, 'PC-365 (IBM)'),
+ 'systemmodel' => new SystemModelStatisticsFilter(),
'cpumodel' => new SimpleStatisticsFilter('cpumodel', self::OP_STRCMP, 'Pentium Pro 200 MHz'),
'hddgb' => new PartitionGbStatisticsFilter('id44mb'),
'persistentgb' => new PartitionGbStatisticsFilter('id45mb'),
@@ -731,6 +731,37 @@ class NicSpeedStatisticsFilter extends StatisticsFilter
}
+class SystemModelStatisticsFilter extends StatisticsFilter
+{
+
+ public function __construct()
+ {
+ parent::__construct(null, StatisticsFilter::OP_STRCMP, 'PC-365 (IBM)');
+ }
+
+ public function whereClause(string $operator, $argument, array &$args, array &$joins): string
+ {
+ $shw = StatisticsFilter::addHardwareJoin($args, $joins, HardwareInfo::DMI_SYSTEM);
+ $_ = [];
+ $manufacturer = null;
+ $model = $argument;
+ if (preg_match('/^(.*)\((.*)\)\s*$/', $model, $out)) {
+ $manufacturer = trim($out[2]);
+ $model = trim($out[1]);
+ }
+ $c = new HardwareQueryColumn(true, 'Product Name');
+ $c->addCondition($operator, $model);
+ $c->generate($joins, $_, $args, [], $shw);
+ if ($manufacturer !== null) {
+ $c = new HardwareQueryColumn(true, 'Manufacturer');
+ $c->addCondition($operator, $manufacturer);
+ $c->generate($joins, $_, $args, [], $shw);
+ }
+ return '1';
+ }
+
+}
+
class MacAddressStatisticsFilter extends SimpleStatisticsFilter
{
public function __construct()