Compare commits
6 commits
2024.09-rc
...
develop
Author | SHA1 | Date | |
---|---|---|---|
heluecht | 58180bd732 | ||
bf679262b0 | |||
heluecht | c4e24833eb | ||
ecf0edb520 | |||
heluecht | 3a5acf95f7 | ||
2ea40dc897 |
18
advancedcontentfilter/vendor/autoload.php
vendored
18
advancedcontentfilter/vendor/autoload.php
vendored
|
@ -2,24 +2,6 @@
|
||||||
|
|
||||||
// autoload.php @generated by Composer
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
if (PHP_VERSION_ID < 50600) {
|
|
||||||
if (!headers_sent()) {
|
|
||||||
header('HTTP/1.1 500 Internal Server Error');
|
|
||||||
}
|
|
||||||
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
|
||||||
if (!ini_get('display_errors')) {
|
|
||||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
|
||||||
fwrite(STDERR, $err);
|
|
||||||
} elseif (!headers_sent()) {
|
|
||||||
echo $err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigger_error(
|
|
||||||
$err,
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
require_once __DIR__ . '/composer/autoload_real.php';
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|
||||||
return ComposerAutoloaderInitAdvancedContentFilterAddon::getLoader();
|
return ComposerAutoloaderInitAdvancedContentFilterAddon::getLoader();
|
||||||
|
|
|
@ -37,81 +37,26 @@ namespace Composer\Autoload;
|
||||||
*
|
*
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||||
* @see https://www.php-fig.org/psr/psr-0/
|
* @see http://www.php-fig.org/psr/psr-0/
|
||||||
* @see https://www.php-fig.org/psr/psr-4/
|
* @see http://www.php-fig.org/psr/psr-4/
|
||||||
*/
|
*/
|
||||||
class ClassLoader
|
class ClassLoader
|
||||||
{
|
{
|
||||||
/** @var \Closure(string):void */
|
|
||||||
private static $includeFile;
|
|
||||||
|
|
||||||
/** @var string|null */
|
|
||||||
private $vendorDir;
|
|
||||||
|
|
||||||
// PSR-4
|
// PSR-4
|
||||||
/**
|
|
||||||
* @var array<string, array<string, int>>
|
|
||||||
*/
|
|
||||||
private $prefixLengthsPsr4 = array();
|
private $prefixLengthsPsr4 = array();
|
||||||
/**
|
|
||||||
* @var array<string, list<string>>
|
|
||||||
*/
|
|
||||||
private $prefixDirsPsr4 = array();
|
private $prefixDirsPsr4 = array();
|
||||||
/**
|
|
||||||
* @var list<string>
|
|
||||||
*/
|
|
||||||
private $fallbackDirsPsr4 = array();
|
private $fallbackDirsPsr4 = array();
|
||||||
|
|
||||||
// PSR-0
|
// PSR-0
|
||||||
/**
|
|
||||||
* List of PSR-0 prefixes
|
|
||||||
*
|
|
||||||
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
|
|
||||||
*
|
|
||||||
* @var array<string, array<string, list<string>>>
|
|
||||||
*/
|
|
||||||
private $prefixesPsr0 = array();
|
private $prefixesPsr0 = array();
|
||||||
/**
|
|
||||||
* @var list<string>
|
|
||||||
*/
|
|
||||||
private $fallbackDirsPsr0 = array();
|
private $fallbackDirsPsr0 = array();
|
||||||
|
|
||||||
/** @var bool */
|
|
||||||
private $useIncludePath = false;
|
private $useIncludePath = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array<string, string>
|
|
||||||
*/
|
|
||||||
private $classMap = array();
|
private $classMap = array();
|
||||||
|
|
||||||
/** @var bool */
|
|
||||||
private $classMapAuthoritative = false;
|
private $classMapAuthoritative = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array<string, bool>
|
|
||||||
*/
|
|
||||||
private $missingClasses = array();
|
private $missingClasses = array();
|
||||||
|
|
||||||
/** @var string|null */
|
|
||||||
private $apcuPrefix;
|
private $apcuPrefix;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array<string, self>
|
|
||||||
*/
|
|
||||||
private static $registeredLoaders = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string|null $vendorDir
|
|
||||||
*/
|
|
||||||
public function __construct($vendorDir = null)
|
|
||||||
{
|
|
||||||
$this->vendorDir = $vendorDir;
|
|
||||||
self::initializeIncludeClosure();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<string, list<string>>
|
|
||||||
*/
|
|
||||||
public function getPrefixes()
|
public function getPrefixes()
|
||||||
{
|
{
|
||||||
if (!empty($this->prefixesPsr0)) {
|
if (!empty($this->prefixesPsr0)) {
|
||||||
|
@ -121,42 +66,28 @@ class ClassLoader
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<string, list<string>>
|
|
||||||
*/
|
|
||||||
public function getPrefixesPsr4()
|
public function getPrefixesPsr4()
|
||||||
{
|
{
|
||||||
return $this->prefixDirsPsr4;
|
return $this->prefixDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return list<string>
|
|
||||||
*/
|
|
||||||
public function getFallbackDirs()
|
public function getFallbackDirs()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr0;
|
return $this->fallbackDirsPsr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return list<string>
|
|
||||||
*/
|
|
||||||
public function getFallbackDirsPsr4()
|
public function getFallbackDirsPsr4()
|
||||||
{
|
{
|
||||||
return $this->fallbackDirsPsr4;
|
return $this->fallbackDirsPsr4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<string, string> Array of classname => path
|
|
||||||
*/
|
|
||||||
public function getClassMap()
|
public function getClassMap()
|
||||||
{
|
{
|
||||||
return $this->classMap;
|
return $this->classMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, string> $classMap Class to filename map
|
* @param array $classMap Class to filename map
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function addClassMap(array $classMap)
|
public function addClassMap(array $classMap)
|
||||||
{
|
{
|
||||||
|
@ -172,24 +103,21 @@ class ClassLoader
|
||||||
* appending or prepending to the ones previously set for this prefix.
|
* appending or prepending to the ones previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param list<string>|string $paths The PSR-0 root directories
|
* @param array|string $paths The PSR-0 root directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function add($prefix, $paths, $prepend = false)
|
public function add($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
$paths = (array) $paths;
|
|
||||||
if (!$prefix) {
|
if (!$prefix) {
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
$paths,
|
(array) $paths,
|
||||||
$this->fallbackDirsPsr0
|
$this->fallbackDirsPsr0
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
$this->fallbackDirsPsr0 = array_merge(
|
||||||
$this->fallbackDirsPsr0,
|
$this->fallbackDirsPsr0,
|
||||||
$paths
|
(array) $paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,19 +126,19 @@ class ClassLoader
|
||||||
|
|
||||||
$first = $prefix[0];
|
$first = $prefix[0];
|
||||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||||
$this->prefixesPsr0[$first][$prefix] = $paths;
|
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
$paths,
|
(array) $paths,
|
||||||
$this->prefixesPsr0[$first][$prefix]
|
$this->prefixesPsr0[$first][$prefix]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||||
$this->prefixesPsr0[$first][$prefix],
|
$this->prefixesPsr0[$first][$prefix],
|
||||||
$paths
|
(array) $paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -220,27 +148,24 @@ class ClassLoader
|
||||||
* appending or prepending to the ones previously set for this namespace.
|
* appending or prepending to the ones previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param list<string>|string $paths The PSR-4 base directories
|
* @param array|string $paths The PSR-4 base directories
|
||||||
* @param bool $prepend Whether to prepend the directories
|
* @param bool $prepend Whether to prepend the directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function addPsr4($prefix, $paths, $prepend = false)
|
public function addPsr4($prefix, $paths, $prepend = false)
|
||||||
{
|
{
|
||||||
$paths = (array) $paths;
|
|
||||||
if (!$prefix) {
|
if (!$prefix) {
|
||||||
// Register directories for the root namespace.
|
// Register directories for the root namespace.
|
||||||
if ($prepend) {
|
if ($prepend) {
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
$paths,
|
(array) $paths,
|
||||||
$this->fallbackDirsPsr4
|
$this->fallbackDirsPsr4
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
$this->fallbackDirsPsr4 = array_merge(
|
||||||
$this->fallbackDirsPsr4,
|
$this->fallbackDirsPsr4,
|
||||||
$paths
|
(array) $paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||||
|
@ -250,18 +175,18 @@ class ClassLoader
|
||||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||||
}
|
}
|
||||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||||
$this->prefixDirsPsr4[$prefix] = $paths;
|
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||||
} elseif ($prepend) {
|
} elseif ($prepend) {
|
||||||
// Prepend directories for an already registered namespace.
|
// Prepend directories for an already registered namespace.
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
$paths,
|
(array) $paths,
|
||||||
$this->prefixDirsPsr4[$prefix]
|
$this->prefixDirsPsr4[$prefix]
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Append directories for an already registered namespace.
|
// Append directories for an already registered namespace.
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||||
$this->prefixDirsPsr4[$prefix],
|
$this->prefixDirsPsr4[$prefix],
|
||||||
$paths
|
(array) $paths
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -271,9 +196,7 @@ class ClassLoader
|
||||||
* replacing any others previously set for this prefix.
|
* replacing any others previously set for this prefix.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix
|
* @param string $prefix The prefix
|
||||||
* @param list<string>|string $paths The PSR-0 base directories
|
* @param array|string $paths The PSR-0 base directories
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function set($prefix, $paths)
|
public function set($prefix, $paths)
|
||||||
{
|
{
|
||||||
|
@ -289,11 +212,9 @@ class ClassLoader
|
||||||
* replacing any others previously set for this namespace.
|
* replacing any others previously set for this namespace.
|
||||||
*
|
*
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||||
* @param list<string>|string $paths The PSR-4 base directories
|
* @param array|string $paths The PSR-4 base directories
|
||||||
*
|
*
|
||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function setPsr4($prefix, $paths)
|
public function setPsr4($prefix, $paths)
|
||||||
{
|
{
|
||||||
|
@ -313,8 +234,6 @@ class ClassLoader
|
||||||
* Turns on searching the include path for class files.
|
* Turns on searching the include path for class files.
|
||||||
*
|
*
|
||||||
* @param bool $useIncludePath
|
* @param bool $useIncludePath
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function setUseIncludePath($useIncludePath)
|
public function setUseIncludePath($useIncludePath)
|
||||||
{
|
{
|
||||||
|
@ -337,8 +256,6 @@ class ClassLoader
|
||||||
* that have not been registered with the class map.
|
* that have not been registered with the class map.
|
||||||
*
|
*
|
||||||
* @param bool $classMapAuthoritative
|
* @param bool $classMapAuthoritative
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||||
{
|
{
|
||||||
|
@ -359,8 +276,6 @@ class ClassLoader
|
||||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||||
*
|
*
|
||||||
* @param string|null $apcuPrefix
|
* @param string|null $apcuPrefix
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function setApcuPrefix($apcuPrefix)
|
public function setApcuPrefix($apcuPrefix)
|
||||||
{
|
{
|
||||||
|
@ -381,55 +296,33 @@ class ClassLoader
|
||||||
* Registers this instance as an autoloader.
|
* Registers this instance as an autoloader.
|
||||||
*
|
*
|
||||||
* @param bool $prepend Whether to prepend the autoloader or not
|
* @param bool $prepend Whether to prepend the autoloader or not
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function register($prepend = false)
|
public function register($prepend = false)
|
||||||
{
|
{
|
||||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||||
|
|
||||||
if (null === $this->vendorDir) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($prepend) {
|
|
||||||
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
|
||||||
} else {
|
|
||||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
|
||||||
self::$registeredLoaders[$this->vendorDir] = $this;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unregisters this instance as an autoloader.
|
* Unregisters this instance as an autoloader.
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public function unregister()
|
public function unregister()
|
||||||
{
|
{
|
||||||
spl_autoload_unregister(array($this, 'loadClass'));
|
spl_autoload_unregister(array($this, 'loadClass'));
|
||||||
|
|
||||||
if (null !== $this->vendorDir) {
|
|
||||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the given class or interface.
|
* Loads the given class or interface.
|
||||||
*
|
*
|
||||||
* @param string $class The name of the class
|
* @param string $class The name of the class
|
||||||
* @return true|null True if loaded, null otherwise
|
* @return bool|null True if loaded, null otherwise
|
||||||
*/
|
*/
|
||||||
public function loadClass($class)
|
public function loadClass($class)
|
||||||
{
|
{
|
||||||
if ($file = $this->findFile($class)) {
|
if ($file = $this->findFile($class)) {
|
||||||
$includeFile = self::$includeFile;
|
includeFile($file);
|
||||||
$includeFile($file);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -474,21 +367,6 @@ class ClassLoader
|
||||||
return $file;
|
return $file;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the currently registered loaders keyed by their corresponding vendor directories.
|
|
||||||
*
|
|
||||||
* @return array<string, self>
|
|
||||||
*/
|
|
||||||
public static function getRegisteredLoaders()
|
|
||||||
{
|
|
||||||
return self::$registeredLoaders;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $class
|
|
||||||
* @param string $ext
|
|
||||||
* @return string|false
|
|
||||||
*/
|
|
||||||
private function findFileWithExtension($class, $ext)
|
private function findFileWithExtension($class, $ext)
|
||||||
{
|
{
|
||||||
// PSR-4 lookup
|
// PSR-4 lookup
|
||||||
|
@ -554,26 +432,14 @@ class ClassLoader
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
private static function initializeIncludeClosure()
|
|
||||||
{
|
|
||||||
if (self::$includeFile !== null) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scope isolated include.
|
* Scope isolated include.
|
||||||
*
|
*
|
||||||
* Prevents access to $this/self from included files.
|
* Prevents access to $this/self from included files.
|
||||||
*
|
|
||||||
* @param string $file
|
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
self::$includeFile = \Closure::bind(static function($file) {
|
function includeFile($file)
|
||||||
|
{
|
||||||
include $file;
|
include $file;
|
||||||
}, null, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,359 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Composer.
|
|
||||||
*
|
|
||||||
* (c) Nils Adermann <naderman@naderman.de>
|
|
||||||
* Jordi Boggiano <j.boggiano@seld.be>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Composer;
|
|
||||||
|
|
||||||
use Composer\Autoload\ClassLoader;
|
|
||||||
use Composer\Semver\VersionParser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class is copied in every Composer installed project and available to all
|
|
||||||
*
|
|
||||||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
|
||||||
*
|
|
||||||
* To require its presence, you can require `composer-runtime-api ^2.0`
|
|
||||||
*
|
|
||||||
* @final
|
|
||||||
*/
|
|
||||||
class InstalledVersions
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var mixed[]|null
|
|
||||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
|
||||||
*/
|
|
||||||
private static $installed;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var bool|null
|
|
||||||
*/
|
|
||||||
private static $canGetVendors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array[]
|
|
||||||
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
|
||||||
*/
|
|
||||||
private static $installedByVendor = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
* @psalm-return list<string>
|
|
||||||
*/
|
|
||||||
public static function getInstalledPackages()
|
|
||||||
{
|
|
||||||
$packages = array();
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
$packages[] = array_keys($installed['versions']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (1 === \count($packages)) {
|
|
||||||
return $packages[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a list of all package names with a specific type e.g. 'library'
|
|
||||||
*
|
|
||||||
* @param string $type
|
|
||||||
* @return string[]
|
|
||||||
* @psalm-return list<string>
|
|
||||||
*/
|
|
||||||
public static function getInstalledPackagesByType($type)
|
|
||||||
{
|
|
||||||
$packagesByType = array();
|
|
||||||
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
foreach ($installed['versions'] as $name => $package) {
|
|
||||||
if (isset($package['type']) && $package['type'] === $type) {
|
|
||||||
$packagesByType[] = $name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $packagesByType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the given package is installed
|
|
||||||
*
|
|
||||||
* This also returns true if the package name is provided or replaced by another package
|
|
||||||
*
|
|
||||||
* @param string $packageName
|
|
||||||
* @param bool $includeDevRequirements
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function isInstalled($packageName, $includeDevRequirements = true)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (isset($installed['versions'][$packageName])) {
|
|
||||||
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether the given package satisfies a version constraint
|
|
||||||
*
|
|
||||||
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
|
||||||
*
|
|
||||||
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
|
||||||
*
|
|
||||||
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
|
||||||
* @param string $packageName
|
|
||||||
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
|
||||||
{
|
|
||||||
$constraint = $parser->parseConstraints((string) $constraint);
|
|
||||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
|
||||||
|
|
||||||
return $provided->matches($constraint);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a version constraint representing all the range(s) which are installed for a given package
|
|
||||||
*
|
|
||||||
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
|
||||||
* whether a given version of a package is installed, and not just whether it exists
|
|
||||||
*
|
|
||||||
* @param string $packageName
|
|
||||||
* @return string Version constraint usable with composer/semver
|
|
||||||
*/
|
|
||||||
public static function getVersionRanges($packageName)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (!isset($installed['versions'][$packageName])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ranges = array();
|
|
||||||
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
|
||||||
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
|
||||||
}
|
|
||||||
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
|
||||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
|
||||||
}
|
|
||||||
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
|
||||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
|
||||||
}
|
|
||||||
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
|
||||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return implode(' || ', $ranges);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $packageName
|
|
||||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
|
||||||
*/
|
|
||||||
public static function getVersion($packageName)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (!isset($installed['versions'][$packageName])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($installed['versions'][$packageName]['version'])) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $installed['versions'][$packageName]['version'];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $packageName
|
|
||||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
|
||||||
*/
|
|
||||||
public static function getPrettyVersion($packageName)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (!isset($installed['versions'][$packageName])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $installed['versions'][$packageName]['pretty_version'];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $packageName
|
|
||||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
|
||||||
*/
|
|
||||||
public static function getReference($packageName)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (!isset($installed['versions'][$packageName])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($installed['versions'][$packageName]['reference'])) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $installed['versions'][$packageName]['reference'];
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $packageName
|
|
||||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
|
||||||
*/
|
|
||||||
public static function getInstallPath($packageName)
|
|
||||||
{
|
|
||||||
foreach (self::getInstalled() as $installed) {
|
|
||||||
if (!isset($installed['versions'][$packageName])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array
|
|
||||||
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
|
||||||
*/
|
|
||||||
public static function getRootPackage()
|
|
||||||
{
|
|
||||||
$installed = self::getInstalled();
|
|
||||||
|
|
||||||
return $installed[0]['root'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the raw installed.php data for custom implementations
|
|
||||||
*
|
|
||||||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
|
||||||
* @return array[]
|
|
||||||
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
|
||||||
*/
|
|
||||||
public static function getRawData()
|
|
||||||
{
|
|
||||||
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
if (null === self::$installed) {
|
|
||||||
// only require the installed.php file if this file is loaded from its dumped location,
|
|
||||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
|
||||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
|
||||||
self::$installed = include __DIR__ . '/installed.php';
|
|
||||||
} else {
|
|
||||||
self::$installed = array();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::$installed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
|
||||||
*
|
|
||||||
* @return array[]
|
|
||||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
|
||||||
*/
|
|
||||||
public static function getAllRawData()
|
|
||||||
{
|
|
||||||
return self::getInstalled();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lets you reload the static array from another file
|
|
||||||
*
|
|
||||||
* This is only useful for complex integrations in which a project needs to use
|
|
||||||
* this class but then also needs to execute another project's autoloader in process,
|
|
||||||
* and wants to ensure both projects have access to their version of installed.php.
|
|
||||||
*
|
|
||||||
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
|
||||||
* the data it needs from this class, then call reload() with
|
|
||||||
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
|
||||||
* the project in which it runs can then also use this class safely, without
|
|
||||||
* interference between PHPUnit's dependencies and the project's dependencies.
|
|
||||||
*
|
|
||||||
* @param array[] $data A vendor/composer/installed.php data set
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
|
||||||
*/
|
|
||||||
public static function reload($data)
|
|
||||||
{
|
|
||||||
self::$installed = $data;
|
|
||||||
self::$installedByVendor = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array[]
|
|
||||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
|
||||||
*/
|
|
||||||
private static function getInstalled()
|
|
||||||
{
|
|
||||||
if (null === self::$canGetVendors) {
|
|
||||||
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
|
||||||
}
|
|
||||||
|
|
||||||
$installed = array();
|
|
||||||
|
|
||||||
if (self::$canGetVendors) {
|
|
||||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
|
||||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
|
||||||
$installed[] = self::$installedByVendor[$vendorDir];
|
|
||||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
|
||||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
|
||||||
$required = require $vendorDir.'/composer/installed.php';
|
|
||||||
$installed[] = self::$installedByVendor[$vendorDir] = $required;
|
|
||||||
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
|
||||||
self::$installed = $installed[count($installed) - 1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === self::$installed) {
|
|
||||||
// only require the installed.php file if this file is loaded from its dumped location,
|
|
||||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
|
||||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
|
||||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
|
||||||
$required = require __DIR__ . '/installed.php';
|
|
||||||
self::$installed = $required;
|
|
||||||
} else {
|
|
||||||
self::$installed = array();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self::$installed !== array()) {
|
|
||||||
$installed[] = self::$installed;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $installed;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,12 +2,11 @@
|
||||||
|
|
||||||
// autoload_classmap.php @generated by Composer
|
// autoload_classmap.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(__DIR__);
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
|
||||||
'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php',
|
'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php',
|
||||||
'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php',
|
'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php',
|
||||||
'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
|
'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
|
||||||
|
@ -155,6 +154,7 @@ return array(
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
|
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableAdapter.php',
|
||||||
|
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapterEvent' => $vendorDir . '/symfony/cache/Adapter/TraceableAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\CacheItem' => $vendorDir . '/symfony/cache/CacheItem.php',
|
'Symfony\\Component\\Cache\\CacheItem' => $vendorDir . '/symfony/cache/CacheItem.php',
|
||||||
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => $vendorDir . '/symfony/cache/DataCollector/CacheDataCollector.php',
|
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => $vendorDir . '/symfony/cache/DataCollector/CacheDataCollector.php',
|
||||||
|
@ -188,6 +188,7 @@ return array(
|
||||||
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => $vendorDir . '/symfony/cache/Simple/Psr6Cache.php',
|
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => $vendorDir . '/symfony/cache/Simple/Psr6Cache.php',
|
||||||
'Symfony\\Component\\Cache\\Simple\\RedisCache' => $vendorDir . '/symfony/cache/Simple/RedisCache.php',
|
'Symfony\\Component\\Cache\\Simple\\RedisCache' => $vendorDir . '/symfony/cache/Simple/RedisCache.php',
|
||||||
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => $vendorDir . '/symfony/cache/Simple/TraceableCache.php',
|
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => $vendorDir . '/symfony/cache/Simple/TraceableCache.php',
|
||||||
|
'Symfony\\Component\\Cache\\Simple\\TraceableCacheEvent' => $vendorDir . '/symfony/cache/Simple/TraceableCache.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => $vendorDir . '/symfony/cache/Traits/AbstractAdapterTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => $vendorDir . '/symfony/cache/Traits/AbstractAdapterTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => $vendorDir . '/symfony/cache/Traits/AbstractTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => $vendorDir . '/symfony/cache/Traits/AbstractTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => $vendorDir . '/symfony/cache/Traits/ApcuTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => $vendorDir . '/symfony/cache/Traits/ApcuTrait.php',
|
||||||
|
@ -196,6 +197,7 @@ return array(
|
||||||
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => $vendorDir . '/symfony/cache/Traits/DoctrineTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => $vendorDir . '/symfony/cache/Traits/DoctrineTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemCommonTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemCommonTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemTrait.php',
|
||||||
|
'Symfony\\Component\\Cache\\Traits\\LazyValue' => $vendorDir . '/symfony/cache/Traits/PhpFilesTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => $vendorDir . '/symfony/cache/Traits/MemcachedTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => $vendorDir . '/symfony/cache/Traits/MemcachedTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => $vendorDir . '/symfony/cache/Traits/PdoTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => $vendorDir . '/symfony/cache/Traits/PdoTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => $vendorDir . '/symfony/cache/Traits/PhpArrayTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => $vendorDir . '/symfony/cache/Traits/PhpArrayTrait.php',
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
// autoload_files.php @generated by Composer
|
// autoload_files.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(__DIR__);
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
// autoload_namespaces.php @generated by Composer
|
// autoload_namespaces.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(__DIR__);
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
// autoload_psr4.php @generated by Composer
|
// autoload_psr4.php @generated by Composer
|
||||||
|
|
||||||
$vendorDir = dirname(__DIR__);
|
$vendorDir = dirname(dirname(__FILE__));
|
||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
@ -16,7 +16,7 @@ return array(
|
||||||
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
|
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
|
||||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||||
'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
|
'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
|
||||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
|
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
|
||||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
||||||
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
||||||
|
|
|
@ -22,29 +22,52 @@ class ComposerAutoloaderInitAdvancedContentFilterAddon
|
||||||
return self::$loader;
|
return self::$loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
require __DIR__ . '/platform_check.php';
|
|
||||||
|
|
||||||
spl_autoload_register(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'), true, true);
|
spl_autoload_register(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'), true, true);
|
||||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||||
spl_autoload_unregister(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'));
|
spl_autoload_unregister(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'));
|
||||||
|
|
||||||
require __DIR__ . '/autoload_static.php';
|
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||||
|
if ($useStaticLoader) {
|
||||||
|
require_once __DIR__ . '/autoload_static.php';
|
||||||
|
|
||||||
call_user_func(\Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::getInitializer($loader));
|
call_user_func(\Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::getInitializer($loader));
|
||||||
|
} else {
|
||||||
|
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||||
|
foreach ($map as $namespace => $path) {
|
||||||
|
$loader->set($namespace, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
$map = require __DIR__ . '/autoload_psr4.php';
|
||||||
|
foreach ($map as $namespace => $path) {
|
||||||
|
$loader->setPsr4($namespace, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||||
|
if ($classMap) {
|
||||||
|
$loader->addClassMap($classMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$loader->register(true);
|
$loader->register(true);
|
||||||
|
|
||||||
$filesToLoad = \Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::$files;
|
if ($useStaticLoader) {
|
||||||
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
|
$includeFiles = Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::$files;
|
||||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
} else {
|
||||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||||
|
|
||||||
require $file;
|
|
||||||
}
|
}
|
||||||
}, null, null);
|
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||||
foreach ($filesToLoad as $fileIdentifier => $file) {
|
composerRequireAdvancedContentFilterAddon($fileIdentifier, $file);
|
||||||
$requireFile($fileIdentifier, $file);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $loader;
|
return $loader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function composerRequireAdvancedContentFilterAddon($fileIdentifier, $file)
|
||||||
|
{
|
||||||
|
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||||
|
require $file;
|
||||||
|
|
||||||
|
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -83,8 +83,8 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
),
|
),
|
||||||
'Psr\\Http\\Message\\' =>
|
'Psr\\Http\\Message\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/psr/http-message/src',
|
0 => __DIR__ . '/..' . '/psr/http-factory/src',
|
||||||
1 => __DIR__ . '/..' . '/psr/http-factory/src',
|
1 => __DIR__ . '/..' . '/psr/http-message/src',
|
||||||
),
|
),
|
||||||
'Psr\\Container\\' =>
|
'Psr\\Container\\' =>
|
||||||
array (
|
array (
|
||||||
|
@ -102,7 +102,6 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
|
|
||||||
public static $classMap = array (
|
public static $classMap = array (
|
||||||
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
|
||||||
'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
|
'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
|
||||||
'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
|
'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
|
||||||
'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
|
'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
|
||||||
|
@ -250,6 +249,7 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
|
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableAdapter.php',
|
||||||
|
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapterEvent' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
|
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
|
||||||
'Symfony\\Component\\Cache\\CacheItem' => __DIR__ . '/..' . '/symfony/cache/CacheItem.php',
|
'Symfony\\Component\\Cache\\CacheItem' => __DIR__ . '/..' . '/symfony/cache/CacheItem.php',
|
||||||
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => __DIR__ . '/..' . '/symfony/cache/DataCollector/CacheDataCollector.php',
|
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => __DIR__ . '/..' . '/symfony/cache/DataCollector/CacheDataCollector.php',
|
||||||
|
@ -283,6 +283,7 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => __DIR__ . '/..' . '/symfony/cache/Simple/Psr6Cache.php',
|
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => __DIR__ . '/..' . '/symfony/cache/Simple/Psr6Cache.php',
|
||||||
'Symfony\\Component\\Cache\\Simple\\RedisCache' => __DIR__ . '/..' . '/symfony/cache/Simple/RedisCache.php',
|
'Symfony\\Component\\Cache\\Simple\\RedisCache' => __DIR__ . '/..' . '/symfony/cache/Simple/RedisCache.php',
|
||||||
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => __DIR__ . '/..' . '/symfony/cache/Simple/TraceableCache.php',
|
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => __DIR__ . '/..' . '/symfony/cache/Simple/TraceableCache.php',
|
||||||
|
'Symfony\\Component\\Cache\\Simple\\TraceableCacheEvent' => __DIR__ . '/..' . '/symfony/cache/Simple/TraceableCache.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractAdapterTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractAdapterTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ApcuTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ApcuTrait.php',
|
||||||
|
@ -291,6 +292,7 @@ class ComposerStaticInitAdvancedContentFilterAddon
|
||||||
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/DoctrineTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/DoctrineTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemCommonTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemCommonTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemTrait.php',
|
||||||
|
'Symfony\\Component\\Cache\\Traits\\LazyValue' => __DIR__ . '/..' . '/symfony/cache/Traits/PhpFilesTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/MemcachedTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/MemcachedTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PdoTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PdoTrait.php',
|
||||||
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PhpArrayTrait.php',
|
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PhpArrayTrait.php',
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
{
|
[
|
||||||
"packages": [
|
|
||||||
{
|
{
|
||||||
"name": "nikic/fast-route",
|
"name": "nikic/fast-route",
|
||||||
"version": "v1.3.0",
|
"version": "v1.3.0",
|
||||||
|
@ -46,8 +45,7 @@
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"router",
|
"router",
|
||||||
"routing"
|
"routing"
|
||||||
],
|
]
|
||||||
"install-path": "../nikic/fast-route"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
|
@ -95,8 +93,7 @@
|
||||||
"cache",
|
"cache",
|
||||||
"psr",
|
"psr",
|
||||||
"psr-6"
|
"psr-6"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/cache"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
|
@ -142,8 +139,7 @@
|
||||||
"container-interface",
|
"container-interface",
|
||||||
"container-interop",
|
"container-interop",
|
||||||
"psr"
|
"psr"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/container"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-factory",
|
"name": "psr/http-factory",
|
||||||
|
@ -197,8 +193,7 @@
|
||||||
"psr-7",
|
"psr-7",
|
||||||
"request",
|
"request",
|
||||||
"response"
|
"response"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/http-factory"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-message",
|
||||||
|
@ -250,8 +245,7 @@
|
||||||
"psr-7",
|
"psr-7",
|
||||||
"request",
|
"request",
|
||||||
"response"
|
"response"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/http-message"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-server-handler",
|
"name": "psr/http-server-handler",
|
||||||
|
@ -306,8 +300,7 @@
|
||||||
"request",
|
"request",
|
||||||
"response",
|
"response",
|
||||||
"server"
|
"server"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/http-server-handler"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-server-middleware",
|
"name": "psr/http-server-middleware",
|
||||||
|
@ -362,8 +355,7 @@
|
||||||
"psr-7",
|
"psr-7",
|
||||||
"request",
|
"request",
|
||||||
"response"
|
"response"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/http-server-middleware"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/log",
|
"name": "psr/log",
|
||||||
|
@ -412,8 +404,7 @@
|
||||||
"log",
|
"log",
|
||||||
"psr",
|
"psr",
|
||||||
"psr-3"
|
"psr-3"
|
||||||
],
|
]
|
||||||
"install-path": "../psr/log"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "slim/slim",
|
"name": "slim/slim",
|
||||||
|
@ -520,8 +511,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/slim/slim",
|
"url": "https://tidelift.com/funding/github/packagist/slim/slim",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../slim/slim"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache",
|
"name": "symfony/cache",
|
||||||
|
@ -615,8 +605,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/cache"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/cache-contracts",
|
"name": "symfony/cache-contracts",
|
||||||
|
@ -694,8 +683,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/cache-contracts"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/deprecation-contracts",
|
"name": "symfony/deprecation-contracts",
|
||||||
|
@ -761,8 +749,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/deprecation-contracts"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/expression-language",
|
"name": "symfony/expression-language",
|
||||||
|
@ -824,8 +811,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/expression-language"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php70",
|
"name": "symfony/polyfill-php70",
|
||||||
|
@ -891,8 +877,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": null
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php73",
|
"name": "symfony/polyfill-php73",
|
||||||
|
@ -967,8 +952,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/polyfill-php73"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
|
@ -1047,8 +1031,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/polyfill-php80"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
|
@ -1130,8 +1113,7 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/service-contracts"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/var-exporter",
|
"name": "symfony/var-exporter",
|
||||||
|
@ -1203,10 +1185,6 @@
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"install-path": "../symfony/var-exporter"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"dev": false,
|
|
||||||
"dev-package-names": []
|
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
|
203
advancedcontentfilter/vendor/composer/installed.php
vendored
203
advancedcontentfilter/vendor/composer/installed.php
vendored
|
@ -1,203 +0,0 @@
|
||||||
<?php return array(
|
|
||||||
'root' => array(
|
|
||||||
'name' => 'friendica-addons/advancedcontentfilter',
|
|
||||||
'pretty_version' => 'dev-develop',
|
|
||||||
'version' => 'dev-develop',
|
|
||||||
'reference' => 'feb7722f723b21e76fdf20a7ce4b42fa5ffcdcb9',
|
|
||||||
'type' => 'friendica-addon',
|
|
||||||
'install_path' => __DIR__ . '/../../',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev' => false,
|
|
||||||
),
|
|
||||||
'versions' => array(
|
|
||||||
'friendica-addons/advancedcontentfilter' => array(
|
|
||||||
'pretty_version' => 'dev-develop',
|
|
||||||
'version' => 'dev-develop',
|
|
||||||
'reference' => 'feb7722f723b21e76fdf20a7ce4b42fa5ffcdcb9',
|
|
||||||
'type' => 'friendica-addon',
|
|
||||||
'install_path' => __DIR__ . '/../../',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'nikic/fast-route' => array(
|
|
||||||
'pretty_version' => 'v1.3.0',
|
|
||||||
'version' => '1.3.0.0',
|
|
||||||
'reference' => '181d480e08d9476e61381e04a71b34dc0432e812',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../nikic/fast-route',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/cache' => array(
|
|
||||||
'pretty_version' => '1.0.1',
|
|
||||||
'version' => '1.0.1.0',
|
|
||||||
'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/cache',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/cache-implementation' => array(
|
|
||||||
'dev_requirement' => false,
|
|
||||||
'provided' => array(
|
|
||||||
0 => '1.0|2.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'psr/container' => array(
|
|
||||||
'pretty_version' => '1.1.2',
|
|
||||||
'version' => '1.1.2.0',
|
|
||||||
'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/container',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/http-factory' => array(
|
|
||||||
'pretty_version' => '1.0.2',
|
|
||||||
'version' => '1.0.2.0',
|
|
||||||
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/http-factory',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/http-message' => array(
|
|
||||||
'pretty_version' => '2.0',
|
|
||||||
'version' => '2.0.0.0',
|
|
||||||
'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/http-message',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/http-server-handler' => array(
|
|
||||||
'pretty_version' => '1.0.2',
|
|
||||||
'version' => '1.0.2.0',
|
|
||||||
'reference' => '84c4fb66179be4caaf8e97bd239203245302e7d4',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/http-server-handler',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/http-server-middleware' => array(
|
|
||||||
'pretty_version' => '1.0.2',
|
|
||||||
'version' => '1.0.2.0',
|
|
||||||
'reference' => 'c1481f747daaa6a0782775cd6a8c26a1bf4a3829',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/http-server-middleware',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/log' => array(
|
|
||||||
'pretty_version' => '1.1.4',
|
|
||||||
'version' => '1.1.4.0',
|
|
||||||
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../psr/log',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'psr/simple-cache-implementation' => array(
|
|
||||||
'dev_requirement' => false,
|
|
||||||
'provided' => array(
|
|
||||||
0 => '1.0|2.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'slim/slim' => array(
|
|
||||||
'pretty_version' => '4.13.0',
|
|
||||||
'version' => '4.13.0.0',
|
|
||||||
'reference' => '038fd5713d5a41636fdff0e8dcceedecdd17fc17',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../slim/slim',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/cache' => array(
|
|
||||||
'pretty_version' => 'v4.4.48',
|
|
||||||
'version' => '4.4.48.0',
|
|
||||||
'reference' => '3b98ed664887ad197b8ede3da2432787212eb915',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/cache',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/cache-contracts' => array(
|
|
||||||
'pretty_version' => 'v2.5.2',
|
|
||||||
'version' => '2.5.2.0',
|
|
||||||
'reference' => '64be4a7acb83b6f2bf6de9a02cee6dad41277ebc',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/cache-contracts',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/cache-implementation' => array(
|
|
||||||
'dev_requirement' => false,
|
|
||||||
'provided' => array(
|
|
||||||
0 => '1.0|2.0',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'symfony/deprecation-contracts' => array(
|
|
||||||
'pretty_version' => 'v2.5.2',
|
|
||||||
'version' => '2.5.2.0',
|
|
||||||
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/expression-language' => array(
|
|
||||||
'pretty_version' => 'v3.4.47',
|
|
||||||
'version' => '3.4.47.0',
|
|
||||||
'reference' => 'de38e66398fca1fcb9c48e80279910e6889cb28f',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/expression-language',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/polyfill-php70' => array(
|
|
||||||
'pretty_version' => 'v1.20.0',
|
|
||||||
'version' => '1.20.0.0',
|
|
||||||
'reference' => '5f03a781d984aae42cebd18e7912fa80f02ee644',
|
|
||||||
'type' => 'metapackage',
|
|
||||||
'install_path' => null,
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/polyfill-php73' => array(
|
|
||||||
'pretty_version' => 'v1.29.0',
|
|
||||||
'version' => '1.29.0.0',
|
|
||||||
'reference' => '21bd091060673a1177ae842c0ef8fe30893114d2',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/polyfill-php73',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/polyfill-php80' => array(
|
|
||||||
'pretty_version' => 'v1.29.0',
|
|
||||||
'version' => '1.29.0.0',
|
|
||||||
'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/service-contracts' => array(
|
|
||||||
'pretty_version' => 'v2.5.2',
|
|
||||||
'version' => '2.5.2.0',
|
|
||||||
'reference' => '4b426aac47d6427cc1a1d0f7e2ac724627f5966c',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/service-contracts',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
'symfony/var-exporter' => array(
|
|
||||||
'pretty_version' => 'v5.4.35',
|
|
||||||
'version' => '5.4.35.0',
|
|
||||||
'reference' => 'abb0a151b62d6b07e816487e20040464af96cae7',
|
|
||||||
'type' => 'library',
|
|
||||||
'install_path' => __DIR__ . '/../symfony/var-exporter',
|
|
||||||
'aliases' => array(),
|
|
||||||
'dev_requirement' => false,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// platform_check.php @generated by Composer
|
|
||||||
|
|
||||||
$issues = array();
|
|
||||||
|
|
||||||
if (!(PHP_VERSION_ID >= 70400)) {
|
|
||||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($issues) {
|
|
||||||
if (!headers_sent()) {
|
|
||||||
header('HTTP/1.1 500 Internal Server Error');
|
|
||||||
}
|
|
||||||
if (!ini_get('display_errors')) {
|
|
||||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
|
||||||
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
|
||||||
} elseif (!headers_sent()) {
|
|
||||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
trigger_error(
|
|
||||||
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
}
|
|
12
advancedcontentfilter/vendor/psr/simple-cache/.editorconfig
vendored
Normal file
12
advancedcontentfilter/vendor/psr/simple-cache/.editorconfig
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
; This file is for unifying the coding style for different editors and IDEs.
|
||||||
|
; More information at http://editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_size = 4
|
||||||
|
indent_style = space
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
21
advancedcontentfilter/vendor/psr/simple-cache/LICENSE.md
vendored
Normal file
21
advancedcontentfilter/vendor/psr/simple-cache/LICENSE.md
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 PHP Framework Interoperability Group
|
||||||
|
|
||||||
|
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
> of this software and associated documentation files (the "Software"), to deal
|
||||||
|
> in the Software without restriction, including without limitation the rights
|
||||||
|
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
> copies of the Software, and to permit persons to whom the Software is
|
||||||
|
> furnished to do so, subject to the following conditions:
|
||||||
|
>
|
||||||
|
> The above copyright notice and this permission notice shall be included in
|
||||||
|
> all copies or substantial portions of the Software.
|
||||||
|
>
|
||||||
|
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
> THE SOFTWARE.
|
8
advancedcontentfilter/vendor/psr/simple-cache/README.md
vendored
Normal file
8
advancedcontentfilter/vendor/psr/simple-cache/README.md
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
PHP FIG Simple Cache PSR
|
||||||
|
========================
|
||||||
|
|
||||||
|
This repository holds all interfaces related to PSR-16.
|
||||||
|
|
||||||
|
Note that this is not a cache implementation of its own. It is merely an interface that describes a cache implementation. See [the specification](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-16-simple-cache.md) for more details.
|
||||||
|
|
||||||
|
You can find implementations of the specification by looking for packages providing the [psr/simple-cache-implementation](https://packagist.org/providers/psr/simple-cache-implementation) virtual package.
|
25
advancedcontentfilter/vendor/psr/simple-cache/composer.json
vendored
Normal file
25
advancedcontentfilter/vendor/psr/simple-cache/composer.json
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "psr/simple-cache",
|
||||||
|
"description": "Common interfaces for simple caching",
|
||||||
|
"keywords": ["psr", "psr-16", "cache", "simple-cache", "caching"],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\SimpleCache\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
advancedcontentfilter/vendor/psr/simple-cache/src/CacheException.php
vendored
Normal file
10
advancedcontentfilter/vendor/psr/simple-cache/src/CacheException.php
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\SimpleCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface used for all types of exceptions thrown by the implementing library.
|
||||||
|
*/
|
||||||
|
interface CacheException
|
||||||
|
{
|
||||||
|
}
|
114
advancedcontentfilter/vendor/psr/simple-cache/src/CacheInterface.php
vendored
Normal file
114
advancedcontentfilter/vendor/psr/simple-cache/src/CacheInterface.php
vendored
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\SimpleCache;
|
||||||
|
|
||||||
|
interface CacheInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Fetches a value from the cache.
|
||||||
|
*
|
||||||
|
* @param string $key The unique key of this item in the cache.
|
||||||
|
* @param mixed $default Default value to return if the key does not exist.
|
||||||
|
*
|
||||||
|
* @return mixed The value of the item from the cache, or $default in case of cache miss.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if the $key string is not a legal value.
|
||||||
|
*/
|
||||||
|
public function get($key, $default = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
|
||||||
|
*
|
||||||
|
* @param string $key The key of the item to store.
|
||||||
|
* @param mixed $value The value of the item to store, must be serializable.
|
||||||
|
* @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and
|
||||||
|
* the driver supports TTL then the library may set a default value
|
||||||
|
* for it or let the driver take care of that.
|
||||||
|
*
|
||||||
|
* @return bool True on success and false on failure.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if the $key string is not a legal value.
|
||||||
|
*/
|
||||||
|
public function set($key, $value, $ttl = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an item from the cache by its unique key.
|
||||||
|
*
|
||||||
|
* @param string $key The unique cache key of the item to delete.
|
||||||
|
*
|
||||||
|
* @return bool True if the item was successfully removed. False if there was an error.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if the $key string is not a legal value.
|
||||||
|
*/
|
||||||
|
public function delete($key);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wipes clean the entire cache's keys.
|
||||||
|
*
|
||||||
|
* @return bool True on success and false on failure.
|
||||||
|
*/
|
||||||
|
public function clear();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtains multiple cache items by their unique keys.
|
||||||
|
*
|
||||||
|
* @param iterable $keys A list of keys that can obtained in a single operation.
|
||||||
|
* @param mixed $default Default value to return for keys that do not exist.
|
||||||
|
*
|
||||||
|
* @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if $keys is neither an array nor a Traversable,
|
||||||
|
* or if any of the $keys are not a legal value.
|
||||||
|
*/
|
||||||
|
public function getMultiple($keys, $default = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persists a set of key => value pairs in the cache, with an optional TTL.
|
||||||
|
*
|
||||||
|
* @param iterable $values A list of key => value pairs for a multiple-set operation.
|
||||||
|
* @param null|int|\DateInterval $ttl Optional. The TTL value of this item. If no value is sent and
|
||||||
|
* the driver supports TTL then the library may set a default value
|
||||||
|
* for it or let the driver take care of that.
|
||||||
|
*
|
||||||
|
* @return bool True on success and false on failure.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if $values is neither an array nor a Traversable,
|
||||||
|
* or if any of the $values are not a legal value.
|
||||||
|
*/
|
||||||
|
public function setMultiple($values, $ttl = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes multiple cache items in a single operation.
|
||||||
|
*
|
||||||
|
* @param iterable $keys A list of string-based keys to be deleted.
|
||||||
|
*
|
||||||
|
* @return bool True if the items were successfully removed. False if there was an error.
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if $keys is neither an array nor a Traversable,
|
||||||
|
* or if any of the $keys are not a legal value.
|
||||||
|
*/
|
||||||
|
public function deleteMultiple($keys);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether an item is present in the cache.
|
||||||
|
*
|
||||||
|
* NOTE: It is recommended that has() is only to be used for cache warming type purposes
|
||||||
|
* and not to be used within your live applications operations for get/set, as this method
|
||||||
|
* is subject to a race condition where your has() will return true and immediately after,
|
||||||
|
* another script can remove it making the state of your app out of date.
|
||||||
|
*
|
||||||
|
* @param string $key The cache item key.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||||
|
* MUST be thrown if the $key string is not a legal value.
|
||||||
|
*/
|
||||||
|
public function has($key);
|
||||||
|
}
|
13
advancedcontentfilter/vendor/psr/simple-cache/src/InvalidArgumentException.php
vendored
Normal file
13
advancedcontentfilter/vendor/psr/simple-cache/src/InvalidArgumentException.php
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\SimpleCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception interface for invalid cache arguments.
|
||||||
|
*
|
||||||
|
* When an invalid argument is passed it must throw an exception which implements
|
||||||
|
* this interface
|
||||||
|
*/
|
||||||
|
interface InvalidArgumentException extends CacheException
|
||||||
|
{
|
||||||
|
}
|
3
advancedcontentfilter/vendor/symfony/cache/.gitignore
vendored
Normal file
3
advancedcontentfilter/vendor/symfony/cache/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
composer.lock
|
||||||
|
phpunit.xml
|
||||||
|
vendor/
|
47
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/AbstractRedisAdapterTest.php
vendored
Normal file
47
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/AbstractRedisAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\RedisAdapter;
|
||||||
|
|
||||||
|
abstract class AbstractRedisAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testExpiration' => 'Testing expiration slows down the test suite',
|
||||||
|
'testHasItemReturnsFalseWhenDeferredItemIsExpired' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $redis;
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new RedisAdapter(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('redis')) {
|
||||||
|
self::markTestSkipped('Extension redis required.');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
(new \Redis())->connect(getenv('REDIS_HOST'));
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
self::markTestSkipped($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
self::$redis = null;
|
||||||
|
}
|
||||||
|
}
|
175
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/AdapterTestCase.php
vendored
Normal file
175
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/AdapterTestCase.php
vendored
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Cache\IntegrationTests\CachePoolTest;
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\PruneableInterface;
|
||||||
|
|
||||||
|
abstract class AdapterTestCase extends CachePoolTest
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!\array_key_exists('testDeferredSaveWithoutCommit', $this->skippedTests) && \defined('HHVM_VERSION')) {
|
||||||
|
$this->skippedTests['testDeferredSaveWithoutCommit'] = 'Destructors are called late on HHVM.';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!\array_key_exists('testPrune', $this->skippedTests) && !$this->createCachePool() instanceof PruneableInterface) {
|
||||||
|
$this->skippedTests['testPrune'] = 'Not a pruneable cache pool.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultLifeTime()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = $this->createCachePool(2);
|
||||||
|
|
||||||
|
$item = $cache->getItem('key.dlt');
|
||||||
|
$item->set('value');
|
||||||
|
$cache->save($item);
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
$item = $cache->getItem('key.dlt');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
$item = $cache->getItem('key.dlt');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testExpiration()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
$cache->save($cache->getItem('k1')->set('v1')->expiresAfter(2));
|
||||||
|
$cache->save($cache->getItem('k2')->set('v2')->expiresAfter(366 * 86400));
|
||||||
|
|
||||||
|
sleep(3);
|
||||||
|
$item = $cache->getItem('k1');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get(), "Item's value must be null when isHit() is false.");
|
||||||
|
|
||||||
|
$item = $cache->getItem('k2');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertSame('v2', $item->get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNotUnserializable()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $cache->getItem('foo');
|
||||||
|
$cache->save($item->set(new NotUnserializable()));
|
||||||
|
|
||||||
|
$item = $cache->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
foreach ($cache->getItems(['foo']) as $item) {
|
||||||
|
}
|
||||||
|
$cache->save($item->set(new NotUnserializable()));
|
||||||
|
|
||||||
|
foreach ($cache->getItems(['foo']) as $item) {
|
||||||
|
}
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPrune()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!method_exists($this, 'isPruned')) {
|
||||||
|
$this->fail('Test classes for pruneable caches must implement `isPruned($cache, $name)` method.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var PruneableInterface|CacheItemPoolInterface $cache */
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$doSet = function ($name, $value, \DateInterval $expiresAfter = null) use ($cache) {
|
||||||
|
$item = $cache->getItem($name);
|
||||||
|
$item->set($value);
|
||||||
|
|
||||||
|
if ($expiresAfter) {
|
||||||
|
$item->expiresAfter($expiresAfter);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache->save($item);
|
||||||
|
};
|
||||||
|
|
||||||
|
$doSet('foo', 'foo-val', new \DateInterval('PT05S'));
|
||||||
|
$doSet('bar', 'bar-val', new \DateInterval('PT10S'));
|
||||||
|
$doSet('baz', 'baz-val', new \DateInterval('PT15S'));
|
||||||
|
$doSet('qux', 'qux-val', new \DateInterval('PT20S'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
$doSet('foo', 'foo-val');
|
||||||
|
$doSet('bar', 'bar-val', new \DateInterval('PT20S'));
|
||||||
|
$doSet('baz', 'baz-val', new \DateInterval('PT40S'));
|
||||||
|
$doSet('qux', 'qux-val', new \DateInterval('PT80S'));
|
||||||
|
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'qux'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotUnserializable implements \Serializable
|
||||||
|
{
|
||||||
|
public function serialize()
|
||||||
|
{
|
||||||
|
return serialize(123);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unserialize($ser)
|
||||||
|
{
|
||||||
|
throw new \Exception(__CLASS__);
|
||||||
|
}
|
||||||
|
}
|
124
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ApcuAdapterTest.php
vendored
Normal file
124
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ApcuAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Psr\Log\NullLogger;
|
||||||
|
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
||||||
|
|
||||||
|
class ApcuAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testExpiration' => 'Testing expiration slows down the test suite',
|
||||||
|
'testHasItemReturnsFalseWhenDeferredItemIsExpired' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
if (!\function_exists('apcu_fetch') || !filter_var(ini_get('apc.enabled'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
$this->markTestSkipped('APCu extension is required.');
|
||||||
|
}
|
||||||
|
if ('cli' === \PHP_SAPI && !filter_var(ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
if ('testWithCliSapi' !== $this->getName()) {
|
||||||
|
$this->markTestSkipped('apc.enable_cli=1 is required.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
|
$this->markTestSkipped('Fails transiently on Windows.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ApcuAdapter(str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testUnserializable()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->set(function () {});
|
||||||
|
|
||||||
|
$this->assertFalse($pool->save($item));
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testVersion()
|
||||||
|
{
|
||||||
|
$namespace = str_replace('\\', '.', static::class);
|
||||||
|
|
||||||
|
$pool1 = new ApcuAdapter($namespace, 0, 'p1');
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertTrue($pool1->save($item->set('bar')));
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertSame('bar', $item->get());
|
||||||
|
|
||||||
|
$pool2 = new ApcuAdapter($namespace, 0, 'p2');
|
||||||
|
|
||||||
|
$item = $pool2->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get());
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNamespace()
|
||||||
|
{
|
||||||
|
$namespace = str_replace('\\', '.', static::class);
|
||||||
|
|
||||||
|
$pool1 = new ApcuAdapter($namespace.'_1', 0, 'p1');
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertTrue($pool1->save($item->set('bar')));
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertSame('bar', $item->get());
|
||||||
|
|
||||||
|
$pool2 = new ApcuAdapter($namespace.'_2', 0, 'p1');
|
||||||
|
|
||||||
|
$item = $pool2->getItem('foo');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get());
|
||||||
|
|
||||||
|
$item = $pool1->getItem('foo');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertSame('bar', $item->get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithCliSapi()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
// disable PHPUnit error handler to mimic a production environment
|
||||||
|
$isCalled = false;
|
||||||
|
set_error_handler(function () use (&$isCalled) {
|
||||||
|
$isCalled = true;
|
||||||
|
});
|
||||||
|
$pool = new ApcuAdapter(str_replace('\\', '.', __CLASS__));
|
||||||
|
$pool->setLogger(new NullLogger());
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->isHit();
|
||||||
|
$pool->save($item->set('bar'));
|
||||||
|
$this->assertFalse($isCalled);
|
||||||
|
} finally {
|
||||||
|
restore_error_handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
56
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ArrayAdapterTest.php
vendored
Normal file
56
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ArrayAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class ArrayAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testDeferredSaveWithoutCommit' => 'Assumes a shared cache which ArrayAdapter is not.',
|
||||||
|
'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayAdapter is not.',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ArrayAdapter($defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetValuesHitAndMiss()
|
||||||
|
{
|
||||||
|
/** @var ArrayAdapter $cache */
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
// Hit
|
||||||
|
$item = $cache->getItem('foo');
|
||||||
|
$item->set('4711');
|
||||||
|
$cache->save($item);
|
||||||
|
|
||||||
|
$fooItem = $cache->getItem('foo');
|
||||||
|
$this->assertTrue($fooItem->isHit());
|
||||||
|
$this->assertEquals('4711', $fooItem->get());
|
||||||
|
|
||||||
|
// Miss (should be present as NULL in $values)
|
||||||
|
$cache->getItem('bar');
|
||||||
|
|
||||||
|
$values = $cache->getValues();
|
||||||
|
|
||||||
|
$this->assertCount(2, $values);
|
||||||
|
$this->assertArrayHasKey('foo', $values);
|
||||||
|
$this->assertSame(serialize('4711'), $values['foo']);
|
||||||
|
$this->assertArrayHasKey('bar', $values);
|
||||||
|
$this->assertNull($values['bar']);
|
||||||
|
}
|
||||||
|
}
|
233
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ChainAdapterTest.php
vendored
Normal file
233
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ChainAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\ChainAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\PruneableInterface;
|
||||||
|
use Symfony\Component\Cache\Tests\Fixtures\ExternalAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class ChainAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ChainAdapter([new ArrayAdapter($defaultLifetime), new ExternalAdapter($defaultLifetime), new FilesystemAdapter('', $defaultLifetime)], $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmptyAdaptersException()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('At least one adapter must be specified.');
|
||||||
|
new ChainAdapter([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidAdapterException()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('The class "stdClass" does not implement');
|
||||||
|
new ChainAdapter([new \stdClass()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPrune()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = new ChainAdapter([
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
$this->getNonPruneableMock(),
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
]);
|
||||||
|
$this->assertTrue($cache->prune());
|
||||||
|
|
||||||
|
$cache = new ChainAdapter([
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
$this->getFailingPruneableMock(),
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
]);
|
||||||
|
$this->assertFalse($cache->prune());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMultipleCachesExpirationWhenCommonTtlIsNotSet()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$adapter1 = new ArrayAdapter(4);
|
||||||
|
$adapter2 = new ArrayAdapter(2);
|
||||||
|
|
||||||
|
$cache = new ChainAdapter([$adapter1, $adapter2]);
|
||||||
|
|
||||||
|
$cache->save($cache->getItem('key')->set('value'));
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
$adapter2->save($adapter2->getItem('key1')->set('value1'));
|
||||||
|
|
||||||
|
$item = $cache->getItem('key1');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value1', $item->get());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key1');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value1', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key1');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key1');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testMultipleCachesExpirationWhenCommonTtlIsSet()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$adapter1 = new ArrayAdapter(4);
|
||||||
|
$adapter2 = new ArrayAdapter(2);
|
||||||
|
|
||||||
|
$cache = new ChainAdapter([$adapter1, $adapter2], 6);
|
||||||
|
|
||||||
|
$cache->save($cache->getItem('key')->set('value'));
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
$adapter2->save($adapter2->getItem('key1')->set('value1'));
|
||||||
|
|
||||||
|
$item = $cache->getItem('key1');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value1', $item->get());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key1');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value1', $item->get());
|
||||||
|
|
||||||
|
$item = $adapter2->getItem('key1');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key1');
|
||||||
|
$this->assertTrue($item->isHit());
|
||||||
|
$this->assertEquals('value1', $item->get());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$item = $adapter1->getItem('key1');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(true);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getFailingPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(false);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|AdapterInterface
|
||||||
|
*/
|
||||||
|
private function getNonPruneableMock()
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->getMockBuilder(AdapterInterface::class)
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PruneableCacheInterface extends PruneableInterface, AdapterInterface
|
||||||
|
{
|
||||||
|
}
|
32
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/DoctrineAdapterTest.php
vendored
Normal file
32
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/DoctrineAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\DoctrineAdapter;
|
||||||
|
use Symfony\Component\Cache\Tests\Fixtures\ArrayCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class DoctrineAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testDeferredSaveWithoutCommit' => 'Assumes a shared cache which ArrayCache is not.',
|
||||||
|
'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayCache is not.',
|
||||||
|
'testNotUnserializable' => 'ArrayCache does not use serialize/unserialize',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new DoctrineAdapter(new ArrayCache($defaultLifetime), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
61
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/FilesystemAdapterTest.php
vendored
Normal file
61
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/FilesystemAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class FilesystemAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new FilesystemAdapter('', $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
self::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function rmdir($dir)
|
||||||
|
{
|
||||||
|
if (!file_exists($dir)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!$dir || 0 !== strpos(\dirname($dir), sys_get_temp_dir())) {
|
||||||
|
throw new \Exception(__METHOD__."() operates only on subdirs of system's temp dir");
|
||||||
|
}
|
||||||
|
$children = new \RecursiveIteratorIterator(
|
||||||
|
new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS),
|
||||||
|
\RecursiveIteratorIterator::CHILD_FIRST
|
||||||
|
);
|
||||||
|
foreach ($children as $child) {
|
||||||
|
if ($child->isDir()) {
|
||||||
|
rmdir($child);
|
||||||
|
} else {
|
||||||
|
unlink($child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rmdir($dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isPruned(CacheItemPoolInterface $cache, $name)
|
||||||
|
{
|
||||||
|
$getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile');
|
||||||
|
$getFileMethod->setAccessible(true);
|
||||||
|
|
||||||
|
return !file_exists($getFileMethod->invoke($cache, $name));
|
||||||
|
}
|
||||||
|
}
|
87
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/MaxIdLengthAdapterTest.php
vendored
Normal file
87
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/MaxIdLengthAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Cache\Adapter\AbstractAdapter;
|
||||||
|
|
||||||
|
class MaxIdLengthAdapterTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testLongKey()
|
||||||
|
{
|
||||||
|
$cache = $this->getMockBuilder(MaxIdLengthAdapter::class)
|
||||||
|
->setConstructorArgs([str_repeat('-', 10)])
|
||||||
|
->setMethods(['doHave', 'doFetch', 'doDelete', 'doSave', 'doClear'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$cache->expects($this->exactly(2))
|
||||||
|
->method('doHave')
|
||||||
|
->withConsecutive(
|
||||||
|
[$this->equalTo('----------:0GTYWa9n4ed8vqNlOT2iEr:')],
|
||||||
|
[$this->equalTo('----------:---------------------------------------')]
|
||||||
|
);
|
||||||
|
|
||||||
|
$cache->hasItem(str_repeat('-', 40));
|
||||||
|
$cache->hasItem(str_repeat('-', 39));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLongKeyVersioning()
|
||||||
|
{
|
||||||
|
$cache = $this->getMockBuilder(MaxIdLengthAdapter::class)
|
||||||
|
->setConstructorArgs([str_repeat('-', 26)])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$cache
|
||||||
|
->method('doFetch')
|
||||||
|
->willReturn(['2:']);
|
||||||
|
|
||||||
|
$reflectionClass = new \ReflectionClass(AbstractAdapter::class);
|
||||||
|
|
||||||
|
$reflectionMethod = $reflectionClass->getMethod('getId');
|
||||||
|
$reflectionMethod->setAccessible(true);
|
||||||
|
|
||||||
|
// No versioning enabled
|
||||||
|
$this->assertEquals('--------------------------:------------', $reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)]));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)])));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 23)])));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 40)])));
|
||||||
|
|
||||||
|
$reflectionProperty = $reflectionClass->getProperty('versioningIsEnabled');
|
||||||
|
$reflectionProperty->setAccessible(true);
|
||||||
|
$reflectionProperty->setValue($cache, true);
|
||||||
|
|
||||||
|
// Versioning enabled
|
||||||
|
$this->assertEquals('--------------------------:2:------------', $reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)]));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)])));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 23)])));
|
||||||
|
$this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 40)])));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTooLongNamespace()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Namespace must be 26 chars max, 40 given ("----------------------------------------")');
|
||||||
|
$this->getMockBuilder(MaxIdLengthAdapter::class)
|
||||||
|
->setConstructorArgs([str_repeat('-', 40)])
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class MaxIdLengthAdapter extends AbstractAdapter
|
||||||
|
{
|
||||||
|
protected $maxIdLength = 50;
|
||||||
|
|
||||||
|
public function __construct($ns)
|
||||||
|
{
|
||||||
|
parent::__construct($ns);
|
||||||
|
}
|
||||||
|
}
|
204
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/MemcachedAdapterTest.php
vendored
Normal file
204
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/MemcachedAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\AbstractAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
|
||||||
|
|
||||||
|
class MemcachedAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testHasItemReturnsFalseWhenDeferredItemIsExpired' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $client;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!MemcachedAdapter::isSupported()) {
|
||||||
|
self::markTestSkipped('Extension memcached >=2.2.0 required.');
|
||||||
|
}
|
||||||
|
self::$client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['binary_protocol' => false]);
|
||||||
|
self::$client->get('foo');
|
||||||
|
$code = self::$client->getResultCode();
|
||||||
|
|
||||||
|
if (\Memcached::RES_SUCCESS !== $code && \Memcached::RES_NOTFOUND !== $code) {
|
||||||
|
self::markTestSkipped('Memcached error: '.strtolower(self::$client->getResultMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
$client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST')) : self::$client;
|
||||||
|
|
||||||
|
return new MemcachedAdapter($client, str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOptions()
|
||||||
|
{
|
||||||
|
$client = MemcachedAdapter::createConnection([], [
|
||||||
|
'libketama_compatible' => false,
|
||||||
|
'distribution' => 'modula',
|
||||||
|
'compression' => true,
|
||||||
|
'serializer' => 'php',
|
||||||
|
'hash' => 'md5',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertSame(\Memcached::SERIALIZER_PHP, $client->getOption(\Memcached::OPT_SERIALIZER));
|
||||||
|
$this->assertSame(\Memcached::HASH_MD5, $client->getOption(\Memcached::OPT_HASH));
|
||||||
|
$this->assertTrue($client->getOption(\Memcached::OPT_COMPRESSION));
|
||||||
|
$this->assertSame(0, $client->getOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE));
|
||||||
|
$this->assertSame(\Memcached::DISTRIBUTION_MODULA, $client->getOption(\Memcached::OPT_DISTRIBUTION));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideBadOptions
|
||||||
|
*/
|
||||||
|
public function testBadOptions($name, $value)
|
||||||
|
{
|
||||||
|
if (\PHP_VERSION_ID < 80000) {
|
||||||
|
$this->expectException('ErrorException');
|
||||||
|
$this->expectExceptionMessage('constant(): Couldn\'t find constant Memcached::');
|
||||||
|
} else {
|
||||||
|
$this->expectException('Error');
|
||||||
|
$this->expectExceptionMessage('Undefined constant Memcached::');
|
||||||
|
}
|
||||||
|
|
||||||
|
MemcachedAdapter::createConnection([], [$name => $value]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideBadOptions()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['foo', 'bar'],
|
||||||
|
['hash', 'zyx'],
|
||||||
|
['serializer', 'zyx'],
|
||||||
|
['distribution', 'zyx'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultOptions()
|
||||||
|
{
|
||||||
|
$this->assertTrue(MemcachedAdapter::isSupported());
|
||||||
|
|
||||||
|
$client = MemcachedAdapter::createConnection([]);
|
||||||
|
|
||||||
|
$this->assertTrue($client->getOption(\Memcached::OPT_COMPRESSION));
|
||||||
|
$this->assertSame(1, $client->getOption(\Memcached::OPT_BINARY_PROTOCOL));
|
||||||
|
$this->assertSame(1, $client->getOption(\Memcached::OPT_TCP_NODELAY));
|
||||||
|
$this->assertSame(1, $client->getOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOptionSerializer()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\CacheException');
|
||||||
|
$this->expectExceptionMessage('MemcachedAdapter: "serializer" option must be "php" or "igbinary".');
|
||||||
|
if (!\Memcached::HAVE_JSON) {
|
||||||
|
$this->markTestSkipped('Memcached::HAVE_JSON required');
|
||||||
|
}
|
||||||
|
|
||||||
|
new MemcachedAdapter(MemcachedAdapter::createConnection([], ['serializer' => 'json']));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideServersSetting
|
||||||
|
*/
|
||||||
|
public function testServersSetting($dsn, $host, $port)
|
||||||
|
{
|
||||||
|
$client1 = MemcachedAdapter::createConnection($dsn);
|
||||||
|
$client2 = MemcachedAdapter::createConnection([$dsn]);
|
||||||
|
$client3 = MemcachedAdapter::createConnection([[$host, $port]]);
|
||||||
|
$expect = [
|
||||||
|
'host' => $host,
|
||||||
|
'port' => $port,
|
||||||
|
];
|
||||||
|
|
||||||
|
$f = function ($s) { return ['host' => $s['host'], 'port' => $s['port']]; };
|
||||||
|
$this->assertSame([$expect], array_map($f, $client1->getServerList()));
|
||||||
|
$this->assertSame([$expect], array_map($f, $client2->getServerList()));
|
||||||
|
$this->assertSame([$expect], array_map($f, $client3->getServerList()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideServersSetting()
|
||||||
|
{
|
||||||
|
yield [
|
||||||
|
'memcached://127.0.0.1/50',
|
||||||
|
'127.0.0.1',
|
||||||
|
11211,
|
||||||
|
];
|
||||||
|
yield [
|
||||||
|
'memcached://localhost:11222?weight=25',
|
||||||
|
'localhost',
|
||||||
|
11222,
|
||||||
|
];
|
||||||
|
if (filter_var(ini_get('memcached.use_sasl'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
yield [
|
||||||
|
'memcached://user:password@127.0.0.1?weight=50',
|
||||||
|
'127.0.0.1',
|
||||||
|
11211,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
yield [
|
||||||
|
'memcached:///var/run/memcached.sock?weight=25',
|
||||||
|
'/var/run/memcached.sock',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
yield [
|
||||||
|
'memcached:///var/local/run/memcached.socket?weight=25',
|
||||||
|
'/var/local/run/memcached.socket',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
if (filter_var(ini_get('memcached.use_sasl'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
yield [
|
||||||
|
'memcached://user:password@/var/local/run/memcached.socket?weight=25',
|
||||||
|
'/var/local/run/memcached.socket',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideDsnWithOptions
|
||||||
|
*/
|
||||||
|
public function testDsnWithOptions($dsn, array $options, array $expectedOptions)
|
||||||
|
{
|
||||||
|
$client = MemcachedAdapter::createConnection($dsn, $options);
|
||||||
|
|
||||||
|
foreach ($expectedOptions as $option => $expect) {
|
||||||
|
$this->assertSame($expect, $client->getOption($option));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideDsnWithOptions()
|
||||||
|
{
|
||||||
|
if (!class_exists('\Memcached')) {
|
||||||
|
self::markTestSkipped('Extension memcached required.');
|
||||||
|
}
|
||||||
|
|
||||||
|
yield [
|
||||||
|
'memcached://localhost:11222?retry_timeout=10',
|
||||||
|
[\Memcached::OPT_RETRY_TIMEOUT => 8],
|
||||||
|
[\Memcached::OPT_RETRY_TIMEOUT => 10],
|
||||||
|
];
|
||||||
|
yield [
|
||||||
|
'memcached://localhost:11222?socket_recv_size=1&socket_send_size=2',
|
||||||
|
[\Memcached::OPT_RETRY_TIMEOUT => 8],
|
||||||
|
[\Memcached::OPT_SOCKET_RECV_SIZE => 1, \Memcached::OPT_SOCKET_SEND_SIZE => 2, \Memcached::OPT_RETRY_TIMEOUT => 8],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testClear()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->clear());
|
||||||
|
}
|
||||||
|
}
|
26
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/NamespacedProxyAdapterTest.php
vendored
Normal file
26
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/NamespacedProxyAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class NamespacedProxyAdapterTest extends ProxyAdapterTest
|
||||||
|
{
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ProxyAdapter(new ArrayAdapter($defaultLifetime), 'foo', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
128
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/NullAdapterTest.php
vendored
Normal file
128
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/NullAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\NullAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class NullAdapterTest extends TestCase
|
||||||
|
{
|
||||||
|
public function createCachePool()
|
||||||
|
{
|
||||||
|
return new NullAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItem()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $adapter->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItem()
|
||||||
|
{
|
||||||
|
$this->assertFalse($this->createCachePool()->hasItem('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItems()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$keys = ['foo', 'bar', 'baz', 'biz'];
|
||||||
|
|
||||||
|
/** @var CacheItemInterface[] $items */
|
||||||
|
$items = $adapter->getItems($keys);
|
||||||
|
$count = 0;
|
||||||
|
|
||||||
|
foreach ($items as $key => $item) {
|
||||||
|
$itemKey = $item->getKey();
|
||||||
|
|
||||||
|
$this->assertEquals($itemKey, $key, 'Keys must be preserved when fetching multiple items');
|
||||||
|
$this->assertContains($key, $keys, 'Cache key can not change.');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
// Remove $key for $keys
|
||||||
|
foreach ($keys as $k => $v) {
|
||||||
|
if ($v === $key) {
|
||||||
|
unset($keys[$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++$count;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertSame(4, $count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIsHit()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $adapter->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testClear()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->clear());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteItem()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->deleteItem('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteItems()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->deleteItems(['key', 'foo', 'bar']));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSave()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $adapter->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
|
||||||
|
|
||||||
|
$this->assertFalse($adapter->save($item));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeferredSave()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $adapter->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
|
||||||
|
|
||||||
|
$this->assertFalse($adapter->saveDeferred($item));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCommit()
|
||||||
|
{
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $adapter->getItem('key');
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
$this->assertNull($item->get(), "Item's value must be null when isHit is false.");
|
||||||
|
|
||||||
|
$this->assertFalse($adapter->saveDeferred($item));
|
||||||
|
$this->assertFalse($this->createCachePool()->commit());
|
||||||
|
}
|
||||||
|
}
|
73
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PdoAdapterTest.php
vendored
Normal file
73
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PdoAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
||||||
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PdoAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
use PdoPruneableTrait;
|
||||||
|
|
||||||
|
protected static $dbFile;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('pdo_sqlite')) {
|
||||||
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
|
|
||||||
|
$pool = new PdoAdapter('sqlite:'.self::$dbFile);
|
||||||
|
$pool->createTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
@unlink(self::$dbFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PdoAdapter('sqlite:'.self::$dbFile, 'ns', $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCleanupExpiredItems()
|
||||||
|
{
|
||||||
|
$pdo = new \PDO('sqlite:'.self::$dbFile);
|
||||||
|
|
||||||
|
$getCacheItemCount = function () use ($pdo) {
|
||||||
|
return (int) $pdo->query('SELECT COUNT(*) FROM cache_items')->fetch(\PDO::FETCH_COLUMN);
|
||||||
|
};
|
||||||
|
|
||||||
|
$this->assertSame(0, $getCacheItemCount());
|
||||||
|
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$item = $cache->getItem('some_nice_key');
|
||||||
|
$item->expiresAfter(1);
|
||||||
|
$item->set(1);
|
||||||
|
|
||||||
|
$cache->save($item);
|
||||||
|
$this->assertSame(1, $getCacheItemCount());
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
$newItem = $cache->getItem($item->getKey());
|
||||||
|
$this->assertFalse($newItem->isHit());
|
||||||
|
$this->assertSame(0, $getCacheItemCount(), 'PDOAdapter must clean up expired items');
|
||||||
|
}
|
||||||
|
}
|
48
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PdoDbalAdapterTest.php
vendored
Normal file
48
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PdoDbalAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\DriverManager;
|
||||||
|
use Symfony\Component\Cache\Adapter\PdoAdapter;
|
||||||
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PdoDbalAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
use PdoPruneableTrait;
|
||||||
|
|
||||||
|
protected static $dbFile;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('pdo_sqlite')) {
|
||||||
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
|
|
||||||
|
$pool = new PdoAdapter(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]));
|
||||||
|
$pool->createTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
@unlink(self::$dbFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PdoAdapter(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
135
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpArrayAdapterTest.php
vendored
Normal file
135
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpArrayAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\NullAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpArrayAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testBasicUsage' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testBasicUsageWithLongKey' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testClear' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testClearWithDeferredItems' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testDeleteItem' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testSaveExpired' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testSaveWithoutExpire' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testDeferredSave' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testDeferredSaveWithoutCommit' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testDeleteItems' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testDeleteDeferredItem' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testCommit' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testSaveDeferredWhenChangingValues' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testSaveDeferredOverwrite' => 'PhpArrayAdapter is read-only.',
|
||||||
|
'testIsHitDeferred' => 'PhpArrayAdapter is read-only.',
|
||||||
|
|
||||||
|
'testExpiresAt' => 'PhpArrayAdapter does not support expiration.',
|
||||||
|
'testExpiresAtWithNull' => 'PhpArrayAdapter does not support expiration.',
|
||||||
|
'testExpiresAfterWithNull' => 'PhpArrayAdapter does not support expiration.',
|
||||||
|
'testDeferredExpired' => 'PhpArrayAdapter does not support expiration.',
|
||||||
|
'testExpiration' => 'PhpArrayAdapter does not support expiration.',
|
||||||
|
|
||||||
|
'testGetItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testGetItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testHasItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testDeleteItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testDeleteItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
|
||||||
|
'testDefaultLifeTime' => 'PhpArrayAdapter does not allow configuring a default lifetime.',
|
||||||
|
'testPrune' => 'PhpArrayAdapter just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $file;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
self::$file = sys_get_temp_dir().'/symfony-cache/php-array-adapter-test.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
$this->createCachePool()->clear();
|
||||||
|
|
||||||
|
if (file_exists(sys_get_temp_dir().'/symfony-cache')) {
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool()
|
||||||
|
{
|
||||||
|
return new PhpArrayAdapterWrapper(self::$file, new NullAdapter());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStore()
|
||||||
|
{
|
||||||
|
$arrayWithRefs = [];
|
||||||
|
$arrayWithRefs[0] = 123;
|
||||||
|
$arrayWithRefs[1] = &$arrayWithRefs[0];
|
||||||
|
|
||||||
|
$object = (object) [
|
||||||
|
'foo' => 'bar',
|
||||||
|
'foo2' => 'bar2',
|
||||||
|
];
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'null' => null,
|
||||||
|
'serializedString' => serialize($object),
|
||||||
|
'arrayWithRefs' => $arrayWithRefs,
|
||||||
|
'object' => $object,
|
||||||
|
'arrayWithObject' => ['bar' => $object],
|
||||||
|
];
|
||||||
|
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
$adapter->warmUp($expected);
|
||||||
|
|
||||||
|
foreach ($expected as $key => $value) {
|
||||||
|
$this->assertSame(serialize($value), serialize($adapter->getItem($key)->get()), 'Warm up should create a PHP file that OPCache can load in memory');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStoredFile()
|
||||||
|
{
|
||||||
|
$expected = [
|
||||||
|
'integer' => 42,
|
||||||
|
'float' => 42.42,
|
||||||
|
'boolean' => true,
|
||||||
|
'array_simple' => ['foo', 'bar'],
|
||||||
|
'array_associative' => ['foo' => 'bar', 'foo2' => 'bar2'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$adapter = $this->createCachePool();
|
||||||
|
$adapter->warmUp($expected);
|
||||||
|
|
||||||
|
$values = eval(substr(file_get_contents(self::$file), 6));
|
||||||
|
|
||||||
|
$this->assertSame($expected, $values, 'Warm up should create a PHP file that OPCache can load in memory');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PhpArrayAdapterWrapper extends PhpArrayAdapter
|
||||||
|
{
|
||||||
|
public function save(CacheItemInterface $item)
|
||||||
|
{
|
||||||
|
\call_user_func(\Closure::bind(function () use ($item) {
|
||||||
|
$this->values[$item->getKey()] = $item->get();
|
||||||
|
$this->warmUp($this->values);
|
||||||
|
$this->values = eval(substr(file_get_contents($this->file), 6));
|
||||||
|
}, $this, PhpArrayAdapter::class));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
51
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php
vendored
Normal file
51
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpArrayAdapterWithFallbackTest.php
vendored
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpArrayAdapterWithFallbackTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testGetItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testGetItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testHasItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testDeleteItemInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testDeleteItemsInvalidKeys' => 'PhpArrayAdapter does not throw exceptions on invalid key.',
|
||||||
|
'testPrune' => 'PhpArrayAdapter just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $file;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
self::$file = sys_get_temp_dir().'/symfony-cache/php-array-adapter-test.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
$this->createCachePool()->clear();
|
||||||
|
|
||||||
|
if (file_exists(sys_get_temp_dir().'/symfony-cache')) {
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PhpArrayAdapter(self::$file, new FilesystemAdapter('php-array-fallback', $defaultLifetime));
|
||||||
|
}
|
||||||
|
}
|
47
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpFilesAdapterTest.php
vendored
Normal file
47
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PhpFilesAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\PhpFilesAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpFilesAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testDefaultLifeTime' => 'PhpFilesAdapter does not allow configuring a default lifetime.',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool()
|
||||||
|
{
|
||||||
|
if (!PhpFilesAdapter::isSupported()) {
|
||||||
|
$this->markTestSkipped('OPcache extension is not enabled.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PhpFilesAdapter('sf-cache');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isPruned(CacheItemPoolInterface $cache, $name)
|
||||||
|
{
|
||||||
|
$getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile');
|
||||||
|
$getFileMethod->setAccessible(true);
|
||||||
|
|
||||||
|
return !file_exists($getFileMethod->invoke($cache, $name));
|
||||||
|
}
|
||||||
|
}
|
53
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisAdapterTest.php
vendored
Normal file
53
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Predis\Connection\StreamConnection;
|
||||||
|
use Symfony\Component\Cache\Adapter\RedisAdapter;
|
||||||
|
|
||||||
|
class PredisAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setUpBeforeClass();
|
||||||
|
self::$redis = new \Predis\Client(['host' => getenv('REDIS_HOST')]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateConnection()
|
||||||
|
{
|
||||||
|
$redisHost = getenv('REDIS_HOST');
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'/1', ['class' => \Predis\Client::class, 'timeout' => 3]);
|
||||||
|
$this->assertInstanceOf(\Predis\Client::class, $redis);
|
||||||
|
|
||||||
|
$connection = $redis->getConnection();
|
||||||
|
$this->assertInstanceOf(StreamConnection::class, $connection);
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
'scheme' => 'tcp',
|
||||||
|
'host' => $redisHost,
|
||||||
|
'path' => '',
|
||||||
|
'dbindex' => '1',
|
||||||
|
'port' => 6379,
|
||||||
|
'class' => 'Predis\Client',
|
||||||
|
'timeout' => 3,
|
||||||
|
'persistent' => 0,
|
||||||
|
'persistent_id' => null,
|
||||||
|
'read_timeout' => 0,
|
||||||
|
'retry_interval' => 0,
|
||||||
|
'lazy' => false,
|
||||||
|
'database' => '1',
|
||||||
|
'password' => null,
|
||||||
|
];
|
||||||
|
$this->assertSame($params, $connection->getParameters()->toArray());
|
||||||
|
}
|
||||||
|
}
|
26
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisClusterAdapterTest.php
vendored
Normal file
26
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisClusterAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
class PredisClusterAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setUpBeforeClass();
|
||||||
|
self::$redis = new \Predis\Client([['host' => getenv('REDIS_HOST')]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
self::$redis = null;
|
||||||
|
}
|
||||||
|
}
|
28
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisRedisClusterAdapterTest.php
vendored
Normal file
28
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/PredisRedisClusterAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
class PredisRedisClusterAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!$hosts = getenv('REDIS_CLUSTER_HOSTS')) {
|
||||||
|
self::markTestSkipped('REDIS_CLUSTER_HOSTS env var is not defined.');
|
||||||
|
}
|
||||||
|
self::$redis = new \Predis\Client(explode(' ', $hosts), ['cluster' => 'redis']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
self::$redis = null;
|
||||||
|
}
|
||||||
|
}
|
69
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ProxyAdapterTest.php
vendored
Normal file
69
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/ProxyAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
||||||
|
use Symfony\Component\Cache\CacheItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class ProxyAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testDeferredSaveWithoutCommit' => 'Assumes a shared cache which ArrayAdapter is not.',
|
||||||
|
'testSaveWithoutExpire' => 'Assumes a shared cache which ArrayAdapter is not.',
|
||||||
|
'testPrune' => 'ProxyAdapter just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ProxyAdapter(new ArrayAdapter(), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testProxyfiedItem()
|
||||||
|
{
|
||||||
|
$this->expectException('Exception');
|
||||||
|
$this->expectExceptionMessage('OK bar');
|
||||||
|
$item = new CacheItem();
|
||||||
|
$pool = new ProxyAdapter(new TestingArrayAdapter($item));
|
||||||
|
|
||||||
|
$proxyItem = $pool->getItem('foo');
|
||||||
|
|
||||||
|
$this->assertNotSame($item, $proxyItem);
|
||||||
|
$pool->save($proxyItem->set('bar'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestingArrayAdapter extends ArrayAdapter
|
||||||
|
{
|
||||||
|
private $item;
|
||||||
|
|
||||||
|
public function __construct(CacheItemInterface $item)
|
||||||
|
{
|
||||||
|
$this->item = $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItem($key)
|
||||||
|
{
|
||||||
|
return $this->item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save(CacheItemInterface $item)
|
||||||
|
{
|
||||||
|
if ($item === $this->item) {
|
||||||
|
throw new \Exception('OK '.$item->get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
92
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisAdapterTest.php
vendored
Normal file
92
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\AbstractAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\RedisAdapter;
|
||||||
|
use Symfony\Component\Cache\Traits\RedisProxy;
|
||||||
|
|
||||||
|
class RedisAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setUpBeforeClass();
|
||||||
|
self::$redis = AbstractAdapter::createConnection('redis://'.getenv('REDIS_HOST'), ['lazy' => true]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
$adapter = parent::createCachePool($defaultLifetime);
|
||||||
|
$this->assertInstanceOf(RedisProxy::class, self::$redis);
|
||||||
|
|
||||||
|
return $adapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateConnection()
|
||||||
|
{
|
||||||
|
$redisHost = getenv('REDIS_HOST');
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost);
|
||||||
|
$this->assertInstanceOf(\Redis::class, $redis);
|
||||||
|
$this->assertTrue($redis->isConnected());
|
||||||
|
$this->assertSame(0, $redis->getDbNum());
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'/2');
|
||||||
|
$this->assertSame(2, $redis->getDbNum());
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['timeout' => 3]);
|
||||||
|
$this->assertEquals(3, $redis->getTimeout());
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'?timeout=4');
|
||||||
|
$this->assertEquals(4, $redis->getTimeout());
|
||||||
|
|
||||||
|
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['read_timeout' => 5]);
|
||||||
|
$this->assertEquals(5, $redis->getReadTimeout());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideFailedCreateConnection
|
||||||
|
*/
|
||||||
|
public function testFailedCreateConnection($dsn)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Redis connection ');
|
||||||
|
RedisAdapter::createConnection($dsn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideFailedCreateConnection()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['redis://localhost:1234'],
|
||||||
|
['redis://foo@localhost'],
|
||||||
|
['redis://localhost/123'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideInvalidCreateConnection
|
||||||
|
*/
|
||||||
|
public function testInvalidCreateConnection($dsn)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Invalid Redis DSN');
|
||||||
|
RedisAdapter::createConnection($dsn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideInvalidCreateConnection()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['foo://localhost'],
|
||||||
|
['redis://'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
24
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisArrayAdapterTest.php
vendored
Normal file
24
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisArrayAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
class RedisArrayAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setupBeforeClass();
|
||||||
|
if (!class_exists('RedisArray')) {
|
||||||
|
self::markTestSkipped('The RedisArray class is required.');
|
||||||
|
}
|
||||||
|
self::$redis = new \RedisArray([getenv('REDIS_HOST')], ['lazy_connect' => true]);
|
||||||
|
}
|
||||||
|
}
|
27
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisClusterAdapterTest.php
vendored
Normal file
27
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/RedisClusterAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
class RedisClusterAdapterTest extends AbstractRedisAdapterTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!class_exists('RedisCluster')) {
|
||||||
|
self::markTestSkipped('The RedisCluster class is required.');
|
||||||
|
}
|
||||||
|
if (!$hosts = getenv('REDIS_CLUSTER_HOSTS')) {
|
||||||
|
self::markTestSkipped('REDIS_CLUSTER_HOSTS env var is not defined.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$redis = new \RedisCluster(null, explode(' ', $hosts));
|
||||||
|
}
|
||||||
|
}
|
41
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/SimpleCacheAdapterTest.php
vendored
Normal file
41
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/SimpleCacheAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\SimpleCacheAdapter;
|
||||||
|
use Symfony\Component\Cache\Simple\ArrayCache;
|
||||||
|
use Symfony\Component\Cache\Simple\FilesystemCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class SimpleCacheAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testPrune' => 'SimpleCache just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new SimpleCacheAdapter(new FilesystemCache(), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testValidCacheKeyWithNamespace()
|
||||||
|
{
|
||||||
|
$cache = new SimpleCacheAdapter(new ArrayCache(), 'some_namespace', 0);
|
||||||
|
$item = $cache->getItem('my_key');
|
||||||
|
$item->set('someValue');
|
||||||
|
$cache->save($item);
|
||||||
|
|
||||||
|
$this->assertTrue($cache->getItem('my_key')->isHit(), 'Stored item is successfully retrieved.');
|
||||||
|
}
|
||||||
|
}
|
338
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TagAwareAdapterTest.php
vendored
Normal file
338
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TagAwareAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,338 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\AdapterInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class TagAwareAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new TagAwareAdapter(new FilesystemAdapter('', $defaultLifetime));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidTag()
|
||||||
|
{
|
||||||
|
$this->expectException('Psr\Cache\InvalidArgumentException');
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->tag(':');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidateTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$i0 = $pool->getItem('i0');
|
||||||
|
$i1 = $pool->getItem('i1');
|
||||||
|
$i2 = $pool->getItem('i2');
|
||||||
|
$i3 = $pool->getItem('i3');
|
||||||
|
$foo = $pool->getItem('foo');
|
||||||
|
|
||||||
|
$pool->save($i0->tag('bar'));
|
||||||
|
$pool->save($i1->tag('foo'));
|
||||||
|
$pool->save($i2->tag('foo')->tag('bar'));
|
||||||
|
$pool->save($i3->tag('foo')->tag('baz'));
|
||||||
|
$pool->save($foo);
|
||||||
|
|
||||||
|
$pool->invalidateTags(['bar']);
|
||||||
|
|
||||||
|
$this->assertFalse($pool->getItem('i0')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('i1')->isHit());
|
||||||
|
$this->assertFalse($pool->getItem('i2')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('i3')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
$pool->invalidateTags(['foo']);
|
||||||
|
|
||||||
|
$this->assertFalse($pool->getItem('i1')->isHit());
|
||||||
|
$this->assertFalse($pool->getItem('i3')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
$anotherPoolInstance = $this->createCachePool();
|
||||||
|
|
||||||
|
$this->assertFalse($anotherPoolInstance->getItem('i1')->isHit());
|
||||||
|
$this->assertFalse($anotherPoolInstance->getItem('i3')->isHit());
|
||||||
|
$this->assertTrue($anotherPoolInstance->getItem('foo')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidateCommits()
|
||||||
|
{
|
||||||
|
$pool1 = $this->createCachePool();
|
||||||
|
|
||||||
|
$foo = $pool1->getItem('foo');
|
||||||
|
$foo->tag('tag');
|
||||||
|
|
||||||
|
$pool1->saveDeferred($foo->set('foo'));
|
||||||
|
$pool1->invalidateTags(['tag']);
|
||||||
|
|
||||||
|
$pool2 = $this->createCachePool();
|
||||||
|
$foo = $pool2->getItem('foo');
|
||||||
|
|
||||||
|
$this->assertTrue($foo->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTagsAreCleanedOnSave()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$i = $pool->getItem('k');
|
||||||
|
$pool->save($i->tag('foo'));
|
||||||
|
|
||||||
|
$i = $pool->getItem('k');
|
||||||
|
$pool->save($i->tag('bar'));
|
||||||
|
|
||||||
|
$pool->invalidateTags(['foo']);
|
||||||
|
$this->assertTrue($pool->getItem('k')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTagsAreCleanedOnDelete()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$i = $pool->getItem('k');
|
||||||
|
$pool->save($i->tag('foo'));
|
||||||
|
$pool->deleteItem('k');
|
||||||
|
|
||||||
|
$pool->save($pool->getItem('k'));
|
||||||
|
$pool->invalidateTags(['foo']);
|
||||||
|
|
||||||
|
$this->assertTrue($pool->getItem('k')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTagItemExpiry()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool(10);
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->tag(['baz']);
|
||||||
|
$item->expiresAfter(100);
|
||||||
|
|
||||||
|
$pool->save($item);
|
||||||
|
$pool->invalidateTags(['baz']);
|
||||||
|
$this->assertFalse($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
sleep(20);
|
||||||
|
|
||||||
|
$this->assertFalse($pool->getItem('foo')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetPreviousTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$i = $pool->getItem('k');
|
||||||
|
$pool->save($i->tag('foo'));
|
||||||
|
|
||||||
|
$i = $pool->getItem('k');
|
||||||
|
$this->assertSame(['foo' => 'foo'], $i->getPreviousTags());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPrune()
|
||||||
|
{
|
||||||
|
$cache = new TagAwareAdapter($this->getPruneableMock());
|
||||||
|
$this->assertTrue($cache->prune());
|
||||||
|
|
||||||
|
$cache = new TagAwareAdapter($this->getNonPruneableMock());
|
||||||
|
$this->assertFalse($cache->prune());
|
||||||
|
|
||||||
|
$cache = new TagAwareAdapter($this->getFailingPruneableMock());
|
||||||
|
$this->assertFalse($cache->prune());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testKnownTagVersionsTtl()
|
||||||
|
{
|
||||||
|
$itemsPool = new FilesystemAdapter('', 10);
|
||||||
|
$tagsPool = $this
|
||||||
|
->getMockBuilder(AdapterInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pool = new TagAwareAdapter($itemsPool, $tagsPool, 10);
|
||||||
|
|
||||||
|
$item = $pool->getItem('foo');
|
||||||
|
$item->tag(['baz']);
|
||||||
|
$item->expiresAfter(100);
|
||||||
|
|
||||||
|
$tag = $this->getMockBuilder(CacheItemInterface::class)->getMock();
|
||||||
|
$tag->expects(self::exactly(2))->method('get')->willReturn(10);
|
||||||
|
|
||||||
|
$tagsPool->expects(self::exactly(2))->method('getItems')->willReturn([
|
||||||
|
'baz'.TagAwareAdapter::TAGS_PREFIX => $tag,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$pool->save($item);
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
sleep(20);
|
||||||
|
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
sleep(5);
|
||||||
|
|
||||||
|
$this->assertTrue($pool->getItem('foo')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTagEntryIsCreatedForItemWithoutTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$this->assertTrue($adapter->hasItem(TagAwareAdapter::TAGS_PREFIX.$itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemReturnsFalseWhenPoolDoesNotHaveItemTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem(TagAwareAdapter::TAGS_PREFIX.$itemKey); //simulate item losing tags pair
|
||||||
|
|
||||||
|
$this->assertFalse($anotherPool->hasItem($itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemReturnsCacheMissWhenPoolDoesNotHaveItemTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem(TagAwareAdapter::TAGS_PREFIX.$itemKey); //simulate item losing tags pair
|
||||||
|
|
||||||
|
$item = $anotherPool->getItem($itemKey);
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemReturnsFalseWhenPoolDoesNotHaveItemAndOnlyHasTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem($itemKey); //simulate losing item but keeping tags
|
||||||
|
|
||||||
|
$this->assertFalse($anotherPool->hasItem($itemKey));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidateTagsWithArrayAdapter()
|
||||||
|
{
|
||||||
|
$adapter = new TagAwareAdapter(new ArrayAdapter());
|
||||||
|
|
||||||
|
$item = $adapter->getItem('foo');
|
||||||
|
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
|
||||||
|
$item->tag('bar');
|
||||||
|
$item->expiresAfter(100);
|
||||||
|
$adapter->save($item);
|
||||||
|
|
||||||
|
$this->assertTrue($adapter->getItem('foo')->isHit());
|
||||||
|
|
||||||
|
$adapter->invalidateTags(['bar']);
|
||||||
|
|
||||||
|
$this->assertFalse($adapter->getItem('foo')->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemReturnsCacheMissWhenPoolDoesNotHaveItemAndOnlyHasTags()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
|
||||||
|
$itemKey = 'foo';
|
||||||
|
$item = $pool->getItem($itemKey);
|
||||||
|
$pool->save($item);
|
||||||
|
|
||||||
|
$anotherPool = $this->createCachePool();
|
||||||
|
|
||||||
|
$adapter = new FilesystemAdapter();
|
||||||
|
$adapter->deleteItem($itemKey); //simulate losing item but keeping tags
|
||||||
|
|
||||||
|
$item = $anotherPool->getItem($itemKey);
|
||||||
|
$this->assertFalse($item->isHit());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(true);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getFailingPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(false);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|AdapterInterface
|
||||||
|
*/
|
||||||
|
private function getNonPruneableMock()
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->getMockBuilder(AdapterInterface::class)
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
||||||
|
use Symfony\Component\Cache\Tests\Fixtures\ExternalAdapter;
|
||||||
|
|
||||||
|
class TagAwareAndProxyAdapterIntegrationTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @dataProvider dataProvider
|
||||||
|
*/
|
||||||
|
public function testIntegrationUsingProxiedAdapter(CacheItemPoolInterface $proxiedAdapter)
|
||||||
|
{
|
||||||
|
$cache = new TagAwareAdapter(new ProxyAdapter($proxiedAdapter));
|
||||||
|
|
||||||
|
$item = $cache->getItem('foo');
|
||||||
|
$item->tag(['tag1', 'tag2']);
|
||||||
|
$item->set('bar');
|
||||||
|
$cache->save($item);
|
||||||
|
|
||||||
|
$this->assertSame('bar', $cache->getItem('foo')->get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataProvider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[new ArrayAdapter()],
|
||||||
|
// also testing with a non-AdapterInterface implementation
|
||||||
|
// because the ProxyAdapter behaves slightly different for those
|
||||||
|
[new ExternalAdapter()],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
191
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TraceableAdapterTest.php
vendored
Normal file
191
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TraceableAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TraceableAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class TraceableAdapterTest extends AdapterTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testPrune' => 'TraceableAdapter just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createCachePool($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new TraceableAdapter(new FilesystemAdapter('', $defaultLifetime));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$pool->getItem('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('getItem', $call->name);
|
||||||
|
$this->assertSame(['k' => false], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(1, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemHitTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$item = $pool->getItem('k')->set('foo');
|
||||||
|
$pool->save($item);
|
||||||
|
$pool->getItem('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(3, $calls);
|
||||||
|
|
||||||
|
$call = $calls[2];
|
||||||
|
$this->assertSame(1, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItemsMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$arg = ['k0', 'k1'];
|
||||||
|
$items = $pool->getItems($arg);
|
||||||
|
foreach ($items as $item) {
|
||||||
|
}
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('getItems', $call->name);
|
||||||
|
$this->assertSame(['k0' => false, 'k1' => false], $call->result);
|
||||||
|
$this->assertSame(2, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$pool->hasItem('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('hasItem', $call->name);
|
||||||
|
$this->assertSame(['k' => false], $call->result);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasItemHitTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$item = $pool->getItem('k')->set('foo');
|
||||||
|
$pool->save($item);
|
||||||
|
$pool->hasItem('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(3, $calls);
|
||||||
|
|
||||||
|
$call = $calls[2];
|
||||||
|
$this->assertSame('hasItem', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteItemTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$pool->deleteItem('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('deleteItem', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteItemsTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$arg = ['k0', 'k1'];
|
||||||
|
$pool->deleteItems($arg);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('deleteItems', $call->name);
|
||||||
|
$this->assertSame(['keys' => $arg, 'result' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSaveTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$item = $pool->getItem('k')->set('foo');
|
||||||
|
$pool->save($item);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(2, $calls);
|
||||||
|
|
||||||
|
$call = $calls[1];
|
||||||
|
$this->assertSame('save', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSaveDeferredTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$item = $pool->getItem('k')->set('foo');
|
||||||
|
$pool->saveDeferred($item);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(2, $calls);
|
||||||
|
|
||||||
|
$call = $calls[1];
|
||||||
|
$this->assertSame('saveDeferred', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCommitTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createCachePool();
|
||||||
|
$pool->commit();
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('commit', $call->name);
|
||||||
|
$this->assertTrue($call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
}
|
37
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TraceableTagAwareAdapterTest.php
vendored
Normal file
37
advancedcontentfilter/vendor/symfony/cache/Tests/Adapter/TraceableTagAwareAdapterTest.php
vendored
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Adapter;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class TraceableTagAwareAdapterTest extends TraceableAdapterTest
|
||||||
|
{
|
||||||
|
public function testInvalidateTags()
|
||||||
|
{
|
||||||
|
$pool = new TraceableTagAwareAdapter(new TagAwareAdapter(new FilesystemAdapter()));
|
||||||
|
$pool->invalidateTags(['foo']);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('invalidateTags', $call->name);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
}
|
77
advancedcontentfilter/vendor/symfony/cache/Tests/CacheItemTest.php
vendored
Normal file
77
advancedcontentfilter/vendor/symfony/cache/Tests/CacheItemTest.php
vendored
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Cache\CacheItem;
|
||||||
|
|
||||||
|
class CacheItemTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testValidKey()
|
||||||
|
{
|
||||||
|
$this->assertSame('foo', CacheItem::validateKey('foo'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideInvalidKey
|
||||||
|
*/
|
||||||
|
public function testInvalidKey($key)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Cache key');
|
||||||
|
CacheItem::validateKey($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideInvalidKey()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[''],
|
||||||
|
['{'],
|
||||||
|
['}'],
|
||||||
|
['('],
|
||||||
|
[')'],
|
||||||
|
['/'],
|
||||||
|
['\\'],
|
||||||
|
['@'],
|
||||||
|
[':'],
|
||||||
|
[true],
|
||||||
|
[null],
|
||||||
|
[1],
|
||||||
|
[1.1],
|
||||||
|
[[[]]],
|
||||||
|
[new \Exception('foo')],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTag()
|
||||||
|
{
|
||||||
|
$item = new CacheItem();
|
||||||
|
|
||||||
|
$this->assertSame($item, $item->tag('foo'));
|
||||||
|
$this->assertSame($item, $item->tag(['bar', 'baz']));
|
||||||
|
|
||||||
|
\call_user_func(\Closure::bind(function () use ($item) {
|
||||||
|
$this->assertSame(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'], $item->tags);
|
||||||
|
}, $this, CacheItem::class));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideInvalidKey
|
||||||
|
*/
|
||||||
|
public function testInvalidTag($tag)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Cache tag');
|
||||||
|
$item = new CacheItem();
|
||||||
|
$item->tag($tag);
|
||||||
|
}
|
||||||
|
}
|
45
advancedcontentfilter/vendor/symfony/cache/Tests/DoctrineProviderTest.php
vendored
Normal file
45
advancedcontentfilter/vendor/symfony/cache/Tests/DoctrineProviderTest.php
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests;
|
||||||
|
|
||||||
|
use Doctrine\Common\Cache\CacheProvider;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
use Symfony\Component\Cache\DoctrineProvider;
|
||||||
|
|
||||||
|
class DoctrineProviderTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testProvider()
|
||||||
|
{
|
||||||
|
$pool = new ArrayAdapter();
|
||||||
|
$cache = new DoctrineProvider($pool);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(CacheProvider::class, $cache);
|
||||||
|
|
||||||
|
$key = '{}()/\@:';
|
||||||
|
|
||||||
|
$this->assertTrue($cache->delete($key));
|
||||||
|
$this->assertFalse($cache->contains($key));
|
||||||
|
|
||||||
|
$this->assertTrue($cache->save($key, 'bar'));
|
||||||
|
$this->assertTrue($cache->contains($key));
|
||||||
|
$this->assertSame('bar', $cache->fetch($key));
|
||||||
|
|
||||||
|
$this->assertTrue($cache->delete($key));
|
||||||
|
$this->assertFalse($cache->fetch($key));
|
||||||
|
$this->assertTrue($cache->save($key, 'bar'));
|
||||||
|
|
||||||
|
$cache->flushAll();
|
||||||
|
$this->assertFalse($cache->fetch($key));
|
||||||
|
$this->assertFalse($cache->contains($key));
|
||||||
|
}
|
||||||
|
}
|
52
advancedcontentfilter/vendor/symfony/cache/Tests/Fixtures/ArrayCache.php
vendored
Normal file
52
advancedcontentfilter/vendor/symfony/cache/Tests/Fixtures/ArrayCache.php
vendored
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Doctrine\Common\Cache\CacheProvider;
|
||||||
|
|
||||||
|
class ArrayCache extends CacheProvider
|
||||||
|
{
|
||||||
|
private $data = [];
|
||||||
|
|
||||||
|
protected function doFetch($id)
|
||||||
|
{
|
||||||
|
return $this->doContains($id) ? $this->data[$id][0] : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doContains($id)
|
||||||
|
{
|
||||||
|
if (!isset($this->data[$id])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$expiry = $this->data[$id][1];
|
||||||
|
|
||||||
|
return !$expiry || time() < $expiry || !$this->doDelete($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doSave($id, $data, $lifeTime = 0)
|
||||||
|
{
|
||||||
|
$this->data[$id] = [$data, $lifeTime ? time() + $lifeTime : false];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doDelete($id)
|
||||||
|
{
|
||||||
|
unset($this->data[$id]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doFlush()
|
||||||
|
{
|
||||||
|
$this->data = [];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function doGetStats()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
76
advancedcontentfilter/vendor/symfony/cache/Tests/Fixtures/ExternalAdapter.php
vendored
Normal file
76
advancedcontentfilter/vendor/symfony/cache/Tests/Fixtures/ExternalAdapter.php
vendored
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Psr\Cache\CacheItemInterface;
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ArrayAdapter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adapter not implementing the {@see \Symfony\Component\Cache\Adapter\AdapterInterface}.
|
||||||
|
*
|
||||||
|
* @author Kévin Dunglas <dunglas@gmail.com>
|
||||||
|
*/
|
||||||
|
class ExternalAdapter implements CacheItemPoolInterface
|
||||||
|
{
|
||||||
|
private $cache;
|
||||||
|
|
||||||
|
public function __construct($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
$this->cache = new ArrayAdapter($defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItem($key)
|
||||||
|
{
|
||||||
|
return $this->cache->getItem($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItems(array $keys = [])
|
||||||
|
{
|
||||||
|
return $this->cache->getItems($keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasItem($key)
|
||||||
|
{
|
||||||
|
return $this->cache->hasItem($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clear()
|
||||||
|
{
|
||||||
|
return $this->cache->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteItem($key)
|
||||||
|
{
|
||||||
|
return $this->cache->deleteItem($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteItems(array $keys)
|
||||||
|
{
|
||||||
|
return $this->cache->deleteItems($keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save(CacheItemInterface $item)
|
||||||
|
{
|
||||||
|
return $this->cache->save($item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function saveDeferred(CacheItemInterface $item)
|
||||||
|
{
|
||||||
|
return $this->cache->saveDeferred($item);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function commit()
|
||||||
|
{
|
||||||
|
return $this->cache->commit();
|
||||||
|
}
|
||||||
|
}
|
47
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/AbstractRedisCacheTest.php
vendored
Normal file
47
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/AbstractRedisCacheTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\RedisCache;
|
||||||
|
|
||||||
|
abstract class AbstractRedisCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testSetTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testSetMultipleTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $redis;
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new RedisCache(self::$redis, str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('redis')) {
|
||||||
|
self::markTestSkipped('Extension redis required.');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
(new \Redis())->connect(getenv('REDIS_HOST'));
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
self::markTestSkipped($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
self::$redis = null;
|
||||||
|
}
|
||||||
|
}
|
35
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ApcuCacheTest.php
vendored
Normal file
35
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ApcuCacheTest.php
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\ApcuCache;
|
||||||
|
|
||||||
|
class ApcuCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testSetTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testSetMultipleTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
if (!\function_exists('apcu_fetch') || !filter_var(ini_get('apc.enabled'), \FILTER_VALIDATE_BOOLEAN) || ('cli' === \PHP_SAPI && !filter_var(ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOLEAN))) {
|
||||||
|
$this->markTestSkipped('APCu extension is required.');
|
||||||
|
}
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
|
$this->markTestSkipped('Fails transiently on Windows.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ApcuCache(str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
25
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ArrayCacheTest.php
vendored
Normal file
25
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ArrayCacheTest.php
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\ArrayCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class ArrayCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ArrayCache($defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
150
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/CacheTestCase.php
vendored
Normal file
150
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/CacheTestCase.php
vendored
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Cache\IntegrationTests\SimpleCacheTest;
|
||||||
|
use Psr\SimpleCache\CacheInterface;
|
||||||
|
use Symfony\Component\Cache\PruneableInterface;
|
||||||
|
|
||||||
|
abstract class CacheTestCase extends SimpleCacheTest
|
||||||
|
{
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
if (!\array_key_exists('testPrune', $this->skippedTests) && !$this->createSimpleCache() instanceof PruneableInterface) {
|
||||||
|
$this->skippedTests['testPrune'] = 'Not a pruneable cache pool.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function validKeys()
|
||||||
|
{
|
||||||
|
if (\defined('HHVM_VERSION')) {
|
||||||
|
return parent::validKeys();
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_merge(parent::validKeys(), [["a\0b"]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultLifeTime()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = $this->createSimpleCache(2);
|
||||||
|
$cache->clear();
|
||||||
|
|
||||||
|
$cache->set('key.dlt', 'value');
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
$this->assertSame('value', $cache->get('key.dlt'));
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
$this->assertNull($cache->get('key.dlt'));
|
||||||
|
|
||||||
|
$cache->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNotUnserializable()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = $this->createSimpleCache();
|
||||||
|
$cache->clear();
|
||||||
|
|
||||||
|
$cache->set('foo', new NotUnserializable());
|
||||||
|
|
||||||
|
$this->assertNull($cache->get('foo'));
|
||||||
|
|
||||||
|
$cache->setMultiple(['foo' => new NotUnserializable()]);
|
||||||
|
|
||||||
|
foreach ($cache->getMultiple(['foo']) as $value) {
|
||||||
|
}
|
||||||
|
$this->assertNull($value);
|
||||||
|
|
||||||
|
$cache->clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPrune()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!method_exists($this, 'isPruned')) {
|
||||||
|
$this->fail('Test classes for pruneable caches must implement `isPruned($cache, $name)` method.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var PruneableInterface|CacheInterface $cache */
|
||||||
|
$cache = $this->createSimpleCache();
|
||||||
|
$cache->clear();
|
||||||
|
|
||||||
|
$cache->set('foo', 'foo-val', new \DateInterval('PT05S'));
|
||||||
|
$cache->set('bar', 'bar-val', new \DateInterval('PT10S'));
|
||||||
|
$cache->set('baz', 'baz-val', new \DateInterval('PT15S'));
|
||||||
|
$cache->set('qux', 'qux-val', new \DateInterval('PT20S'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
$cache->set('foo', 'foo-val');
|
||||||
|
$cache->set('bar', 'bar-val', new \DateInterval('PT20S'));
|
||||||
|
$cache->set('baz', 'baz-val', new \DateInterval('PT40S'));
|
||||||
|
$cache->set('qux', 'qux-val', new \DateInterval('PT80S'));
|
||||||
|
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'bar'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'baz'));
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
sleep(30);
|
||||||
|
$cache->prune();
|
||||||
|
$this->assertFalse($this->isPruned($cache, 'foo'));
|
||||||
|
$this->assertTrue($this->isPruned($cache, 'qux'));
|
||||||
|
|
||||||
|
$cache->clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotUnserializable implements \Serializable
|
||||||
|
{
|
||||||
|
public function serialize()
|
||||||
|
{
|
||||||
|
return serialize(123);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function unserialize($ser)
|
||||||
|
{
|
||||||
|
throw new \Exception(__CLASS__);
|
||||||
|
}
|
||||||
|
}
|
113
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ChainCacheTest.php
vendored
Normal file
113
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/ChainCacheTest.php
vendored
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
|
use Psr\SimpleCache\CacheInterface;
|
||||||
|
use Symfony\Component\Cache\PruneableInterface;
|
||||||
|
use Symfony\Component\Cache\Simple\ArrayCache;
|
||||||
|
use Symfony\Component\Cache\Simple\ChainCache;
|
||||||
|
use Symfony\Component\Cache\Simple\FilesystemCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class ChainCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new ChainCache([new ArrayCache($defaultLifetime), new FilesystemCache('', $defaultLifetime)], $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmptyCachesException()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('At least one cache must be specified.');
|
||||||
|
new ChainCache([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInvalidCacheException()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('The class "stdClass" does not implement');
|
||||||
|
new ChainCache([new \stdClass()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testPrune()
|
||||||
|
{
|
||||||
|
if (isset($this->skippedTests[__FUNCTION__])) {
|
||||||
|
$this->markTestSkipped($this->skippedTests[__FUNCTION__]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$cache = new ChainCache([
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
$this->getNonPruneableMock(),
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
]);
|
||||||
|
$this->assertTrue($cache->prune());
|
||||||
|
|
||||||
|
$cache = new ChainCache([
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
$this->getFailingPruneableMock(),
|
||||||
|
$this->getPruneableMock(),
|
||||||
|
]);
|
||||||
|
$this->assertFalse($cache->prune());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(true);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|PruneableCacheInterface
|
||||||
|
*/
|
||||||
|
private function getFailingPruneableMock()
|
||||||
|
{
|
||||||
|
$pruneable = $this
|
||||||
|
->getMockBuilder(PruneableCacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$pruneable
|
||||||
|
->expects($this->atLeastOnce())
|
||||||
|
->method('prune')
|
||||||
|
->willReturn(false);
|
||||||
|
|
||||||
|
return $pruneable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return MockObject|CacheInterface
|
||||||
|
*/
|
||||||
|
private function getNonPruneableMock()
|
||||||
|
{
|
||||||
|
return $this
|
||||||
|
->getMockBuilder(CacheInterface::class)
|
||||||
|
->getMock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PruneableCacheInterface extends PruneableInterface, CacheInterface
|
||||||
|
{
|
||||||
|
}
|
31
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/DoctrineCacheTest.php
vendored
Normal file
31
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/DoctrineCacheTest.php
vendored
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\DoctrineCache;
|
||||||
|
use Symfony\Component\Cache\Tests\Fixtures\ArrayCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class DoctrineCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testObjectDoesNotChangeInCache' => 'ArrayCache does not use serialize/unserialize',
|
||||||
|
'testNotUnserializable' => 'ArrayCache does not use serialize/unserialize',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new DoctrineCache(new ArrayCache($defaultLifetime), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
34
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/FilesystemCacheTest.php
vendored
Normal file
34
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/FilesystemCacheTest.php
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Psr\SimpleCache\CacheInterface;
|
||||||
|
use Symfony\Component\Cache\Simple\FilesystemCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class FilesystemCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new FilesystemCache('', $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isPruned(CacheInterface $cache, $name)
|
||||||
|
{
|
||||||
|
$getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile');
|
||||||
|
$getFileMethod->setAccessible(true);
|
||||||
|
|
||||||
|
return !file_exists($getFileMethod->invoke($cache, $name));
|
||||||
|
}
|
||||||
|
}
|
178
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/MemcachedCacheTest.php
vendored
Normal file
178
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/MemcachedCacheTest.php
vendored
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\AbstractAdapter;
|
||||||
|
use Symfony\Component\Cache\Simple\MemcachedCache;
|
||||||
|
|
||||||
|
class MemcachedCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testSetTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testSetMultipleTtl' => 'Testing expiration slows down the test suite',
|
||||||
|
'testDefaultLifeTime' => 'Testing expiration slows down the test suite',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $client;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!MemcachedCache::isSupported()) {
|
||||||
|
self::markTestSkipped('Extension memcached >=2.2.0 required.');
|
||||||
|
}
|
||||||
|
self::$client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'));
|
||||||
|
self::$client->get('foo');
|
||||||
|
$code = self::$client->getResultCode();
|
||||||
|
|
||||||
|
if (\Memcached::RES_SUCCESS !== $code && \Memcached::RES_NOTFOUND !== $code) {
|
||||||
|
self::markTestSkipped('Memcached error: '.strtolower(self::$client->getResultMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
$client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['binary_protocol' => false]) : self::$client;
|
||||||
|
|
||||||
|
return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreatePersistentConnectionShouldNotDupServerList()
|
||||||
|
{
|
||||||
|
$instance = MemcachedCache::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['persistent_id' => 'persistent']);
|
||||||
|
$this->assertCount(1, $instance->getServerList());
|
||||||
|
|
||||||
|
$instance = MemcachedCache::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['persistent_id' => 'persistent']);
|
||||||
|
$this->assertCount(1, $instance->getServerList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOptions()
|
||||||
|
{
|
||||||
|
$client = MemcachedCache::createConnection([], [
|
||||||
|
'libketama_compatible' => false,
|
||||||
|
'distribution' => 'modula',
|
||||||
|
'compression' => true,
|
||||||
|
'serializer' => 'php',
|
||||||
|
'hash' => 'md5',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertSame(\Memcached::SERIALIZER_PHP, $client->getOption(\Memcached::OPT_SERIALIZER));
|
||||||
|
$this->assertSame(\Memcached::HASH_MD5, $client->getOption(\Memcached::OPT_HASH));
|
||||||
|
$this->assertTrue($client->getOption(\Memcached::OPT_COMPRESSION));
|
||||||
|
$this->assertSame(0, $client->getOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE));
|
||||||
|
$this->assertSame(\Memcached::DISTRIBUTION_MODULA, $client->getOption(\Memcached::OPT_DISTRIBUTION));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideBadOptions
|
||||||
|
*/
|
||||||
|
public function testBadOptions($name, $value)
|
||||||
|
{
|
||||||
|
if (\PHP_VERSION_ID < 80000) {
|
||||||
|
$this->expectException('ErrorException');
|
||||||
|
$this->expectExceptionMessage('constant(): Couldn\'t find constant Memcached::');
|
||||||
|
} else {
|
||||||
|
$this->expectException('Error');
|
||||||
|
$this->expectExceptionMessage('Undefined constant Memcached::');
|
||||||
|
}
|
||||||
|
|
||||||
|
MemcachedCache::createConnection([], [$name => $value]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideBadOptions()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['foo', 'bar'],
|
||||||
|
['hash', 'zyx'],
|
||||||
|
['serializer', 'zyx'],
|
||||||
|
['distribution', 'zyx'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultOptions()
|
||||||
|
{
|
||||||
|
$this->assertTrue(MemcachedCache::isSupported());
|
||||||
|
|
||||||
|
$client = MemcachedCache::createConnection([]);
|
||||||
|
|
||||||
|
$this->assertTrue($client->getOption(\Memcached::OPT_COMPRESSION));
|
||||||
|
$this->assertSame(1, $client->getOption(\Memcached::OPT_BINARY_PROTOCOL));
|
||||||
|
$this->assertSame(1, $client->getOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testOptionSerializer()
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\CacheException');
|
||||||
|
$this->expectExceptionMessage('MemcachedAdapter: "serializer" option must be "php" or "igbinary".');
|
||||||
|
if (!\Memcached::HAVE_JSON) {
|
||||||
|
$this->markTestSkipped('Memcached::HAVE_JSON required');
|
||||||
|
}
|
||||||
|
|
||||||
|
new MemcachedCache(MemcachedCache::createConnection([], ['serializer' => 'json']));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideServersSetting
|
||||||
|
*/
|
||||||
|
public function testServersSetting($dsn, $host, $port)
|
||||||
|
{
|
||||||
|
$client1 = MemcachedCache::createConnection($dsn);
|
||||||
|
$client2 = MemcachedCache::createConnection([$dsn]);
|
||||||
|
$client3 = MemcachedCache::createConnection([[$host, $port]]);
|
||||||
|
$expect = [
|
||||||
|
'host' => $host,
|
||||||
|
'port' => $port,
|
||||||
|
];
|
||||||
|
|
||||||
|
$f = function ($s) { return ['host' => $s['host'], 'port' => $s['port']]; };
|
||||||
|
$this->assertSame([$expect], array_map($f, $client1->getServerList()));
|
||||||
|
$this->assertSame([$expect], array_map($f, $client2->getServerList()));
|
||||||
|
$this->assertSame([$expect], array_map($f, $client3->getServerList()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideServersSetting()
|
||||||
|
{
|
||||||
|
yield [
|
||||||
|
'memcached://127.0.0.1/50',
|
||||||
|
'127.0.0.1',
|
||||||
|
11211,
|
||||||
|
];
|
||||||
|
yield [
|
||||||
|
'memcached://localhost:11222?weight=25',
|
||||||
|
'localhost',
|
||||||
|
11222,
|
||||||
|
];
|
||||||
|
if (filter_var(ini_get('memcached.use_sasl'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
yield [
|
||||||
|
'memcached://user:password@127.0.0.1?weight=50',
|
||||||
|
'127.0.0.1',
|
||||||
|
11211,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
yield [
|
||||||
|
'memcached:///var/run/memcached.sock?weight=25',
|
||||||
|
'/var/run/memcached.sock',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
yield [
|
||||||
|
'memcached:///var/local/run/memcached.socket?weight=25',
|
||||||
|
'/var/local/run/memcached.socket',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
if (filter_var(ini_get('memcached.use_sasl'), \FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
yield [
|
||||||
|
'memcached://user:password@/var/local/run/memcached.socket?weight=25',
|
||||||
|
'/var/local/run/memcached.socket',
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/MemcachedCacheTextModeTest.php
vendored
Normal file
25
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/MemcachedCacheTextModeTest.php
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\AbstractAdapter;
|
||||||
|
use Symfony\Component\Cache\Simple\MemcachedCache;
|
||||||
|
|
||||||
|
class MemcachedCacheTextModeTest extends MemcachedCacheTest
|
||||||
|
{
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
$client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), ['binary_protocol' => false]);
|
||||||
|
|
||||||
|
return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
96
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/NullCacheTest.php
vendored
Normal file
96
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/NullCacheTest.php
vendored
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\Cache\Simple\NullCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class NullCacheTest extends TestCase
|
||||||
|
{
|
||||||
|
public function createCachePool()
|
||||||
|
{
|
||||||
|
return new NullCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetItem()
|
||||||
|
{
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$this->assertNull($cache->get('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHas()
|
||||||
|
{
|
||||||
|
$this->assertFalse($this->createCachePool()->has('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetMultiple()
|
||||||
|
{
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$keys = ['foo', 'bar', 'baz', 'biz'];
|
||||||
|
|
||||||
|
$default = new \stdClass();
|
||||||
|
$items = $cache->getMultiple($keys, $default);
|
||||||
|
$count = 0;
|
||||||
|
|
||||||
|
foreach ($items as $key => $item) {
|
||||||
|
$this->assertContains($key, $keys, 'Cache key can not change.');
|
||||||
|
$this->assertSame($default, $item);
|
||||||
|
|
||||||
|
// Remove $key for $keys
|
||||||
|
foreach ($keys as $k => $v) {
|
||||||
|
if ($v === $key) {
|
||||||
|
unset($keys[$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
++$count;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertSame(4, $count);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testClear()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->clear());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDelete()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->delete('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteMultiple()
|
||||||
|
{
|
||||||
|
$this->assertTrue($this->createCachePool()->deleteMultiple(['key', 'foo', 'bar']));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSet()
|
||||||
|
{
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$this->assertFalse($cache->set('key', 'val'));
|
||||||
|
$this->assertNull($cache->get('key'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSetMultiple()
|
||||||
|
{
|
||||||
|
$cache = $this->createCachePool();
|
||||||
|
|
||||||
|
$this->assertFalse($cache->setMultiple(['key' => 'val']));
|
||||||
|
$this->assertNull($cache->get('key'));
|
||||||
|
}
|
||||||
|
}
|
47
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PdoCacheTest.php
vendored
Normal file
47
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PdoCacheTest.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\PdoCache;
|
||||||
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PdoCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
use PdoPruneableTrait;
|
||||||
|
|
||||||
|
protected static $dbFile;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('pdo_sqlite')) {
|
||||||
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
|
|
||||||
|
$pool = new PdoCache('sqlite:'.self::$dbFile);
|
||||||
|
$pool->createTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
@unlink(self::$dbFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PdoCache('sqlite:'.self::$dbFile, 'ns', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
48
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PdoDbalCacheTest.php
vendored
Normal file
48
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PdoDbalCacheTest.php
vendored
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Doctrine\DBAL\DriverManager;
|
||||||
|
use Symfony\Component\Cache\Simple\PdoCache;
|
||||||
|
use Symfony\Component\Cache\Tests\Traits\PdoPruneableTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PdoDbalCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
use PdoPruneableTrait;
|
||||||
|
|
||||||
|
protected static $dbFile;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!\extension_loaded('pdo_sqlite')) {
|
||||||
|
self::markTestSkipped('Extension pdo_sqlite required.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$dbFile = tempnam(sys_get_temp_dir(), 'sf_sqlite_cache');
|
||||||
|
|
||||||
|
$pool = new PdoCache(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]));
|
||||||
|
$pool->createTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function tearDownAfterClass()
|
||||||
|
{
|
||||||
|
@unlink(self::$dbFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PdoCache(DriverManager::getConnection(['driver' => 'pdo_sqlite', 'path' => self::$dbFile]), '', $defaultLifetime);
|
||||||
|
}
|
||||||
|
}
|
145
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpArrayCacheTest.php
vendored
Normal file
145
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpArrayCacheTest.php
vendored
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\NullCache;
|
||||||
|
use Symfony\Component\Cache\Simple\PhpArrayCache;
|
||||||
|
use Symfony\Component\Cache\Tests\Adapter\FilesystemAdapterTest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpArrayCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testBasicUsageWithLongKey' => 'PhpArrayCache does no writes',
|
||||||
|
|
||||||
|
'testDelete' => 'PhpArrayCache does no writes',
|
||||||
|
'testDeleteMultiple' => 'PhpArrayCache does no writes',
|
||||||
|
'testDeleteMultipleGenerator' => 'PhpArrayCache does no writes',
|
||||||
|
|
||||||
|
'testSetTtl' => 'PhpArrayCache does no expiration',
|
||||||
|
'testSetMultipleTtl' => 'PhpArrayCache does no expiration',
|
||||||
|
'testSetExpiredTtl' => 'PhpArrayCache does no expiration',
|
||||||
|
'testSetMultipleExpiredTtl' => 'PhpArrayCache does no expiration',
|
||||||
|
|
||||||
|
'testGetInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testGetMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testDeleteInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testDeleteMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetInvalidTtl' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetMultipleInvalidTtl' => 'PhpArrayCache does no validation',
|
||||||
|
'testHasInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetValidData' => 'PhpArrayCache does no validation',
|
||||||
|
|
||||||
|
'testDefaultLifeTime' => 'PhpArrayCache does not allow configuring a default lifetime.',
|
||||||
|
'testPrune' => 'PhpArrayCache just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $file;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
self::$file = sys_get_temp_dir().'/symfony-cache/php-array-adapter-test.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
$this->createSimpleCache()->clear();
|
||||||
|
|
||||||
|
if (file_exists(sys_get_temp_dir().'/symfony-cache')) {
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createSimpleCache()
|
||||||
|
{
|
||||||
|
return new PhpArrayCacheWrapper(self::$file, new NullCache());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStore()
|
||||||
|
{
|
||||||
|
$arrayWithRefs = [];
|
||||||
|
$arrayWithRefs[0] = 123;
|
||||||
|
$arrayWithRefs[1] = &$arrayWithRefs[0];
|
||||||
|
|
||||||
|
$object = (object) [
|
||||||
|
'foo' => 'bar',
|
||||||
|
'foo2' => 'bar2',
|
||||||
|
];
|
||||||
|
|
||||||
|
$expected = [
|
||||||
|
'null' => null,
|
||||||
|
'serializedString' => serialize($object),
|
||||||
|
'arrayWithRefs' => $arrayWithRefs,
|
||||||
|
'object' => $object,
|
||||||
|
'arrayWithObject' => ['bar' => $object],
|
||||||
|
];
|
||||||
|
|
||||||
|
$cache = new PhpArrayCache(self::$file, new NullCache());
|
||||||
|
$cache->warmUp($expected);
|
||||||
|
|
||||||
|
foreach ($expected as $key => $value) {
|
||||||
|
$this->assertSame(serialize($value), serialize($cache->get($key)), 'Warm up should create a PHP file that OPCache can load in memory');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStoredFile()
|
||||||
|
{
|
||||||
|
$expected = [
|
||||||
|
'integer' => 42,
|
||||||
|
'float' => 42.42,
|
||||||
|
'boolean' => true,
|
||||||
|
'array_simple' => ['foo', 'bar'],
|
||||||
|
'array_associative' => ['foo' => 'bar', 'foo2' => 'bar2'],
|
||||||
|
];
|
||||||
|
|
||||||
|
$cache = new PhpArrayCache(self::$file, new NullCache());
|
||||||
|
$cache->warmUp($expected);
|
||||||
|
|
||||||
|
$values = eval(substr(file_get_contents(self::$file), 6));
|
||||||
|
|
||||||
|
$this->assertSame($expected, $values, 'Warm up should create a PHP file that OPCache can load in memory');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PhpArrayCacheWrapper extends PhpArrayCache
|
||||||
|
{
|
||||||
|
public function set($key, $value, $ttl = null)
|
||||||
|
{
|
||||||
|
\call_user_func(\Closure::bind(function () use ($key, $value) {
|
||||||
|
$this->values[$key] = $value;
|
||||||
|
$this->warmUp($this->values);
|
||||||
|
$this->values = eval(substr(file_get_contents($this->file), 6));
|
||||||
|
}, $this, PhpArrayCache::class));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMultiple($values, $ttl = null)
|
||||||
|
{
|
||||||
|
if (!\is_array($values) && !$values instanceof \Traversable) {
|
||||||
|
return parent::setMultiple($values, $ttl);
|
||||||
|
}
|
||||||
|
\call_user_func(\Closure::bind(function () use ($values) {
|
||||||
|
foreach ($values as $key => $value) {
|
||||||
|
$this->values[$key] = $value;
|
||||||
|
}
|
||||||
|
$this->warmUp($this->values);
|
||||||
|
$this->values = eval(substr(file_get_contents($this->file), 6));
|
||||||
|
}, $this, PhpArrayCache::class));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
57
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php
vendored
Normal file
57
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpArrayCacheWithFallbackTest.php
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\FilesystemCache;
|
||||||
|
use Symfony\Component\Cache\Simple\PhpArrayCache;
|
||||||
|
use Symfony\Component\Cache\Tests\Adapter\FilesystemAdapterTest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpArrayCacheWithFallbackTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testGetInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testGetMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testDeleteInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testDeleteMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
//'testSetValidData' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetInvalidTtl' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetMultipleInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testSetMultipleInvalidTtl' => 'PhpArrayCache does no validation',
|
||||||
|
'testHasInvalidKeys' => 'PhpArrayCache does no validation',
|
||||||
|
'testPrune' => 'PhpArrayCache just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected static $file;
|
||||||
|
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
self::$file = sys_get_temp_dir().'/symfony-cache/php-array-adapter-test.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
$this->createSimpleCache()->clear();
|
||||||
|
|
||||||
|
if (file_exists(sys_get_temp_dir().'/symfony-cache')) {
|
||||||
|
FilesystemAdapterTest::rmdir(sys_get_temp_dir().'/symfony-cache');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new PhpArrayCache(self::$file, new FilesystemCache('php-array-fallback', $defaultLifetime));
|
||||||
|
}
|
||||||
|
}
|
42
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpFilesCacheTest.php
vendored
Normal file
42
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/PhpFilesCacheTest.php
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Psr\SimpleCache\CacheInterface;
|
||||||
|
use Symfony\Component\Cache\Simple\PhpFilesCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class PhpFilesCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testDefaultLifeTime' => 'PhpFilesCache does not allow configuring a default lifetime.',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createSimpleCache()
|
||||||
|
{
|
||||||
|
if (!PhpFilesCache::isSupported()) {
|
||||||
|
$this->markTestSkipped('OPcache extension is not enabled.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new PhpFilesCache('sf-cache');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isPruned(CacheInterface $cache, $name)
|
||||||
|
{
|
||||||
|
$getFileMethod = (new \ReflectionObject($cache))->getMethod('getFile');
|
||||||
|
$getFileMethod->setAccessible(true);
|
||||||
|
|
||||||
|
return !file_exists($getFileMethod->invoke($cache, $name));
|
||||||
|
}
|
||||||
|
}
|
30
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/Psr6CacheTest.php
vendored
Normal file
30
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/Psr6CacheTest.php
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
|
use Symfony\Component\Cache\Simple\Psr6Cache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class Psr6CacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testPrune' => 'Psr6Cache just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new Psr6Cache(new FilesystemAdapter('', $defaultLifetime));
|
||||||
|
}
|
||||||
|
}
|
24
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisArrayCacheTest.php
vendored
Normal file
24
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisArrayCacheTest.php
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
class RedisArrayCacheTest extends AbstractRedisCacheTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setupBeforeClass();
|
||||||
|
if (!class_exists('RedisArray')) {
|
||||||
|
self::markTestSkipped('The RedisArray class is required.');
|
||||||
|
}
|
||||||
|
self::$redis = new \RedisArray([getenv('REDIS_HOST')], ['lazy_connect' => true]);
|
||||||
|
}
|
||||||
|
}
|
82
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisCacheTest.php
vendored
Normal file
82
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisCacheTest.php
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\RedisCache;
|
||||||
|
|
||||||
|
class RedisCacheTest extends AbstractRedisCacheTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
parent::setupBeforeClass();
|
||||||
|
self::$redis = RedisCache::createConnection('redis://'.getenv('REDIS_HOST'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateConnection()
|
||||||
|
{
|
||||||
|
$redisHost = getenv('REDIS_HOST');
|
||||||
|
|
||||||
|
$redis = RedisCache::createConnection('redis://'.$redisHost);
|
||||||
|
$this->assertInstanceOf(\Redis::class, $redis);
|
||||||
|
$this->assertTrue($redis->isConnected());
|
||||||
|
$this->assertSame(0, $redis->getDbNum());
|
||||||
|
|
||||||
|
$redis = RedisCache::createConnection('redis://'.$redisHost.'/2');
|
||||||
|
$this->assertSame(2, $redis->getDbNum());
|
||||||
|
|
||||||
|
$redis = RedisCache::createConnection('redis://'.$redisHost, ['timeout' => 3]);
|
||||||
|
$this->assertEquals(3, $redis->getTimeout());
|
||||||
|
|
||||||
|
$redis = RedisCache::createConnection('redis://'.$redisHost.'?timeout=4');
|
||||||
|
$this->assertEquals(4, $redis->getTimeout());
|
||||||
|
|
||||||
|
$redis = RedisCache::createConnection('redis://'.$redisHost, ['read_timeout' => 5]);
|
||||||
|
$this->assertEquals(5, $redis->getReadTimeout());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideFailedCreateConnection
|
||||||
|
*/
|
||||||
|
public function testFailedCreateConnection($dsn)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Redis connection ');
|
||||||
|
RedisCache::createConnection($dsn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideFailedCreateConnection()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['redis://localhost:1234'],
|
||||||
|
['redis://foo@localhost'],
|
||||||
|
['redis://localhost/123'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideInvalidCreateConnection
|
||||||
|
*/
|
||||||
|
public function testInvalidCreateConnection($dsn)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Cache\Exception\InvalidArgumentException');
|
||||||
|
$this->expectExceptionMessage('Invalid Redis DSN');
|
||||||
|
RedisCache::createConnection($dsn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideInvalidCreateConnection()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['foo://localhost'],
|
||||||
|
['redis://'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
27
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisClusterCacheTest.php
vendored
Normal file
27
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/RedisClusterCacheTest.php
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
class RedisClusterCacheTest extends AbstractRedisCacheTest
|
||||||
|
{
|
||||||
|
public static function setUpBeforeClass()
|
||||||
|
{
|
||||||
|
if (!class_exists('RedisCluster')) {
|
||||||
|
self::markTestSkipped('The RedisCluster class is required.');
|
||||||
|
}
|
||||||
|
if (!$hosts = getenv('REDIS_CLUSTER_HOSTS')) {
|
||||||
|
self::markTestSkipped('REDIS_CLUSTER_HOSTS env var is not defined.');
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$redis = new \RedisCluster(null, explode(' ', $hosts));
|
||||||
|
}
|
||||||
|
}
|
171
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/TraceableCacheTest.php
vendored
Normal file
171
advancedcontentfilter/vendor/symfony/cache/Tests/Simple/TraceableCacheTest.php
vendored
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Simple;
|
||||||
|
|
||||||
|
use Symfony\Component\Cache\Simple\FilesystemCache;
|
||||||
|
use Symfony\Component\Cache\Simple\TraceableCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group time-sensitive
|
||||||
|
*/
|
||||||
|
class TraceableCacheTest extends CacheTestCase
|
||||||
|
{
|
||||||
|
protected $skippedTests = [
|
||||||
|
'testPrune' => 'TraceableCache just proxies',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function createSimpleCache($defaultLifetime = 0)
|
||||||
|
{
|
||||||
|
return new TraceableCache(new FilesystemCache('', $defaultLifetime));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->get('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('get', $call->name);
|
||||||
|
$this->assertSame(['k' => false], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(1, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetHitTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->set('k', 'foo');
|
||||||
|
$pool->get('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(2, $calls);
|
||||||
|
|
||||||
|
$call = $calls[1];
|
||||||
|
$this->assertSame(1, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetMultipleMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->set('k1', 123);
|
||||||
|
$values = $pool->getMultiple(['k0', 'k1']);
|
||||||
|
foreach ($values as $value) {
|
||||||
|
}
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(2, $calls);
|
||||||
|
|
||||||
|
$call = $calls[1];
|
||||||
|
$this->assertSame('getMultiple', $call->name);
|
||||||
|
$this->assertSame(['k1' => true, 'k0' => false], $call->result);
|
||||||
|
$this->assertSame(1, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasMissTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->has('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('has', $call->name);
|
||||||
|
$this->assertSame(['k' => false], $call->result);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasHitTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->set('k', 'foo');
|
||||||
|
$pool->has('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(2, $calls);
|
||||||
|
|
||||||
|
$call = $calls[1];
|
||||||
|
$this->assertSame('has', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->delete('k');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('delete', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDeleteMultipleTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$arg = ['k0', 'k1'];
|
||||||
|
$pool->deleteMultiple($arg);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('deleteMultiple', $call->name);
|
||||||
|
$this->assertSame(['keys' => $arg, 'result' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testTraceSetTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->set('k', 'foo');
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('set', $call->name);
|
||||||
|
$this->assertSame(['k' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testSetMultipleTrace()
|
||||||
|
{
|
||||||
|
$pool = $this->createSimpleCache();
|
||||||
|
$pool->setMultiple(['k' => 'foo']);
|
||||||
|
$calls = $pool->getCalls();
|
||||||
|
$this->assertCount(1, $calls);
|
||||||
|
|
||||||
|
$call = $calls[0];
|
||||||
|
$this->assertSame('setMultiple', $call->name);
|
||||||
|
$this->assertSame(['keys' => ['k'], 'result' => true], $call->result);
|
||||||
|
$this->assertSame(0, $call->hits);
|
||||||
|
$this->assertSame(0, $call->misses);
|
||||||
|
$this->assertNotEmpty($call->start);
|
||||||
|
$this->assertNotEmpty($call->end);
|
||||||
|
}
|
||||||
|
}
|
34
advancedcontentfilter/vendor/symfony/cache/Tests/Traits/PdoPruneableTrait.php
vendored
Normal file
34
advancedcontentfilter/vendor/symfony/cache/Tests/Traits/PdoPruneableTrait.php
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Cache\Tests\Traits;
|
||||||
|
|
||||||
|
trait PdoPruneableTrait
|
||||||
|
{
|
||||||
|
protected function isPruned($cache, $name)
|
||||||
|
{
|
||||||
|
$o = new \ReflectionObject($cache);
|
||||||
|
|
||||||
|
if (!$o->hasMethod('getConnection')) {
|
||||||
|
self::fail('Cache does not have "getConnection()" method.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$getPdoConn = $o->getMethod('getConnection');
|
||||||
|
$getPdoConn->setAccessible(true);
|
||||||
|
|
||||||
|
/** @var \Doctrine\DBAL\Statement|\PDOStatement $select */
|
||||||
|
$select = $getPdoConn->invoke($cache)->prepare('SELECT 1 FROM cache_items WHERE item_id LIKE :id');
|
||||||
|
$select->bindValue(':id', sprintf('%%%s', $name));
|
||||||
|
$result = $select->execute();
|
||||||
|
|
||||||
|
return 1 !== (int) (\is_object($result) ? $result->fetchOne() : $select->fetch(\PDO::FETCH_COLUMN));
|
||||||
|
}
|
||||||
|
}
|
50
advancedcontentfilter/vendor/symfony/cache/phpunit.xml.dist
vendored
Normal file
50
advancedcontentfilter/vendor/symfony/cache/phpunit.xml.dist
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
|
||||||
|
backupGlobals="false"
|
||||||
|
colors="true"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
failOnRisky="true"
|
||||||
|
failOnWarning="true"
|
||||||
|
>
|
||||||
|
<php>
|
||||||
|
<ini name="error_reporting" value="-1" />
|
||||||
|
<env name="REDIS_HOST" value="localhost" />
|
||||||
|
<env name="MEMCACHED_HOST" value="localhost" />
|
||||||
|
</php>
|
||||||
|
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Symfony Cache Component Test Suite">
|
||||||
|
<directory>./Tests/</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<whitelist>
|
||||||
|
<directory>./</directory>
|
||||||
|
<exclude>
|
||||||
|
<directory>./Tests</directory>
|
||||||
|
<directory>./vendor</directory>
|
||||||
|
</exclude>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
|
||||||
|
<listeners>
|
||||||
|
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener">
|
||||||
|
<arguments>
|
||||||
|
<array>
|
||||||
|
<element key="time-sensitive">
|
||||||
|
<array>
|
||||||
|
<element key="0"><string>Cache\IntegrationTests</string></element>
|
||||||
|
<element key="1"><string>Doctrine\Common\Cache</string></element>
|
||||||
|
<element key="2"><string>Symfony\Component\Cache</string></element>
|
||||||
|
<element key="3"><string>Symfony\Component\Cache\Tests\Fixtures</string></element>
|
||||||
|
<element key="4"><string>Symfony\Component\Cache\Traits</string></element>
|
||||||
|
</array>
|
||||||
|
</element>
|
||||||
|
</array>
|
||||||
|
</arguments>
|
||||||
|
</listener>
|
||||||
|
</listeners>
|
||||||
|
</phpunit>
|
106
advancedcontentfilter/vendor/symfony/polyfill-apcu/Apcu.php
vendored
Normal file
106
advancedcontentfilter/vendor/symfony/polyfill-apcu/Apcu.php
vendored
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Polyfill\Apcu;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apcu for Zend Server Data Cache.
|
||||||
|
*
|
||||||
|
* @author Kate Gray <opensource@codebykate.com>
|
||||||
|
* @author Nicolas Grekas <p@tchwork.com>
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
final class Apcu
|
||||||
|
{
|
||||||
|
public static function apcu_add($key, $var = null, $ttl = 0)
|
||||||
|
{
|
||||||
|
if (!\is_array($key)) {
|
||||||
|
return apc_add($key, $var, $ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
$errors = [];
|
||||||
|
foreach ($key as $k => $v) {
|
||||||
|
if (!apc_add($k, $v, $ttl)) {
|
||||||
|
$errors[$k] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function apcu_store($key, $var = null, $ttl = 0)
|
||||||
|
{
|
||||||
|
if (!\is_array($key)) {
|
||||||
|
return apc_store($key, $var, $ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
$errors = [];
|
||||||
|
foreach ($key as $k => $v) {
|
||||||
|
if (!apc_store($k, $v, $ttl)) {
|
||||||
|
$errors[$k] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function apcu_exists($keys)
|
||||||
|
{
|
||||||
|
if (!\is_array($keys)) {
|
||||||
|
return apc_exists($keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
$existing = [];
|
||||||
|
foreach ($keys as $k) {
|
||||||
|
if (apc_exists($k)) {
|
||||||
|
$existing[$k] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $existing;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function apcu_fetch($key, &$success = null)
|
||||||
|
{
|
||||||
|
if (!\is_array($key)) {
|
||||||
|
return apc_fetch($key, $success);
|
||||||
|
}
|
||||||
|
|
||||||
|
$succeeded = true;
|
||||||
|
$values = [];
|
||||||
|
foreach ($key as $k) {
|
||||||
|
$v = apc_fetch($k, $success);
|
||||||
|
if ($success) {
|
||||||
|
$values[$k] = $v;
|
||||||
|
} else {
|
||||||
|
$succeeded = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$success = $succeeded;
|
||||||
|
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function apcu_delete($key)
|
||||||
|
{
|
||||||
|
if (!\is_array($key)) {
|
||||||
|
return apc_delete($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
$success = true;
|
||||||
|
foreach ($key as $k) {
|
||||||
|
$success = apc_delete($k) && $success;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
}
|
19
advancedcontentfilter/vendor/symfony/polyfill-apcu/LICENSE
vendored
Normal file
19
advancedcontentfilter/vendor/symfony/polyfill-apcu/LICENSE
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2015-present Fabien Potencier
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished
|
||||||
|
to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
12
advancedcontentfilter/vendor/symfony/polyfill-apcu/README.md
vendored
Normal file
12
advancedcontentfilter/vendor/symfony/polyfill-apcu/README.md
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
Symfony Polyfill / APCu
|
||||||
|
========================
|
||||||
|
|
||||||
|
This component provides `apcu_*` functions and the `APCuIterator` class to users of the legacy APC extension.
|
||||||
|
|
||||||
|
More information can be found in the
|
||||||
|
[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
This library is released under the [MIT license](LICENSE).
|
83
advancedcontentfilter/vendor/symfony/polyfill-apcu/bootstrap.php
vendored
Normal file
83
advancedcontentfilter/vendor/symfony/polyfill-apcu/bootstrap.php
vendored
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Symfony\Polyfill\Apcu as p;
|
||||||
|
|
||||||
|
if (!extension_loaded('apc') && !extension_loaded('apcu')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 80000) {
|
||||||
|
return require __DIR__.'/bootstrap80.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (extension_loaded('Zend Data Cache')) {
|
||||||
|
if (!function_exists('apcu_add')) {
|
||||||
|
function apcu_add($key, $value = null, $ttl = 0) { return p\Apcu::apcu_add($key, $value, $ttl); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_delete')) {
|
||||||
|
function apcu_delete($key) { return p\Apcu::apcu_delete($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_exists')) {
|
||||||
|
function apcu_exists($key) { return p\Apcu::apcu_exists($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_fetch')) {
|
||||||
|
function apcu_fetch($key, &$success = null) { return p\Apcu::apcu_fetch($key, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_store')) {
|
||||||
|
function apcu_store($key, $value = null, $ttl = 0) { return p\Apcu::apcu_store($key, $value, $ttl); }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!function_exists('apcu_add')) {
|
||||||
|
function apcu_add($key, $value = null, $ttl = 0) { return apc_add($key, $value, $ttl); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_delete')) {
|
||||||
|
function apcu_delete($key) { return apc_delete($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_exists')) {
|
||||||
|
function apcu_exists($key) { return apc_exists($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_fetch')) {
|
||||||
|
function apcu_fetch($key, &$success = null) { return apc_fetch($key, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_store')) {
|
||||||
|
function apcu_store($key, $value = null, $ttl = 0) { return apc_store($key, $value, $ttl); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('apcu_cache_info')) {
|
||||||
|
function apcu_cache_info($limited = false) { return apc_cache_info('user', $limited); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_cas')) {
|
||||||
|
function apcu_cas($key, $old, $new) { return apc_cas($key, $old, $new); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_clear_cache')) {
|
||||||
|
function apcu_clear_cache() { return apc_clear_cache('user'); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_dec')) {
|
||||||
|
function apcu_dec($key, $step = 1, &$success = false) { return apc_dec($key, $step, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_inc')) {
|
||||||
|
function apcu_inc($key, $step = 1, &$success = false) { return apc_inc($key, $step, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_sma_info')) {
|
||||||
|
function apcu_sma_info($limited = false) { return apc_sma_info($limited); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class_exists('APCuIterator', false) && class_exists('APCIterator', false)) {
|
||||||
|
class APCuIterator extends APCIterator
|
||||||
|
{
|
||||||
|
public function __construct($search = null, $format = \APC_ITER_ALL, $chunk_size = 100, $list = \APC_LIST_ACTIVE)
|
||||||
|
{
|
||||||
|
parent::__construct('user', $search, $format, $chunk_size, $list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
75
advancedcontentfilter/vendor/symfony/polyfill-apcu/bootstrap80.php
vendored
Normal file
75
advancedcontentfilter/vendor/symfony/polyfill-apcu/bootstrap80.php
vendored
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Symfony\Polyfill\Apcu as p;
|
||||||
|
|
||||||
|
if (extension_loaded('Zend Data Cache')) {
|
||||||
|
if (!function_exists('apcu_add')) {
|
||||||
|
function apcu_add($key, mixed $value, ?int $ttl = 0): array|bool { return p\Apcu::apcu_add($key, $value, (int) $ttl); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_delete')) {
|
||||||
|
function apcu_delete($key): array|bool { return p\Apcu::apcu_delete($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_exists')) {
|
||||||
|
function apcu_exists($key): array|bool { return p\Apcu::apcu_exists($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_fetch')) {
|
||||||
|
function apcu_fetch($key, &$success = null): mixed { return p\Apcu::apcu_fetch($key, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_store')) {
|
||||||
|
function apcu_store($key, mixed $value, ?int $ttl = 0): array|bool { return p\Apcu::apcu_store($key, $value, (int) $ttl); }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!function_exists('apcu_add')) {
|
||||||
|
function apcu_add($key, mixed $value, ?int $ttl = 0): array|bool { return apc_add($key, $value, (int) $ttl); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_delete')) {
|
||||||
|
function apcu_delete($key): array|bool { return apc_delete($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_exists')) {
|
||||||
|
function apcu_exists($key): array|bool { return apc_exists($key); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_fetch')) {
|
||||||
|
function apcu_fetch($key, &$success = null) { return apc_fetch($key, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_store')) {
|
||||||
|
function apcu_store($key, mixed $value, ?int $ttl = 0): array|bool { return apc_store($key, $value, (int) $ttl); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('apcu_cache_info')) {
|
||||||
|
function apcu_cache_info($limited = false) { return apc_cache_info('user', $limited); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_cas')) {
|
||||||
|
function apcu_cas($key, $old, $new) { return apc_cas($key, $old, $new); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_clear_cache')) {
|
||||||
|
function apcu_clear_cache() { return apc_clear_cache('user'); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_dec')) {
|
||||||
|
function apcu_dec($key, $step = 1, &$success = false) { return apc_dec($key, $step, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_inc')) {
|
||||||
|
function apcu_inc($key, $step = 1, &$success = false) { return apc_inc($key, $step, $success); }
|
||||||
|
}
|
||||||
|
if (!function_exists('apcu_sma_info')) {
|
||||||
|
function apcu_sma_info($limited = false) { return apc_sma_info($limited); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class_exists('APCuIterator', false) && class_exists('APCIterator', false)) {
|
||||||
|
class APCuIterator extends APCIterator
|
||||||
|
{
|
||||||
|
public function __construct($search = null, $format = APC_ITER_ALL, $chunk_size = 100, $list = APC_LIST_ACTIVE)
|
||||||
|
{
|
||||||
|
parent::__construct('user', $search, $format, $chunk_size, $list);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
advancedcontentfilter/vendor/symfony/polyfill-apcu/composer.json
vendored
Normal file
35
advancedcontentfilter/vendor/symfony/polyfill-apcu/composer.json
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-apcu",
|
||||||
|
"type": "library",
|
||||||
|
"description": "Symfony polyfill backporting apcu_* functions to lower PHP versions",
|
||||||
|
"keywords": ["polyfill", "shim", "compatibility", "portable", "apcu"],
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": { "Symfony\\Polyfill\\Apcu\\": "" },
|
||||||
|
"files": [ "bootstrap.php" ]
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "1.28-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/polyfill",
|
||||||
|
"url": "https://github.com/symfony/polyfill"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -461,7 +461,7 @@ function blockbot_is_social_media(array $parts): bool
|
||||||
|
|
||||||
$agents = [
|
$agents = [
|
||||||
'facebookexternalhit', 'twitterbot', 'mastodon', 'facebookexternalua',
|
'facebookexternalhit', 'twitterbot', 'mastodon', 'facebookexternalua',
|
||||||
'friendica', 'diasporafederation', 'buzzrelay', 'activityrelay', 'drupal',
|
'friendica', 'diasporafederation', 'buzzrelay', 'activityrelay',
|
||||||
'aoderelay', 'ap-relay', 'peertube', 'misskey', 'pleroma', 'foundkey', 'akkoma',
|
'aoderelay', 'ap-relay', 'peertube', 'misskey', 'pleroma', 'foundkey', 'akkoma',
|
||||||
'lemmy', 'calckey', 'mobilizon', 'zot', 'camo-rs', 'gotosocial', 'pixelfed',
|
'lemmy', 'calckey', 'mobilizon', 'zot', 'camo-rs', 'gotosocial', 'pixelfed',
|
||||||
'pixelfedbot', 'app.wafrn.net', 'go-camo', 'http://a.gup.pe', 'iceshrimp',
|
'pixelfedbot', 'app.wafrn.net', 'go-camo', 'http://a.gup.pe', 'iceshrimp',
|
||||||
|
|
|
@ -38,7 +38,6 @@ use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Conversation;
|
|
||||||
use Friendica\Model\GServer;
|
use Friendica\Model\GServer;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\ItemURI;
|
use Friendica\Model\ItemURI;
|
||||||
|
@ -140,7 +139,7 @@ function bluesky_probe_detect(array &$hookData)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} elseif (Network::isValidHttpUrl($hookData['uri'])) {
|
} elseif (Network::isValidHttpUrl($hookData['uri'])) {
|
||||||
$did = bluesky_get_did_by_profile($hookData['uri'], $pconfig['uid']);
|
$did = bluesky_get_did_by_profile($hookData['uri']);
|
||||||
if (empty($did)) {
|
if (empty($did)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -182,21 +181,21 @@ function bluesky_item_by_link(array &$hookData)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!preg_match('#^' . BLUESKY_WEB . '/profile/(.+)/post/(.+)#', $hookData['uri'], $matches)) {
|
$did = bluesky_get_did_by_profile($hookData['uri']);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$did = bluesky_get_did($matches[1], $hookData['uid']);
|
|
||||||
if (empty($did)) {
|
if (empty($did)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger::debug('Found bluesky post', ['url' => $hookData['uri'], 'did' => $did, 'cid' => $matches[2]]);
|
if (!preg_match('#/profile/.+/post/(.+)#', $hookData['uri'], $matches)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[2];
|
Logger::debug('Found bluesky post', ['url' => $hookData['uri'], 'did' => $did, 'cid' => $matches[1]]);
|
||||||
|
|
||||||
|
$uri = 'at://' . $did . '/app.bsky.feed.post/' . $matches[1];
|
||||||
|
|
||||||
$uri = bluesky_fetch_missing_post($uri, $hookData['uid'], $hookData['uid'], Item::PR_FETCHED, 0, 0, 0);
|
$uri = bluesky_fetch_missing_post($uri, $hookData['uid'], $hookData['uid'], Item::PR_FETCHED, 0, 0, 0);
|
||||||
Logger::debug('Got post', ['did' => $did, 'cid' => $matches[2], 'result' => $uri]);
|
Logger::debug('Got post', ['did' => $did, 'cid' => $matches[1], 'result' => $uri]);
|
||||||
if (!empty($uri)) {
|
if (!empty($uri)) {
|
||||||
$item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]);
|
$item = Post::selectFirst(['id'], ['uri' => $uri, 'uid' => $hookData['uid']]);
|
||||||
if (!empty($item['id'])) {
|
if (!empty($item['id'])) {
|
||||||
|
@ -279,12 +278,14 @@ function bluesky_block(array &$hook_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($hook_data['contact']['network'] != Protocol::BLUESKY) {
|
Logger::debug('Check if contact is bluesky', ['data' => $hook_data]);
|
||||||
|
$contact = DBA::selectFirst('contact', [], ['network' => Protocol::BLUESKY, 'url' => $hook_data['url'], 'uid' => [0, $hook_data['uid']]]);
|
||||||
|
if (empty($contact)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$record = [
|
$record = [
|
||||||
'subject' => $hook_data['contact']['url'],
|
'subject' => $contact['url'],
|
||||||
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
|
'createdAt' => DateTimeFormat::utcNow(DateTimeFormat::ATOM),
|
||||||
'$type' => 'app.bsky.graph.block'
|
'$type' => 'app.bsky.graph.block'
|
||||||
];
|
];
|
||||||
|
@ -587,13 +588,13 @@ function bluesky_hook_fork(array &$b)
|
||||||
|
|
||||||
if (DI::pConfig()->get($post['uid'], 'bluesky', 'import')) {
|
if (DI::pConfig()->get($post['uid'], 'bluesky', 'import')) {
|
||||||
// Don't post if it isn't a reply to a bluesky post
|
// Don't post if it isn't a reply to a bluesky post
|
||||||
if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::BLUESKY])) {
|
if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::BLUESKY])) {
|
||||||
Logger::notice('No bluesky parent found', ['item' => $post['id']]);
|
Logger::notice('No bluesky parent found', ['item' => $post['id']]);
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} elseif (!strstr($post['postopts'] ?? '', 'bluesky') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) {
|
} elseif (!strstr($post['postopts'] ?? '', 'bluesky') || ($post['parent'] != $post['id']) || $post['private']) {
|
||||||
DI::logger()->info('Post will not be exported', ['uid' => $post['uid'], 'postopts' => $post['postopts'], 'gravity' => $post['gravity'], 'private' => $post['private']]);
|
DI::logger()->info('Activities are never exported when we don\'t import the bluesky timeline', ['uid' => $post['uid']]);
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -601,11 +602,15 @@ function bluesky_hook_fork(array &$b)
|
||||||
|
|
||||||
function bluesky_post_local(array &$b)
|
function bluesky_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
if ($b['private'] || $b['parent']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -663,7 +668,7 @@ function bluesky_send(array &$b)
|
||||||
bluesky_create_activity($b, $parent);
|
bluesky_create_activity($b, $parent);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} elseif (($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'bluesky')) {
|
} elseif ($b['private'] || !strstr($b['postopts'], 'bluesky')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1055,7 +1060,6 @@ function bluesky_process_reason(stdClass $reason, string $uri, int $uid)
|
||||||
|
|
||||||
$item = [
|
$item = [
|
||||||
'network' => Protocol::BLUESKY,
|
'network' => Protocol::BLUESKY,
|
||||||
'protocol' => Conversation::PARCEL_CONNECTOR,
|
|
||||||
'uid' => $uid,
|
'uid' => $uid,
|
||||||
'wall' => false,
|
'wall' => false,
|
||||||
'uri' => $reason->by->did . '/app.bsky.feed.repost/' . $reason->indexedAt,
|
'uri' => $reason->by->did . '/app.bsky.feed.repost/' . $reason->indexedAt,
|
||||||
|
@ -1255,7 +1259,6 @@ function bluesky_get_header(stdClass $post, string $uri, int $uid, int $fetch_ui
|
||||||
$contact = bluesky_get_contact($post->author, $uid, $fetch_uid);
|
$contact = bluesky_get_contact($post->author, $uid, $fetch_uid);
|
||||||
$item = [
|
$item = [
|
||||||
'network' => Protocol::BLUESKY,
|
'network' => Protocol::BLUESKY,
|
||||||
'protocol' => Conversation::PARCEL_CONNECTOR,
|
|
||||||
'uid' => $uid,
|
'uid' => $uid,
|
||||||
'wall' => false,
|
'wall' => false,
|
||||||
'uri' => $uri,
|
'uri' => $uri,
|
||||||
|
@ -1294,7 +1297,6 @@ function bluesky_get_header(stdClass $post, string $uri, int $uid, int $fetch_ui
|
||||||
// When "ver" is set to "1" it was flagged by some automated process.
|
// When "ver" is set to "1" it was flagged by some automated process.
|
||||||
if (empty($label->ver)) {
|
if (empty($label->ver)) {
|
||||||
$item['sensitive'] = true;
|
$item['sensitive'] = true;
|
||||||
$item['content-warning'] = $label->val ?? '';
|
|
||||||
Logger::debug('Sensitive content', ['uri-id' => $item['uri-id'], 'label' => $label]);
|
Logger::debug('Sensitive content', ['uri-id' => $item['uri-id'], 'label' => $label]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1458,8 +1460,8 @@ function bluesky_add_media(stdClass $embed, array $item, int $fetch_uid, int $le
|
||||||
'url' => $embed->playlist,
|
'url' => $embed->playlist,
|
||||||
'preview' => $embed->thumbnail,
|
'preview' => $embed->thumbnail,
|
||||||
'description' => $embed->alt ?? '',
|
'description' => $embed->alt ?? '',
|
||||||
'height' => $embed->aspectRatio->height ?? null,
|
'height' => $embed->aspectRatio->height,
|
||||||
'width' => $embed->aspectRatio->width ?? null,
|
'width' => $embed->aspectRatio->width,
|
||||||
];
|
];
|
||||||
Post\Media::insert($media);
|
Post\Media::insert($media);
|
||||||
break;
|
break;
|
||||||
|
@ -1477,14 +1479,6 @@ function bluesky_add_media(stdClass $embed, array $item, int $fetch_uid, int $le
|
||||||
|
|
||||||
case 'app.bsky.embed.record#view':
|
case 'app.bsky.embed.record#view':
|
||||||
$original_uri = $uri = bluesky_get_uri($embed->record);
|
$original_uri = $uri = bluesky_get_uri($embed->record);
|
||||||
$type = '$type';
|
|
||||||
if (!empty($embed->record->record->$type)) {
|
|
||||||
$embed_type = $embed->record->record->$type;
|
|
||||||
if ($embed_type == 'app.bsky.graph.starterpack') {
|
|
||||||
bluesky_add_starterpack($item, $embed->record);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$uri = bluesky_fetch_missing_post($uri, $item['uid'], $fetch_uid, Item::PR_FETCHED, $item['contact-id'], $level, $last_poll);
|
$uri = bluesky_fetch_missing_post($uri, $item['uid'], $fetch_uid, Item::PR_FETCHED, $item['contact-id'], $level, $last_poll);
|
||||||
if ($uri) {
|
if ($uri) {
|
||||||
$shared = Post::selectFirst(['uri-id'], ['uri' => $uri, 'uid' => [$item['uid'], 0]]);
|
$shared = Post::selectFirst(['uri-id'], ['uri' => $uri, 'uid' => [$item['uid'], 0]]);
|
||||||
|
@ -1519,30 +1513,6 @@ function bluesky_add_media(stdClass $embed, array $item, int $fetch_uid, int $le
|
||||||
return $item;
|
return $item;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bluesky_add_starterpack(array $item, stdClass $record)
|
|
||||||
{
|
|
||||||
Logger::debug('Received starterpack', ['uri-id' => $item['uri-id'], 'guid' => $item['guid'], 'uri' => $record->uri]);
|
|
||||||
if (!preg_match('#^at://(.+)/app.bsky.graph.starterpack/(.+)#', $record->uri, $matches)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$media = [
|
|
||||||
'uri-id' => $item['uri-id'],
|
|
||||||
'type' => Post\Media::HTML,
|
|
||||||
'url' => 'https://bsky.app/starter-pack/' . $matches[1] . '/' . $matches[2],
|
|
||||||
'name' => $record->record->name,
|
|
||||||
'description' => $record->record->description,
|
|
||||||
];
|
|
||||||
|
|
||||||
Post\Media::insert($media);
|
|
||||||
|
|
||||||
$fields = [
|
|
||||||
'name' => $record->record->name,
|
|
||||||
'description' => $record->record->description,
|
|
||||||
];
|
|
||||||
Post\Media::update($fields, ['uri-id' => $media['uri-id'], 'url' => $media['url']]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function bluesky_get_uri(stdClass $post): string
|
function bluesky_get_uri(stdClass $post): string
|
||||||
{
|
{
|
||||||
if (empty($post->cid)) {
|
if (empty($post->cid)) {
|
||||||
|
@ -1647,7 +1617,7 @@ function bluesky_fetch_parents(stdClass $parent, int $uid, array $parents = []):
|
||||||
$parents = bluesky_fetch_parents($parent->parent, $uid, $parents);
|
$parents = bluesky_fetch_parents($parent->parent, $uid, $parents);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($parent->post) && empty(bluesky_fetch_post(bluesky_get_uri($parent->post), $uid))) {
|
if (empty(bluesky_fetch_post(bluesky_get_uri($parent->post), $uid))) {
|
||||||
$parents[] = $parent->post;
|
$parents[] = $parent->post;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1862,14 +1832,8 @@ function bluesky_get_preferences(int $uid): ?stdClass
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bluesky_get_did_by_profile(string $url, int $uid): string
|
function bluesky_get_did_by_profile(string $url): string
|
||||||
{
|
{
|
||||||
if (preg_match('#^' . BLUESKY_WEB . '/profile/(.+)#', $url, $matches)) {
|
|
||||||
$did = bluesky_get_did($matches[1], $uid);
|
|
||||||
if (!empty($did)) {
|
|
||||||
return $did;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::REQUEST => HttpClientRequest::CONTACTINFO]);
|
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::REQUEST => HttpClientRequest::CONTACTINFO]);
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
@ -1978,6 +1942,13 @@ function bluesky_get_did(string $handle, int $uid): string
|
||||||
return $did;
|
return $did;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The profile page can contain hints to the DID as well
|
||||||
|
$did = bluesky_get_did_by_profile('https://' . $handle);
|
||||||
|
if ($did != '') {
|
||||||
|
Logger::debug('Got DID by profile page', ['handle' => $handle, 'did' => $did]);
|
||||||
|
return $did;
|
||||||
|
}
|
||||||
|
|
||||||
// And finally we use the default PDS from Bluesky.
|
// And finally we use the default PDS from Bluesky.
|
||||||
$data = bluesky_get(BLUESKY_PDS . '/xrpc/com.atproto.identity.resolveHandle?handle=' . urlencode($handle));
|
$data = bluesky_get(BLUESKY_PDS . '/xrpc/com.atproto.identity.resolveHandle?handle=' . urlencode($handle));
|
||||||
if (!empty($data) && !empty($data->did)) {
|
if (!empty($data) && !empty($data->did)) {
|
||||||
|
|
|
@ -17,7 +17,6 @@ use Friendica\Core\Renderer;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Core\Worker;
|
use Friendica\Core\Worker;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
|
|
||||||
function diaspora_install()
|
function diaspora_install()
|
||||||
|
@ -145,10 +144,8 @@ function diaspora_hook_fork(array &$b)
|
||||||
|
|
||||||
$post = $b['data'];
|
$post = $b['data'];
|
||||||
|
|
||||||
if (
|
if ($post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) ||
|
||||||
$post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) ||
|
!strstr($post['postopts'] ?? '', 'diaspora') || ($post['parent'] != $post['id'])) {
|
||||||
!strstr($post['postopts'] ?? '', 'diaspora') || ($post['gravity'] != Item::GRAVITY_PARENT)
|
|
||||||
) {
|
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -156,11 +153,15 @@ function diaspora_hook_fork(array &$b)
|
||||||
|
|
||||||
function diaspora_post_local(array &$b)
|
function diaspora_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
if ($b['private'] || $b['parent']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +190,7 @@ function diaspora_send(array &$b)
|
||||||
|
|
||||||
Logger::notice('diaspora_send: invoked');
|
Logger::notice('diaspora_send: invoked');
|
||||||
|
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ use Friendica\Core\Hook;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
use Friendica\Model\Tag;
|
use Friendica\Model\Tag;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
|
@ -89,12 +88,16 @@ function dwpost_settings_post(array &$b)
|
||||||
|
|
||||||
function dwpost_post_local(array &$b)
|
function dwpost_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
// This can probably be changed to allow editing by pointing to a different API endpoint
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ((!DI::userSession()->getLocalUserId()) || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if ((!DI::userSession()->getLocalUserId()) || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can probably be changed to allow editing by pointing to a different API endpoint
|
if ($b['private'] || $b['parent']) {
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +122,7 @@ function dwpost_post_local(array &$b)
|
||||||
|
|
||||||
function dwpost_send(array &$b)
|
function dwpost_send(array &$b)
|
||||||
{
|
{
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
* Description: Open media attachments of posts into a fancybox overlay.
|
* Description: Open media attachments of posts into a fancybox overlay.
|
||||||
* Version: 1.05
|
* Version: 1.05
|
||||||
* Author: Grischa Brockhaus <grischa@brockha.us>
|
* Author: Grischa Brockhaus <grischa@brockha.us>
|
||||||
* Status: Unsupported
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
|
|
|
@ -14,7 +14,6 @@ use Friendica\Core\Hook;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Tag;
|
use Friendica\Model\Tag;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
@ -86,12 +85,17 @@ function ijpost_settings_post(array &$b)
|
||||||
|
|
||||||
function ijpost_post_local(array &$b)
|
function ijpost_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
// This can probably be changed to allow editing by pointing to a different API endpoint
|
||||||
|
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can probably be changed to allow editing by pointing to a different API endpoint
|
if ($b['private'] || $b['parent']) {
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +120,7 @@ function ijpost_post_local(array &$b)
|
||||||
|
|
||||||
function ijpost_send(array &$b)
|
function ijpost_send(array &$b)
|
||||||
{
|
{
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
|
|
||||||
function libertree_install()
|
function libertree_install()
|
||||||
|
@ -79,7 +78,9 @@ function libertree_settings_post(array &$b)
|
||||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post_by_default',intval($_POST['libertree_bydefault']));
|
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','post_by_default',intval($_POST['libertree_bydefault']));
|
||||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_api_token',trim($_POST['libertree_api_token']));
|
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_api_token',trim($_POST['libertree_api_token']));
|
||||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_url',trim($_POST['libertree_url']));
|
DI::pConfig()->set(DI::userSession()->getLocalUserId(),'libertree','libertree_url',trim($_POST['libertree_url']));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function libertree_hook_fork(array &$b)
|
function libertree_hook_fork(array &$b)
|
||||||
|
@ -90,10 +91,8 @@ function libertree_hook_fork(array &$b)
|
||||||
|
|
||||||
$post = $b['data'];
|
$post = $b['data'];
|
||||||
|
|
||||||
if (
|
if ($post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) ||
|
||||||
$post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) ||
|
!strstr($post['postopts'], 'libertree') || ($post['parent'] != $post['id'])) {
|
||||||
!strstr($post['postopts'], 'libertree') || ($post['gravity'] != Item::GRAVITY_PARENT)
|
|
||||||
) {
|
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -101,12 +100,18 @@ function libertree_hook_fork(array &$b)
|
||||||
|
|
||||||
function libertree_post_local(array &$b)
|
function libertree_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// This can probably be changed to allow editing by pointing to a different API endpoint
|
||||||
|
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can probably be changed to allow editing by pointing to a different API endpoint
|
if ($b['private'] || $b['parent']) {
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +138,7 @@ function libertree_send(array &$b)
|
||||||
{
|
{
|
||||||
Logger::notice('libertree_send: invoked');
|
Logger::notice('libertree_send: invoked');
|
||||||
|
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ use Friendica\Core\Hook;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
use Friendica\Model\Tag;
|
use Friendica\Model\Tag;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
|
@ -87,12 +86,16 @@ function ljpost_settings_post(array &$b)
|
||||||
|
|
||||||
function ljpost_post_local(array &$b)
|
function ljpost_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
// This can probably be changed to allow editing by pointing to a different API endpoint
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can probably be changed to allow editing by pointing to a different API endpoint
|
if ($b['private'] || $b['parent']) {
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +118,7 @@ function ljpost_post_local(array &$b)
|
||||||
|
|
||||||
function ljpost_send(array &$b)
|
function ljpost_send(array &$b)
|
||||||
{
|
{
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Renderer;
|
use Friendica\Core\Renderer;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Item;
|
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
use phpnut\phpnutException;
|
use phpnut\phpnutException;
|
||||||
|
|
||||||
|
@ -222,7 +221,7 @@ function pnut_hook_fork(array &$b)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strstr($post['postopts'] ?? '', 'pnut') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) {
|
if (!strstr($post['postopts'] ?? '', 'pnut') || ($post['parent'] != $post['id']) || $post['private']) {
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -230,11 +229,15 @@ function pnut_hook_fork(array &$b)
|
||||||
|
|
||||||
function pnut_post_local(array &$b)
|
function pnut_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
if ($b['private'] || $b['parent']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +265,7 @@ function pnut_post_hook(array &$b)
|
||||||
/**
|
/**
|
||||||
* Post to pnut.io
|
* Post to pnut.io
|
||||||
*/
|
*/
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -345,14 +345,14 @@ function pumpio_hook_fork(array &$b)
|
||||||
|
|
||||||
if (DI::pConfig()->get($post['uid'], 'pumpio', 'import')) {
|
if (DI::pConfig()->get($post['uid'], 'pumpio', 'import')) {
|
||||||
// Don't fork if it isn't a reply to a pump.io post
|
// Don't fork if it isn't a reply to a pump.io post
|
||||||
if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::PUMPIO])) {
|
if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::PUMPIO])) {
|
||||||
Logger::notice('No pump.io parent found for item ' . $post['id']);
|
Logger::notice('No pump.io parent found for item ' . $post['id']);
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Comments are never exported when we don't import the pumpio timeline
|
// Comments are never exported when we don't import the pumpio timeline
|
||||||
if (!strstr($post['postopts'], 'pumpio') || ($post['gravity'] != Item::GRAVITY_PARENT)|| ($post['private'] == Item::PRIVATE)) {
|
if (!strstr($post['postopts'], 'pumpio') || ($post['parent'] != $post['id']) || $post['private']) {
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,7 @@ function pumpio_send(array &$b)
|
||||||
|
|
||||||
Logger::notice('pumpio_send: receiver ', $receiver);
|
Logger::notice('pumpio_send: receiver ', $receiver);
|
||||||
|
|
||||||
if (!count($receiver) && ($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'pumpio')) {
|
if (!count($receiver) && ($b['private'] || !strstr($b['postopts'], 'pumpio'))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1319,7 +1319,7 @@ function pumpio_getreceiver(array $b)
|
||||||
{
|
{
|
||||||
$receiver = [];
|
$receiver = [];
|
||||||
|
|
||||||
if ($b['private'] != Item::PRIVATE) {
|
if (!$b['private']) {
|
||||||
if (!strstr($b['postopts'], 'pumpio')) {
|
if (!strstr($b['postopts'], 'pumpio')) {
|
||||||
return $receiver;
|
return $receiver;
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ function saml_sso_reply()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($user['uid'])) {
|
if (!empty($user['uid'])) {
|
||||||
DI::auth()->setForUser(DI::app(), $user);
|
DI::auth()->setForUser($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['RelayState']) && Utils::getSelfURL() != $_POST['RelayState']) {
|
if (isset($_POST['RelayState']) && Utils::getSelfURL() != $_POST['RelayState']) {
|
||||||
|
|
|
@ -82,7 +82,7 @@ function securemail_settings_post(array &$b)
|
||||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable);
|
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable);
|
||||||
|
|
||||||
if (!empty($_POST['securemail-test'])) {
|
if (!empty($_POST['securemail-test'])) {
|
||||||
$res = DI::emailer()->send(new SecureTestEmail(DI::app(), DI::config(), DI::pConfig(), DI::baseUrl()));
|
$res = DI::emailer()->send(new SecureTestEmail(DI::config(), DI::pConfig(), DI::baseUrl()));
|
||||||
|
|
||||||
// revert to saved value
|
// revert to saved value
|
||||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable);
|
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'securemail', 'enable', $enable);
|
||||||
|
|
|
@ -296,7 +296,7 @@ function statusnet_hook_fork(array &$b)
|
||||||
|
|
||||||
$post = $b['data'];
|
$post = $b['data'];
|
||||||
|
|
||||||
if ($post['deleted'] || ($post['created'] !== $post['edited']) || strpos($post['postopts'] ?? '', 'statusnet') === false || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) {
|
if ($post['deleted'] || ($post['created'] !== $post['edited']) || strpos($post['postopts'] ?? '', 'statusnet') === false || ($post['parent'] != $post['id']) || $post['private']) {
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -336,7 +336,7 @@ function statusnet_post_hook(array &$b)
|
||||||
/**
|
/**
|
||||||
* Post to GNU Social
|
* Post to GNU Social
|
||||||
*/
|
*/
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,13 +439,11 @@ function statusnet_addon_admin_post()
|
||||||
$secret = trim($_POST['secret'][$id]);
|
$secret = trim($_POST['secret'][$id]);
|
||||||
$key = trim($_POST['key'][$id]);
|
$key = trim($_POST['key'][$id]);
|
||||||
//$applicationname = (!empty($_POST['applicationname']) ? Strings::escapeTags(trim($_POST['applicationname'][$id])):'');
|
//$applicationname = (!empty($_POST['applicationname']) ? Strings::escapeTags(trim($_POST['applicationname'][$id])):'');
|
||||||
if (
|
if ($sitename != '' &&
|
||||||
$sitename != '' &&
|
|
||||||
$apiurl != '' &&
|
$apiurl != '' &&
|
||||||
$secret != '' &&
|
$secret != '' &&
|
||||||
$key != '' &&
|
$key != '' &&
|
||||||
empty($_POST['delete'][$id])
|
empty($_POST['delete'][$id])) {
|
||||||
) {
|
|
||||||
|
|
||||||
$sites[] = [
|
$sites[] = [
|
||||||
'sitename' => $sitename,
|
'sitename' => $sitename,
|
||||||
|
|
|
@ -22,7 +22,6 @@ use Friendica\Core\Worker;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Conversation;
|
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
|
@ -32,6 +31,7 @@ use Friendica\Network\HTTPClient\Client\HttpClientAccept;
|
||||||
use Friendica\Network\HTTPClient\Client\HttpClientOptions;
|
use Friendica\Network\HTTPClient\Client\HttpClientOptions;
|
||||||
use Friendica\Protocol\Activity;
|
use Friendica\Protocol\Activity;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
use Friendica\Util\Network;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use GuzzleHttp\Exception\RequestException;
|
use GuzzleHttp\Exception\RequestException;
|
||||||
|
@ -477,13 +477,13 @@ function tumblr_hook_fork(array &$b)
|
||||||
|
|
||||||
if (DI::pConfig()->get($post['uid'], 'tumblr', 'import')) {
|
if (DI::pConfig()->get($post['uid'], 'tumblr', 'import')) {
|
||||||
// Don't post if it isn't a reply to a tumblr post
|
// Don't post if it isn't a reply to a tumblr post
|
||||||
if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::TUMBLR])) {
|
if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::TUMBLR])) {
|
||||||
Logger::notice('No tumblr parent found', ['item' => $post['id']]);
|
Logger::notice('No tumblr parent found', ['item' => $post['id']]);
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} elseif (!strstr($post['postopts'] ?? '', 'tumblr') || ($post['gravity'] != Item::GRAVITY_PARENT) || ($post['private'] == Item::PRIVATE)) {
|
} elseif (!strstr($post['postopts'] ?? '', 'tumblr') || ($post['parent'] != $post['id']) || $post['private']) {
|
||||||
DI::logger()->info('Post will not be exported', ['uid' => $post['uid'], 'postopts' => $post['postopts'], 'gravity' => $post['gravity'], 'private' => $post['private']]);
|
DI::logger()->info('Activities are never exported when we don\'t import the tumblr timeline', ['uid' => $post['uid']]);
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -491,11 +491,15 @@ function tumblr_hook_fork(array &$b)
|
||||||
|
|
||||||
function tumblr_post_local(array &$b)
|
function tumblr_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
if ($b['private'] || $b['parent']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,7 +575,7 @@ function tumblr_send(array &$b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} elseif (($b['private'] == Item::PRIVATE) || !strstr($b['postopts'], 'tumblr')) {
|
} elseif ($b['private'] || !strstr($b['postopts'], 'tumblr')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,7 +850,6 @@ function tumblr_get_header(stdClass $post, string $uri, int $uid): array
|
||||||
$contact = tumblr_get_contact($post->blog, $uid);
|
$contact = tumblr_get_contact($post->blog, $uid);
|
||||||
$item = [
|
$item = [
|
||||||
'network' => Protocol::TUMBLR,
|
'network' => Protocol::TUMBLR,
|
||||||
'protocol' => Conversation::PARCEL_CONNECTOR,
|
|
||||||
'uid' => $uid,
|
'uid' => $uid,
|
||||||
'wall' => false,
|
'wall' => false,
|
||||||
'uri' => $uri,
|
'uri' => $uri,
|
||||||
|
|
|
@ -170,7 +170,7 @@ function twitter_hook_fork(array &$b)
|
||||||
$post = $b['data'];
|
$post = $b['data'];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) ||
|
$post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) ||
|
||||||
!strstr($post['postopts'], 'twitter') || ($post['gravity'] != Item::GRAVITY_PARENT)
|
!strstr($post['postopts'], 'twitter') || ($post['gravity'] != Item::GRAVITY_PARENT)
|
||||||
) {
|
) {
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
|
@ -184,7 +184,7 @@ function twitter_post_local(array &$b)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
if ($b['edit'] || $b['private'] || $b['parent']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ function twitter_post_hook(array &$b)
|
||||||
{
|
{
|
||||||
DI::logger()->debug('Invoke post hook', $b);
|
DI::logger()->debug('Invoke post hook', $b);
|
||||||
|
|
||||||
if (($b['gravity'] != Item::GRAVITY_PARENT) || !strstr($b['postopts'], 'twitter') || ($b['private'] == Item::PRIVATE) || $b['deleted'] || ($b['created'] !== $b['edited'])) {
|
if (($b['gravity'] != Item::GRAVITY_PARENT) || !strstr($b['postopts'], 'twitter') || $b['private'] || $b['deleted'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,10 @@
|
||||||
|
|
||||||
use Friendica\Addon\webdav_storage\src\WebDav;
|
use Friendica\Addon\webdav_storage\src\WebDav;
|
||||||
use Friendica\Addon\webdav_storage\src\WebDavConfig;
|
use Friendica\Addon\webdav_storage\src\WebDavConfig;
|
||||||
use Friendica\App;
|
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
|
||||||
function webdav_storage_install($a)
|
function webdav_storage_install()
|
||||||
{
|
{
|
||||||
Hook::register('storage_instance' , __FILE__, 'webdav_storage_instance');
|
Hook::register('storage_instance' , __FILE__, 'webdav_storage_instance');
|
||||||
Hook::register('storage_config' , __FILE__, 'webdav_storage_config');
|
Hook::register('storage_config' , __FILE__, 'webdav_storage_config');
|
||||||
|
|
|
@ -108,8 +108,8 @@ function wppost_hook_fork(array &$b)
|
||||||
$post = $b['data'];
|
$post = $b['data'];
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$post['deleted'] || ($post['private'] == Item::PRIVATE) || ($post['created'] !== $post['edited']) ||
|
$post['deleted'] || $post['private'] || ($post['created'] !== $post['edited']) ||
|
||||||
!strstr($post['postopts'] ?? '', 'wppost') || ($post['gravity'] != Item::GRAVITY_PARENT)
|
!strstr($post['postopts'] ?? '', 'wppost') || ($post['parent'] != $post['id'])
|
||||||
) {
|
) {
|
||||||
$b['execute'] = false;
|
$b['execute'] = false;
|
||||||
return;
|
return;
|
||||||
|
@ -118,12 +118,18 @@ function wppost_hook_fork(array &$b)
|
||||||
|
|
||||||
function wppost_post_local(array &$b)
|
function wppost_post_local(array &$b)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// This can probably be changed to allow editing by pointing to a different API endpoint
|
||||||
|
|
||||||
|
if ($b['edit']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
if (!DI::userSession()->getLocalUserId() || (DI::userSession()->getLocalUserId() != $b['uid'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This can probably be changed to allow editing by pointing to a different API endpoint
|
if ($b['private'] || $b['parent']) {
|
||||||
if ($b['edit'] || ($b['private'] == Item::PRIVATE) || ($b['gravity'] != Item::GRAVITY_PARENT)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,9 +152,12 @@ function wppost_post_local(array &$b)
|
||||||
$b['postopts'] .= 'wppost';
|
$b['postopts'] .= 'wppost';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function wppost_send(array &$b)
|
function wppost_send(array &$b)
|
||||||
{
|
{
|
||||||
if ($b['deleted'] || ($b['private'] == Item::PRIVATE) || ($b['created'] !== $b['edited'])) {
|
if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue