Upgrade to 3.3.3
This commit is contained in:
156
kirby/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php
vendored
Executable file
156
kirby/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php
vendored
Executable file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use ArrayObject;
|
||||
use Composer\Autoload\ClassLoader;
|
||||
use RuntimeException;
|
||||
|
||||
/**
|
||||
* Alias legacy Zend Framework project classes/interfaces/traits to Laminas equivalents.
|
||||
*/
|
||||
class Autoloader
|
||||
{
|
||||
/**
|
||||
* Attach autoloaders for managing legacy ZF artifacts.
|
||||
*
|
||||
* We attach two autoloaders:
|
||||
*
|
||||
* - The first is _prepended_ to handle new classes and add aliases for
|
||||
* legacy classes. PHP expects any interfaces implemented, classes
|
||||
* extended, or traits used when declaring class_alias() to exist and/or
|
||||
* be autoloadable already at the time of declaration. If not, it will
|
||||
* raise a fatal error. This autoloader helps mitigate errors in such
|
||||
* situations.
|
||||
*
|
||||
* - The second is _appended_ in order to create aliases for legacy
|
||||
* classes.
|
||||
*/
|
||||
public static function load()
|
||||
{
|
||||
$loaded = new ArrayObject([]);
|
||||
|
||||
spl_autoload_register(self::createPrependAutoloader(
|
||||
RewriteRules::namespaceReverse(),
|
||||
self::getClassLoader(),
|
||||
$loaded
|
||||
), true, true);
|
||||
|
||||
spl_autoload_register(self::createAppendAutoloader(
|
||||
RewriteRules::namespaceRewrite(),
|
||||
$loaded
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ClassLoader
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
private static function getClassLoader()
|
||||
{
|
||||
if (file_exists(__DIR__ . '/../../../autoload.php')) {
|
||||
return include __DIR__ . '/../../../autoload.php';
|
||||
}
|
||||
|
||||
if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
|
||||
return include __DIR__ . '/../vendor/autoload.php';
|
||||
}
|
||||
|
||||
throw new RuntimeException('Cannot detect composer autoload. Please run composer install');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return callable
|
||||
*/
|
||||
private static function createPrependAutoloader(array $namespaces, ClassLoader $classLoader, ArrayObject $loaded)
|
||||
{
|
||||
/**
|
||||
* @param string $class Class name to autoload
|
||||
* @return void
|
||||
*/
|
||||
return static function ($class) use ($namespaces, $classLoader, $loaded) {
|
||||
if (isset($loaded[$class])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$segments = explode('\\', $class);
|
||||
|
||||
$i = 0;
|
||||
$check = '';
|
||||
|
||||
while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) {
|
||||
$check .= $segments[$i] . '\\';
|
||||
++$i;
|
||||
}
|
||||
|
||||
if ($check === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($classLoader->loadClass($class)) {
|
||||
$legacy = $namespaces[$check]
|
||||
. strtr(substr($class, strlen($check)), [
|
||||
'ApiTools' => 'Apigility',
|
||||
'Mezzio' => 'Expressive',
|
||||
'Laminas' => 'Zend',
|
||||
]);
|
||||
class_alias($class, $legacy);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @return callable
|
||||
*/
|
||||
private static function createAppendAutoloader(array $namespaces, ArrayObject $loaded)
|
||||
{
|
||||
/**
|
||||
* @param string $class Class name to autoload
|
||||
* @return void
|
||||
*/
|
||||
return static function ($class) use ($namespaces, $loaded) {
|
||||
$segments = explode('\\', $class);
|
||||
|
||||
if ($segments[0] === 'ZendService' && isset($segments[1])) {
|
||||
$segments[0] .= '\\' . $segments[1];
|
||||
unset($segments[1]);
|
||||
$segments = array_values($segments);
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
$check = '';
|
||||
|
||||
// We are checking segments of the namespace to match quicker
|
||||
while (isset($segments[$i + 1], $namespaces[$check . $segments[$i] . '\\'])) {
|
||||
$check .= $segments[$i] . '\\';
|
||||
++$i;
|
||||
}
|
||||
|
||||
if ($check === '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$alias = $namespaces[$check]
|
||||
. strtr(substr($class, strlen($check)), [
|
||||
'Apigility' => 'ApiTools',
|
||||
'Expressive' => 'Mezzio',
|
||||
'Zend' => 'Laminas',
|
||||
'AbstractZendServer' => 'AbstractZendServer',
|
||||
'ZendServerDisk' => 'ZendServerDisk',
|
||||
'ZendServerShm' => 'ZendServerShm',
|
||||
'ZendMonitor' => 'ZendMonitor',
|
||||
]);
|
||||
|
||||
$loaded[$alias] = true;
|
||||
if (class_exists($alias) || interface_exists($alias) || trait_exists($alias)) {
|
||||
class_alias($alias, $class);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
263
kirby/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php
vendored
Executable file
263
kirby/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php
vendored
Executable file
@@ -0,0 +1,263 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
class ConfigPostProcessor
|
||||
{
|
||||
/** @var array String keys => string values */
|
||||
private $exactReplacements = [
|
||||
'zend-expressive' => 'mezzio',
|
||||
'zf-apigility' => 'api-tools',
|
||||
];
|
||||
|
||||
/** @var Replacements */
|
||||
private $replacements;
|
||||
|
||||
/** @var callable[] */
|
||||
private $rulesets;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->replacements = new Replacements();
|
||||
|
||||
/* Define the rulesets for replacements.
|
||||
*
|
||||
* Each ruleset has the following signature:
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys Full nested key hierarchy leading to the value
|
||||
* @return null|callable
|
||||
*
|
||||
* If no match is made, a null is returned, allowing it to fallback to
|
||||
* the next ruleset in the list. If a match is made, a callback is returned,
|
||||
* and that will be used to perform the replacement on the value.
|
||||
*
|
||||
* The callback should have the following signature:
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys
|
||||
* @return mixed The transformed value
|
||||
*/
|
||||
$this->rulesets = [
|
||||
// Exact values
|
||||
function ($value) {
|
||||
return is_string($value) && isset($this->exactReplacements[$value])
|
||||
? [$this, 'replaceExactValue']
|
||||
: null;
|
||||
},
|
||||
|
||||
// Router (MVC applications)
|
||||
// We do not want to rewrite these.
|
||||
function ($value, array $keys) {
|
||||
$key = array_pop($keys);
|
||||
// Only worried about a top-level "router" key.
|
||||
return $key === 'router' && count($keys) === 0 && is_array($value)
|
||||
? [$this, 'noopReplacement']
|
||||
: null;
|
||||
},
|
||||
|
||||
// Aliases and invokables
|
||||
function ($value, array $keys) {
|
||||
static $keysOfInterest;
|
||||
|
||||
$keysOfInterest = $keysOfInterest ?: ['aliases', 'invokables'];
|
||||
$key = array_pop($keys);
|
||||
|
||||
return in_array($key, $keysOfInterest, true) && is_array($value)
|
||||
? [$this, 'replaceDependencyAliases']
|
||||
: null;
|
||||
},
|
||||
|
||||
// Array values
|
||||
function ($value, array $keys) {
|
||||
return 0 !== count($keys) && is_array($value)
|
||||
? [$this, '__invoke']
|
||||
: null;
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[] $keys Hierarchy of keys, for determining location in
|
||||
* nested configuration.
|
||||
* @return array
|
||||
*/
|
||||
public function __invoke(array $config, array $keys = [])
|
||||
{
|
||||
$rewritten = [];
|
||||
|
||||
foreach ($config as $key => $value) {
|
||||
// Determine new key from replacements
|
||||
$newKey = is_string($key) ? $this->replace($key, $keys) : $key;
|
||||
|
||||
// Keep original values with original key, if the key has changed, but only at the top-level.
|
||||
if (empty($keys) && $newKey !== $key) {
|
||||
$rewritten[$key] = $value;
|
||||
}
|
||||
|
||||
// Perform value replacements, if any
|
||||
$newValue = $this->replace($value, $keys, $newKey);
|
||||
|
||||
// Key does not already exist and/or is not an array value
|
||||
if (! array_key_exists($newKey, $rewritten) || ! is_array($rewritten[$newKey])) {
|
||||
// Do not overwrite existing values with null values
|
||||
$rewritten[$newKey] = array_key_exists($newKey, $rewritten) && null === $newValue
|
||||
? $rewritten[$newKey]
|
||||
: $newValue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// New value is null; nothing to do.
|
||||
if (null === $newValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Key already exists as an array value, but $value is not an array
|
||||
if (! is_array($newValue)) {
|
||||
$rewritten[$newKey][] = $newValue;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Key already exists as an array value, and $value is also an array
|
||||
$rewritten[$newKey] = static::merge($rewritten[$newKey], $newValue);
|
||||
}
|
||||
|
||||
return $rewritten;
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform substitutions as needed on an individual value.
|
||||
*
|
||||
* The $key is provided to allow fine-grained selection of rewrite rules.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @param string[] $keys Key hierarchy
|
||||
* @param null|int|string $key
|
||||
* @return mixed
|
||||
*/
|
||||
private function replace($value, array $keys, $key = null)
|
||||
{
|
||||
// Add new key to the list of keys.
|
||||
// We do not need to remove it later, as we are working on a copy of the array.
|
||||
array_push($keys, $key);
|
||||
|
||||
// Identify rewrite strategy and perform replacements
|
||||
$rewriteRule = $this->replacementRuleMatch($value, $keys);
|
||||
return $rewriteRule($value, $keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two arrays together.
|
||||
*
|
||||
* If an integer key exists in both arrays, the value from the second array
|
||||
* will be appended to the first array. If both values are arrays, they are
|
||||
* merged together, else the value of the second array overwrites the one
|
||||
* of the first array.
|
||||
*
|
||||
* Based on zend-stdlib Zend\Stdlib\ArrayUtils::merge
|
||||
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function merge(array $a, array $b)
|
||||
{
|
||||
foreach ($b as $key => $value) {
|
||||
if (! isset($a[$key]) && ! array_key_exists($key, $a)) {
|
||||
$a[$key] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (null === $value && array_key_exists($key, $a)) {
|
||||
// Leave as-is if value from $b is null
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_int($key)) {
|
||||
$a[] = $value;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_array($value) && is_array($a[$key])) {
|
||||
$a[$key] = static::merge($a[$key], $value);
|
||||
continue;
|
||||
}
|
||||
|
||||
$a[$key] = $value;
|
||||
}
|
||||
|
||||
return $a;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @param null|int|string $key
|
||||
* @return callable Callable to invoke with value
|
||||
*/
|
||||
private function replacementRuleMatch($value, $key = null)
|
||||
{
|
||||
foreach ($this->rulesets as $ruleset) {
|
||||
$result = $ruleset($value, $key);
|
||||
if (is_callable($result)) {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
return [$this, 'fallbackReplacement'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace a value using the translation table, if the value is a string.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return mixed
|
||||
*/
|
||||
private function fallbackReplacement($value)
|
||||
{
|
||||
return is_string($value)
|
||||
? $this->replacements->replace($value)
|
||||
: $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace a value matched exactly.
|
||||
*
|
||||
* @param mixed $value
|
||||
* @return mixed
|
||||
*/
|
||||
private function replaceExactValue($value)
|
||||
{
|
||||
return $this->exactReplacements[$value];
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewrite dependency aliases array
|
||||
*
|
||||
* In this case, we want to keep the alias as-is, but rewrite the target.
|
||||
*
|
||||
* This same logic can be used for invokables, which are essentially just
|
||||
* an alias map.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function replaceDependencyAliases(array $aliases)
|
||||
{
|
||||
foreach ($aliases as $alias => $target) {
|
||||
$aliases[$alias] = $this->replacements->replace($target);
|
||||
}
|
||||
return $aliases;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $value
|
||||
* @return mixed Returns $value verbatim.
|
||||
*/
|
||||
private function noopReplacement($value)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
}
|
54
kirby/vendor/laminas/laminas-zendframework-bridge/src/Module.php
vendored
Executable file
54
kirby/vendor/laminas/laminas-zendframework-bridge/src/Module.php
vendored
Executable file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
use Laminas\ModuleManager\Listener\ConfigMergerInterface;
|
||||
use Laminas\ModuleManager\ModuleEvent;
|
||||
use Laminas\ModuleManager\ModuleManager;
|
||||
|
||||
class Module
|
||||
{
|
||||
/**
|
||||
* Initialize the module.
|
||||
*
|
||||
* Type-hinting deliberately omitted to allow unit testing
|
||||
* without dependencies on packages that do not exist yet.
|
||||
*
|
||||
* @param ModuleManager $moduleManager
|
||||
*/
|
||||
public function init($moduleManager)
|
||||
{
|
||||
$moduleManager
|
||||
->getEventManager()
|
||||
->attach('mergeConfig', [$this, 'onMergeConfig']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform substitutions in the merged configuration.
|
||||
*
|
||||
* Rewrites keys and values matching known ZF classes, namespaces, and
|
||||
* configuration keys to their Laminas equivalents.
|
||||
*
|
||||
* Type-hinting deliberately omitted to allow unit testing
|
||||
* without dependencies on packages that do not exist yet.
|
||||
*
|
||||
* @param ModuleEvent $event
|
||||
*/
|
||||
public function onMergeConfig($event)
|
||||
{
|
||||
/** @var ConfigMergerInterface */
|
||||
$configMerger = $event->getConfigListener();
|
||||
$processor = new ConfigPostProcessor();
|
||||
$configMerger->setMergedConfig(
|
||||
$processor(
|
||||
$configMerger->getMergedConfig($returnAsObject = false)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
32
kirby/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php
vendored
Executable file
32
kirby/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php
vendored
Executable file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
class Replacements
|
||||
{
|
||||
/** @var string[] */
|
||||
private $replacements;
|
||||
|
||||
public function __construct(array $additionalReplacements = [])
|
||||
{
|
||||
$this->replacements = array_merge(
|
||||
require __DIR__ . '/../config/replacements.php',
|
||||
$additionalReplacements
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
* @return string
|
||||
*/
|
||||
public function replace($value)
|
||||
{
|
||||
return strtr($value, $this->replacements);
|
||||
}
|
||||
}
|
79
kirby/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php
vendored
Executable file
79
kirby/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php
vendored
Executable file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
namespace Laminas\ZendFrameworkBridge;
|
||||
|
||||
class RewriteRules
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function namespaceRewrite()
|
||||
{
|
||||
return [
|
||||
// Expressive
|
||||
'Zend\\ProblemDetails\\' => 'Mezzio\\ProblemDetails\\',
|
||||
'Zend\\Expressive\\' => 'Mezzio\\',
|
||||
|
||||
// Laminas
|
||||
'Zend\\' => 'Laminas\\',
|
||||
'ZF\\ComposerAutoloading\\' => 'Laminas\\ComposerAutoloading\\',
|
||||
'ZF\\DevelopmentMode\\' => 'Laminas\\DevelopmentMode\\',
|
||||
|
||||
// Apigility
|
||||
'ZF\\Apigility\\' => 'Laminas\\ApiTools\\',
|
||||
'ZF\\' => 'Laminas\\ApiTools\\',
|
||||
|
||||
// ZendXml, API wrappers, zend-http OAuth support, zend-diagnostics, ZendDeveloperTools
|
||||
'ZendXml\\' => 'Laminas\\Xml\\',
|
||||
'ZendOAuth\\' => 'Laminas\\OAuth\\',
|
||||
'ZendDiagnostics\\' => 'Laminas\\Diagnostics\\',
|
||||
'ZendService\\ReCaptcha\\' => 'Laminas\\ReCaptcha\\',
|
||||
'ZendService\\Twitter\\' => 'Laminas\\Twitter\\',
|
||||
'ZendDeveloperTools\\' => 'Laminas\\DeveloperTools\\',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function namespaceReverse()
|
||||
{
|
||||
return [
|
||||
// ZendXml, ZendOAuth, ZendDiagnostics, ZendDeveloperTools
|
||||
'Laminas\\Xml\\' => 'ZendXml\\',
|
||||
'Laminas\\OAuth\\' => 'ZendOAuth\\',
|
||||
'Laminas\\Diagnostics\\' => 'ZendDiagnostics\\',
|
||||
'Laminas\\DeveloperTools\\' => 'ZendDeveloperTools\\',
|
||||
|
||||
// Zend Service
|
||||
'Laminas\\ReCaptcha\\' => 'ZendService\\ReCaptcha\\',
|
||||
'Laminas\\Twitter\\' => 'ZendService\\Twitter\\',
|
||||
|
||||
// Zend
|
||||
'Laminas\\' => 'Zend\\',
|
||||
|
||||
// Expressive
|
||||
'Mezzio\\ProblemDetails\\' => 'Zend\\ProblemDetails\\',
|
||||
'Mezzio\\' => 'Zend\\Expressive\\',
|
||||
|
||||
// Laminas to ZfCampus
|
||||
'Laminas\\ComposerAutoloading\\' => 'ZF\\ComposerAutoloading\\',
|
||||
'Laminas\\DevelopmentMode\\' => 'ZF\\DevelopmentMode\\',
|
||||
|
||||
// Apigility
|
||||
'Laminas\\ApiTools\\Admin\\' => 'ZF\\Apigility\\Admin\\',
|
||||
'Laminas\\ApiTools\\Doctrine\\' => 'ZF\\Apigility\\Doctrine\\',
|
||||
'Laminas\\ApiTools\\Documentation\\' => 'ZF\\Apigility\\Documentation\\',
|
||||
'Laminas\\ApiTools\\Example\\' => 'ZF\\Apigility\\Example\\',
|
||||
'Laminas\\ApiTools\\Provider\\' => 'ZF\\Apigility\\Provider\\',
|
||||
'Laminas\\ApiTools\\Welcome\\' => 'ZF\\Apiglity\\Welcome\\',
|
||||
'Laminas\\ApiTools\\' => 'ZF\\',
|
||||
];
|
||||
}
|
||||
}
|
9
kirby/vendor/laminas/laminas-zendframework-bridge/src/autoload.php
vendored
Executable file
9
kirby/vendor/laminas/laminas-zendframework-bridge/src/autoload.php
vendored
Executable file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @see https://github.com/laminas/laminas-zendframework-bridge for the canonical source repository
|
||||
* @copyright https://github.com/laminas/laminas-zendframework-bridge/blob/master/COPYRIGHT.md
|
||||
* @license https://github.com/laminas/laminas-zendframework-bridge/blob/master/LICENSE.md New BSD License
|
||||
*/
|
||||
|
||||
\Laminas\ZendFrameworkBridge\Autoloader::load();
|
Reference in New Issue
Block a user