From 184eb4ce30557acc8fe5297de4203dbc96bd6b6c Mon Sep 17 00:00:00 2001 From: taoser Date: Tue, 2 Nov 2021 15:40:58 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E6=8F=92=E4=BB=B6=E3=80=82?= =?UTF-8?q?2.=E5=8D=87=E7=BA=A7=E5=90=84=E4=BE=9D=E8=B5=96=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +- app/404.html | 57 +++ app/admin/controller/Addons.php | 394 +++++++++++++----- app/admin/model/Admin.php | 4 +- app/admin/view/addons/add.html | 93 +++++ app/admin/view/addons/config.html | 51 +++ app/admin/view/addons/edit.html | 93 +++++ app/admin/view/addons/index.html | 45 +- app/admin/view/admin - 快捷方式.lnk | Bin 0 -> 1036 bytes app/admin/view/login/login.html | 12 +- app/admin/view/set/system/server.html | 33 +- app/install/data/taoler.sql | 19 +- app/middleware/AddonsLang.php | 18 + app/middleware/Auth.php | 8 +- app/middleware/CheckRegister.php | 7 +- composer.json | 9 +- composer.lock | 180 ++++---- config/app.php | 13 +- config/taoler.php | 2 +- extend/taoler/com/form.php | 223 ++++++++++ public/admin/style/login.css | 55 --- public/admin/style/res/bg.jpg | Bin 317932 -> 0 bytes public/admin/style/res/bg1.jpg | Bin 321306 -> 0 bytes public/static/admin/modules/addons.js | 212 ++++++---- public/static/admin/style/login.css | 4 +- public/static/res/images/logo-m.png | Bin 0 -> 2251 bytes vendor/composer/InstalledVersions.php | 42 +- vendor/composer/autoload_files.php | 5 +- vendor/composer/autoload_psr4.php | 3 +- vendor/composer/autoload_static.php | 11 +- vendor/composer/installed.json | 188 +++++---- vendor/composer/installed.php | 42 +- vendor/league/flysystem/src/Adapter/Ftp.php | 2 +- .../league/mime-type-detection/CHANGELOG.md | 6 + .../src/GeneratedExtensionToMimeTypeMap.php | 23 +- .../src/OverridingExtensionToMimeTypeMap.php | 30 ++ vendor/phpmailer/phpmailer/README.md | 17 +- vendor/phpmailer/phpmailer/VERSION | 2 +- vendor/phpmailer/phpmailer/composer.json | 12 +- .../phpmailer/language/phpmailer.lang-ja.php | 15 +- .../phpmailer/language/phpmailer.lang-nl.php | 7 +- vendor/phpmailer/phpmailer/phpunit.xml.dist | 35 -- vendor/phpmailer/phpmailer/src/Exception.php | 2 +- vendor/phpmailer/phpmailer/src/PHPMailer.php | 131 ++++-- vendor/phpmailer/phpmailer/src/POP3.php | 2 +- vendor/phpmailer/phpmailer/src/SMTP.php | 2 +- vendor/services.php | 10 +- .../var-dumper/Caster/ExceptionCaster.php | 30 +- .../var-dumper/Caster/ReflectionCaster.php | 2 + .../var-dumper/Caster/XmlReaderCaster.php | 23 +- vendor/symfony/var-dumper/Cloner/Data.php | 6 + .../symfony/var-dumper/Cloner/VarCloner.php | 47 ++- vendor/symfony/var-dumper/README.md | 2 +- .../think-addons/README.md | 7 +- .../think-addons/composer.json | 12 +- .../think-addons/src/Addons.php | 39 +- .../think-addons/src/addons/Route.php | 22 +- .../think-addons/src/addons/Service.php | 10 +- .../src/addons/command/SendConfig.php | 47 +++ .../src/addons/middleware/Addons.php | 30 ++ .../think-addons/src/config.php | 0 .../think-addons/src/helper.php | 89 +++- .../think-addons/src/lang/zh-cn.php | 0 .../src/addons/command/SendConfig.php | 67 --- .../src/addons/middleware/Addons.php | 48 --- view/taoler/index/article/ask/detail.html | 10 +- view/taoler/index/article/detail/ask.html | 325 +++++++++++++++ view/taoler/index/article/detail/posts.html | 318 ++++++++++++++ view/taoler/index/article/edit.html | 2 +- view/taoler/index/article/posts/detail.html | 12 +- view/taoler/index/article/posts/detail.html- | 315 ++++++++++++++ view/taoler/index/error/404.html | 46 ++ view/taoler/index/index/index.html | 7 +- view/taoler/index/login/login.html | 6 +- view/taoler/index/public/.gitignore | 1 + view/taoler/index/public/footer.html | 4 +- view/taoler/index/public/header.html | 4 +- view/taoler/index/public/js.html | 12 - view/taoler/index/public/menu.html | 5 +- view/taoler/index/public/user-nav.html | 33 +- 80 files changed, 2815 insertions(+), 900 deletions(-) create mode 100644 app/404.html create mode 100644 app/admin/view/addons/add.html create mode 100644 app/admin/view/addons/config.html create mode 100644 app/admin/view/addons/edit.html create mode 100644 app/admin/view/admin - 快捷方式.lnk create mode 100644 app/middleware/AddonsLang.php create mode 100644 extend/taoler/com/form.php delete mode 100644 public/admin/style/login.css delete mode 100644 public/admin/style/res/bg.jpg delete mode 100644 public/admin/style/res/bg1.jpg create mode 100644 public/static/res/images/logo-m.png create mode 100644 vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php delete mode 100644 vendor/phpmailer/phpmailer/phpunit.xml.dist rename vendor/{zzstudio => taoser}/think-addons/README.md (98%) rename vendor/{zzstudio => taoser}/think-addons/composer.json (75%) rename vendor/{zzstudio => taoser}/think-addons/src/Addons.php (81%) rename vendor/{zzstudio => taoser}/think-addons/src/addons/Route.php (69%) rename vendor/{zzstudio => taoser}/think-addons/src/addons/Service.php (96%) create mode 100644 vendor/taoser/think-addons/src/addons/command/SendConfig.php create mode 100644 vendor/taoser/think-addons/src/addons/middleware/Addons.php rename vendor/{zzstudio => taoser}/think-addons/src/config.php (100%) rename vendor/{zzstudio => taoser}/think-addons/src/helper.php (63%) rename vendor/{zzstudio => taoser}/think-addons/src/lang/zh-cn.php (100%) delete mode 100644 vendor/zzstudio/think-addons/src/addons/command/SendConfig.php delete mode 100644 vendor/zzstudio/think-addons/src/addons/middleware/Addons.php create mode 100644 view/taoler/index/article/detail/ask.html create mode 100644 view/taoler/index/article/detail/posts.html create mode 100644 view/taoler/index/article/posts/detail.html- create mode 100644 view/taoler/index/error/404.html create mode 100644 view/taoler/index/public/.gitignore delete mode 100644 view/taoler/index/public/js.html diff --git a/README.md b/README.md index 105e8a1..eb1df3f 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ > TaoLer是一个简单迅捷的轻论坛系统,适用于个人或组织区域型信息交流发布平台。 - * 官网:https://www.aieok.com + * 官网:https://www.aieok.com:8443 * 前台:http://bbs.aieok.com:888 * 后台:http://adm.aieok.com:888 * 账号:test * 密码:test123 - * 版本:TaoLer 1.8.8 - * 日期:2021.10.12 + * 版本:TaoLer 1.8.10 + * 日期:2021.11.2 #### 项目地址 @@ -97,6 +97,15 @@ #### 前后台独立域名的绑定 1. 手动修改`config/app.php`文件内的`'domain_bind'`对应的应用。 + ```html + // 域名绑定(自动多应用模式有效) + 'domain_bind' => [ + 'bbs' => 'index', //bbs.xxx.com 访问的是Index应用 + 'adm' => 'admin', //adm.xxx.com 访问的是Admin应用 + 'api' => 'api' //api.xxx.com 访问的是Admin应用 + 'www.test.com' => 'test' //www.test.com 访问的是Test应用 + ], + ``` 2. 后面会针对动态的设置绑定域名功能开发...此处待完成 diff --git a/app/404.html b/app/404.html new file mode 100644 index 0000000..046541c --- /dev/null +++ b/app/404.html @@ -0,0 +1,57 @@ + + + + + 404 - TaoLer社区 + + + + + + + + + +
+
+
+

+

页面或者数据被 纸飞机app 运到火星了,啥都看不到了…请返回首页

