From 8ca6cc32b2c789a3149861159ad258f2cb9491e3 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:39:39 +0200 Subject: Adding upstream version 2.11.4. Signed-off-by: Daniel Baumann --- library/Icinga/Legacy/DashboardConfig.php | 137 ++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 library/Icinga/Legacy/DashboardConfig.php (limited to 'library/Icinga/Legacy/DashboardConfig.php') diff --git a/library/Icinga/Legacy/DashboardConfig.php b/library/Icinga/Legacy/DashboardConfig.php new file mode 100644 index 0000000..3fb5c2f --- /dev/null +++ b/library/Icinga/Legacy/DashboardConfig.php @@ -0,0 +1,137 @@ +user; + } + + /** + * Set the user + * + * @param User $user + * + * @return $this + */ + public function setUser($user) + { + $this->user = $user; + return $this; + } + + + /** + * List all dashboard configuration files that match the given user + * + * @param User $user + * + * @return string[] + */ + public static function listConfigFilesForUser(User $user) + { + $files = array(); + $dashboards = static::resolvePath('dashboards'); + if ($handle = @opendir($dashboards)) { + while (false !== ($entry = readdir($handle))) { + if ($entry[0] === '.' || ! is_dir($dashboards . '/' . $entry)) { + continue; + } + if (strtolower($entry) === strtolower($user->getUsername())) { + $files[] = $dashboards . '/' . $entry . '/dashboard.ini'; + } + } + closedir($handle); + } + return $files; + } + + /** + * {@inheritdoc} + */ + public function saveIni($filePath = null, $fileMode = 0660) + { + // Preprocessing start, ensures that the non-translated names are used to save module dashboard changes + // TODO: This MUST NOT survive the new dashboard implementation (yes, it's still a thing..) + $dashboardNavigation = new Navigation(); + $dashboardNavigation->load('dashboard-pane'); + $getDashboardPane = function ($label) use ($dashboardNavigation) { + foreach ($dashboardNavigation as $dashboardPane) { + /** @var DashboardPane $dashboardPane */ + if ($dashboardPane->getLabel() === $label) { + return $dashboardPane; + } + + foreach ($dashboardPane->getChildren() as $dashlet) { + /** @var NavigationItem $dashlet */ + if ($dashlet->getLabel() === $label) { + return $dashlet; + } + } + } + }; + + foreach (clone $this->config as $name => $options) { + if (strpos($name, '.') !== false) { + list($dashboardLabel, $dashletLabel) = explode('.', $name, 2); + } else { + $dashboardLabel = $name; + $dashletLabel = null; + } + + $dashboardPane = $getDashboardPane($dashboardLabel); + if ($dashboardPane !== null) { + $dashboardLabel = $dashboardPane->getName(); + } + + if ($dashletLabel !== null) { + $dashletItem = $getDashboardPane($dashletLabel); + if ($dashletItem !== null) { + $dashletLabel = $dashletItem->getName(); + } + } + + unset($this->config[$name]); + $this->config[$dashboardLabel . ($dashletLabel ? '.' . $dashletLabel : '')] = $options; + } + // Preprocessing end + + parent::saveIni($filePath, $fileMode); + if ($filePath === null) { + $filePath = $this->configFile; + } + foreach (static::listConfigFilesForUser($this->user) as $file) { + if ($file !== $filePath) { + @unlink($file); + } + } + } +} -- cgit v1.2.3