From 5b24b5c7c8a5717b66df26447f50d0f4d5d853df Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 10 May 2023 16:44:40 +0200 Subject: [statistics] Fix system model filter --- .../statistics/inc/hardwarequerycolumn.inc.php | 6 ++++ .../statistics/inc/statisticsfilter.inc.php | 33 +++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) 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() -- cgit v1.2.3-55-g7522