fix:修复BUG/升级1.1.6版本
This commit is contained in:
17
vendor/autoload.php
vendored
17
vendor/autoload.php
vendored
@@ -3,8 +3,21 @@
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
if (PHP_VERSION_ID < 50600) {
|
||||
echo '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;
|
||||
exit(1);
|
||||
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';
|
||||
|
||||
6
vendor/bacon/bacon-qr-code/composer.json
vendored
6
vendor/bacon/bacon-qr-code/composer.json
vendored
@@ -34,5 +34,11 @@
|
||||
"allow-plugins": {
|
||||
"ocramius/package-versions": true
|
||||
}
|
||||
},
|
||||
"archive": {
|
||||
"exclude": [
|
||||
"/test",
|
||||
"/phpunit.xml.dist"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
13
vendor/bacon/bacon-qr-code/phpunit.xml.dist
vendored
Normal file
13
vendor/bacon/bacon-qr-code/phpunit.xml.dist
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" bootstrap="vendor/autoload.php" colors="true">
|
||||
<coverage processUncoveredFiles="true">
|
||||
<include>
|
||||
<directory suffix=".php">src</directory>
|
||||
</include>
|
||||
</coverage>
|
||||
<testsuites>
|
||||
<testsuite name="BaconQrCode Tests">
|
||||
<directory>./test</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
@@ -89,6 +89,9 @@ final class CharacterSetEci extends AbstractEnum
|
||||
*/
|
||||
private static $nameToEci;
|
||||
|
||||
/**
|
||||
* @param int[] $values
|
||||
*/
|
||||
public function __construct(array $values, string ...$otherEncodingNames)
|
||||
{
|
||||
$this->values = $values;
|
||||
|
||||
@@ -62,7 +62,7 @@ class FormatInformation
|
||||
/**
|
||||
* Offset i holds the number of 1 bits in the binary representation of i.
|
||||
*
|
||||
* @var array
|
||||
* @var int[]
|
||||
*/
|
||||
private const BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@ final class Mode extends AbstractEnum
|
||||
*/
|
||||
private $bits;
|
||||
|
||||
/**
|
||||
* @param int[] $characterCountBitsForVersions
|
||||
*/
|
||||
protected function __construct(array $characterCountBitsForVersions, int $bits)
|
||||
{
|
||||
$this->characterCountBitsForVersions = $characterCountBitsForVersions;
|
||||
|
||||
@@ -37,7 +37,7 @@ final class Encoder
|
||||
/**
|
||||
* Codec cache.
|
||||
*
|
||||
* @var array
|
||||
* @var array<string,ReedSolomonCodec>
|
||||
*/
|
||||
private static $codecs = [];
|
||||
|
||||
|
||||
@@ -334,7 +334,7 @@ final class SvgImageBackEnd implements ImageBackEndInterface
|
||||
$this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor));
|
||||
|
||||
if ($startColor instanceof Alpha) {
|
||||
$this->xmlWriter->writeAttribute('stop-opacity', $startColor->getAlpha());
|
||||
$this->xmlWriter->writeAttribute('stop-opacity', (string) $startColor->getAlpha());
|
||||
}
|
||||
|
||||
$this->xmlWriter->endElement();
|
||||
@@ -344,7 +344,7 @@ final class SvgImageBackEnd implements ImageBackEndInterface
|
||||
$this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor));
|
||||
|
||||
if ($endColor instanceof Alpha) {
|
||||
$this->xmlWriter->writeAttribute('stop-opacity', $endColor->getAlpha());
|
||||
$this->xmlWriter->writeAttribute('stop-opacity', (string) $endColor->getAlpha());
|
||||
}
|
||||
|
||||
$this->xmlWriter->endElement();
|
||||
|
||||
@@ -41,7 +41,7 @@ final class EdgeIterator implements IteratorAggregate
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Edge[]
|
||||
* @return Traversable<Edge>
|
||||
*/
|
||||
public function getIterator() : Traversable
|
||||
{
|
||||
|
||||
@@ -136,7 +136,7 @@ final class EllipticArc implements OperationInterface
|
||||
/**
|
||||
* @return Curve[]
|
||||
*/
|
||||
private function createCurves(float $fromX, $fromY) : array
|
||||
private function createCurves(float $fromX, float $fromY) : array
|
||||
{
|
||||
$xAngle = deg2rad($this->xAxisAngle);
|
||||
list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) =
|
||||
|
||||
@@ -17,10 +17,16 @@ use BaconQrCode\Writer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Spatie\Snapshots\MatchesSnapshots;
|
||||
|
||||
/**
|
||||
* @group integration
|
||||
*/
|
||||
final class ImagickRenderingTest extends TestCase
|
||||
{
|
||||
use MatchesSnapshots;
|
||||
|
||||
/**
|
||||
* @requires extension imagick
|
||||
*/
|
||||
public function testGenericQrCode() : void
|
||||
{
|
||||
$renderer = new ImageRenderer(
|
||||
@@ -35,6 +41,9 @@ final class ImagickRenderingTest extends TestCase
|
||||
unlink($tempName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension imagick
|
||||
*/
|
||||
public function testIssue79() : void
|
||||
{
|
||||
$eye = SquareEye::instance();
|
||||
|
||||
120
vendor/bin/var-dump-server
vendored
Normal file
120
vendor/bin/var-dump-server
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Proxy PHP file generated by Composer
|
||||
*
|
||||
* This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
|
||||
* using a stream wrapper to prevent the shebang from being output on PHP<8
|
||||
*
|
||||
* @generated
|
||||
*/
|
||||
|
||||
namespace Composer;
|
||||
|
||||
$GLOBALS['_composer_bin_dir'] = __DIR__;
|
||||
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
|
||||
|
||||
if (PHP_VERSION_ID < 80000) {
|
||||
if (!class_exists('Composer\BinProxyWrapper')) {
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class BinProxyWrapper
|
||||
{
|
||||
private $handle;
|
||||
private $position;
|
||||
private $realpath;
|
||||
|
||||
public function stream_open($path, $mode, $options, &$opened_path)
|
||||
{
|
||||
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
|
||||
$opened_path = substr($path, 17);
|
||||
$this->realpath = realpath($opened_path) ?: $opened_path;
|
||||
$opened_path = $this->realpath;
|
||||
$this->handle = fopen($this->realpath, $mode);
|
||||
$this->position = 0;
|
||||
|
||||
return (bool) $this->handle;
|
||||
}
|
||||
|
||||
public function stream_read($count)
|
||||
{
|
||||
$data = fread($this->handle, $count);
|
||||
|
||||
if ($this->position === 0) {
|
||||
$data = preg_replace('{^#!.*\r?\n}', '', $data);
|
||||
}
|
||||
|
||||
$this->position += strlen($data);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function stream_cast($castAs)
|
||||
{
|
||||
return $this->handle;
|
||||
}
|
||||
|
||||
public function stream_close()
|
||||
{
|
||||
fclose($this->handle);
|
||||
}
|
||||
|
||||
public function stream_lock($operation)
|
||||
{
|
||||
return $operation ? flock($this->handle, $operation) : true;
|
||||
}
|
||||
|
||||
public function stream_seek($offset, $whence)
|
||||
{
|
||||
if (0 === fseek($this->handle, $offset, $whence)) {
|
||||
$this->position = ftell($this->handle);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function stream_tell()
|
||||
{
|
||||
return $this->position;
|
||||
}
|
||||
|
||||
public function stream_eof()
|
||||
{
|
||||
return feof($this->handle);
|
||||
}
|
||||
|
||||
public function stream_stat()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
public function stream_set_option($option, $arg1, $arg2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function url_stat($path, $flags)
|
||||
{
|
||||
$path = substr($path, 17);
|
||||
if (file_exists($path)) {
|
||||
return stat($path);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
(function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
|
||||
|| (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
|
||||
) {
|
||||
include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';
|
||||
5
vendor/bin/var-dump-server.bat
vendored
Normal file
5
vendor/bin/var-dump-server.bat
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
@ECHO OFF
|
||||
setlocal DISABLEDELAYEDEXPANSION
|
||||
SET BIN_TARGET=%~dp0/var-dump-server
|
||||
SET COMPOSER_RUNTIME_BIN_DIR=%~dp0
|
||||
php "%BIN_TARGET%" %*
|
||||
37
vendor/composer/ClassLoader.php
vendored
37
vendor/composer/ClassLoader.php
vendored
@@ -42,6 +42,9 @@ namespace Composer\Autoload;
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
/** @var \Closure(string):void */
|
||||
private static $includeFile;
|
||||
|
||||
/** @var ?string */
|
||||
private $vendorDir;
|
||||
|
||||
@@ -106,6 +109,7 @@ class ClassLoader
|
||||
public function __construct($vendorDir = null)
|
||||
{
|
||||
$this->vendorDir = $vendorDir;
|
||||
self::initializeIncludeClosure();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -425,7 +429,7 @@ class ClassLoader
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
includeFile($file);
|
||||
(self::$includeFile)($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -555,18 +559,23 @@ class ClassLoader
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*
|
||||
* @param string $file
|
||||
* @return void
|
||||
* @private
|
||||
*/
|
||||
function includeFile($file)
|
||||
{
|
||||
include $file;
|
||||
private static function initializeIncludeClosure(): void
|
||||
{
|
||||
if (self::$includeFile !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
self::$includeFile = static function($file) {
|
||||
include $file;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
1
vendor/composer/autoload_classmap.php
vendored
1
vendor/composer/autoload_classmap.php
vendored
@@ -8,7 +8,6 @@ $baseDir = dirname($vendorDir);
|
||||
return array(
|
||||
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
|
||||
'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
|
||||
'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
|
||||
19
vendor/composer/autoload_files.php
vendored
19
vendor/composer/autoload_files.php
vendored
@@ -6,30 +6,25 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php',
|
||||
'538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php',
|
||||
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
|
||||
'c5521cebe610a9bf42c44b3a5163adfd' => $vendorDir . '/overtrue/socialite/src/Contracts/FactoryInterface.php',
|
||||
'ccd11c8e7dd9b33638b248681bdfba27' => $vendorDir . '/overtrue/socialite/src/Contracts/UserInterface.php',
|
||||
'5649552725dea6ec47381627600e3ac1' => $vendorDir . '/overtrue/socialite/src/Contracts/ProviderInterface.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => $vendorDir . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'6b998e7ad3182c0d21d23780badfa07b' => $vendorDir . '/yansongda/supports/src/Functions.php',
|
||||
'dc1275c308c5b416beb314b6317daca2' => $vendorDir . '/overtrue/pinyin/src/const.php',
|
||||
'f0e7e63bbb278a92db02393536748c5f' => $vendorDir . '/overtrue/wechat/src/Kernel/Support/Helpers.php',
|
||||
'6747f579ad6817f318cc3a7e7a0abb93' => $vendorDir . '/overtrue/wechat/src/Kernel/Helpers.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php',
|
||||
'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',
|
||||
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
'8c783b3a3de2f6d9177022b5ccdcc841' => $vendorDir . '/yansongda/pay/src/Functions.php',
|
||||
'fe146f35de045d8ffe923710b1f98ecc' => $baseDir . '/support/helpers.php',
|
||||
);
|
||||
|
||||
2
vendor/composer/autoload_namespaces.php
vendored
2
vendor/composer/autoload_namespaces.php
vendored
@@ -6,6 +6,6 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Pimple' => array($vendorDir . '/pimple/pimple/src'),
|
||||
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
|
||||
'' => array($baseDir . '/extend'),
|
||||
);
|
||||
|
||||
23
vendor/composer/autoload_psr4.php
vendored
23
vendor/composer/autoload_psr4.php
vendored
@@ -9,6 +9,7 @@ return array(
|
||||
'think\\' => array($vendorDir . '/topthink/think-cache/src', $vendorDir . '/topthink/think-container/src', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-image/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/topthink/think-validate/src'),
|
||||
'support\\' => array($vendorDir . '/workerman/webman-framework/src/support'),
|
||||
'app\\' => array($baseDir . '/app'),
|
||||
'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
|
||||
'Yansongda\\Supports\\' => array($vendorDir . '/yansongda/supports/src'),
|
||||
'Yansongda\\Pay\\' => array($vendorDir . '/yansongda/pay/src'),
|
||||
'Workerman\\Redis\\' => array($vendorDir . '/workerman/redis/src'),
|
||||
@@ -20,26 +21,19 @@ return array(
|
||||
'Webman\\GatewayWorker\\' => array($vendorDir . '/webman/gateway-worker/src'),
|
||||
'Webman\\Event\\' => array($vendorDir . '/webman/event/src'),
|
||||
'Webman\\Console\\' => array($vendorDir . '/webman/console/src'),
|
||||
'Webman\\Captcha\\' => array($vendorDir . '/webman/captcha/src'),
|
||||
'Webman\\' => array($vendorDir . '/workerman/webman-framework/src'),
|
||||
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
|
||||
'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
|
||||
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'),
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'),
|
||||
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
||||
'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'),
|
||||
'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
|
||||
'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
|
||||
'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
|
||||
'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
|
||||
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
|
||||
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
|
||||
'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
|
||||
'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
|
||||
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
|
||||
'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
|
||||
'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
|
||||
'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'),
|
||||
'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
|
||||
'Support\\View\\' => array($vendorDir . '/workerman/webman-framework/src/support/view'),
|
||||
'Support\\Exception\\' => array($vendorDir . '/workerman/webman-framework/src/support/exception'),
|
||||
'Support\\Bootstrap\\' => array($vendorDir . '/workerman/webman-framework/src/support/bootstrap'),
|
||||
@@ -51,29 +45,26 @@ return array(
|
||||
'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
|
||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
|
||||
'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'),
|
||||
'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
|
||||
'PhpDocReader\\' => array($vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader'),
|
||||
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
|
||||
'Overtrue\\Socialite\\' => array($vendorDir . '/overtrue/socialite/src'),
|
||||
'Overtrue\\Pinyin\\' => array($vendorDir . '/overtrue/pinyin/src'),
|
||||
'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
|
||||
'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
|
||||
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
||||
'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
|
||||
'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'),
|
||||
'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
|
||||
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
|
||||
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
|
||||
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
|
||||
'Gregwar\\' => array($vendorDir . '/gregwar/captcha/src/Gregwar'),
|
||||
'GrahamCampbell\\ResultType\\' => array($vendorDir . '/graham-campbell/result-type/src'),
|
||||
'GatewayWorker\\' => array($vendorDir . '/workerman/gateway-worker/src'),
|
||||
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
||||
'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'),
|
||||
'EasyWeChat\\' => array($vendorDir . '/overtrue/wechat/src'),
|
||||
'EasyWeChatComposer\\' => array($vendorDir . '/easywechat-composer/easywechat-composer/src'),
|
||||
'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
|
||||
'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'),
|
||||
'DI\\' => array($vendorDir . '/php-di/php-di/src'),
|
||||
'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'),
|
||||
'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
|
||||
'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'),
|
||||
'' => array($baseDir . '/'),
|
||||
);
|
||||
|
||||
27
vendor/composer/autoload_real.php
vendored
27
vendor/composer/autoload_real.php
vendored
@@ -33,25 +33,18 @@ class ComposerAutoloaderInitfa49c619328634587e27f2ef69b215b7
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
$includeFiles = \Composer\Autoload\ComposerStaticInitfa49c619328634587e27f2ef69b215b7::$files;
|
||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
||||
composerRequirefa49c619328634587e27f2ef69b215b7($fileIdentifier, $file);
|
||||
$filesToLoad = \Composer\Autoload\ComposerStaticInitfa49c619328634587e27f2ef69b215b7::$files;
|
||||
$requireFile = static function ($fileIdentifier, $file) {
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
||||
require $file;
|
||||
}
|
||||
};
|
||||
foreach ($filesToLoad as $fileIdentifier => $file) {
|
||||
($requireFile)($fileIdentifier, $file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $fileIdentifier
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
function composerRequirefa49c619328634587e27f2ef69b215b7($fileIdentifier, $file)
|
||||
{
|
||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
||||
|
||||
require $file;
|
||||
}
|
||||
}
|
||||
|
||||
139
vendor/composer/autoload_static.php
vendored
139
vendor/composer/autoload_static.php
vendored
@@ -7,30 +7,25 @@ namespace Composer\Autoload;
|
||||
class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
{
|
||||
public static $files = array (
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
|
||||
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
||||
'9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
|
||||
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
|
||||
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
|
||||
'253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php',
|
||||
'538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php',
|
||||
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
|
||||
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
||||
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
|
||||
'c5521cebe610a9bf42c44b3a5163adfd' => __DIR__ . '/..' . '/overtrue/socialite/src/Contracts/FactoryInterface.php',
|
||||
'ccd11c8e7dd9b33638b248681bdfba27' => __DIR__ . '/..' . '/overtrue/socialite/src/Contracts/UserInterface.php',
|
||||
'5649552725dea6ec47381627600e3ac1' => __DIR__ . '/..' . '/overtrue/socialite/src/Contracts/ProviderInterface.php',
|
||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
|
||||
'35fab96057f1bf5e7aba31a8a6d5fdde' => __DIR__ . '/..' . '/topthink/think-orm/stubs/load_stubs.php',
|
||||
'6b998e7ad3182c0d21d23780badfa07b' => __DIR__ . '/..' . '/yansongda/supports/src/Functions.php',
|
||||
'dc1275c308c5b416beb314b6317daca2' => __DIR__ . '/..' . '/overtrue/pinyin/src/const.php',
|
||||
'f0e7e63bbb278a92db02393536748c5f' => __DIR__ . '/..' . '/overtrue/wechat/src/Kernel/Support/Helpers.php',
|
||||
'6747f579ad6817f318cc3a7e7a0abb93' => __DIR__ . '/..' . '/overtrue/wechat/src/Kernel/Helpers.php',
|
||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||
'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php',
|
||||
'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',
|
||||
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
|
||||
'8c783b3a3de2f6d9177022b5ccdcc841' => __DIR__ . '/..' . '/yansongda/pay/src/Functions.php',
|
||||
'fe146f35de045d8ffe923710b1f98ecc' => __DIR__ . '/../..' . '/support/helpers.php',
|
||||
);
|
||||
@@ -48,6 +43,10 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
'app\\' => 4,
|
||||
),
|
||||
'Z' =>
|
||||
array (
|
||||
'ZipStream\\' => 10,
|
||||
),
|
||||
'Y' =>
|
||||
array (
|
||||
'Yansongda\\Supports\\' => 19,
|
||||
@@ -64,29 +63,22 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
'Webman\\GatewayWorker\\' => 21,
|
||||
'Webman\\Event\\' => 13,
|
||||
'Webman\\Console\\' => 15,
|
||||
'Webman\\Captcha\\' => 15,
|
||||
'Webman\\' => 7,
|
||||
),
|
||||
'S' =>
|
||||
array (
|
||||
'Symfony\\Polyfill\\Php80\\' => 23,
|
||||
'Symfony\\Polyfill\\Php73\\' => 23,
|
||||
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
||||
'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
|
||||
'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31,
|
||||
'Symfony\\Polyfill\\Ctype\\' => 23,
|
||||
'Symfony\\Contracts\\Translation\\' => 30,
|
||||
'Symfony\\Contracts\\Service\\' => 26,
|
||||
'Symfony\\Contracts\\EventDispatcher\\' => 34,
|
||||
'Symfony\\Contracts\\Cache\\' => 24,
|
||||
'Symfony\\Component\\VarExporter\\' => 30,
|
||||
'Symfony\\Component\\VarDumper\\' => 28,
|
||||
'Symfony\\Component\\Translation\\' => 30,
|
||||
'Symfony\\Component\\String\\' => 25,
|
||||
'Symfony\\Component\\HttpFoundation\\' => 33,
|
||||
'Symfony\\Component\\Finder\\' => 25,
|
||||
'Symfony\\Component\\EventDispatcher\\' => 34,
|
||||
'Symfony\\Component\\Console\\' => 26,
|
||||
'Symfony\\Component\\Cache\\' => 24,
|
||||
'Symfony\\Bridge\\PsrHttpMessage\\' => 30,
|
||||
'Support\\View\\' => 13,
|
||||
'Support\\Exception\\' => 18,
|
||||
'Support\\Bootstrap\\' => 18,
|
||||
@@ -101,19 +93,20 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
'Psr\\EventDispatcher\\' => 20,
|
||||
'Psr\\Container\\' => 14,
|
||||
'Psr\\Cache\\' => 10,
|
||||
'PhpOption\\' => 10,
|
||||
'PhpOffice\\PhpSpreadsheet\\' => 25,
|
||||
'PhpDocReader\\' => 13,
|
||||
'PHPMailer\\PHPMailer\\' => 20,
|
||||
),
|
||||
'O' =>
|
||||
array (
|
||||
'Overtrue\\Socialite\\' => 19,
|
||||
'Overtrue\\Pinyin\\' => 16,
|
||||
'Opis\\Closure\\' => 13,
|
||||
),
|
||||
'M' =>
|
||||
array (
|
||||
'MyCLabs\\Enum\\' => 13,
|
||||
'Monolog\\' => 8,
|
||||
'Matrix\\' => 7,
|
||||
),
|
||||
'L' =>
|
||||
array (
|
||||
@@ -128,8 +121,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
'GuzzleHttp\\Psr7\\' => 16,
|
||||
'GuzzleHttp\\Promise\\' => 19,
|
||||
'GuzzleHttp\\' => 11,
|
||||
'Gregwar\\' => 8,
|
||||
'GrahamCampbell\\ResultType\\' => 26,
|
||||
'GatewayWorker\\' => 14,
|
||||
),
|
||||
'F' =>
|
||||
@@ -139,16 +130,17 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
'E' =>
|
||||
array (
|
||||
'Endroid\\QrCode\\' => 15,
|
||||
'EasyWeChat\\' => 11,
|
||||
'EasyWeChatComposer\\' => 19,
|
||||
),
|
||||
'D' =>
|
||||
array (
|
||||
'Dotenv\\' => 7,
|
||||
'Doctrine\\Inflector\\' => 19,
|
||||
'DI\\' => 3,
|
||||
'DASPRiD\\Enum\\' => 13,
|
||||
),
|
||||
'C' =>
|
||||
array (
|
||||
'Complex\\' => 8,
|
||||
),
|
||||
'B' =>
|
||||
array (
|
||||
'BaconQrCode\\' => 12,
|
||||
@@ -174,6 +166,10 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/../..' . '/app',
|
||||
),
|
||||
'ZipStream\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
|
||||
),
|
||||
'Yansongda\\Supports\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/yansongda/supports/src',
|
||||
@@ -218,6 +214,10 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/webman/console/src',
|
||||
),
|
||||
'Webman\\Captcha\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/webman/captcha/src',
|
||||
),
|
||||
'Webman\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/workerman/webman-framework/src',
|
||||
@@ -226,10 +226,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
|
||||
),
|
||||
'Symfony\\Polyfill\\Php73\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php73',
|
||||
),
|
||||
'Symfony\\Polyfill\\Mbstring\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
||||
@@ -254,17 +250,9 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/service-contracts',
|
||||
),
|
||||
'Symfony\\Contracts\\EventDispatcher\\' =>
|
||||
'Symfony\\Component\\VarDumper\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts',
|
||||
),
|
||||
'Symfony\\Contracts\\Cache\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/cache-contracts',
|
||||
),
|
||||
'Symfony\\Component\\VarExporter\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/var-exporter',
|
||||
0 => __DIR__ . '/..' . '/symfony/var-dumper',
|
||||
),
|
||||
'Symfony\\Component\\Translation\\' =>
|
||||
array (
|
||||
@@ -274,30 +262,10 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/string',
|
||||
),
|
||||
'Symfony\\Component\\HttpFoundation\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/http-foundation',
|
||||
),
|
||||
'Symfony\\Component\\Finder\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/finder',
|
||||
),
|
||||
'Symfony\\Component\\EventDispatcher\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
|
||||
),
|
||||
'Symfony\\Component\\Console\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/console',
|
||||
),
|
||||
'Symfony\\Component\\Cache\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/cache',
|
||||
),
|
||||
'Symfony\\Bridge\\PsrHttpMessage\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/symfony/psr-http-message-bridge',
|
||||
),
|
||||
'Support\\View\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/workerman/webman-framework/src/support/view',
|
||||
@@ -343,9 +311,9 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/psr/cache/src',
|
||||
),
|
||||
'PhpOption\\' =>
|
||||
'PhpOffice\\PhpSpreadsheet\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption',
|
||||
0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
|
||||
),
|
||||
'PhpDocReader\\' =>
|
||||
array (
|
||||
@@ -355,10 +323,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
|
||||
),
|
||||
'Overtrue\\Socialite\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/overtrue/socialite/src',
|
||||
),
|
||||
'Overtrue\\Pinyin\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/overtrue/pinyin/src',
|
||||
@@ -367,10 +331,18 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/opis/closure/src',
|
||||
),
|
||||
'MyCLabs\\Enum\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/myclabs/php-enum/src',
|
||||
),
|
||||
'Monolog\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
|
||||
),
|
||||
'Matrix\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
|
||||
),
|
||||
'Laravel\\SerializableClosure\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/laravel/serializable-closure/src',
|
||||
@@ -391,14 +363,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
|
||||
),
|
||||
'Gregwar\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/gregwar/captcha/src/Gregwar',
|
||||
),
|
||||
'GrahamCampbell\\ResultType\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/graham-campbell/result-type/src',
|
||||
),
|
||||
'GatewayWorker\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/workerman/gateway-worker/src',
|
||||
@@ -411,18 +375,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/endroid/qr-code/src',
|
||||
),
|
||||
'EasyWeChat\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/overtrue/wechat/src',
|
||||
),
|
||||
'EasyWeChatComposer\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/easywechat-composer/easywechat-composer/src',
|
||||
),
|
||||
'Dotenv\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/vlucas/phpdotenv/src',
|
||||
),
|
||||
'Doctrine\\Inflector\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector',
|
||||
@@ -435,6 +387,10 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/dasprid/enum/src',
|
||||
),
|
||||
'Complex\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/markbaker/complex/classes/src',
|
||||
),
|
||||
'BaconQrCode\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src',
|
||||
@@ -446,11 +402,11 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
);
|
||||
|
||||
public static $prefixesPsr0 = array (
|
||||
'P' =>
|
||||
'H' =>
|
||||
array (
|
||||
'Pimple' =>
|
||||
'HTMLPurifier' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/pimple/pimple/src',
|
||||
0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -462,7 +418,6 @@ class ComposerStaticInitfa49c619328634587e27f2ef69b215b7
|
||||
public static $classMap = array (
|
||||
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
|
||||
'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
|
||||
'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
|
||||
'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
|
||||
|
||||
2096
vendor/composer/installed.json
vendored
2096
vendor/composer/installed.json
vendored
File diff suppressed because it is too large
Load Diff
397
vendor/composer/installed.php
vendored
397
vendor/composer/installed.php
vendored
@@ -11,18 +11,18 @@
|
||||
),
|
||||
'versions' => array(
|
||||
'bacon/bacon-qr-code' => array(
|
||||
'pretty_version' => '2.0.7',
|
||||
'version' => '2.0.7.0',
|
||||
'reference' => 'd70c840f68657ce49094b8d91f9ee0cc07fbf66c',
|
||||
'pretty_version' => '2.0.8',
|
||||
'version' => '2.0.8.0',
|
||||
'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../bacon/bacon-qr-code',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'dasprid/enum' => array(
|
||||
'pretty_version' => '1.0.3',
|
||||
'version' => '1.0.3.0',
|
||||
'reference' => '5abf82f213618696dda8e3bf6f64dd042d8542b2',
|
||||
'pretty_version' => '1.0.4',
|
||||
'version' => '1.0.4.0',
|
||||
'reference' => '8e6b6ea76eabbf19ea2bf5b67b98e1860474012f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../dasprid/enum',
|
||||
'aliases' => array(),
|
||||
@@ -37,46 +37,28 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'easywechat-composer/easywechat-composer' => array(
|
||||
'pretty_version' => '1.4.1',
|
||||
'version' => '1.4.1.0',
|
||||
'reference' => '3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd',
|
||||
'type' => 'composer-plugin',
|
||||
'install_path' => __DIR__ . '/../easywechat-composer/easywechat-composer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'endroid/qr-code' => array(
|
||||
'pretty_version' => '4.6.1',
|
||||
'version' => '4.6.1.0',
|
||||
'reference' => 'a75c913b0e4d6ad275e49a2c1de1cacffc6c2184',
|
||||
'pretty_version' => '4.8.2',
|
||||
'version' => '4.8.2.0',
|
||||
'reference' => '2436c2333a3931c95e2b96eb82f16f53143d6bba',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../endroid/qr-code',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'graham-campbell/result-type' => array(
|
||||
'pretty_version' => 'v1.1.0',
|
||||
'version' => '1.1.0.0',
|
||||
'reference' => 'a878d45c1914464426dc94da61c9e1d36ae262a8',
|
||||
'ezyang/htmlpurifier' => array(
|
||||
'pretty_version' => 'v4.16.0',
|
||||
'version' => '4.16.0.0',
|
||||
'reference' => '523407fb06eb9e5f3d59889b3978d5bfe94299c8',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../graham-campbell/result-type',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'gregwar/captcha' => array(
|
||||
'pretty_version' => 'v1.1.9',
|
||||
'version' => '1.1.9.0',
|
||||
'reference' => '4bb668e6b40e3205a020ca5ee4ca8cff8b8780c5',
|
||||
'type' => 'captcha',
|
||||
'install_path' => __DIR__ . '/../gregwar/captcha',
|
||||
'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'guzzlehttp/guzzle' => array(
|
||||
'pretty_version' => '7.5.0',
|
||||
'version' => '7.5.0.0',
|
||||
'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba',
|
||||
'pretty_version' => '7.5.1',
|
||||
'version' => '7.5.1.0',
|
||||
'reference' => 'b964ca597e86b752cd994f27293e9fa6b6a95ed9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
|
||||
'aliases' => array(),
|
||||
@@ -92,23 +74,50 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'guzzlehttp/psr7' => array(
|
||||
'pretty_version' => '2.4.3',
|
||||
'version' => '2.4.3.0',
|
||||
'reference' => '67c26b443f348a51926030c83481b85718457d3d',
|
||||
'pretty_version' => '2.5.0',
|
||||
'version' => '2.5.0.0',
|
||||
'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../guzzlehttp/psr7',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'laravel/serializable-closure' => array(
|
||||
'pretty_version' => 'v1.2.2',
|
||||
'version' => '1.2.2.0',
|
||||
'reference' => '47afb7fae28ed29057fdca37e16a84f90cc62fae',
|
||||
'pretty_version' => 'v1.3.0',
|
||||
'version' => '1.3.0.0',
|
||||
'reference' => 'f23fe9d4e95255dacee1bf3525e0810d1a1b0f37',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../laravel/serializable-closure',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'maennchen/zipstream-php' => array(
|
||||
'pretty_version' => 'v2.4.0',
|
||||
'version' => '2.4.0.0',
|
||||
'reference' => '3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../maennchen/zipstream-php',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'markbaker/complex' => array(
|
||||
'pretty_version' => '3.0.2',
|
||||
'version' => '3.0.2.0',
|
||||
'reference' => '95c56caa1cf5c766ad6d65b6344b807c1e8405b9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../markbaker/complex',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'markbaker/matrix' => array(
|
||||
'pretty_version' => '3.0.1',
|
||||
'version' => '3.0.1.0',
|
||||
'reference' => '728434227fe21be27ff6d86621a1b13107a2562c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../markbaker/matrix',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'meystack/swiftadmin' => array(
|
||||
'pretty_version' => '2.0.0',
|
||||
'version' => '2.0.0.0',
|
||||
@@ -119,14 +128,23 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'monolog/monolog' => array(
|
||||
'pretty_version' => '2.8.0',
|
||||
'version' => '2.8.0.0',
|
||||
'reference' => '720488632c590286b88b80e62aa3d3d551ad4a50',
|
||||
'pretty_version' => '2.9.1',
|
||||
'version' => '2.9.1.0',
|
||||
'reference' => 'f259e2b15fb95494c83f52d3caad003bbf5ffaa1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../monolog/monolog',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'myclabs/php-enum' => array(
|
||||
'pretty_version' => '1.8.4',
|
||||
'version' => '1.8.4.0',
|
||||
'reference' => 'a867478eae49c9f59ece437ae7f9506bfaa27483',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../myclabs/php-enum',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'nikic/fast-route' => array(
|
||||
'pretty_version' => 'v1.3.0',
|
||||
'version' => '1.3.0.0',
|
||||
@@ -146,32 +164,14 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'overtrue/pinyin' => array(
|
||||
'pretty_version' => '4.0.8',
|
||||
'version' => '4.0.8.0',
|
||||
'reference' => '04bdb4d33d50e8fb1aa5a824064c5151c4b15dc2',
|
||||
'pretty_version' => '5.0.0',
|
||||
'version' => '5.0.0.0',
|
||||
'reference' => '4ee638c108f1230389e17ceaf2d1e0aebc3cedee',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../overtrue/pinyin',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'overtrue/socialite' => array(
|
||||
'pretty_version' => '4.6.3',
|
||||
'version' => '4.6.3.0',
|
||||
'reference' => '52033511df3795c568528fe70fbe41459135911b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../overtrue/socialite',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'overtrue/wechat' => array(
|
||||
'pretty_version' => '5.31.0',
|
||||
'version' => '5.31.0.0',
|
||||
'reference' => 'cfd0feb6e0bee504d2f39d141e2b382d25fc441b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../overtrue/wechat',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'php-di/invoker' => array(
|
||||
'pretty_version' => '2.3.3',
|
||||
'version' => '2.3.3.0',
|
||||
@@ -200,29 +200,20 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpmailer/phpmailer' => array(
|
||||
'pretty_version' => 'v6.6.5',
|
||||
'version' => '6.6.5.0',
|
||||
'reference' => '8b6386d7417526d1ea4da9edb70b8352f7543627',
|
||||
'pretty_version' => 'v6.8.0',
|
||||
'version' => '6.8.0.0',
|
||||
'reference' => 'df16b615e371d81fb79e506277faea67a1be18f1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpoption/phpoption' => array(
|
||||
'pretty_version' => '1.9.0',
|
||||
'version' => '1.9.0.0',
|
||||
'reference' => 'dc5ff11e274a90cc1c743f66c9ad700ce50db9ab',
|
||||
'phpoffice/phpspreadsheet' => array(
|
||||
'pretty_version' => '1.28.0',
|
||||
'version' => '1.28.0.0',
|
||||
'reference' => '6e81cf39bbd93ebc3a4e8150444c41e8aa9b769a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpoption/phpoption',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'pimple/pimple' => array(
|
||||
'pretty_version' => 'v3.5.0',
|
||||
'version' => '3.5.0.0',
|
||||
'reference' => 'a94b3a4db7fb774b3d78dad2315ddc07629e1bed',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../pimple/pimple',
|
||||
'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
@@ -235,12 +226,6 @@
|
||||
'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.1',
|
||||
'version' => '1.1.1.0',
|
||||
@@ -265,16 +250,10 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/event-dispatcher-implementation' => array(
|
||||
'dev_requirement' => false,
|
||||
'provided' => array(
|
||||
0 => '1.0',
|
||||
),
|
||||
),
|
||||
'psr/http-client' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
|
||||
'pretty_version' => '1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => '0955afe48220520692d2d09f7ab7e0f93ffd6a31',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-client',
|
||||
'aliases' => array(),
|
||||
@@ -287,9 +266,9 @@
|
||||
),
|
||||
),
|
||||
'psr/http-factory' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
|
||||
'pretty_version' => '1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-factory',
|
||||
'aliases' => array(),
|
||||
@@ -302,9 +281,9 @@
|
||||
),
|
||||
),
|
||||
'psr/http-message' => array(
|
||||
'pretty_version' => '1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
|
||||
'pretty_version' => '1.1',
|
||||
'version' => '1.1.0.0',
|
||||
'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/http-message',
|
||||
'aliases' => array(),
|
||||
@@ -317,9 +296,9 @@
|
||||
),
|
||||
),
|
||||
'psr/log' => array(
|
||||
'pretty_version' => '2.0.0',
|
||||
'version' => '2.0.0.0',
|
||||
'reference' => 'ef29f6d262798707a9edd554e2b82517ef3a9376',
|
||||
'pretty_version' => '3.0.0',
|
||||
'version' => '3.0.0.0',
|
||||
'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../psr/log',
|
||||
'aliases' => array(),
|
||||
@@ -341,12 +320,6 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'psr/simple-cache-implementation' => array(
|
||||
'dev_requirement' => false,
|
||||
'provided' => array(
|
||||
0 => '1.0|2.0',
|
||||
),
|
||||
),
|
||||
'ralouphie/getallheaders' => array(
|
||||
'pretty_version' => '3.0.3',
|
||||
'version' => '3.0.3.0',
|
||||
@@ -356,34 +329,10 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/cache' => array(
|
||||
'pretty_version' => 'v5.4.15',
|
||||
'version' => '5.4.15.0',
|
||||
'reference' => '60e87188abbacd29ccde44d69c5392a33e888e98',
|
||||
'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/console' => array(
|
||||
'pretty_version' => 'v6.0.15',
|
||||
'version' => '6.0.15.0',
|
||||
'reference' => 'b0b910724a0a0326b4481e4f8a30abb2dd442efb',
|
||||
'pretty_version' => 'v6.0.19',
|
||||
'version' => '6.0.19.0',
|
||||
'reference' => 'c3ebc83d031b71c39da318ca8b7a07ecc67507ed',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/console',
|
||||
'aliases' => array(),
|
||||
@@ -398,48 +347,6 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/event-dispatcher' => array(
|
||||
'pretty_version' => 'v6.0.9',
|
||||
'version' => '6.0.9.0',
|
||||
'reference' => '5c85b58422865d42c6eb46f7693339056db098a8',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/event-dispatcher',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/event-dispatcher-contracts' => array(
|
||||
'pretty_version' => 'v3.0.2',
|
||||
'version' => '3.0.2.0',
|
||||
'reference' => '7bc61cc2db649b4637d331240c5346dcc7708051',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/event-dispatcher-implementation' => array(
|
||||
'dev_requirement' => false,
|
||||
'provided' => array(
|
||||
0 => '2.0|3.0',
|
||||
),
|
||||
),
|
||||
'symfony/finder' => array(
|
||||
'pretty_version' => 'v6.0.11',
|
||||
'version' => '6.0.11.0',
|
||||
'reference' => '09cb683ba5720385ea6966e5e06be2a34f2568b1',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/finder',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/http-foundation' => array(
|
||||
'pretty_version' => 'v6.0.15',
|
||||
'version' => '6.0.15.0',
|
||||
'reference' => 'a93829f4043fdcddebabd8433bdb46c2dcaefe06',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/http-foundation',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-ctype' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
@@ -476,15 +383,6 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php73' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
'reference' => '9e8ecb5f92152187c4799efd3c96b78ccab18ff9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/polyfill-php73',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/polyfill-php80' => array(
|
||||
'pretty_version' => 'v1.27.0',
|
||||
'version' => '1.27.0.0',
|
||||
@@ -494,15 +392,6 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/psr-http-message-bridge' => array(
|
||||
'pretty_version' => 'v2.1.3',
|
||||
'version' => '2.1.3.0',
|
||||
'reference' => 'd444f85dddf65c7e57c58d8e5b3a4dbb593b1840',
|
||||
'type' => 'symfony-bridge',
|
||||
'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/service-contracts' => array(
|
||||
'pretty_version' => 'v2.5.2',
|
||||
'version' => '2.5.2.0',
|
||||
@@ -513,18 +402,18 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/string' => array(
|
||||
'pretty_version' => 'v6.0.15',
|
||||
'version' => '6.0.15.0',
|
||||
'reference' => '51ac0fa0ccf132a00519b87c97e8f775fa14e771',
|
||||
'pretty_version' => 'v6.0.19',
|
||||
'version' => '6.0.19.0',
|
||||
'reference' => 'd9e72497367c23e08bf94176d2be45b00a9d232a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/string',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'symfony/translation' => array(
|
||||
'pretty_version' => 'v5.4.14',
|
||||
'version' => '5.4.14.0',
|
||||
'reference' => 'f0ed07675863aa6e3939df8b1bc879450b585cab',
|
||||
'pretty_version' => 'v5.4.22',
|
||||
'version' => '5.4.22.0',
|
||||
'reference' => '9a401392f01bc385aa42760eff481d213a0cc2ba',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/translation',
|
||||
'aliases' => array(),
|
||||
@@ -545,19 +434,19 @@
|
||||
0 => '2.3',
|
||||
),
|
||||
),
|
||||
'symfony/var-exporter' => array(
|
||||
'pretty_version' => 'v6.0.10',
|
||||
'version' => '6.0.10.0',
|
||||
'reference' => 'e3df004a8d0fb572c420a6915cd23db9254c8366',
|
||||
'symfony/var-dumper' => array(
|
||||
'pretty_version' => 'v6.0.19',
|
||||
'version' => '6.0.19.0',
|
||||
'reference' => 'eb980457fa6899840fe1687e8627a03a7d8a3d52',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../symfony/var-exporter',
|
||||
'install_path' => __DIR__ . '/../symfony/var-dumper',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-cache' => array(
|
||||
'pretty_version' => 'v2.0.6',
|
||||
'version' => '2.0.6.0',
|
||||
'reference' => '75a56b24affc65b51688fd89ada48c102757fd74',
|
||||
'pretty_version' => 'v2.0.7',
|
||||
'version' => '2.0.7.0',
|
||||
'reference' => '7b6ace7eb9b569fe95000b254000bbafa3c7dfee',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-cache',
|
||||
'aliases' => array(),
|
||||
@@ -591,18 +480,18 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-orm' => array(
|
||||
'pretty_version' => 'v2.0.55',
|
||||
'version' => '2.0.55.0',
|
||||
'reference' => 'e1974a4c3b1b4c5b808fcc0863fc254e711dee13',
|
||||
'pretty_version' => 'v3.0.8',
|
||||
'version' => '3.0.8.0',
|
||||
'reference' => '172ff8f14a62f83f5c060c47b704b1d5ce80561b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-orm',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'topthink/think-template' => array(
|
||||
'pretty_version' => 'v2.0.8',
|
||||
'version' => '2.0.8.0',
|
||||
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
|
||||
'pretty_version' => 'v2.0.9',
|
||||
'version' => '2.0.9.0',
|
||||
'reference' => '6d25642ae0e306166742fd7073dc7a159e18073c',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../topthink/think-template',
|
||||
'aliases' => array(),
|
||||
@@ -617,37 +506,37 @@
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'vlucas/phpdotenv' => array(
|
||||
'pretty_version' => 'v5.5.0',
|
||||
'version' => '5.5.0.0',
|
||||
'reference' => '1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7',
|
||||
'webman/captcha' => array(
|
||||
'pretty_version' => 'v1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => '00ea47505c5aa92b116ca914f5733e2eb326719a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../vlucas/phpdotenv',
|
||||
'install_path' => __DIR__ . '/../webman/captcha',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'webman/console' => array(
|
||||
'pretty_version' => 'v1.2.12',
|
||||
'version' => '1.2.12.0',
|
||||
'reference' => '3f86741e4c2d9e8a48cd419721c75a8fd74d2a37',
|
||||
'pretty_version' => 'v1.2.33',
|
||||
'version' => '1.2.33.0',
|
||||
'reference' => '081cc2ccb41c48fb6a0e30999e1dd7704efe9e93',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webman/console',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'webman/event' => array(
|
||||
'pretty_version' => 'v1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => 'db17d2fd6a5a8799f97f587b17a26b814901e01a',
|
||||
'pretty_version' => 'v1.0.4',
|
||||
'version' => '1.0.4.0',
|
||||
'reference' => 'f4478941c3b7efa4d7e9c063f2f6efd7ee3071a7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webman/event',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'webman/gateway-worker' => array(
|
||||
'pretty_version' => 'v1.0.4',
|
||||
'version' => '1.0.4.0',
|
||||
'reference' => '4921663553b4f9f15bb4bf5207f6a324b0926e24',
|
||||
'pretty_version' => 'v1.0.5',
|
||||
'version' => '1.0.5.0',
|
||||
'reference' => '9954c7c05934a5938eee79419fc27b4221094233',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webman/gateway-worker',
|
||||
'aliases' => array(),
|
||||
@@ -663,63 +552,63 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'webman/think-cache' => array(
|
||||
'pretty_version' => 'v1.0.1',
|
||||
'version' => '1.0.1.0',
|
||||
'reference' => '25bd103d7fc9347aca680e677282db761cc90a43',
|
||||
'pretty_version' => 'v1.0.2',
|
||||
'version' => '1.0.2.0',
|
||||
'reference' => '0420d03a564e3513b7578ec475c6699ec02cd081',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webman/think-cache',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'webman/think-orm' => array(
|
||||
'pretty_version' => 'v1.0.11',
|
||||
'version' => '1.0.11.0',
|
||||
'reference' => '174876df10d917b81a5bbffef56dbc9628e9bd9a',
|
||||
'pretty_version' => 'v1.1.0',
|
||||
'version' => '1.1.0.0',
|
||||
'reference' => 'e044e4ca66d387f489018a998c9d1e409ffc40b6',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../webman/think-orm',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/gateway-worker' => array(
|
||||
'pretty_version' => 'v3.0.25',
|
||||
'version' => '3.0.25.0',
|
||||
'reference' => '5b47eb9a90c6b2afc25327979e41de352cb3c286',
|
||||
'pretty_version' => 'v3.0.28',
|
||||
'version' => '3.0.28.0',
|
||||
'reference' => 'a7dffc53403133131a51b9fd3c6c6d70869cb6d3',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/gateway-worker',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/redis' => array(
|
||||
'pretty_version' => 'v1.0.11',
|
||||
'version' => '1.0.11.0',
|
||||
'reference' => '14f77108d3498fbc84cd8b10cb48c18f09661458',
|
||||
'pretty_version' => 'v2.0.1',
|
||||
'version' => '2.0.1.0',
|
||||
'reference' => '284f93cccc03603e616cf96b8cab847fe6b33b6a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/redis',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/redis-queue' => array(
|
||||
'pretty_version' => 'v1.0.10',
|
||||
'version' => '1.0.10.0',
|
||||
'reference' => 'b8286b4086a852fd588a98453f3dc7ed63bd79fe',
|
||||
'pretty_version' => 'v1.1.0',
|
||||
'version' => '1.1.0.0',
|
||||
'reference' => 'e325f5b09cd170a327597876f1d659cd81510388',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/redis-queue',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/webman-framework' => array(
|
||||
'pretty_version' => 'v1.4.7',
|
||||
'version' => '1.4.7.0',
|
||||
'reference' => 'e9815557f08dffd3a41b54f709a98619aab84f16',
|
||||
'pretty_version' => 'v1.5.5',
|
||||
'version' => '1.5.5.0',
|
||||
'reference' => '7c2a987e43077ce85b2ee242f64cae791fd7976f',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/webman-framework',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/workerman' => array(
|
||||
'pretty_version' => 'v4.1.4',
|
||||
'version' => '4.1.4.0',
|
||||
'reference' => '83e007acf936e2233ac92d7368b87716f2bae338',
|
||||
'pretty_version' => 'v4.1.9',
|
||||
'version' => '4.1.9.0',
|
||||
'reference' => '1f92d02c26106b5fbe6f61ea776198aad6e426f7',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/workerman',
|
||||
'aliases' => array(),
|
||||
|
||||
47
vendor/dasprid/enum/.github/workflows/tests.yml
vendored
Normal file
47
vendor/dasprid/enum/.github/workflows/tests.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
php-tests:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
php: [8.2, 8.1, 8.0, 7.4, 7.3, 7.2, 7.1]
|
||||
dependency-version: [prefer-stable]
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
|
||||
name: ${{ matrix.os }} - PHP${{ matrix.php }} - ${{ matrix.dependency-version }}
|
||||
|
||||
steps:
|
||||
- name: Set git to use LF
|
||||
run: |
|
||||
git config --global core.autocrlf false
|
||||
git config --global core.eol lf
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: ~/.composer/cache/files
|
||||
key: dependencies-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }}
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
coverage: none
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction
|
||||
|
||||
- name: Execute tests
|
||||
run: vendor/bin/phpunit
|
||||
|
||||
- name: Code Sniffer
|
||||
run: vendor/bin/phpcs
|
||||
|
||||
30
vendor/dasprid/enum/README.md
vendored
30
vendor/dasprid/enum/README.md
vendored
@@ -1,6 +1,6 @@
|
||||
# PHP 7.1 enums
|
||||
|
||||
[](https://travis-ci.org/DASPRiD/Enum)
|
||||
[](https://github.com/DASPRiD/Enum/actions?query=workflow%3Atests)
|
||||
[](https://coveralls.io/github/DASPRiD/Enum?branch=master)
|
||||
[](https://packagist.org/packages/dasprid/enum)
|
||||
[](https://packagist.org/packages/dasprid/enum)
|
||||
@@ -41,7 +41,7 @@ final class WeekDay extends AbstractEnum
|
||||
protected const SATURDAY = null;
|
||||
protected const SUNDAY = null;
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
If you need to provide constants for either internal use or public use, you can mark them as either private or public,
|
||||
in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can
|
||||
@@ -56,16 +56,16 @@ function tellItLikeItIs(WeekDay $weekDay)
|
||||
case WeekDay::MONDAY():
|
||||
echo 'Mondays are bad.';
|
||||
break;
|
||||
|
||||
|
||||
case WeekDay::FRIDAY():
|
||||
echo 'Fridays are better.';
|
||||
break;
|
||||
|
||||
|
||||
case WeekDay::SATURDAY():
|
||||
case WeekDay::SUNDAY():
|
||||
echo 'Weekends are best.';
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
echo 'Midweek days are so-so.';
|
||||
}
|
||||
@@ -107,14 +107,14 @@ final class Planet extends AbstractEnum
|
||||
protected const SATURN = [5.688e+26, 6.0268e7];
|
||||
protected const URANUS = [8.686e+25, 2.5559e7];
|
||||
protected const NEPTUNE = [1.024e+26, 2.4746e7];
|
||||
|
||||
|
||||
/**
|
||||
* Universal gravitational constant.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
private const G = 6.67300E-11;
|
||||
|
||||
|
||||
/**
|
||||
* Mass in kilograms.
|
||||
*
|
||||
@@ -124,32 +124,32 @@ final class Planet extends AbstractEnum
|
||||
|
||||
/**
|
||||
* Radius in meters.
|
||||
*
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
*/
|
||||
private $radius;
|
||||
|
||||
|
||||
protected function __construct(float $mass, float $radius)
|
||||
{
|
||||
$this->mass = $mass;
|
||||
$this->radius = $radius;
|
||||
}
|
||||
|
||||
|
||||
public function mass() : float
|
||||
{
|
||||
return $this->mass;
|
||||
}
|
||||
|
||||
|
||||
public function radius() : float
|
||||
{
|
||||
return $this->radius;
|
||||
return $this->radius;
|
||||
}
|
||||
|
||||
|
||||
public function surfaceGravity() : float
|
||||
{
|
||||
return self::G * $this->mass / ($this->radius * $this->radius);
|
||||
}
|
||||
|
||||
|
||||
public function surfaceWeight(float $otherMass) : float
|
||||
{
|
||||
return $otherMass * $this->surfaceGravity();
|
||||
|
||||
5
vendor/dasprid/enum/composer.json
vendored
5
vendor/dasprid/enum/composer.json
vendored
@@ -14,9 +14,12 @@
|
||||
"enum",
|
||||
"map"
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.1 <9.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7 | ^8 | ^9",
|
||||
"squizlabs/php_codesniffer": "^3.4"
|
||||
"squizlabs/php_codesniffer": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
||||
42
vendor/dasprid/enum/src/EnumMap.php
vendored
42
vendor/dasprid/enum/src/EnumMap.php
vendored
@@ -88,6 +88,31 @@ final class EnumMap implements Serializable, IteratorAggregate
|
||||
$this->values = array_fill(0, count($this->keyUniverse), null);
|
||||
}
|
||||
|
||||
public function __serialize(): array
|
||||
{
|
||||
$values = [];
|
||||
|
||||
foreach ($this->values as $ordinal => $value) {
|
||||
if (null === $value) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$values[$ordinal] = $this->unmaskNull($value);
|
||||
}
|
||||
|
||||
return [
|
||||
'keyType' => $this->keyType,
|
||||
'valueType' => $this->valueType,
|
||||
'allowNullValues' => $this->allowNullValues,
|
||||
'values' => $values,
|
||||
];
|
||||
}
|
||||
|
||||
public function __unserialize(array $data): void
|
||||
{
|
||||
$this->unserialize(serialize($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the map types match the supplied ones.
|
||||
*
|
||||
@@ -261,22 +286,7 @@ final class EnumMap implements Serializable, IteratorAggregate
|
||||
|
||||
public function serialize() : string
|
||||
{
|
||||
$values = [];
|
||||
|
||||
foreach ($this->values as $ordinal => $value) {
|
||||
if (null === $value) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$values[$ordinal] = $this->unmaskNull($value);
|
||||
}
|
||||
|
||||
return serialize([
|
||||
'keyType' => $this->keyType,
|
||||
'valueType' => $this->valueType,
|
||||
'allowNullValues' => $this->allowNullValues,
|
||||
'values' => $values,
|
||||
]);
|
||||
return serialize($this->__serialize());
|
||||
}
|
||||
|
||||
public function unserialize($serialized) : void
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
$header = <<<EOF
|
||||
This file is part of the EasyWeChatComposer.
|
||||
|
||||
(c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
|
||||
This source file is subject to the MIT license that is bundled
|
||||
with this source code in the file LICENSE.
|
||||
EOF;
|
||||
|
||||
return PhpCsFixer\Config::create()
|
||||
->setRiskyAllowed(true)
|
||||
->setRules([
|
||||
'@Symfony' => true,
|
||||
'header_comment' => ['header' => $header],
|
||||
'declare_strict_types' => true,
|
||||
'ordered_imports' => true,
|
||||
'strict_comparison' => true,
|
||||
'no_empty_comment' => false,
|
||||
'yoda_style' => false,
|
||||
])
|
||||
->setFinder(
|
||||
PhpCsFixer\Finder::create()
|
||||
->exclude('vendor')
|
||||
->notPath('src/Laravel/config.php', 'src/Laravel/routes.php')
|
||||
->in(__DIR__)
|
||||
)
|
||||
;
|
||||
@@ -1,12 +0,0 @@
|
||||
language: php
|
||||
|
||||
php:
|
||||
- 7.0
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
|
||||
install:
|
||||
- travis_retry composer install --no-interaction --no-suggest
|
||||
|
||||
script: ./vendor/bin/phpunit
|
||||
@@ -1,55 +0,0 @@
|
||||
<p align="center">
|
||||
<h1 align="center">EasyWeChat Composer Plugin</h1>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://travis-ci.org/mingyoung/easywechat-composer"><img src="https://travis-ci.org/mingyoung/easywechat-composer.svg" alt="Build Status"></a>
|
||||
<a href="https://scrutinizer-ci.com/g/mingyoung/easywechat-composer/?branch=master"><img src="https://scrutinizer-ci.com/g/mingyoung/easywechat-composer/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
|
||||
<a href="https://packagist.org/packages/easywechat-composer/easywechat-composer"><img src="https://poser.pugx.org/easywechat-composer/easywechat-composer/v/stable.svg" alt="Latest Stable Version"></a>
|
||||
<a href="https://packagist.org/packages/easywechat-composer/easywechat-composer"><img src="https://poser.pugx.org/easywechat-composer/easywechat-composer/d/total.svg" alt="Total Downloads"></a>
|
||||
<a href="https://packagist.org/packages/easywechat-composer/easywechat-composer"><img src="https://poser.pugx.org/easywechat-composer/easywechat-composer/license.svg" alt="License"></a>
|
||||
</p>
|
||||
|
||||
Usage
|
||||
---
|
||||
|
||||
Set the `type` to be `easywechat-extension` in your package composer.json file:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "your/package",
|
||||
"type": "easywechat-extension"
|
||||
}
|
||||
```
|
||||
|
||||
Specify server observer classes in the extra section:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "your/package",
|
||||
"type": "easywechat-extension",
|
||||
"extra": {
|
||||
"observers": [
|
||||
"Acme\\Observers\\Handler"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Examples
|
||||
---
|
||||
* [easywechat-composer/open-platform-testcase](https://github.com/mingyoung/open-platform-testcase)
|
||||
|
||||
Server Delegation
|
||||
---
|
||||
|
||||
> 目前仅支持 Laravel
|
||||
|
||||
1. 在 `config/app.php` 中添加 `EasyWeChatComposer\Laravel\ServiceProvider::class`
|
||||
|
||||
2. 在**本地项目**的 `.env` 文件中添加如下配置:
|
||||
|
||||
```
|
||||
EASYWECHAT_DELEGATION=true # false 则不启用
|
||||
EASYWECHAT_DELEGATION_HOST=https://example.com # 线上域名
|
||||
```
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "easywechat-composer/easywechat-composer",
|
||||
"description": "The composer plugin for EasyWeChat",
|
||||
"type": "composer-plugin",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "张铭阳",
|
||||
"email": "mingyoungcheung@gmail.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.0",
|
||||
"composer-plugin-api": "^1.0 || ^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^1.0 || ^2.0",
|
||||
"phpunit/phpunit": "^6.5 || ^7.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"EasyWeChatComposer\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"EasyWeChatComposer\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
"class": "EasyWeChatComposer\\Plugin"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/7.0/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
forceCoversAnnotation="true"
|
||||
beStrictAboutCoversAnnotation="true"
|
||||
beStrictAboutOutputDuringTests="true"
|
||||
beStrictAboutTodoAnnotatedTests="true"
|
||||
verbose="true">
|
||||
<testsuite name="EasyWeChatComposer Test">
|
||||
<directory suffix="Test.php">tests</directory>
|
||||
</testsuite>
|
||||
|
||||
<filter>
|
||||
<whitelist processUncoveredFilesFromWhitelist="true">
|
||||
<directory suffix=".php">src</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,63 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Commands;
|
||||
|
||||
use Composer\Command\BaseCommand;
|
||||
use Symfony\Component\Console\Helper\Table;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ExtensionsCommand extends BaseCommand
|
||||
{
|
||||
/**
|
||||
* Configures the current command.
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('easywechat:extensions')
|
||||
->setDescription('Lists all installed extensions.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the current command.
|
||||
*
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$extensions = require __DIR__.'/../../extensions.php';
|
||||
|
||||
if (empty($extensions) || !is_array($extensions)) {
|
||||
return $output->writeln('<info>No extension installed.</info>');
|
||||
}
|
||||
|
||||
$table = new Table($output);
|
||||
$table->setHeaders(['Name', 'Observers'])
|
||||
->setRows(
|
||||
array_map([$this, 'getRows'], array_keys($extensions), $extensions)
|
||||
)->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param array $extension
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getRows($name, $extension)
|
||||
{
|
||||
return [$name, implode("\n", $extension['observers'] ?? [])];
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Commands;
|
||||
|
||||
use Composer\Plugin\Capability\CommandProvider;
|
||||
|
||||
class Provider implements CommandProvider
|
||||
{
|
||||
/**
|
||||
* Retrieves an array of commands.
|
||||
*
|
||||
* @return \Composer\Command\BaseCommand[]
|
||||
*/
|
||||
public function getCommands()
|
||||
{
|
||||
return [
|
||||
new ExtensionsCommand(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Contracts;
|
||||
|
||||
interface Encrypter
|
||||
{
|
||||
/**
|
||||
* Encrypt the given value.
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function encrypt($value);
|
||||
|
||||
/**
|
||||
* Decrypt the given value.
|
||||
*
|
||||
* @param string $payload
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function decrypt($payload);
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Delegation;
|
||||
|
||||
use EasyWeChatComposer\EasyWeChat;
|
||||
|
||||
class DelegationOptions
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $config = [
|
||||
'enabled' => false,
|
||||
];
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
public function enable()
|
||||
{
|
||||
$this->config['enabled'] = true;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
public function disable()
|
||||
{
|
||||
$this->config['enabled'] = false;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $ability
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function ability($ability)
|
||||
{
|
||||
$this->config['enabled'] = (bool) $ability;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $host
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function toHost($host)
|
||||
{
|
||||
$this->config['host'] = $host;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor.
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
EasyWeChat::mergeConfig([
|
||||
'delegation' => $this->config,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Delegation;
|
||||
|
||||
use EasyWeChatComposer\Traits\MakesHttpRequests;
|
||||
|
||||
class DelegationTo
|
||||
{
|
||||
use MakesHttpRequests;
|
||||
|
||||
/**
|
||||
* @var \EasyWeChat\Kernel\ServiceContainer
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $identifiers = [];
|
||||
|
||||
/**
|
||||
* @param \EasyWeChat\Kernel\ServiceContainer $app
|
||||
* @param string $identifier
|
||||
*/
|
||||
public function __construct($app, $identifier)
|
||||
{
|
||||
$this->app = $app;
|
||||
|
||||
$this->push($identifier);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $identifier
|
||||
*/
|
||||
public function push($identifier)
|
||||
{
|
||||
$this->identifiers[] = $identifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $identifier
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function __get($identifier)
|
||||
{
|
||||
$this->push($identifier);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $method
|
||||
* @param array $arguments
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $arguments)
|
||||
{
|
||||
$config = array_intersect_key($this->app->getConfig(), array_flip(['app_id', 'secret', 'token', 'aes_key', 'response_type', 'component_app_id', 'refresh_token']));
|
||||
|
||||
$data = [
|
||||
'config' => $config,
|
||||
'application' => get_class($this->app),
|
||||
'identifiers' => $this->identifiers,
|
||||
'method' => $method,
|
||||
'arguments' => $arguments,
|
||||
];
|
||||
|
||||
return $this->request('easywechat-composer/delegate', $data);
|
||||
}
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Delegation;
|
||||
|
||||
use EasyWeChat;
|
||||
use EasyWeChatComposer\Http\DelegationResponse;
|
||||
|
||||
class Hydrate
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $attributes;
|
||||
|
||||
/**
|
||||
* @param array $attributes
|
||||
*/
|
||||
public function __construct(array $attributes)
|
||||
{
|
||||
$this->attributes = $attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$app = $this->createsApplication()->shouldntDelegate();
|
||||
|
||||
foreach ($this->attributes['identifiers'] as $identifier) {
|
||||
$app = $app->$identifier;
|
||||
}
|
||||
|
||||
return call_user_func_array([$app, $this->attributes['method']], $this->attributes['arguments']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \EasyWeChat\Kernel\ServiceContainer
|
||||
*/
|
||||
protected function createsApplication()
|
||||
{
|
||||
$application = $this->attributes['application'];
|
||||
|
||||
if ($application === EasyWeChat\OpenPlatform\Authorizer\OfficialAccount\Application::class) {
|
||||
return $this->createsOpenPlatformApplication('officialAccount');
|
||||
}
|
||||
|
||||
if ($application === EasyWeChat\OpenPlatform\Authorizer\MiniProgram\Application::class) {
|
||||
return $this->createsOpenPlatformApplication('miniProgram');
|
||||
}
|
||||
|
||||
return new $application($this->buildConfig($this->attributes['config']));
|
||||
}
|
||||
|
||||
protected function createsOpenPlatformApplication($type)
|
||||
{
|
||||
$config = $this->attributes['config'];
|
||||
|
||||
$authorizerAppId = $config['app_id'];
|
||||
|
||||
$config['app_id'] = $config['component_app_id'];
|
||||
|
||||
return EasyWeChat\Factory::openPlatform($this->buildConfig($config))->$type($authorizerAppId, $config['refresh_token']);
|
||||
}
|
||||
|
||||
protected function buildConfig(array $config)
|
||||
{
|
||||
$config['response_type'] = DelegationResponse::class;
|
||||
|
||||
return $config;
|
||||
}
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer;
|
||||
|
||||
use EasyWeChatComposer\Delegation\DelegationOptions;
|
||||
|
||||
class EasyWeChat
|
||||
{
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected static $config = [];
|
||||
|
||||
/**
|
||||
* Encryption key.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $encryptionKey;
|
||||
|
||||
/**
|
||||
* @param array $config
|
||||
*/
|
||||
public static function mergeConfig(array $config)
|
||||
{
|
||||
static::$config = array_merge(static::$config, $config);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function config()
|
||||
{
|
||||
return static::$config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set encryption key.
|
||||
*
|
||||
* @param string $key
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function setEncryptionKey(string $key)
|
||||
{
|
||||
static::$encryptionKey = $key;
|
||||
|
||||
return new static();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get encryption key.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getEncryptionKey(): string
|
||||
{
|
||||
return static::$encryptionKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \EasyWeChatComposer\Delegation\DelegationOptions
|
||||
*/
|
||||
public static function withDelegation()
|
||||
{
|
||||
return new DelegationOptions();
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Encryption;
|
||||
|
||||
use EasyWeChatComposer\Contracts\Encrypter;
|
||||
use EasyWeChatComposer\Exceptions\DecryptException;
|
||||
use EasyWeChatComposer\Exceptions\EncryptException;
|
||||
|
||||
class DefaultEncrypter implements Encrypter
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $key;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $cipher;
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param string $cipher
|
||||
*/
|
||||
public function __construct($key, $cipher = 'AES-256-CBC')
|
||||
{
|
||||
$this->key = $key;
|
||||
$this->cipher = $cipher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encrypt the given value.
|
||||
*
|
||||
* @param string $value
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws \EasyWeChatComposer\Exceptions\EncryptException
|
||||
*/
|
||||
public function encrypt($value)
|
||||
{
|
||||
$iv = random_bytes(openssl_cipher_iv_length($this->cipher));
|
||||
|
||||
$value = openssl_encrypt($value, $this->cipher, $this->key, 0, $iv);
|
||||
|
||||
if ($value === false) {
|
||||
throw new EncryptException('Could not encrypt the data.');
|
||||
}
|
||||
|
||||
$iv = base64_encode($iv);
|
||||
|
||||
return base64_encode(json_encode(compact('iv', 'value')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypt the given value.
|
||||
*
|
||||
* @param string $payload
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @throws \EasyWeChatComposer\Exceptions\DecryptException
|
||||
*/
|
||||
public function decrypt($payload)
|
||||
{
|
||||
$payload = json_decode(base64_decode($payload), true);
|
||||
|
||||
$iv = base64_decode($payload['iv']);
|
||||
|
||||
$decrypted = openssl_decrypt($payload['value'], $this->cipher, $this->key, 0, $iv);
|
||||
|
||||
if ($decrypted === false) {
|
||||
throw new DecryptException('Could not decrypt the data.');
|
||||
}
|
||||
|
||||
return $decrypted;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class DecryptException extends Exception
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class DelegationException extends Exception
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $exception;
|
||||
|
||||
/**
|
||||
* @param string $exception
|
||||
*/
|
||||
public function setException($exception)
|
||||
{
|
||||
$this->exception = $exception;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getException()
|
||||
{
|
||||
return $this->exception;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
class EncryptException extends Exception
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -1,143 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer;
|
||||
|
||||
use EasyWeChat\Kernel\Contracts\EventHandlerInterface;
|
||||
use Pimple\Container;
|
||||
use ReflectionClass;
|
||||
|
||||
class Extension
|
||||
{
|
||||
/**
|
||||
* @var \Pimple\Container
|
||||
*/
|
||||
protected $app;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $manifestPath;
|
||||
|
||||
/**
|
||||
* @var array|null
|
||||
*/
|
||||
protected $manifest;
|
||||
|
||||
/**
|
||||
* @param \Pimple\Container $app
|
||||
*/
|
||||
public function __construct(Container $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
$this->manifestPath = __DIR__.'/../extensions.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get observers.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function observers(): array
|
||||
{
|
||||
if ($this->shouldIgnore()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$observers = [];
|
||||
|
||||
foreach ($this->getManifest() as $name => $extra) {
|
||||
$observers = array_merge($observers, $extra['observers'] ?? []);
|
||||
}
|
||||
|
||||
return array_map([$this, 'listObserver'], array_filter($observers, [$this, 'validateObserver']));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $observer
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isDisable($observer): bool
|
||||
{
|
||||
return in_array($observer, $this->app->config->get('disable_observers', []));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the observers should be ignore.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function shouldIgnore(): bool
|
||||
{
|
||||
return !file_exists($this->manifestPath) || $this->isDisable('*');
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the given observer.
|
||||
*
|
||||
* @param mixed $observer
|
||||
*
|
||||
* @return bool
|
||||
*
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
protected function validateObserver($observer): bool
|
||||
{
|
||||
return !$this->isDisable($observer)
|
||||
&& (new ReflectionClass($observer))->implementsInterface(EventHandlerInterface::class)
|
||||
&& $this->accessible($observer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether the given observer is accessible.
|
||||
*
|
||||
* @param string $observer
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function accessible($observer): bool
|
||||
{
|
||||
if (!method_exists($observer, 'getAccessor')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return in_array(get_class($this->app), (array) $observer::getAccessor());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $observer
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function listObserver($observer): array
|
||||
{
|
||||
$condition = method_exists($observer, 'onCondition') ? $observer::onCondition() : '*';
|
||||
|
||||
return [$observer, $condition];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the easywechat manifest.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getManifest(): array
|
||||
{
|
||||
if (!is_null($this->manifest)) {
|
||||
return $this->manifest;
|
||||
}
|
||||
|
||||
return $this->manifest = file_exists($this->manifestPath) ? require $this->manifestPath : [];
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Http;
|
||||
|
||||
class DelegationResponse extends Response
|
||||
{
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBodyContents()
|
||||
{
|
||||
return $this->response->getBodyContents();
|
||||
}
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Http;
|
||||
|
||||
use EasyWeChat\Kernel\Contracts\Arrayable;
|
||||
use EasyWeChat\Kernel\Http\Response as HttpResponse;
|
||||
use JsonSerializable;
|
||||
|
||||
class Response implements Arrayable, JsonSerializable
|
||||
{
|
||||
/**
|
||||
* @var \EasyWeChat\Kernel\Http\Response
|
||||
*/
|
||||
protected $response;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $array;
|
||||
|
||||
/**
|
||||
* @param \EasyWeChat\Kernel\Http\Response $response
|
||||
*/
|
||||
public function __construct(HttpResponse $response)
|
||||
{
|
||||
$this->response = $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ArrayAccess::offsetExists
|
||||
*
|
||||
* @param string $offset
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($offset)
|
||||
{
|
||||
return isset($this->toArray()[$offset]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ArrayAccess::offsetGet
|
||||
*
|
||||
* @param string $offset
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function offsetGet($offset)
|
||||
{
|
||||
return $this->toArray()[$offset] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ArrayAccess::offsetSet
|
||||
*
|
||||
* @param string $offset
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function offsetSet($offset, $value)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* @see \ArrayAccess::offsetUnset
|
||||
*
|
||||
* @param string $offset
|
||||
*/
|
||||
public function offsetUnset($offset)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the instance as an array.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
return $this->array ?: $this->array = $this->response->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the object into something JSON serializable.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function jsonSerialize()
|
||||
{
|
||||
return $this->toArray();
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Laravel\Http\Controllers;
|
||||
|
||||
use EasyWeChatComposer\Delegation\Hydrate;
|
||||
use EasyWeChatComposer\Encryption\DefaultEncrypter;
|
||||
use Illuminate\Http\Request;
|
||||
use Throwable;
|
||||
|
||||
class DelegatesController
|
||||
{
|
||||
/**
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \EasyWeChatComposer\Encryption\DefaultEncrypter $encrypter
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function __invoke(Request $request, DefaultEncrypter $encrypter)
|
||||
{
|
||||
try {
|
||||
$data = json_decode($encrypter->decrypt($request->get('encrypted')), true);
|
||||
|
||||
$hydrate = new Hydrate($data);
|
||||
|
||||
$response = $hydrate->handle();
|
||||
|
||||
return response()->json([
|
||||
'response_type' => get_class($response),
|
||||
'response' => $encrypter->encrypt($response->getBodyContents()),
|
||||
]);
|
||||
} catch (Throwable $t) {
|
||||
return [
|
||||
'exception' => get_class($t),
|
||||
'message' => $t->getMessage(),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,116 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Laravel;
|
||||
|
||||
use EasyWeChatComposer\EasyWeChat;
|
||||
use EasyWeChatComposer\Encryption\DefaultEncrypter;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Illuminate\Support\ServiceProvider as LaravelServiceProvider;
|
||||
use RuntimeException;
|
||||
|
||||
class ServiceProvider extends LaravelServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerRoutes();
|
||||
$this->publishes([
|
||||
__DIR__.'/config.php' => config_path('easywechat-composer.php'),
|
||||
]);
|
||||
|
||||
EasyWeChat::setEncryptionKey(
|
||||
$defaultKey = $this->getKey()
|
||||
);
|
||||
|
||||
EasyWeChat::withDelegation()
|
||||
->toHost($this->config('delegation.host'))
|
||||
->ability($this->config('delegation.enabled'));
|
||||
|
||||
$this->app->when(DefaultEncrypter::class)->needs('$key')->give($defaultKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register routes.
|
||||
*/
|
||||
protected function registerRoutes()
|
||||
{
|
||||
Route::prefix('easywechat-composer')->namespace('EasyWeChatComposer\Laravel\Http\Controllers')->group(function () {
|
||||
$this->loadRoutesFrom(__DIR__.'/routes.php');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->configure();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register config.
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this->mergeConfigFrom(
|
||||
__DIR__.'/config.php', 'easywechat-composer'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the specified configuration value.
|
||||
*
|
||||
* @param string|null $key
|
||||
* @param mixed $default
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
protected function config($key = null, $default = null)
|
||||
{
|
||||
$config = $this->app['config']->get('easywechat-composer');
|
||||
|
||||
if (is_null($key)) {
|
||||
return $config;
|
||||
}
|
||||
|
||||
return Arr::get($config, $key, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function getKey()
|
||||
{
|
||||
return $this->config('encryption.key') ?: $this->getMd5Key();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function getMd5Key()
|
||||
{
|
||||
$ttl = (version_compare(Application::VERSION, '5.8') === -1) ? 30 : 1800;
|
||||
|
||||
return Cache::remember('easywechat-composer.encryption_key', $ttl, function () {
|
||||
throw_unless(file_exists($path = base_path('composer.lock')), RuntimeException::class, 'No encryption key provided.');
|
||||
|
||||
return md5_file($path);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) mingyoung <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
return [
|
||||
|
||||
'encryption' => [
|
||||
|
||||
'key' => env('EASYWECHAT_KEY'),
|
||||
|
||||
],
|
||||
|
||||
'delegation' => [
|
||||
|
||||
'enabled' => env('EASYWECHAT_DELEGATION', false),
|
||||
|
||||
'host' => env('EASYWECHAT_DELEGATION_HOST'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::post('delegate', 'DelegatesController');
|
||||
@@ -1,127 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer;
|
||||
|
||||
use Composer\Plugin\PluginInterface;
|
||||
|
||||
class ManifestManager
|
||||
{
|
||||
const PACKAGE_TYPE = 'easywechat-extension';
|
||||
|
||||
const EXTRA_OBSERVER = 'observers';
|
||||
|
||||
/**
|
||||
* The vendor path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $vendorPath;
|
||||
|
||||
/**
|
||||
* The manifest path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $manifestPath;
|
||||
|
||||
/**
|
||||
* @param string $vendorPath
|
||||
* @param string|null $manifestPath
|
||||
*/
|
||||
public function __construct(string $vendorPath, string $manifestPath = null)
|
||||
{
|
||||
$this->vendorPath = $vendorPath;
|
||||
$this->manifestPath = $manifestPath ?: $vendorPath.'/easywechat-composer/easywechat-composer/extensions.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove manifest file.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function unlink()
|
||||
{
|
||||
if (file_exists($this->manifestPath)) {
|
||||
@unlink($this->manifestPath);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the manifest file.
|
||||
*/
|
||||
public function build()
|
||||
{
|
||||
$packages = [];
|
||||
|
||||
if (file_exists($installed = $this->vendorPath.'/composer/installed.json')) {
|
||||
$packages = json_decode(file_get_contents($installed), true);
|
||||
if (version_compare(PluginInterface::PLUGIN_API_VERSION, '2.0.0', 'ge')) {
|
||||
$packages = $packages['packages'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->write($this->map($packages));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $packages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function map(array $packages): array
|
||||
{
|
||||
$manifest = [];
|
||||
|
||||
$packages = array_filter($packages, function ($package) {
|
||||
if(isset($package['type'])){
|
||||
return $package['type'] === self::PACKAGE_TYPE;
|
||||
}
|
||||
});
|
||||
|
||||
foreach ($packages as $package) {
|
||||
$manifest[$package['name']] = [self::EXTRA_OBSERVER => $package['extra'][self::EXTRA_OBSERVER] ?? []];
|
||||
}
|
||||
|
||||
return $manifest;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the manifest array to a file.
|
||||
*
|
||||
* @param array $manifest
|
||||
*/
|
||||
protected function write(array $manifest)
|
||||
{
|
||||
file_put_contents(
|
||||
$this->manifestPath,
|
||||
'<?php return '.var_export($manifest, true).';'
|
||||
);
|
||||
|
||||
$this->invalidate($this->manifestPath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidate the given file.
|
||||
*
|
||||
* @param string $file
|
||||
*/
|
||||
protected function invalidate($file)
|
||||
{
|
||||
if (function_exists('opcache_invalidate')) {
|
||||
@opcache_invalidate($file, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\EventDispatcher\EventSubscriberInterface;
|
||||
use Composer\Installer\PackageEvent;
|
||||
use Composer\Installer\PackageEvents;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Plugin\Capable;
|
||||
use Composer\Plugin\PluginInterface;
|
||||
use Composer\Script\Event;
|
||||
use Composer\Script\ScriptEvents;
|
||||
|
||||
class Plugin implements PluginInterface, EventSubscriberInterface, Capable
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $activated = true;
|
||||
|
||||
/**
|
||||
* Apply plugin modifications to Composer.
|
||||
*/
|
||||
public function activate(Composer $composer, IOInterface $io)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove any hooks from Composer.
|
||||
*
|
||||
* This will be called when a plugin is deactivated before being
|
||||
* uninstalled, but also before it gets upgraded to a new version
|
||||
* so the old one can be deactivated and the new one activated.
|
||||
*/
|
||||
public function deactivate(Composer $composer, IOInterface $io)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the plugin to be uninstalled.
|
||||
*
|
||||
* This will be called after deactivate.
|
||||
*/
|
||||
public function uninstall(Composer $composer, IOInterface $io)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getCapabilities()
|
||||
{
|
||||
return [
|
||||
'Composer\Plugin\Capability\CommandProvider' => 'EasyWeChatComposer\Commands\Provider',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen events.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
PackageEvents::PRE_PACKAGE_UNINSTALL => 'prePackageUninstall',
|
||||
ScriptEvents::POST_AUTOLOAD_DUMP => 'postAutoloadDump',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Composer\Installer\PackageEvent
|
||||
*/
|
||||
public function prePackageUninstall(PackageEvent $event)
|
||||
{
|
||||
if ($event->getOperation()->getPackage()->getName() === 'overtrue/wechat') {
|
||||
$this->activated = false;
|
||||
}
|
||||
}
|
||||
|
||||
public function postAutoloadDump(Event $event)
|
||||
{
|
||||
if (!$this->activated) {
|
||||
return;
|
||||
}
|
||||
|
||||
$manifest = new ManifestManager(
|
||||
rtrim($event->getComposer()->getConfig()->get('vendor-dir'), '/')
|
||||
);
|
||||
|
||||
$manifest->unlink()->build();
|
||||
}
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Traits;
|
||||
|
||||
use EasyWeChat\Kernel\Http\StreamResponse;
|
||||
use EasyWeChat\Kernel\Traits\ResponseCastable;
|
||||
use EasyWeChatComposer\Contracts\Encrypter;
|
||||
use EasyWeChatComposer\EasyWeChat;
|
||||
use EasyWeChatComposer\Encryption\DefaultEncrypter;
|
||||
use EasyWeChatComposer\Exceptions\DelegationException;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\ClientInterface;
|
||||
|
||||
trait MakesHttpRequests
|
||||
{
|
||||
use ResponseCastable;
|
||||
|
||||
/**
|
||||
* @var \GuzzleHttp\ClientInterface
|
||||
*/
|
||||
protected $httpClient;
|
||||
|
||||
/**
|
||||
* @var \EasyWeChatComposer\Contracts\Encrypter
|
||||
*/
|
||||
protected $encrypter;
|
||||
|
||||
/**
|
||||
* @param string $endpoint
|
||||
* @param array $payload
|
||||
*
|
||||
* @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
|
||||
*
|
||||
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
||||
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
|
||||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||||
*/
|
||||
protected function request($endpoint, array $payload)
|
||||
{
|
||||
$response = $this->getHttpClient()->request('POST', $endpoint, [
|
||||
'form_params' => $this->buildFormParams($payload),
|
||||
]);
|
||||
|
||||
$parsed = $this->parseResponse($response);
|
||||
|
||||
return $this->detectAndCastResponseToType(
|
||||
$this->getEncrypter()->decrypt($parsed['response']),
|
||||
($parsed['response_type'] === StreamResponse::class) ? 'raw' : $this->app['config']['response_type']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $payload
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function buildFormParams($payload)
|
||||
{
|
||||
return [
|
||||
'encrypted' => $this->getEncrypter()->encrypt(json_encode($payload)),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Psr\Http\Message\ResponseInterface $response
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function parseResponse($response)
|
||||
{
|
||||
$result = json_decode((string) $response->getBody(), true);
|
||||
|
||||
if (isset($result['exception'])) {
|
||||
throw (new DelegationException($result['message']))->setException($result['exception']);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \GuzzleHttp\ClientInterface
|
||||
*/
|
||||
protected function getHttpClient(): ClientInterface
|
||||
{
|
||||
return $this->httpClient ?: $this->httpClient = new Client([
|
||||
'base_uri' => $this->app['config']['delegation']['host'],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \EasyWeChatComposer\Contracts\Encrypter
|
||||
*/
|
||||
protected function getEncrypter(): Encrypter
|
||||
{
|
||||
return $this->encrypter ?: $this->encrypter = new DefaultEncrypter(
|
||||
EasyWeChat::getEncryptionKey()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Traits;
|
||||
|
||||
use EasyWeChat\Kernel\BaseClient;
|
||||
use EasyWeChatComposer\Delegation\DelegationTo;
|
||||
use EasyWeChatComposer\EasyWeChat;
|
||||
|
||||
trait WithAggregator
|
||||
{
|
||||
/**
|
||||
* Aggregate.
|
||||
*/
|
||||
protected function aggregate()
|
||||
{
|
||||
foreach (EasyWeChat::config() as $key => $value) {
|
||||
$this['config']->set($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function shouldDelegate($id)
|
||||
{
|
||||
return $this['config']->get('delegation.enabled')
|
||||
&& $this->offsetGet($id) instanceof BaseClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return $this
|
||||
*/
|
||||
public function shouldntDelegate()
|
||||
{
|
||||
$this['config']->set('delegation.enabled', false);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $id
|
||||
*
|
||||
* @return \EasyWeChatComposer\Delegation
|
||||
*/
|
||||
public function delegateTo($id)
|
||||
{
|
||||
return new DelegationTo($this, $id);
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of the EasyWeChatComposer.
|
||||
*
|
||||
* (c) 张铭阳 <mingyoungcheung@gmail.com>
|
||||
*
|
||||
* This source file is subject to the MIT license that is bundled
|
||||
* with this source code in the file LICENSE.
|
||||
*/
|
||||
|
||||
namespace EasyWeChatComposer\Tests;
|
||||
|
||||
use EasyWeChatComposer\ManifestManager;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ManifestManagerTest extends TestCase
|
||||
{
|
||||
private $vendorPath;
|
||||
private $manifestPath;
|
||||
|
||||
protected function getManifestManager()
|
||||
{
|
||||
return new ManifestManager(
|
||||
$this->vendorPath = __DIR__.'/__fixtures__/vendor/',
|
||||
$this->manifestPath = __DIR__.'/__fixtures__/extensions.php'
|
||||
);
|
||||
}
|
||||
|
||||
public function testUnlink()
|
||||
{
|
||||
$this->assertInstanceOf(ManifestManager::class, $this->getManifestManager()->unlink());
|
||||
$this->assertFalse(file_exists($this->manifestPath));
|
||||
}
|
||||
}
|
||||
26
vendor/endroid/qr-code/README.md
vendored
26
vendor/endroid/qr-code/README.md
vendored
@@ -24,7 +24,7 @@ Use [Composer](https://getcomposer.org/) to install the library. Also make sure
|
||||
[GD extension](https://www.php.net/manual/en/book.image.php) if you want to generate images.
|
||||
|
||||
``` bash
|
||||
$ composer require endroid/qr-code
|
||||
composer require endroid/qr-code
|
||||
```
|
||||
|
||||
## Usage: using the builder
|
||||
@@ -113,10 +113,32 @@ $dataUri = $result->getDataUri();
|
||||
|
||||
### Writer options
|
||||
|
||||
Some writers provide writer options. Each available writer option is can be
|
||||
found as a constant prefixed with WRITER_OPTION_ in the writer class.
|
||||
|
||||
* `PdfWriter`
|
||||
* `unit`: unit of measurement (default: mm)
|
||||
* `fpdf`: PDF to place the image in (default: new PDF)
|
||||
* `x`: image offset (default: 0)
|
||||
* `y`: image offset (default: 0)
|
||||
* `PngWriter`
|
||||
* `compression_level`: compression level (0-9, default: -1 = zlib default)
|
||||
* `SvgWriter`
|
||||
* `block_id`: id of the block element for external reference (default: block)
|
||||
* `exclude_xml_declaration`: exclude XML declaration (default: false)
|
||||
* `exclude_svg_width_and_height`: exclude width and height (default: false)
|
||||
* `force_xlink_href`: forces xlink namespace in case of compatibility issues (default: false)
|
||||
* `WebPWriter`
|
||||
* `quality`: image quality (0-100, default: 80)
|
||||
|
||||
You can provide any writer options like this.
|
||||
|
||||
```php
|
||||
use Endroid\QrCode\Writer\SvgWriter;
|
||||
|
||||
$builder->setWriterOptions([SvgWriter::WRITER_OPTION_EXCLUDE_XML_DECLARATION => true]);
|
||||
$builder->setWriterOptions([
|
||||
SvgWriter::WRITER_OPTION_EXCLUDE_XML_DECLARATION => true
|
||||
]);
|
||||
```
|
||||
|
||||
### Encoding
|
||||
|
||||
10
vendor/endroid/qr-code/composer.json
vendored
10
vendor/endroid/qr-code/composer.json
vendored
@@ -12,15 +12,18 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^7.4||^8.0",
|
||||
"php": "^8.0",
|
||||
"bacon/bacon-qr-code": "^2.0.5"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-gd": "*",
|
||||
"endroid/quality": "dev-master",
|
||||
"khanamiryan/qrcode-detector-decoder": "^1.0.4",
|
||||
"khanamiryan/qrcode-detector-decoder": "^1.0.4||^2.0.2",
|
||||
"setasign/fpdf": "^1.8.2"
|
||||
},
|
||||
"conflict": {
|
||||
"khanamiryan/qrcode-detector-decoder": "^1.0.6"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-gd": "Enables you to write PNG images",
|
||||
"khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator",
|
||||
@@ -41,6 +44,9 @@
|
||||
"sort-packages": true,
|
||||
"preferred-install": {
|
||||
"endroid/*": "source"
|
||||
},
|
||||
"allow-plugins": {
|
||||
"endroid/installer": true
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
|
||||
@@ -25,7 +25,7 @@ use Endroid\QrCode\Writer\WriterInterface;
|
||||
class Builder implements BuilderInterface
|
||||
{
|
||||
/**
|
||||
* @var array<mixed>{
|
||||
* @var array<string, mixed>{
|
||||
* data: string,
|
||||
* writer: WriterInterface,
|
||||
* writerOptions: array,
|
||||
@@ -78,7 +78,7 @@ class Builder implements BuilderInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @param array<mixed> $writerOptions */
|
||||
/** @param array<string, mixed> $writerOptions */
|
||||
public function writerOptions(array $writerOptions): BuilderInterface
|
||||
{
|
||||
$this->options['writerOptions'] = $writerOptions;
|
||||
@@ -243,7 +243,7 @@ class Builder implements BuilderInterface
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private function buildObject(string $class, string $optionsPrefix = null)
|
||||
private function buildObject(string $class, string|null $optionsPrefix = null)
|
||||
{
|
||||
/** @var \ReflectionClass<object> $reflectionClass */
|
||||
$reflectionClass = new \ReflectionClass($class);
|
||||
|
||||
@@ -20,7 +20,7 @@ interface BuilderInterface
|
||||
|
||||
public function writer(WriterInterface $writer): BuilderInterface;
|
||||
|
||||
/** @param array<mixed> $writerOptions */
|
||||
/** @param array<string, mixed> $writerOptions */
|
||||
public function writerOptions(array $writerOptions): BuilderInterface;
|
||||
|
||||
public function data(string $data): BuilderInterface;
|
||||
|
||||
17
vendor/endroid/qr-code/src/Color/Color.php
vendored
17
vendor/endroid/qr-code/src/Color/Color.php
vendored
@@ -6,17 +6,12 @@ namespace Endroid\QrCode\Color;
|
||||
|
||||
final class Color implements ColorInterface
|
||||
{
|
||||
private int $red;
|
||||
private int $green;
|
||||
private int $blue;
|
||||
private int $alpha;
|
||||
|
||||
public function __construct(int $red, int $green, int $blue, int $alpha = 0)
|
||||
{
|
||||
$this->red = $red;
|
||||
$this->green = $green;
|
||||
$this->blue = $blue;
|
||||
$this->alpha = $alpha;
|
||||
public function __construct(
|
||||
private int $red,
|
||||
private int $green,
|
||||
private int $blue,
|
||||
private int $alpha = 0
|
||||
) {
|
||||
}
|
||||
|
||||
public function getRed(): int
|
||||
|
||||
@@ -6,15 +6,12 @@ namespace Endroid\QrCode\Encoding;
|
||||
|
||||
final class Encoding implements EncodingInterface
|
||||
{
|
||||
private string $value;
|
||||
|
||||
public function __construct(string $value)
|
||||
{
|
||||
public function __construct(
|
||||
private string $value
|
||||
) {
|
||||
if (!in_array($value, mb_list_encodings())) {
|
||||
throw new \Exception(sprintf('Invalid encoding "%s"', $value));
|
||||
}
|
||||
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
public function __toString(): string
|
||||
|
||||
@@ -16,11 +16,6 @@ final class ValidationException extends \Exception
|
||||
return new self(sprintf('Please install "%s" or disable image validation', $packageName));
|
||||
}
|
||||
|
||||
public static function createForIncompatiblePhpVersion(): self
|
||||
{
|
||||
return new self('The validator is not compatible with PHP 8 yet, see https://github.com/khanamiryan/php-qrcode-detector-decoder/pull/103');
|
||||
}
|
||||
|
||||
public static function createForInvalidData(string $expectedData, string $actualData): self
|
||||
{
|
||||
return new self('The validation reader read "'.$actualData.'" instead of "'.$expectedData.'". Adjust your parameters to increase readability or disable validation.');
|
||||
|
||||
@@ -8,13 +8,10 @@ use Endroid\QrCode\Label\LabelInterface;
|
||||
|
||||
class LabelImageData
|
||||
{
|
||||
private int $width;
|
||||
private int $height;
|
||||
|
||||
private function __construct(int $width, int $height)
|
||||
{
|
||||
$this->width = $width;
|
||||
$this->height = $height;
|
||||
private function __construct(
|
||||
private int $width,
|
||||
private int $height
|
||||
) {
|
||||
}
|
||||
|
||||
public static function createForLabel(LabelInterface $label): self
|
||||
|
||||
@@ -8,31 +8,14 @@ use Endroid\QrCode\Logo\LogoInterface;
|
||||
|
||||
class LogoImageData
|
||||
{
|
||||
private string $data;
|
||||
|
||||
/** @var mixed */
|
||||
private $image;
|
||||
|
||||
private string $mimeType;
|
||||
private int $width;
|
||||
private int $height;
|
||||
private bool $punchoutBackground;
|
||||
|
||||
/** @param mixed $image */
|
||||
private function __construct(
|
||||
string $data,
|
||||
$image,
|
||||
string $mimeType,
|
||||
int $width,
|
||||
int $height,
|
||||
bool $punchoutBackground
|
||||
private string $data,
|
||||
private \GdImage|null $image,
|
||||
private string $mimeType,
|
||||
private int $width,
|
||||
private int $height,
|
||||
private bool $punchoutBackground
|
||||
) {
|
||||
$this->data = $data;
|
||||
$this->image = $image;
|
||||
$this->mimeType = $mimeType;
|
||||
$this->width = $width;
|
||||
$this->height = $height;
|
||||
$this->punchoutBackground = $punchoutBackground;
|
||||
}
|
||||
|
||||
public static function createForLogo(LogoInterface $logo): self
|
||||
@@ -89,10 +72,9 @@ class LogoImageData
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/** @return mixed */
|
||||
public function getImage()
|
||||
public function getImage(): \GdImage
|
||||
{
|
||||
if (null === $this->image) {
|
||||
if (!$this->image instanceof \GdImage) {
|
||||
throw new \Exception('SVG Images have no image resource');
|
||||
}
|
||||
|
||||
@@ -126,10 +108,7 @@ class LogoImageData
|
||||
|
||||
private static function detectMimeTypeFromUrl(string $url): string
|
||||
{
|
||||
/** @var mixed $format */
|
||||
$format = PHP_VERSION_ID >= 80000 ? true : 1;
|
||||
|
||||
$headers = get_headers($url, $format);
|
||||
$headers = get_headers($url, true);
|
||||
|
||||
if (!is_array($headers) || !isset($headers['Content-Type'])) {
|
||||
throw new \Exception(sprintf('Content type could not be determined for logo URL "%s"', $url));
|
||||
|
||||
16
vendor/endroid/qr-code/src/Label/Font/Font.php
vendored
16
vendor/endroid/qr-code/src/Label/Font/Font.php
vendored
@@ -6,18 +6,14 @@ namespace Endroid\QrCode\Label\Font;
|
||||
|
||||
final class Font implements FontInterface
|
||||
{
|
||||
private string $path;
|
||||
private int $size;
|
||||
|
||||
public function __construct(string $path, int $size = 16)
|
||||
{
|
||||
$this->validatePath($path);
|
||||
|
||||
$this->path = $path;
|
||||
$this->size = $size;
|
||||
public function __construct(
|
||||
private string $path,
|
||||
private int $size = 16
|
||||
) {
|
||||
$this->assertValidPath($path);
|
||||
}
|
||||
|
||||
private function validatePath(string $path): void
|
||||
private function assertValidPath(string $path): void
|
||||
{
|
||||
if (!file_exists($path)) {
|
||||
throw new \Exception(sprintf('Invalid font path "%s"', $path));
|
||||
|
||||
@@ -6,11 +6,9 @@ namespace Endroid\QrCode\Label\Font;
|
||||
|
||||
final class NotoSans implements FontInterface
|
||||
{
|
||||
private int $size;
|
||||
|
||||
public function __construct(int $size = 16)
|
||||
{
|
||||
$this->size = $size;
|
||||
public function __construct(
|
||||
private int $size = 16
|
||||
) {
|
||||
}
|
||||
|
||||
public function getPath(): string
|
||||
|
||||
@@ -6,11 +6,9 @@ namespace Endroid\QrCode\Label\Font;
|
||||
|
||||
final class OpenSans implements FontInterface
|
||||
{
|
||||
private int $size;
|
||||
|
||||
public function __construct(int $size = 16)
|
||||
{
|
||||
$this->size = $size;
|
||||
public function __construct(
|
||||
private int $size = 16
|
||||
) {
|
||||
}
|
||||
|
||||
public function getPath(): string
|
||||
|
||||
12
vendor/endroid/qr-code/src/Label/Label.php
vendored
12
vendor/endroid/qr-code/src/Label/Label.php
vendored
@@ -15,20 +15,18 @@ use Endroid\QrCode\Label\Margin\MarginInterface;
|
||||
|
||||
final class Label implements LabelInterface
|
||||
{
|
||||
private string $text;
|
||||
private FontInterface $font;
|
||||
private LabelAlignmentInterface $alignment;
|
||||
private MarginInterface $margin;
|
||||
private ColorInterface $textColor;
|
||||
|
||||
public function __construct(
|
||||
string $text,
|
||||
FontInterface $font = null,
|
||||
LabelAlignmentInterface $alignment = null,
|
||||
MarginInterface $margin = null,
|
||||
ColorInterface $textColor = null
|
||||
private string $text,
|
||||
FontInterface|null $font = null,
|
||||
LabelAlignmentInterface|null $alignment = null,
|
||||
MarginInterface|null $margin = null,
|
||||
ColorInterface|null $textColor = null
|
||||
) {
|
||||
$this->text = $text;
|
||||
$this->font = $font ?? new Font(__DIR__.'/../../assets/noto_sans.otf', 16);
|
||||
$this->alignment = $alignment ?? new LabelAlignmentCenter();
|
||||
$this->margin = $margin ?? new Margin(0, 10, 10, 10);
|
||||
|
||||
@@ -6,17 +6,12 @@ namespace Endroid\QrCode\Label\Margin;
|
||||
|
||||
final class Margin implements MarginInterface
|
||||
{
|
||||
private int $top;
|
||||
private int $right;
|
||||
private int $bottom;
|
||||
private int $left;
|
||||
|
||||
public function __construct(int $top, int $right, int $bottom, int $left)
|
||||
{
|
||||
$this->top = $top;
|
||||
$this->right = $right;
|
||||
$this->bottom = $bottom;
|
||||
$this->left = $left;
|
||||
public function __construct(
|
||||
private int $top,
|
||||
private int $right,
|
||||
private int $bottom,
|
||||
private int $left
|
||||
) {
|
||||
}
|
||||
|
||||
public function getTop(): int
|
||||
|
||||
25
vendor/endroid/qr-code/src/Logo/Logo.php
vendored
25
vendor/endroid/qr-code/src/Logo/Logo.php
vendored
@@ -6,17 +6,12 @@ namespace Endroid\QrCode\Logo;
|
||||
|
||||
final class Logo implements LogoInterface
|
||||
{
|
||||
private string $path;
|
||||
private ?int $resizeToWidth;
|
||||
private ?int $resizeToHeight;
|
||||
private bool $punchoutBackground;
|
||||
|
||||
public function __construct(string $path, ?int $resizeToWidth = null, ?int $resizeToHeight = null, bool $punchoutBackground = false)
|
||||
{
|
||||
$this->path = $path;
|
||||
$this->resizeToWidth = $resizeToWidth;
|
||||
$this->resizeToHeight = $resizeToHeight;
|
||||
$this->punchoutBackground = $punchoutBackground;
|
||||
public function __construct(
|
||||
private string $path,
|
||||
private int|null $resizeToWidth = null,
|
||||
private int|null $resizeToHeight = null,
|
||||
private bool $punchoutBackground = false
|
||||
) {
|
||||
}
|
||||
|
||||
public static function create(string $path): self
|
||||
@@ -36,24 +31,24 @@ final class Logo implements LogoInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getResizeToWidth(): ?int
|
||||
public function getResizeToWidth(): int|null
|
||||
{
|
||||
return $this->resizeToWidth;
|
||||
}
|
||||
|
||||
public function setResizeToWidth(?int $resizeToWidth): self
|
||||
public function setResizeToWidth(int|null $resizeToWidth): self
|
||||
{
|
||||
$this->resizeToWidth = $resizeToWidth;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getResizeToHeight(): ?int
|
||||
public function getResizeToHeight(): int|null
|
||||
{
|
||||
return $this->resizeToHeight;
|
||||
}
|
||||
|
||||
public function setResizeToHeight(?int $resizeToHeight): self
|
||||
public function setResizeToHeight(int|null $resizeToHeight): self
|
||||
{
|
||||
$this->resizeToHeight = $resizeToHeight;
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ interface LogoInterface
|
||||
{
|
||||
public function getPath(): string;
|
||||
|
||||
public function getResizeToWidth(): ?int;
|
||||
public function getResizeToWidth(): int|null;
|
||||
|
||||
public function getResizeToHeight(): ?int;
|
||||
public function getResizeToHeight(): int|null;
|
||||
|
||||
public function getPunchoutBackground(): bool;
|
||||
}
|
||||
|
||||
13
vendor/endroid/qr-code/src/Matrix/Matrix.php
vendored
13
vendor/endroid/qr-code/src/Matrix/Matrix.php
vendored
@@ -11,9 +11,6 @@ use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeShrink;
|
||||
|
||||
final class Matrix implements MatrixInterface
|
||||
{
|
||||
/** @var array<int, array<int, int>> */
|
||||
private array $blockValues = [];
|
||||
|
||||
private float $blockSize;
|
||||
private int $innerSize;
|
||||
private int $outerSize;
|
||||
@@ -21,10 +18,12 @@ final class Matrix implements MatrixInterface
|
||||
private int $marginRight;
|
||||
|
||||
/** @param array<array<int>> $blockValues */
|
||||
public function __construct(array $blockValues, int $size, int $margin, RoundBlockSizeModeInterface $roundBlockSizeMode)
|
||||
{
|
||||
$this->blockValues = $blockValues;
|
||||
|
||||
public function __construct(
|
||||
private array $blockValues,
|
||||
int $size,
|
||||
int $margin,
|
||||
RoundBlockSizeModeInterface $roundBlockSizeMode
|
||||
) {
|
||||
$this->blockSize = $size / $this->getBlockCount();
|
||||
$this->innerSize = $size;
|
||||
$this->outerSize = $size + 2 * $margin;
|
||||
|
||||
22
vendor/endroid/qr-code/src/QrCode.php
vendored
22
vendor/endroid/qr-code/src/QrCode.php
vendored
@@ -15,30 +15,24 @@ use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
|
||||
|
||||
final class QrCode implements QrCodeInterface
|
||||
{
|
||||
private string $data;
|
||||
private EncodingInterface $encoding;
|
||||
private ErrorCorrectionLevelInterface $errorCorrectionLevel;
|
||||
private int $size;
|
||||
private int $margin;
|
||||
private RoundBlockSizeModeInterface $roundBlockSizeMode;
|
||||
private ColorInterface $foregroundColor;
|
||||
private ColorInterface $backgroundColor;
|
||||
|
||||
public function __construct(
|
||||
string $data,
|
||||
EncodingInterface $encoding = null,
|
||||
ErrorCorrectionLevelInterface $errorCorrectionLevel = null,
|
||||
int $size = 300,
|
||||
int $margin = 10,
|
||||
RoundBlockSizeModeInterface $roundBlockSizeMode = null,
|
||||
ColorInterface $foregroundColor = null,
|
||||
ColorInterface $backgroundColor = null
|
||||
private string $data,
|
||||
EncodingInterface|null $encoding = null,
|
||||
ErrorCorrectionLevelInterface|null $errorCorrectionLevel = null,
|
||||
private int $size = 300,
|
||||
private int $margin = 10,
|
||||
RoundBlockSizeModeInterface|null $roundBlockSizeMode = null,
|
||||
ColorInterface|null $foregroundColor = null,
|
||||
ColorInterface|null $backgroundColor = null
|
||||
) {
|
||||
$this->data = $data;
|
||||
$this->encoding = $encoding ?? new Encoding('UTF-8');
|
||||
$this->errorCorrectionLevel = $errorCorrectionLevel ?? new ErrorCorrectionLevelLow();
|
||||
$this->size = $size;
|
||||
$this->margin = $margin;
|
||||
$this->roundBlockSizeMode = $roundBlockSizeMode ?? new RoundBlockSizeModeMargin();
|
||||
$this->foregroundColor = $foregroundColor ?? new Color(0, 0, 0);
|
||||
$this->backgroundColor = $backgroundColor ?? new Color(255, 255, 255);
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
interface WritableInterface
|
||||
{
|
||||
}
|
||||
205
vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php
vendored
Normal file
205
vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Exception\ValidationException;
|
||||
use Endroid\QrCode\ImageData\LabelImageData;
|
||||
use Endroid\QrCode\ImageData\LogoImageData;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentLeft;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentRight;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeNone;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Zxing\QrReader;
|
||||
|
||||
abstract class AbstractGdWriter implements WriterInterface, ValidatingWriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!extension_loaded('gd')) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$baseBlockSize = $qrCode->getRoundBlockSizeMode() instanceof RoundBlockSizeModeNone ? 10 : intval($matrix->getBlockSize());
|
||||
$baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize);
|
||||
|
||||
if (!$baseImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $foregroundColor */
|
||||
$foregroundColor = imagecolorallocatealpha(
|
||||
$baseImage,
|
||||
$qrCode->getForegroundColor()->getRed(),
|
||||
$qrCode->getForegroundColor()->getGreen(),
|
||||
$qrCode->getForegroundColor()->getBlue(),
|
||||
$qrCode->getForegroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
/** @var int $transparentColor */
|
||||
$transparentColor = imagecolorallocatealpha($baseImage, 255, 255, 255, 127);
|
||||
|
||||
imagefill($baseImage, 0, 0, $transparentColor);
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) {
|
||||
imagefilledrectangle(
|
||||
$baseImage,
|
||||
$columnIndex * $baseBlockSize,
|
||||
$rowIndex * $baseBlockSize,
|
||||
($columnIndex + 1) * $baseBlockSize - 1,
|
||||
($rowIndex + 1) * $baseBlockSize - 1,
|
||||
$foregroundColor
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$targetWidth = $matrix->getOuterSize();
|
||||
$targetHeight = $matrix->getOuterSize();
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
$targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom();
|
||||
}
|
||||
|
||||
$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
|
||||
|
||||
if (!$targetImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $backgroundColor */
|
||||
$backgroundColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$qrCode->getBackgroundColor()->getRed(),
|
||||
$qrCode->getBackgroundColor()->getGreen(),
|
||||
$qrCode->getBackgroundColor()->getBlue(),
|
||||
$qrCode->getBackgroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
imagefill($targetImage, 0, 0, $backgroundColor);
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$baseImage,
|
||||
$matrix->getMarginLeft(),
|
||||
$matrix->getMarginLeft(),
|
||||
0,
|
||||
0,
|
||||
$matrix->getInnerSize(),
|
||||
$matrix->getInnerSize(),
|
||||
imagesx($baseImage),
|
||||
imagesy($baseImage)
|
||||
);
|
||||
|
||||
if ($qrCode->getBackgroundColor()->getAlpha() > 0) {
|
||||
imagesavealpha($targetImage, true);
|
||||
}
|
||||
|
||||
$result = new GdResult($matrix, $targetImage);
|
||||
|
||||
if ($logo instanceof LogoInterface) {
|
||||
$result = $this->addLogo($logo, $result);
|
||||
}
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$result = $this->addLabel($label, $result);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function addLogo(LogoInterface $logo, GdResult $result): GdResult
|
||||
{
|
||||
$logoImageData = LogoImageData::createForLogo($logo);
|
||||
|
||||
if ('image/svg+xml' === $logoImageData->getMimeType()) {
|
||||
throw new \Exception('PNG Writer does not support SVG logo');
|
||||
}
|
||||
|
||||
$targetImage = $result->getImage();
|
||||
$matrix = $result->getMatrix();
|
||||
|
||||
if ($logoImageData->getPunchoutBackground()) {
|
||||
/** @var int $transparent */
|
||||
$transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
|
||||
imagealphablending($targetImage, false);
|
||||
$xOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2);
|
||||
$yOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2);
|
||||
for ($xOffset = $xOffsetStart; $xOffset < $xOffsetStart + $logoImageData->getWidth(); ++$xOffset) {
|
||||
for ($yOffset = $yOffsetStart; $yOffset < $yOffsetStart + $logoImageData->getHeight(); ++$yOffset) {
|
||||
imagesetpixel($targetImage, $xOffset, $yOffset, $transparent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$logoImageData->getImage(),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2),
|
||||
0,
|
||||
0,
|
||||
$logoImageData->getWidth(),
|
||||
$logoImageData->getHeight(),
|
||||
imagesx($logoImageData->getImage()),
|
||||
imagesy($logoImageData->getImage())
|
||||
);
|
||||
|
||||
return new GdResult($matrix, $targetImage);
|
||||
}
|
||||
|
||||
private function addLabel(LabelInterface $label, GdResult $result): GdResult
|
||||
{
|
||||
$targetImage = $result->getImage();
|
||||
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
|
||||
/** @var int $textColor */
|
||||
$textColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$label->getTextColor()->getRed(),
|
||||
$label->getTextColor()->getGreen(),
|
||||
$label->getTextColor()->getBlue(),
|
||||
$label->getTextColor()->getAlpha()
|
||||
);
|
||||
|
||||
$x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2);
|
||||
$y = imagesy($targetImage) - $label->getMargin()->getBottom();
|
||||
|
||||
if ($label->getAlignment() instanceof LabelAlignmentLeft) {
|
||||
$x = $label->getMargin()->getLeft();
|
||||
} elseif ($label->getAlignment() instanceof LabelAlignmentRight) {
|
||||
$x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight();
|
||||
}
|
||||
|
||||
imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText());
|
||||
|
||||
return new GdResult($result->getMatrix(), $targetImage);
|
||||
}
|
||||
|
||||
public function validateResult(ResultInterface $result, string $expectedData): void
|
||||
{
|
||||
$string = $result->getString();
|
||||
|
||||
if (!class_exists(QrReader::class)) {
|
||||
throw ValidationException::createForMissingPackage('khanamiryan/qrcode-detector-decoder');
|
||||
}
|
||||
|
||||
$reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB);
|
||||
if ($reader->text() !== $expectedData) {
|
||||
throw ValidationException::createForInvalidData($expectedData, strval($reader->text()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class BinaryWriter implements WriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
@@ -11,15 +11,9 @@ use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\ConsoleResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
/**
|
||||
* Writer of QR Code for CLI.
|
||||
*/
|
||||
class ConsoleWriter implements WriterInterface
|
||||
final class ConsoleWriter implements WriterInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
@@ -13,7 +13,7 @@ use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class DebugWriter implements WriterInterface, ValidatingWriterInterface
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
@@ -15,7 +15,7 @@ final class EpsWriter implements WriterInterface
|
||||
{
|
||||
public const DECIMAL_PRECISION = 10;
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
23
vendor/endroid/qr-code/src/Writer/GifWriter.php
vendored
Normal file
23
vendor/endroid/qr-code/src/Writer/GifWriter.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\GifResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
final class GifWriter extends AbstractGdWriter
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
return new GifResult($gdResult->getMatrix(), $gdResult->getImage());
|
||||
}
|
||||
}
|
||||
@@ -17,8 +17,9 @@ final class PdfWriter implements WriterInterface
|
||||
public const WRITER_OPTION_PDF = 'fpdf';
|
||||
public const WRITER_OPTION_X = 'x';
|
||||
public const WRITER_OPTION_Y = 'y';
|
||||
public const WRITER_OPTION_LINK = 'link';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
@@ -99,6 +100,11 @@ final class PdfWriter implements WriterInterface
|
||||
$fpdf->Cell($matrix->getOuterSize(), 0, $label->getText(), 0, 0, 'C');
|
||||
}
|
||||
|
||||
if (isset($options[self::WRITER_OPTION_LINK])) {
|
||||
$link = $options[self::WRITER_OPTION_LINK];
|
||||
$fpdf->Link($x, $y, $x + $matrix->getOuterSize(), $y + $matrix->getOuterSize(), $link);
|
||||
}
|
||||
|
||||
return new PdfResult($matrix, $fpdf);
|
||||
}
|
||||
|
||||
|
||||
208
vendor/endroid/qr-code/src/Writer/PngWriter.php
vendored
208
vendor/endroid/qr-code/src/Writer/PngWriter.php
vendored
@@ -4,214 +4,26 @@ declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Exception\ValidationException;
|
||||
use Endroid\QrCode\ImageData\LabelImageData;
|
||||
use Endroid\QrCode\ImageData\LogoImageData;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentLeft;
|
||||
use Endroid\QrCode\Label\Alignment\LabelAlignmentRight;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeNone;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\PngResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Zxing\QrReader;
|
||||
|
||||
final class PngWriter implements WriterInterface, ValidatingWriterInterface
|
||||
final class PngWriter extends AbstractGdWriter
|
||||
{
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public const WRITER_OPTION_COMPRESSION_LEVEL = 'compression_level';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!extension_loaded('gd')) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
if (!isset($options[self::WRITER_OPTION_COMPRESSION_LEVEL])) {
|
||||
$options[self::WRITER_OPTION_COMPRESSION_LEVEL] = -1;
|
||||
}
|
||||
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
$baseBlockSize = $qrCode->getRoundBlockSizeMode() instanceof RoundBlockSizeModeNone ? 10 : intval($matrix->getBlockSize());
|
||||
$baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize);
|
||||
|
||||
if (!$baseImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $foregroundColor */
|
||||
$foregroundColor = imagecolorallocatealpha(
|
||||
$baseImage,
|
||||
$qrCode->getForegroundColor()->getRed(),
|
||||
$qrCode->getForegroundColor()->getGreen(),
|
||||
$qrCode->getForegroundColor()->getBlue(),
|
||||
$qrCode->getForegroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
/** @var int $transparentColor */
|
||||
$transparentColor = imagecolorallocatealpha($baseImage, 255, 255, 255, 127);
|
||||
|
||||
imagefill($baseImage, 0, 0, $transparentColor);
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) {
|
||||
for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) {
|
||||
if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) {
|
||||
imagefilledrectangle(
|
||||
$baseImage,
|
||||
$columnIndex * $baseBlockSize,
|
||||
$rowIndex * $baseBlockSize,
|
||||
($columnIndex + 1) * $baseBlockSize - 1,
|
||||
($rowIndex + 1) * $baseBlockSize - 1,
|
||||
$foregroundColor
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$targetWidth = $matrix->getOuterSize();
|
||||
$targetHeight = $matrix->getOuterSize();
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
$targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom();
|
||||
}
|
||||
|
||||
$targetImage = imagecreatetruecolor($targetWidth, $targetHeight);
|
||||
|
||||
if (!$targetImage) {
|
||||
throw new \Exception('Unable to generate image: please check if the GD extension is enabled and configured correctly');
|
||||
}
|
||||
|
||||
/** @var int $backgroundColor */
|
||||
$backgroundColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$qrCode->getBackgroundColor()->getRed(),
|
||||
$qrCode->getBackgroundColor()->getGreen(),
|
||||
$qrCode->getBackgroundColor()->getBlue(),
|
||||
$qrCode->getBackgroundColor()->getAlpha()
|
||||
);
|
||||
|
||||
imagefill($targetImage, 0, 0, $backgroundColor);
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$baseImage,
|
||||
$matrix->getMarginLeft(),
|
||||
$matrix->getMarginLeft(),
|
||||
0,
|
||||
0,
|
||||
$matrix->getInnerSize(),
|
||||
$matrix->getInnerSize(),
|
||||
imagesx($baseImage),
|
||||
imagesy($baseImage)
|
||||
);
|
||||
|
||||
if (PHP_VERSION_ID < 80000) {
|
||||
imagedestroy($baseImage);
|
||||
}
|
||||
|
||||
if ($qrCode->getBackgroundColor()->getAlpha() > 0) {
|
||||
imagesavealpha($targetImage, true);
|
||||
}
|
||||
|
||||
$result = new PngResult($matrix, $targetImage);
|
||||
|
||||
if ($logo instanceof LogoInterface) {
|
||||
$result = $this->addLogo($logo, $result);
|
||||
}
|
||||
|
||||
if ($label instanceof LabelInterface) {
|
||||
$result = $this->addLabel($label, $result);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function addLogo(LogoInterface $logo, PngResult $result): PngResult
|
||||
{
|
||||
$logoImageData = LogoImageData::createForLogo($logo);
|
||||
|
||||
if ('image/svg+xml' === $logoImageData->getMimeType()) {
|
||||
throw new \Exception('PNG Writer does not support SVG logo');
|
||||
}
|
||||
|
||||
$targetImage = $result->getImage();
|
||||
$matrix = $result->getMatrix();
|
||||
|
||||
if ($logoImageData->getPunchoutBackground()) {
|
||||
/** @var int $transparent */
|
||||
$transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127);
|
||||
imagealphablending($targetImage, false);
|
||||
$xOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2);
|
||||
$yOffsetStart = intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2);
|
||||
for ($xOffset = $xOffsetStart; $xOffset < $xOffsetStart + $logoImageData->getWidth(); ++$xOffset) {
|
||||
for ($yOffset = $yOffsetStart; $yOffset < $yOffsetStart + $logoImageData->getHeight(); ++$yOffset) {
|
||||
imagesetpixel($targetImage, $xOffset, $yOffset, $transparent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
imagecopyresampled(
|
||||
$targetImage,
|
||||
$logoImageData->getImage(),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getWidth() / 2),
|
||||
intval($matrix->getOuterSize() / 2 - $logoImageData->getHeight() / 2),
|
||||
0,
|
||||
0,
|
||||
$logoImageData->getWidth(),
|
||||
$logoImageData->getHeight(),
|
||||
imagesx($logoImageData->getImage()),
|
||||
imagesy($logoImageData->getImage())
|
||||
);
|
||||
|
||||
if (PHP_VERSION_ID < 80000) {
|
||||
imagedestroy($logoImageData->getImage());
|
||||
}
|
||||
|
||||
return new PngResult($matrix, $targetImage);
|
||||
}
|
||||
|
||||
private function addLabel(LabelInterface $label, PngResult $result): PngResult
|
||||
{
|
||||
$targetImage = $result->getImage();
|
||||
|
||||
$labelImageData = LabelImageData::createForLabel($label);
|
||||
|
||||
/** @var int $textColor */
|
||||
$textColor = imagecolorallocatealpha(
|
||||
$targetImage,
|
||||
$label->getTextColor()->getRed(),
|
||||
$label->getTextColor()->getGreen(),
|
||||
$label->getTextColor()->getBlue(),
|
||||
$label->getTextColor()->getAlpha()
|
||||
);
|
||||
|
||||
$x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2);
|
||||
$y = imagesy($targetImage) - $label->getMargin()->getBottom();
|
||||
|
||||
if ($label->getAlignment() instanceof LabelAlignmentLeft) {
|
||||
$x = $label->getMargin()->getLeft();
|
||||
} elseif ($label->getAlignment() instanceof LabelAlignmentRight) {
|
||||
$x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight();
|
||||
}
|
||||
|
||||
imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText());
|
||||
|
||||
return new PngResult($result->getMatrix(), $targetImage);
|
||||
}
|
||||
|
||||
public function validateResult(ResultInterface $result, string $expectedData): void
|
||||
{
|
||||
$string = $result->getString();
|
||||
|
||||
if (!class_exists(QrReader::class)) {
|
||||
throw ValidationException::createForMissingPackage('khanamiryan/qrcode-detector-decoder');
|
||||
}
|
||||
|
||||
if (PHP_VERSION_ID >= 80000) {
|
||||
throw ValidationException::createForIncompatiblePhpVersion();
|
||||
}
|
||||
|
||||
$reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB);
|
||||
if ($reader->text() !== $expectedData) {
|
||||
throw ValidationException::createForInvalidData($expectedData, strval($reader->text()));
|
||||
}
|
||||
return new PngResult($gdResult->getMatrix(), $gdResult->getImage(), $options[self::WRITER_OPTION_COMPRESSION_LEVEL]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,9 @@ use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
abstract class AbstractResult implements ResultInterface
|
||||
{
|
||||
private MatrixInterface $matrix;
|
||||
|
||||
public function __construct(MatrixInterface $matrix)
|
||||
{
|
||||
$this->matrix = $matrix;
|
||||
public function __construct(
|
||||
private MatrixInterface $matrix
|
||||
) {
|
||||
}
|
||||
|
||||
public function getMatrix(): MatrixInterface
|
||||
|
||||
@@ -11,29 +11,17 @@ use Endroid\QrCode\QrCodeInterface;
|
||||
|
||||
final class DebugResult extends AbstractResult
|
||||
{
|
||||
private QrCodeInterface $qrCode;
|
||||
private ?LogoInterface $logo;
|
||||
private ?LabelInterface $label;
|
||||
|
||||
/** @var array<mixed> */
|
||||
private array $options;
|
||||
|
||||
private bool $validateResult = false;
|
||||
|
||||
/** @param array<mixed> $options */
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
QrCodeInterface $qrCode,
|
||||
LogoInterface $logo = null,
|
||||
LabelInterface $label = null,
|
||||
array $options = []
|
||||
private QrCodeInterface $qrCode,
|
||||
private LogoInterface|null $logo = null,
|
||||
private LabelInterface|null $label = null,
|
||||
/** @var array<string, mixed> $options */
|
||||
private array $options = []
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->qrCode = $qrCode;
|
||||
$this->logo = $logo;
|
||||
$this->label = $label;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
public function setValidateResult(bool $validateResult): void
|
||||
|
||||
@@ -8,15 +8,12 @@ use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class EpsResult extends AbstractResult
|
||||
{
|
||||
/** @var array<string> */
|
||||
private array $lines;
|
||||
|
||||
/** @param array<string> $lines */
|
||||
public function __construct(MatrixInterface $matrix, array $lines)
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
/** @var array<string> $lines */
|
||||
private array $lines
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->lines = $lines;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
|
||||
32
vendor/endroid/qr-code/src/Writer/Result/GdResult.php
vendored
Normal file
32
vendor/endroid/qr-code/src/Writer/Result/GdResult.php
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
class GdResult extends AbstractResult
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
protected \GdImage $image
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
}
|
||||
|
||||
public function getImage(): \GdImage
|
||||
{
|
||||
return $this->image;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
throw new \Exception('You can only use this method in a concrete implementation');
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
throw new \Exception('You can only use this method in a concrete implementation');
|
||||
}
|
||||
}
|
||||
21
vendor/endroid/qr-code/src/Writer/Result/GifResult.php
vendored
Normal file
21
vendor/endroid/qr-code/src/Writer/Result/GifResult.php
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
final class GifResult extends GdResult
|
||||
{
|
||||
public function getString(): string
|
||||
{
|
||||
ob_start();
|
||||
imagegif($this->image);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/gif';
|
||||
}
|
||||
}
|
||||
@@ -8,13 +8,11 @@ use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class PdfResult extends AbstractResult
|
||||
{
|
||||
private \FPDF $fpdf;
|
||||
|
||||
public function __construct(MatrixInterface $matrix, \FPDF $fpdf)
|
||||
{
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
private \FPDF $fpdf
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->fpdf = $fpdf;
|
||||
}
|
||||
|
||||
public function getPdf(): \FPDF
|
||||
|
||||
@@ -6,29 +6,20 @@ namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class PngResult extends AbstractResult
|
||||
final class PngResult extends GdResult
|
||||
{
|
||||
/** @var mixed */
|
||||
private $image;
|
||||
private int $quality;
|
||||
|
||||
/** @param mixed $image */
|
||||
public function __construct(MatrixInterface $matrix, $image)
|
||||
public function __construct(MatrixInterface $matrix, \GdImage $image, int $quality = -1)
|
||||
{
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->image = $image;
|
||||
}
|
||||
|
||||
/** @return mixed */
|
||||
public function getImage()
|
||||
{
|
||||
return $this->image;
|
||||
parent::__construct($matrix, $image);
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
ob_start();
|
||||
imagepng($this->image);
|
||||
imagepng($this->image, quality: $this->quality);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
@@ -8,18 +8,12 @@ use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class SvgResult extends AbstractResult
|
||||
{
|
||||
private \SimpleXMLElement $xml;
|
||||
private bool $excludeXmlDeclaration;
|
||||
|
||||
public function __construct(
|
||||
MatrixInterface $matrix,
|
||||
\SimpleXMLElement $xml,
|
||||
bool $excludeXmlDeclaration = false
|
||||
private \SimpleXMLElement $xml,
|
||||
private bool $excludeXmlDeclaration = false
|
||||
) {
|
||||
parent::__construct($matrix);
|
||||
|
||||
$this->xml = $xml;
|
||||
$this->excludeXmlDeclaration = $excludeXmlDeclaration;
|
||||
}
|
||||
|
||||
public function getXml(): \SimpleXMLElement
|
||||
|
||||
35
vendor/endroid/qr-code/src/Writer/Result/WebPResult.php
vendored
Normal file
35
vendor/endroid/qr-code/src/Writer/Result/WebPResult.php
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
final class WebPResult extends GdResult
|
||||
{
|
||||
private int $quality;
|
||||
|
||||
public function __construct(MatrixInterface $matrix, \GdImage $image, int $quality = -1)
|
||||
{
|
||||
parent::__construct($matrix, $image);
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
if (!function_exists('imagewebp')) {
|
||||
throw new \Exception('WebP support is not available in your GD installation');
|
||||
}
|
||||
|
||||
ob_start();
|
||||
imagewebp($this->image, quality: $this->quality);
|
||||
|
||||
return strval(ob_get_clean());
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'image/webp';
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ final class SvgWriter implements WriterInterface
|
||||
public const WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT = 'exclude_svg_width_and_height';
|
||||
public const WRITER_OPTION_FORCE_XLINK_HREF = 'force_xlink_href';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!isset($options[self::WRITER_OPTION_BLOCK_ID])) {
|
||||
$options[self::WRITER_OPTION_BLOCK_ID] = 'block';
|
||||
@@ -81,7 +81,7 @@ final class SvgWriter implements WriterInterface
|
||||
return $result;
|
||||
}
|
||||
|
||||
/** @param array<mixed> $options */
|
||||
/** @param array<string, mixed> $options */
|
||||
private function addLogo(LogoInterface $logo, SvgResult $result, array $options): void
|
||||
{
|
||||
$logoImageData = LogoImageData::createForLogo($logo);
|
||||
|
||||
29
vendor/endroid/qr-code/src/Writer/WebPWriter.php
vendored
Normal file
29
vendor/endroid/qr-code/src/Writer/WebPWriter.php
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\GdResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
use Endroid\QrCode\Writer\Result\WebPResult;
|
||||
|
||||
final class WebPWriter extends AbstractGdWriter
|
||||
{
|
||||
public const WRITER_OPTION_QUALITY = 'quality';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface
|
||||
{
|
||||
if (!isset($options[self::WRITER_OPTION_QUALITY])) {
|
||||
$options[self::WRITER_OPTION_QUALITY] = -1;
|
||||
}
|
||||
|
||||
/** @var GdResult $gdResult */
|
||||
$gdResult = parent::write($qrCode, $logo, $label, $options);
|
||||
|
||||
return new WebPResult($gdResult->getMatrix(), $gdResult->getImage(), $options[self::WRITER_OPTION_QUALITY]);
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,6 @@ use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
interface WriterInterface
|
||||
{
|
||||
/** @param array<mixed> $options */
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface;
|
||||
/** @param array<string, mixed> $options */
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface|null $logo = null, LabelInterface|null $label = null, array $options = []): ResultInterface;
|
||||
}
|
||||
|
||||
6
vendor/ezyang/htmlpurifier/CHANGELOG.md
vendored
Normal file
6
vendor/ezyang/htmlpurifier/CHANGELOG.md
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
# [4.16.0](https://github.com/ezyang/htmlpurifier/compare/v4.15.0...v4.16.0) (2022-09-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add semantic release ([#307](https://github.com/ezyang/htmlpurifier/issues/307)) ([db31243](https://github.com/ezyang/htmlpurifier/commit/db312435cb9d8d73395f75f9642a43ba6de5e903)), closes [#322](https://github.com/ezyang/htmlpurifier/issues/322) [#323](https://github.com/ezyang/htmlpurifier/issues/323) [#326](https://github.com/ezyang/htmlpurifier/issues/326) [#327](https://github.com/ezyang/htmlpurifier/issues/327) [#328](https://github.com/ezyang/htmlpurifier/issues/328) [#329](https://github.com/ezyang/htmlpurifier/issues/329) [#330](https://github.com/ezyang/htmlpurifier/issues/330) [#331](https://github.com/ezyang/htmlpurifier/issues/331) [#332](https://github.com/ezyang/htmlpurifier/issues/332) [#333](https://github.com/ezyang/htmlpurifier/issues/333) [#337](https://github.com/ezyang/htmlpurifier/issues/337) [#335](https://github.com/ezyang/htmlpurifier/issues/335) [ezyang/htmlpurifier#334](https://github.com/ezyang/htmlpurifier/issues/334) [#336](https://github.com/ezyang/htmlpurifier/issues/336) [#338](https://github.com/ezyang/htmlpurifier/issues/338)
|
||||
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
Normal file
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
CREDITS
|
||||
|
||||
Almost everything written by Edward Z. Yang (Ambush Commander). Lots of thanks
|
||||
to the DevNetwork Community for their help (see docs/ref-devnetwork.html for
|
||||
more details), Feyd especially (namely IPv6 and optimization). Thanks to RSnake
|
||||
for letting me package his fantastic XSS cheatsheet for a smoketest.
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
504
vendor/ezyang/htmlpurifier/LICENSE
vendored
Normal file
504
vendor/ezyang/htmlpurifier/LICENSE
vendored
Normal file
@@ -0,0 +1,504 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
|
||||
vim: et sw=4 sts=4
|
||||
29
vendor/ezyang/htmlpurifier/README.md
vendored
Normal file
29
vendor/ezyang/htmlpurifier/README.md
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
HTML Purifier [](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml)
|
||||
=============
|
||||
|
||||
HTML Purifier is an HTML filtering solution that uses a unique combination
|
||||
of robust whitelists and aggressive parsing to ensure that not only are
|
||||
XSS attacks thwarted, but the resulting HTML is standards compliant.
|
||||
|
||||
HTML Purifier is oriented towards richly formatted documents from
|
||||
untrusted sources that require CSS and a full tag-set. This library can
|
||||
be configured to accept a more restrictive set of tags, but it won't be
|
||||
as efficient as more bare-bones parsers. It will, however, do the job
|
||||
right, which may be more important.
|
||||
|
||||
Places to go:
|
||||
|
||||
* See INSTALL for a quick installation guide
|
||||
* See docs/ for developer-oriented documentation, code examples and
|
||||
an in-depth installation guide.
|
||||
* See WYSIWYG for information on editors like TinyMCE and FCKeditor
|
||||
|
||||
HTML Purifier can be found on the web at: [http://htmlpurifier.org/](http://htmlpurifier.org/)
|
||||
|
||||
## Installation
|
||||
|
||||
Package available on [Composer](https://packagist.org/packages/ezyang/htmlpurifier).
|
||||
|
||||
If you're using Composer to manage dependencies, you can use
|
||||
|
||||
$ composer require ezyang/htmlpurifier
|
||||
1
vendor/ezyang/htmlpurifier/VERSION
vendored
Normal file
1
vendor/ezyang/htmlpurifier/VERSION
vendored
Normal file
@@ -0,0 +1 @@
|
||||
4.15.0
|
||||
44
vendor/ezyang/htmlpurifier/composer.json
vendored
Normal file
44
vendor/ezyang/htmlpurifier/composer.json
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "ezyang/htmlpurifier",
|
||||
"description": "Standards compliant HTML filter written in PHP",
|
||||
"type": "library",
|
||||
"keywords": ["html"],
|
||||
"homepage": "http://htmlpurifier.org/",
|
||||
"license": "LGPL-2.1-or-later",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Edward Z. Yang",
|
||||
"email": "admin@htmlpurifier.org",
|
||||
"homepage": "http://ezyang.com"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"cerdic/css-tidy": "^1.7 || ^2.0",
|
||||
"simpletest/simpletest": "dev-master"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0": { "HTMLPurifier": "library/" },
|
||||
"files": ["library/HTMLPurifier.composer.php"],
|
||||
"exclude-from-classmap": [
|
||||
"/library/HTMLPurifier/Language/"
|
||||
]
|
||||
},
|
||||
"suggest": {
|
||||
"cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.",
|
||||
"ext-iconv": "Converts text to and from non-UTF-8 encodings",
|
||||
"ext-bcmath": "Used for unit conversion and imagecrash protection",
|
||||
"ext-tidy": "Used for pretty-printing HTML"
|
||||
},
|
||||
"config": {
|
||||
"sort-packages": true
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/ezyang/simpletest.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
11
vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php
vendored
Normal file
11
vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This is a stub include that automatically configures the include path.
|
||||
*/
|
||||
|
||||
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
|
||||
require_once 'HTMLPurifier/Bootstrap.php';
|
||||
require_once 'HTMLPurifier.autoload.php';
|
||||
|
||||
// vim: et sw=4 sts=4
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user