diff --git a/README.md b/README.md index 21e054a..b9c1be1 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ > TaoLer是一个简单迅捷的轻论坛系统,适用于个人或组织区域型信息交流发布平台。 * 官网:https://www.aieok.com - * 版本:TaoLer 1.8.20 - * 日期:2022.1.7 + * 版本:TaoLer 1.9.0 + * 日期:2022.3.16 webman版新架构已适配90% @@ -140,6 +140,6 @@ 本项目包含的第三方源码和二进制文件之版权信息另行标注。 -版权所有Copyright © 2020-2021 by aieok.com (https://www.aieok.com) +版权所有Copyright © 2020-2022 by aieok.com (https://www.aieok.com) All rights reserved。 diff --git a/app/admin/view/set/system/website.html b/app/admin/view/set/system/website.html index cc61fbe..8905ea2 100644 --- a/app/admin/view/set/system/website.html +++ b/app/admin/view/set/system/website.html @@ -237,6 +237,20 @@
是否显示发件人所在地区简称
+
+ +
+ +
+
勾选则验证
+
+
+ +
+ +
+
勾选则验证
+
diff --git a/app/common/lib/SetConf.php b/app/common/lib/SetConf.php index f36bdb9..c6052ad 100644 --- a/app/common/lib/SetConf.php +++ b/app/common/lib/SetConf.php @@ -7,8 +7,18 @@ */ namespace app\common\lib; + class SetConf { + protected string $str = ''; + + function __construct(string $fileName) + { + $this->file = $fileName; + $this->file = app()->getConfigPath() . $fileName . '.php'; + $this->str = $str = file_get_contents($this->file); //加载配置文件 + } + /** * 修改配置 * @param string $file @@ -62,4 +72,79 @@ class SetConf return json(['code'=>-1,'msg'=>'配置项错误!']); } } + + + + // 修改配置 + function editConfig($data) + { + + if (is_array($data)){ + + foreach ($data as $key => $value) + { + // 多维数组 + if (is_array($value)) { + $this->editConfig($value); + } else { + // 一维数组 + if(is_int($value)){ + // 数字类型 + $pats = '/\'' . $key . '\'(.*?),/'; + $reps = "'". $key. "'". " => " . "".$value .","; + } else { + // 字符类型 + $pats = '/\'' . $key . '\'(.*?)\',/'; + $reps = "'". $key. "'". " => " . "'".$value ."',"; + } + + $this->str = preg_replace($pats, $reps, $this->str); // 正则查找然后替换 + } + } + + try { + file_put_contents($this->file, $this->str); // 写入配置文件 + } + catch (\Exception $e) { + // 这是进行异常捕获 + echo $e->getMessage(); + //return json(['code'=>-1,'msg'=> $file . '无写入权限']); + } + } + return true; + + } + + /* 删除配置 + * + */ + function del(array $arr) + { + if (is_array($arr)){ + foreach ($arr as $key => $value) + { + // 递归删除key + if (is_array($value)) { + $this->del($value); + } else { + // 正则查找然后替换 + $pats = '/\s?\'' . $value . '\'(.*?)\r\n/'; + $this->str = preg_replace($pats, '', $this->str); + } + + /* 匹配空数组 + * 'key' => [ + * ], + */ + $pats = '/\s?\'\w+\'\s*\=\>\s*\[\s*\]{1}\S*\,?\s$/m'; + $this->str = preg_replace($pats, '', $this->str); + + } + //写入配置 + file_put_contents($this->file, $this->str); // 写入配置文件 + } + + return true; + } + } diff --git a/app/common/validate/Article.php b/app/common/validate/Article.php index 4e5c30b..0a46d45 100644 --- a/app/common/validate/Article.php +++ b/app/common/validate/Article.php @@ -15,6 +15,6 @@ class Article extends Validate public function sceneArtadd() { - return $this->only(['cate_id','title','content','captcha']); + return $this->only(['cate_id','title','content']); } } \ No newline at end of file diff --git a/app/common/validate/User.php b/app/common/validate/User.php index c1f451b..5823762 100644 --- a/app/common/validate/User.php +++ b/app/common/validate/User.php @@ -22,20 +22,20 @@ class User extends Validate //邮件邮件码验证 public function sceneCode() { - return $this->only(['code',]); + return $this->only(['code']); } //name登陆验证场景 public function sceneLoginName() { - return $this->only(['name','password','captcha']) + return $this->only(['name','password']) ->remove('name', 'unique'); } //emai登陆验证场景 public function sceneLoginEmail() { - return $this->only(['email','password','captcha']) + return $this->only(['email','password']) ->remove('email', 'unique'); } diff --git a/app/index/controller/Article.php b/app/index/controller/Article.php index d58eca9..b91d2f5 100644 --- a/app/index/controller/Article.php +++ b/app/index/controller/Article.php @@ -156,6 +156,15 @@ class Article extends BaseController { if (Request::isAjax()) { $data = Request::only(['cate_id', 'title', 'title_color', 'user_id', 'content', 'upzip', 'tags', 'captcha']); + + // 验证码 + if(Config::get('taoler.config.post_captcha') == 1) + { + if(!captcha_check($data['captcha'])){ // 验证失败 + return json(['code'=>-1,'msg'=> '验证码失败']); + }; + } + $validate = new \app\common\validate\Article; //调用验证器 $result = $validate->scene('Artadd')->check($data); //进行数据验证 if (true !== $result) { @@ -202,6 +211,15 @@ class Article extends BaseController //编辑 if(Request::isAjax()){ $data = Request::only(['id','cate_id','title','title_color','user_id','content','upzip','tags','captcha']); + + // 验证码 + if(Config::get('taoler.config.post_captcha') == 1) + { + if(!captcha_check($data['captcha'])){ // 验证失败 + return json(['code'=>-1,'msg'=> '验证码失败']); + }; + } + $validate = new \app\common\validate\Article(); //调用验证器 $res = $validate->scene('Artadd')->check($data); //进行数据验证 diff --git a/app/index/controller/Index.php b/app/index/controller/Index.php index 8dbf82d..1945c0b 100644 --- a/app/index/controller/Index.php +++ b/app/index/controller/Index.php @@ -9,6 +9,7 @@ use think\facade\Db; use app\facade\Article; use app\common\model\Slider; use app\common\lib\Msgres; +use app\common\lib\SetConf; class Index extends BaseController { @@ -20,7 +21,7 @@ class Index extends BaseController * @throws \think\db\exception\ModelNotFoundException */ public function index() - { + { $types = input('type'); //幻灯 diff --git a/app/index/controller/Login.php b/app/index/controller/Login.php index e12d2a7..5ae94e9 100644 --- a/app/index/controller/Login.php +++ b/app/index/controller/Login.php @@ -42,9 +42,18 @@ class Login extends BaseController //$url = substr($refer,strlen($domain)); Cookie::set('url',$refer); if(Request::isAjax()) { + //登陆前数据校验 $data = Request::param(); - + if(Config::get('taoler.config.login_captcha') == 1) + { + //先校验验证码 + if(!captcha_check($data['captcha'])){ + // 验证失败 + return json(['code'=>-1,'msg'=> '验证码失败']); + }; + } + //邮箱正则表达式 $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; //判断输入的是邮箱还是用户名 diff --git a/composer.json b/composer.json index 0c8e704..5004e51 100644 --- a/composer.json +++ b/composer.json @@ -46,7 +46,10 @@ ] }, "config": { - "preferred-install": "dist" + "preferred-install": "dist", + "allow-plugins": { + "topthink/think-installer": true + } }, "scripts": { "post-autoload-dump": [ diff --git a/composer.lock b/composer.lock index 8004938..028fc3b 100644 --- a/composer.lock +++ b/composer.lock @@ -18,13 +18,7 @@ "type": "zip", "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6", "reference": "83b609028194aa042ea33b5af2d41a7427de80e6", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.3.0" @@ -81,13 +75,7 @@ "type": "zip", "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", "reference": "094defdb4a7001845300334e7c1ee2335925ef99", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "ext-fileinfo": "*", @@ -181,13 +169,7 @@ "type": "zip", "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "league/flysystem": "~1.0", @@ -238,13 +220,7 @@ "type": "zip", "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "ext-fileinfo": "*", @@ -300,13 +276,7 @@ "type": "zip", "url": "https://api.github.com/repos/liliuwei/thinkphp-social/zipball/2067fc2c2cc3b3d109602bc19c3e5a99c5f4c970", "reference": "2067fc2c2cc3b3d109602bc19c3e5a99c5f4c970", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.6.0", @@ -381,13 +351,7 @@ "type": "zip", "url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/2627b2e4206031731c94c8d637fb06b3b96e8860", "reference": "2627b2e4206031731c94c8d637fb06b3b96e8860", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.0" @@ -421,23 +385,17 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.5.4", + "version": "v6.6.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285" + "reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c0d9f7dd3c2aa247ca44791e9209233829d82285", - "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1", + "reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1", + "shasum": "" }, "require": { "ext-ctype": "*", @@ -493,7 +451,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.4" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0" }, "funding": [ { @@ -501,7 +459,7 @@ "type": "github" } ], - "time": "2022-02-17T08:19:04+00:00" + "time": "2022-02-28T15:31:21+00:00" }, { "name": "psr/cache", @@ -515,13 +473,7 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.3.0" @@ -570,13 +522,7 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.4.0" @@ -624,13 +570,7 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.3.0" @@ -683,13 +623,7 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.3.0" @@ -739,13 +673,7 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=5.3.0" @@ -796,13 +724,7 @@ "type": "zip", "url": "https://api.github.com/repos/taoser/think-addons/zipball/bd8b0bfa4543fe8d2da65355c134250f78c0d457", "reference": "bd8b0bfa4543fe8d2da65355c134250f78c0d457", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -858,13 +780,7 @@ "type": "zip", "url": "https://api.github.com/repos/taoser/think-auth/zipball/19bb04e4fb957a95ff3fdc142939922c19167b43", "reference": "19bb04e4fb957a95ff3fdc142939922c19167b43", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -917,13 +833,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/framework/zipball/e478316ac843c1a884a3b3a7a94db17c4001ff5c", "reference": "e478316ac843c1a884a3b3a7a94db17c4001ff5c", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "ext-json": "*", @@ -990,13 +900,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-captcha/zipball/db5be361d3cd664d236fb95d5dffe93a117283ad", "reference": "db5be361d3cd664d236fb95d5dffe93a117283ad", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "topthink/framework": "^6.0.0" @@ -1013,12 +917,12 @@ } }, "autoload": { - "psr-4": { - "think\\captcha\\": "src/" - }, "files": [ "src/helper.php" - ] + ], + "psr-4": { + "think\\captcha\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1049,13 +953,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-helper/zipball/769acbe50a4274327162f9c68ec2e89a38eb2aff", "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0" @@ -1065,12 +963,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "think\\": "src" - }, "files": [ "src/helper.php" - ] + ], + "psr-4": { + "think\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1101,13 +999,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88", "reference": "38ba647706e35d6704b5d370c06f8a160b635f88", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "composer-plugin-api": "^1.0||^2.0" @@ -1152,13 +1044,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3", "reference": "ccaad7c2d33f42cb1cc2a78d6610aaec02cea4c3", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -1196,23 +1082,17 @@ }, { "name": "topthink/think-orm", - "version": "v2.0.52", + "version": "v2.0.53", "source": { "type": "git", "url": "https://github.com/top-think/think-orm.git", - "reference": "407a60658f37fc57422ab95a9922c6f69af90f46" + "reference": "06783eda65547a70ea686360a897759e1f873fff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-orm/zipball/407a60658f37fc57422ab95a9922c6f69af90f46", - "reference": "407a60658f37fc57422ab95a9922c6f69af90f46", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/top-think/think-orm/zipball/06783eda65547a70ea686360a897759e1f873fff", + "reference": "06783eda65547a70ea686360a897759e1f873fff", + "shasum": "" }, "require": { "ext-json": "*", @@ -1251,9 +1131,9 @@ ], "support": { "issues": "https://github.com/top-think/think-orm/issues", - "source": "https://github.com/top-think/think-orm/tree/v2.0.52" + "source": "https://github.com/top-think/think-orm/tree/v2.0.53" }, - "time": "2022-01-25T06:00:05+00:00" + "time": "2022-02-28T14:54:22+00:00" }, { "name": "topthink/think-template", @@ -1267,13 +1147,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368", "reference": "abfc293f74f9ef5127b5c416310a01fe42e59368", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -1314,13 +1188,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-view/zipball/edce0ae2c9551ab65f9e94a222604b0dead3576d", "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -1361,13 +1229,7 @@ "type": "zip", "url": "https://api.github.com/repos/wamkj/thinkphp6.0-databackup/zipball/28a0e406d827132942723a3c9f69bb20c98e652f", "reference": "28a0e406d827132942723a3c9f69bb20c98e652f", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -1404,7 +1266,7 @@ "packages-dev": [ { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -1414,13 +1276,7 @@ "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1" @@ -1473,7 +1329,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -1493,7 +1349,7 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -1503,13 +1359,7 @@ "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1" @@ -1555,7 +1405,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" }, "funding": [ { @@ -1575,23 +1425,17 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" }, "require": { "php": ">=7.1" @@ -1644,7 +1488,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -1660,27 +1504,21 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2022-03-04T08:16:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.37", + "version": "v4.4.39", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "e74eee4ec02de71db3d60151aa5b203c990556df" + "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e74eee4ec02de71db3d60151aa5b203c990556df", - "reference": "e74eee4ec02de71db3d60151aa5b203c990556df", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/35237c5e5dcb6593a46a860ba5b29c1d4683d80e", + "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e", + "shasum": "" }, "require": { "php": ">=7.1.3", @@ -1739,7 +1577,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.37" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.39" }, "funding": [ { @@ -1755,7 +1593,7 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:41:36+00:00" + "time": "2022-02-25T10:38:15+00:00" }, { "name": "topthink/think-trace", @@ -1769,13 +1607,7 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-trace/zipball/9a9fa8f767b6c66c5a133ad21ca1bc96ad329444", "reference": "9a9fa8f767b6c66c5a133ad21ca1bc96ad329444", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1.0", @@ -1824,5 +1656,5 @@ "php": ">=7.1.0" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.2.0" } diff --git a/config/taoler.php b/config/taoler.php index 51b838e..325e1bc 100644 --- a/config/taoler.php +++ b/config/taoler.php @@ -7,7 +7,7 @@ return [ //应用名,此项不可更改 'appname' => 'TaoLer', //版本配置 - 'version' => '1.8.22', + 'version' => '1.9.0', //加盐 'salt' => 'taoler', //数据库备份目录 @@ -20,8 +20,9 @@ return [ 'regist_check' => 0, 'posts_check' => 0, 'commnets_check' => 0, + 'login_captcha' => 0, + 'post_captcha' => 0, ] - ]; \ No newline at end of file diff --git a/public/static/res/mods/imgcom.js b/public/static/res/mods/imgcom.js index 4a6c769..5812793 100644 --- a/public/static/res/mods/imgcom.js +++ b/public/static/res/mods/imgcom.js @@ -54,7 +54,7 @@ var compressImage = { reader.readAsDataURL(file) reader.onload = function (e) { const img = new Image() - const quality = 0.4 // 图像质量 + const quality = 0.8 // 图像质量 const canvas = document.createElement('canvas') const drawer = canvas.getContext('2d') img.src = this.result @@ -64,7 +64,7 @@ var compressImage = { originHeight = img.height; /* 图片的高度 */ // 设置最大尺寸限制,将所有图片都压缩到小于1m - const maxWidth = 1024, maxHeight = 1024; + const maxWidth = 2560, maxHeight = 1600; // 需要压缩的目标尺寸 let targetWidth = originWidth, targetHeight = originHeight; // 等比例计算超过最大限制时缩放后的图片尺寸 diff --git a/public/static/res/mods/index.js b/public/static/res/mods/index.js index eaf4c99..cb114d4 100644 --- a/public/static/res/mods/index.js +++ b/public/static/res/mods/index.js @@ -94,9 +94,10 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'], //简易编辑器 ,layEditor: function(options){ var html = ['
' + ,'' ,'' ,'' - ,'' + ,'' ,'' ,'' ,'' @@ -110,6 +111,16 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'], }; var log = {}, mod = { + //加粗 + strong: function(editor){ + var str = window.getSelection().toString(); + if(!str == ''){ + //var strB = ''+ str + ''; + layui.focusInsert(editor[0], '[strong] '+ str + '[/strong]'); + //console.log(str); + // console.log(strB); + } + }, face: function(editor, self){ //插入表情 var str = '', ul, face = fly.faces; for(var key in face){ @@ -280,8 +291,8 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'], ,area: 'auto' ,shade: false //,area: '465px' - ,fixed: false - ,offset: [ + ,fixed: false + ,offset: [ editor.offset().top - $(window).scrollTop() + 'px' ,editor.offset().left + 'px' ] @@ -341,45 +352,45 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'], //,field: 'image' ,size: 10240 ,choose: function (obj) { //选择文件后的回调 - imgcom.uploads(obj); + imgcom.uploads(obj); } - ,done: function(res){ - if(res.status == 0){ - cover.val(res.url); - } else { - layer.msg(res.msg, {icon: 5}); - } - } + ,done: function(res){ + if(res.status == 0){ + cover.val(res.url); + } else { + layer.msg(res.msg, {icon: 5}); + } + } ,error: function(){ layer.msg('系统错误,请联系管理员'); } - }); - form.on('submit(uploadImages)', function(data){ - var field = data.field; - if(!field.video) return video.focus(); - layui.focusInsert(editor[0], 'video('+field.cover+')['+ field.video + '] '); - layer.close(index); - }); - } - }); + }); + form.on('submit(uploadImages)', function(data){ + var field = data.field; + if(!field.video) return video.focus(); + layui.focusInsert(editor[0], 'video('+field.cover+')['+ field.video + '] '); + layer.close(index); + }); + } + }); } ,audio: function(editor){ //插入音频 - //判断登陆 - if(uid == -1){ - layer.msg('请登录再发布', {icon: 6}, function(){ - location.href = login; - }) - return false; - } + //判断登陆 + if(uid == -1){ + layer.msg('请登录再发布', {icon: 6}, function(){ + location.href = login; + }) + return false; + } layer.open({ type: 1 ,id: 'fly-jie-audio-upload' ,title: '插入音频' - ,area: 'auto' + ,area: 'auto' ,shade: false //,area: '465px' - ,fixed: false - ,offset: [ + ,fixed: false + ,offset: [ editor.offset().top - $(window).scrollTop() + 'px' ,editor.offset().left + 'px' ] @@ -570,6 +581,12 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'], .replace(/\n*\[\/quote\]\n*/g, '
'); }) + //转义加粗 + .replace(/\[strong\]([\s\S]*)\[\/strong\]\n*/g, function(str){ + return str.replace(/\[strong\]\n*/g, '') + .replace(/\n*\[\/strong\]\n*/g, ''); + }) + //转义换行 .replace(/\n/g, '
') diff --git a/vendor/bin/var-dump-server b/vendor/bin/var-dump-server index 10567b2..527f3ed 100644 --- a/vendor/bin/var-dump-server +++ b/vendor/bin/var-dump-server @@ -4,15 +4,16 @@ /** * Proxy PHP file generated by Composer * - * This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server) using ob_start to remove the shebang if present - * to prevent the shebang from being output on PHP<8 + * This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server) + * using a stream wrapper to prevent the shebang from being output on PHP<8 * * @generated */ namespace Composer; -$binPath = __DIR__ . "/" . '../symfony/var-dumper/Resources/bin/var-dump-server'; +$GLOBALS['_composer_bin_dir'] = __DIR__; +$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php'; if (PHP_VERSION_ID < 80000) { if (!class_exists('Composer\BinProxyWrapper')) { @@ -23,18 +24,17 @@ if (PHP_VERSION_ID < 80000) { { private $handle; private $position; + private $realpath; public function stream_open($path, $mode, $options, &$opened_path) { - // get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution - $opened_path = substr($path, 21); - $opened_path = realpath($opened_path) ?: $opened_path; - $this->handle = fopen($opened_path, $mode); + // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution + $opened_path = substr($path, 17); + $this->realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); $this->position = 0; - // remove all traces of this stream wrapper once it has been used - stream_wrapper_unregister('composer-bin-proxy'); - return (bool) $this->handle; } @@ -66,6 +66,16 @@ if (PHP_VERSION_ID < 80000) { return $operation ? flock($this->handle, $operation) : true; } + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + public function stream_tell() { return $this->position; @@ -78,20 +88,30 @@ if (PHP_VERSION_ID < 80000) { public function stream_stat() { - return fstat($this->handle); + return array(); } public function stream_set_option($option, $arg1, $arg2) { return true; } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } } } - if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\BinProxyWrapper')) { - include("composer-bin-proxy://" . $binPath); + if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) { + include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server'); exit(0); } } -include $binPath; +include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server'; diff --git a/vendor/bin/var-dump-server.bat b/vendor/bin/var-dump-server.bat index 46836b5..94333da 100644 --- a/vendor/bin/var-dump-server.bat +++ b/vendor/bin/var-dump-server.bat @@ -1,4 +1,5 @@ @ECHO OFF setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../symfony/var-dumper/Resources/bin/var-dump-server +SET BIN_TARGET=%~dp0/var-dump-server +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 php "%BIN_TARGET%" %* diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 0cd6055..afef3fa 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -149,7 +149,7 @@ class ClassLoader /** * @return string[] Array of classname => path - * @psalm-var array + * @psalm-return array */ public function getClassMap() { diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 4ebd53f..dc15c48 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -8,6 +8,7 @@ $baseDir = dirname($vendorDir); return array( 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 4404d55..85a6a0f 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -65,11 +65,16 @@ class ComposerAutoloaderInit1b32198725235c8d6500c87262ef30c2 } } +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ function composerRequire1b32198725235c8d6500c87262ef30c2($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - require $file; - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; } } diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 2121b01..5b8df38 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -12,8 +12,8 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', - '223fa6f9b46fbe5d6b44c5ff847bfceb' => __DIR__ . '/..' . '/taoser/think-addons/src/helper.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', + '223fa6f9b46fbe5d6b44c5ff847bfceb' => __DIR__ . '/..' . '/taoser/think-addons/src/helper.php', '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', 'd421242fd42b2ea6cd13f802bcf18a6e' => __DIR__ . '/../..' . '/extend/taoler/com/form.php', ); @@ -101,10 +101,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 ), 'think\\' => array ( - 0 => __DIR__ . '/..' . '/topthink/think-helper/src', - 1 => __DIR__ . '/..' . '/topthink/think-template/src', + 0 => __DIR__ . '/..' . '/topthink/framework/src/think', + 1 => __DIR__ . '/..' . '/topthink/think-helper/src', 2 => __DIR__ . '/..' . '/topthink/think-orm/src', - 3 => __DIR__ . '/..' . '/topthink/framework/src/think', + 3 => __DIR__ . '/..' . '/topthink/think-template/src', ), 'taoser\\think\\' => array ( @@ -191,6 +191,7 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 public static $classMap = array ( 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 3c3856d..dfccee5 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -429,24 +429,18 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.5.4", - "version_normalized": "6.5.4.0", + "version": "v6.6.0", + "version_normalized": "6.6.0.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285" + "reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c0d9f7dd3c2aa247ca44791e9209233829d82285", - "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1", + "reference": "e43bac82edc26ca04b36143a48bde1c051cfd5b1", + "shasum": "" }, "require": { "ext-ctype": "*", @@ -472,7 +466,7 @@ "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" }, - "time": "2022-02-17T08:19:04+00:00", + "time": "2022-02-28T15:31:21+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -504,7 +498,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.4" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.0" }, "funding": [ { @@ -806,8 +800,8 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", @@ -817,13 +811,7 @@ "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1" @@ -847,12 +835,12 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -878,7 +866,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" }, "funding": [ { @@ -898,8 +886,8 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", @@ -909,13 +897,7 @@ "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "shasum": "" }, "require": { "php": ">=7.1" @@ -933,12 +915,12 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -963,7 +945,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" }, "funding": [ { @@ -983,29 +965,23 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.24.0", - "version_normalized": "1.24.0.0", + "version": "v1.25.0", + "version_normalized": "1.25.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-09-13T13:58:33+00:00", + "time": "2022-03-04T08:16:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -1018,12 +994,12 @@ }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -1055,7 +1031,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" }, "funding": [ { @@ -1075,24 +1051,18 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.37", - "version_normalized": "4.4.37.0", + "version": "v4.4.39", + "version_normalized": "4.4.39.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "e74eee4ec02de71db3d60151aa5b203c990556df" + "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e74eee4ec02de71db3d60151aa5b203c990556df", - "reference": "e74eee4ec02de71db3d60151aa5b203c990556df", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/35237c5e5dcb6593a46a860ba5b29c1d4683d80e", + "reference": "35237c5e5dcb6593a46a860ba5b29c1d4683d80e", + "shasum": "" }, "require": { "php": ">=7.1.3", @@ -1115,7 +1085,7 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "time": "2022-01-02T09:41:36+00:00", + "time": "2022-02-25T10:38:15+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -1153,7 +1123,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.37" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.39" }, "funding": [ { @@ -1596,24 +1566,18 @@ }, { "name": "topthink/think-orm", - "version": "v2.0.52", - "version_normalized": "2.0.52.0", + "version": "v2.0.53", + "version_normalized": "2.0.53.0", "source": { "type": "git", "url": "https://github.com/top-think/think-orm.git", - "reference": "407a60658f37fc57422ab95a9922c6f69af90f46" + "reference": "06783eda65547a70ea686360a897759e1f873fff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-orm/zipball/407a60658f37fc57422ab95a9922c6f69af90f46", - "reference": "407a60658f37fc57422ab95a9922c6f69af90f46", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] + "url": "https://api.github.com/repos/top-think/think-orm/zipball/06783eda65547a70ea686360a897759e1f873fff", + "reference": "06783eda65547a70ea686360a897759e1f873fff", + "shasum": "" }, "require": { "ext-json": "*", @@ -1626,7 +1590,7 @@ "require-dev": { "phpunit/phpunit": "^7|^8|^9.5" }, - "time": "2022-01-25T06:00:05+00:00", + "time": "2022-02-28T14:54:22+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1654,7 +1618,7 @@ ], "support": { "issues": "https://github.com/top-think/think-orm/issues", - "source": "https://github.com/top-think/think-orm/tree/v2.0.52" + "source": "https://github.com/top-think/think-orm/tree/v2.0.53" }, "install-path": "../topthink/think-orm" }, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index f2ac689..483c676 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'e0b7efe3f2680ac9d7910e02abcd943b0cc226ec', + 'reference' => 'c22383e6432ee0dc4992378dbd006d79492737b3', 'name' => 'taoser/taoler', 'dev' => true, ), @@ -65,12 +65,12 @@ 'dev_requirement' => false, ), 'phpmailer/phpmailer' => array( - 'pretty_version' => 'v6.5.4', - 'version' => '6.5.4.0', + 'pretty_version' => 'v6.6.0', + 'version' => '6.6.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../phpmailer/phpmailer', 'aliases' => array(), - 'reference' => 'c0d9f7dd3c2aa247ca44791e9209233829d82285', + 'reference' => 'e43bac82edc26ca04b36143a48bde1c051cfd5b1', 'dev_requirement' => false, ), 'psr/cache' => array( @@ -119,8 +119,8 @@ 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), @@ -128,8 +128,8 @@ 'dev_requirement' => true, ), 'symfony/polyfill-php72' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php72', 'aliases' => array(), @@ -137,21 +137,21 @@ 'dev_requirement' => true, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.24.0', - 'version' => '1.24.0.0', + 'pretty_version' => 'v1.25.0', + 'version' => '1.25.0.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), - 'reference' => '57b712b08eddb97c762a8caa32c84e037892d2e9', + 'reference' => '4407588e0d3f1f52efb65fbe92babe41f37fe50c', 'dev_requirement' => true, ), 'symfony/var-dumper' => array( - 'pretty_version' => 'v4.4.37', - 'version' => '4.4.37.0', + 'pretty_version' => 'v4.4.39', + 'version' => '4.4.39.0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), - 'reference' => 'e74eee4ec02de71db3d60151aa5b203c990556df', + 'reference' => '35237c5e5dcb6593a46a860ba5b29c1d4683d80e', 'dev_requirement' => true, ), 'taoser/taoler' => array( @@ -160,7 +160,7 @@ 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'e0b7efe3f2680ac9d7910e02abcd943b0cc226ec', + 'reference' => 'c22383e6432ee0dc4992378dbd006d79492737b3', 'dev_requirement' => false, ), 'taoser/think-addons' => array( @@ -227,12 +227,12 @@ 'dev_requirement' => false, ), 'topthink/think-orm' => array( - 'pretty_version' => 'v2.0.52', - 'version' => '2.0.52.0', + 'pretty_version' => 'v2.0.53', + 'version' => '2.0.53.0', 'type' => 'library', 'install_path' => __DIR__ . '/../topthink/think-orm', 'aliases' => array(), - 'reference' => '407a60658f37fc57422ab95a9922c6f69af90f46', + 'reference' => '06783eda65547a70ea686360a897759e1f873fff', 'dev_requirement' => false, ), 'topthink/think-template' => array( diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION index c192617..cd802a1 100644 --- a/vendor/phpmailer/phpmailer/VERSION +++ b/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.5.4 \ No newline at end of file +6.6.0 \ No newline at end of file diff --git a/vendor/phpmailer/phpmailer/src/OAuth.php b/vendor/phpmailer/phpmailer/src/OAuth.php index c93d0be..c1d5b77 100644 --- a/vendor/phpmailer/phpmailer/src/OAuth.php +++ b/vendor/phpmailer/phpmailer/src/OAuth.php @@ -33,7 +33,7 @@ use League\OAuth2\Client\Token\AccessToken; * * @author Marcus Bointon (Synchro/coolbru) */ -class OAuth +class OAuth implements OAuthTokenProvider { /** * An instance of the League OAuth Client Provider. diff --git a/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php b/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php new file mode 100644 index 0000000..1155507 --- /dev/null +++ b/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php @@ -0,0 +1,44 @@ + + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2010 - 2012 Jim Jagielski + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + * @note This program is distributed in the hope that it will be useful - WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +namespace PHPMailer\PHPMailer; + +/** + * OAuthTokenProvider - OAuth2 token provider interface. + * Provides base64 encoded OAuth2 auth strings for SMTP authentication. + * + * @see OAuth + * @see SMTP::authenticate() + * + * @author Peter Scopes (pdscopes) + * @author Marcus Bointon (Synchro/coolbru) + */ +interface OAuthTokenProvider +{ + /** + * Generate a base64-encoded OAuth token ensuring that the access token has not expired. + * The string to be base 64 encoded should be in the form: + * "user=\001auth=Bearer \001\001" + * + * @return string + */ + public function getOauth64(); +} diff --git a/vendor/phpmailer/phpmailer/src/PHPMailer.php b/vendor/phpmailer/phpmailer/src/PHPMailer.php index 19110df..718216b 100644 --- a/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -358,9 +358,9 @@ class PHPMailer public $AuthType = ''; /** - * An instance of the PHPMailer OAuth class. + * An implementation of the PHPMailer OAuthTokenProvider interface. * - * @var OAuth + * @var OAuthTokenProvider */ protected $oauth; @@ -750,7 +750,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.5.4'; + const VERSION = '6.6.0'; /** * Error severity: message only, continue processing. @@ -2161,7 +2161,8 @@ class PHPMailer } if ($tls) { if (!$this->smtp->startTLS()) { - throw new Exception($this->lang('connect_host')); + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); } //We must resend EHLO after TLS negotiation $this->smtp->hello($hello); @@ -2191,6 +2192,10 @@ class PHPMailer //As we've caught all exceptions, just report whatever the last one was if ($this->exceptions && null !== $lastexception) { throw $lastexception; + } elseif ($this->exceptions) { + // no exception was thrown, likely $this->smtp->connect() failed + $message = $this->getSmtpErrorMessage('connect_host'); + throw new Exception($message); } return false; @@ -4127,6 +4132,26 @@ class PHPMailer return $key; } + /** + * Build an error message starting with a generic one and adding details if possible. + * + * @param string $base_key + * @return string + */ + private function getSmtpErrorMessage($base_key) + { + $message = $this->lang($base_key); + $error = $this->smtp->getError(); + if (!empty($error['error'])) { + $message .= ' ' . $error['error']; + if (!empty($error['detail'])) { + $message .= ' ' . $error['detail']; + } + } + + return $message; + } + /** * Check if an error occurred. * @@ -5027,9 +5052,9 @@ class PHPMailer } /** - * Get the OAuth instance. + * Get the OAuthTokenProvider instance. * - * @return OAuth + * @return OAuthTokenProvider */ public function getOAuth() { @@ -5037,9 +5062,9 @@ class PHPMailer } /** - * Set an OAuth instance. + * Set an OAuthTokenProvider instance. */ - public function setOAuth(OAuth $oauth) + public function setOAuth(OAuthTokenProvider $oauth) { $this->oauth = $oauth; } diff --git a/vendor/phpmailer/phpmailer/src/POP3.php b/vendor/phpmailer/phpmailer/src/POP3.php index 6ca3e3c..86cfebd 100644 --- a/vendor/phpmailer/phpmailer/src/POP3.php +++ b/vendor/phpmailer/phpmailer/src/POP3.php @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.5.4'; + const VERSION = '6.6.0'; /** * Default POP3 port number. diff --git a/vendor/phpmailer/phpmailer/src/SMTP.php b/vendor/phpmailer/phpmailer/src/SMTP.php index 1381770..5ecad21 100644 --- a/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/vendor/phpmailer/phpmailer/src/SMTP.php @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.5.4'; + const VERSION = '6.6.0'; /** * SMTP line break constant. @@ -483,7 +483,7 @@ class SMTP * @param string $username The user name * @param string $password The password * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2) - * @param OAuth $OAuth An optional OAuth instance for XOAUTH2 authentication + * @param OAuthTokenProvider $OAuth An optional OAuthTokenProvider instance for XOAUTH2 authentication * * @return bool True if successfully authenticated */ diff --git a/vendor/services.php b/vendor/services.php index b8fd819..0e2bf8a 100644 --- a/vendor/services.php +++ b/vendor/services.php @@ -1,5 +1,5 @@ 'taoser\\addons\\Service', diff --git a/vendor/symfony/polyfill-php80/Php80.php b/vendor/symfony/polyfill-php80/Php80.php index 5fef511..362dd1a 100644 --- a/vendor/symfony/polyfill-php80/Php80.php +++ b/vendor/symfony/polyfill-php80/Php80.php @@ -100,6 +100,16 @@ final class Php80 public static function str_ends_with(string $haystack, string $needle): bool { - return '' === $needle || ('' !== $haystack && 0 === substr_compare($haystack, $needle, -\strlen($needle))); + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); } } diff --git a/vendor/symfony/polyfill-php80/PhpToken.php b/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..fe6e691 --- /dev/null +++ b/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000..72f1081 --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,7 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * @author Nicolas Grekas + * + * @internal + */ +final class MysqliCaster +{ + public static function castMysqliDriver(\mysqli_driver $c, array $a, Stub $stub, bool $isNested): array + { + foreach ($a as $k => $v) { + if (isset($c->$k)) { + $a[$k] = $c->$k; + } + } + + return $a; + } +} diff --git a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php index eeac882..d2e5039 100644 --- a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +++ b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php @@ -144,6 +144,8 @@ abstract class AbstractCloner implements ClonerInterface 'Ds\Pair' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castPair'], 'Symfony\Component\VarDumper\Caster\DsPairStub' => ['Symfony\Component\VarDumper\Caster\DsCaster', 'castPairStub'], + 'mysqli_driver' => ['Symfony\Component\VarDumper\Caster\MysqliCaster', 'castMysqliDriver'], + 'CurlHandle' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'], ':curl' => ['Symfony\Component\VarDumper\Caster\ResourceCaster', 'castCurl'], diff --git a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index 8409a0c..88e5ba9 100644 --- a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -978,7 +978,7 @@ EOHTML } $this->lastDepth = $depth; - $this->line = mb_convert_encoding($this->line, 'HTML-ENTITIES', 'UTF-8'); + $this->line = mb_encode_numericentity($this->line, [0x80, 0xFFFF, 0, 0xFFFF], 'UTF-8'); if (-1 === $depth) { AbstractDumper::dumpLine(0); diff --git a/vendor/topthink/think-orm/src/db/BaseQuery.php b/vendor/topthink/think-orm/src/db/BaseQuery.php index 7bb778a..d472590 100644 --- a/vendor/topthink/think-orm/src/db/BaseQuery.php +++ b/vendor/topthink/think-orm/src/db/BaseQuery.php @@ -350,7 +350,7 @@ abstract class BaseQuery $field = array_merge((array) $this->options['field'], $field); } - $this->options['field'] = array_unique($field); + $this->options['field'] = array_unique($field, SORT_REGULAR); return $this; } @@ -379,7 +379,7 @@ abstract class BaseQuery $field = array_merge((array) $this->options['field'], $field); } - $this->options['field'] = array_unique($field); + $this->options['field'] = array_unique($field, SORT_REGULAR); return $this; } @@ -424,7 +424,7 @@ abstract class BaseQuery $field = array_merge((array) $this->options['field'], $field); } - $this->options['field'] = array_unique($field); + $this->options['field'] = array_unique($field, SORT_REGULAR); return $this; } @@ -765,14 +765,15 @@ abstract class BaseQuery } /** - * 查询缓存 + * 查询缓存 数据为空不缓存 * @access public * @param mixed $key 缓存key * @param integer|\DateTime $expire 缓存有效期 * @param string|array $tag 缓存标签 + * @param bool $always 始终缓存 * @return $this */ - public function cache($key = true, $expire = null, $tag = null) + public function cache($key = true, $expire = null, $tag = null, bool $always = false) { if (false === $key || !$this->getConnection()->getCache()) { return $this; @@ -783,11 +784,25 @@ abstract class BaseQuery $key = true; } - $this->options['cache'] = [$key, $expire, $tag]; + $this->options['cache'] = [$key, $expire, $tag]; + $this->options['cache_always'] = $always; return $this; } + /** + * 查询缓存 允许缓存空数据 + * @access public + * @param mixed $key 缓存key + * @param integer|\DateTime $expire 缓存有效期 + * @param string|array $tag 缓存标签 + * @return $this + */ + public function cacheAlways($key = true, $expire = null, $tag = null) + { + return $this->cache($key, $expire, $tag, true); + } + /** * 指定查询lock * @access public diff --git a/vendor/topthink/think-orm/src/db/Builder.php b/vendor/topthink/think-orm/src/db/Builder.php index 06e689f..938ed4d 100644 --- a/vendor/topthink/think-orm/src/db/Builder.php +++ b/vendor/topthink/think-orm/src/db/Builder.php @@ -703,6 +703,8 @@ abstract class Builder // 比较运算 if ($value instanceof Closure) { $value = $this->parseClosure($query, $value); + } elseif ($value instanceof Raw) { + $value = $this->parseRaw($query, $value); } if ('=' == $exp && is_null($value)) { diff --git a/vendor/topthink/think-orm/src/db/PDOConnection.php b/vendor/topthink/think-orm/src/db/PDOConnection.php index 40ac99e..77a0b01 100644 --- a/vendor/topthink/think-orm/src/db/PDOConnection.php +++ b/vendor/topthink/think-orm/src/db/PDOConnection.php @@ -709,9 +709,10 @@ abstract class PDOConnection extends Connection $this->getPDOStatement($sql, $bind, $master, $procedure); - $resultSet = $this->getResult($procedure); + $resultSet = $this->getResult($procedure); + $requireCache = $query->getOptions('cache_always') || !empty($resultSet); - if (isset($cacheItem) && $resultSet) { + if (isset($cacheItem) && $requireCache) { // 缓存数据集 $cacheItem->set($resultSet); $this->cacheData($cacheItem); diff --git a/vendor/topthink/think-orm/src/db/concern/WhereQuery.php b/vendor/topthink/think-orm/src/db/concern/WhereQuery.php index ef845f5..5f2ed47 100644 --- a/vendor/topthink/think-orm/src/db/concern/WhereQuery.php +++ b/vendor/topthink/think-orm/src/db/concern/WhereQuery.php @@ -374,7 +374,9 @@ trait WhereQuery } elseif ($field instanceof Closure) { $where = $field; } elseif (is_string($field)) { - if (preg_match('/[,=\<\'\"\(\s]/', $field)) { + if ($condition instanceof Raw) { + + } elseif (preg_match('/[,=\<\'\"\(\s]/', $field)) { return $this->whereRaw($field, is_array($op) ? $op : [], $logic); } elseif (is_string($op) && strtolower($op) == 'exp' && !is_null($condition)) { $bind = isset($param[2]) && is_array($param[2]) ? $param[2] : []; diff --git a/vendor/topthink/think-orm/src/model/Collection.php b/vendor/topthink/think-orm/src/model/Collection.php index c8ff385..9d31e20 100644 --- a/vendor/topthink/think-orm/src/model/Collection.php +++ b/vendor/topthink/think-orm/src/model/Collection.php @@ -18,6 +18,11 @@ use think\Paginator; /** * 模型数据集类 + * + * @template TKey of array-key + * @template TModel of \think\Model + * + * @extends BaseCollection */ class Collection extends BaseCollection { @@ -184,8 +189,8 @@ class Collection extends BaseCollection * 按指定键整理数据 * * @access public - * @param mixed $items 数据 - * @param string $indexKey 键名 + * @param mixed $items 数据 + * @param string|null $indexKey 键名 * @return array */ public function dictionary($items = null, string &$indexKey = null) @@ -211,8 +216,8 @@ class Collection extends BaseCollection * 比较数据集,返回差集 * * @access public - * @param mixed $items 数据 - * @param string $indexKey 指定比较的键名 + * @param mixed $items 数据 + * @param string|null $indexKey 指定比较的键名 * @return static */ public function diff($items, string $indexKey = null) @@ -239,8 +244,8 @@ class Collection extends BaseCollection * 比较数据集,返回交集 * * @access public - * @param mixed $items 数据 - * @param string $indexKey 指定比较的键名 + * @param mixed $items 数据 + * @param string|null $indexKey 指定比较的键名 * @return static */ public function intersect($items, string $indexKey = null) diff --git a/vendor/topthink/think-orm/src/model/Relation.php b/vendor/topthink/think-orm/src/model/Relation.php index 358842d..3aa22be 100644 --- a/vendor/topthink/think-orm/src/model/Relation.php +++ b/vendor/topthink/think-orm/src/model/Relation.php @@ -215,11 +215,15 @@ abstract class Relation /** * 限制关联数据的字段 * @access public - * @param array $field 关联字段限制 + * @param array|string $field 关联字段限制 * @return $this */ - public function withField(array $field) + public function withField($field) { + if (is_string($field)) { + $field = array_map('trim', explode(',', $field)); + } + $this->withField = $field; return $this; } diff --git a/vendor/topthink/think-orm/src/model/concern/Attribute.php b/vendor/topthink/think-orm/src/model/concern/Attribute.php index e4aa07b..897d327 100644 --- a/vendor/topthink/think-orm/src/model/concern/Attribute.php +++ b/vendor/topthink/think-orm/src/model/concern/Attribute.php @@ -15,6 +15,7 @@ namespace think\model\concern; use InvalidArgumentException; use think\db\Raw; use think\helper\Str; +use think\Model; use think\model\Relation; /** @@ -382,7 +383,7 @@ trait Attribute } elseif (isset($this->type[$name])) { // 类型转换 $value = $this->writeTransform($value, $this->type[$name]); - } elseif (is_object($value) && method_exists($value, '__toString')) { + } elseif (array_key_exists($name, $this->origin) && is_object($value) && method_exists($value, '__toString')) { // 对象类型 $value = $value->__toString(); } diff --git a/view/taoler/index/article/add.html b/view/taoler/index/article/add.html index 6b4c0c5..09106ee 100644 --- a/view/taoler/index/article/add.html +++ b/view/taoler/index/article/add.html @@ -112,6 +112,7 @@
发表后无法更改飞吻
+ {if config('taoler.config.post_captcha') == 1}
@@ -121,6 +122,7 @@ captcha
+ {/if}
diff --git a/view/taoler/index/article/ask/detail.html b/view/taoler/index/article/ask/detail.html index 0d033cc..690ff20 100644 --- a/view/taoler/index/article/ask/detail.html +++ b/view/taoler/index/article/ask/detail.html @@ -333,6 +333,64 @@ layui.use(['fly', 'face','colorpicker','plyr', 'laypage'], function(){ }); +// 点击图片放大 + + +