Merge branch 'develop' into fix-debug

This commit is contained in:
Kijin Sung 2023-04-30 23:22:20 +09:00 committed by GitHub
commit cecc20cc8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
165 changed files with 3331 additions and 7053 deletions

View file

@ -915,25 +915,28 @@ class Context
/**
* Convert strings of variables in $source_object into UTF-8
*
* @deprecated
*
* @param object $source_obj Conatins strings to convert
* @return object converted object
*/
public static function convertEncoding($source_obj)
{
$charset_list = array(
'UTF-8', 'EUC-KR', 'CP949', 'ISO8859-1', 'EUC-JP', 'SHIFT_JIS',
'CP932', 'EUC-CN', 'HZ', 'GBK', 'GB18030', 'EUC-TW', 'BIG5',
'UTF-8', 'CP949', 'EUC-KR', 'ISO8859-1', 'EUC-JP', 'SHIFT_JIS',
'CP932', 'EUC-CN', 'GBK', 'GB18030', 'EUC-TW', 'BIG5',
'CP950', 'BIG5-HKSCS', 'ISO8859-6', 'ISO8859-8', 'JOHAB', 'CP1255',
'CP1256', 'CP862', 'ASCII', 'ISO8859-1', 'CP1250', 'CP1251',
'CP1252', 'CP1253', 'CP1254', 'CP1257', 'CP850', 'CP866'
);
$flag = true;
$obj = clone $source_obj;
foreach($charset_list as $charset)
{
array_walk($obj,'Context::checkConvertFlag',$charset);
$flag = self::checkConvertFlag($flag = TRUE);
$flag = self::checkConvertFlag($flag);
if($flag)
{
if($charset == 'UTF-8')
@ -950,6 +953,8 @@ class Context
/**
* Check flag
*
* @deprecated
*
* @param mixed $val
* @param string $key
* @param mixed $charset charset
@ -977,6 +982,8 @@ class Context
/**
* Convert array type variables into UTF-8
*
* @deprecated
*
* @param mixed $val
* @param string $key
* @param string $charset character set
@ -998,6 +1005,8 @@ class Context
/**
* Convert strings into UTF-8
*
* @deprecated
*
* @param string $str String to convert
* @return string converted string
*/

View file

@ -276,127 +276,89 @@ class FileHandler
* @param string[] $headers Headers key value array.
* @param string[] $cookies Cookies key value array.
* @param string $post_data Request arguments array for POST method
* @param array $settings Any additional settings
* @return string If success, the content of the target file. Otherwise: none
*/
public static function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array(), $request_config = array())
public static function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array(), $settings = array())
{
try
// This method converts erroneously escaped ampersands. The HTTP class doesn't.
$url = str_replace('&', '&', $url);
// Convert backward-compatible parameters to a format accepted by the HTTP class.
$converted_headers = [];
$converted_cookies = [];
$converted_settings = ['timeout' => $timeout];
// Add headers.
foreach ($headers as $key => $val)
{
$host = parse_url($url, PHP_URL_HOST);
$request_headers = array();
$request_cookies = array();
$request_options = array(
'verify' => \RX_BASEDIR . 'common/vendor/composer/ca-bundle/res/cacert.pem',
'timeout' => $timeout,
);
$converted_headers[strval($key)] = strval($val);
}
foreach($headers as $key => $val)
// Add cookies.
$host = parse_url($url, PHP_URL_HOST);
if (isset($cookies[$host]) && is_array($cookies[$host]))
{
foreach($cookies[$host] as $key => $val)
{
$request_headers[$key] = $val;
$converted_cookies[strval($key)] = strval($val);
}
}
if(isset($cookies[$host]) && is_array($cookies[$host]))
// Add the request body and its content type.
if ($content_type)
{
$converted_headers['Content-Type'] = $content_type;
}
// Add other settings, converting old format to the new format as necessary.
foreach ($settings as $key => $val)
{
if ($key === 'filename')
{
foreach($cookies[$host] as $key => $val)
{
$request_cookies[] = rawurlencode($key) . '=' . rawurlencode($val);
}
$converted_settings['sink'] = $val;
}
if(count($request_cookies))
elseif ($key === 'follow_redirects')
{
$request_headers['Cookie'] = implode('; ', $request_cookies);
$converted_settings['allow_redirects'] = true;
}
foreach($request_config as $key => $val)
elseif ($key === 'redirects' && $val > 0)
{
$request_options[$key] = $val;
$converted_settings['allow_redirects'] = ['max' => intval($val)];
}
if($content_type)
elseif ($key === 'useragent')
{
$request_headers['Content-Type'] = $content_type;
}
if(defined('__PROXY_SERVER__'))
{
$proxy = parse_url(__PROXY_SERVER__);
if($proxy["host"])
{
$request_options['proxy'] = array($proxy['host'] . ($proxy['port'] ? (':' . $proxy['port']) : ''));
if($proxy['user'] && $proxy['pass'])
{
$request_options['proxy'][] = $proxy['user'];
$request_options['proxy'][] = $proxy['pass'];
}
}
}
$url = str_replace('&', '&', $url);
$start_time = microtime(true);
$response = Requests::request($url, $request_headers, $body ?: $post_data, $method, $request_options);
$elapsed_time = microtime(true) - $start_time;
if (!isset($GLOBALS['__remote_request_elapsed__']))
{
$GLOBALS['__remote_request_elapsed__'] = 0;
}
$GLOBALS['__remote_request_elapsed__'] += $elapsed_time;
$log = array();
$log['url'] = $url;
$log['status'] = $response ? $response->status_code : 0;
$log['elapsed_time'] = $elapsed_time;
if (Rhymix\Framework\Debug::isEnabledForCurrentUser())
{
if (in_array('slow_remote_requests', config('debug.display_content')))
{
$bt = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS);
foreach($bt as $no => $call)
{
if(strncasecmp($call['function'], 'getRemote', 9) === 0)
{
$call_no = $no + 1;
$log['called_file'] = $bt[$call_no]['file'];
$log['called_line'] = $bt[$call_no]['line'];
$call_no++;
$log['called_method'] = $bt[$call_no]['class'].$bt[$call_no]['type'].$bt[$call_no]['function'];
$log['backtrace'] = array_slice($bt, $call_no, 1);
break;
}
}
}
else
{
$log['called_file'] = $log['called_line'] = $log['called_method'] = null;
$log['backtrace'] = array();
}
Rhymix\Framework\Debug::addRemoteRequest($log);
}
foreach($response->cookies as $cookie)
{
$cookies[$host][$cookie->name] = $cookie->value;
}
if($response->success)
{
if (isset($request_config['filename']))
{
return true;
}
else
{
return $response->body;
}
$converted_headers['User-Agent'] = $val;
}
else
{
return NULL;
$converted_settings[$key] = $val;
}
}
catch(Exception $e)
// Pass to HTTP::request(), using Guzzle behind the scenes.
$response = \Rhymix\Framework\HTTP::request($url, strval($method),
$body ?: $post_data,
$converted_headers,
$converted_cookies,
$converted_settings
);
// Return the response body.
if ($response->getStatusCode() === 200)
{
return NULL;
if (isset($converted_settings['sink']))
{
return true;
}
else
{
return $response->getBody()->getContents();
}
}
else
{
return null;
}
}
@ -420,7 +382,7 @@ class FileHandler
return false;
}
$request_config['filename'] = $target_filename;
$request_config['sink'] = $target_filename;
$success = self::getRemoteResource($url, $body, $timeout, $method, $content_type, $headers, $cookies, $post_data, $request_config);
return $success ? true : false;
}

View file

@ -90,7 +90,7 @@ class ModuleHandler extends Handler
$this->is_mobile = Mobile::isFromMobilePhone();
if($entry = Context::get('entry'))
{
$this->entry = Context::convertEncodingStr($entry);
$this->entry = escape($entry, false);
}
if(!$this->module && $this->mid === 'admin')
{
@ -733,7 +733,12 @@ class ModuleHandler extends Handler
/**
* Check the value of $document_srl. This method is called during init().
*
* @return object|false
* This method returns:
* - Module info object if the document can be shown in the module,
* - null if the document can be shown but the module is unspecified,
* - false if we should redirect to another module.
*
* @return object|null|false
*/
protected function _checkDocumentSrl()
{
@ -745,7 +750,7 @@ class ModuleHandler extends Handler
if(!$this->mid || $this->mid !== $module_info->mid)
{
// If the document is notice-all, preserve the current mid.
if($module_info->is_notice === 'A')
if($module_info->is_notice === 'A' && !empty($this->mid))
{
return null;
}
@ -944,7 +949,15 @@ class ModuleHandler extends Handler
}
self::_setInputErrorToContext();
$oMessageObject = MessageView::getInstance();
if (Mobile::isFromMobilePhone())
{
$oMessageObject = MessageMobile::getInstance();
}
else
{
$oMessageObject = MessageView::getInstance();
}
$oMessageObject->setError($error);
$oMessageObject->setMessage($message);
$oMessageObject->setHttpStatusCode($status_code ?: 403);

View file

@ -228,7 +228,8 @@ class ModuleObject extends BaseObject
}
catch (Rhymix\Framework\Exception $e)
{
$this->stop($e->getMessage());
$this->stop($e->getMessage(), -2);
$this->add('rx_error_location', $e->getFile() . ':' . $e->getLine());
}
}
@ -418,10 +419,11 @@ class ModuleObject extends BaseObject
/**
* Stop processing this module instance.
*
* @param string $msg_code an error code
* @param string $msg_code
* @param int $error_code
* @return ModuleObject $this
*/
public function stop($msg_code)
public function stop($msg_code, $error_code = -1)
{
if($this->stop_proc !== true)
{
@ -429,7 +431,7 @@ class ModuleObject extends BaseObject
$this->stop_proc = true;
// Error handling
$this->setError(-1);
$this->setError($error_code ?: -1);
$this->setMessage($msg_code);
// Get backtrace

127
common/composer.lock generated
View file

@ -64,16 +64,16 @@
},
{
"name": "composer/ca-bundle",
"version": "1.3.4",
"version": "1.3.5",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "69098eca243998b53eed7a48d82dedd28b447cd5"
"reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/69098eca243998b53eed7a48d82dedd28b447cd5",
"reference": "69098eca243998b53eed7a48d82dedd28b447cd5",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd",
"reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd",
"shasum": ""
},
"require": {
@ -120,7 +120,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.3.4"
"source": "https://github.com/composer/ca-bundle/tree/1.3.5"
},
"funding": [
{
@ -136,7 +136,7 @@
"type": "tidelift"
}
],
"time": "2022-10-12T12:08:29+00:00"
"time": "2023-01-11T08:27:00+00:00"
},
{
"name": "coolsms/php-sdk",
@ -274,25 +274,24 @@
},
{
"name": "egulias/email-validator",
"version": "3.2.1",
"version": "3.2.5",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
"reference": "b531a2311709443320c786feb4519cfaf94af796"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796",
"reference": "b531a2311709443320c786feb4519cfaf94af796",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.2",
"doctrine/lexer": "^1.2|^2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
@ -330,7 +329,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
"source": "https://github.com/egulias/EmailValidator/tree/3.2.5"
},
"funding": [
{
@ -338,29 +337,30 @@
"type": "github"
}
],
"time": "2022-06-18T20:57:19+00:00"
"time": "2023-01-02T17:26:14+00:00"
},
{
"name": "enshrined/svg-sanitize",
"version": "0.15.4",
"version": "0.16.0",
"source": {
"type": "git",
"url": "https://github.com/darylldoyle/svg-sanitizer.git",
"reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4"
"reference": "239e257605e2141265b429e40987b2ee51bba4b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4",
"reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4",
"url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4",
"reference": "239e257605e2141265b429e40987b2ee51bba4b4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"php": "^7.0 || ^8.0"
"ezyang/htmlpurifier": "^4.16",
"php": "^5.6 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6.5 || ^8.5"
"phpunit/phpunit": "^5.7 || ^6.5 || ^8.5"
},
"type": "library",
"autoload": {
@ -381,9 +381,9 @@
"description": "An SVG sanitizer for PHP",
"support": {
"issues": "https://github.com/darylldoyle/svg-sanitizer/issues",
"source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4"
"source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.16.0"
},
"time": "2022-02-21T09:13:59+00:00"
"time": "2023-03-20T10:51:12+00:00"
},
{
"name": "ezyang/htmlpurifier",
@ -448,22 +448,22 @@
},
{
"name": "guzzlehttp/guzzle",
"version": "7.5.0",
"version": "7.5.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba"
"reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba",
"reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9",
"reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.5",
"guzzlehttp/psr7": "^1.9 || ^2.4",
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@ -556,7 +556,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.5.0"
"source": "https://github.com/guzzle/guzzle/tree/7.5.1"
},
"funding": [
{
@ -572,7 +572,7 @@
"type": "tidelift"
}
],
"time": "2022-08-28T15:39:27+00:00"
"time": "2023-04-17T16:30:08+00:00"
},
{
"name": "guzzlehttp/promises",
@ -660,22 +660,22 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.3",
"version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "67c26b443f348a51926030c83481b85718457d3d"
"reference": "b635f279edd83fc275f822a1188157ffea568ff6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
"reference": "b635f279edd83fc275f822a1188157ffea568ff6",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
},
"provide": {
@ -695,9 +695,6 @@
"bamarni-bin": {
"bin-links": true,
"forward-command": false
},
"branch-alias": {
"dev-master": "2.4-dev"
}
},
"autoload": {
@ -759,7 +756,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
"source": "https://github.com/guzzle/psr7/tree/2.5.0"
},
"funding": [
{
@ -775,7 +772,7 @@
"type": "tidelift"
}
],
"time": "2022-10-26T14:07:24+00:00"
"time": "2023-04-17T16:11:26+00:00"
},
{
"name": "jbbcode/jbbcode",
@ -1200,21 +1197,21 @@
},
{
"name": "psr/http-client",
"version": "1.0.1",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@ -1234,7 +1231,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
@ -1246,27 +1243,27 @@
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client/tree/master"
"source": "https://github.com/php-fig/http-client/tree/1.0.2"
},
"time": "2020-06-29T06:28:15+00:00"
"time": "2023-04-10T20:12:12+00:00"
},
{
"name": "psr/http-factory",
"version": "1.0.1",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
"reference": "e616d01114759c4c489f93b099585439f795fe35"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
"reference": "e616d01114759c4c489f93b099585439f795fe35",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
@ -1286,7 +1283,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
@ -1301,31 +1298,31 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory/tree/master"
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
},
"time": "2019-04-30T12:38:16+00:00"
"time": "2023-04-10T20:10:41+00:00"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"version": "2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "2.0.x-dev"
}
},
"autoload": {
@ -1340,7 +1337,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
@ -1354,9 +1351,9 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-message/tree/master"
"source": "https://github.com/php-fig/http-message/tree/2.0"
},
"time": "2016-08-06T14:39:51+00:00"
"time": "2023-04-04T09:54:51+00:00"
},
{
"name": "ralouphie/getallheaders",
@ -2170,5 +2167,5 @@
"ext-xml": "*"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
"plugin-api-version": "2.3.0"
}

View file

@ -22,6 +22,7 @@ class DB
*/
protected $_type = '';
protected $_prefix = '';
protected $_version = '';
protected $_charset = 'utf8mb4';
protected $_engine = 'innodb';
@ -51,13 +52,6 @@ class DB
*/
protected $_transaction_level = 0;
/**
* Properties for backward compatibility.
*/
public $db_type = 'mysql';
public $db_version = '';
public $use_prepared_statements = true;
/**
* Get a singleton instance of the DB class.
*
@ -129,9 +123,6 @@ class DB
throw new Exceptions\DBError($e->getMessage());
}
// Get the DB version.
$this->db_version = $this->_handle->getAttribute(\PDO::ATTR_SERVER_VERSION);
// Cache the debug comment setting.
$this->_debug_queries = in_array('queries', Config::get('debug.display_content') ?: []);
$this->_debug_comment = !!config('debug.query_comment');
@ -559,6 +550,16 @@ class DB
}
}
/**
* Alias to begin().
*
* @return int
*/
public function beginTransaction(): int
{
return $this->begin();
}
/**
* Begin a transaction.
*
@ -1261,6 +1262,24 @@ class DB
$this->_debug_comment = $enabled;
}
/**
* Magic method to support some read-only properties for backward compatibility.
*
* @param string $key
* @return mixed
*/
public function __get($key)
{
switch ($key)
{
case 'db_type': return $this->_handle->getAttribute(\PDO::ATTR_DRIVER_NAME);
case 'db_version': return $this->_handle->getAttribute(\PDO::ATTR_SERVER_VERSION);
case 'prefix': return $this->_prefix;
case 'use_prepared_statements': return true;
default: return null;
}
}
/**
* ========================== DEPRECATED METHODS ==========================
* ==================== KEPT FOR COMPATIBILITY WITH XE ====================

View file

@ -238,7 +238,19 @@ class Formatter
$scss_compiler->setImportPaths(array(dirname(is_array($source_filename) ? array_first($source_filename) : $source_filename)));
if ($variables)
{
$scss_compiler->addVariables(array_map('\ScssPhp\ScssPhp\ValueConverter::parseValue', $variables));
$converted_variables = [];
foreach ($variables as $key => $val)
{
if (is_string($val) && $val !== '')
{
$converted_variables[$key] = \ScssPhp\ScssPhp\ValueConverter::parseValue($val);
}
else
{
$converted_variables[$key] = \ScssPhp\ScssPhp\ValueConverter::fromPhp($val);
}
}
$scss_compiler->addVariables($converted_variables);
}
$content = $scss_compiler->compileString($content)->getCss() . "\n";

334
common/framework/HTTP.php Normal file
View file

@ -0,0 +1,334 @@
<?php
namespace Rhymix\Framework;
/**
* The HTTP class for making requests to external resources.
*/
class HTTP
{
/**
* The default timeout for requests.
*/
public const DEFAULT_TIMEOUT = 3;
/**
* Cache the Guzzle client instance here.
*/
protected static $_client = null;
/**
* Reset the Guzzle client instance.
*/
public static function resetClient(): void
{
self::$_client = null;
}
/**
* Make a GET request.
*
* @param string $url
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return object
*/
public static function get(string $url, $data = null, array $headers = [], array $cookies = [], array $settings = []): object
{
return self::request($url, 'GET', $data, $headers, $cookies, $settings);
}
/**
* Make a HEAD request.
*
* @param string $url
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return \Psr\Http\Message\ResponseInterface
*/
public static function head(string $url, $data = null, array $headers = [], array $cookies = [], array $settings = []): \Psr\Http\Message\ResponseInterface
{
return self::request($url, 'HEAD', $data, $headers, $cookies, $settings);
}
/**
* Make a POST request.
*
* @param string $url
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return \Psr\Http\Message\ResponseInterface
*/
public static function post(string $url, $data = null, array $headers = [], array $cookies = [], array $settings = []): \Psr\Http\Message\ResponseInterface
{
return self::request($url, 'POST', $data, $headers, $cookies, $settings);
}
/**
* Download a file.
*
* This helps save memory when downloading large files,
* by streaming the response body directly to the filesystem
* instead of buffering it in memory.
*
* @param string $url
* @param string $target_filename
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return \Psr\Http\Message\ResponseInterface
*/
public static function download(string $url, string $target_filename, string $method = 'GET', $data = null, array $headers = [], array $cookies = [], array $settings = []): \Psr\Http\Message\ResponseInterface
{
// Try to create the parent directory to save the file.
$target_dir = dirname($target_filename);
if (!Storage::isDirectory($target_dir) && !Storage::createDirectory($target_dir))
{
return false;
}
// Pass to request() with appropriate settings for the filename.
$settings['sink'] = $target_filename;
return self::request($url, $method, $data, $headers, $cookies, $settings);
}
/**
* Make any type of request.
*
* @param string $url
* @param string $method
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return \Psr\Http\Message\ResponseInterface
*/
public static function request(string $url, string $method = 'GET', $data = null, array $headers = [], array $cookies = [], array $settings = []): \Psr\Http\Message\ResponseInterface
{
// Create a new Guzzle client, or reuse a cached one if available.
$guzzle = self::_createClient();
// Populate settings.
$settings = self::_populateSettings($url, $method, $data, $headers, $cookies, $settings);
// Send the request.
$start_time = microtime(true);
try
{
$response = $guzzle->request($method, $url, $settings);
}
catch (\Throwable $e)
{
$response = new Helpers\HTTPHelper($e);
}
// Measure elapsed time and add a debug entry.
$status_code = $response->getStatusCode() ?: 0;
$elapsed_time = microtime(true) - $start_time;
self::_debug($url, $status_code, $elapsed_time);
return $response;
}
/**
* Make any type of request asynchronously.
*
* @param string $url
* @param string $method
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return \GuzzleHttp\Promise\PromiseInterface
*/
public static function async(string $url, string $method = 'GET', $data = null, array $headers = [], array $cookies = [], array $settings = []): \GuzzleHttp\Promise\PromiseInterface
{
// Create a new Guzzle client, or reuse a cached one if available.
$guzzle = self::_createClient();
// Populate settings.
$settings = self::_populateSettings($url, $method, $data, $headers, $cookies, $settings);
// Send the request.
$promise = $guzzle->requestAsync($method, $url, $settings);
self::_debug($url, 0, 0, true);
return $promise;
}
/**
* Make multiple concurrent requests.
*
* @param array $requests[url, method, data, headers, cookies, settings]
* @return array
*/
public static function multiple(array $requests): array
{
// Create a new Guzzle client, or reuse a cached one if available.
$guzzle = self::_createClient();
// Add settings for each request.
$promises = [];
foreach ($requests as $key => $val)
{
$settings = self::_populateSettings($val['url'], $val['method'] ?? 'GET', $val['data'] ?? null, $val['headers'] ?? [], $val['cookies'] ?? [], $val['settings'] ?? []);
$promise = $guzzle->requestAsync($val['method'] ?? 'GET', $val['url'], $settings);
$promises[$key] = $promise;
self::_debug($val['url'], 0, 0, true);
}
// Wait for each request.
$responses = \GuzzleHttp\Promise\Utils::settle($promises)->wait();
$result = [];
foreach ($responses as $key => $val)
{
if ($val['state'] === 'fulfilled')
{
$result[$key] = $val['value'];
}
else
{
$result[$key] = new Helpers\HTTPHelper($val['reason']);
}
}
return $result;
}
/**
* Create a Guzzle client with default options.
*
* @return \GuzzleHttp\Client
*/
protected static function _createClient(): \GuzzleHttp\Client
{
if (!self::$_client)
{
self::$_client = new \GuzzleHttp\Client([
'http_errors' => false,
'timeout' => self::DEFAULT_TIMEOUT,
'verify' => \RX_BASEDIR . 'common/vendor/composer/ca-bundle/res/cacert.pem',
]);
}
return self::$_client;
}
/**
* Populate a settings array with various options.
*
* @param string $url
* @param string $method
* @param string|array $data
* @param array $headers
* @param array $cookies
* @param array $settings
* @return array
*/
protected static function _populateSettings(string $url, string $method = 'GET', $data = null, array $headers = [], array $cookies = [], array $settings = []): array
{
// Set headers.
if ($headers)
{
$settings['headers'] = $headers;
}
// Set cookies.
if ($cookies && !isset($settings['cookies']))
{
$jar = \GuzzleHttp\Cookie\CookieJar::fromArray($cookies, parse_url($url, \PHP_URL_HOST));
$settings['cookies'] = $jar;
}
// Set the body or POST data.
if (is_string($data) && strlen($data) > 0)
{
$settings['body'] = $data;
}
elseif (is_array($data) && count($data) > 0)
{
if (isset($headers['Content-Type']) && preg_match('!^multipart/form-data\b!i', $headers['Content-Type']))
{
$settings['multipart'] = [];
foreach ($data as $key => $val)
{
$settings['multipart'][] = ['name' => $key, 'contents' => $val];
}
}
elseif (isset($headers['Content-Type']) && preg_match('!^application/json\b!i', $headers['Content-Type']))
{
$settings['json'] = $data;
}
elseif ($method !== 'GET')
{
$settings['form_params'] = $data;
}
else
{
$settings['query'] = $data;
}
}
// Set the proxy.
if (!isset($settings['proxy']) && defined('__PROXY_SERVER__'))
{
$proxy = parse_url(constant('__PROXY_SERVER__'));
$proxy_scheme = preg_match('/^socks/', $proxy['scheme'] ?? '') ? ($proxy['scheme'] . '://') : 'http://';
$proxy_auth = (!empty($proxy['user']) && !empty($proxy['pass'])) ? ($proxy['user'] . ':' . $proxy['pass'] . '@') : '';
$settings['proxy'] = sprintf('%s%s%s:%s', $proxy_scheme, $proxy_auth, $proxy['host'], $proxy['port']);
}
return $settings;
}
/**
* Record a request with the Debug class.
*
* @param string $url
* @param int $status_code
* @param float $elapsed_time
* @return void
*/
protected static function _debug(string $url, int $status_code = 0, float $elapsed_time = 0, bool $async = true): void
{
if (!isset($GLOBALS['__remote_request_elapsed__']))
{
$GLOBALS['__remote_request_elapsed__'] = 0;
}
$GLOBALS['__remote_request_elapsed__'] += $elapsed_time;
if (Debug::isEnabledForCurrentUser())
{
$log = array();
$log['url'] = $url;
$log['status'] = $async ? 'ASYNC' : $status_code;
$log['elapsed_time'] = $async ? 'ASYNC' : $elapsed_time;
$log['called_file'] = $log['called_line'] = $log['called_method'] = null;
$log['backtrace'] = [];
if (in_array('slow_remote_requests', config('debug.display_content')))
{
$bt = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS);
foreach ($bt as $no => $call)
{
if($call['file'] !== __FILE__ && $call['file'] !== \RX_BASEDIR . 'classes/file/FileHandler.class.php')
{
$log['called_file'] = $bt[$no]['file'];
$log['called_line'] = $bt[$no]['line'];
$next = $no + 1;
$log['called_method'] = $bt[$next]['class'].$bt[$next]['type'].$bt[$next]['function'];
$log['backtrace'] = array_slice($bt, $next, 1);
break;
}
}
}
Debug::addRemoteRequest($log);
}
}
}

View file

