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}