git subrepo commit (merge) mailcow/src/mailcow-dockerized
subrepo: subdir: "mailcow/src/mailcow-dockerized"
merged: "32243e56"
upstream: origin: "https://github.com/mailcow/mailcow-dockerized.git"
branch: "master"
commit: "e2b4b6f6"
git-subrepo: version: "0.4.3"
origin: "???"
commit: "???"
Change-Id: I51e2016ef5ab88a8b0bdc08551b18f48ceef0aa5
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Loader/ChainLoader.php b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Loader/ChainLoader.php
new file mode 100644
index 0000000..fbf4f3a
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/lib/vendor/twig/twig/src/Loader/ChainLoader.php
@@ -0,0 +1,119 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Twig\Loader;
+
+use Twig\Error\LoaderError;
+use Twig\Source;
+
+/**
+ * Loads templates from other loaders.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+final class ChainLoader implements LoaderInterface
+{
+ private $hasSourceCache = [];
+ private $loaders = [];
+
+ /**
+ * @param LoaderInterface[] $loaders
+ */
+ public function __construct(array $loaders = [])
+ {
+ foreach ($loaders as $loader) {
+ $this->addLoader($loader);
+ }
+ }
+
+ public function addLoader(LoaderInterface $loader): void
+ {
+ $this->loaders[] = $loader;
+ $this->hasSourceCache = [];
+ }
+
+ /**
+ * @return LoaderInterface[]
+ */
+ public function getLoaders(): array
+ {
+ return $this->loaders;
+ }
+
+ public function getSourceContext(string $name): Source
+ {
+ $exceptions = [];
+ foreach ($this->loaders as $loader) {
+ if (!$loader->exists($name)) {
+ continue;
+ }
+
+ try {
+ return $loader->getSourceContext($name);
+ } catch (LoaderError $e) {
+ $exceptions[] = $e->getMessage();
+ }
+ }
+
+ throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+ }
+
+ public function exists(string $name): bool
+ {
+ if (isset($this->hasSourceCache[$name])) {
+ return $this->hasSourceCache[$name];
+ }
+
+ foreach ($this->loaders as $loader) {
+ if ($loader->exists($name)) {
+ return $this->hasSourceCache[$name] = true;
+ }
+ }
+
+ return $this->hasSourceCache[$name] = false;
+ }
+
+ public function getCacheKey(string $name): string
+ {
+ $exceptions = [];
+ foreach ($this->loaders as $loader) {
+ if (!$loader->exists($name)) {
+ continue;
+ }
+
+ try {
+ return $loader->getCacheKey($name);
+ } catch (LoaderError $e) {
+ $exceptions[] = \get_class($loader).': '.$e->getMessage();
+ }
+ }
+
+ throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+ }
+
+ public function isFresh(string $name, int $time): bool
+ {
+ $exceptions = [];
+ foreach ($this->loaders as $loader) {
+ if (!$loader->exists($name)) {
+ continue;
+ }
+
+ try {
+ return $loader->isFresh($name, $time);
+ } catch (LoaderError $e) {
+ $exceptions[] = \get_class($loader).': '.$e->getMessage();
+ }
+ }
+
+ throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
+ }
+}