@ -564,12 +564,6 @@ class Mail
$this->caller = $backtrace[0]['file'] . ($backtrace[0]['line'] ? (' line ' . $backtrace[0]['line']) : '');
}
// Reset Message-ID in case send() is called multiple times.
$random = substr(hash('sha256', mt_rand() . microtime() . getmypid()), 0, 32);
$sender = $this->message->getFrom(); reset($sender);
$id = $random . '@' . (preg_match('/^(.+)@([^@]+)$/', key($sender), $matches) ? $matches[2] : 'swift.generated');
$this->message->getHeaders()->get('Message-ID')->setId($id);
$output = \ModuleHandler::triggerCall('mail.send', 'before', $this);
if(!$output->toBool())
{
@ -577,6 +571,13 @@ class Mail
return false;
}
// Reset Message-ID in case send() is called multiple times.
$random = substr(hash('sha256', mt_rand() . microtime() . getmypid()), 0, 32);
$sender = $this->message->getFrom();
$sender_email = strval(array_first_key($sender));
$id = $random . '@' . (preg_match('/^(.+)@([^@]+)$/', $sender_email, $matches) ? $matches[2] : 'swift.generated');
$this->message->getHeaders()->get('Message-ID')->setId($id);
try
{
$this->sent = $this->driver->send($this) ? true : false;

View file

@ -12,6 +12,7 @@ class Password
*/
protected static $_algorithm_callbacks = array();
protected static $_algorithm_signatures = array(
'argon2id' => '/^\$argon2id?\$/',
'bcrypt' => '/^\$2[a-z]\$[0-9]{2}\$/',
'pbkdf2' => '/^[a-z0-9]+:[0-9]+:/',
'md5' => '/^[0-9a-f]{32}$/',
@ -79,6 +80,10 @@ class Password
public static function getSupportedAlgorithms()
{
$retval = array();
if (defined('\PASSWORD_ARGON2ID'))
{
$retval['argon2id'] = 'argon2id';
}
if (defined('\CRYPT_BLOWFISH'))
{
$retval['bcrypt'] = 'bcrypt';
@ -101,7 +106,12 @@ class Password
*/
public static function getBestSupportedAlgorithm()
{
// Return the first algorithm in the list, except argon2id.
$algos = self::getSupportedAlgorithms();
if (isset($algos['argon2id']))
{
unset($algos['argon2id']);
}
return key($algos);
}
@ -206,6 +216,12 @@ class Password
{
switch ($algo)
{
// argon2id (must be used last)
case 'argon2id':
$hashchain = self::argon2id($hashchain, self::getWorkFactor());
if ($hashchain[0] === '*') return false;
return $hashchain;
// bcrypt (must be used last)
case 'bcrypt':
$hashchain = self::bcrypt($hashchain, $salt, self::getWorkFactor());
@ -338,7 +354,14 @@ class Password
}
else
{
return Security::compareStrings($hash, self::hashPassword($password, $algos, $hash));
if ($algos === 'argon2id' || $algos === 'bcrypt')
{
return password_verify($password, $hash);
}
else
{
return Security::compareStrings($hash, self::hashPassword($password, $algos, $hash));
}
}
}
@ -382,6 +405,49 @@ class Password
}
}
/**
* Generate the argon2id hash of a string.
*
* @param string $password
* @param int $work_factor (optional)
* @return string
*/
public static function argon2id($password, $work_factor = 10)
{
if (!defined('\PASSWORD_ARGON2ID'))
{
return '*';
}
// Set appropriate time cost and memory cost using the work factor setting.
if ($work_factor >= 16)
{
$memory_cost = \PASSWORD_ARGON2_DEFAULT_MEMORY_COST * 1.5;
$time_cost = round($work_factor / 1.6);
}
elseif ($work_factor >= 12)
{
$memory_cost = \PASSWORD_ARGON2_DEFAULT_MEMORY_COST;
$time_cost = round($work_factor / 2);
}
elseif ($work_factor >= 8)
{
$memory_cost = \PASSWORD_ARGON2_DEFAULT_MEMORY_COST * 0.75;
$time_cost = round($work_factor / 2.4);
}
else
{
$memory_cost = \PASSWORD_ARGON2_DEFAULT_MEMORY_COST * 0.5;
$time_cost = max(1, round($work_factor / 3));
}
return password_hash($password, \PASSWORD_ARGON2ID, [
'threads' => \PASSWORD_ARGON2_DEFAULT_THREADS,
'memory_cost' => intval($memory_cost),
'time_cost' => $time_cost,
]);
}
/**
* Generate the bcrypt hash of a string.
*

View file

@ -10,6 +10,7 @@ class Push
/**
* Instance properties.
*/
protected $caller = '';
protected $from = 0;
protected $to = array();
protected $subject = '';

View file

@ -92,6 +92,7 @@ class Mailgun extends Base implements \Rhymix\Framework\Drivers\MailInterface
$boundary = str_repeat('-', 24) . substr(md5(mt_rand()), 0, 16);
$headers = array(
'Content-Type' => 'multipart/form-data; boundary=' . $boundary,
'User-Agent' => 'PHP',
);
$data = implode("\r\n", array(
'--' . $boundary,
@ -107,16 +108,15 @@ class Mailgun extends Base implements \Rhymix\Framework\Drivers\MailInterface
'--' . $boundary . '--',
'',
));
$options = array(
$settings = array(
'auth' => array('api', $this->_config['api_token']),
'timeout' => 5,
'useragent' => 'PHP',
);
// Send the API request.
$url = self::$_url . '/' . $this->_config['api_domain'] . '/messages.mime';
$request = \Requests::post($url, $headers, $data, $options);
$result = @json_decode($request->body);
$request = \Rhymix\Framework\HTTP::post($url, $data, $headers, [], $settings);
$result = @json_decode($request->getBody()->getContents());
// Parse the result.
if (!$result)

View file

@ -147,25 +147,26 @@ class SendGrid extends Base implements \Rhymix\Framework\Drivers\MailInterface
$headers = array(
'Authorization' => 'Bearer ' . $this->_config['api_token'],
'Content-Type' => 'application/json',
'User-Agent' => 'PHP',
);
$options = array(
'timeout' => 8,
'useragent' => 'PHP',
);
// Send the API request.
$request = \Requests::post(self::$_url, $headers, json_encode($data), $options);
$response_code = intval($request->status_code);;
$request = \Rhymix\Framework\HTTP::post(self::$_url, $data, $headers, [], $options);
$status_code = $request->getStatusCode();
$result = $request->getBody()->getContents();
// Parse the result.
if (!$response_code)
if (!$status_code)
{
$message->errors[] = 'SendGrid: Connection error: ' . $request->body;
$message->errors[] = 'SendGrid: Connection error: ' . $result;
return false;
}
elseif ($response_code > 202)
elseif ($status_code > 202)
{
$message->errors[] = 'SendGrid: Response code ' . $response_code . ': ' . $request->body;
$message->errors[] = 'SendGrid: Response code ' . $status_code . ': ' . $result;
return false;
}

View file

@ -11,6 +11,7 @@ class Woorimail extends Base implements \Rhymix\Framework\Drivers\MailInterface
* The API URL.
*/
protected static $_url = 'https://woorimail.com/index.php';
protected static $_timeout = 5;
/**
* Error codes and messages.
@ -171,16 +172,12 @@ class Woorimail extends Base implements \Rhymix\Framework\Drivers\MailInterface
$headers = array(
'Accept' => 'application/json, text/javascript, */*; q=0.1',
);
$options = array(
'timeout' => 5,
'useragent' => 'PHP',
);
// Send the API request.
try
{
$request = \Requests::post(self::$_url, $headers, $data, $options);
$result = @json_decode($request->body);
$request = \Rhymix\Framework\HTTP::post(self::$_url, $data, $headers, [], ['timeout' => self::$_timeout]);
$result = @json_decode($request->getBody()->getContents());
}
catch (\Requests_Exception $e)
{

View file

@ -11,6 +11,7 @@ class iwinv extends Base implements \Rhymix\Framework\Drivers\SMSInterface
* API endpoint URL (fallback if URL is not explicitly configured)
*/
const LEGACY_API_URL = 'https://sms.service.iwinv.kr/send/';
const DEFAULT_TIMEOUT = 5;
/**
* API specifications.
@ -80,14 +81,13 @@ class iwinv extends Base implements \Rhymix\Framework\Drivers\SMSInterface
public function send(array $messages, \Rhymix\Framework\SMS $original)
{
$status = true;
$curl = null;
foreach ($messages as $i => $message)
{
// Authentication
$headers = array(
'Content-Type: multipart/form-data',
'secret: ' . base64_encode($this->_config['api_key'] . '&' . $this->_config['api_secret']),
'Content-Type' => 'multipart/form-data',
'secret' => base64_encode($this->_config['api_key'] . '&' . $this->_config['api_secret']),
);
// Sender and recipient
@ -109,7 +109,7 @@ class iwinv extends Base implements \Rhymix\Framework\Drivers\SMSInterface
$data['text'] = $message->content;
// Image attachment
if ($message->image)
if (!empty($message->image))
{
$data['image'] = curl_file_create(realpath($message->image));
}
@ -130,24 +130,15 @@ class iwinv extends Base implements \Rhymix\Framework\Drivers\SMSInterface
$api_url = self::LEGACY_API_URL;
}
// We need to use curl because Filehandler::getRemoteResource() doesn't work with this API for some reason.
if (!$curl)
{
$curl = curl_init();
}
curl_setopt($curl, \CURLOPT_URL, $api_url);
curl_setopt($curl, \CURLOPT_TIMEOUT, 5);
curl_setopt($curl, \CURLOPT_POST, 1);
curl_setopt($curl, \CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, \CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, \CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($curl);
$err = curl_error($curl);
// Send the request.
$request = \Rhymix\Framework\HTTP::post($api_url, $data, $headers, [], ['timeout' => self::DEFAULT_TIMEOUT]);
$result = $request->getBody()->getContents();
$status_code = $request->getStatusCode();
// Check the result.
if ($err)
if ($status_code !== 200)
{
$original->addError('API error while sending message ' . ($i + 1) . ' of ' . count($messages) . ': ' . $err);
$original->addError('API error while sending message ' . ($i + 1) . ' of ' . count($messages) . ': ' . $status_code);
$status = false;
}
elseif (trim($result) === '')
@ -162,11 +153,6 @@ class iwinv extends Base implements \Rhymix\Framework\Drivers\SMSInterface
}
}
if ($curl)
{
@curl_close($curl);
}
return $status;
}
}

View file

@ -41,6 +41,7 @@ class FileContentFilter
$fp = fopen($file, 'rb');
$first4kb = fread($fp, 4096);
$is_xml = preg_match('/<(?:\?xml|!DOCTYPE|html|head|body|meta|script|svg)\b/i', $first4kb);
$skip_xml = preg_match('/^(hwpx)$/', $ext);
// Check SVG files.
if (($ext === 'svg' || $is_xml) && !self::_checkSVG($fp, 0, $filesize))
@ -71,7 +72,7 @@ class FileContentFilter
}
// Check HTML files.
if (($ext === 'html' || $ext === 'shtml' || $ext === 'xhtml' || $ext === 'phtml' || $is_xml) && !self::_checkHTML($fp, 0, $filesize))
if (($ext === 'html' || $ext === 'shtml' || $ext === 'xhtml' || $ext === 'phtml' || ($is_xml && !$skip_xml)) && !self::_checkHTML($fp, 0, $filesize))
{
fclose($fp);
return false;
@ -92,7 +93,7 @@ class FileContentFilter
*/
protected static function _checkSVG($fp, $from, $to)
{
if (self::_matchStream('/<script|<handler\b|xlink:href\s*=\s*"(?!data:)/i', $fp, $from, $to))
if (self::_matchStream('/(?:<|&lt;)(?:script|iframe|foreignObject|object|embed|handler)|javascript:|xlink:href\s*=\s*"(?!data:)/i', $fp, $from, $to))
{
return false;
}

View file

@ -0,0 +1,54 @@
<?php
namespace Rhymix\Framework\Helpers;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Psr7\MessageTrait;
/**
* HTTP helper class.
*
* We use instances of this class to wrap HTTP error conditions
* not handled by Guzzle.
*/
class HTTPHelper implements ResponseInterface
{
use MessageTrait;
/**
* Information about the exception thrown.
*/
protected $_exception_class = '';
protected $_exception_code = 0;
protected $_error_message = '';
/**
* Create a HTTPHelper instance from an exception.
*
* @param \Throwable $exception
*/
public function __construct(\Throwable $exception)
{
$this->_exception_class = get_class($exception);
$this->_exception_code = $exception->getCode();
$this->_error_message = $exception->getMessage();
}
/**
* Methods to implement ResponseInterface.
*/
public function getStatusCode(): int
{
return 0;
}
public function getReasonPhrase(): string
{
return $this->_error_message;
}
public function withStatus($code, $reasonPhrase = ''): ResponseInterface
{
$new = clone $this;
$new->_error_message = $reasonPhrase;
return $new;
}
}

View file

@ -18,7 +18,7 @@
($.os.Linux) ? 'Linux' :
($.os.Unix) ? 'Unix' :
($.os.Mac) ? 'Mac' : '';
/* Intercept getScript error due to broken minified script URL */
$(document).ajaxError(function(event, jqxhr, settings, thrownError) {
if(settings.dataType === "script" && (jqxhr.status >= 400 || (jqxhr.responseText && jqxhr.responseText.length < 40))) {
@ -28,7 +28,7 @@
}
}
});
/**
* @brief Check if two URLs belong to the same origin
*/
@ -42,7 +42,7 @@
if (url1.match(/^(https?:)?\/\/[^\/]*[^a-z0-9\/.:_-]/i) || url2.match(/^(https?:)?\/\/[^\/]*[^a-z0-9\/.:_-]/i)) {
return false;
}
try {
url1 = window.XE.URI(url1).normalizePort().normalizeHostname().normalizePathname().origin();
url2 = window.XE.URI(url2).normalizePort().normalizeHostname().normalizePathname().origin();
@ -92,7 +92,7 @@
return $(this);
}
};
window.rhymix_alert_close = function() {
if($('#rhymix_alert').is(':hidden')) {
return;
@ -101,7 +101,7 @@
$(this).empty();
});
};
/**
* @brief display alert
*/
@ -121,7 +121,7 @@
alert(message);
}
};
$(document).ready(function() {
if(Cookies.get('rhymix_alert_message')) {
rhymix_alert(Cookies.get('rhymix_alert_message'), null, Cookies.get('rhymix_alert_delay'));
@ -130,7 +130,7 @@
}
$('#rhymix_alert').click(rhymix_alert_close);
});
/* Array for pending debug data */
window.rhymix_debug_pending_data = [];
@ -147,7 +147,7 @@
SecondLevelDomains : window.SecondLevelDomains,
IPv6 : window.IPv6,
baseurl : null,
/**
* @brief 특정 name을 가진 체크박스들의 checked 속성 변경
* @param [itemName='cart',][options={}]
@ -266,7 +266,7 @@
area.css({ top:areaOffset.top, left:areaOffset.left }).show().focus();
}
},
/* 동일 사이트 내 주소인지 판단 (프로토콜 제외) */
isSameHost: function(url) {
if (typeof url !== "string") {
@ -278,12 +278,12 @@
if (url.match(/^\w+:[^\/]*$/) || url.match(/^(https?:)?\/\/[^\/]*[^a-z0-9\/.:_-]/i)) {
return false;
}
if (!window.XE.baseurl) {
window.XE.baseurl = window.XE.URI(window.request_uri).normalizePort().normalizeHostname().normalizePathname();
window.XE.baseurl = window.XE.baseurl.hostname() + window.XE.baseurl.directory();
}
try {
var target_url = window.XE.URI(url).normalizePort().normalizeHostname().normalizePathname();
if (target_url.is("urn")) {
@ -299,7 +299,7 @@
return false;
}
},
/* Format file size */
filesizeFormat: function(size) {
if (size < 2) return size + 'Byte';
@ -310,7 +310,7 @@
return (size / 1099511627776).toFixed(2) + 'TB';
}
};
/**
* Shim for Modernizr if it is not loaded
*/
@ -324,7 +324,7 @@
touch: ('ontouchstart' in window) || (navigator.maxTouchPoints > 0),
webgl: !!window.WebGLRenderingContext
};
})(jQuery);
/* jQuery(document).ready() */
@ -336,10 +336,10 @@ jQuery(function($) {
$(document).on("focus", "input,select,textarea", function() {
$(this).parents("form[method]").filter(function() { return String($(this).attr("method")).toUpperCase() == "POST"; }).addCSRFTokenToForm();
});
/**
* Reverse tabnapping protection
*
*
* Automatically add rel="noopener" to any external link with target="_blank"
* This is not required in most modern browsers.
* https://caniuse.com/mdn-html_elements_a_implicit_noopener
@ -393,7 +393,7 @@ jQuery(function($) {
}
}
});
/* Editor preview replacement */
$(".editable_preview").addClass("rhymix_content xe_content").attr("tabindex", 0);
$(".editable_preview").on("click", function() {
@ -412,7 +412,7 @@ jQuery(function($) {
$(".editable_preview").on("focus", function() {
$(this).triggerHandler("click");
});
/* select - option의 disabled=disabled 속성을 IE에서도 체크하기 위한 함수 */
if(navigator.userAgent.match(/MSIE/)) {
$('select').each(function(i, sels) {
@ -464,7 +464,7 @@ jQuery(function($) {
alert(max_filesize_error);
}
});
jQuery('input[type="submit"],button[type="submit"]').click(function(ev){
var $el = jQuery(ev.currentTarget);
@ -549,10 +549,10 @@ jQuery(function($) {
return String(this).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
/**
* @brief Helper function for setQuery()
*
*
* @param uri URI
* @return URI
*/
@ -565,10 +565,10 @@ jQuery(function($) {
if(window.XE.isSameHost(uri.toString()) && filename === 'index.php' && $.isEmptyObject(queries)) {
filename = '';
}
return uri.protocol(protocol).port(port || null).normalizePort().filename(filename);
}
})(jQuery);
/**
@ -610,7 +610,7 @@ function winopen(url, target, features) {
if (typeof target == 'undefined') target = '_blank';
if (typeof features == 'undefined') features = '';
if (!window.XE.isSameHost(url)) {
window.blankshield.open(url, target, features);
} else {
@ -666,7 +666,7 @@ function move_url(url, open_window) {
if (/^\./.test(url)) {
url = window.request_uri + url;
}
if (typeof open_window == 'undefined' || open_window == 'N') {
redirect(url);
} else {
@ -1315,7 +1315,7 @@ jQuery(function($){
var name = $this.attr('name');
var href = $this.attr('href');
if (!name) name = '_xe_popup_' + Math.floor(Math.random() * 1000);
event.preventDefault();
winopen(href, name, 'left=10,top=10,width=10,height=10,resizable=no,scrollbars=no,toolbars=no');
});

View file

@ -1,22 +1,22 @@
/**
* Client-side script for manipulating the debug panel on Rhymix.
*
*
* @file debug.js
* @author Kijin Sung <kijin@kijinsung.com>
*/
$(function() {
"use strict";
// Disable debug panel?
if ($('body').hasClass("disable_debug_panel")) {
return;
}
// Find debug panel elements.
var panel = $("#rhymix_debug_panel");
var button = $("#rhymix_debug_button").addClass('visible');
// Initialize the debug button.
var button_link = $('<a href="#"></a>').text("DEBUG").appendTo(button).click(function(event) {
event.preventDefault();
@ -24,7 +24,7 @@ $(function() {
panel.css({ width: max_width, left: max_width * -1 }).show().animate({ left: 0 }, 200);
button.hide();
});
// Initialize the debug panel.
var header = $('<div class="debug_header"></div>').appendTo(panel);
header.append('<h2>RHYMIX DEBUG</h2>');
@ -38,19 +38,19 @@ $(function() {
button.show();
});
}));
// Define a function for adding debug data to the panel.
window.rhymix_debug_add_data = function(data, open) {
// Define loop variables.
var i, j, entry, num, backtrace, description;
// New pages are open by default.
if (open !== true && open !== false)
{
open = true;
}
// Create the page.
var page = $('<div class="debug_page"></div>').appendTo(panel);
var page_body = $('<div class="debug_page_body"></div>').appendTo(page);
@ -58,7 +58,7 @@ $(function() {
{
page_body.hide();
}
// Create the page header.
var page_header = $('<div class="debug_page_header"></div>').prependTo(page).click(function() {
$(this).find("a.debug_page_collapse").triggerHandler("click");
@ -75,7 +75,7 @@ $(function() {
$(this).text("▲");
}
}));
// Add general information.
if (data.request) {
page_body.append($('<h4></h4>').text('General Information'));
@ -87,7 +87,7 @@ $(function() {
metadata.append($('<li></li>').text('Total Time: ' + data.timing.total));
metadata.append($('<li></li>').text('Query Time: ' + data.timing.db_query));
}
// Add debug entries.
if (data.entries && data.entries.length) {
page_body.append($('<h4></h4>').text('Debug Entries (' + data.entries.length + ')'));
@ -103,7 +103,7 @@ $(function() {
}
}
}
// Add errors.
if (data.errors && data.errors.length) {
page_body.append($('<h4></h4>').text('Errors (' + data.errors.length + ')'));
@ -119,7 +119,7 @@ $(function() {
}
}
}
// Add queries.
if (data.queries && data.queries.length) {
page_body.append($('<h4></h4>').text('Queries (' + data.queries.length + ')'));
@ -145,7 +145,7 @@ $(function() {
description.append($('<li></li>').text("Result: " + ((data.queries[i].message === "success" || !data.queries[i].message) ? "success" : data.queries[i].message)));
}
}
// Add slow queries.
if (data.slow_queries && data.slow_queries.length) {
page_body.append($('<h4></h4>').text('Slow Queries (' + data.slow_queries.length + ')'));
@ -171,7 +171,7 @@ $(function() {
description.append($('<li></li>').text("Result: " + ((data.slow_queries[i].message === "success" || !data.slow_queries[i].message) ? "success" : ("error " + data.slow_queries[i].error_code + " " + data.slow_queries[i].message))));
}
}
// Add slow triggers.
if (data.slow_triggers && data.slow_triggers.length) {
page_body.append($('<h4></h4>').text('Slow Triggers (' + data.slow_triggers.length + ')'));
@ -184,7 +184,7 @@ $(function() {
description.append($('<li></li>').text("Exec Time: " + (data.slow_triggers[i].trigger_time ? (data.slow_triggers[i].trigger_time.toFixed(4) + " sec") : "")));
}
}
// Add slow widgets.
if (data.slow_widgets && data.slow_widgets.length) {
page_body.append($('<h4></h4>').text('Slow Widgets (' + data.slow_widgets.length + ')'));
@ -196,7 +196,7 @@ $(function() {
description.append($('<li></li>').text("Exec Time: " + (data.slow_widgets[i].widget_time ? (data.slow_widgets[i].widget_time.toFixed(4) + " sec") : "")));
}
}
// Add slow remote requests.
if (data.slow_remote_requests && data.slow_remote_requests.length) {
page_body.append($('<h4></h4>').text('Slow Remote Requests (' + data.slow_remote_requests.length + ')'));
@ -212,19 +212,19 @@ $(function() {
description.append($('<li></li>').text("Status Code: " + data.slow_remote_requests[i].status));
}
}
// If there are errors, turn the button text red.
if (data.errors && data.errors.length) {
button_link.addClass("has_errors");
}
};
// Add debug data from the current request.
if (window.rhymix_debug_content) {
window.rhymix_debug_content.page_title = 'MAIN PAGE';
rhymix_debug_add_data(window.rhymix_debug_content, true);
}
// Add debug data from pending AJAX requests.
if (window.rhymix_debug_pending_data) {
while (window.rhymix_debug_pending_data.length) {

View file

@ -87,7 +87,7 @@
var currentEnforce_ssl = window.enforce_ssl;
if(location.protocol == 'https:') { window.enforce_ssl = true; }
var chunkStatus = true;
var defaultFormData = {
"editor_sequence": data.editorSequence,
@ -195,7 +195,7 @@
temp_code = temp_code.replace('controls', 'poster="' + result.thumbnail_filename.replace(/^.\//, XE.URI(default_url).pathname()) + '" controls');
}
}
if(temp_code !== '') {
if (opt.autoinsertPosition === 'paragraph') {
temp_code = "<p>" + temp_code + "</p>\n";
@ -376,7 +376,7 @@
temp_code = temp_code.replace('controls', 'poster="' + result.thumbnail_filename.replace(/^.\//, XE.URI(default_url).pathname()) + '" controls');
}
}
if(temp_code !== '') {
if (data.settings.autoinsertPosition === 'paragraph') {
temp_code = "<p>" + temp_code + "</p>\n";
@ -389,7 +389,7 @@
_getCkeInstance(data.editorSequence).insertHtml(temp_code, "unfiltered_html");
}
catch(err) {}
});
},
/**
@ -474,13 +474,13 @@
// 이미지와 그외 파일 분리
$.each(res.files, function (index, file) {
if(data.files[file.file_srl]) return;
data.files[file.file_srl] = file;
$container.data(data);
file.thumbnail_url = file.download_url;
file.source_filename = file.source_filename.replace("&amp;", "&");
if(file.thumbnail_filename) {
file.thumbnail_url = file.thumbnail_filename;
if(/\.(mp4|webm|ogv)$/i.test(file.source_filename)) {

View file

@ -495,13 +495,13 @@
}
var xmlDoc;
if (window.DOMParser) {
var parser=new window.DOMParser();
var parser=new window.DOMParser();
try {
xmlDoc = parser.parseFromString( xmlDocStr, "text/xml" );
if(xmlDoc.getElementsByTagNameNS('*', "parsererror").length > 0) {
//throw new Error('Error parsing XML: '+xmlDocStr);
xmlDoc = null;
}
}
}
catch(err) {
xmlDoc = null;

View file

@ -2,50 +2,55 @@
* Functions for sending AJAX requests to the server.
*/
(function($){
"use strict";
/**
* Set this variable to false to hide the "waiting for server response" layer.
*/
window.show_waiting_message = false;
/**
* Set this variable to false to hide the "do you want to leave the page?" dialog.
*/
window.show_leaving_warning = false;
/**
* This variable becomes true when the user tries to navigate away from the page.
*/
var page_unloading = false;
/**
* This variable stores the .wfsr jQuery object.
*/
var waiting_obj = $(".wfsr");
/**
* Function for compatibility with XE's exec_xml()
*/
window.exec_xml = $.exec_xml = function(module, act, params, callback_success, return_fields, callback_success_arg, fo_obj) {
// Display deprecation notice.
if (typeof console == "object" && typeof console.log == "function") {
console.log("DEPRECATED : exec_xml() is deprecated in Rhymix. Use exec_json() instead.");
}
// Define callback functions.
var successHandler, errorHandler, xmlHandler;
// Convert params to object and fill in the module and act.
params = params ? ($.isArray(params) ? arr2obj(params) : params) : {};
params.module = module;
params.act = act;
params._rx_ajax_compat = 'XMLRPC';
params._rx_csrf_token = getCSRFToken();
// Decide whether or not to use SSL.
var url = request_uri;
// Check whether this is a cross-domain request. If so, use an alternative method.
if (!isSameOrigin(location.href, url)) return send_by_form(url, params);
// Delay the waiting message for 1 second to prevent rapid blinking.
waiting_obj.css("opacity", 0.0);
var wfsr_timeout = setTimeout(function() {
@ -53,14 +58,14 @@
waiting_obj.css("opacity", "").show();
}
}, 1000);
// Define the success handler.
successHandler = function(data, textStatus, xhr) {
// Hide the waiting message.
clearTimeout(wfsr_timeout);
waiting_obj.hide().trigger("cancel_confirm");
// Copy data to the result object.
var result = {};
$.each(data, function(key, val) {
@ -68,7 +73,7 @@
result[key] = val;
}
});
// Add debug information.
if (data._rx_debug) {
data._rx_debug.page_title = "AJAX : " + params.module + "." + params.act;
@ -78,7 +83,7 @@
window.rhymix_debug_pending_data.push(data._rx_debug);
}
}
// If the response contains an error, display the error message.
if (data.error != "0") {
// This way of calling an error handler is deprecated. Do not use it.
@ -100,7 +105,7 @@
}
return null;
}
// If the response contains a redirect URL, redirect immediately.
if (data.redirect_url) {
data.redirect_url = data.redirect_url.replace(/&amp;/g, "&");
@ -108,21 +113,21 @@
if (data.redirect_url && !$.isFunction(callback_success)) {
return redirect(data.redirect_url);
}
// If there was a success callback, call it.
if ($.isFunction(callback_success)) {
callback_success(result, return_fields, callback_success_arg, fo_obj);
}
};
// Define the error handler.
errorHandler = function(xhr, textStatus, doNotHandleXml) {
// If the server has returned XML anyway, convert to JSON and call the success handler.
if (textStatus === 'parsererror' && doNotHandleXml !== true && xhr.responseText && xhr.responseText.match(/<response/)) {
return xmlHandler(xhr, textStatus);
}
// If the user is navigating away, don't do anything.
if (xhr.status == 0 && page_unloading) {
return;
@ -132,7 +137,7 @@
clearTimeout(wfsr_timeout);
waiting_obj.hide().trigger("cancel_confirm");
var error_info;
if ($(".x_modal-body").size()) {
error_info = xhr.status + " " + xhr.statusText + " (" + textStatus + ")" + "<br><br><pre>" + xhr.responseText + "</pre>";
alert("AJAX communication error while requesting " + params.module + "." + params.act + "<br><br>" + error_info);
@ -141,7 +146,7 @@
alert("AJAX communication error while requesting " + params.module + "." + params.act + "\n\n" + error_info);
}
};
// Define the legacy XML handler.
xmlHandler = function(xhr, textStatus) {
var parseXmlAndReturn = function() {
@ -167,7 +172,7 @@
});
}
};
// Send the AJAX request.
try {
$.ajax({
@ -189,7 +194,7 @@
* Function for compatibility with XE's exec_json()
*/
window.exec_json = $.exec_json = function(action, params, callback_success, callback_error) {
// Convert params to object and fill in the module and act.
var action_parts = action.split('.');
var request_info;
@ -204,7 +209,7 @@
params._rx_csrf_token = getCSRFToken();
request_info = params.module + "." + params.act;
}
// Delay the waiting message for 1 second to prevent rapid blinking.
waiting_obj.css("opacity", 0.0);
var wfsr_timeout = setTimeout(function() {
@ -212,14 +217,14 @@
waiting_obj.css("opacity", "").show();
}
}, 1000);
// Define the success handler.
var successHandler = function(data, textStatus, xhr) {
// Hide the waiting message.
clearTimeout(wfsr_timeout);
waiting_obj.hide().trigger("cancel_confirm");
// Add debug information.
if (data._rx_debug) {
data._rx_debug.page_title = "AJAX : " + request_info;
@ -229,7 +234,7 @@
window.rhymix_debug_pending_data.push(data._rx_debug);
}
}
// If the response contains an error, display the error message.
if(data.error != "0" && data.error > -1000) {
// If this is a temporary CSRF error, retry with a new token.
@ -242,7 +247,7 @@
});
}
// Should not display the error message when the callback function returns false.
if ($.isFunction(callback_error) && callback_error(data) === false) {
if ($.isFunction(callback_error) && callback_error(data, xhr) === false) {
return;
}
if(data.error == -1 && data.message == "admin.msg_is_not_administrator") {
@ -261,7 +266,7 @@
return;
}
}
// If the response contains a redirect URL, redirect immediately.
if (data.redirect_url) {
data.redirect_url = data.redirect_url.replace(/&amp;/g, "&");
@ -269,13 +274,13 @@
if (data.redirect_url && !$.isFunction(callback_success)) {
return redirect(data.redirect_url);
}
// If there was a success callback, call it.
if($.isFunction(callback_success)) {
callback_success(data);
}
};
// Define the error handler.
var errorHandler = function(xhr, textStatus) {
@ -283,12 +288,21 @@
if (xhr.status == 0 && page_unloading) {
return;
}
// Hide the waiting message and display an error notice.
clearTimeout(wfsr_timeout);
waiting_obj.hide().trigger("cancel_confirm");
var error_info;
// If a callback function is defined, call it and check if it returns false.
if ($.isFunction(callback_error)) {
var data = { error: -3, message: textStatus };
if (callback_error(data, xhr) === false) {
return;
}
}
// Otherwise, display a simple alert dialog.
if ($(".x_modal-body").size()) {
error_info = xhr.status + " " + xhr.statusText + " (" + textStatus + ")" + "<br><br><pre>" + xhr.responseText + "</pre>";
alert("AJAX communication error while requesting " + params.module + "." + params.act + "<br><br>" + error_info);
@ -297,7 +311,7 @@
alert("AJAX communication error while requesting " + params.module + "." + params.act + "\n\n" + error_info);
}
};
// Send the AJAX request.
try {
$.ajax({
@ -320,7 +334,7 @@
*/
window.exec_html = $.fn.exec_html = function() {
if (typeof console == "object" && typeof console.log == "function") {
console.log("DEPRECATED : exec_html() is deprecated in Rhymix.");
console.log("DEPRECATED : exec_html() is obsolete in Rhymix.");
}
};
@ -396,7 +410,7 @@
XE.ajaxForm(this);
}
});
/**
* Empty placeholder for beforeUnload handler.
*/
@ -404,7 +418,7 @@
page_unloading = true;
return "";
};
/**
* Register the beforeUnload handler.
*/
@ -431,18 +445,18 @@
* It was meant for cross-domain requests, but should be replaced with JSONP.
*/
function send_by_form(url, params) {
// This function is deprecated!
if (typeof console == "object" && typeof console.log == "function") {
console.log("DEPRECATED : send_by_form() is deprecated in Rhymix.");
}
// Create the hidden iframe.
var frame_id = "xeTmpIframe";
if (!$("#" + frame_id).length) {
$('<iframe name="%id%" id="%id%" style="position:absolute;left:-1px;top:1px;width:1px;height:1px"></iframe>'.replace(/%id%/g, frame_id)).appendTo(document.body);
}
// Create the hidden form.
var form_id = "xeVirtualForm";
$("#" + form_id).remove();
@ -452,17 +466,17 @@ function send_by_form(url, params) {
"action" : url,
"target" : frame_id
});
// Add virtual XML parameters.
params.xeVirtualRequestMethod = "xml";
params.xeRequestURI = location.href.replace(/#(.*)$/i, "");
params.xeVirtualRequestUrl = request_uri;
// Add inputs to the form.
$.each(params, function(key, value){
$('<input type="hidden">').attr("name", key).attr("value", value).appendTo(form);
});
// Submit the hidden form.
form.appendTo(document.body).submit();
}

View file

@ -2,6 +2,24 @@
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit1e37ff09eb6590c7436f139ffd9070de::getLoader();

View file

@ -1 +0,0 @@
../league/html-to-markdown/bin/html-to-markdown

120
common/vendor/bin/html-to-markdown vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../league/html-to-markdown/bin/html-to-markdown)
* 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__ . '/..'.'/league/html-to-markdown/bin/html-to-markdown');
exit(0);
}
}
include __DIR__ . '/..'.'/league/html-to-markdown/bin/html-to-markdown';

View file

@ -1 +0,0 @@
../leafo/lessphp/lessify

120
common/vendor/bin/lessify vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../leafo/lessphp/lessify)
* 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__ . '/..'.'/leafo/lessphp/lessify');
exit(0);
}
}
include __DIR__ . '/..'.'/leafo/lessphp/lessify';

View file

@ -1 +0,0 @@
../matthiasmullie/minify/bin/minifycss

120
common/vendor/bin/minifycss vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../matthiasmullie/minify/bin/minifycss)
* 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__ . '/..'.'/matthiasmullie/minify/bin/minifycss');
exit(0);
}
}
include __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifycss';

View file

@ -1 +0,0 @@
../matthiasmullie/minify/bin/minifyjs

120
common/vendor/bin/minifyjs vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../matthiasmullie/minify/bin/minifyjs)
* 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__ . '/..'.'/matthiasmullie/minify/bin/minifyjs');
exit(0);
}
}
include __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifyjs';

View file

@ -1 +0,0 @@
../leafo/lessphp/plessc

120
common/vendor/bin/plessc vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../leafo/lessphp/plessc)
* 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__ . '/..'.'/leafo/lessphp/plessc');
exit(0);
}
}
include __DIR__ . '/..'.'/leafo/lessphp/plessc';

View file

@ -1 +0,0 @@
../scssphp/scssphp/bin/pscss

120
common/vendor/bin/pscss vendored Executable file
View file

@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../scssphp/scssphp/bin/pscss)
* 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__ . '/..'.'/scssphp/scssphp/bin/pscss');
exit(0);
}
}
include __DIR__ . '/..'.'/scssphp/scssphp/bin/pscss';