+
+
+
+ + + + + + + + + + + + + + + + + + + + + diff --git a/app/admin/controller/Addons.php b/app/admin/controller/Addons.php index fa3b546..75d2a0c 100644 --- a/app/admin/controller/Addons.php +++ b/app/admin/controller/Addons.php @@ -9,133 +9,131 @@ use think\facade\Config; use app\admin\model\Addons as AddonsModel; use taoler\com\Files; use taoler\com\Api; +use app\common\lib\SetConf; +use think\App; +use app\common\lib\ZipFile; class Addons extends AdminController { /** - * 显示资源列表 - * - * @return \think\Response + * @return string */ public function index() { - $type = input('type'); - //$filter = input('filter') ? input('filter') : 'public-list'; - //动态field - switch($type){ - //已安装 - case 'installed': - $col = [ - ['type' => 'numbers', 'fixed'=> 'left'], - ['field' => 'name','title'=> '插件', 'width'=> 150], - ['field'=> 'title','title'=> '标题', 'width'=> 100], - ['field'=> 'version','title'=> '版本', 'width'=> 100], - ['field' => 'author','title'=> '作者', 'width'=> 100], - ['field' => 'description','title'=> '简介', 'minWidth'=> 200], - ['field' => 'status','title'=> '状态', 'width'=> 100], - ['field' => 'install','title'=> '安装', 'width'=> 100], - ['field' => 'ctime','title'=> '到期时间', 'width'=> 150], - ['title' => '操作', 'width'=> 220, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] - ]; - break; - //在线 - case 'onlineAddons': - $col = [ - ['type' => 'numbers', 'fixed'=> 'left'], - ['field' => 'name','title'=> '插件', 'width'=> 150], - ['field'=> 'title','title'=> '标题', 'width'=> 100], - ['field'=> 'version','title'=> '版本', 'width'=> 100], - ['field' => 'author','title'=> '作者', 'width'=> 100], - ['field' => 'description','title'=> '简介', 'minWidth'=> 200], - ['field' => 'price','title'=> '价格(元)'], - ['field' => 'status','title'=> '状态', 'width'=> 100], - ['field' => 'install','title'=> '安装', 'width'=> 100], - ['field' => 'ctime','title'=> '时间', 'width'=> 150], - ['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-tool'] - ]; - break; - default: - $col = [ - ['type' => 'numbers', 'fixed'=> 'left'], - ['field' => 'name','title'=> '插件', 'width'=> 150], - ['field'=> 'title','title'=> '标题', 'width'=> 100], - ['field'=> 'version','title'=> '版本', 'width'=> 100], - ['field' => 'author','title'=> '作者', 'width'=> 100], - ['field' => 'description','title'=> '简介', 'minWidth'=> 200], - ['field' => 'status','title'=> '状态', 'width'=> 100], - ['field' => 'install','title'=> '安装', 'width'=> 100], - ['field' => 'ctime','title'=> '到期时间', 'width'=> 150], - ['title' => '操作', 'width'=> 220, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] - ]; - } - - View::assign('col',$col); + //$conf = new \addons\social\model\Conf; + //$arr = $conf->getConf(); + //dump($arr); +//dump($arr[0]['value']['app_key']); return View::fetch(); } public function addonsList() { - $type = input('type') ? input('type') : 'installed'; + $type = input('type'); $res = []; - - switch($type){ - - //已安装 - case 'installed': - $addons = Files::getDirName('../addons/'); - if($addons){ - $res = ['code'=>0,'msg'=>'','count'=>5]; - foreach($addons as $v){ - $info_file = '../addons/'.$v.'/info.ini'; - $info = parse_ini_file($info_file); - $res['data'][] = $info; - } - } - - break; - //在线 - case 'onlineAddons': - $url = $this->getSystem()['api_url'].'/v1/addons'; - $addons = Api::urlPost($url,[]); - if( $addons->code !== -1){ - $res['code'] = 0; - $res['msg'] = ''; - $res['data'] = $addons->data; - } - - break; - //已安装 - default: - $addons = Files::getDirName('../addons/'); - if($addons){ - $res = ['code'=>0,'msg'=>'','count'=>5]; - foreach($addons as $v){ - $info_file = '../addons/'.$v.'/info.ini'; - $info = parse_ini_file($info_file); - $res['data'][] = $info; - } - } - break; - } - return json($res); - - + switch($type){ + //已安装 + case 'installed': + $addons = Files::getDirName('../addons/'); + if($addons){ + $res = ['code'=>0,'msg'=>'','count'=>5]; + foreach($addons as $v){ + $info_file = '../addons/'.$v.'/info.ini'; + $info = parse_ini_file($info_file); + $res['data'][] = $info; + } + $res['col'] = [ + ['type' => 'numbers'], + ['field' => 'name','title'=> '插件', 'width'=> 150], + ['field'=> 'title','title'=> '标题', 'width'=> 100], + ['field'=> 'version','title'=> '版本', 'width'=> 100], + ['field' => 'author','title'=> '作者', 'width'=> 100], + ['field' => 'description','title'=> '简介', 'minWidth'=> 200], + ['field' => 'status','title'=> '状态', 'width'=> 100], + ['field' => 'install','title'=> '安装', 'width'=> 100], + ['field' => 'ctime','title'=> '到期时间', 'width'=> 150], + ['title' => '操作', 'width'=> 220, 'align'=>'center', 'toolbar'=> '#addons-installed-tool'] + ]; + } else { + $res = ['code'=>-1,'msg'=>'没有安装任何插件']; + } + break; + //在线 + case 'onlineAddons': + $url = $this->getSystem()['api_url'].'/v1/addons'; + $addons = Api::urlPost($url,[]); + if( $addons->code !== -1){ + $res['code'] = 0; + $res['msg'] = ''; + $res['data'] = $addons->data; + $res['col'] = [ + ['type' => 'numbers'], + ['field' => 'name','title'=> '插件', 'width'=> 150], + ['field'=> 'title','title'=> '标题', 'width'=> 100], + ['field'=> 'version','title'=> '版本', 'width'=> 100], + ['field' => 'author','title'=> '作者', 'width'=> 100], + ['field' => 'description','title'=> '简介', 'minWidth'=> 200], + ['field' => 'price','title'=> '价格(元)'], + ['field' => 'status','title'=> '状态', 'width'=> 100], + ['field' => 'install','title'=> '安装', 'width'=> 100], + ['field' => 'ctime','title'=> '时间', 'width'=> 150], + ['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-tool'] + ]; + } else { + $res = ['code'=>-1,'msg'=>'']; + } + break; + } + return json($res); } - /** * 显示创建资源表单页. * * @return \think\Response */ - public function install() + public function add() { - // + //添加版本 + if(Request::isAjax()){ + $data = Request::param(); + $result = AddonsModel::create($data); + if($result){ + $res = ['code'=>0,'msg'=>'添加成功']; + }else{ + $res = ['code'=>-1,'msg'=>'添加失败']; + } + return json($res); + } + + return View::fetch(); } + /** + * 编辑版本 + * + * @param int $id + * @return \think\Response + */ + public function edit($id) + { + $addons = AddonsModel::find($id); + if(Request::isAjax()){ + $data = Request::only(['id','addons_name','addons_version','addons_auther','addons_resume','addons_price','addons_src']); + $result = $addons->where('id',$id)->save($data); + if($result){ + $res = ['code'=>0,'msg'=>'编辑成功']; + }else{ + $res = ['code'=>-1,'msg'=>'编辑失败']; + } + return json($res); + } + View::assign('addons',$addons); + return View::fetch(); + } /** * 上传版本的zip资源 @@ -146,23 +144,193 @@ class Addons extends AdminController */ public function uploadZip() { - // + $id = Request::param(); + $file = request()->file('file'); + try { + validate(['file'=>'filesize:2048|fileExt:zip,rar,7z']) + ->check(array($file)); + $savename = \think\facade\Filesystem::disk('public')->putFile('addons',$file); + } catch (think\exception\ValidateException $e) { + echo $e->getMessage(); + } + $upload = Config::get('filesystem.disks.public.url'); + + if($savename){ + $name_path =str_replace('\\',"/",$upload.'/'.$savename); + $res = ['code'=>0,'msg'=>'插件上传成功','src'=>$name_path]; + } else { + $res = ['code'=>-1,'msg'=>'上传错误']; + } + return json($res); } - /** - * 删除指定资源 - * - * @param int $id - * @return \think\Response - */ - public function delete($id) + //安装插件 + public function install() { - $version = AddonsModel::find($id); - $res = $version->delete(); + $data = Request::param(); + $url = $this->getSystem()['api_url'].'/v1/getaddons'; + $addons = Api::urlPost($url,['name'=>$data['name'],'version'=>$data['version']]); + if( $addons->code == -1) { + return json(['code'=>$addons->code,'msg'=>$addons->msg]); + } + //是否安装? + $addInstalledVersion = get_addons_info($data['name']); + if(!empty($addInstalledVersion)){ + $verRes = version_compare($data['version'],$addInstalledVersion['version'],'>'); + if(!$verRes){ + return json(['code'=>-1,'msg'=>'不能降级,请选择正确版本']); + } + } + + $file_url = $addons->addons_src; + //判断远程文件是否可用存在 + $header = get_headers($file_url, true); + if(!isset($header[0]) && (strpos($header[0], '200') || strpos($header[0], '304'))){ + return json(['code'=>-1,'msg'=>'获取远程文件失败']); + } + + //把远程文件放入本地 + + //拼接路径 + $addons_dir = Files::getDirPath('../runtime/addons/'); + Files::mkdirs($addons_dir); + + $package_file = $addons_dir . $data['name'] .'.zip'; //升级的压缩包文件 +// halt($package_file); + $cpfile = copy($file_url,$package_file); + if(!$cpfile) + { + return json(['code'=>-1,'msg'=>'下载升级文件失败']); + } + + $uzip = new ZipFile(); + $zipDir = strstr($package_file, '.zip',true); //返回文件名后缀前的字符串 + $zipPath = Files::getDirPath($zipDir); //转换为带/的路径 压缩文件解压到的路径 + $unzip_res = $uzip->unzip($package_file,$zipPath,true); + + if(!$unzip_res) + { + return json(['code'=>-1,'msg'=>'解压失败']); + } + + //升级插件 + if(is_dir($zipPath)) + { + //升级前的写入文件权限检查 + $allUpdateFiles = Files::getAllFile($zipPath); + + if (empty($allUpdateFiles)) return json(['code' => -1, 'msg' => '无可更新文件。']); + $checkString = ''; + foreach ($allUpdateFiles as $updateFile) { + $coverFile = ltrim(str_replace($zipPath, '', $updateFile), DIRECTORY_SEPARATOR); + $dirPath = dirname('../'.$coverFile); + if (file_exists('../'.$coverFile)) { + if (!is_writable('../'.$coverFile)) $checkString .= $coverFile . ' [' . '无写入权限' . ']
'; + } else { + if (!is_dir($dirPath)) @mkdir($dirPath, 0777, true); + if (!is_writable($dirPath)) $checkString .= $dirPath . ' [' . '无写入权限' . ']
'; + } + } + + if (!empty($checkString)) return json(['code' => -1, 'msg' => $checkString]); + $addonsPath = '../'; + $cpRes = Files::copyDirs($zipPath,$addonsPath); + $cpData = $cpRes->getData(); + //更新失败 + if($cpData['code'] == -1) + { + return json(['code'=>-1,'msg'=>$cpData['msg']]); + } + + //清除 + Files::delDirAndFile('../runtime/addons/'); + + } + return json(['code'=>0,'msg'=>'插件安装成功!']); + + } + /** + * 卸载插件 + */ + public function delete() + { + $name = input('name'); + $addonsPath = '../addons/'.$name; + $staticPath = 'addons/'.$name; + + if (is_dir($staticPath)) { + Files::delDir($staticPath); + } + $res = Files::delDir($addonsPath); if($res){ - return json(['code'=>0,'msg'=>'删除成功']); + return json(['code'=>0,'msg'=>'卸载成功']); } else { - return json(['code'=>-1,'msg'=>'删除失败']); + return json(['code'=>-1,'msg'=>'卸载失败']); } } + + //启用插件 + public function start() + { + $name = input('name'); + $arr = ['status' => 1]; + //$res = get_addons_info($name); + //$res = get_addons_instance($name); + $res = set_addons_info($name,$arr); + return json(['code'=>0,'msg'=>$name.'插件已启用']); + + } + + //暂停插件 + public function shutDown() + { + $name = input('name'); + $arr = ['status' => 0]; + $res = set_addons_info($name,$arr); + var_dump($res); + return json(['code'=>-1,'msg'=>$name.'插件已禁用']); + + } + + //配置插件 + public function config($name) + { + $name = input('name'); + //var_dump($name); + $config = get_addons_config($name); + if(empty($config)) return json(['code'=>-1,'msg'=>'无配置项!']); + if(Request::isAjax()){ + $params = Request::param('params/a'); + if ($params) { + foreach ($config as $k => &$v) { + if (isset($params[$k])) { + if ($v['type'] == 'array') { + $arr = []; + $params[$k] = is_array($params[$k]) ? $params[$k] :[]; + foreach ($params[$k]['key'] as $kk=>$vv){ + $arr[$vv] = $params[$k]['value'][$kk]; + } + $params[$k] = $arr; + $value = $params[$k]; + $v['content'] = $value; + $v['value'] = $value; + } else { + $value = $params[$k]; + } + $v['value'] = $value; + } + } + unset($v); + set_addons_config($name,$config); + + } + return json(['code'=>0,'msg'=>'配置成功!']); + } + + //模板引擎初始化 + $view = ['formData'=>$config,'title'=>'title']; + View::assign($view); + return View::fetch(); + + } } diff --git a/app/admin/model/Admin.php b/app/admin/model/Admin.php index f3fac4d..c7ed036 100644 --- a/app/admin/model/Admin.php +++ b/app/admin/model/Admin.php @@ -78,6 +78,8 @@ class Admin extends Model //用户名密码正确返回1 return 1; - } + } else { + return "用户名或密码错误!"; + } } } diff --git a/app/admin/view/addons/add.html b/app/admin/view/addons/add.html new file mode 100644 index 0000000..16b4fef --- /dev/null +++ b/app/admin/view/addons/add.html @@ -0,0 +1,93 @@ +{extend name="public/base" /} + +{block name="body"} + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +{/block} +{block name="js"} + +{/block} \ No newline at end of file diff --git a/app/admin/view/addons/config.html b/app/admin/view/addons/config.html new file mode 100644 index 0000000..1631b6c --- /dev/null +++ b/app/admin/view/addons/config.html @@ -0,0 +1,51 @@ +{extend name="public/base" /} +{block name="body"} + +
+ {foreach name="formData" item="vo" key="k"} + {php}$name = "params[".$k."]";{/php} + {switch name="$vo.type"} + {case value="text"} + {:form_input($name,'text',['label'=>$vo.title,'tip'=>$vo.tip],$vo.value)} + {/case} + {case value="textarea"} + {:form_textarea($name,['label'=>$vo.title,'tip'=>$vo.tip],$vo.value)} + {/case} + {case value="password"} + {:form_input($name,'password',['label'=>$vo.title,'tip'=>$vo.tip],$vo.value)} + {/case} + {case value="radio"} + {:form_radio($name,$vo.content,['label'=>$vo.title,'tip'=>$vo.tip],$vo.value)} + {/case} + {case value="select"} + {:form_select($name,$vo.content,['label'=>$vo.title,'verify'=>$vo.rule,'tip'=>$vo.tip,'search'=>1] ,[],$vo.value)} + {/case} + {case value="image"} + {:form_upload($name,$vo.value,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule,'type'=>'radio','num'=>'1','mime'=>'image'])} + {/case} + {case value="images"} + {:form_upload($name,$vo.value,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule,'type'=>'checkbox','num'=>$vo.num,'mime'=>'image'])} + {/case} + {case value="file"} + {:form_upload($name,$vo.value,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule,'type'=>'radio','num'=>$vo.num,'mime'=>'*'])} + {/case} + {case value="files"} + {:form_upload($name,$vo.value,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule,'type'=>'checkbox','num'=>$vo.num,'mime'=>'*'])} + {/case} + {case value="editor"} + {:form_editor($name,$name,2,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule])} + {/case} + {case value="array"} + {:form_arrays($name,['label'=>$vo.title,'tip'=>$vo.tip,'verify'=>$vo.rule],$vo.value?$vo.value:$vo.content)} + {/case} + {/switch} + {/foreach} + +
+ + +
+
+{/block} +{block name="js"} +{/block} \ No newline at end of file diff --git a/app/admin/view/addons/edit.html b/app/admin/view/addons/edit.html new file mode 100644 index 0000000..966e500 --- /dev/null +++ b/app/admin/view/addons/edit.html @@ -0,0 +1,93 @@ +{extend name="public/base" /} + +{block name="body"} + +
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+
+ +{/block} +{block name="js"} + +{/block} \ No newline at end of file diff --git a/app/admin/view/addons/index.html b/app/admin/view/addons/index.html index be0ccd4..6a86321 100644 --- a/app/admin/view/addons/index.html +++ b/app/admin/view/addons/index.html @@ -2,8 +2,9 @@ {block name="body"}
- -
+
+
+
插件分类 @@ -13,50 +14,55 @@ -
-
-
- +
+
+ + + - +
+
{/block} {block name="js"} + {/block} \ No newline at end of file diff --git a/app/admin/view/set/system/server.html b/app/admin/view/set/system/server.html index 553906f..b0a8c2c 100644 --- a/app/admin/view/set/system/server.html +++ b/app/admin/view/set/system/server.html @@ -9,14 +9,15 @@
    -
  • 积分设置
  • -
  • 用户等级
  • + {if hook('signstatushook') == 1} +
  • 签到规则
  • + {/if} +
  • 用户等级
