diff options
author | Simon Rettberg | 2021-11-30 15:27:59 +0100 |
---|---|---|
committer | Simon Rettberg | 2022-03-09 15:06:54 +0100 |
commit | 41612c4481111969367d1a228ad4875d781558a2 (patch) | |
tree | d59bc50a3a2822faa6b800bd1f74f97c5ca692b3 /modules-available/baseconfig/hooks | |
parent | [permissionmanager] Fix for PHP 8 (diff) | |
download | slx-admin-41612c4481111969367d1a228ad4875d781558a2.tar.gz slx-admin-41612c4481111969367d1a228ad4875d781558a2.tar.xz slx-admin-41612c4481111969367d1a228ad4875d781558a2.zip |
[locations] Modularize additional column handling
Additional columns are now added through a hook,
moving specialized code where it belongs.
Diffstat (limited to 'modules-available/baseconfig/hooks')
-rw-r--r-- | modules-available/baseconfig/hooks/locations-column.inc.php | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/modules-available/baseconfig/hooks/locations-column.inc.php b/modules-available/baseconfig/hooks/locations-column.inc.php new file mode 100644 index 00000000..ca30d56e --- /dev/null +++ b/modules-available/baseconfig/hooks/locations-column.inc.php @@ -0,0 +1,76 @@ +<?php + +if (!User::hasPermission('.baseconfig.view')) + return null; + +class BaseconfigLocationColumn extends AbstractLocationColumn +{ + + private $byLoc; + private $byMachine; + + public function __construct(array $allowedLocationIds) + { + if (in_array(0, $allowedLocationIds)) { + $extra = 'OR m.locationid IS NULL'; + } else { + $extra = ''; + } + // Count overridden config vars + $this->byLoc = Database::queryKeyValueList("SELECT locationid, Count(*) AS cnt + FROM `setting_location` + WHERE locationid IN (:allowedLocationIds) + GROUP BY locationid", compact('allowedLocationIds')); + // Confusing because the count might be inaccurate within a branch + //$this->propagateFields($locationList, '', 'overriddenVars', 'overriddenClass'); + // Count machines with overriden var(s) + $this->byMachine = Database::queryKeyValueList("SELECT IFNULL(m.locationid, 0), Count(DISTINCT sm.machineuuid) AS cnt + FROM setting_machine sm + INNER JOIN machine m USING (machineuuid) + WHERE (m.locationid IN (:allowedLocationIds) $extra) + GROUP BY m.locationid", compact('allowedLocationIds')); + // There WHERE statement drops clients without location - but this cannot be displayed by the locations + // table anyways as of now - maybe implement some day? Or just encourage everyone to have a root location + } + + public function getColumnHtml(int $locationId): string + { + $ret = ''; + if ($this->byLoc[$locationId] ?? 0) { + $title = htmlspecialchars(Dictionary::translateFileModule('baseconfig', 'module', 'overriden-vars-for-location')); + $ret .= <<<EOF + <span class="badge" title="{$title}"> + <span class="glyphicon glyphicon-home"></span> {$this->byLoc[$locationId]} + </span> +EOF; + } + if ($this->byMachine[$locationId] ?? 0) { + $title = htmlspecialchars(Dictionary::translateFileModule('baseconfig', 'module', 'overriden-vars-machines')); + $ret .= <<<EOF + <span class="badge" title="{$title}"> + <span class="glyphicon glyphicon-tasks"></span> {$this->byMachine[$locationId]} + </span> +EOF; + } + return $ret; + } + + public function getEditUrl(int $locationId): string + { + if (!User::hasPermission('.baseconfig.edit', $locationId)) + return ''; + return '?do=baseconfig&module=locations&locationid=' . $locationId; + } + + public function header(): string + { + return Dictionary::translateFileModule('baseconfig', 'module', 'location-column-header'); + } + + public function priority(): int + { + return 1000; + } +} + +return new BaseconfigLocationColumn($allowedLocationIds);
\ No newline at end of file |