View file

@ -42,21 +42,79 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -66,28 +124,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -102,9 +179,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -147,11 +226,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -195,8 +276,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -211,10 +294,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -234,6 +319,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -256,6 +343,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -276,6 +365,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -296,33 +387,54 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return bool|null True if loaded, null otherwise
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
(self::$includeFile)($file);
return true;
}
return null;
}
/**
@ -367,6 +479,21 @@ class ClassLoader
return $file;
}
/**
* Returns the currently registered loaders indexed by their corresponding vendor directories.
*
* @return self[]
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -432,14 +559,23 @@ class ClassLoader
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*/
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;
};
}
}

View file

@ -1,527 +1,352 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
private static $installed = array (
'root' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '735d3dd97cb734f22b76ffef1857523b7e918d6a',
'name' => 'rhymix/rhymix',
),
'versions' =>
array (
'bordoni/phpass' =>
array (
'pretty_version' => '0.3.6',
'version' => '0.3.6.0',
'aliases' =>
array (
),
'reference' => '12f8f5cc03ebb7efd69554f104afe9aa1aa46e1a',
),
'composer/ca-bundle' =>
array (
'pretty_version' => '1.3.4',
'version' => '1.3.4.0',
'aliases' =>
array (
),
'reference' => '69098eca243998b53eed7a48d82dedd28b447cd5',
),
'coolsms/php-sdk' =>
array (
'pretty_version' => 'v2.0',
'version' => '2.0.0.0',
'aliases' =>
array (
),
'reference' => 'ce00fea155169dcf2a3759abd41ad20ff80ca0b1',
),
'doctrine/lexer' =>
array (
'pretty_version' => '1.2.3',
'version' => '1.2.3.0',
'aliases' =>
array (
),
'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229',
),
'egulias/email-validator' =>
array (
'pretty_version' => '3.2.1',
'version' => '3.2.1.0',
'aliases' =>
array (
),
'reference' => 'f88dcf4b14af14a98ad96b14b2b317969eab6715',
),
'enshrined/svg-sanitize' =>
array (
'pretty_version' => '0.15.4',
'version' => '0.15.4.0',
'aliases' =>
array (
),
'reference' => 'e50b83a2f1f296ca61394fe88fbfe3e896a84cf4',
),
'ezyang/htmlpurifier' =>
array (
'pretty_version' => 'v4.16.0',
'version' => '4.16.0.0',
'aliases' =>
array (
),
'reference' => '523407fb06eb9e5f3d59889b3978d5bfe94299c8',
),
'guzzlehttp/guzzle' =>
array (
'pretty_version' => '7.5.0',
'version' => '7.5.0.0',
'aliases' =>
array (
),
'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba',
),
'guzzlehttp/promises' =>
array (
'pretty_version' => '1.5.2',
'version' => '1.5.2.0',
'aliases' =>
array (
),
'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',
),
'guzzlehttp/psr7' =>
array (
'pretty_version' => '2.4.3',
'version' => '2.4.3.0',
'aliases' =>
array (
),
'reference' => '67c26b443f348a51926030c83481b85718457d3d',
),
'hautelook/phpass' =>
array (
'replaced' =>
array (
0 => '0.3.*',
),
),
'jbbcode/jbbcode' =>
array (
'pretty_version' => 'v1.4.2',
'version' => '1.4.2.0',
'aliases' =>
array (
),
'reference' => 'd9a132e7886a11cf997e3ec025a41bdf97899704',
),
'leafo/lessphp' =>
array (
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'aliases' =>
array (
0 => '9999999-dev',
),
'reference' => '1fdc40e77824a692d7f4811ba86ed89669a66135',
),
'league/html-to-markdown' =>
array (
'pretty_version' => '5.1.0',
'version' => '5.1.0.0',
'aliases' =>
array (
),
'reference' => 'e0fc8cf07bdabbcd3765341ecb50c34c271d64e1',
),
'matthiasmullie/minify' =>
array (
'pretty_version' => '1.3.70',
'version' => '1.3.70.0',
'aliases' =>
array (
),
'reference' => '2807d9f9bece6877577ad44acb5c801bb3ae536b',
),
'matthiasmullie/path-converter' =>
array (
'pretty_version' => '1.1.3',
'version' => '1.1.3.0',
'aliases' =>
array (
),
'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',
),
'michelf/php-markdown' =>
array (
'pretty_version' => '1.9.1',
'version' => '1.9.1.0',
'aliases' =>
array (
),
'reference' => '5024d623c1a057dcd2d076d25b7d270a1d0d55f3',
),
'michelf/php-smartypants' =>
array (
'pretty_version' => '1.8.1',
'version' => '1.8.1.0',
'aliases' =>
array (
),
'reference' => '47d17c90a4dfd0ccf1f87e25c65e6c8012415aad',
),
'psr/http-client' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
),
'psr/http-client-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'psr/http-factory' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
),
'psr/http-factory-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'psr/http-message' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
),
'psr/http-message-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'ralouphie/getallheaders' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
),
'rhymix/rhymix' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '735d3dd97cb734f22b76ffef1857523b7e918d6a',
),
'rmccue/requests' =>
array (
'pretty_version' => 'v1.8.1',
'version' => '1.8.1.0',
'aliases' =>
array (
),
'reference' => '82e6936366eac3af4d836c18b9d8c31028fe4cd5',
),
'scssphp/scssphp' =>
array (
'pretty_version' => 'v1.11.0',
'version' => '1.11.0.0',
'aliases' =>
array (
),
'reference' => '33749d12c2569bb24071f94e9af828662dabb068',
),
'swiftmailer/swiftmailer' =>
array (
'pretty_version' => 'v6.3.0',
'version' => '6.3.0.0',
'aliases' =>
array (
),
'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c',
),
'symfony/deprecation-contracts' =>
array (
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'aliases' =>
array (
),
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
),
'symfony/polyfill-iconv' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '927013f3aac555983a5059aada98e1907d842695',
),
'symfony/polyfill-intl-idn' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '639084e360537a19f9ee352433b84ce831f3d2da',
),
'symfony/polyfill-intl-normalizer' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6',
),
'symfony/polyfill-mbstring' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
),
'symfony/polyfill-php72' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
),
'true/punycode' =>
array (
'pretty_version' => 'v2.1.1',
'version' => '2.1.1.0',
'aliases' =>
array (
),
'reference' => 'a4d0c11a36dd7f4e7cd7096076cab6d3378a071e',
),
),
);
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
public static function getInstalledPackages()
{
return array_keys(self::$installed['versions']);
}
public static function isInstalled($packageName)
{
return isset(self::$installed['versions'][$packageName]);
}
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
public static function getVersionRanges($packageName)
{
if (!isset(self::$installed['versions'][$packageName])) {
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
$ranges = array();
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
public static function getVersion($packageName)
{
if (!isset(self::$installed['versions'][$packageName])) {
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
if (!isset(self::$installed['versions'][$packageName]['version'])) {
return null;
}
return self::$installed['versions'][$packageName]['version'];
}
public static function getPrettyVersion($packageName)
{
if (!isset(self::$installed['versions'][$packageName])) {
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return self::$installed['versions'][$packageName]['pretty_version'];
}
public static function getReference($packageName)
{
if (!isset(self::$installed['versions'][$packageName])) {
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
return null;
}
return self::$installed['versions'][$packageName]['reference'];
}
public static function getRootPackage()
{
return self::$installed['root'];
}
public static function getRawData()
{
return self::$installed;
}
public static function reload($data)
{
self::$installed = $data;
}
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints($constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = require __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
$installed[] = self::$installed;
return $installed;
}
}

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(

View file

@ -2,7 +2,7 @@
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
@ -11,10 +11,10 @@ return array(
'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
'7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
);

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
@ -14,7 +14,7 @@ return array(
'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'),
'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
'ScssPhp\\ScssPhp\\' => array($vendorDir . '/scssphp/scssphp/src'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
'Nurigo\\' => array($vendorDir . '/coolsms/php-sdk/app/Nurigo'),
'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'),

View file

@ -23,51 +23,26 @@ class ComposerAutoloaderInit1e37ff09eb6590c7436f139ffd9070de
}
spl_autoload_register(array('ComposerAutoloaderInit1e37ff09eb6590c7436f139ffd9070de', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInit1e37ff09eb6590c7436f139ffd9070de', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de::getInitializer($loader));
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire1e37ff09eb6590c7436f139ffd9070de($fileIdentifier, $file);
$filesToLoad = \Composer\Autoload\ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de::$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;
}
}
function composerRequire1e37ff09eb6590c7436f139ffd9070de($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}

View file

@ -12,10 +12,10 @@ class ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de
'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php',
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
);
@ -112,8 +112,8 @@ class ComposerStaticInit1e37ff09eb6590c7436f139ffd9070de
),
'Psr\\Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-factory/src',
1 => __DIR__ . '/..' . '/psr/http-message/src',
0 => __DIR__ . '/..' . '/psr/http-message/src',
1 => __DIR__ . '/..' . '/psr/http-factory/src',
),
'Psr\\Http\\Client\\' =>
array (

View file

@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Tue Oct 11 03:12:05 2022 GMT
## Certificate data from Mozilla as of: Tue Jan 10 04:12:06 2023 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
## SHA256: 3ff8bd209b5f2e739b9f2b96eacb694a774114685b02978257824f37ff528f71
## SHA256: 90c470e705b4b5f36f09684dc50e2b79c8b86989a848b62cd1a7bd6460ee65f6
##
@ -489,29 +489,6 @@ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
-----END CERTIFICATE-----
Network Solutions Certificate Authority
=======================================
-----BEGIN CERTIFICATE-----
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
-----END CERTIFICATE-----
COMODO ECC Certification Authority
==================================
-----BEGIN CERTIFICATE-----
@ -1654,36 +1631,6 @@ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
-----END CERTIFICATE-----
Staat der Nederlanden EV Root CA
================================
-----BEGIN CERTIFICATE-----
MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE
CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk
SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW
O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r
0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8
Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV
XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr
08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV
0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd
74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa
ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu
c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq
5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN
b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN
f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi
5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK
DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy
eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
-----END CERTIFICATE-----
IdenTrust Commercial Root CA 1
==============================
-----BEGIN CERTIFICATE-----
@ -2135,87 +2082,6 @@ F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ
aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g==
-----END CERTIFICATE-----
TrustCor RootCert CA-1
======================
-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx
MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu
YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe
VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy
dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq
jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4
pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0
JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h
gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw
/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j
BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5
mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf
ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C
qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P
3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk=
-----END CERTIFICATE-----
TrustCor RootCert CA-2
======================
-----BEGIN CERTIFICATE-----
MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w
DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT
eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0
eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy
MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h
bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U
cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0
IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb
ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk
RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1
oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb
XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1
/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q
jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP
eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg
rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh
8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU
2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD
VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h
Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp
kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv
2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3
S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw
PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv
DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU
RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE
xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX
RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ
-----END CERTIFICATE-----
TrustCor ECA-1
==============
-----BEGIN CERTIFICATE-----
MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP
MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig
U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp
dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw
N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5
MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y
IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR
MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23
xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc
p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+
fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj
YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL
f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF
AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u
/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F
hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs
J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC
jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g==
-----END CERTIFICATE-----
SSL.com Root Certification Authority RSA
========================================
-----BEGIN CERTIFICATE-----

View file

@ -61,17 +61,17 @@
},
{
"name": "composer/ca-bundle",
"version": "1.3.4",
"version_normalized": "1.3.4.0",
"version": "1.3.5",
"version_normalized": "1.3.5.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "69098eca243998b53eed7a48d82dedd28b447cd5"
"reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/69098eca243998b53eed7a48d82dedd28b447cd5",
"reference": "69098eca243998b53eed7a48d82dedd28b447cd5",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd",
"reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd",
"shasum": ""
},
"require": {
@ -85,7 +85,7 @@
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"time": "2022-10-12T12:08:29+00:00",
"time": "2023-01-11T08:27:00+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -120,7 +120,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.3.4"
"source": "https://github.com/composer/ca-bundle/tree/1.3.5"
},
"funding": [
{
@ -276,33 +276,32 @@
},
{
"name": "egulias/email-validator",
"version": "3.2.1",
"version_normalized": "3.2.1.0",
"version": "3.2.5",
"version_normalized": "3.2.5.0",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
"reference": "b531a2311709443320c786feb4519cfaf94af796"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796",
"reference": "b531a2311709443320c786feb4519cfaf94af796",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.2",
"doctrine/lexer": "^1.2|^2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
},
"time": "2022-06-18T20:57:19+00:00",
"time": "2023-01-02T17:26:14+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -335,7 +334,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
"source": "https://github.com/egulias/EmailValidator/tree/3.2.5"
},
"funding": [
{
@ -347,28 +346,29 @@
},
{
"name": "enshrined/svg-sanitize",
"version": "0.15.4",
"version_normalized": "0.15.4.0",
"version": "0.16.0",
"version_normalized": "0.16.0.0",
"source": {
"type": "git",
"url": "https://github.com/darylldoyle/svg-sanitizer.git",
"reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4"
"reference": "239e257605e2141265b429e40987b2ee51bba4b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4",
"reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4",
"url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/239e257605e2141265b429e40987b2ee51bba4b4",
"reference": "239e257605e2141265b429e40987b2ee51bba4b4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"php": "^7.0 || ^8.0"
"ezyang/htmlpurifier": "^4.16",
"php": "^5.6 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6.5 || ^8.5"
"phpunit/phpunit": "^5.7 || ^6.5 || ^8.5"
},
"time": "2022-02-21T09:13:59+00:00",
"time": "2023-03-20T10:51:12+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -389,7 +389,7 @@
"description": "An SVG sanitizer for PHP",
"support": {
"issues": "https://github.com/darylldoyle/svg-sanitizer/issues",
"source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4"
"source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.16.0"
},
"install-path": "../enshrined/svg-sanitize"
},
@ -459,23 +459,23 @@
},
{
"name": "guzzlehttp/guzzle",
"version": "7.5.0",
"version_normalized": "7.5.0.0",
"version": "7.5.1",
"version_normalized": "7.5.1.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba"
"reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba",
"reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9",
"reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.5",
"guzzlehttp/psr7": "^1.9 || ^2.4",
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@ -495,7 +495,7 @@
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"time": "2022-08-28T15:39:27+00:00",
"time": "2023-04-17T16:30:08+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
@ -570,7 +570,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.5.0"
"source": "https://github.com/guzzle/guzzle/tree/7.5.1"
},
"funding": [
{
@ -677,23 +677,23 @@
},
{
"name": "guzzlehttp/psr7",
"version": "2.4.3",
"version_normalized": "2.4.3.0",
"version": "2.5.0",
"version_normalized": "2.5.0.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "67c26b443f348a51926030c83481b85718457d3d"
"reference": "b635f279edd83fc275f822a1188157ffea568ff6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d",
"reference": "67c26b443f348a51926030c83481b85718457d3d",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
"reference": "b635f279edd83fc275f822a1188157ffea568ff6",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
},
"provide": {
@ -708,15 +708,12 @@
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"time": "2022-10-26T14:07:24+00:00",
"time": "2023-04-17T16:11:26+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": false
},
"branch-alias": {
"dev-master": "2.4-dev"
}
},
"installation-source": "dist",
@ -779,7 +776,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.4.3"
"source": "https://github.com/guzzle/psr7/tree/2.5.0"
},
"funding": [
{
@ -1233,24 +1230,24 @@
},
{
"name": "psr/http-client",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-client.git",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
"url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31",
"shasum": ""
},
"require": {
"php": "^7.0 || ^8.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"time": "2020-06-29T06:28:15+00:00",
"time": "2023-04-10T20:12:12+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -1270,7 +1267,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
@ -1282,30 +1279,30 @@
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client/tree/master"
"source": "https://github.com/php-fig/http-client/tree/1.0.2"
},
"install-path": "../psr/http-client"
},
{
"name": "psr/http-factory",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
"reference": "e616d01114759c4c489f93b099585439f795fe35"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
"reference": "e616d01114759c4c489f93b099585439f795fe35",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0"
"psr/http-message": "^1.0 || ^2.0"
},
"time": "2019-04-30T12:38:16+00:00",
"time": "2023-04-10T20:10:41+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -1325,7 +1322,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interfaces for PSR-7 HTTP message factories",
@ -1340,33 +1337,33 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory/tree/master"
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
},
"install-path": "../psr/http-factory"
},
{
"name": "psr/http-message",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"version": "2.0",
"version_normalized": "2.0.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
"php": "^7.2 || ^8.0"
},
"time": "2016-08-06T14:39:51+00:00",
"time": "2023-04-04T09:54:51+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
"dev-master": "2.0.x-dev"
}
},
"installation-source": "dist",
@ -1382,7 +1379,7 @@
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
@ -1396,7 +1393,7 @@
"response"
],
"support": {
"source": "https://github.com/php-fig/http-message/tree/master"
"source": "https://github.com/php-fig/http-message/tree/2.0"
},
"install-path": "../psr/http-message"
},