-
+ {:hook('signadminhook')} + +
-
- +
@@ -85,18 +84,18 @@
+
-
@@ -132,7 +131,7 @@ var field = data.field; $.ajax({ type:"post", - url:"{:url('admin/Sign/add')}", + url: signAddAddons, data:field, daType:"json", success:function (data){ @@ -154,7 +153,7 @@ } }); return false; - }); + }); //添加VIP规则 form.on('submit(vip-rule-submit)',function(data){ diff --git a/app/install/data/taoler.sql b/app/install/data/taoler.sql index b8384ef..bbf5b8b 100644 --- a/app/install/data/taoler.sql +++ b/app/install/data/taoler.sql @@ -164,7 +164,7 @@ CREATE TABLE `tao_auth_rule` ( `pid` smallint(5) NOT NULL DEFAULT '0' COMMENT '父级ID', `level` tinyint(1) NOT NULL DEFAULT '1' COMMENT '菜单层级', `icon` varchar(50) NOT NULL DEFAULT '' COMMENT '图标', - `ishidden` enum('1','0') NOT NULL DEFAULT '1' COMMENT '0隐藏,1显示', + `ishidden` enum('1','0','-1') NOT NULL DEFAULT '1' COMMENT '0隐藏,1显示-1其它', `sort` tinyint(4) NOT NULL DEFAULT '50' COMMENT '排序', `condition` char(100) NOT NULL DEFAULT '', `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间', @@ -177,11 +177,11 @@ CREATE TABLE `tao_auth_rule` ( -- ---------------------------- -- Records of tao_auth_rule -- ---------------------------- -INSERT INTO `tao_auth_rule` VALUES ('1', 'admin', '管理', '', '1', '1', '0', '0', 'layui-icon-user', '1', '3', '', '0', '0', '0'); -INSERT INTO `tao_auth_rule` VALUES ('2', 'set', '设置', '', '1', '1', '0', '0', 'layui-icon-set', '1', '4', '', '0', '0', '0'); -INSERT INTO `tao_auth_rule` VALUES ('3', 'administrator', '账户', '', '1', '1', '0', '0', 'layui-icon-username', '1', '5', '', '0', '1578980034', '0'); -INSERT INTO `tao_auth_rule` VALUES ('4', 'app', '应用', '', '1', '1', '0', '0', 'layui-icon-app', '1', '2', '', '0', '0', '0'); -INSERT INTO `tao_auth_rule` VALUES ('5', 'article', '内容', '', '1', '1', '0', '0', 'layui-icon-read', '1', '0', '', '0', '1578902321', '0'); +INSERT INTO `tao_auth_rule` VALUES ('1', 'admin', '管理', '', '1', '1', '0', '0', 'layui-icon-user', '1', '5', '', '0', '1635757559', '0'); +INSERT INTO `tao_auth_rule` VALUES ('2', 'set', '设置', '', '1', '1', '0', '0', 'layui-icon-set', '1', '6', '', '0', '1635757571', '0'); +INSERT INTO `tao_auth_rule` VALUES ('3', 'administrator', '账户', '', '1', '1', '0', '0', 'layui-icon-username', '1', '7', '', '0', '1635757594', '0'); +INSERT INTO `tao_auth_rule` VALUES ('4', 'app', '应用', '', '1', '1', '0', '0', 'layui-icon-app', '1', '4', '', '0', '1635757536', '0'); +INSERT INTO `tao_auth_rule` VALUES ('5', 'article', '内容', '', '1', '1', '0', '0', 'layui-icon-read', '1', '1', '', '0', '1635757294', '0'); INSERT INTO `tao_auth_rule` VALUES ('6', 'admin/User/list', '用户管理', '', '1', '1', '1', '1', '', '1', '1', '', '0', '1578901015', '0'); INSERT INTO `tao_auth_rule` VALUES ('7', 'admin/Admin/index', '管理员', '', '1', '1', '1', '1', '', '1', '6', '', '0', '1578901133', '0'); INSERT INTO `tao_auth_rule` VALUES ('8', 'admin/AuthGroup/list', '角色管理', '', '1', '1', '1', '1', '', '1', '11', '', '0', '1578901282', '0'); @@ -257,10 +257,13 @@ INSERT INTO `tao_auth_rule` VALUES ('89', 'admin/User/auth', '设置超级用户 INSERT INTO `tao_auth_rule` VALUES ('90', 'admin/Forum/tagshot', '开启热点', '', '1', '1', '16', '2', '', '0', '15', '', '1585841826', '1611997546', '0'); INSERT INTO `tao_auth_rule` VALUES ('91', 'admin/Admin/infoSet', '资料设置', '', '1', '1', '12', '2', '', '0', '62', '', '1586245669', '1611998517', '0'); INSERT INTO `tao_auth_rule` VALUES ('92', 'admin/Admin/repassSet', '密码设置', '', '1', '1', '13', '2', '', '0', '64', '', '1586245727', '1611998534', '0'); -INSERT INTO `tao_auth_rule` VALUES ('93', 'servers', '服务', '', '1', '1', '0', '0', 'layui-icon-cols', '1', '2', '', '1611286515', '1611997619', '0'); +INSERT INTO `tao_auth_rule` VALUES ('93', 'servers', '服务', '', '1', '1', '0', '0', 'layui-icon-cols', '1', '3', '', '1611286515', '1635757525', '0'); INSERT INTO `tao_auth_rule` VALUES ('94', 'admin/Database/index', '数据备份', '', '1', '1', '93', '1', '', '1', '9', '', '1611897141', '1611902589', '0'); INSERT INTO `tao_auth_rule` VALUES ('95', 'admin/Database/backup', '进行备份', '', '1', '1', '94', '2', '', '0', '10', '', '1611897285', '1611902610', '0'); INSERT INTO `tao_auth_rule` VALUES ('96', 'admin/Database/delete', '备份删除', '', '1', '1', '94', '2', '', '0', '0', '', '1611902429', '0', '0'); +INSERT INTO `tao_auth_rule` VALUES ('97', 'addons', '插件', '', '1', '1', '0', '0', 'layui-icon-flag', '1', '2', '', '1635757328', '1635757632', '0'); +INSERT INTO `tao_auth_rule` VALUES ('98', 'admin/Addons/index', '插件市场', '', '1', '1', '97', '1', '', '1', '0', '', '1635757426', '0', '0'); +INSERT INTO `tao_auth_rule` VALUES ('99', 'admin/Addons/addonsList', '插件列表', '', '1', '1', '98', '2', '', '', '0', '', '1635758251', '0', '0'); -- ---------------------------- -- Table structure for tao_cate @@ -471,7 +474,7 @@ CREATE TABLE `tao_system` ( `cache` tinyint(5) NOT NULL DEFAULT '0' COMMENT '缓存时间分钟', `upsize` int(5) NOT NULL DEFAULT '0' COMMENT '上传文件大小KB', `uptype` varchar(255) NOT NULL DEFAULT '0' COMMENT '上传文件类型', - `copyright` varchar(80) NOT NULL DEFAULT '' COMMENT '版权', + `copyright` varchar(100) NOT NULL DEFAULT '' COMMENT '版权', `keywords` tinytext NOT NULL COMMENT '网站关键字', `descript` tinytext NOT NULL COMMENT '网站描述', `is_open` enum('0','1') NOT NULL DEFAULT '1' COMMENT '是否开启站点1开启0关闭', diff --git a/app/middleware/AddonsLang.php b/app/middleware/AddonsLang.php new file mode 100644 index 0000000..2da6891 --- /dev/null +++ b/app/middleware/AddonsLang.php @@ -0,0 +1,18 @@ +app->getRootPath() . '/vendor/zzstudio/think-addons/src/lang/zh-cn.php', + app()->getRootPath().'addons/sign/lang/zh-cn.php', + ]); + + return $next($request); + } +} diff --git a/app/middleware/Auth.php b/app/middleware/Auth.php index 52a792f..da3cd98 100644 --- a/app/middleware/Auth.php +++ b/app/middleware/Auth.php @@ -18,7 +18,7 @@ class Auth public function handle($request, \Closure $next) { $path = app('http')->getName().'/'.stristr($request->pathinfo(),".html",true); - +//var_dump($path); //没有登录及当前非登录页重定向登录页 if(!Session::has('admin_id') && $path !== 'admin/login/index' && !stristr($request->pathinfo(),"captcha.html") ) { @@ -31,14 +31,16 @@ class Auth } // 排除公共权限 - $not_check = ['admin/','admin/login/index','admin/index/index','admin/index/home','admin/Admin/info','admin/Admin/repass','admin/Admin/logout','admin/Index/news','admin/Index/cunsult','admin/Index/replys','admin/Index/reply','admin/captcha']; + $not_check = ['admin/','admin/login/index','admin/index/index','admin/index/home','admin/Admin/info','admin/Admin/repass','admin/Admin/logout','admin/Index/news','admin/Index/cunsult','admin/Index/replys','admin/Index/reply','admin/captcha','addons/socail/']; if (!in_array($path, $not_check)) { $auth = new UserAuth(); $admin_id = Session::get('admin_id'); //登录用户的id if (!$auth->check($path, $admin_id) && $admin_id != 1) { - return view('public/auth'); + //return view('public/auth'); + //return response(""); + return json(['code'=>-1,'msg'=>'无权限']); } } return $next($request); diff --git a/app/middleware/CheckRegister.php b/app/middleware/CheckRegister.php index ad91129..9456d9b 100644 --- a/app/middleware/CheckRegister.php +++ b/app/middleware/CheckRegister.php @@ -8,13 +8,14 @@ class CheckRegister { public function handle($request, \Closure $next) { - //排除特殊注册用户名 + //排除禁止注册用户名的字段 if($request->action(true)=='reg'){ + $name = $request->param('name'); $disname = Db::name('system')->where('id',1)->value('blackname'); $data = explode("|",$disname); foreach($data as $v){ - if ($request->param('name') == $v) { - return json(['msg'=>'该用户名禁止注册,请更换名称']); + if(stripos($name,$v) !== false){ + return json(['msg'=>'非法字段或该用户名禁止注册,请更换']); } } } diff --git a/composer.json b/composer.json index de22082..fde31a5 100644 --- a/composer.json +++ b/composer.json @@ -24,10 +24,10 @@ "topthink/think-view": "^1.0", "topthink/think-captcha": "^3.0", "phpmailer/phpmailer": "^6.1", - "zzstudio/think-addons": "^2.0", "firebase/php-jwt": "^5.2", "lotofbadcode/phpspirit_databackup": "^1.1", - "wamkj/thinkphp6.0-databackup": "^1.0" + "wamkj/thinkphp6.0-databackup": "^1.0", + "taoser/think-addons": "^1.0" }, "require-dev": { "symfony/var-dumper": "^4.2", @@ -39,7 +39,10 @@ }, "psr-0": { "": "extend/" - } + }, + "files": [ + "extend/taoler/com/form.php" + ] }, "config": { "preferred-install": "dist" diff --git a/composer.lock b/composer.lock index 8be5759..e34f891 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c6dc1dcd45b2b2cd2e7bd36c0e76eb04", + "content-hash": "3ef61427e5d1c98f5ca1e197d25ef688", "packages": [ { "name": "firebase/php-jwt", @@ -71,16 +71,16 @@ }, { "name": "league/flysystem", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", "shasum": "", "mirrors": [ { @@ -159,7 +159,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" }, "funding": [ { @@ -167,7 +167,7 @@ "type": "other" } ], - "time": "2021-06-23T21:56:05+00:00" + "time": "2021-08-17T13:49:42+00:00" }, { "name": "league/flysystem-cached-adapter", @@ -228,16 +228,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b38b25d7b372e9fddb00335400467b223349fd7e", + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e", "shasum": "", "mirrors": [ { @@ -274,7 +274,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.8.0" }, "funding": [ { @@ -286,7 +286,7 @@ "type": "tidelift" } ], - "time": "2021-01-18T20:58:21+00:00" + "time": "2021-09-25T08:23:19+00:00" }, { "name": "lotofbadcode/phpspirit_databackup", @@ -340,16 +340,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.5.0", + "version": "v6.5.1", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c" + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355", + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355", "shasum": "", "mirrors": [ { @@ -367,10 +367,12 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", "phpcompatibility/php-compatibility": "^9.3.5", "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" }, "suggest": { "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", @@ -410,7 +412,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.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.1" }, "funding": [ { @@ -418,7 +420,7 @@ "type": "github" } ], - "time": "2021-06-16T14:33:43+00:00" + "time": "2021-08-18T09:14:16+00:00" }, { "name": "psr/cache", @@ -642,6 +644,68 @@ }, "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "taoser/think-addons", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/taoser/think-addons.git", + "reference": "bd8b0bfa4543fe8d2da65355c134250f78c0d457" + }, + "dist": { + "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 + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/framework": "^6.0", + "topthink/think-helper": "^3.0.0", + "topthink/think-view": "^1.0" + }, + "type": "library", + "extra": { + "think": { + "services": [ + "taoser\\addons\\Service" + ], + "config": { + "addons": "src/config.php" + } + } + }, + "autoload": { + "psr-4": { + "taoser\\": "src/" + }, + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "mit" + ], + "authors": [ + { + "name": "taoler", + "email": "changlin_zhao@qq.com" + } + ], + "description": "The ThinkPHP6 Addons Package", + "support": { + "issues": "https://github.com/taoser/think-addons/issues", + "source": "https://github.com/taoser/think-addons/tree/v1.0.1" + }, + "time": "2021-09-18T08:41:10+00:00" + }, { "name": "taoser/think-auth", "version": "v1.0.0", @@ -1139,68 +1203,6 @@ "source": "https://github.com/wamkj/thinkphp6.0-databackup/tree/v1.0" }, "time": "2020-02-15T13:04:16+00:00" - }, - { - "name": "zzstudio/think-addons", - "version": "2.0.5", - "source": { - "type": "git", - "url": "https://github.com/zz-studio/think-addons.git", - "reference": "7eb740cb219a111d593a05ad88248a74f640fe5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zz-studio/think-addons/zipball/7eb740cb219a111d593a05ad88248a74f640fe5c", - "reference": "7eb740cb219a111d593a05ad88248a74f640fe5c", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] - }, - "require": { - "php": ">=7.1.0", - "topthink/framework": "^6.0", - "topthink/think-helper": "^3.0.0", - "topthink/think-view": "^1.0" - }, - "type": "library", - "extra": { - "think": { - "services": [ - "think\\addons\\Service" - ], - "config": { - "addons": "src/config.php" - } - } - }, - "autoload": { - "psr-4": { - "think\\": "src/" - }, - "files": [ - "src/helper.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "byron", - "email": "xiaobo.sun@qq.com" - } - ], - "description": "The ThinkPHP6 Addons Package", - "support": { - "issues": "https://github.com/zz-studio/think-addons/issues", - "source": "https://github.com/zz-studio/think-addons/tree/2.0.5" - }, - "time": "2020-01-06T06:42:39+00:00" } ], "packages-dev": [ @@ -1463,16 +1465,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.27", + "version": "v4.4.33", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba" + "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/391d6d0e7a06ab54eb7c38fab29b8d174471b3ba", - "reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/50286e2b7189bfb4f419c0731e86632cddf7c5ee", + "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee", "shasum": "", "mirrors": [ { @@ -1538,7 +1540,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.27" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.33" }, "funding": [ { @@ -1554,7 +1556,7 @@ "type": "tidelift" } ], - "time": "2021-07-23T15:41:52+00:00" + "time": "2021-10-25T20:24:58+00:00" }, { "name": "topthink/think-trace", diff --git a/config/app.php b/config/app.php index c0953dd..26bf926 100644 --- a/config/app.php +++ b/config/app.php @@ -21,7 +21,7 @@ return [ 'app_map' => [], // 域名绑定(自动多应用模式有效) 'domain_bind' => [ - //'www' => 'index', + //'bbs' => 'index', //'adm' => 'admin', //'api' => 'api' ], @@ -29,15 +29,16 @@ return [ 'deny_app_list' => [], // 异常页面的模板文件 - 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', - + //'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', + 'exception_tmpl' => app()->getAppPath() . '404.html', + // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', // 显示错误信息 - 'show_error_msg' => true, + 'show_error_msg' => false, //异常页面模板 'http_exception_template' => [ - 404 => '404.html', - 500 => '404.html' + 404 => \think\facade\App::getAppPath() . '404.html', + 500 => \think\facade\App::getAppPath() . '404.html', ] ]; diff --git a/config/taoler.php b/config/taoler.php index 27c25b7..51d81de 100644 --- a/config/taoler.php +++ b/config/taoler.php @@ -7,7 +7,7 @@ return [ //应用名,此项不可更改 'appname' => 'TaoLer', //版本配置 - 'version' => '1.8.9', + 'version' => '1.8.10', //加盐 'salt' => 'taoler', //数据库备份目录 diff --git a/extend/taoler/com/form.php b/extend/taoler/com/form.php new file mode 100644 index 0000000..0661204 --- /dev/null +++ b/extend/taoler/com/form.php @@ -0,0 +1,223 @@ +*{display: inline-block; vertical-align: middle; margin-right: 10px; font-size: 14px;} -.layadmin-user-login-other .layui-icon{position: relative; top: 2px; font-size: 26px;} -.layadmin-user-login-other a:hover{opacity: 0.8;} - -.layadmin-user-jump-change{float: right;} - -.layadmin-user-login-footer{position: absolute; left: 0; bottom: 0; width: 100%; line-height: 30px; padding: 20px; text-align: center; box-sizing: border-box; color: rgba(0,0,0,.5)} -.layadmin-user-login-footer span{padding: 0 5px;} -.layadmin-user-login-footer a{padding: 0 5px; color: rgba(0,0,0,.5);} -.layadmin-user-login-footer a:hover{color: rgba(0,0,0,1);} - -/* 有背景图时 */ -.layadmin-user-login-main[bgimg]{background-color: #fff; box-shadow: 0 0 5px rgba(0,0,0,0.05);} - -/* 主题背景 */ -.ladmin-user-login-theme{position: fixed; bottom: 0; left: 0; width: 100%; text-align: center;} -.ladmin-user-login-theme ul{display: inline-block; padding: 5px; background-color: #fff;} -.ladmin-user-login-theme ul li{display: inline-block; vertical-align: top; width: 64px; height: 43px; cursor: pointer; transition: all .3s; -webkit-transition: all .3s; background-color: #f2f2f2;} -.ladmin-user-login-theme ul li:hover{opacity: 0.9} - -@media screen and (max-width: 768px) { - .layadmin-user-login{padding-top: 60px;} - .layadmin-user-login-main{width: 300px;} - .layadmin-user-login-box{padding: 10px;} -} - - - diff --git a/public/admin/style/res/bg.jpg b/public/admin/style/res/bg.jpg deleted file mode 100644 index 308e1ff34bdd52c071342969d7e80959a3153539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317932 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

