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 .= << {$this->byLoc[$locationId]} EOF; } if ($this->byMachine[$locationId] ?? 0) { $title = htmlspecialchars(Dictionary::translateFileModule('baseconfig', 'module', 'overriden-vars-machines')); $ret .= << {$this->byMachine[$locationId]} 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);