View file

@ -1,332 +1,328 @@
<?php return array (
'root' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
<?php return array(
'root' => array(
'name' => 'rhymix/rhymix',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '901bdab6a9298ba644187ca6b555567b8872c17a',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev' => false,
),
'reference' => '735d3dd97cb734f22b76ffef1857523b7e918d6a',
'name' => 'rhymix/rhymix',
),
'versions' =>
array (
'bordoni/phpass' =>
array (
'pretty_version' => '0.3.6',
'version' => '0.3.6.0',
'aliases' =>
array (
),
'reference' => '12f8f5cc03ebb7efd69554f104afe9aa1aa46e1a',
'versions' => array(
'bordoni/phpass' => array(
'pretty_version' => '0.3.6',
'version' => '0.3.6.0',
'reference' => '12f8f5cc03ebb7efd69554f104afe9aa1aa46e1a',
'type' => 'library',
'install_path' => __DIR__ . '/../bordoni/phpass',
'aliases' => array(),
'dev_requirement' => false,
),
'composer/ca-bundle' => array(
'pretty_version' => '1.3.5',
'version' => '1.3.5.0',
'reference' => '74780ccf8c19d6acb8d65c5f39cd72110e132bbd',
'type' => 'library',
'install_path' => __DIR__ . '/./ca-bundle',
'aliases' => array(),
'dev_requirement' => false,
),
'coolsms/php-sdk' => array(
'pretty_version' => 'v2.0',
'version' => '2.0.0.0',
'reference' => 'ce00fea155169dcf2a3759abd41ad20ff80ca0b1',
'type' => 'library',
'install_path' => __DIR__ . '/../coolsms/php-sdk',
'aliases' => array(),
'dev_requirement' => false,
),
'doctrine/lexer' => array(
'pretty_version' => '1.2.3',
'version' => '1.2.3.0',
'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/lexer',
'aliases' => array(),
'dev_requirement' => false,
),
'egulias/email-validator' => array(
'pretty_version' => '3.2.5',
'version' => '3.2.5.0',
'reference' => 'b531a2311709443320c786feb4519cfaf94af796',
'type' => 'library',
'install_path' => __DIR__ . '/../egulias/email-validator',
'aliases' => array(),
'dev_requirement' => false,
),
'enshrined/svg-sanitize' => array(
'pretty_version' => '0.16.0',
'version' => '0.16.0.0',
'reference' => '239e257605e2141265b429e40987b2ee51bba4b4',
'type' => 'library',
'install_path' => __DIR__ . '/../enshrined/svg-sanitize',
'aliases' => array(),
'dev_requirement' => false,
),
'ezyang/htmlpurifier' => array(
'pretty_version' => 'v4.16.0',
'version' => '4.16.0.0',
'reference' => '523407fb06eb9e5f3d59889b3978d5bfe94299c8',
'type' => 'library',
'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
'aliases' => array(),
'dev_requirement' => false,
),
'guzzlehttp/guzzle' => array(
'pretty_version' => '7.5.1',
'version' => '7.5.1.0',
'reference' => 'b964ca597e86b752cd994f27293e9fa6b6a95ed9',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
'aliases' => array(),
'dev_requirement' => false,
),
'guzzlehttp/promises' => array(
'pretty_version' => '1.5.2',
'version' => '1.5.2.0',
'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/promises',
'aliases' => array(),
'dev_requirement' => false,
),
'guzzlehttp/psr7' => array(
'pretty_version' => '2.5.0',
'version' => '2.5.0.0',
'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/psr7',
'aliases' => array(),
'dev_requirement' => false,
),
'hautelook/phpass' => array(
'dev_requirement' => false,
'replaced' => array(
0 => '0.3.*',
),
),
'jbbcode/jbbcode' => array(
'pretty_version' => 'v1.4.2',
'version' => '1.4.2.0',
'reference' => 'd9a132e7886a11cf997e3ec025a41bdf97899704',
'type' => 'library',
'install_path' => __DIR__ . '/../jbbcode/jbbcode',
'aliases' => array(),
'dev_requirement' => false,
),
'leafo/lessphp' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'reference' => '1fdc40e77824a692d7f4811ba86ed89669a66135',
'type' => 'library',
'install_path' => __DIR__ . '/../leafo/lessphp',
'aliases' => array(
0 => '9999999-dev',
),
'dev_requirement' => false,
),
'league/html-to-markdown' => array(
'pretty_version' => '5.1.0',
'version' => '5.1.0.0',
'reference' => 'e0fc8cf07bdabbcd3765341ecb50c34c271d64e1',
'type' => 'library',
'install_path' => __DIR__ . '/../league/html-to-markdown',
'aliases' => array(),
'dev_requirement' => false,
),
'matthiasmullie/minify' => array(
'pretty_version' => '1.3.70',
'version' => '1.3.70.0',
'reference' => '2807d9f9bece6877577ad44acb5c801bb3ae536b',
'type' => 'library',
'install_path' => __DIR__ . '/../matthiasmullie/minify',
'aliases' => array(),
'dev_requirement' => false,
),
'matthiasmullie/path-converter' => array(
'pretty_version' => '1.1.3',
'version' => '1.1.3.0',
'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',
'type' => 'library',
'install_path' => __DIR__ . '/../matthiasmullie/path-converter',
'aliases' => array(),
'dev_requirement' => false,
),
'michelf/php-markdown' => array(
'pretty_version' => '1.9.1',
'version' => '1.9.1.0',
'reference' => '5024d623c1a057dcd2d076d25b7d270a1d0d55f3',
'type' => 'library',
'install_path' => __DIR__ . '/../michelf/php-markdown',
'aliases' => array(),
'dev_requirement' => false,
),
'michelf/php-smartypants' => array(
'pretty_version' => '1.8.1',
'version' => '1.8.1.0',
'reference' => '47d17c90a4dfd0ccf1f87e25c65e6c8012415aad',
'type' => 'library',
'install_path' => __DIR__ . '/../michelf/php-smartypants',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-client' => array(
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'reference' => '0955afe48220520692d2d09f7ab7e0f93ffd6a31',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-client',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-client-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0',
),
),
'psr/http-factory' => array(
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-factory',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-factory-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0',
),
),
'psr/http-message' => array(
'pretty_version' => '2.0',
'version' => '2.0.0.0',
'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-message',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-message-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0',
),
),
'ralouphie/getallheaders' => array(
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
'type' => 'library',
'install_path' => __DIR__ . '/../ralouphie/getallheaders',
'aliases' => array(),
'dev_requirement' => false,
),
'rhymix/rhymix' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '901bdab6a9298ba644187ca6b555567b8872c17a',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'rmccue/requests' => array(
'pretty_version' => 'v1.8.1',
'version' => '1.8.1.0',
'reference' => '82e6936366eac3af4d836c18b9d8c31028fe4cd5',
'type' => 'library',
'install_path' => __DIR__ . '/../rmccue/requests',
'aliases' => array(),
'dev_requirement' => false,
),
'scssphp/scssphp' => array(
'pretty_version' => 'v1.11.0',
'version' => '1.11.0.0',
'reference' => '33749d12c2569bb24071f94e9af828662dabb068',
'type' => 'library',
'install_path' => __DIR__ . '/../scssphp/scssphp',
'aliases' => array(),
'dev_requirement' => false,
),
'swiftmailer/swiftmailer' => array(
'pretty_version' => 'v6.3.0',
'version' => '6.3.0.0',
'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c',
'type' => 'library',
'install_path' => __DIR__ . '/../swiftmailer/swiftmailer',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/deprecation-contracts' => array(
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-iconv' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'reference' => '927013f3aac555983a5059aada98e1907d842695',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-iconv',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-intl-idn' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'reference' => '639084e360537a19f9ee352433b84ce831f3d2da',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-intl-normalizer' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-mbstring' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php72' => array(
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php72',
'aliases' => array(),
'dev_requirement' => false,
),
'true/punycode' => array(
'pretty_version' => 'v2.1.1',
'version' => '2.1.1.0',
'reference' => 'a4d0c11a36dd7f4e7cd7096076cab6d3378a071e',
'type' => 'library',
'install_path' => __DIR__ . '/../true/punycode',
'aliases' => array(),
'dev_requirement' => false,
),
),
'composer/ca-bundle' =>
array (
'pretty_version' => '1.3.4',
'version' => '1.3.4.0',
'aliases' =>
array (
),
'reference' => '69098eca243998b53eed7a48d82dedd28b447cd5',
),
'coolsms/php-sdk' =>
array (
'pretty_version' => 'v2.0',
'version' => '2.0.0.0',
'aliases' =>
array (
),
'reference' => 'ce00fea155169dcf2a3759abd41ad20ff80ca0b1',
),
'doctrine/lexer' =>
array (
'pretty_version' => '1.2.3',
'version' => '1.2.3.0',
'aliases' =>
array (
),
'reference' => 'c268e882d4dbdd85e36e4ad69e02dc284f89d229',
),
'egulias/email-validator' =>
array (
'pretty_version' => '3.2.1',
'version' => '3.2.1.0',
'aliases' =>
array (
),
'reference' => 'f88dcf4b14af14a98ad96b14b2b317969eab6715',
),
'enshrined/svg-sanitize' =>
array (
'pretty_version' => '0.15.4',
'version' => '0.15.4.0',
'aliases' =>
array (
),
'reference' => 'e50b83a2f1f296ca61394fe88fbfe3e896a84cf4',
),
'ezyang/htmlpurifier' =>
array (
'pretty_version' => 'v4.16.0',
'version' => '4.16.0.0',
'aliases' =>
array (
),
'reference' => '523407fb06eb9e5f3d59889b3978d5bfe94299c8',
),
'guzzlehttp/guzzle' =>
array (
'pretty_version' => '7.5.0',
'version' => '7.5.0.0',
'aliases' =>
array (
),
'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba',
),
'guzzlehttp/promises' =>
array (
'pretty_version' => '1.5.2',
'version' => '1.5.2.0',
'aliases' =>
array (
),
'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',
),
'guzzlehttp/psr7' =>
array (
'pretty_version' => '2.4.3',
'version' => '2.4.3.0',
'aliases' =>
array (
),
'reference' => '67c26b443f348a51926030c83481b85718457d3d',
),
'hautelook/phpass' =>
array (
'replaced' =>
array (
0 => '0.3.*',
),
),
'jbbcode/jbbcode' =>
array (
'pretty_version' => 'v1.4.2',
'version' => '1.4.2.0',
'aliases' =>
array (
),
'reference' => 'd9a132e7886a11cf997e3ec025a41bdf97899704',
),
'leafo/lessphp' =>
array (
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'aliases' =>
array (
0 => '9999999-dev',
),
'reference' => '1fdc40e77824a692d7f4811ba86ed89669a66135',
),
'league/html-to-markdown' =>
array (
'pretty_version' => '5.1.0',
'version' => '5.1.0.0',
'aliases' =>
array (
),
'reference' => 'e0fc8cf07bdabbcd3765341ecb50c34c271d64e1',
),
'matthiasmullie/minify' =>
array (
'pretty_version' => '1.3.70',
'version' => '1.3.70.0',
'aliases' =>
array (
),
'reference' => '2807d9f9bece6877577ad44acb5c801bb3ae536b',
),
'matthiasmullie/path-converter' =>
array (
'pretty_version' => '1.1.3',
'version' => '1.1.3.0',
'aliases' =>
array (
),
'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',
),
'michelf/php-markdown' =>
array (
'pretty_version' => '1.9.1',
'version' => '1.9.1.0',
'aliases' =>
array (
),
'reference' => '5024d623c1a057dcd2d076d25b7d270a1d0d55f3',
),
'michelf/php-smartypants' =>
array (
'pretty_version' => '1.8.1',
'version' => '1.8.1.0',
'aliases' =>
array (
),
'reference' => '47d17c90a4dfd0ccf1f87e25c65e6c8012415aad',
),
'psr/http-client' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
),
'psr/http-client-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'psr/http-factory' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
),
'psr/http-factory-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'psr/http-message' =>
array (
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'aliases' =>
array (
),
'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
),
'psr/http-message-implementation' =>
array (
'provided' =>
array (
0 => '1.0',
),
),
'ralouphie/getallheaders' =>
array (
'pretty_version' => '3.0.3',
'version' => '3.0.3.0',
'aliases' =>
array (
),
'reference' => '120b605dfeb996808c31b6477290a714d356e822',
),
'rhymix/rhymix' =>
array (
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'aliases' =>
array (
),
'reference' => '735d3dd97cb734f22b76ffef1857523b7e918d6a',
),
'rmccue/requests' =>
array (
'pretty_version' => 'v1.8.1',
'version' => '1.8.1.0',
'aliases' =>
array (
),
'reference' => '82e6936366eac3af4d836c18b9d8c31028fe4cd5',
),
'scssphp/scssphp' =>
array (
'pretty_version' => 'v1.11.0',
'version' => '1.11.0.0',
'aliases' =>
array (
),
'reference' => '33749d12c2569bb24071f94e9af828662dabb068',
),
'swiftmailer/swiftmailer' =>
array (
'pretty_version' => 'v6.3.0',
'version' => '6.3.0.0',
'aliases' =>
array (
),
'reference' => '8a5d5072dca8f48460fce2f4131fcc495eec654c',
),
'symfony/deprecation-contracts' =>
array (
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'aliases' =>
array (
),
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
),
'symfony/polyfill-iconv' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '927013f3aac555983a5059aada98e1907d842695',
),
'symfony/polyfill-intl-idn' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '639084e360537a19f9ee352433b84ce831f3d2da',
),
'symfony/polyfill-intl-normalizer' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6',
),
'symfony/polyfill-mbstring' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
),
'symfony/polyfill-php72' =>
array (
'pretty_version' => 'v1.27.0',
'version' => '1.27.0.0',
'aliases' =>
array (
),
'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
),
'true/punycode' =>
array (
'pretty_version' => 'v2.1.1',
'version' => '2.1.1.0',
'aliases' =>
array (
),
'reference' => 'a4d0c11a36dd7f4e7cd7096076cab6d3378a071e',
),
),
);