\n' + + ' \n' + + ' '; + + $(this).parent().parent().append(html); + } else { + $(this).parent().remove(); + } + }); + + } + }); + + } + table.reload('addons-list'); //数据刷新 }); exports('addons', {}) diff --git a/public/static/admin/style/login.css b/public/static/admin/style/login.css index 30fb615..a85bc77 100644 --- a/public/static/admin/style/login.css +++ b/public/static/admin/style/login.css @@ -6,14 +6,14 @@ @License:GPL-2 */ - + html,body,#LAY_app{height:100%;} .layui-layout-body{overflow: auto;} #LAY-user-login, .layadmin-user-display-show{display: block !important;} .layadmin-user-login{position: relative; left: 0; top: 0; padding: 110px 0; min-height: 100%; box-sizing: border-box;} -.layadmin-user-login-main{width: 375px; margin: 0 auto; box-sizing: border-box;} +.layadmin-user-login-main{width: 375px; margin-top: 0px; margin-left: 5%; box-sizing: border-box; background-color:rgba(0,0,0,.3); border:1px solid; border-radius:15px} .layadmin-user-login-box{padding: 20px;} .layadmin-user-login-header{text-align: center;} .layadmin-user-login-header h2{margin-bottom: 10px; font-weight: 300; font-size: 30px; color: #000;} diff --git a/public/static/res/images/logo-m.png b/public/static/res/images/logo-m.png new file mode 100644 index 0000000000000000000000000000000000000000..3876c1bad5c39c393e88a2013247d8e1ad4bbefc GIT binary patch literal 2251 zcmaJ@dsq_r8XnT{mRZ?ROEbbt*%1&FP*yYqODa627-W_qOv)+@4WodSm|1HVuVh=9 zR+dGkC#|$qOLXm~<a<4#Q0MVO5BoYIe0Te3L+mq@+ z_4M*4k^&f0ToxpZmw-}aiYxky%lszSU$q!+KlG_GnK5z;u5$i@{ZP4u7f+Vu*je#S|EuMzFnJ(=fn+{a9aYhA{y-b4RI z&3tkwFS;XXF5tJ+xn&h!&Vskl8=_yd}Ohd%J3YEc8z8 z#=WJD*|xvPp1TCL@9A|M*9B|}-8BZd*G#{fSy_~%bD6w;RUPD)4!K7I)u`l}hkmZY z&f3joqgeDCx3TVls@SaN$!+4OD9EUNQHIF+@%T>};NXBwSq??<)S*7z`TQAvRpNy+ zr!=L*T~<3$s?y`!ETgCP#w7KJ!$q?}lX>IH8<+En(hL6{?lqcVH2Osq2VXV3E)iyb`JUhhN+#Vp?}LA)B{4 zALxxdag1-@;@@5bzx3+MHI?xiUxWp;t)u!TWi?P?#}7YDAam2oTI%};oq8gBi!X_1 zg(52RWV_a_^H-zt&8E|P`_lOfYJgmoy5MDY=84zl$6Gevy8qhtSq%pJ8&n;PRYU9GS zGv&kJp%XJmHEW$r82>_tS4p%39=!Q$6C(SPtv9ny0d~CdZ><;O zj%zQL9zNMb*^v>pTiMi-FZb;>j=oZs^Bva6XUsKY(Ab3CVD?^dkY1Oeq0-eklL1Mq zpMKi?v4Kxs)W>#xk$-5zT6^0A+t2_`+e5Y-+oB^B(>qf8p-0@#kH=O{wB2G>cemDu z-mT-2zb`R6sk1m@n@nA`QgYC}Pg|2}CRn3$ojg)-ZN|xjSvfS}PEnMD_)+}Fq=pN1J;4ip}eZ}90 zxf~f>PP8j~zo_`EJ9VVK$$Qnq+igMhlj@PDcPBL&hEG-Vt{w1TBnl0jj0w;bW{$vy P-wSqNFzcTIn^XP(DNm}l literal 0 HcmV?d00001 diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index ad4475a..3220968 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -35,12 +35,12 @@ private static $installed = array ( ), 'league/flysystem' => array ( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', 'aliases' => array ( ), - 'reference' => 'f3ad69181b8afed2c9edf7be5a2918144ff4ea32', + 'reference' => '18634df356bfd4119fe3d6156bdb990c414c14ea', ), 'league/flysystem-cached-adapter' => array ( @@ -53,12 +53,12 @@ private static $installed = array ( ), 'league/mime-type-detection' => array ( - 'pretty_version' => '1.7.0', - 'version' => '1.7.0.0', + 'pretty_version' => '1.8.0', + 'version' => '1.8.0.0', 'aliases' => array ( ), - 'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3', + 'reference' => 'b38b25d7b372e9fddb00335400467b223349fd7e', ), 'lotofbadcode/phpspirit_databackup' => array ( @@ -71,12 +71,12 @@ private static $installed = array ( ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.5.0', - 'version' => '6.5.0.0', + 'pretty_version' => 'v6.5.1', + 'version' => '6.5.1.0', 'aliases' => array ( ), - 'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c', + 'reference' => 'dd803df5ad7492e1b40637f7ebd258fee5ca7355', ), 'psr/cache' => array ( @@ -143,12 +143,12 @@ private static $installed = array ( ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.27', - 'version' => '4.4.27.0', + 'pretty_version' => 'v4.4.33', + 'version' => '4.4.33.0', 'aliases' => array ( ), - 'reference' => '391d6d0e7a06ab54eb7c38fab29b8d174471b3ba', + 'reference' => '50286e2b7189bfb4f419c0731e86632cddf7c5ee', ), 'taoser/taoler' => array ( @@ -159,6 +159,15 @@ private static $installed = array ( ), 'reference' => NULL, ), + 'taoser/think-addons' => + array ( + 'pretty_version' => 'v1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bd8b0bfa4543fe8d2da65355c134250f78c0d457', + ), 'taoser/think-auth' => array ( 'pretty_version' => 'v1.0.0', @@ -249,15 +258,6 @@ private static $installed = array ( ), 'reference' => '28a0e406d827132942723a3c9f69bb20c98e652f', ), - 'zzstudio/think-addons' => - array ( - 'pretty_version' => '2.0.5', - 'version' => '2.0.5.0', - 'aliases' => - array ( - ), - 'reference' => '7eb740cb219a111d593a05ad88248a74f640fe5c', - ), ), ); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index c158ae2..bf855c7 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -11,7 +11,8 @@ return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', + '223fa6f9b46fbe5d6b44c5ff847bfceb' => $vendorDir . '/taoser/think-addons/src/helper.php', '1cfd2761b63b0a29ed23657ea394cb2d' => $vendorDir . '/topthink/think-captcha/src/helper.php', - '39594db8502267d6df2fe2dca5f3914d' => $vendorDir . '/zzstudio/think-addons/src/helper.php', + '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', + 'd421242fd42b2ea6cd13f802bcf18a6e' => $baseDir . '/extend/taoler/com/form.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index cd4ff01..423d0f9 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -11,8 +11,9 @@ return array( 'think\\trace\\' => array($vendorDir . '/topthink/think-trace/src'), 'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'), 'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'), - 'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/zzstudio/think-addons/src'), + 'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src'), 'taoser\\think\\' => array($vendorDir . '/taoser/think-auth/src'), + 'taoser\\' => array($vendorDir . '/taoser/think-addons/src'), 'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'), 'app\\' => array($baseDir . '/app'), 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 90bae3d..c6fd617 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -12,9 +12,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.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', - '39594db8502267d6df2fe2dca5f3914d' => __DIR__ . '/..' . '/zzstudio/think-addons/src/helper.php', + '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', + 'd421242fd42b2ea6cd13f802bcf18a6e' => __DIR__ . '/../..' . '/extend/taoler/com/form.php', ); public static $prefixLengthsPsr4 = array ( @@ -30,6 +31,7 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 'think\\app\\' => 10, 'think\\' => 6, 'taoser\\think\\' => 13, + 'taoser\\' => 7, ), 'p' => array ( @@ -93,12 +95,15 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 1 => __DIR__ . '/..' . '/topthink/think-helper/src', 2 => __DIR__ . '/..' . '/topthink/think-orm/src', 3 => __DIR__ . '/..' . '/topthink/think-template/src', - 4 => __DIR__ . '/..' . '/zzstudio/think-addons/src', ), 'taoser\\think\\' => array ( 0 => __DIR__ . '/..' . '/taoser/think-auth/src', ), + 'taoser\\' => + array ( + 0 => __DIR__ . '/..' . '/taoser/think-addons/src', + ), 'phpspirit\\databackup\\' => array ( 0 => __DIR__ . '/..' . '/lotofbadcode/phpspirit_databackup/src', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index d71fc07..0dd6329 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -68,17 +68,17 @@ }, { "name": "league/flysystem", - "version": "1.1.4", - "version_normalized": "1.1.4.0", + "version": "1.1.5", + "version_normalized": "1.1.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/18634df356bfd4119fe3d6156bdb990c414c14ea", + "reference": "18634df356bfd4119fe3d6156bdb990c414c14ea", "shasum": "", "mirrors": [ { @@ -114,7 +114,7 @@ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, - "time": "2021-06-23T21:56:05+00:00", + "time": "2021-08-17T13:49:42+00:00", "type": "library", "extra": { "branch-alias": { @@ -159,7 +159,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.4" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.5" }, "funding": [ { @@ -227,17 +227,17 @@ }, { "name": "league/mime-type-detection", - "version": "1.7.0", - "version_normalized": "1.7.0.0", + "version": "1.8.0", + "version_normalized": "1.8.0.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b38b25d7b372e9fddb00335400467b223349fd7e", + "reference": "b38b25d7b372e9fddb00335400467b223349fd7e", "shasum": "", "mirrors": [ { @@ -255,7 +255,7 @@ "phpstan/phpstan": "^0.12.68", "phpunit/phpunit": "^8.5.8 || ^9.3" }, - "time": "2021-01-18T20:58:21+00:00", + "time": "2021-09-25T08:23:19+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -276,7 +276,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.8.0" }, "funding": [ { @@ -345,17 +345,17 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.5.0", - "version_normalized": "6.5.0.0", + "version": "v6.5.1", + "version_normalized": "6.5.1.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c" + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a5b5c43e50b7fba655f793ad27303cd74c57363c", - "reference": "a5b5c43e50b7fba655f793ad27303cd74c57363c", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355", + "reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355", "shasum": "", "mirrors": [ { @@ -373,10 +373,12 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", "phpcompatibility/php-compatibility": "^9.3.5", "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" }, "suggest": { "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", @@ -386,7 +388,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": "2021-06-16T14:33:43+00:00", + "time": "2021-08-18T09:14:16+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -418,7 +420,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.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.1" }, "funding": [ { @@ -924,17 +926,17 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.27", - "version_normalized": "4.4.27.0", + "version": "v4.4.33", + "version_normalized": "4.4.33.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba" + "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/391d6d0e7a06ab54eb7c38fab29b8d174471b3ba", - "reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/50286e2b7189bfb4f419c0731e86632cddf7c5ee", + "reference": "50286e2b7189bfb4f419c0731e86632cddf7c5ee", "shasum": "", "mirrors": [ { @@ -964,7 +966,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": "2021-07-23T15:41:52+00:00", + "time": "2021-10-25T20:24:58+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -1002,7 +1004,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.27" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.33" }, "funding": [ { @@ -1020,6 +1022,71 @@ ], "install-path": "../symfony/var-dumper" }, + { + "name": "taoser/think-addons", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/taoser/think-addons.git", + "reference": "bd8b0bfa4543fe8d2da65355c134250f78c0d457" + }, + "dist": { + "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 + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/framework": "^6.0", + "topthink/think-helper": "^3.0.0", + "topthink/think-view": "^1.0" + }, + "time": "2021-09-18T08:41:10+00:00", + "type": "library", + "extra": { + "think": { + "services": [ + "taoser\\addons\\Service" + ], + "config": { + "addons": "src/config.php" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "taoser\\": "src/" + }, + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "mit" + ], + "authors": [ + { + "name": "taoler", + "email": "changlin_zhao@qq.com" + } + ], + "description": "The ThinkPHP6 Addons Package", + "support": { + "issues": "https://github.com/taoser/think-addons/issues", + "source": "https://github.com/taoser/think-addons/tree/v1.0.1" + }, + "install-path": "../taoser/think-addons" + }, { "name": "taoser/think-auth", "version": "v1.0.0", @@ -1584,67 +1651,6 @@ "source": "https://github.com/wamkj/thinkphp6.0-databackup/tree/v1.0" }, "install-path": "../wamkj/thinkphp6.0-databackup" - }, - { - "name": "zzstudio/think-addons", - "version": "2.0.5", - "version_normalized": "2.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/zz-studio/think-addons.git", - "reference": "7eb740cb219a111d593a05ad88248a74f640fe5c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zz-studio/think-addons/zipball/7eb740cb219a111d593a05ad88248a74f640fe5c", - "reference": "7eb740cb219a111d593a05ad88248a74f640fe5c", - "shasum": "", - "mirrors": [ - { - "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", - "preferred": true - } - ] - }, - "require": { - "php": ">=7.1.0", - "topthink/framework": "^6.0", - "topthink/think-helper": "^3.0.0", - "topthink/think-view": "^1.0" - }, - "time": "2020-01-06T06:42:39+00:00", - "type": "library", - "extra": { - "think": { - "services": [ - "think\\addons\\Service" - ], - "config": { - "addons": "src/config.php" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "think\\": "src/" - }, - "files": [ - "src/helper.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "byron", - "email": "xiaobo.sun@qq.com" - } - ], - "description": "The ThinkPHP6 Addons Package", - "install-path": "../zzstudio/think-addons" } ], "dev": true diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 99ac1bb..945c599 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -22,12 +22,12 @@ ), 'league/flysystem' => array ( - 'pretty_version' => '1.1.4', - 'version' => '1.1.4.0', + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', 'aliases' => array ( ), - 'reference' => 'f3ad69181b8afed2c9edf7be5a2918144ff4ea32', + 'reference' => '18634df356bfd4119fe3d6156bdb990c414c14ea', ), 'league/flysystem-cached-adapter' => array ( @@ -40,12 +40,12 @@ ), 'league/mime-type-detection' => array ( - 'pretty_version' => '1.7.0', - 'version' => '1.7.0.0', + 'pretty_version' => '1.8.0', + 'version' => '1.8.0.0', 'aliases' => array ( ), - 'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3', + 'reference' => 'b38b25d7b372e9fddb00335400467b223349fd7e', ), 'lotofbadcode/phpspirit_databackup' => array ( @@ -58,12 +58,12 @@ ), 'phpmailer/phpmailer' => array ( - 'pretty_version' => 'v6.5.0', - 'version' => '6.5.0.0', + 'pretty_version' => 'v6.5.1', + 'version' => '6.5.1.0', 'aliases' => array ( ), - 'reference' => 'a5b5c43e50b7fba655f793ad27303cd74c57363c', + 'reference' => 'dd803df5ad7492e1b40637f7ebd258fee5ca7355', ), 'psr/cache' => array ( @@ -130,12 +130,12 @@ ), 'symfony/var-dumper' => array ( - 'pretty_version' => 'v4.4.27', - 'version' => '4.4.27.0', + 'pretty_version' => 'v4.4.33', + 'version' => '4.4.33.0', 'aliases' => array ( ), - 'reference' => '391d6d0e7a06ab54eb7c38fab29b8d174471b3ba', + 'reference' => '50286e2b7189bfb4f419c0731e86632cddf7c5ee', ), 'taoser/taoler' => array ( @@ -146,6 +146,15 @@ ), 'reference' => NULL, ), + 'taoser/think-addons' => + array ( + 'pretty_version' => 'v1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bd8b0bfa4543fe8d2da65355c134250f78c0d457', + ), 'taoser/think-auth' => array ( 'pretty_version' => 'v1.0.0', @@ -236,14 +245,5 @@ ), 'reference' => '28a0e406d827132942723a3c9f69bb20c98e652f', ), - 'zzstudio/think-addons' => - array ( - 'pretty_version' => '2.0.5', - 'version' => '2.0.5.0', - 'aliases' => - array ( - ), - 'reference' => '7eb740cb219a111d593a05ad88248a74f640fe5c', - ), ), ); diff --git a/vendor/league/flysystem/src/Adapter/Ftp.php b/vendor/league/flysystem/src/Adapter/Ftp.php index b009210..8694376 100644 --- a/vendor/league/flysystem/src/Adapter/Ftp.php +++ b/vendor/league/flysystem/src/Adapter/Ftp.php @@ -160,7 +160,7 @@ class Ftp extends AbstractFtpAdapter { if ($this->utf8) { $response = ftp_raw($this->connection, "OPTS UTF8 ON"); - if (substr($response[0], 0, 3) !== '200') { + if (!in_array(substr($response[0], 0, 3), ['200', '202'])) { throw new ConnectionRuntimeException( 'Could not set UTF-8 mode for connection: ' . $this->getHost() . '::' . $this->getPort() ); diff --git a/vendor/league/mime-type-detection/CHANGELOG.md b/vendor/league/mime-type-detection/CHANGELOG.md index d9eab90..ad24408 100644 --- a/vendor/league/mime-type-detection/CHANGELOG.md +++ b/vendor/league/mime-type-detection/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.8.0 - 2021-09-25 + +### Added + +- Added the decorator `OverridingExtensionToMimeTypeMap` which allows you to override values. + ## 1.7.0 - 2021-01-18 ### Added diff --git a/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php b/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php index 698e276..13a97f9 100644 --- a/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php +++ b/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php @@ -45,6 +45,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'ami' => 'application/vnd.amiga.ami', + 'amr' => 'audio/amr', 'apk' => 'application/vnd.android.package-archive', 'apng' => 'image/apng', 'appcache' => 'text/cache-manifest', @@ -265,6 +266,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'evy' => 'application/x-envoy', 'exe' => 'application/octet-stream', 'exi' => 'application/exi', + 'exp' => 'application/express', 'exr' => 'image/aces', 'ext' => 'application/vnd.novadigm.ext', 'ez' => 'application/andrew-inset', @@ -351,8 +353,8 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'gv' => 'text/vnd.graphviz', 'gxf' => 'application/gxf', 'gxt' => 'application/vnd.geonext', - 'gz' => 'application/x-gzip', - 'gzip' => 'application/x-gzip', + 'gz' => 'application/gzip', + 'gzip' => 'application/gzip', 'h' => 'text/x-c', 'h261' => 'video/h261', 'h263' => 'video/h263', @@ -457,7 +459,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'karbon' => 'application/vnd.kde.karbon', 'kdb' => 'application/octet-stream', 'kdbx' => 'application/x-keepass2', - 'key' => 'application/vnd.apple.keynote', + 'key' => 'application/x-iwork-keynote-sffkey', 'kfo' => 'application/vnd.kde.kformula', 'kia' => 'application/vnd.kidspiration', 'kml' => 'application/vnd.google-earth.kml+xml', @@ -507,6 +509,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'm3u8' => 'application/vnd.apple.mpegurl', 'm4a' => 'audio/x-m4a', 'm4p' => 'application/mp4', + 'm4s' => 'video/iso.segment', 'm4u' => 'application/vnd.mpegurl', 'm4v' => 'video/x-m4v', 'm13' => 'application/x-msmediaview', @@ -608,6 +611,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'musd' => 'application/mmt-usd+xml', 'musicxml' => 'application/vnd.recordare.musicxml+xml', 'mvb' => 'application/x-msmediaview', + 'mvt' => 'application/vnd.mapbox-vector-tile', 'mwf' => 'application/vnd.mfer', 'mxf' => 'application/mxf', 'mxl' => 'application/vnd.recordare.musicxml', @@ -635,7 +639,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'nsf' => 'application/vnd.lotus-notes', 'nt' => 'application/n-triples', 'ntf' => 'application/vnd.nitf', - 'numbers' => 'application/vnd.apple.numbers', + 'numbers' => 'application/x-iwork-numbers-sffnumbers', 'nzb' => 'application/x-nzb', 'oa2' => 'application/vnd.fujitsu.oasys2', 'oa3' => 'application/vnd.fujitsu.oasys3', @@ -696,7 +700,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'p10' => 'application/x-pkcs10', 'p12' => 'application/x-pkcs12', 'pac' => 'application/x-ns-proxy-autoconfig', - 'pages' => 'application/vnd.apple.pages', + 'pages' => 'application/x-iwork-pages-sffpages', 'pas' => 'text/x-pascal', 'paw' => 'application/vnd.pawaafile', 'pbd' => 'application/vnd.powerbuilder6', @@ -921,6 +925,9 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'model/stl', + 'stpx' => 'model/step+xml', + 'stpxz' => 'model/step-xml+zip', + 'stpz' => 'model/step+zip', 'str' => 'application/vnd.pg.format', 'stw' => 'application/vnd.sun.xml.writer.template', 'styl' => 'text/stylus', @@ -977,6 +984,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'tpt' => 'application/vnd.trid.tpt', 'tr' => 'text/troff', 'tra' => 'application/vnd.trueapp', + 'trig' => 'application/trig', 'trm' => 'application/x-msterminal', 'ts' => 'video/mp2t', 'tsd' => 'application/timestamped-data', @@ -1047,6 +1055,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'vcs' => 'text/x-vcalendar', 'vcx' => 'application/vnd.vcx', 'vdi' => 'application/x-virtualbox-vdi', + 'vds' => 'model/vnd.sap.vds', 'vhd' => 'application/x-virtualbox-vhd', 'vis' => 'application/vnd.visionary', 'viv' => 'video/vnd.vivo', @@ -1136,7 +1145,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'xdw' => 'application/vnd.fujixerox.docuworks', 'xel' => 'application/xcap-el+xml', 'xenc' => 'application/xenc+xml', - 'xer' => 'application/xcap-error+xml', + 'xer' => 'application/patch-ops-error+xml', 'xfdf' => 'application/vnd.adobe.xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', @@ -1195,7 +1204,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'z7' => 'application/x-zmachine', 'z8' => 'application/x-zmachine', 'zaz' => 'application/vnd.zzazz.deck+xml', - 'zip' => 'application/x-zip', + 'zip' => 'application/zip', 'zir' => 'application/vnd.zul', 'zirz' => 'application/vnd.zul', 'zmm' => 'application/vnd.handheld-entertainment+xml', diff --git a/vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php b/vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php new file mode 100644 index 0000000..0c71e4d --- /dev/null +++ b/vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php @@ -0,0 +1,30 @@ + $overrides + */ + public function __construct(ExtensionToMimeTypeMap $innerMap, array $overrides) + { + $this->innerMap = $innerMap; + $this->overrides = $overrides; + } + + public function lookupMimeType(string $extension): ?string + { + return $this->overrides[$extension] ?? $this->innerMap->lookupMimeType($extension); + } +} diff --git a/vendor/phpmailer/phpmailer/README.md b/vendor/phpmailer/phpmailer/README.md index fa27d2f..81b0897 100644 --- a/vendor/phpmailer/phpmailer/README.md +++ b/vendor/phpmailer/phpmailer/README.md @@ -2,7 +2,12 @@ # PHPMailer – A full-featured email creation and transfer class for PHP -[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) [![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) [![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) [![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) +[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions) +[![codecov.io](https://codecov.io/gh/PHPMailer/PHPMailer/branch/master/graph/badge.svg?token=iORZpwmYmM)](https://codecov.io/gh/PHPMailer/PHPMailer) +[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer) +[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer) +[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer) +[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/) ## Features - Probably the world's most popular code for sending email from PHP! @@ -17,7 +22,7 @@ - Protects against header injection attacks - Error messages in over 50 languages! - DKIM and S/MIME signing support -- Compatible with PHP 5.5 and later, including PHP 8.0 +- Compatible with PHP 5.5 and later, including PHP 8.1 - Namespaced to prevent name clashes - Much more! @@ -39,7 +44,7 @@ This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lg PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "^6.2" +"phpmailer/phpmailer": "^6.5" ``` or run @@ -89,7 +94,7 @@ use PHPMailer\PHPMailer\Exception; //Load Composer's autoloader require 'vendor/autoload.php'; -//Instantiation and passing `true` enables exceptions +//Create an instance; passing `true` enables exceptions $mail = new PHPMailer(true); try { @@ -100,8 +105,8 @@ try { $mail->SMTPAuth = true; //Enable SMTP authentication $mail->Username = 'user@example.com'; //SMTP username $mail->Password = 'secret'; //SMTP password - $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; //Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged - $mail->Port = 587; //TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above + $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption + $mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS` //Recipients $mail->setFrom('from@example.com', 'Mailer'); diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION index 4be2c72..3d5762e 100644 --- a/vendor/phpmailer/phpmailer/VERSION +++ b/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.5.0 \ No newline at end of file +6.5.1 \ No newline at end of file diff --git a/vendor/phpmailer/phpmailer/composer.json b/vendor/phpmailer/phpmailer/composer.json index 58393b2..28557f5 100644 --- a/vendor/phpmailer/phpmailer/composer.json +++ b/vendor/phpmailer/phpmailer/composer.json @@ -34,10 +34,12 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", "phpcompatibility/php-compatibility": "^9.3.5", "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.5.6", - "yoast/phpunit-polyfills": "^0.2.0" + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" }, "suggest": { "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", @@ -60,6 +62,10 @@ "license": "LGPL-2.1-only", "scripts": { "check": "./vendor/bin/phpcs", - "test": "./vendor/bin/phpunit" + "test": "./vendor/bin/phpunit --no-coverage", + "coverage": "./vendor/bin/phpunit", + "lint": [ + "@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php,phps --exclude vendor --exclude .git --exclude build" + ] } } diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php index eee7989..c76f526 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php @@ -5,24 +5,25 @@ * @package PHPMailer * @author Mitsuhiro Yoshida * @author Yoshi Sakai + * @author Arisophy */ $PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。'; $PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。'; -//$PHPMAILER_LANG['empty_message'] = 'Message body empty'; +$PHPMAILER_LANG['empty_message'] = 'メール本文が空です。'; $PHPMAILER_LANG['encoding'] = '不明なエンコーディング: '; $PHPMAILER_LANG['execute'] = '実行できませんでした: '; $PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: '; $PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: '; $PHPMAILER_LANG['from_failed'] = 'Fromアドレスを登録する際にエラーが発生しました: '; $PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。'; -//$PHPMAILER_LANG['invalid_address'] = 'Invalid address: '; +$PHPMAILER_LANG['invalid_address'] = '不正なメールアドレス: '; $PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。'; $PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。'; $PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: '; -//$PHPMAILER_LANG['signing'] = 'Signing Error: '; -//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; -//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; -//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: '; -//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: '; +$PHPMAILER_LANG['signing'] = '署名エラー: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP接続に失敗しました。'; +$PHPMAILER_LANG['smtp_error'] = 'SMTPサーバーエラー: '; +$PHPMAILER_LANG['variable_set'] = '変数が存在しません: '; +$PHPMAILER_LANG['extension_missing'] = '拡張機能が見つかりません: '; diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php index bf41ade..8229d5e 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php @@ -7,23 +7,28 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP-fout: authenticatie mislukt.'; +$PHPMAILER_LANG['buggy_php'] = 'PHP versie gededecteerd die onderhavig is aan een bug die kan resulteren in gecorrumpeerde berichten. Om dit te voorkomen, gebruik SMTP voor het verzenden van berichten, zet de mail.add_x_header optie in uw php.ini file uit, gebruik MacOS of Linux, of pas de gebruikte PHP versie aan naar versie 7.0.17+ or 7.1.3+.'; $PHPMAILER_LANG['connect_host'] = 'SMTP-fout: kon niet verbinden met SMTP-host.'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP-fout: data niet geaccepteerd.'; $PHPMAILER_LANG['empty_message'] = 'Berichttekst is leeg'; $PHPMAILER_LANG['encoding'] = 'Onbekende codering: '; $PHPMAILER_LANG['execute'] = 'Kon niet uitvoeren: '; +$PHPMAILER_LANG['extension_missing'] = 'Extensie afwezig: '; $PHPMAILER_LANG['file_access'] = 'Kreeg geen toegang tot bestand: '; $PHPMAILER_LANG['file_open'] = 'Bestandsfout: kon bestand niet openen: '; $PHPMAILER_LANG['from_failed'] = 'Het volgende afzendersadres is mislukt: '; $PHPMAILER_LANG['instantiate'] = 'Kon mailfunctie niet initialiseren.'; $PHPMAILER_LANG['invalid_address'] = 'Ongeldig adres: '; +$PHPMAILER_LANG['invalid_header'] = 'Ongeldige header naam of waarde'; $PHPMAILER_LANG['invalid_hostentry'] = 'Ongeldige hostentry: '; $PHPMAILER_LANG['invalid_host'] = 'Ongeldige host: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.'; $PHPMAILER_LANG['provide_address'] = 'Er moet minstens één ontvanger worden opgegeven.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP-fout: de volgende ontvangers zijn mislukt: '; $PHPMAILER_LANG['signing'] = 'Signeerfout: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP code: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'Aanvullende SMTP informatie: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Verbinding mislukt.'; +$PHPMAILER_LANG['smtp_detail'] = 'Detail: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP-serverfout: '; $PHPMAILER_LANG['variable_set'] = 'Kan de volgende variabele niet instellen of resetten: '; -$PHPMAILER_LANG['extension_missing'] = 'Extensie afwezig: '; diff --git a/vendor/phpmailer/phpmailer/phpunit.xml.dist b/vendor/phpmailer/phpmailer/phpunit.xml.dist deleted file mode 100644 index c68df96..0000000 --- a/vendor/phpmailer/phpmailer/phpunit.xml.dist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - ./test/ - - - - - - - - languages - pop3 - - - - - ./src - - - - - - - - diff --git a/vendor/phpmailer/phpmailer/src/Exception.php b/vendor/phpmailer/phpmailer/src/Exception.php index a50a899..52eaf95 100644 --- a/vendor/phpmailer/phpmailer/src/Exception.php +++ b/vendor/phpmailer/phpmailer/src/Exception.php @@ -35,6 +35,6 @@ class Exception extends \Exception */ public function errorMessage() { - return '' . htmlspecialchars($this->getMessage()) . "
\n"; + return '' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . "
\n"; } } diff --git a/vendor/phpmailer/phpmailer/src/PHPMailer.php b/vendor/phpmailer/phpmailer/src/PHPMailer.php index eb4b742..5b6dcfa 100644 --- a/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -103,14 +103,14 @@ class PHPMailer * * @var string */ - public $From = 'root@localhost'; + public $From = ''; /** * The From name of the message. * * @var string */ - public $FromName = 'Root User'; + public $FromName = ''; /** * The envelope sender of the message. @@ -689,7 +689,7 @@ class PHPMailer protected $boundary = []; /** - * The array of available languages. + * The array of available text strings for the current language. * * @var array */ @@ -750,7 +750,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.5.0'; + const VERSION = '6.5.1'; /** * Error severity: message only, continue processing. @@ -1188,25 +1188,33 @@ class PHPMailer * * @return array */ - public static function parseAddresses($addrstr, $useimap = true) + public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591) { $addresses = []; if ($useimap && function_exists('imap_rfc822_parse_adrlist')) { //Use this built-in parser if it's available $list = imap_rfc822_parse_adrlist($addrstr, ''); + // Clear any potential IMAP errors to get rid of notices being thrown at end of script. + imap_errors(); foreach ($list as $address) { if ( - ('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress( - $address->mailbox . '@' . $address->host - ) + '.SYNTAX-ERROR.' !== $address->host && + static::validateAddress($address->mailbox . '@' . $address->host) ) { //Decode the name part if it's present and encoded if ( property_exists($address, 'personal') && - extension_loaded('mbstring') && - preg_match('/^=\?.*\?=$/', $address->personal) + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled + defined('MB_CASE_UPPER') && + preg_match('/^=\?.*\?=$/s', $address->personal) ) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $address->personal = str_replace('_', '=20', $address->personal); + //Decode the name $address->personal = mb_decode_mimeheader($address->personal); + mb_internal_encoding($origCharset); } $addresses[] = [ @@ -1234,9 +1242,16 @@ class PHPMailer $email = trim(str_replace('>', '', $email)); $name = trim($name); if (static::validateAddress($email)) { + //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled //If this name is encoded, decode it - if (preg_match('/^=\?.*\?=$/', $name)) { + if (defined('MB_CASE_UPPER') && preg_match('/^=\?.*\?=$/s', $name)) { + $origCharset = mb_internal_encoding(); + mb_internal_encoding($charset); + //Undo any RFC2047-encoded spaces-as-underscores + $name = str_replace('_', '=20', $name); + //Decode the name $name = mb_decode_mimeheader($name); + mb_internal_encoding($origCharset); } $addresses[] = [ //Remove any surrounding quotes and spaces from the name @@ -1508,12 +1523,7 @@ class PHPMailer && ini_get('mail.add_x_header') === '1' && stripos(PHP_OS, 'WIN') === 0 ) { - trigger_error( - 'Your version of PHP is affected by a bug that may result in corrupted messages.' . - ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . - ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', - E_USER_WARNING - ); + trigger_error($this->lang('buggy_php'), E_USER_WARNING); } try { @@ -1724,7 +1734,7 @@ class PHPMailer fwrite($mail, $header); fwrite($mail, $body); $result = pclose($mail); - $addrinfo = static::parseAddresses($toAddr); + $addrinfo = static::parseAddresses($toAddr, true, $this->charSet); $this->doCallback( ($result === 0), [[$addrinfo['address'], $addrinfo['name']]], @@ -1884,7 +1894,7 @@ class PHPMailer if ($this->SingleTo && count($toArr) > 1) { foreach ($toArr as $toAddr) { $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params); - $addrinfo = static::parseAddresses($toAddr); + $addrinfo = static::parseAddresses($toAddr, true, $this->charSet); $this->doCallback( $result, [[$addrinfo['address'], $addrinfo['name']]], @@ -2181,14 +2191,15 @@ class PHPMailer /** * Set the language for error messages. - * Returns false if it cannot load the language file. * The default language is English. * * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr") + * Optionally, the language code can be enhanced with a 4-character + * script annotation and/or a 2-character country annotation. * @param string $lang_path Path to the language file directory, with trailing separator (slash).D * Do not set this from user input! * - * @return bool + * @return bool Returns true if the requested language was loaded, false otherwise. */ public function setLanguage($langcode = 'en', $lang_path = '') { @@ -2211,44 +2222,77 @@ class PHPMailer //Define full set of translatable strings in English $PHPMAILER_LANG = [ 'authenticate' => 'SMTP Error: Could not authenticate.', + 'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' . + ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' . + ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.', 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', 'data_not_accepted' => 'SMTP Error: data not accepted.', 'empty_message' => 'Message body empty', 'encoding' => 'Unknown encoding: ', 'execute' => 'Could not execute: ', + 'extension_missing' => 'Extension missing: ', 'file_access' => 'Could not access file: ', 'file_open' => 'File Error: Could not open file: ', 'from_failed' => 'The following From address failed: ', 'instantiate' => 'Could not instantiate mail function.', 'invalid_address' => 'Invalid address: ', + 'invalid_header' => 'Invalid header name or value', 'invalid_hostentry' => 'Invalid hostentry: ', 'invalid_host' => 'Invalid host: ', 'mailer_not_supported' => ' mailer is not supported.', 'provide_address' => 'You must provide at least one recipient email address.', 'recipients_failed' => 'SMTP Error: The following recipients failed: ', 'signing' => 'Signing Error: ', + 'smtp_code' => 'SMTP code: ', + 'smtp_code_ex' => 'Additional SMTP info: ', 'smtp_connect_failed' => 'SMTP connect() failed.', + 'smtp_detail' => 'Detail: ', 'smtp_error' => 'SMTP server error: ', 'variable_set' => 'Cannot set or reset variable: ', - 'extension_missing' => 'Extension missing: ', ]; if (empty($lang_path)) { //Calculate an absolute path so it can work if CWD is not here $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR; } + //Validate $langcode - if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) { + $foundlang = true; + $langcode = strtolower($langcode); + if ( + !preg_match('/^(?P[a-z]{2})(?P +{/block} \ No newline at end of file diff --git a/view/taoler/index/article/detail/posts.html b/view/taoler/index/article/detail/posts.html new file mode 100644 index 0000000..87eec9b --- /dev/null +++ b/view/taoler/index/article/detail/posts.html @@ -0,0 +1,318 @@ +{extend name="public/base" /} + +{block name="title"}{$article.title}-{$sysInfo.webname}{/block} +{block name="keywords"}{$article.title},{$article.tags}{/block} +{block name="description"}{$article.title},{:getArtContent($article.content)}{/block} +{block name="link"}{/block} +{block name="column"}
{include file="/public/column" /}
{/block} +{block name="content"} +
+
+
+
+ {//标题} +

{$article.title} +
+

+ {//图标} +
+ {//作者} + +
{$article.content|raw}
+ {//管理} + {if (($article.upzip !== '') || session('?user_name'))} +
+ {notempty name="$article.upzip"} + + {/notempty} +
+ {if ($user.auth ?? '')} + + {if($article.is_top == 0)} + {else /}{:lang('cancel topping')}{/if} + {if($article.is_hot == 0)} + + {else /} + {:lang('cancel hoting')} + {/if} + {if($article.is_reply == 1)} + + {else /} + {:lang('enable reply')} + {/if} + {:lang('title color')} + {/if} + {if(session('user_name')==$article.user.name || ($user.auth ?? ''))} + {:lang('edit')} + {/if} +
+
+ {/if} +
+ {//评论} +
+ 评论 {$comments->count()} + +
{$comments|raw}
+ {if condition="$article.is_reply == 1"} +
+
+ +
+ +
+
+
+ + + +
+
+ {else /} +
本帖已设置禁止回复
+ {/if} +
+
+
+
+
{:lang('sponsor')}- + {:lang('i want to join')} +
+
+ {volist name="ad_comm" id="vo"} + {$vo.slid_name} + {/volist} +
+
+
+
{:lang('hot post list')}
+ {volist name="artHot" id="vo"} +
+ {$vo.title} + {$vo.comments_count} +
+ {/volist} +
+
+ {volist name="ad_art" id="vo"} + + {/volist} +
+
+
+ +
+
+
+
+{include file="public/menu" /} +{/block} +{block name="script"} + +{/block} \ No newline at end of file diff --git a/view/taoler/index/article/edit.html b/view/taoler/index/article/edit.html index 9bb2f86..6deb53e 100644 --- a/view/taoler/index/article/edit.html +++ b/view/taoler/index/article/edit.html @@ -73,7 +73,7 @@
- +
diff --git a/view/taoler/index/article/posts/detail.html b/view/taoler/index/article/posts/detail.html index e268920..13a9b79 100644 --- a/view/taoler/index/article/posts/detail.html +++ b/view/taoler/index/article/posts/detail.html @@ -11,9 +11,8 @@
{//标题} -

{$article.title} -
-

+

{$article.title}

+
{//图标}
{:cookie('think_lang') == 'en-us' ? $article.cate.ename : $article.cate.catename} @@ -43,7 +42,7 @@
-
{$article.content}
+
{$article.content}
{//管理} {if (($article.upzip !== '') || session('?user_name'))}
@@ -280,7 +279,11 @@ layui.use(['fly', 'face','colorpicker','plyr'], function(){ plyr.setup(); }); + +{:hook('markdownhook')} + + + {/block} \ No newline at end of file diff --git a/view/taoler/index/article/posts/detail.html- b/view/taoler/index/article/posts/detail.html- new file mode 100644 index 0000000..459e790 --- /dev/null +++ b/view/taoler/index/article/posts/detail.html- @@ -0,0 +1,315 @@ +{extend name="public/base" /} + +{block name="title"}{$article.title}-{$sysInfo.webname}{/block} +{block name="keywords"}{$article.title},{$article.tags}{/block} +{block name="description"}{$article.title},{:getArtContent($article.content)}{/block} +{block name="link"}{/block} +{block name="column"}
{include file="/public/column" /}
{/block} +{block name="content"} +
+
+
+
+ {//标题} +

{$article.title} +
+

+ {//图标} +
+ {:cookie('think_lang') == 'en-us' ? $article.cate.ename : $article.cate.catename} + {if ($article.is_top == 1)}{:lang('top')}{/if} + {if ($article.is_hot == 1)}{:lang('hot')}{/if} + + + {$comments->count()}{$pv} + +
+ {//作者} + +
{$article.content|raw}
+ {//管理} + {if (($article.upzip !== '') || (session('user_id')==$article.user_id) OR ($user.auth ?? ''))} +
+ {notempty name="$article.upzip"} + + {/notempty} +
+ {if ($user.auth ?? '')} + + {if($article.is_top == 0)} + {else /}{:lang('cancel topping')}{/if} + {if($article.is_hot == 0)} + + {else /} + {:lang('cancel hoting')} + {/if} + {if($article.is_reply == 1)} + + {else /} + {:lang('enable reply')} + {/if} + {:lang('title color')} + {/if} + {if(session('user_name')==$article.user.name || ($user.auth ?? ''))} + {:lang('edit')} + {/if} +
+
+ {/if} +
+ {//评论} +
+ 评论 {$comments->count()} + +
{$comments|raw}
+ {if condition="$article.is_reply == 1"} +
+
+ +
+ +
+
+
+ + + +
+
+ {else /} +
本帖已设置禁止回复
+ {/if} +
+
+
+
+
{:lang('sponsor')}- + {:lang('i want to join')} +
+
+ {volist name="ad_comm" id="vo"} + {$vo.slid_name} + {/volist} +
+
+
+
{:lang('hot post list')}
+ {volist name="artHot" id="vo"} +
+ {$vo.title} + {$vo.comments_count} +
+ {/volist} +
+
+ {volist name="ad_art" id="vo"} + + {/volist} +
+
+
+ +
+
+
+
+{include file="public/menu" /} +{/block} +{block name="script"} + +{/block} \ No newline at end of file diff --git a/view/taoler/index/error/404.html b/view/taoler/index/error/404.html new file mode 100644 index 0000000..458c228 --- /dev/null +++ b/view/taoler/index/error/404.html @@ -0,0 +1,46 @@ +{extend name="public/base" /} + +{block name="title"}404 - {$sysInfo.webname}{/block} +{block name="keywords"}{$sysInfo.keywords}{/block} +{block name="description"}{$sysInfo.descript}{/block} +{block name="column"}{include file="public/column" /}{/block} +{block name="content"} +
+
+
+

+

页面或者数据被 纸飞机 运到火星了,啥都看不到了…

+
+
+
+{/block} + +{block name="script"} + +{/block} + + + + + + + + + + + diff --git a/view/taoler/index/index/index.html b/view/taoler/index/index/index.html index 86deb69..932222f 100644 --- a/view/taoler/index/index/index.html +++ b/view/taoler/index/index/index.html @@ -41,11 +41,8 @@
- - - + {:hook('signhook', ['id'=>1])} +

{:lang('links list')}

diff --git a/view/taoler/index/login/login.html b/view/taoler/index/login/login.html index 435f800..63fa02c 100644 --- a/view/taoler/index/login/login.html +++ b/view/taoler/index/login/login.html @@ -44,11 +44,7 @@ {:lang('forget password')}?
- + {:hook('socialhook')}
diff --git a/view/taoler/index/public/.gitignore b/view/taoler/index/public/.gitignore new file mode 100644 index 0000000..28f97bf --- /dev/null +++ b/view/taoler/index/public/.gitignore @@ -0,0 +1 @@ +user-nav.html \ No newline at end of file diff --git a/view/taoler/index/public/footer.html b/view/taoler/index/public/footer.html index 2b63d81..b6fbb86 100644 --- a/view/taoler/index/public/footer.html +++ b/view/taoler/index/public/footer.html @@ -1,5 +1,5 @@ -