diff --git a/thinkphp/lang/zh-cn.php b/thinkphp/lang/zh-cn.php
index 16b1bb7ce..5a3e0bd6b 100644
--- a/thinkphp/lang/zh-cn.php
+++ b/thinkphp/lang/zh-cn.php
@@ -69,6 +69,7 @@ return [
'chunk not support order' => 'Chunk不支持调用order方法',
'route pattern error' => '路由变量规则定义错误',
'route behavior will not support' => '路由行为废弃(使用中间件替代)',
+ 'closure not support cache(true)' => '使用闭包查询不支持cache(true),请指定缓存Key',
// 上传错误信息
'unknown upload error' => '未知上传错误!',
diff --git a/thinkphp/library/think/App.php b/thinkphp/library/think/App.php
index 6da1888b5..039a876aa 100644
--- a/thinkphp/library/think/App.php
+++ b/thinkphp/library/think/App.php
@@ -20,7 +20,7 @@ use think\route\Dispatch;
*/
class App implements \ArrayAccess
{
- const VERSION = '5.1.8';
+ const VERSION = '5.1.9';
/**
* 当前模块路径
@@ -126,7 +126,7 @@ class App implements \ArrayAccess
public function __construct($appPath = '')
{
- $this->appPath = $appPath ?: $this->getAppPath();
+ $this->appPath = $appPath ? realpath($appPath) : $this->getAppPath();
$this->container = Container::getInstance();
}
@@ -164,7 +164,7 @@ class App implements \ArrayAccess
$this->beginTime = microtime(true);
$this->beginMem = memory_get_usage();
$this->thinkPath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR;
- $this->rootPath = dirname(realpath($this->appPath)) . DIRECTORY_SEPARATOR;
+ $this->rootPath = dirname($this->appPath) . DIRECTORY_SEPARATOR;
$this->runtimePath = $this->rootPath . 'runtime' . DIRECTORY_SEPARATOR;
$this->routePath = $this->rootPath . 'route' . DIRECTORY_SEPARATOR;
$this->configPath = $this->rootPath . 'config' . DIRECTORY_SEPARATOR;
@@ -756,9 +756,7 @@ class App implements \ArrayAccess
public function getAppPath()
{
if (is_null($this->appPath)) {
- $scriptName = 'cli' == PHP_SAPI ? getcwd() . DIRECTORY_SEPARATOR . $_SERVER['argv'][0] : $_SERVER['SCRIPT_FILENAME'];
-
- $this->appPath = realpath(dirname(dirname($scriptName)) . DIRECTORY_SEPARATOR . 'application') . DIRECTORY_SEPARATOR;
+ $this->appPath = Loader::getRootPath() . 'application' . DIRECTORY_SEPARATOR;
}
return $this->appPath;
diff --git a/thinkphp/library/think/Db.php b/thinkphp/library/think/Db.php
index 6ce22f391..9be2dd2ea 100644
--- a/thinkphp/library/think/Db.php
+++ b/thinkphp/library/think/Db.php
@@ -15,6 +15,7 @@ namespace think;
* Class Db
* @package think
* @method \think\db\Query connect(array $config =[], mixed $name = false) static 连接/切换数据库连接
+ * @method \think\db\Query master() static 从主服务器读取数据
* @method \think\db\Query table(string $table) static 指定数据表(含前缀)
* @method \think\db\Query name(string $name) static 指定数据表(不含前缀)
* @method \think\db\Query where(mixed $field, string $op = null, mixed $condition = null) static 查询条件
diff --git a/thinkphp/library/think/Loader.php b/thinkphp/library/think/Loader.php
index 6354f9e47..e2bed16f4 100644
--- a/thinkphp/library/think/Loader.php
+++ b/thinkphp/library/think/Loader.php
@@ -52,21 +52,37 @@ class Loader
*/
private static $composerPath;
+ // 获取应用根目录
+ public static function getRootPath()
+ {
+ if ('cli' == PHP_SAPI) {
+ $cwdPath = getcwd();
+
+ if (0 === strpos($_SERVER['argv'][0], $cwdPath)) {
+ $scriptName = $_SERVER['argv'][0];
+ } else {
+ $scriptName = $cwdPath . DIRECTORY_SEPARATOR . $_SERVER['argv'][0];
+ }
+ } else {
+ $scriptName = $_SERVER['SCRIPT_FILENAME'];
+ }
+
+ $path = realpath(dirname($scriptName));
+
+ if (!is_file($path . DIRECTORY_SEPARATOR . 'think')) {
+ $path = dirname($path);
+ }
+
+ return $path . DIRECTORY_SEPARATOR;
+ }
+
// 注册自动加载机制
public static function register($autoload = '')
{
// 注册系统自动加载
spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true);
- $scriptName = 'cli' == PHP_SAPI ? getcwd() . DIRECTORY_SEPARATOR . $_SERVER['argv'][0] : $_SERVER['SCRIPT_FILENAME'];
-
- $path = realpath(dirname($scriptName));
-
- if ('cli-server' == PHP_SAPI || !is_file('./think')) {
- $rootPath = dirname($path) . DIRECTORY_SEPARATOR;
- } else {
- $rootPath = $path . DIRECTORY_SEPARATOR;
- }
+ $rootPath = self::getRootPath();
self::$composerPath = $rootPath . 'vendor' . DIRECTORY_SEPARATOR . 'composer' . DIRECTORY_SEPARATOR;
@@ -338,6 +354,10 @@ class Loader
if (is_file(self::$composerPath . 'autoload_files.php')) {
$includeFiles = require self::$composerPath . 'autoload_files.php';
foreach ($includeFiles as $fileIdentifier => $file) {
+ if (isset($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ continue;
+ }
+
if (empty(self::$autoloadFiles[$fileIdentifier])) {
__require_file($file);
self::$autoloadFiles[$fileIdentifier] = true;
diff --git a/thinkphp/library/think/Model.php b/thinkphp/library/think/Model.php
index 433e6d096..9a98a4084 100644
--- a/thinkphp/library/think/Model.php
+++ b/thinkphp/library/think/Model.php
@@ -104,6 +104,12 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
*/
protected $error;
+ /**
+ * 软删除字段默认值
+ * @var mixed
+ */
+ protected $defaultSoftDelete;
+
/**
* 架构函数
* @access public
@@ -245,11 +251,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
if ($useBaseQuery) {
// 软删除
- if (method_exists($this, 'getDeleteTimeField')) {
- $field = $this->getDeleteTimeField(true);
- if ($field) {
- $query->useSoftDelete($field);
- }
+ if (method_exists($this, 'withNoTrashed')) {
+ $this->withNoTrashed($query);
}
// 全局作用域
@@ -469,7 +472,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
foreach ((array) $pk as $key) {
if (isset($data[$key])) {
- $array[$key] = [$key, '=', $data[$key]];
+ $array[] = [$key, '=', $data[$key]];
unset($data[$key]);
}
}
@@ -574,10 +577,10 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
}
/**
- * 字段值(延迟)增长
+ * 字段值(延迟)减少
* @access public
* @param string $field 字段名
- * @param integer $step 增长值
+ * @param integer $step 减少值
* @param integer $lazyTime 延时时间(s)
* @return integer|true
* @throws Exception
diff --git a/thinkphp/library/think/Request.php b/thinkphp/library/think/Request.php
index 16db947bb..c627d06d7 100644
--- a/thinkphp/library/think/Request.php
+++ b/thinkphp/library/think/Request.php
@@ -1588,9 +1588,18 @@ class Request
$ip = $_SERVER['REMOTE_ADDR'];
}
+ // IP地址类型
+ $ip_mode = (strpos($ip, ':') === false) ? 'ipv4' : 'ipv6';
+
// IP地址合法验证
- $long = sprintf("%u", ip2long($ip));
- $ip = $long ? [$ip, $long] : ['0.0.0.0', 0];
+ if (filter_var($ip, FILTER_VALIDATE_IP) !== $ip) {
+ $ip = ($ip_mode === 'ipv4') ? '0.0.0.0' : '::';
+ }
+
+ // 如果是ipv4地址,则直接使用ip2long返回int类型ip;如果是ipv6地址,暂时不支持,直接返回0
+ $long_ip = ($ip_mode === 'ipv4') ? sprintf("%u", ip2long($ip)) : 0;
+
+ $ip = [$ip, $long_ip];
return $ip[$type];
}
diff --git a/thinkphp/library/think/Validate.php b/thinkphp/library/think/Validate.php
index 930f7d0fa..bb1700459 100644
--- a/thinkphp/library/think/Validate.php
+++ b/thinkphp/library/think/Validate.php
@@ -749,7 +749,7 @@ class Validate
$result = in_array($value, [true, false, 0, 1, '0', '1'], true);
break;
case 'number':
- $result = ctype_digit($value);
+ $result = ctype_digit((string) $value);
break;
case 'array':
// 是否为数组
diff --git a/thinkphp/library/think/db/Builder.php b/thinkphp/library/think/db/Builder.php
index 78ea0f4a9..31e5fc5e9 100644
--- a/thinkphp/library/think/db/Builder.php
+++ b/thinkphp/library/think/db/Builder.php
@@ -113,7 +113,7 @@ abstract class Builder
$result = [];
foreach ($data as $key => $val) {
- $item = $this->parseKey($query, $key);
+ $item = $this->parseKey($query, $key, true);
if ($val instanceof Expression) {
$result[$item] = $val->getValue();
@@ -183,9 +183,10 @@ abstract class Builder
* @access public
* @param Query $query 查询对象
* @param string $key 字段名
+ * @param bool $strict 严格检测
* @return string
*/
- public function parseKey(Query $query, $key)
+ public function parseKey(Query $query, $key, $strict = false)
{
return $key;
}
@@ -209,7 +210,7 @@ abstract class Builder
if ($field instanceof Expression) {
$array[] = $field->getValue();
} elseif (!is_numeric($key)) {
- $array[] = $this->parseKey($query, $key) . ' AS ' . $this->parseKey($query, $field);
+ $array[] = $this->parseKey($query, $key) . ' AS ' . $this->parseKey($query, $field, true);
} else {
$array[] = $this->parseKey($query, $field);
}
@@ -363,7 +364,7 @@ abstract class Builder
protected function parseWhereItem(Query $query, $field, $val, $rule = '', $binds = [], $bindName = null)
{
// 字段分析
- $key = $field ? $this->parseKey($query, $field) : '';
+ $key = $field ? $this->parseKey($query, $field, true) : '';
// 查询规则和条件
if (!is_array($val)) {
@@ -808,45 +809,43 @@ abstract class Builder
return '';
}
- if (is_array($order)) {
- $array = [];
+ $array = [];
- foreach ($order as $key => $val) {
- if ($val instanceof Expression) {
- $array[] = $val->getValue();
- } elseif (is_array($val)) {
- if (isset($val['sort'])) {
- $sort = ' ' . $val['sort'];
- unset($val['sort']);
- } else {
- $sort = '';
- }
-
- $options = $query->getOptions();
- $bind = $this->connection->getFieldsBind($options['table']);
-
- foreach ($val as $k => $item) {
- $val[$k] = $this->parseDataBind($query, $key, $item, $bind, $k);
- }
-
- $array[] = 'field(' . $this->parseKey($query, $key) . ',' . implode(',', $val) . ')' . $sort;
- } elseif (is_numeric($key)) {
- if ('[rand]' == $val) {
- $array[] = $this->parseRand($query);
- } elseif (false === strpos($val, '(')) {
- $array[] = $this->parseKey($query, $val);
- } else {
- $array[] = $val;
- }
+ foreach ($order as $key => $val) {
+ if ($val instanceof Expression) {
+ $array[] = $val->getValue();
+ } elseif (is_array($val)) {
+ if (isset($val['sort'])) {
+ $sort = ' ' . $val['sort'];
+ unset($val['sort']);
} else {
- $sort = in_array(strtolower(trim($val)), ['asc', 'desc']) ? ' ' . $val : '';
- $array[] = $this->parseKey($query, $key) . ' ' . $sort;
+ $sort = '';
}
- }
- $order = implode(',', $array);
+ $options = $query->getOptions();
+ $bind = $this->connection->getFieldsBind($options['table']);
+
+ foreach ($val as $k => $item) {
+ $val[$k] = $this->parseDataBind($query, $key, $item, $bind, $k);
+ }
+
+ $array[] = 'field(' . $this->parseKey($query, $key, true) . ',' . implode(',', $val) . ')' . $sort;
+ } elseif ('[rand]' == $val) {
+ $array[] = $this->parseRand($query);
+ } else {
+ if (is_numeric($key)) {
+ list($key, $sort) = explode(' ', strpos($val, ' ') ? $val : $val . ' ');
+ } else {
+ $sort = $val;
+ }
+
+ $sort = in_array(strtolower($sort), ['asc', 'desc'], true) ? ' ' . $sort : '';
+ $array[] = $this->parseKey($query, $key, true) . $sort;
+ }
}
+ $order = implode(',', $array);
+
return ' ORDER BY ' . $order;
}
@@ -950,11 +949,7 @@ abstract class Builder
return '';
}
- if (is_array($index)) {
- $index = join(",", $index);
- }
-
- return sprintf(" FORCE INDEX ( %s ) ", $index);
+ return sprintf(" FORCE INDEX ( %s ) ", is_array($index) ? implode(',', $index) : $index);
}
/**
@@ -1070,7 +1065,7 @@ abstract class Builder
$fields = [];
foreach ($insertFields as $field) {
- $fields[] = $this->parseKey($query, $field);
+ $fields[] = $this->parseKey($query, $field, true);
}
return str_replace(
@@ -1102,7 +1097,7 @@ abstract class Builder
}
foreach ($fields as &$field) {
- $field = $this->parseKey($query, $field);
+ $field = $this->parseKey($query, $field, true);
}
return 'INSERT INTO ' . $this->parseTable($query, $table, $options) . ' (' . implode(',', $fields) . ') ' . $this->select($options);
diff --git a/thinkphp/library/think/db/Connection.php b/thinkphp/library/think/db/Connection.php
index 142e80443..aa1b74028 100644
--- a/thinkphp/library/think/db/Connection.php
+++ b/thinkphp/library/think/db/Connection.php
@@ -2076,7 +2076,7 @@ abstract class Connection
{
if (is_scalar($value)) {
$data = $value;
- } elseif (is_array($value) && isset($value[1], $value[2]) && in_array($value[1], ['=', 'eq'])) {
+ } elseif (is_array($value) && isset($value[1], $value[2]) && in_array($value[1], ['=', 'eq'], true) && is_scalar($value[2])) {
$data = $value[2];
}
@@ -2089,7 +2089,7 @@ abstract class Connection
try {
return md5($prefix . serialize($query->getOptions()) . serialize($query->getBind(false)));
} catch (\Exception $e) {
- return;
+ throw new Exception('closure not support cache(true)');
}
}
diff --git a/thinkphp/library/think/db/Query.php b/thinkphp/library/think/db/Query.php
index ddb2bbea7..0329e1c29 100644
--- a/thinkphp/library/think/db/Query.php
+++ b/thinkphp/library/think/db/Query.php
@@ -1357,7 +1357,7 @@ class Query
public function useSoftDelete($field, $condition = null)
{
if ($field) {
- $this->options['soft_delete'] = [$field, $condition ?: ['null', '']];
+ $this->options['soft_delete'] = [$field, $condition];
}
return $this;
@@ -1447,7 +1447,6 @@ class Query
return $this->parseArrayWhereItems($field, $logic);
} elseif ($field instanceof \Closure) {
$where = $field;
- $field = '';
} elseif (is_string($field)) {
if (preg_match('/[,=\<\'\"\(\s]/', $field)) {
return $this->whereRaw($field, $op);
@@ -1460,11 +1459,7 @@ class Query
}
if (!empty($where)) {
- if (isset($this->options['where'][$logic][$field])) {
- $this->options['where'][$logic][] = $where;
- } else {
- $this->options['where'][$logic][$field] = $where;
- }
+ $this->options['where'][$logic][] = $where;
}
return $this;
@@ -1490,9 +1485,13 @@ class Query
if (in_array(strtoupper($op), ['NULL', 'NOTNULL', 'NOT NULL'], true)) {
// null查询
$where = [$field, $op, ''];
+ } elseif (in_array(strtolower($op), ['=', 'eq', null], true)) {
+ $where = [$field, 'NULL', ''];
+ } elseif (in_array(strtolower($op), ['<>', 'neq'], true)) {
+ $where = [$field, 'NOTNULL', ''];
} else {
// 字段相等查询
- $where = is_null($op) ? [$field, 'NULL', ''] : [$field, '=', $op];
+ $where = [$field, '=', $op];
}
} else {
$where = $field ? [$field, $op, $condition] : null;
@@ -1513,11 +1512,7 @@ class Query
if (key($field) !== 0) {
$where = [];
foreach ($field as $key => $val) {
- if (is_null($val)) {
- $where[$key] = [$key, 'NULL', ''];
- } else {
- $where[$key] = !is_scalar($val) ? $val : [$key, '=', $val];
- }
+ $where[] = is_null($val) ? [$key, 'NULL', ''] : [$key, '=', $val];
}
} else {
// 数组批量查询
@@ -1777,7 +1772,11 @@ class Query
$field = $this->options['via'] . '.' . $field;
}
- $field = empty($order) ? $field : [$field => $order];
+ if (strpos($field, ',')) {
+ $field = array_map('trim', explode(',', $field));
+ } else {
+ $field = empty($order) ? $field : [$field => $order];
+ }
} elseif (!empty($this->options['via'])) {
foreach ($field as $key => $val) {
if (is_numeric($key)) {
diff --git a/thinkphp/library/think/db/builder/Mysql.php b/thinkphp/library/think/db/builder/Mysql.php
index a73fa293d..a17657d9f 100644
--- a/thinkphp/library/think/db/builder/Mysql.php
+++ b/thinkphp/library/think/db/builder/Mysql.php
@@ -105,9 +105,10 @@ class Mysql extends Builder
* @access public
* @param Query $query 查询对象
* @param string $key 字段名
+ * @param bool $strict 严格检测
* @return string
*/
- public function parseKey(Query $query, $key)
+ public function parseKey(Query $query, $key, $strict = false)
{
if (is_int($key)) {
return $key;
@@ -118,7 +119,7 @@ class Mysql extends Builder
// JSON字段支持
list($field, $name) = explode('->', $key, 2);
- $key = 'json_extract(' . $this->parseKey($query, $field) . ', \'$.' . str_replace('->', '.', $name) . '\')';
+ return 'json_extract(' . $this->parseKey($query, $field) . ', \'$.' . str_replace('->', '.', $name) . '\')';
} elseif (strpos($key, '.') && !preg_match('/[,\'\"\(\)`\s]/', $key)) {
list($table, $key) = explode('.', $key, 2);
@@ -134,7 +135,7 @@ class Mysql extends Builder
}
}
- if (!preg_match('/[,\'\"\*\(\)`.\s]/', $key)) {
+ if ($strict || !preg_match('/[,\'\"\*\(\)`.\s]/', $key)) {
$key = '`' . $key . '`';
}
diff --git a/thinkphp/library/think/db/builder/Pgsql.php b/thinkphp/library/think/db/builder/Pgsql.php
index 4db6932de..32373b64d 100644
--- a/thinkphp/library/think/db/builder/Pgsql.php
+++ b/thinkphp/library/think/db/builder/Pgsql.php
@@ -51,9 +51,10 @@ class Pgsql extends Builder
* @access public
* @param Query $query 查询对象
* @param string $key 字段名
+ * @param bool $strict 严格检测
* @return string
*/
- public function parseKey(Query $query, $key)
+ public function parseKey(Query $query, $key, $strict = false)
{
$key = trim($key);
diff --git a/thinkphp/library/think/db/builder/Sqlite.php b/thinkphp/library/think/db/builder/Sqlite.php
index 141410c1e..9b244617e 100644
--- a/thinkphp/library/think/db/builder/Sqlite.php
+++ b/thinkphp/library/think/db/builder/Sqlite.php
@@ -59,9 +59,10 @@ class Sqlite extends Builder
* @access public
* @param Query $query 查询对象
* @param string $key 字段名
+ * @param bool $strict 严格检测
* @return string
*/
- public function parseKey(Query $query, $key)
+ public function parseKey(Query $query, $key, $strict = false)
{
$key = trim($key);
if (strpos($key, '.')) {
diff --git a/thinkphp/library/think/db/builder/Sqlsrv.php b/thinkphp/library/think/db/builder/Sqlsrv.php
index b95e234ba..4d3dc15bc 100644
--- a/thinkphp/library/think/db/builder/Sqlsrv.php
+++ b/thinkphp/library/think/db/builder/Sqlsrv.php
@@ -12,6 +12,7 @@
namespace think\db\builder;
use think\db\Builder;
+use think\db\Expression;
use think\db\Query;
/**
@@ -35,28 +36,30 @@ class Sqlsrv extends Builder
*/
protected function parseOrder(Query $query, $order)
{
- if (is_array($order)) {
- $array = [];
-
- foreach ($order as $key => $val) {
- if (is_numeric($key)) {
- if (false === strpos($val, '(')) {
- $array[] = $this->parseKey($query, $val);
- } elseif ('[rand]' == $val) {
- $array[] = $this->parseRand($query);
- } else {
- $array[] = $val;
- }
- } else {
- $sort = in_array(strtolower(trim($val)), ['asc', 'desc']) ? ' ' . $val : '';
- $array[] = $this->parseKey($query, $key) . ' ' . $sort;
- }
- }
-
- $order = implode(',', $array);
+ if (empty($order)) {
+ return ' ORDER BY rand()';
}
- return !empty($order) ? ' ORDER BY ' . $order : ' ORDER BY rand()';
+ $array = [];
+
+ foreach ($order as $key => $val) {
+ if ($val instanceof Expression) {
+ $array[] = $val->getValue();
+ } elseif ('[rand]' == $val) {
+ $array[] = $this->parseRand($query);
+ } else {
+ if (is_numeric($key)) {
+ list($key, $sort) = explode(' ', strpos($val, ' ') ? $val : $val . ' ');
+ } else {
+ $sort = $val;
+ }
+
+ $sort = in_array(strtolower($sort), ['asc', 'desc'], true) ? ' ' . $sort : '';
+ $array[] = $this->parseKey($query, $key, true) . $sort;
+ }
+ }
+
+ return ' ORDER BY ' . implode(',', $array);
}
/**
@@ -75,10 +78,15 @@ class Sqlsrv extends Builder
* @access public
* @param Query $query 查询对象
* @param string $key 字段名
+ * @param bool $strict 严格检测
* @return string
*/
- public function parseKey(Query $query, $key)
+ public function parseKey(Query $query, $key, $strict = false)
{
+ if (is_int($key)) {
+ return $key;
+ }
+
$key = trim($key);
if (strpos($key, '.') && !preg_match('/[,\'\"\(\)\[\s]/', $key)) {
@@ -96,7 +104,7 @@ class Sqlsrv extends Builder
}
}
- if (!is_numeric($key) && !preg_match('/[,\'\"\*\(\)\[.\s]/', $key)) {
+ if ($strict || !preg_match('/[,\'\"\*\(\)\[.\s]/', $key)) {
$key = '[' . $key . ']';
}
diff --git a/thinkphp/library/think/model/concern/SoftDelete.php b/thinkphp/library/think/model/concern/SoftDelete.php
index 473f9e3ea..68b4c1972 100644
--- a/thinkphp/library/think/model/concern/SoftDelete.php
+++ b/thinkphp/library/think/model/concern/SoftDelete.php
@@ -51,11 +51,23 @@ trait SoftDelete
if ($field) {
return $model
->db(false)
- ->useSoftDelete($field, ['not null', '']);
+ ->useSoftDelete($field, $model->getWithTrashedExp());
}
+
return $model->db(false);
}
+ /**
+ * 获取软删除数据的查询条件
+ * @access protected
+ * @return array
+ */
+ protected function getWithTrashedExp()
+ {
+ return is_null($this->defaultSoftDelete) ?
+ ['notnull', ''] : ['<>', $this->defaultSoftDelete];
+ }
+
/**
* 删除当前的记录
* @access public
@@ -143,16 +155,17 @@ trait SoftDelete
$name = $this->getDeleteTimeField();
if (empty($where)) {
- $pk = $this->getPk();
- $where[$pk] = [$pk, '=', $this->getData($pk)];
+ $pk = $this->getPk();
+
+ $where[] = [$pk, '=', $this->getData($pk)];
}
if ($name) {
// 恢复删除
return $this->db(false)
->where($where)
- ->useSoftDelete($name, ['not null', ''])
- ->update([$name => null]);
+ ->useSoftDelete($name, $this->getWithTrashedExp())
+ ->update([$name => $this->defaultSoftDelete]);
}
return 0;
@@ -183,4 +196,19 @@ trait SoftDelete
return $field;
}
+
+ /**
+ * 查询的时候默认排除软删除数据
+ * @access protected
+ * @param Query $query
+ * @return void
+ */
+ protected function withNoTrashed($query)
+ {
+ $field = $this->getDeleteTimeField(true);
+
+ if ($field) {
+ $query->useSoftDelete($field, $this->defaultSoftDelete);
+ }
+ }
}
diff --git a/thinkphp/library/think/route/Rule.php b/thinkphp/library/think/route/Rule.php
index 8d53c4377..8f9d47e92 100644
--- a/thinkphp/library/think/route/Rule.php
+++ b/thinkphp/library/think/route/Rule.php
@@ -864,7 +864,7 @@ abstract class Rule
$request->route($var);
// 路由到模块/控制器/操作
- return (new ModuleDispatch([$module, $controller, $action]))->convert(false);
+ return new ModuleDispatch([$module, $controller, $action], [], false);
}
/**
diff --git a/thinkphp/library/think/route/RuleGroup.php b/thinkphp/library/think/route/RuleGroup.php
index bf8c65897..1fe3b2722 100644
--- a/thinkphp/library/think/route/RuleGroup.php
+++ b/thinkphp/library/think/route/RuleGroup.php
@@ -316,7 +316,7 @@ class RuleGroup extends Rule
}
try {
- if (!empty($regex) && preg_match('/^(?:' . implode('|', $regex) . ')/', $url, $match)) {
+ if (!empty($regex) && preg_match('/^(?:' . implode('|', $regex) . ')/u', $url, $match)) {
$var = [];
foreach ($match as $key => $val) {
if (is_string($key) && '' !== $val) {
diff --git a/thinkphp/library/think/route/RuleItem.php b/thinkphp/library/think/route/RuleItem.php
index 27e5e7548..117c1a9bd 100644
--- a/thinkphp/library/think/route/RuleItem.php
+++ b/thinkphp/library/think/route/RuleItem.php
@@ -309,7 +309,7 @@ class RuleItem extends Rule
$regex = $this->buildRuleRegex($rule, $matches[0], $pattern, $option, $completeMatch);
try {
- if (!preg_match('/^' . $regex . ($completeMatch ? '$' : '') . '/', $url, $match)) {
+ if (!preg_match('/^' . $regex . ($completeMatch ? '$' : '') . '/u', $url, $match)) {
return false;
}
} catch (\Exception $e) {
diff --git a/thinkphp/library/think/route/dispatch/Module.php b/thinkphp/library/think/route/dispatch/Module.php
index 26c92e94d..ec341997f 100644
--- a/thinkphp/library/think/route/dispatch/Module.php
+++ b/thinkphp/library/think/route/dispatch/Module.php
@@ -23,6 +23,15 @@ class Module extends Dispatch
protected $controller;
protected $actionName;
+ public function __construct($dispatch, $param = [], $convert = null)
+ {
+ $this->app = Container::get('app');
+ $this->dispatch = $dispatch;
+ $this->param = $param;
+ $this->convert = $convert;
+ $this->init();
+ }
+
protected function init()
{
$result = $this->dispatch;
@@ -90,13 +99,13 @@ class Module extends Dispatch
// 设置当前请求的控制器、操作
$this->app['request']->controller(Loader::parseName($this->controller, 1))->action($this->actionName);
- // 监听module_init
- $this->app['hook']->listen('module_init');
-
}
public function run()
{
+ // 监听module_init
+ $this->app['hook']->listen('module_init');
+
// 实例化控制器
try {
$instance = $this->app->controller($this->controller,
diff --git a/thinkphp/library/think/view/driver/Php.php b/thinkphp/library/think/view/driver/Php.php
index 6e5db3bd7..f69871528 100644
--- a/thinkphp/library/think/view/driver/Php.php
+++ b/thinkphp/library/think/view/driver/Php.php
@@ -141,7 +141,7 @@ class Php
if ($controller) {
if ('' == $template) {
// 如果模板文件名为空 按照默认规则定位
- $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . (1 == $this->config['auto_rule'] ? Loader::parseName($request->action(true)) : $request->action());
+ $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $this->getActionTemplate($request);
} elseif (false === strpos($template, $depr)) {
$template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $template;
}
@@ -153,6 +153,14 @@ class Php
return $path . ltrim($template, '/') . '.' . ltrim($this->config['view_suffix'], '.');
}
+ protected function getActionTemplate($request)
+ {
+ $rule = [$request->action(true), Loader::parseName($request->action(true)), $request->action()];
+ $type = $this->config['auto_rule'];
+
+ return isset($rule[$type]) ? $rule[$type] : $rule[0];
+ }
+
/**
* 配置模板引擎
* @access private
diff --git a/thinkphp/library/think/view/driver/Think.php b/thinkphp/library/think/view/driver/Think.php
index 137acf859..834a8c032 100644
--- a/thinkphp/library/think/view/driver/Think.php
+++ b/thinkphp/library/think/view/driver/Think.php
@@ -132,10 +132,11 @@ class Think
if (0 !== strpos($template, '/')) {
$template = str_replace(['/', ':'], $depr, $template);
$controller = Loader::parseName($request->controller());
+
if ($controller) {
if ('' == $template) {
// 如果模板文件名为空 按照默认规则定位
- $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . (1 == $this->config['auto_rule'] ? Loader::parseName($request->action(true)) : $request->action());
+ $template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $this->getActionTemplate($request);
} elseif (false === strpos($template, $depr)) {
$template = str_replace('.', DIRECTORY_SEPARATOR, $controller) . $depr . $template;
}
@@ -147,6 +148,14 @@ class Think
return $path . ltrim($template, '/') . '.' . ltrim($this->config['view_suffix'], '.');
}
+ protected function getActionTemplate($request)
+ {
+ $rule = [$request->action(true), Loader::parseName($request->action(true)), $request->action()];
+ $type = $this->config['auto_rule'];
+
+ return isset($rule[$type]) ? $rule[$type] : $rule[0];
+ }
+
/**
* 配置或者获取模板引擎参数
* @access private
diff --git a/vendor/aliyuncs/oss-sdk-php/build-phar.sh b/vendor/aliyuncs/oss-sdk-php/build-phar.sh
old mode 100644
new mode 100755
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 0047111a6..626c40b0e 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer/autoload_real.php';
-return ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4::getLoader();
+return ComposerAutoloaderInitc20a6e9f7e4c957b608b8084ee731eb0::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 2c72175e7..dc02dfb11 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -379,9 +379,9 @@ class ClassLoader
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
- $length = $this->prefixLengthsPsr4[$first][$search];
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index d83d945e0..4598fc38b 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -6,6 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
- '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php',
'841780ea2e1d6545ea3a253239d59c05' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/functions.php',
+ '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php',
);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 0a545102f..2bbd72ff8 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4
+class ComposerAutoloaderInitc20a6e9f7e4c957b608b8084ee731eb0
{
private static $loader;
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInitc20a6e9f7e4c957b608b8084ee731eb0', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4', 'loadClassLoader'));
+ spl_autoload_unregister(array('ComposerAutoloaderInitc20a6e9f7e4c957b608b8084ee731eb0', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
- call_user_func(\Composer\Autoload\ComposerStaticInit33664714c3aeb065c5c84573408fd6a4::getInitializer($loader));
+ call_user_func(\Composer\Autoload\ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit33664714c3aeb065c5c84573408fd6a4
$loader->register(true);
if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit33664714c3aeb065c5c84573408fd6a4::$files;
+ $includeFiles = Composer\Autoload\ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire33664714c3aeb065c5c84573408fd6a4($fileIdentifier, $file);
+ composerRequirec20a6e9f7e4c957b608b8084ee731eb0($fileIdentifier, $file);
}
return $loader;
}
}
-function composerRequire33664714c3aeb065c5c84573408fd6a4($fileIdentifier, $file)
+function composerRequirec20a6e9f7e4c957b608b8084ee731eb0($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 8bae52afa..e8d727d37 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -4,11 +4,11 @@
namespace Composer\Autoload;
-class ComposerStaticInit33664714c3aeb065c5c84573408fd6a4
+class ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0
{
public static $files = array (
- '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
'841780ea2e1d6545ea3a253239d59c05' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php',
+ '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php',
);
public static $prefixLengthsPsr4 = array (
@@ -258,9 +258,9 @@ class ComposerStaticInit33664714c3aeb065c5c84573408fd6a4
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit33664714c3aeb065c5c84573408fd6a4::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit33664714c3aeb065c5c84573408fd6a4::$prefixDirsPsr4;
- $loader->classMap = ComposerStaticInit33664714c3aeb065c5c84573408fd6a4::$classMap;
+ $loader->prefixLengthsPsr4 = ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitc20a6e9f7e4c957b608b8084ee731eb0::$classMap;
}, null, ClassLoader::class);
}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index e47427012..44f3cbf94 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,109 +1,32 @@
[
{
- "name": "topthink/think-installer",
- "version": "v1.0.12",
- "version_normalized": "1.0.12.0",
+ "name": "aliyuncs/oss-sdk-php",
+ "version": "v2.3.0",
+ "version_normalized": "2.3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/top-think/think-installer.git",
- "reference": "1be326e68f63de4e95977ed50f46ae75f017556d"
+ "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
+ "reference": "e69f57916678458642ac9d2fd341ae78a56996c8"
},
"dist": {
"type": "zip",
- "url": "https://files.phpcomposer.com/files/top-think/think-installer/1be326e68f63de4e95977ed50f46ae75f017556d.zip",
- "reference": "1be326e68f63de4e95977ed50f46ae75f017556d",
+ "url": "https://api.github.com/repos/aliyun/aliyun-oss-php-sdk/zipball/e69f57916678458642ac9d2fd341ae78a56996c8",
+ "reference": "e69f57916678458642ac9d2fd341ae78a56996c8",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^1.0"
+ "php": ">=5.3"
},
"require-dev": {
- "composer/composer": "1.0.*@dev"
+ "phpunit/phpunit": "~4.0",
+ "satooshi/php-coveralls": "~1.0"
},
- "time": "2017-05-27T06:58:09+00:00",
- "type": "composer-plugin",
- "extra": {
- "class": "think\\composer\\Plugin"
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "think\\composer\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ]
- },
- {
- "name": "zoujingli/ip2region",
- "version": "dev-master",
- "version_normalized": "9999999-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/zoujingli/ip2region.git",
- "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/zoujingli/ip2region/5d981fbf3b574bad7fe9652e7aecba0920f54325.zip",
- "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "time": "2017-11-09T03:36:17+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "classmap": [
- "Ip2Region.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache 2.0"
- ],
- "description": "Ip2Region",
- "homepage": "https://github.com/zoujingli/Ip2Region",
- "keywords": [
- "Ip2Region"
- ]
- },
- {
- "name": "zoujingli/wechat-developer",
- "version": "v1.0.4",
- "version_normalized": "1.0.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/zoujingli/WeChatDeveloper.git",
- "reference": "9ba300d0b171fd83e9b958d4f25ed4b0b3d16469"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/9ba300d0b171fd83e9b958d4f25ed4b0b3d16469.zip",
- "reference": "9ba300d0b171fd83e9b958d4f25ed4b0b3d16469",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-openssl": "*",
- "php": ">=5.4"
- },
- "time": "2018-03-26T06:32:30+00:00",
+ "time": "2018-01-08T06:59:35+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
- "WeChat\\": "WeChat"
+ "OSS\\": "src/OSS"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -112,216 +35,12 @@
],
"authors": [
{
- "name": "Anyon",
- "email": "zoujingli@qq.com",
- "homepage": "http://ctolog.com"
+ "name": "Aliyuncs",
+ "homepage": "http://www.aliyun.com"
}
],
- "description": "WeChat platform and WeChat payment development tools",
- "homepage": "https://github.com/zoujingli/WeChatDeveloper",
- "keywords": [
- "WeChatDeveloper",
- "wechat",
- "wechatpay"
- ]
- },
- {
- "name": "zoujingli/weopen-developer",
- "version": "dev-master",
- "version_normalized": "9999999-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/zoujingli/WeOpenDeveloper.git",
- "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/zoujingli/WeOpenDeveloper/8bb75bc08488a43964c00f027b21b93ed58e8d5a.zip",
- "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-openssl": "*",
- "php": ">=5.4",
- "zoujingli/wechat-developer": "^1.0.0"
- },
- "time": "2018-03-21T05:06:35+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "WeOpen\\": "WeOpen"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Anyon",
- "email": "zoujingli@qq.com",
- "homepage": "http://ctolog.com"
- }
- ],
- "description": "WeChat Open development of SDK",
- "homepage": "https://github.com/zoujingli/WeOpenDeveloper",
- "keywords": [
- "WeChatOpen",
- "WeChatOpenDeveloper",
- "wechat"
- ]
- },
- {
- "name": "topthink/framework",
- "version": "v5.1.8",
- "version_normalized": "5.1.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/framework.git",
- "reference": "8f6c84abd9e2f9db5a071168c0153724b54b083c"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/top-think/framework/8f6c84abd9e2f9db5a071168c0153724b54b083c.zip",
- "reference": "8f6c84abd9e2f9db5a071168c0153724b54b083c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6.0",
- "topthink/think-installer": "~1.0"
- },
- "require-dev": {
- "johnkary/phpunit-speedtrap": "^1.0",
- "mikey179/vfsstream": "~1.6",
- "phpdocumentor/reflection-docblock": "^2.0",
- "phploc/phploc": "2.*",
- "phpunit/phpunit": "^5.0|^6.0",
- "sebastian/phpcpd": "2.*",
- "squizlabs/php_codesniffer": "2.*"
- },
- "time": "2018-04-06T05:28:49+00:00",
- "type": "think-framework",
- "installation-source": "dist",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- },
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "the new thinkphp framework",
- "homepage": "http://thinkphp.cn/",
- "keywords": [
- "framework",
- "orm",
- "thinkphp"
- ]
- },
- {
- "name": "topthink/think-captcha",
- "version": "v2.0.2",
- "version_normalized": "2.0.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/top-think/think-captcha.git",
- "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/top-think/think-captcha/54c8a51552f99ff9ea89ea9c272383a8f738ceee.zip",
- "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee",
- "shasum": ""
- },
- "require": {
- "topthink/framework": "5.1.*"
- },
- "time": "2017-12-31T16:37:49+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "think\\captcha\\": "src/"
- },
- "files": [
- "src/helper.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "yunwuxin",
- "email": "448901948@qq.com"
- }
- ],
- "description": "captcha package for thinkphp5"
- },
- {
- "name": "symfony/options-resolver",
- "version": "v3.4.8",
- "version_normalized": "3.4.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/options-resolver.git",
- "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/symfony/options-resolver/f3109a6aedd20e35c3a33190e932c2b063b7b50e.zip",
- "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e",
- "shasum": ""
- },
- "require": {
- "php": "^5.5.9|>=7.0.8"
- },
- "time": "2018-01-11T07:56:07+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.4-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\OptionsResolver\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony OptionsResolver Component",
- "homepage": "https://symfony.com",
- "keywords": [
- "config",
- "configuration",
- "options"
- ]
+ "description": "Aliyun OSS SDK for PHP",
+ "homepage": "http://www.aliyun.com/product/oss/"
},
{
"name": "endroid/qr-code",
@@ -334,7 +53,7 @@
},
"dist": {
"type": "zip",
- "url": "https://files.phpcomposer.com/files/endroid/qr-code/c9644bec2a9cc9318e98d1437de3c628dcd1ef93.zip",
+ "url": "https://api.github.com/repos/endroid/qr-code/zipball/c9644bec2a9cc9318e98d1437de3c628dcd1ef93",
"reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93",
"shasum": ""
},
@@ -385,49 +104,6 @@
"symfony"
]
},
- {
- "name": "aliyuncs/oss-sdk-php",
- "version": "v2.3.0",
- "version_normalized": "2.3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/aliyun/aliyun-oss-php-sdk.git",
- "reference": "e69f57916678458642ac9d2fd341ae78a56996c8"
- },
- "dist": {
- "type": "zip",
- "url": "https://files.phpcomposer.com/files/aliyun/aliyun-oss-php-sdk/e69f57916678458642ac9d2fd341ae78a56996c8.zip",
- "reference": "e69f57916678458642ac9d2fd341ae78a56996c8",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0",
- "satooshi/php-coveralls": "~1.0"
- },
- "time": "2018-01-08T06:59:35+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "OSS\\": "src/OSS"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aliyuncs",
- "homepage": "http://www.aliyun.com"
- }
- ],
- "description": "Aliyun OSS SDK for PHP",
- "homepage": "http://www.aliyun.com/product/oss/"
- },
{
"name": "qiniu/php-sdk",
"version": "v7.2.3",
@@ -439,7 +115,7 @@
},
"dist": {
"type": "zip",
- "url": "https://files.phpcomposer.com/files/qiniu/php-sdk/67852ba9cdd7f48e0e080961abebafee134fb329.zip",
+ "url": "https://api.github.com/repos/qiniu/php-sdk/zipball/67852ba9cdd7f48e0e080961abebafee134fb329",
"reference": "67852ba9cdd7f48e0e080961abebafee134fb329",
"shasum": ""
},
@@ -480,5 +156,329 @@
"sdk",
"storage"
]
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v3.4.8",
+ "version_normalized": "3.4.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e",
+ "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9|>=7.0.8"
+ },
+ "time": "2018-01-11T07:56:07+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony OptionsResolver Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ]
+ },
+ {
+ "name": "topthink/framework",
+ "version": "v5.1.9",
+ "version_normalized": "5.1.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/top-think/framework.git",
+ "reference": "fff4acf5727d7f83f059026098c681042db75bb7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/top-think/framework/zipball/fff4acf5727d7f83f059026098c681042db75bb7",
+ "reference": "fff4acf5727d7f83f059026098c681042db75bb7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0",
+ "topthink/think-installer": "~1.0"
+ },
+ "require-dev": {
+ "johnkary/phpunit-speedtrap": "^1.0",
+ "mikey179/vfsstream": "~1.6",
+ "phpdocumentor/reflection-docblock": "^2.0",
+ "phploc/phploc": "2.*",
+ "phpunit/phpunit": "^5.0|^6.0",
+ "sebastian/phpcpd": "2.*",
+ "squizlabs/php_codesniffer": "2.*"
+ },
+ "time": "2018-04-12T08:33:20+00:00",
+ "type": "think-framework",
+ "installation-source": "dist",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "liu21st",
+ "email": "liu21st@gmail.com"
+ },
+ {
+ "name": "yunwuxin",
+ "email": "448901948@qq.com"
+ }
+ ],
+ "description": "the new thinkphp framework",
+ "homepage": "http://thinkphp.cn/",
+ "keywords": [
+ "framework",
+ "orm",
+ "thinkphp"
+ ]
+ },
+ {
+ "name": "topthink/think-captcha",
+ "version": "v2.0.2",
+ "version_normalized": "2.0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/top-think/think-captcha.git",
+ "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/top-think/think-captcha/zipball/54c8a51552f99ff9ea89ea9c272383a8f738ceee",
+ "reference": "54c8a51552f99ff9ea89ea9c272383a8f738ceee",
+ "shasum": ""
+ },
+ "require": {
+ "topthink/framework": "5.1.*"
+ },
+ "time": "2017-12-31T16:37:49+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "think\\captcha\\": "src/"
+ },
+ "files": [
+ "src/helper.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "yunwuxin",
+ "email": "448901948@qq.com"
+ }
+ ],
+ "description": "captcha package for thinkphp5"
+ },
+ {
+ "name": "topthink/think-installer",
+ "version": "v1.0.12",
+ "version_normalized": "1.0.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/top-think/think-installer.git",
+ "reference": "1be326e68f63de4e95977ed50f46ae75f017556d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/top-think/think-installer/zipball/1be326e68f63de4e95977ed50f46ae75f017556d",
+ "reference": "1be326e68f63de4e95977ed50f46ae75f017556d",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0"
+ },
+ "require-dev": {
+ "composer/composer": "1.0.*@dev"
+ },
+ "time": "2017-05-27T06:58:09+00:00",
+ "type": "composer-plugin",
+ "extra": {
+ "class": "think\\composer\\Plugin"
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "think\\composer\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "yunwuxin",
+ "email": "448901948@qq.com"
+ }
+ ]
+ },
+ {
+ "name": "zoujingli/ip2region",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zoujingli/ip2region.git",
+ "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zoujingli/ip2region/zipball/5d981fbf3b574bad7fe9652e7aecba0920f54325",
+ "reference": "5d981fbf3b574bad7fe9652e7aecba0920f54325",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "time": "2017-11-09T03:36:17+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "classmap": [
+ "Ip2Region.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache 2.0"
+ ],
+ "description": "Ip2Region",
+ "homepage": "https://github.com/zoujingli/Ip2Region",
+ "keywords": [
+ "Ip2Region"
+ ]
+ },
+ {
+ "name": "zoujingli/wechat-developer",
+ "version": "v1.0.5",
+ "version_normalized": "1.0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zoujingli/WeChatDeveloper.git",
+ "reference": "e05fe6bb24438d15259a6af4915bd0638dc3914a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zoujingli/WeChatDeveloper/zipball/e05fe6bb24438d15259a6af4915bd0638dc3914a",
+ "reference": "e05fe6bb24438d15259a6af4915bd0638dc3914a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-openssl": "*",
+ "php": ">=5.4"
+ },
+ "time": "2018-04-09T11:07:00+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "WeChat\\": "WeChat"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Anyon",
+ "email": "zoujingli@qq.com",
+ "homepage": "http://ctolog.com"
+ }
+ ],
+ "description": "WeChat platform and WeChat payment development tools",
+ "homepage": "https://github.com/zoujingli/WeChatDeveloper",
+ "keywords": [
+ "WeChatDeveloper",
+ "wechat",
+ "wechatpay"
+ ]
+ },
+ {
+ "name": "zoujingli/weopen-developer",
+ "version": "dev-master",
+ "version_normalized": "9999999-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zoujingli/WeOpenDeveloper.git",
+ "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zoujingli/WeOpenDeveloper/zipball/8bb75bc08488a43964c00f027b21b93ed58e8d5a",
+ "reference": "8bb75bc08488a43964c00f027b21b93ed58e8d5a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-openssl": "*",
+ "php": ">=5.4",
+ "zoujingli/wechat-developer": "^1.0.0"
+ },
+ "time": "2018-03-21T05:06:35+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "WeOpen\\": "WeOpen"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Anyon",
+ "email": "zoujingli@qq.com",
+ "homepage": "http://ctolog.com"
+ }
+ ],
+ "description": "WeChat Open development of SDK",
+ "homepage": "https://github.com/zoujingli/WeOpenDeveloper",
+ "keywords": [
+ "WeChatOpen",
+ "WeChatOpenDeveloper",
+ "wechat"
+ ]
}
]
diff --git a/vendor/endroid/qr-code/.travis.yml b/vendor/endroid/qr-code/.travis.yml
index de30ea6f7..9233d9aa1 100644
--- a/vendor/endroid/qr-code/.travis.yml
+++ b/vendor/endroid/qr-code/.travis.yml
@@ -1,21 +1,21 @@
-language: php
-
-php:
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - hhvm
-
-matrix:
- fast_finish: true
-
-before_install:
- - if [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then phpenv config-rm xdebug.ini; fi;
- - composer self-update && composer install --no-interaction
-
-script: bin/phpunit
-
-notifications:
- email: info@endroid.nl
+language: php
+
+php:
+ - 5.4
+ - 5.5
+ - 5.6
+ - 7.0
+ - 7.1
+ - hhvm
+
+matrix:
+ fast_finish: true
+
+before_install:
+ - if [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then phpenv config-rm xdebug.ini; fi;
+ - composer self-update && composer install --no-interaction
+
+script: bin/phpunit
+
+notifications:
+ email: info@endroid.nl
diff --git a/vendor/endroid/qr-code/README.md b/vendor/endroid/qr-code/README.md
index 2c51a989f..c4fcf39a7 100644
--- a/vendor/endroid/qr-code/README.md
+++ b/vendor/endroid/qr-code/README.md
@@ -1,132 +1,132 @@
-QR Code
-=======
-
-*By [endroid](http://endroid.nl/)*
-
-[](https://packagist.org/packages/endroid/qrcode)
-[](http://travis-ci.org/endroid/QrCode)
-[](https://packagist.org/packages/endroid/qrcode)
-[](https://packagist.org/packages/endroid/qrcode)
-[](https://packagist.org/packages/endroid/qrcode)
-
-This library based on QRcode Perl CGI & PHP scripts by Y. Swetake helps you generate images containing a QR code.
-
-## Installation
-
-Use [Composer](https://getcomposer.org/) to install the library.
-
-``` bash
-$ composer require endroid/qrcode
-```
-
-## Usage
-
-```php
-use Endroid\QrCode\QrCode;
-
-$qrCode = new QrCode();
-$qrCode
- ->setText('Life is too short to be generating QR codes')
- ->setSize(300)
- ->setPadding(10)
- ->setErrorCorrection('high')
- ->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0])
- ->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0])
- ->setLabel('Scan the code')
- ->setLabelFontSize(16)
- ->setImageType(QrCode::IMAGE_TYPE_PNG)
-;
-
-// now we can directly output the qrcode
-header('Content-Type: '.$qrCode->getContentType());
-$qrCode->render();
-
-// save it to a file
-$qrCode->save('qrcode.png');
-
-// or create a response object
-$response = new Response($qrCode->get(), 200, ['Content-Type' => $qrCode->getContentType()]);
-```
-
-
-
-## Symfony integration
-
-Register the Symfony bundle in the kernel.
-
-```php
-// app/AppKernel.php
-
-public function registerBundles()
-{
- $bundles = [
- // ...
- new Endroid\QrCode\Bundle\EndroidQrCodeBundle(),
- ];
-}
-```
-
-The default parameters can be overridden via the configuration.
-Alpha channel available range is [0, 127] in foreground and background colors.
-
-```yaml
-endroid_qr_code:
- size: 100
- padding: 10
- extension: gif
- error_correction_level: high
- foreground_color: { r: 0, g: 0, b: 0, a: 0 }
- background_color: { r: 255, g: 255, b: 255, a: 0 }
- label: 'My label'
- label_font_size: 16
-```
-
-Now you can retrieve the factory as follows.
-
-```php
-$factory = $this->get('endroid.qrcode.factory');
-$factory->createQrCode();
-```
-
-Add the following section to your routing to be able to handle QR code URLs.
-This step can be skipped when you only use data URIs to display your images.
-
-``` yml
-EndroidQrCodeBundle:
- resource: "@EndroidQrCodeBundle/Controller/"
- type: annotation
- prefix: /qrcode
-```
-
-After installation and configuration, QR codes can be generated by appending
-the QR code text to the url as mounted, followed by .png, .jpg or .gif.
-
-## Twig extension
-
-The bundle also provides a Twig extension for quickly generating QR code urls.
-Optional parameters are extension, size, padding and errorCorrectionLevel. When
-a parameter is omitted, the value in the bundle configuration is used.
-
-``` twig
-
-
-
-```
-
-You can also use the data URI helper to embed the QR code within your HTML
-instead of requiring a separate HTTP request to load your image.
-
-``` twig
-
-```
-
-## Versioning
-
-Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatibility
-breaking changes will be kept to a minimum but be aware that these can occur.
-Lock your dependencies for production and test your code when upgrading.
-
-## License
-
-This bundle is under the MIT license. For the full copyright and license
-information please view the LICENSE file that was distributed with this source code.
+QR Code
+=======
+
+*By [endroid](http://endroid.nl/)*
+
+[](https://packagist.org/packages/endroid/qrcode)
+[](http://travis-ci.org/endroid/QrCode)
+[](https://packagist.org/packages/endroid/qrcode)
+[](https://packagist.org/packages/endroid/qrcode)
+[](https://packagist.org/packages/endroid/qrcode)
+
+This library based on QRcode Perl CGI & PHP scripts by Y. Swetake helps you generate images containing a QR code.
+
+## Installation
+
+Use [Composer](https://getcomposer.org/) to install the library.
+
+``` bash
+$ composer require endroid/qrcode
+```
+
+## Usage
+
+```php
+use Endroid\QrCode\QrCode;
+
+$qrCode = new QrCode();
+$qrCode
+ ->setText('Life is too short to be generating QR codes')
+ ->setSize(300)
+ ->setPadding(10)
+ ->setErrorCorrection('high')
+ ->setForegroundColor(['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0])
+ ->setBackgroundColor(['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0])
+ ->setLabel('Scan the code')
+ ->setLabelFontSize(16)
+ ->setImageType(QrCode::IMAGE_TYPE_PNG)
+;
+
+// now we can directly output the qrcode
+header('Content-Type: '.$qrCode->getContentType());
+$qrCode->render();
+
+// save it to a file
+$qrCode->save('qrcode.png');
+
+// or create a response object
+$response = new Response($qrCode->get(), 200, ['Content-Type' => $qrCode->getContentType()]);
+```
+
+
+
+## Symfony integration
+
+Register the Symfony bundle in the kernel.
+
+```php
+// app/AppKernel.php
+
+public function registerBundles()
+{
+ $bundles = [
+ // ...
+ new Endroid\QrCode\Bundle\EndroidQrCodeBundle(),
+ ];
+}
+```
+
+The default parameters can be overridden via the configuration.
+Alpha channel available range is [0, 127] in foreground and background colors.
+
+```yaml
+endroid_qr_code:
+ size: 100
+ padding: 10
+ extension: gif
+ error_correction_level: high
+ foreground_color: { r: 0, g: 0, b: 0, a: 0 }
+ background_color: { r: 255, g: 255, b: 255, a: 0 }
+ label: 'My label'
+ label_font_size: 16
+```
+
+Now you can retrieve the factory as follows.
+
+```php
+$factory = $this->get('endroid.qrcode.factory');
+$factory->createQrCode();
+```
+
+Add the following section to your routing to be able to handle QR code URLs.
+This step can be skipped when you only use data URIs to display your images.
+
+``` yml
+EndroidQrCodeBundle:
+ resource: "@EndroidQrCodeBundle/Controller/"
+ type: annotation
+ prefix: /qrcode
+```
+
+After installation and configuration, QR codes can be generated by appending
+the QR code text to the url as mounted, followed by .png, .jpg or .gif.
+
+## Twig extension
+
+The bundle also provides a Twig extension for quickly generating QR code urls.
+Optional parameters are extension, size, padding and errorCorrectionLevel. When
+a parameter is omitted, the value in the bundle configuration is used.
+
+``` twig
+
+
+
+```
+
+You can also use the data URI helper to embed the QR code within your HTML
+instead of requiring a separate HTTP request to load your image.
+
+``` twig
+
+```
+
+## Versioning
+
+Version numbers follow the MAJOR.MINOR.PATCH scheme. Backwards compatibility
+breaking changes will be kept to a minimum but be aware that these can occur.
+Lock your dependencies for production and test your code when upgrading.
+
+## License
+
+This bundle is under the MIT license. For the full copyright and license
+information please view the LICENSE file that was distributed with this source code.
diff --git a/vendor/endroid/qr-code/assets/data/qrv10_0.dat b/vendor/endroid/qr-code/assets/data/qrv10_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv10_1.dat b/vendor/endroid/qr-code/assets/data/qrv10_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv10_2.dat b/vendor/endroid/qr-code/assets/data/qrv10_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv10_3.dat b/vendor/endroid/qr-code/assets/data/qrv10_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv11_0.dat b/vendor/endroid/qr-code/assets/data/qrv11_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv11_1.dat b/vendor/endroid/qr-code/assets/data/qrv11_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv11_2.dat b/vendor/endroid/qr-code/assets/data/qrv11_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv11_3.dat b/vendor/endroid/qr-code/assets/data/qrv11_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv12_0.dat b/vendor/endroid/qr-code/assets/data/qrv12_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv12_1.dat b/vendor/endroid/qr-code/assets/data/qrv12_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv12_2.dat b/vendor/endroid/qr-code/assets/data/qrv12_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv12_3.dat b/vendor/endroid/qr-code/assets/data/qrv12_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv13_0.dat b/vendor/endroid/qr-code/assets/data/qrv13_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv13_1.dat b/vendor/endroid/qr-code/assets/data/qrv13_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv13_2.dat b/vendor/endroid/qr-code/assets/data/qrv13_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv13_3.dat b/vendor/endroid/qr-code/assets/data/qrv13_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv14_0.dat b/vendor/endroid/qr-code/assets/data/qrv14_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv14_1.dat b/vendor/endroid/qr-code/assets/data/qrv14_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv14_2.dat b/vendor/endroid/qr-code/assets/data/qrv14_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv14_3.dat b/vendor/endroid/qr-code/assets/data/qrv14_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv15_0.dat b/vendor/endroid/qr-code/assets/data/qrv15_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv15_1.dat b/vendor/endroid/qr-code/assets/data/qrv15_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv15_2.dat b/vendor/endroid/qr-code/assets/data/qrv15_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv15_3.dat b/vendor/endroid/qr-code/assets/data/qrv15_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv16_0.dat b/vendor/endroid/qr-code/assets/data/qrv16_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv16_1.dat b/vendor/endroid/qr-code/assets/data/qrv16_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv16_2.dat b/vendor/endroid/qr-code/assets/data/qrv16_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv16_3.dat b/vendor/endroid/qr-code/assets/data/qrv16_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv17_0.dat b/vendor/endroid/qr-code/assets/data/qrv17_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv17_1.dat b/vendor/endroid/qr-code/assets/data/qrv17_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv17_2.dat b/vendor/endroid/qr-code/assets/data/qrv17_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv17_3.dat b/vendor/endroid/qr-code/assets/data/qrv17_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv18_0.dat b/vendor/endroid/qr-code/assets/data/qrv18_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv18_1.dat b/vendor/endroid/qr-code/assets/data/qrv18_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv18_2.dat b/vendor/endroid/qr-code/assets/data/qrv18_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv18_3.dat b/vendor/endroid/qr-code/assets/data/qrv18_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv19_0.dat b/vendor/endroid/qr-code/assets/data/qrv19_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv19_1.dat b/vendor/endroid/qr-code/assets/data/qrv19_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv19_2.dat b/vendor/endroid/qr-code/assets/data/qrv19_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv19_3.dat b/vendor/endroid/qr-code/assets/data/qrv19_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv1_0.dat b/vendor/endroid/qr-code/assets/data/qrv1_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv1_1.dat b/vendor/endroid/qr-code/assets/data/qrv1_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv1_2.dat b/vendor/endroid/qr-code/assets/data/qrv1_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv1_3.dat b/vendor/endroid/qr-code/assets/data/qrv1_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv20_0.dat b/vendor/endroid/qr-code/assets/data/qrv20_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv20_1.dat b/vendor/endroid/qr-code/assets/data/qrv20_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv20_2.dat b/vendor/endroid/qr-code/assets/data/qrv20_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv20_3.dat b/vendor/endroid/qr-code/assets/data/qrv20_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv21_0.dat b/vendor/endroid/qr-code/assets/data/qrv21_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv21_1.dat b/vendor/endroid/qr-code/assets/data/qrv21_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv21_2.dat b/vendor/endroid/qr-code/assets/data/qrv21_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv21_3.dat b/vendor/endroid/qr-code/assets/data/qrv21_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv22_0.dat b/vendor/endroid/qr-code/assets/data/qrv22_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv22_1.dat b/vendor/endroid/qr-code/assets/data/qrv22_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv22_2.dat b/vendor/endroid/qr-code/assets/data/qrv22_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv22_3.dat b/vendor/endroid/qr-code/assets/data/qrv22_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv23_0.dat b/vendor/endroid/qr-code/assets/data/qrv23_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv23_1.dat b/vendor/endroid/qr-code/assets/data/qrv23_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv23_2.dat b/vendor/endroid/qr-code/assets/data/qrv23_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv23_3.dat b/vendor/endroid/qr-code/assets/data/qrv23_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv24_0.dat b/vendor/endroid/qr-code/assets/data/qrv24_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv24_1.dat b/vendor/endroid/qr-code/assets/data/qrv24_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv24_2.dat b/vendor/endroid/qr-code/assets/data/qrv24_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv24_3.dat b/vendor/endroid/qr-code/assets/data/qrv24_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv25_0.dat b/vendor/endroid/qr-code/assets/data/qrv25_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv25_1.dat b/vendor/endroid/qr-code/assets/data/qrv25_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv25_2.dat b/vendor/endroid/qr-code/assets/data/qrv25_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv25_3.dat b/vendor/endroid/qr-code/assets/data/qrv25_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv26_0.dat b/vendor/endroid/qr-code/assets/data/qrv26_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv26_1.dat b/vendor/endroid/qr-code/assets/data/qrv26_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv26_2.dat b/vendor/endroid/qr-code/assets/data/qrv26_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv26_3.dat b/vendor/endroid/qr-code/assets/data/qrv26_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv27_0.dat b/vendor/endroid/qr-code/assets/data/qrv27_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv27_1.dat b/vendor/endroid/qr-code/assets/data/qrv27_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv27_2.dat b/vendor/endroid/qr-code/assets/data/qrv27_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv27_3.dat b/vendor/endroid/qr-code/assets/data/qrv27_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv28_0.dat b/vendor/endroid/qr-code/assets/data/qrv28_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv28_1.dat b/vendor/endroid/qr-code/assets/data/qrv28_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv28_2.dat b/vendor/endroid/qr-code/assets/data/qrv28_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv28_3.dat b/vendor/endroid/qr-code/assets/data/qrv28_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv29_0.dat b/vendor/endroid/qr-code/assets/data/qrv29_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv29_1.dat b/vendor/endroid/qr-code/assets/data/qrv29_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv29_2.dat b/vendor/endroid/qr-code/assets/data/qrv29_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv29_3.dat b/vendor/endroid/qr-code/assets/data/qrv29_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv2_0.dat b/vendor/endroid/qr-code/assets/data/qrv2_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv2_1.dat b/vendor/endroid/qr-code/assets/data/qrv2_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv2_2.dat b/vendor/endroid/qr-code/assets/data/qrv2_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv2_3.dat b/vendor/endroid/qr-code/assets/data/qrv2_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv30_0.dat b/vendor/endroid/qr-code/assets/data/qrv30_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv30_1.dat b/vendor/endroid/qr-code/assets/data/qrv30_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv30_2.dat b/vendor/endroid/qr-code/assets/data/qrv30_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv30_3.dat b/vendor/endroid/qr-code/assets/data/qrv30_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv31_0.dat b/vendor/endroid/qr-code/assets/data/qrv31_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv31_1.dat b/vendor/endroid/qr-code/assets/data/qrv31_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv31_2.dat b/vendor/endroid/qr-code/assets/data/qrv31_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv31_3.dat b/vendor/endroid/qr-code/assets/data/qrv31_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv32_0.dat b/vendor/endroid/qr-code/assets/data/qrv32_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv32_1.dat b/vendor/endroid/qr-code/assets/data/qrv32_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv32_2.dat b/vendor/endroid/qr-code/assets/data/qrv32_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv32_3.dat b/vendor/endroid/qr-code/assets/data/qrv32_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv33_0.dat b/vendor/endroid/qr-code/assets/data/qrv33_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv33_1.dat b/vendor/endroid/qr-code/assets/data/qrv33_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv33_2.dat b/vendor/endroid/qr-code/assets/data/qrv33_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv33_3.dat b/vendor/endroid/qr-code/assets/data/qrv33_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv34_0.dat b/vendor/endroid/qr-code/assets/data/qrv34_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv34_1.dat b/vendor/endroid/qr-code/assets/data/qrv34_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv34_2.dat b/vendor/endroid/qr-code/assets/data/qrv34_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv34_3.dat b/vendor/endroid/qr-code/assets/data/qrv34_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv35_0.dat b/vendor/endroid/qr-code/assets/data/qrv35_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv35_1.dat b/vendor/endroid/qr-code/assets/data/qrv35_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv35_2.dat b/vendor/endroid/qr-code/assets/data/qrv35_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv35_3.dat b/vendor/endroid/qr-code/assets/data/qrv35_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv36_0.dat b/vendor/endroid/qr-code/assets/data/qrv36_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv36_1.dat b/vendor/endroid/qr-code/assets/data/qrv36_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv36_2.dat b/vendor/endroid/qr-code/assets/data/qrv36_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv36_3.dat b/vendor/endroid/qr-code/assets/data/qrv36_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv37_0.dat b/vendor/endroid/qr-code/assets/data/qrv37_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv37_1.dat b/vendor/endroid/qr-code/assets/data/qrv37_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv37_2.dat b/vendor/endroid/qr-code/assets/data/qrv37_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv37_3.dat b/vendor/endroid/qr-code/assets/data/qrv37_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv38_0.dat b/vendor/endroid/qr-code/assets/data/qrv38_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv38_1.dat b/vendor/endroid/qr-code/assets/data/qrv38_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv38_2.dat b/vendor/endroid/qr-code/assets/data/qrv38_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv38_3.dat b/vendor/endroid/qr-code/assets/data/qrv38_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv39_0.dat b/vendor/endroid/qr-code/assets/data/qrv39_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv39_1.dat b/vendor/endroid/qr-code/assets/data/qrv39_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv39_2.dat b/vendor/endroid/qr-code/assets/data/qrv39_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv39_3.dat b/vendor/endroid/qr-code/assets/data/qrv39_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv3_0.dat b/vendor/endroid/qr-code/assets/data/qrv3_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv3_1.dat b/vendor/endroid/qr-code/assets/data/qrv3_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv3_2.dat b/vendor/endroid/qr-code/assets/data/qrv3_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv3_3.dat b/vendor/endroid/qr-code/assets/data/qrv3_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv40_0.dat b/vendor/endroid/qr-code/assets/data/qrv40_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv40_1.dat b/vendor/endroid/qr-code/assets/data/qrv40_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv40_2.dat b/vendor/endroid/qr-code/assets/data/qrv40_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv40_3.dat b/vendor/endroid/qr-code/assets/data/qrv40_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv4_0.dat b/vendor/endroid/qr-code/assets/data/qrv4_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv4_1.dat b/vendor/endroid/qr-code/assets/data/qrv4_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv4_2.dat b/vendor/endroid/qr-code/assets/data/qrv4_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv4_3.dat b/vendor/endroid/qr-code/assets/data/qrv4_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv5_0.dat b/vendor/endroid/qr-code/assets/data/qrv5_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv5_1.dat b/vendor/endroid/qr-code/assets/data/qrv5_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv5_2.dat b/vendor/endroid/qr-code/assets/data/qrv5_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv5_3.dat b/vendor/endroid/qr-code/assets/data/qrv5_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv6_0.dat b/vendor/endroid/qr-code/assets/data/qrv6_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv6_1.dat b/vendor/endroid/qr-code/assets/data/qrv6_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv6_2.dat b/vendor/endroid/qr-code/assets/data/qrv6_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv6_3.dat b/vendor/endroid/qr-code/assets/data/qrv6_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv7_0.dat b/vendor/endroid/qr-code/assets/data/qrv7_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv7_1.dat b/vendor/endroid/qr-code/assets/data/qrv7_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv7_2.dat b/vendor/endroid/qr-code/assets/data/qrv7_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv7_3.dat b/vendor/endroid/qr-code/assets/data/qrv7_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv8_0.dat b/vendor/endroid/qr-code/assets/data/qrv8_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv8_1.dat b/vendor/endroid/qr-code/assets/data/qrv8_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv8_2.dat b/vendor/endroid/qr-code/assets/data/qrv8_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv8_3.dat b/vendor/endroid/qr-code/assets/data/qrv8_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv9_0.dat b/vendor/endroid/qr-code/assets/data/qrv9_0.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv9_1.dat b/vendor/endroid/qr-code/assets/data/qrv9_1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv9_2.dat b/vendor/endroid/qr-code/assets/data/qrv9_2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrv9_3.dat b/vendor/endroid/qr-code/assets/data/qrv9_3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr1.dat b/vendor/endroid/qr-code/assets/data/qrvfr1.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr10.dat b/vendor/endroid/qr-code/assets/data/qrvfr10.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr11.dat b/vendor/endroid/qr-code/assets/data/qrvfr11.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr12.dat b/vendor/endroid/qr-code/assets/data/qrvfr12.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr13.dat b/vendor/endroid/qr-code/assets/data/qrvfr13.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr14.dat b/vendor/endroid/qr-code/assets/data/qrvfr14.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr15.dat b/vendor/endroid/qr-code/assets/data/qrvfr15.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr16.dat b/vendor/endroid/qr-code/assets/data/qrvfr16.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr17.dat b/vendor/endroid/qr-code/assets/data/qrvfr17.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr18.dat b/vendor/endroid/qr-code/assets/data/qrvfr18.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr19.dat b/vendor/endroid/qr-code/assets/data/qrvfr19.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr2.dat b/vendor/endroid/qr-code/assets/data/qrvfr2.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr20.dat b/vendor/endroid/qr-code/assets/data/qrvfr20.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr21.dat b/vendor/endroid/qr-code/assets/data/qrvfr21.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr22.dat b/vendor/endroid/qr-code/assets/data/qrvfr22.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr23.dat b/vendor/endroid/qr-code/assets/data/qrvfr23.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr24.dat b/vendor/endroid/qr-code/assets/data/qrvfr24.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr25.dat b/vendor/endroid/qr-code/assets/data/qrvfr25.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr26.dat b/vendor/endroid/qr-code/assets/data/qrvfr26.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr27.dat b/vendor/endroid/qr-code/assets/data/qrvfr27.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr28.dat b/vendor/endroid/qr-code/assets/data/qrvfr28.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr29.dat b/vendor/endroid/qr-code/assets/data/qrvfr29.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr3.dat b/vendor/endroid/qr-code/assets/data/qrvfr3.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr30.dat b/vendor/endroid/qr-code/assets/data/qrvfr30.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr31.dat b/vendor/endroid/qr-code/assets/data/qrvfr31.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr32.dat b/vendor/endroid/qr-code/assets/data/qrvfr32.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr33.dat b/vendor/endroid/qr-code/assets/data/qrvfr33.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr34.dat b/vendor/endroid/qr-code/assets/data/qrvfr34.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr35.dat b/vendor/endroid/qr-code/assets/data/qrvfr35.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr36.dat b/vendor/endroid/qr-code/assets/data/qrvfr36.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr37.dat b/vendor/endroid/qr-code/assets/data/qrvfr37.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr38.dat b/vendor/endroid/qr-code/assets/data/qrvfr38.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr39.dat b/vendor/endroid/qr-code/assets/data/qrvfr39.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr4.dat b/vendor/endroid/qr-code/assets/data/qrvfr4.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr40.dat b/vendor/endroid/qr-code/assets/data/qrvfr40.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr5.dat b/vendor/endroid/qr-code/assets/data/qrvfr5.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr6.dat b/vendor/endroid/qr-code/assets/data/qrvfr6.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr7.dat b/vendor/endroid/qr-code/assets/data/qrvfr7.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr8.dat b/vendor/endroid/qr-code/assets/data/qrvfr8.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/qrvfr9.dat b/vendor/endroid/qr-code/assets/data/qrvfr9.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc10.dat b/vendor/endroid/qr-code/assets/data/rsc10.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc13.dat b/vendor/endroid/qr-code/assets/data/rsc13.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc15.dat b/vendor/endroid/qr-code/assets/data/rsc15.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc16.dat b/vendor/endroid/qr-code/assets/data/rsc16.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc17.dat b/vendor/endroid/qr-code/assets/data/rsc17.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc18.dat b/vendor/endroid/qr-code/assets/data/rsc18.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc20.dat b/vendor/endroid/qr-code/assets/data/rsc20.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc22.dat b/vendor/endroid/qr-code/assets/data/rsc22.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc24.dat b/vendor/endroid/qr-code/assets/data/rsc24.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc26.dat b/vendor/endroid/qr-code/assets/data/rsc26.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc28.dat b/vendor/endroid/qr-code/assets/data/rsc28.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc30.dat b/vendor/endroid/qr-code/assets/data/rsc30.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc32.dat b/vendor/endroid/qr-code/assets/data/rsc32.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc34.dat b/vendor/endroid/qr-code/assets/data/rsc34.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc36.dat b/vendor/endroid/qr-code/assets/data/rsc36.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc40.dat b/vendor/endroid/qr-code/assets/data/rsc40.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc42.dat b/vendor/endroid/qr-code/assets/data/rsc42.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc44.dat b/vendor/endroid/qr-code/assets/data/rsc44.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc46.dat b/vendor/endroid/qr-code/assets/data/rsc46.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc48.dat b/vendor/endroid/qr-code/assets/data/rsc48.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc50.dat b/vendor/endroid/qr-code/assets/data/rsc50.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc52.dat b/vendor/endroid/qr-code/assets/data/rsc52.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc54.dat b/vendor/endroid/qr-code/assets/data/rsc54.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc56.dat b/vendor/endroid/qr-code/assets/data/rsc56.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc58.dat b/vendor/endroid/qr-code/assets/data/rsc58.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc60.dat b/vendor/endroid/qr-code/assets/data/rsc60.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc62.dat b/vendor/endroid/qr-code/assets/data/rsc62.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc64.dat b/vendor/endroid/qr-code/assets/data/rsc64.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc66.dat b/vendor/endroid/qr-code/assets/data/rsc66.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc68.dat b/vendor/endroid/qr-code/assets/data/rsc68.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/data/rsc7.dat b/vendor/endroid/qr-code/assets/data/rsc7.dat
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/font/opensans.ttf b/vendor/endroid/qr-code/assets/font/opensans.ttf
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/b.png b/vendor/endroid/qr-code/assets/image/b.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/d.png b/vendor/endroid/qr-code/assets/image/d.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/logo.png b/vendor/endroid/qr-code/assets/image/logo.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv1.png b/vendor/endroid/qr-code/assets/image/qrv1.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv10.png b/vendor/endroid/qr-code/assets/image/qrv10.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv11.png b/vendor/endroid/qr-code/assets/image/qrv11.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv12.png b/vendor/endroid/qr-code/assets/image/qrv12.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv13.png b/vendor/endroid/qr-code/assets/image/qrv13.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv14.png b/vendor/endroid/qr-code/assets/image/qrv14.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv15.png b/vendor/endroid/qr-code/assets/image/qrv15.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv16.png b/vendor/endroid/qr-code/assets/image/qrv16.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv17.png b/vendor/endroid/qr-code/assets/image/qrv17.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv18.png b/vendor/endroid/qr-code/assets/image/qrv18.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv19.png b/vendor/endroid/qr-code/assets/image/qrv19.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv2.png b/vendor/endroid/qr-code/assets/image/qrv2.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv20.png b/vendor/endroid/qr-code/assets/image/qrv20.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv21.png b/vendor/endroid/qr-code/assets/image/qrv21.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv22.png b/vendor/endroid/qr-code/assets/image/qrv22.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv23.png b/vendor/endroid/qr-code/assets/image/qrv23.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv24.png b/vendor/endroid/qr-code/assets/image/qrv24.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv25.png b/vendor/endroid/qr-code/assets/image/qrv25.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv26.png b/vendor/endroid/qr-code/assets/image/qrv26.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv27.png b/vendor/endroid/qr-code/assets/image/qrv27.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv28.png b/vendor/endroid/qr-code/assets/image/qrv28.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv29.png b/vendor/endroid/qr-code/assets/image/qrv29.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv3.png b/vendor/endroid/qr-code/assets/image/qrv3.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv30.png b/vendor/endroid/qr-code/assets/image/qrv30.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv31.png b/vendor/endroid/qr-code/assets/image/qrv31.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv32.png b/vendor/endroid/qr-code/assets/image/qrv32.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv33.png b/vendor/endroid/qr-code/assets/image/qrv33.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv34.png b/vendor/endroid/qr-code/assets/image/qrv34.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv35.png b/vendor/endroid/qr-code/assets/image/qrv35.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv36.png b/vendor/endroid/qr-code/assets/image/qrv36.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv37.png b/vendor/endroid/qr-code/assets/image/qrv37.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv38.png b/vendor/endroid/qr-code/assets/image/qrv38.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv39.png b/vendor/endroid/qr-code/assets/image/qrv39.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv4.png b/vendor/endroid/qr-code/assets/image/qrv4.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv40.png b/vendor/endroid/qr-code/assets/image/qrv40.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv5.png b/vendor/endroid/qr-code/assets/image/qrv5.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv6.png b/vendor/endroid/qr-code/assets/image/qrv6.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv7.png b/vendor/endroid/qr-code/assets/image/qrv7.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv8.png b/vendor/endroid/qr-code/assets/image/qrv8.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/assets/image/qrv9.png b/vendor/endroid/qr-code/assets/image/qrv9.png
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/composer.json b/vendor/endroid/qr-code/composer.json
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Bundle/Controller/QrCodeController.php b/vendor/endroid/qr-code/src/Bundle/Controller/QrCodeController.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php b/vendor/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Bundle/Resources/config/services.yml b/vendor/endroid/qr-code/src/Bundle/Resources/config/services.yml
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php b/vendor/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php b/vendor/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php b/vendor/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php b/vendor/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php b/vendor/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php b/vendor/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/Exceptions/VersionTooLargeException.php b/vendor/endroid/qr-code/src/Exceptions/VersionTooLargeException.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/src/QrCode.php b/vendor/endroid/qr-code/src/QrCode.php
old mode 100644
new mode 100755
diff --git a/vendor/endroid/qr-code/tests/QrCodeTest.php b/vendor/endroid/qr-code/tests/QrCodeTest.php
old mode 100644
new mode 100755
diff --git a/vendor/qiniu/php-sdk/test-env.sh b/vendor/qiniu/php-sdk/test-env.sh
old mode 100644
new mode 100755
diff --git a/vendor/zoujingli/ip2region/test.php b/vendor/zoujingli/ip2region/test.php
index 45981c3db..2e97d7d14 100644
--- a/vendor/zoujingli/ip2region/test.php
+++ b/vendor/zoujingli/ip2region/test.php
@@ -1,15 +1,15 @@
-btreeSearch($ip);
-
-var_export($info, true);
-
-// array (
-// 'city_id' => 2163,
-// 'region' => '中国|华南|广东省|深圳市|鹏博士',
+btreeSearch($ip);
+
+var_export($info, true);
+
+// array (
+// 'city_id' => 2163,
+// 'region' => '中国|华南|广东省|深圳市|鹏博士',
// )
\ No newline at end of file
diff --git a/vendor/zoujingli/wechat-developer/WeChat/Pay.php b/vendor/zoujingli/wechat-developer/WeChat/Pay.php
index 260e8be4b..f5c4ab974 100644
--- a/vendor/zoujingli/wechat-developer/WeChat/Pay.php
+++ b/vendor/zoujingli/wechat-developer/WeChat/Pay.php
@@ -196,7 +196,7 @@ class Pay
public function createTransfers(array $options)
{
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
- return $this->callPostApi($url, $options, true);
+ return $this->callPostApi($url, $options, true, 'MD5', false);
}
/**
@@ -208,7 +208,7 @@ class Pay
public function queryTransfers($partner_trade_no)
{
$url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo';
- return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true);
+ return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, 'MD5', false);
}
/**
@@ -230,9 +230,10 @@ class Pay
/**
* 生成支付签名
* @param array $data
+ * @param string $signType
* @return string
*/
- public function getPaySign(array $data)
+ public function getPaySign(array $data, $signType = 'MD5')
{
unset($data['sign']);
ksort($data);
@@ -240,6 +241,9 @@ class Pay
foreach ($data as $k => $v) {
$str .= "{$k}={$v}&";
}
+ if ($signType === 'MD5') {
+ return strtoupper(md5("{$str}key={$key}"));
+ }
return strtoupper(hash_hmac('SHA256', "{$str}key={$key}", $key));
}
@@ -248,10 +252,12 @@ class Pay
* @param string $url 请求
* @param array $data 接口参数
* @param bool $isCert 是否需要使用双向证书
+ * @param string $signType 数据签名类型 MD5|SHA256
+ * @param bool $needSignType 是否需要传签名类型参数
* @return array
* @throws InvalidResponseException
*/
- public function callPostApi($url, array $data, $isCert = false)
+ public function callPostApi($url, array $data, $isCert = false, $signType = 'HMAC-SHA256', $needSignType = true)
{
$option = [];
if ($isCert) {
@@ -264,8 +270,10 @@ class Pay
$option['ssl_key'] = $this->config->get('ssl_key');
}
$params = $this->params->merge($data);
- $params['sign_type'] = 'HMAC-SHA256';
- $params['sign'] = $this->getPaySign($params);
+ if ($needSignType) {
+ $params['sign_type'] = strtoupper($signType);
+ }
+ $params['sign'] = $this->getPaySign($params, $signType);
$result = Tools::xml2arr(Tools::post($url, Tools::arr2xml($params), $option));
if ($result['return_code'] !== 'SUCCESS') {
throw new InvalidResponseException($result['return_msg'], '0');