View file

@ -5,7 +5,7 @@
* Access to local part and domain part from EmailParser
* Validations outside of the scope of the RFC will be considered "extra" validations, thus opening the door for adding new; will live in their own folder "extra" (as requested in #248, #195, #183).
## Breacking changes
## Breaking changes
* PHP version upgraded to match Symfony's (as of 12/2020).
* DNSCheckValidation now fails for missing MX records. While the RFC argues that the existence of only A records to be valid, starting in v3 they will be considered invalid.

View file

@ -1,4 +1,4 @@
Copyright (c) 2013-2021 Eduardo Gulias Davis
Copyright (c) 2013-2022 Eduardo Gulias Davis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -14,11 +14,10 @@
},
"require": {
"php": ">=7.2",
"doctrine/lexer": "^1.2",
"doctrine/lexer": "^1.2|^2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},

File diff suppressed because it is too large Load diff

View file

@ -3,58 +3,62 @@
namespace Egulias\EmailValidator;
use Doctrine\Common\Lexer\AbstractLexer;
use Doctrine\Common\Lexer\Token;
/**
* @extends AbstractLexer<int, string>
*/
class EmailLexer extends AbstractLexer
{
//ASCII values
const S_EMPTY = null;
const C_NUL = 0;
const S_HTAB = 9;
const S_LF = 10;
const S_CR = 13;
const S_SP = 32;
const EXCLAMATION = 33;
const S_DQUOTE = 34;
const NUMBER_SIGN = 35;
const DOLLAR = 36;
const PERCENTAGE = 37;
const AMPERSAND = 38;
const S_SQUOTE = 39;
const S_OPENPARENTHESIS = 40;
const S_CLOSEPARENTHESIS = 41;
const ASTERISK = 42;
const S_PLUS = 43;
const S_COMMA = 44;
const S_HYPHEN = 45;
const S_DOT = 46;
const S_SLASH = 47;
const S_COLON = 58;
const S_SEMICOLON = 59;
const S_LOWERTHAN = 60;
const S_EQUAL = 61;
const S_GREATERTHAN = 62;
const QUESTIONMARK = 63;
const S_AT = 64;
const S_OPENBRACKET = 91;
const S_BACKSLASH = 92;
const S_CLOSEBRACKET = 93;
const CARET = 94;
const S_UNDERSCORE = 95;
const S_BACKTICK = 96;
const S_OPENCURLYBRACES = 123;
const S_PIPE = 124;
const S_CLOSECURLYBRACES = 125;
const S_TILDE = 126;
const C_DEL = 127;
const INVERT_QUESTIONMARK= 168;
const INVERT_EXCLAMATION = 173;
const GENERIC = 300;
const S_IPV6TAG = 301;
const INVALID = 302;
const CRLF = 1310;
const S_DOUBLECOLON = 5858;
const ASCII_INVALID_FROM = 127;
const ASCII_INVALID_TO = 199;
public const S_EMPTY = null;
public const C_NUL = 0;
public const S_HTAB = 9;
public const S_LF = 10;
public const S_CR = 13;
public const S_SP = 32;
public const EXCLAMATION = 33;
public const S_DQUOTE = 34;
public const NUMBER_SIGN = 35;
public const DOLLAR = 36;
public const PERCENTAGE = 37;
public const AMPERSAND = 38;
public const S_SQUOTE = 39;
public const S_OPENPARENTHESIS = 40;
public const S_CLOSEPARENTHESIS = 41;
public const ASTERISK = 42;
public const S_PLUS = 43;
public const S_COMMA = 44;
public const S_HYPHEN = 45;
public const S_DOT = 46;
public const S_SLASH = 47;
public const S_COLON = 58;
public const S_SEMICOLON = 59;
public const S_LOWERTHAN = 60;
public const S_EQUAL = 61;
public const S_GREATERTHAN = 62;
public const QUESTIONMARK = 63;
public const S_AT = 64;
public const S_OPENBRACKET = 91;
public const S_BACKSLASH = 92;
public const S_CLOSEBRACKET = 93;
public const CARET = 94;
public const S_UNDERSCORE = 95;
public const S_BACKTICK = 96;
public const S_OPENCURLYBRACES = 123;
public const S_PIPE = 124;
public const S_CLOSECURLYBRACES = 125;
public const S_TILDE = 126;
public const C_DEL = 127;
public const INVERT_QUESTIONMARK= 168;
public const INVERT_EXCLAMATION = 173;
public const GENERIC = 300;
public const S_IPV6TAG = 301;
public const INVALID = 302;
public const CRLF = 1310;
public const S_DOUBLECOLON = 5858;
public const ASCII_INVALID_FROM = 127;
public const ASCII_INVALID_TO = 199;
/**
* US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
@ -107,11 +111,11 @@ class EmailLexer extends AbstractLexer
'¡' => self::INVERT_EXCLAMATION,
];
const INVALID_CHARS_REGEX = "/[^\p{S}\p{C}\p{Cc}]+/iu";
public const INVALID_CHARS_REGEX = "/[^\p{S}\p{C}\p{Cc}]+/iu";
const VALID_UTF8_REGEX = '/\p{Cc}+/u';
public const VALID_UTF8_REGEX = '/\p{Cc}+/u';
const CATCHABLE_PATTERNS = [
public const CATCHABLE_PATTERNS = [
'[a-zA-Z]+[46]?', //ASCII and domain literal
'[^\x00-\x7F]', //UTF-8
'[0-9]+',
@ -121,11 +125,11 @@ class EmailLexer extends AbstractLexer
'.',
];
const NON_CATCHABLE_PATTERNS = [
public const NON_CATCHABLE_PATTERNS = [
'[\xA0-\xff]+',
];
const MODIFIERS = 'iu';
public const MODIFIERS = 'iu';
/** @var bool */
protected $hasInvalidTokens = false;
@ -140,18 +144,20 @@ class EmailLexer extends AbstractLexer
/**
* The last matched/seen token.
*
* @var array
* @var array|Token
*
* @psalm-suppress NonInvariantDocblockPropertyType
* @psalm-var array{value:string, type:null|int, position:int}
* @psalm-suppress NonInvariantDocblockPropertyType
* @psalm-var array{value:string, type:null|int, position:int}|Token<int, string>
*/
public $token;
/**
* The next token in the input.
*
* @var array{position: int, type: int|null|string, value: int|string}|null
* @var array|Token|null
*
* @psalm-suppress NonInvariantDocblockPropertyType
* @psalm-var array{position: int, type: int|null|string, value: int|string}|Token<int, string>|null
*/
public $lookahead;
@ -210,7 +216,9 @@ class EmailLexer extends AbstractLexer
$this->accumulator .= $this->token['value'];
}
$this->previous = $this->token;
$this->previous = $this->token instanceof Token
? ['value' => $this->token->value, 'type' => $this->token->type, 'position' => $this->token->position]
: $this->token;
if($this->lookahead === null) {
$this->lookahead = self::$nullToken;

View file

@ -2,7 +2,6 @@
namespace Egulias\EmailValidator;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Parser\LocalPart;
use Egulias\EmailValidator\Parser\DomainPart;
@ -13,7 +12,7 @@ use Egulias\EmailValidator\Result\Reason\NoLocalPart;
class EmailParser extends Parser
{
const EMAIL_MAX_LENGTH = 254;
public const EMAIL_MAX_LENGTH = 254;
/**
* @var string

View file

@ -2,7 +2,6 @@
namespace Egulias\EmailValidator;
use Egulias\EmailValidator\Parser;
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Parser\IDLeftPart;
use Egulias\EmailValidator\Parser\IDRightPart;
@ -14,7 +13,7 @@ use Egulias\EmailValidator\Result\Reason\NoLocalPart;
class MessageIDParser extends Parser
{
const EMAILID_MAX_LENGTH = 254;
public const EMAILID_MAX_LENGTH = 254;
/**
* @var string
@ -89,4 +88,4 @@ class MessageIDParser extends Parser
$this->warnings[EmailTooLong::CODE] = new EmailTooLong();
}
}
}
}

View file

@ -59,7 +59,8 @@ class Comment extends PartParser
if($this->openedParenthesis >= 1) {
return new InvalidEmail(new UnclosedComment(), $this->lexer->token['value']);
} else if ($this->openedParenthesis < 0) {
}
if ($this->openedParenthesis < 0) {
return new InvalidEmail(new UnOpenedComment(), $this->lexer->token['value']);
}
@ -100,4 +101,4 @@ class Comment extends PartParser
return true;
}
}
}
}

View file

@ -15,4 +15,4 @@ interface CommentStrategy
public function endOfLoopValidations(EmailLexer $lexer) : Result;
public function getWarnings() : array;
}
}

View file

@ -34,4 +34,4 @@ class DomainComment implements CommentStrategy
{
return [];
}
}
}

View file

@ -34,4 +34,4 @@ class LocalComment implements CommentStrategy
{
return $this->warnings;
}
}
}

View file

@ -22,9 +22,9 @@ use Egulias\EmailValidator\Warning\DomainLiteral as WarningDomainLiteral;
class DomainLiteral extends PartParser
{
const IPV4_REGEX = '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/';
public const IPV4_REGEX = '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/';
const OBSOLETE_WARNINGS = [
public const OBSOLETE_WARNINGS = [
EmailLexer::INVALID,
EmailLexer::C_DEL,
EmailLexer::S_LF,
@ -208,4 +208,4 @@ class DomainLiteral extends PartParser
}
}
}
}

View file

@ -2,6 +2,7 @@
namespace Egulias\EmailValidator\Parser;
use Doctrine\Common\Lexer\Token;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Warning\TLD;
use Egulias\EmailValidator\Result\Result;
@ -24,8 +25,8 @@ use Egulias\EmailValidator\Parser\DomainLiteral as DomainLiteralParser;
class DomainPart extends PartParser
{
const DOMAIN_MAX_LENGTH = 253;
const LABEL_MAX_LENGTH = 63;
public const DOMAIN_MAX_LENGTH = 253;
public const LABEL_MAX_LENGTH = 63;
/**
* @var string
@ -212,7 +213,10 @@ class DomainPart extends PartParser
return new ValidEmail();
}
private function checkNotAllowedChars(array $token) : Result
/**
* @psalm-param array|Token<int, string> $token
*/
private function checkNotAllowedChars($token) : Result
{
$notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true];
if (isset($notAllowed[$token['type']])) {

View file

@ -2,7 +2,6 @@
namespace Egulias\EmailValidator\Parser;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Parser\Parser;
use Egulias\EmailValidator\Result\ValidEmail;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Warning\CFWSWithFWS;
@ -85,4 +84,4 @@ class DoubleQuote extends PartParser
return new ValidEmail();
}
}
}

View file

@ -15,7 +15,7 @@ use Egulias\EmailValidator\Result\ValidEmail;
class FoldingWhiteSpace extends PartParser
{
const FWS_TYPES = [
public const FWS_TYPES = [
EmailLexer::S_SP,
EmailLexer::S_HTAB,
EmailLexer::S_CR,
@ -83,4 +83,4 @@ class FoldingWhiteSpace extends PartParser
return in_array($this->lexer->token['type'], self::FWS_TYPES);
}
}
}

View file

@ -3,7 +3,6 @@
namespace Egulias\EmailValidator\Parser;
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Parser\LocalPart;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\CommentsInIDRight;
@ -13,4 +12,4 @@ class IDLeftPart extends LocalPart
{
return new InvalidEmail(new CommentsInIDRight(), $this->lexer->token['value']);
}
}
}

