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/Web/Window.php | 125 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 library/Icinga/Web/Window.php (limited to 'library/Icinga/Web/Window.php') diff --git a/library/Icinga/Web/Window.php b/library/Icinga/Web/Window.php new file mode 100644 index 0000000..158483a --- /dev/null +++ b/library/Icinga/Web/Window.php @@ -0,0 +1,125 @@ +id = $parts[0]; + $this->containerId = $id; + } else { + $this->id = $id; + } + } + + /** + * Get whether the window's ID is undefined + * + * @return bool + */ + public function isUndefined() + { + return $this->id === self::UNDEFINED; + } + + /** + * Get the window's ID + * + * @return string + */ + public function getId() + { + return $this->id; + } + + /** + * Get the container's ID + * + * @return string + */ + public function getContainerId() + { + return $this->containerId ?: $this->id; + } + + /** + * Return a window-aware session by using the given prefix + * + * @param string $prefix The prefix to use + * @param bool $reset Whether to reset any existing session-data + * + * @return SessionNamespace + */ + public function getSessionNamespace($prefix, $reset = false) + { + $session = Session::getSession(); + + $identifier = $prefix . '_' . $this->getId(); + if ($reset && $session->hasNamespace($identifier)) { + $session->removeNamespace($identifier); + } + + $namespace = $session->getNamespace($identifier); + $nsUndef = $prefix . '_' . self::UNDEFINED; + + if (! $reset && ! $this->isUndefined() && $session->hasNamespace($nsUndef)) { + // We may not have any window-id on the very first request. Now we add + // all values from the namespace, that has been created in this case, + // to the new one and remove it afterwards. + foreach ($session->getNamespace($nsUndef) as $name => $value) { + $namespace->set($name, $value); + } + + $session->removeNamespace($nsUndef); + } + + return $namespace; + } + + /** + * Generate a random string + * + * @return string + */ + public static function generateId() + { + $letters = 'abcefghijklmnopqrstuvwxyz'; + return substr(str_shuffle($letters), 0, 12); + } + + /** + * @return Window + */ + public static function getInstance() + { + if (! isset(static::$window)) { + $id = Icinga::app()->getRequest()->getHeader('X-Icinga-WindowId'); + if (empty($id) || $id === static::UNDEFINED) { + Icinga::app()->getResponse()->setOverrideWindowId(); + $id = static::generateId(); + } + + static::$window = new Window($id); + } + + return static::$window; + } +} -- cgit v1.2.3