View file

@ -26,4 +26,4 @@ class IDRightPart extends DomainPart
}
return new ValidEmail();
}
}
}

View file

@ -15,7 +15,7 @@ use Egulias\EmailValidator\Parser\CommentStrategy\LocalComment;
class LocalPart extends PartParser
{
const INVALID_TOKENS = [
public const INVALID_TOKENS = [
EmailLexer::S_COMMA => EmailLexer::S_COMMA,
EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
@ -162,4 +162,4 @@ class LocalPart extends PartParser
return new ValidEmail();
}
}
}

View file

@ -60,4 +60,4 @@ abstract class PartParser
&&
$this->lexer->token['type'] !== EmailLexer::GENERIC;
}
}
}

View file

@ -6,7 +6,7 @@ use Egulias\EmailValidator\Result\Reason\Reason;
class InvalidEmail implements Result
{
private $token;
private $token;
/**
* @var Reason
*/
@ -43,4 +43,4 @@ class InvalidEmail implements Result
return $this->reason;
}
}
}

View file

@ -13,4 +13,4 @@ class AtextAfterCFWS implements Reason
{
return 'ATEXT found after CFWS';
}
}
}

View file

@ -4,8 +4,8 @@ namespace Egulias\EmailValidator\Result\Reason;
class CRLFAtTheEnd implements Reason
{
const CODE = 149;
const REASON = "CRLF at the end";
public const CODE = 149;
public const REASON = "CRLF at the end";
public function code() : int
{

View file

@ -13,4 +13,4 @@ class CharNotAllowed implements Reason
{
return "Character not allowed";
}
}
}

View file

@ -13,4 +13,4 @@ class CommaInDomain implements Reason
{
return "Comma ',' is not allowed in domain part";
}
}
}

View file

@ -13,4 +13,4 @@ class CommentsInIDRight implements Reason
{
return 'Comments are not allowed in IDRight for message-id';
}
}
}

View file

@ -10,4 +10,4 @@ abstract class DetailedReason implements Reason
{
$this->detailedDescription = $details;
}
}
}

View file

@ -13,4 +13,4 @@ class DomainAcceptsNoMail implements Reason
{
return 'Domain accepts no mail (Null MX, RFC7505)';
}
}
}

View file

@ -23,4 +23,4 @@ class ExceptionFound implements Reason
{
return $this->exception->getMessage();
}
}
}

View file

@ -13,4 +13,4 @@ class ExpectingDomainLiteralClose implements Reason
{
return "Closing bracket ']' for domain literal not found";
}
}
}

View file

@ -13,4 +13,4 @@ class LocalOrReservedDomain implements Reason
{
return 'Local, mDNS or reserved domain (RFC2606, RFC6762)';
}
}
}

View file

@ -13,4 +13,4 @@ class NoDNSRecord implements Reason
{
return 'No MX or A DSN record was found for this email';
}
}
}

View file

@ -13,4 +13,4 @@ interface Reason
* Short description of the result, human readable.
*/
public function description() : string;
}
}

View file

@ -13,4 +13,4 @@ class UnOpenedComment implements Reason
{
return 'Missing opening comment parentheses - https://tools.ietf.org/html/rfc5322#section-3.2.2';
}
}
}

View file

@ -23,4 +23,4 @@ class UnusualElements implements Reason
{
return 'Unusual element found, wourld render invalid in majority of cases. Element found: ' . $this->element;
}
}
}

View file

@ -24,4 +24,4 @@ interface Result
* Code for user land to act upon.
*/
public function code() : int;
}
}

View file

@ -1,7 +1,6 @@
<?php
namespace Egulias\EmailValidator\Result;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\SpoofEmail as ReasonSpoofEmail;
class SpoofEmail extends InvalidEmail
@ -11,4 +10,4 @@ class SpoofEmail extends InvalidEmail
$this->reason = new ReasonSpoofEmail();
parent::__construct($this->reason, '');
}
}
}

View file

@ -24,4 +24,4 @@ class ValidEmail implements Result
return 0;
}
}
}

View file

@ -2,7 +2,6 @@
namespace Egulias\EmailValidator\Validation;
use Egulias\EmailValidator\Validation\DNSGetRecordWrapper;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\DomainAcceptsNoMail;
@ -22,7 +21,7 @@ class DNSCheckValidation implements EmailValidation
* Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2),
* mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G)
*/
const RESERVED_DNS_TOP_LEVEL_NAMES = [
public const RESERVED_DNS_TOP_LEVEL_NAMES = [
// Reserved Top Level DNS Names
'test',
'example',
@ -61,7 +60,7 @@ class DNSCheckValidation implements EmailValidation
*/
private $dnsGetRecord;
public function __construct(DNSGetRecordWrapper $dnsGetRecord = null)
public function __construct(?DNSGetRecordWrapper $dnsGetRecord = null)
{
if (!function_exists('idn_to_ascii')) {
throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__));
@ -189,4 +188,4 @@ class DNSCheckValidation implements EmailValidation
return true;
}
}
}

View file

@ -25,4 +25,4 @@ class DNSGetRecordWrapper
restore_error_handler();
}
}
}
}

View file

@ -32,4 +32,4 @@ class DNSRecords
}
}
}

View file

@ -9,7 +9,7 @@ class EmptyValidationList extends \InvalidArgumentException
/**
* @param int $code
*/
public function __construct($code = 0, Exception $previous = null)
public function __construct($code = 0, ?Exception $previous = null)
{
parent::__construct("Empty validation list is not allowed", $code, $previous);
}

View file

@ -13,13 +13,13 @@ class MultipleValidationWithAnd implements EmailValidation
* If one of validations fails, the remaining validations will be skipped.
* This means MultipleErrors will only contain a single error, the first found.
*/
const STOP_ON_ERROR = 0;
public const STOP_ON_ERROR = 0;
/**
* All of validations will be invoked even if one of them got failure.
* So MultipleErrors will contain all causes.
*/
const ALLOW_ALL_ERRORS = 1;
public const ALLOW_ALL_ERRORS = 1;
/**
* @var EmailValidation[]

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class AddressLiteral extends Warning
{
const CODE = 12;
public const CODE = 12;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class CFWSNearAt extends Warning
{
const CODE = 49;
public const CODE = 49;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class CFWSWithFWS extends Warning
{
const CODE = 18;
public const CODE = 18;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class Comment extends Warning
{
const CODE = 17;
public const CODE = 17;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class DeprecatedComment extends Warning
{
const CODE = 37;
public const CODE = 37;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class DomainLiteral extends Warning
{
const CODE = 70;
public const CODE = 70;
public function __construct()
{

View file

@ -6,7 +6,7 @@ use Egulias\EmailValidator\EmailParser;
class EmailTooLong extends Warning
{
const CODE = 66;
public const CODE = 66;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6BadChar extends Warning
{
const CODE = 74;
public const CODE = 74;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6ColonEnd extends Warning
{
const CODE = 77;
public const CODE = 77;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6ColonStart extends Warning
{
const CODE = 76;
public const CODE = 76;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6Deprecated extends Warning
{
const CODE = 13;
public const CODE = 13;
public function __construct()
{

View file

@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6DoubleColon extends Warning
{
const CODE = 73;
public const CODE = 73;
public function __construct()
{

Some files were not shown because too many files have changed in this diff Show more