diff --git a/app/admin/controller/Forum.php b/app/admin/controller/Forum.php index 79f4823..da6a428 100644 --- a/app/admin/controller/Forum.php +++ b/app/admin/controller/Forum.php @@ -148,6 +148,22 @@ class Forum extends AdminController View::assign(['template'=>$template]); return View::fetch(); } + + // 应用下article/view模板 + public function getAppNameView() + { + $appName = input('appname') ?: 'index'; + $sys = $this->getSystem(); + if(is_dir(root_path() . 'app' . DS . $appName . DS . 'view' . DS)){ + $viewPath = root_path() . 'app' . DS . $appName . DS . 'view' . DS . 'article' . DS; + } elseif(is_dir(root_path() . 'view' . DS . $sys['template'] . DS)) { + $viewPath = root_path() . 'view' . DS . $sys['template'] . DS . 'index' . DS . 'article' . DS; + } else { + $viewPath = ''; + } + $template = Files::getDirName($viewPath); + return json(['data' => $template]); + } //添加和编辑帖子分类 public function tagsform() @@ -169,21 +185,18 @@ class Forum extends AdminController $sys = $this->getSystem(); $template = Files::getDirName('../view/'.$sys['template'].'/index/article/'); // 如果是新增,pid=0,detpl默认第一个子模块,如果是编辑,查询出cate - $cate = $addOrEdit ? Db::name('cate')->field('detpl,pid')->find((int) input('id')) : ['pid'=>0,'detpl'=>$template[0]]; - View::assign(['template'=>$template,'cate'=>$cate]); + $cate = $addOrEdit ? Db::name('cate')->field('detpl,pid,appname')->where(['delete_time' =>0])->find((int) input('id')) : ['pid'=>0,'detpl'=>$template[0],'appname'=>'index']; + // app下前台带模板的应用 + $appArr = []; + if(is_dir(root_path() . 'app' . DS . 'home')) { + $appArr = ['index','home']; + } else { + $appArr = ['index']; + } + View::assign(['template'=>$template,'cate'=>$cate, 'appname' => $appArr]); return View::fetch(); } - //详情页模板设置 - public function tplSet() - { - if(Request::isPost()){ - $data = Request::only(['id','detpl']); - Db::name('cate')->cache('catename')->update($data); - } - - } - //删除帖子分类 public function tagsdelete() { diff --git a/app/admin/view/forum/tags.html b/app/admin/view/forum/tags.html index 2ea4adc..1d61c29 100644 --- a/app/admin/view/forum/tags.html +++ b/app/admin/view/forum/tags.html @@ -95,9 +95,10 @@ overflow: visible; [ {type: 'numbers'}, {type: 'checkbox'} - ,{field: 'catename', title: '分类名', minWidth: 200} + ,{field: 'catename', title: '分类名', width: 150} + ,{field: 'appname', title: '所属应用', width: 90} ,{field: 'ename', title: 'EN别名', width: 100} - ,{field: 'detpl',title: '模板', align: 'center',width: 100,templet: '#inputSel'} + ,{field: 'detpl',title: '模板', align: 'center',width: 100} ,{title: '图标', align: 'center',width: 50,templet: '

'} ,{field: 'is_hot', title: '热门', align: 'center',width: 50, templet: '#buttonHot'} ,{field: 'desc', title: '描述', minWidth: 200} @@ -189,15 +190,13 @@ overflow: visible; } }); - - var active = { add: function(){ layer.open({ type: 2 ,title: '添加分类' ,content: 'tagsform.html' - ,area: ['400px', '550px'] + ,area: ['450px', '550px'] ,btn: ['确定', '取消'] ,yes: function(index, layero){ var othis = layero.find('iframe').contents().find("#layuiadmin-app-form-tags") @@ -230,17 +229,6 @@ overflow: visible; }); } } - - //详情页模板选择控制 - form.on('select(detpl)', function(data){ - var detpl = data.value; - $.post("{:url('Forum/tplSet')}",{"id":data.elem.id,"detpl":detpl}); - //执行重载 - table.reload('LAY-app-content-tags', { - where: detpl - }); - }); - //分类热点控制 form.on('checkbox(menu-show)', function(data){ diff --git a/app/admin/view/forum/tagsform.html b/app/admin/view/forum/tagsform.html index f8273cd..c4fa501 100644 --- a/app/admin/view/forum/tagsform.html +++ b/app/admin/view/forum/tagsform.html @@ -9,34 +9,42 @@ + +
+ +
-
+
-
+
-
- + {volist name="template" id="vo"} + + {/volist}
-
+
-
+
-
- +
+
@@ -69,6 +77,22 @@ } }); + form.on('select(appname)', function(data){ + var appName = data.value; + $("#tpl").children('option').remove(); + $.post("{:url('Forum/getAppNameView')}", {appname:appName},function (res){ + var str = ''; + for(var i=0; i < res.data.length; i++ ) { + str += ''; + // $("select[name='detpl']").append(''); + } + $("#tpl").append(str); + // 动态select重新渲染 + form.render('select'); + }) + + }); + //分类菜单结构 admin.req({ type: "post", diff --git a/app/common/controller/BaseController.php b/app/common/controller/BaseController.php index 5f015f9..af0435f 100644 --- a/app/common/controller/BaseController.php +++ b/app/common/controller/BaseController.php @@ -66,8 +66,9 @@ class BaseController extends BaseCtrl // 显示导航nav protected function showNav() { + $appname = app('http')->getName(); //1.查询分类表获取所有分类 - $cateList = Db::name('cate')->where(['status'=>1,'delete_time'=>0])->cache('catename',3600)->select()->toArray(); + $cateList = Db::name('cate')->where(['status'=>1,'delete_time'=>0, 'appname' => $appname])->cache('catename' . $appname,3600)->select()->toArray(); return getTree($cateList); } diff --git a/app/common/model/Article.php b/app/common/model/Article.php index 269d07d..c1b8875 100644 --- a/app/common/model/Article.php +++ b/app/common/model/Article.php @@ -110,8 +110,10 @@ class Article extends Model public function getArtTop(int $num) { $artTop = Cache::get('arttop'); + // 区分应用分类 + $appCateIdArr = Cate::where(['appname' => app('http')->getName()])->column('id'); if (!$artTop) { - $artTop = $this::field('id,title,title_color,cate_id,user_id,create_time,is_top,pv,jie,upzip,has_img,has_video,has_audio')->where(['is_top' => 1, 'status' => 1]) + $artTop = $this::field('id,title,title_color,cate_id,user_id,create_time,is_top,pv,jie,upzip,has_img,has_video,has_audio')->where([['is_top', '=', 1], ['status', '=', 1], ['cate_id', 'in', $appCateIdArr]]) ->with([ 'cate' => function ($query) { $query->where('delete_time', 0)->field('id,catename,ename'); @@ -142,6 +144,8 @@ class Article extends Model public function getArtList(int $num) { $artList = Cache::get('artlist'); + // 区分应用分类 + $appCateIdArr = Cate::where(['appname' => app('http')->getName()])->column('id'); if(!$artList){ $artList = $this::field('id,title,title_color,cate_id,user_id,create_time,is_hot,pv,jie,upzip,has_img,has_video,has_audio') ->with([ @@ -152,7 +156,7 @@ class Article extends Model $query->field('id,name,nickname,user_img,area_id,vip'); } ]) ->withCount(['comments']) - ->where(['status'=>1,'is_top'=>0]) + ->where([['status', '=', 1], ['is_top', '=', 0],['cate_id', 'in', $appCateIdArr]]) ->order('create_time','desc') ->limit($num) ->append(['url']) @@ -237,14 +241,17 @@ class Article extends Model public function getCateList(string $ename, string $type, int $page = 1) { $where = []; + // 区分应用分类 + $appCateIdArr = Cate::where(['appname' => app('http')->getName()])->column('id'); $cateId = Cate::where('ename',$ename)->value('id'); if($cateId){ - $where = ['cate_id' => $cateId]; + $where[] = ['cate_id' ,'=', $cateId]; } else { if($ename != 'all'){ // 抛出 HTTP 异常 throw new \think\exception\HttpException(404, '异常消息'); } + $where[] = ['cate_id' ,'in',$appCateIdArr]; } $artList = Cache::get('arts'.$ename.$type.$page); @@ -252,25 +259,23 @@ class Article extends Model switch ($type) { //查询文章,15个分1页 case 'jie': - $where['jie'] = 1; + $where[] = ['jie','=', 1]; break; case 'hot': - $where['is_hot'] = 1; + $where[] = ['is_hot','=', 1]; break; case 'top': - $where['is_top'] = 1; + $where[] = ['is_top' ,'=', 1]; break; case 'wait': - $where['jie'] = 0; - break; - default: - $where = $where; + $where[] = ['jie','=', 0]; break; + } $artList = $this::field('id,title,content,title_color,cate_id,user_id,create_time,is_top,is_hot,pv,jie,upzip,has_img,has_video,has_audio') ->with([ - 'cate' => function($query){ - $query->where('delete_time',0)->field('id,catename,ename'); + 'cate' => function($query) { + $query->where('delete_time',0)->field('id,catename,ename,appname'); }, 'user' => function($query){ $query->field('id,name,nickname,user_img,area_id,vip'); diff --git a/app/common/model/Cate.php b/app/common/model/Cate.php index 8b44dd2..807f11f 100644 --- a/app/common/model/Cate.php +++ b/app/common/model/Cate.php @@ -53,7 +53,7 @@ class Cate extends Model // 分类表 public function getList() { - $data = $this->field('sort,id,pid,catename,ename,detpl,icon,is_hot,desc')->where(['status'=>1])->select()->toArray(); + $data = $this->field('sort,id,pid,catename,ename,detpl,icon,appname,is_hot,desc')->where(['status'=>1])->select()->toArray(); // 排序 $cmf_arr = array_column($data, 'sort'); array_multisort($cmf_arr, SORT_ASC, $data); diff --git a/app/facade/Article.php b/app/facade/Article.php index 33b2fdd..0dbcbf3 100644 --- a/app/facade/Article.php +++ b/app/facade/Article.php @@ -17,6 +17,4 @@ class Article extends Facade return 'app\common\model\Article'; } - - } \ No newline at end of file diff --git a/app/facade/Cate.php b/app/facade/Cate.php new file mode 100644 index 0000000..3947a4b --- /dev/null +++ b/app/facade/Cate.php @@ -0,0 +1,21 @@ +=7.4", "psr/cache": "^1.0 || ^2.0", "psr/simple-cache": "^1.0" @@ -208,7 +226,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-cache/tag-interop/zipball/b062b1d735357da50edf8387f7a8696f3027d328", "reference": "b062b1d735357da50edf8387f7a8696f3027d328", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": "^5.5 || ^7.0 || ^8.0", @@ -267,7 +291,13 @@ "type": "zip", "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require-dev": { "phpunit/phpunit": "^7 | ^8 | ^9", @@ -314,7 +344,13 @@ "type": "zip", "url": "https://api.github.com/repos/endroid/qr-code/zipball/a75c913b0e4d6ad275e49a2c1de1cacffc6c2184", "reference": "a75c913b0e4d6ad275e49a2c1de1cacffc6c2184", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "bacon/bacon-qr-code": "^2.0.5", @@ -386,7 +422,13 @@ "type": "zip", "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6", "reference": "83b609028194aa042ea33b5af2d41a7427de80e6", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -443,7 +485,13 @@ "type": "zip", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/414c24961042f6616fb43e23fa69a785f9fc053e", "reference": "414c24961042f6616fb43e23fa69a785f9fc053e", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-json": "*", @@ -528,7 +576,13 @@ "type": "zip", "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", "reference": "b94b2807d85443f9719887892882d0329d1e2598", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.5" @@ -612,7 +666,13 @@ "type": "zip", "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.4.0", @@ -722,7 +782,13 @@ "type": "zip", "url": "https://api.github.com/repos/jae-jae/GHttp/zipball/82585ddd5e2c6651e37ab1d8166efcdbb6b293d4", "reference": "82585ddd5e2c6651e37ab1d8166efcdbb6b293d4", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "cache/filesystem-adapter": "^1", @@ -763,7 +829,13 @@ "type": "zip", "url": "https://api.github.com/repos/jae-jae/phpQuery-single/zipball/39a650ade692a6b480c22220dce0c198d6a946fb", "reference": "39a650ade692a6b480c22220dce0c198d6a946fb", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -810,7 +882,13 @@ "type": "zip", "url": "https://api.github.com/repos/jae-jae/QueryList/zipball/39dc0ca9c668bec7a793e20472ccd7d26ef89ea4", "reference": "39dc0ca9c668bec7a793e20472ccd7d26ef89ea4", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-dom": "*", @@ -870,7 +948,13 @@ "type": "zip", "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": "^7.3|^8.0" @@ -920,44 +1004,60 @@ }, { "name": "league/flysystem", - "version": "2.5.0", + "version": "1.1.10", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb" + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", - "shasum": "" + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "ext-json": "*", - "league/mime-type-detection": "^1.0.0", - "php": "^7.2 || ^8.0" + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" }, "conflict": { - "guzzlehttp/ringphp": "<1.1.1" + "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", - "aws/aws-sdk-php": "^3.132.4", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "friendsofphp/php-cs-fixer": "^3.2", - "google/cloud-storage": "^1.23", - "phpseclib/phpseclib": "^2.0", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^8.5 || ^9.4", - "sabre/dav": "^4.1" + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src" + "League\\Flysystem\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -967,42 +1067,97 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" + "email": "info@frenky.net" } ], - "description": "File storage abstraction for PHP", + "description": "Filesystem abstraction: Many filesystems, one API.", "keywords": [ + "Cloud Files", "WebDAV", + "abstraction", "aws", "cloud", - "file", + "copy.com", + "dropbox", + "file systems", "files", "filesystem", "filesystems", "ftp", + "rackspace", + "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/2.5.0" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" }, "funding": [ { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" + "url": "https://offset.earth/frankdejonge", + "type": "other" } ], - "time": "2022-09-17T21:02:32+00:00" + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/flysystem-cached-adapter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-cached-adapter.git", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "league/flysystem": "~1.0", + "psr/cache": "^1.0.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0", + "tedivm/stash": "~0.12" + }, + "suggest": { + "ext-phpredis": "Pure C implemented extension for PHP" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Cached\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "frankdejonge", + "email": "info@frenky.net" + } + ], + "description": "An adapter decorator to enable meta-data caching.", + "support": { + "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues", + "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master" + }, + "time": "2020-07-25T15:56:04+00:00" }, { "name": "league/mime-type-detection", @@ -1016,7 +1171,13 @@ "type": "zip", "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-fileinfo": "*", @@ -1072,7 +1233,13 @@ "type": "zip", "url": "https://api.github.com/repos/liliuwei/thinkphp-social/zipball/2067fc2c2cc3b3d109602bc19c3e5a99c5f4c970", "reference": "2067fc2c2cc3b3d109602bc19c3e5a99c5f4c970", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.6.0", @@ -1147,7 +1314,13 @@ "type": "zip", "url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/1835cf8230531840ada1ed2b25eba23de5ad32c5", "reference": "1835cf8230531840ada1ed2b25eba23de5ad32c5", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.0" @@ -1191,7 +1364,13 @@ "type": "zip", "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/cd6d9f267d1a3474bdddf1be1da079f01b942786", "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.3", @@ -1246,7 +1425,13 @@ "type": "zip", "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/ae0f1b3b03d8b29dff81747063cbfd6276246cc4", "reference": "ae0f1b3b03d8b29dff81747063cbfd6276246cc4", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "laravel/serializable-closure": "^1.0", @@ -1322,7 +1507,13 @@ "type": "zip", "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c", "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.2.0" @@ -1354,17 +1545,23 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.6.5", + "version": "v6.6.4", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627" + "reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8b6386d7417526d1ea4da9edb70b8352f7543627", - "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627", - "shasum": "" + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b", + "reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-ctype": "*", @@ -1387,8 +1584,8 @@ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", - "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + "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)" }, "type": "library", "autoload": { @@ -1420,7 +1617,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.6.5" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4" }, "funding": [ { @@ -1428,7 +1625,7 @@ "type": "github" } ], - "time": "2022-10-07T12:23:10+00:00" + "time": "2022-08-22T09:22:00+00:00" }, { "name": "psr/cache", @@ -1442,7 +1639,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -1491,7 +1694,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.4.0" @@ -1539,7 +1748,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.2.0" @@ -1589,7 +1804,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": "^7.0 || ^8.0", @@ -1641,7 +1862,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -1694,7 +1921,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -1744,7 +1977,13 @@ "type": "zip", "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.3.0" @@ -1795,7 +2034,13 @@ "type": "zip", "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=5.6" @@ -1829,17 +2074,23 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" @@ -1853,7 +2104,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1892,7 +2143,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -1908,21 +2159,27 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" @@ -1930,7 +2187,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1968,7 +2225,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -1984,21 +2241,27 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" @@ -2006,7 +2269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2051,7 +2314,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -2067,21 +2330,27 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.47", + "version": "v4.4.46", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" + "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", - "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", - "shasum": "" + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/90425fd98d1ecad98e4b2dca9f54f62069193b15", + "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.3", @@ -2140,7 +2409,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.46" }, "funding": [ { @@ -2156,7 +2425,7 @@ "type": "tidelift" } ], - "time": "2022-10-03T15:15:11+00:00" + "time": "2022-09-03T23:07:25+00:00" }, { "name": "symfony/var-exporter", @@ -2170,7 +2439,13 @@ "type": "zip", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8fc03ee75eeece3d9be1ef47d26d79bea1afb340", "reference": "8fc03ee75eeece3d9be1ef47d26d79bea1afb340", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.2.5", @@ -2233,17 +2508,23 @@ }, { "name": "taoser/think-addons", - "version": "v1.0.8", + "version": "v1.0.6", "source": { "type": "git", "url": "https://github.com/taoser/think-addons.git", - "reference": "570367e8d4904842625427f132d23c93f5edfc68" + "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/taoser/think-addons/zipball/570367e8d4904842625427f132d23c93f5edfc68", - "reference": "570367e8d4904842625427f132d23c93f5edfc68", - "shasum": "" + "url": "https://api.github.com/repos/taoser/think-addons/zipball/e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2284,9 +2565,9 @@ "description": "The ThinkPHP6 Addons Package", "support": { "issues": "https://github.com/taoser/think-addons/issues", - "source": "https://github.com/taoser/think-addons/tree/v1.0.8" + "source": "https://github.com/taoser/think-addons/tree/v1.0.6" }, - "time": "2022-10-15T06:21:17+00:00" + "time": "2022-10-06T13:11:38+00:00" }, { "name": "taoser/think-auth", @@ -2300,7 +2581,13 @@ "type": "zip", "url": "https://api.github.com/repos/taoser/think-auth/zipball/19bb04e4fb957a95ff3fdc142939922c19167b43", "reference": "19bb04e4fb957a95ff3fdc142939922c19167b43", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2353,7 +2640,13 @@ "type": "zip", "url": "https://api.github.com/repos/taoser/think-setarr/zipball/6651c31ef42417a6294ef08e6fb970917b7e7f86", "reference": "6651c31ef42417a6294ef08e6fb970917b7e7f86", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.2.0" @@ -2393,7 +2686,13 @@ "type": "zip", "url": "https://api.github.com/repos/tighten/collect/zipball/7d2a6fc5e97c5f7209a780bea98f35042c1fd0ea", "reference": "7d2a6fc5e97c5f7209a780bea98f35042c1fd0ea", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": "^7.3|^8.0", @@ -2447,7 +2746,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/framework/zipball/2cb56f3e6f3c479fe90ea5f28d38d3b5ef6c4210", "reference": "2cb56f3e6f3c479fe90ea5f28d38d3b5ef6c4210", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-json": "*", @@ -2512,7 +2817,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-captcha/zipball/52fba122c953995bec3013c635025172491ae299", "reference": "52fba122c953995bec3013c635025172491ae299", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "topthink/framework": "^6.0" @@ -2555,20 +2866,28 @@ }, { "name": "topthink/think-filesystem", - "version": "v2.0.0", + "version": "v1.0.1", "source": { "type": "git", "url": "https://github.com/top-think/think-filesystem.git", - "reference": "63e525fd74f451b2df1df060c3194e9b6e724730" + "reference": "cfc510520db9bcd22d8d80f51d7e415a2f470af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/63e525fd74f451b2df1df060c3194e9b6e724730", - "reference": "63e525fd74f451b2df1df060c3194e9b6e724730", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/cfc510520db9bcd22d8d80f51d7e415a2f470af6", + "reference": "cfc510520db9bcd22d8d80f51d7e415a2f470af6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "league/flysystem": "^2.0", + "league/flysystem": "^1.1.4", + "league/flysystem-cached-adapter": "^1.0", + "php": ">=7.2.5", "topthink/framework": "^6.1" }, "require-dev": { @@ -2595,9 +2914,9 @@ "description": "The ThinkPHP6.1 Filesystem Package", "support": { "issues": "https://github.com/top-think/think-filesystem/issues", - "source": "https://github.com/top-think/think-filesystem/tree/v2.0.0" + "source": "https://github.com/top-think/think-filesystem/tree/v1.0.1" }, - "time": "2022-10-26T04:51:41+00:00" + "time": "2022-10-26T03:50:24+00:00" }, { "name": "topthink/think-helper", @@ -2611,7 +2930,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-helper/zipball/769acbe50a4274327162f9c68ec2e89a38eb2aff", "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0" @@ -2657,7 +2982,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88", "reference": "38ba647706e35d6704b5d370c06f8a160b635f88", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "composer-plugin-api": "^1.0||^2.0" @@ -2692,20 +3023,26 @@ }, { "name": "topthink/think-migration", - "version": "v3.0.4", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/top-think/think-migration.git", - "reference": "c5880669b277762d5ff935e551bc0d5c71de6811" + "reference": "5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-migration/zipball/c5880669b277762d5ff935e551bc0d5c71de6811", - "reference": "c5880669b277762d5ff935e551bc0d5c71de6811", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-migration/zipball/5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79", + "reference": "5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "topthink/framework": "^6.0", + "topthink/framework": "^6.0.0", "topthink/think-helper": "^3.0.3" }, "require-dev": { @@ -2740,9 +3077,9 @@ ], "support": { "issues": "https://github.com/top-think/think-migration/issues", - "source": "https://github.com/top-think/think-migration/tree/v3.0.4" + "source": "https://github.com/top-think/think-migration/tree/v3.0.3" }, - "time": "2022-10-26T07:57:54+00:00" + "time": "2020-12-07T05:54:22+00:00" }, { "name": "topthink/think-multi-app", @@ -2756,7 +3093,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/387e0dac059c20f92cac5da41a871e10829c1c97", "reference": "387e0dac059c20f92cac5da41a871e10829c1c97", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2794,17 +3137,23 @@ }, { "name": "topthink/think-orm", - "version": "v2.0.55", + "version": "v2.0.54", "source": { "type": "git", "url": "https://github.com/top-think/think-orm.git", - "reference": "e1974a4c3b1b4c5b808fcc0863fc254e711dee13" + "reference": "97b061b47616301ff29fbd4c35ed9184e1162e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-orm/zipball/e1974a4c3b1b4c5b808fcc0863fc254e711dee13", - "reference": "e1974a4c3b1b4c5b808fcc0863fc254e711dee13", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-orm/zipball/97b061b47616301ff29fbd4c35ed9184e1162e4e", + "reference": "97b061b47616301ff29fbd4c35ed9184e1162e4e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-json": "*", @@ -2843,9 +3192,9 @@ ], "support": { "issues": "https://github.com/top-think/think-orm/issues", - "source": "https://github.com/top-think/think-orm/tree/v2.0.55" + "source": "https://github.com/top-think/think-orm/tree/v2.0.54" }, - "time": "2022-09-27T14:18:43+00:00" + "time": "2022-07-05T05:25:51+00:00" }, { "name": "topthink/think-template", @@ -2859,7 +3208,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368", "reference": "abfc293f74f9ef5127b5c416310a01fe42e59368", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2900,7 +3255,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-view/zipball/edce0ae2c9551ab65f9e94a222604b0dead3576d", "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2941,7 +3302,13 @@ "type": "zip", "url": "https://api.github.com/repos/wamkj/thinkphp6.0-databackup/zipball/28a0e406d827132942723a3c9f69bb20c98e652f", "reference": "28a0e406d827132942723a3c9f69bb20c98e652f", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2986,7 +3353,13 @@ "type": "zip", "url": "https://api.github.com/repos/walkor/channel/zipball/3df772d0d20d4cebfcfd621c33d1a1ab732db523", "reference": "3df772d0d20d4cebfcfd621c33d1a1ab732db523", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "workerman/workerman": ">=4.0.12" @@ -3020,7 +3393,13 @@ "type": "zip", "url": "https://api.github.com/repos/walkor/phpsocket.io/zipball/a5758da4d55b4744a4cc9c956816d88ce385601e", "reference": "a5758da4d55b4744a4cc9c956816d88ce385601e", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "workerman/channel": ">=1.0.0", @@ -3058,17 +3437,23 @@ }, { "name": "workerman/workerman", - "version": "v4.1.4", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/walkor/workerman.git", - "reference": "83e007acf936e2233ac92d7368b87716f2bae338" + "reference": "01028d8008c5691ec38c5f675fc13d76496a6db9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/walkor/workerman/zipball/83e007acf936e2233ac92d7368b87716f2bae338", - "reference": "83e007acf936e2233ac92d7368b87716f2bae338", - "shasum": "" + "url": "https://api.github.com/repos/walkor/workerman/zipball/01028d8008c5691ec38c5f675fc13d76496a6db9", + "reference": "01028d8008c5691ec38c5f675fc13d76496a6db9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.0" @@ -3117,7 +3502,7 @@ "type": "patreon" } ], - "time": "2022-10-09T11:33:14+00:00" + "time": "2022-09-23T14:05:12+00:00" }, { "name": "yansongda/pay", @@ -3131,7 +3516,13 @@ "type": "zip", "url": "https://api.github.com/repos/yansongda/pay/zipball/7ff004f05f9d6e288ff9b4deef585d30395f37f2", "reference": "7ff004f05f9d6e288ff9b4deef585d30395f37f2", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-bcmath": "*", @@ -3208,7 +3599,13 @@ "type": "zip", "url": "https://api.github.com/repos/yansongda/supports/zipball/c3f736efe169696cef94730976e604a61c345b5c", "reference": "c3f736efe169696cef94730976e604a61c345b5c", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.4" @@ -3259,17 +3656,23 @@ }, { "name": "yzh52521/easyhttp", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/yzh52521/easyhttp.git", - "reference": "aa7f805cfed6ce613f10045aff564b05e62e944c" + "reference": "e34628f8f90295cf0a19e5cd2bcc4dd19000373b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yzh52521/easyhttp/zipball/aa7f805cfed6ce613f10045aff564b05e62e944c", - "reference": "aa7f805cfed6ce613f10045aff564b05e62e944c", - "shasum": "" + "url": "https://api.github.com/repos/yzh52521/easyhttp/zipball/e34628f8f90295cf0a19e5cd2bcc4dd19000373b", + "reference": "e34628f8f90295cf0a19e5cd2bcc4dd19000373b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "guzzlehttp/guzzle": "^6.0|^7.0", @@ -3305,9 +3708,9 @@ ], "support": { "issues": "https://github.com/yzh52521/easyhttp/issues", - "source": "https://github.com/yzh52521/easyhttp/tree/v1.0.3" + "source": "https://github.com/yzh52521/easyhttp/tree/v1.0.4" }, - "time": "2022-10-13T06:56:42+00:00" + "time": "2022-11-10T01:24:11+00:00" } ], "packages-dev": [ @@ -3323,7 +3726,13 @@ "type": "zip", "url": "https://api.github.com/repos/top-think/think-trace/zipball/55027fd79abb744f32a3be8d9e1ccf873a3ca9b7", "reference": "55027fd79abb744f32a3be8d9e1ccf873a3ca9b7", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", diff --git a/config/taoler.php b/config/taoler.php index 512cbba..5f5569d 100644 --- a/config/taoler.php +++ b/config/taoler.php @@ -16,7 +16,7 @@ return [ // 应用名,此项不可更改 'appname' => 'TaoLer', // 版本配置 - 'version' => '2.0.9', + 'version' => '2.0.10', // 加盐 'salt' => 'taoler', // 数据库备份目录 diff --git a/public/static/home/.gitignore b/public/static/home/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/public/static/home/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/runtime/update.sql b/runtime/update.sql index c69205e..583b024 100644 --- a/runtime/update.sql +++ b/runtime/update.sql @@ -1,2 +1 @@ -ALTER TABLE `tao_auth_rule` CHANGE `sort` `sort` int NOT NULL DEFAULT 50 COMMENT '排序'; -ALTER TABLE `tao_auth_rule` CHANGE `ishidden` `ismenu` enum('1','2','3','0','-1') NOT NULL DEFAULT '1' COMMENT '1菜单,2按钮3目录'; \ No newline at end of file +ALTER TABLE `tao_cate` ADD `appname` varchar(20) NOT NULL DEFAULT 'index' COMMENT '所属应用' AFTER `status`; \ No newline at end of file diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index f5c2f43..5ecfac2 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -14,7 +14,7 @@ return array( 'think\\composer\\' => array($vendorDir . '/topthink/think-installer/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 . '/topthink/think-filesystem/src'), + 'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-filesystem/src', $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', $vendorDir . '/taoser/think-setarr/src'), 'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'), @@ -42,6 +42,7 @@ return array( 'PHPSocketIO\\' => array($vendorDir . '/workerman/phpsocket.io/src'), 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'), 'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'), + 'League\\Flysystem\\Cached\\' => array($vendorDir . '/league/flysystem-cached-adapter/src'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), 'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'), 'Jaeger\\' => array($vendorDir . '/jaeger/g-http/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index d440b07..a8f44ae 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -102,6 +102,7 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 'L' => array ( 'League\\MimeTypeDetection\\' => 25, + 'League\\Flysystem\\Cached\\' => 24, 'League\\Flysystem\\' => 17, 'Laravel\\SerializableClosure\\' => 28, ), @@ -181,10 +182,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 'think\\' => array ( 0 => __DIR__ . '/..' . '/topthink/framework/src/think', - 1 => __DIR__ . '/..' . '/topthink/think-helper/src', - 2 => __DIR__ . '/..' . '/topthink/think-orm/src', - 3 => __DIR__ . '/..' . '/topthink/think-template/src', - 4 => __DIR__ . '/..' . '/topthink/think-filesystem/src', + 1 => __DIR__ . '/..' . '/topthink/think-filesystem/src', + 2 => __DIR__ . '/..' . '/topthink/think-helper/src', + 3 => __DIR__ . '/..' . '/topthink/think-orm/src', + 4 => __DIR__ . '/..' . '/topthink/think-template/src', ), 'taoser\\think\\' => array ( @@ -295,6 +296,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2 array ( 0 => __DIR__ . '/..' . '/league/mime-type-detection/src', ), + 'League\\Flysystem\\Cached\\' => + array ( + 0 => __DIR__ . '/..' . '/league/flysystem-cached-adapter/src', + ), 'League\\Flysystem\\' => array ( 0 => __DIR__ . '/..' . '/league/flysystem/src', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index ef12727..1432cc3 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -962,47 +962,63 @@ }, { "name": "league/flysystem", - "version": "2.5.0", - "version_normalized": "2.5.0.0", + "version": "1.1.10", + "version_normalized": "1.1.10.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb" + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", - "reference": "8aaffb653c5777781b0f7f69a5d937baf7ab6cdb", - "shasum": "" + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "ext-json": "*", - "league/mime-type-detection": "^1.0.0", - "php": "^7.2 || ^8.0" + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" }, "conflict": { - "guzzlehttp/ringphp": "<1.1.1" + "league/flysystem-sftp": "<1.0.6" }, "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", - "aws/aws-sdk-php": "^3.132.4", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "friendsofphp/php-cs-fixer": "^3.2", - "google/cloud-storage": "^1.23", - "phpseclib/phpseclib": "^2.0", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^8.5 || ^9.4", - "sabre/dav": "^4.1" + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" }, - "time": "2022-09-17T21:02:32+00:00", + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "time": "2022-10-04T09:16:37+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "installation-source": "dist", "autoload": { "psr-4": { - "League\\Flysystem\\": "src" + "League\\Flysystem\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1012,43 +1028,101 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" + "email": "info@frenky.net" } ], - "description": "File storage abstraction for PHP", + "description": "Filesystem abstraction: Many filesystems, one API.", "keywords": [ + "Cloud Files", "WebDAV", + "abstraction", "aws", "cloud", - "file", + "copy.com", + "dropbox", + "file systems", "files", "filesystem", "filesystems", "ftp", + "rackspace", + "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/2.5.0" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" }, "funding": [ { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" + "url": "https://offset.earth/frankdejonge", + "type": "other" } ], "install-path": "../league/flysystem" }, + { + "name": "league/flysystem-cached-adapter", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-cached-adapter.git", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "league/flysystem": "~1.0", + "psr/cache": "^1.0.0" + }, + "require-dev": { + "mockery/mockery": "~0.9", + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0", + "tedivm/stash": "~0.12" + }, + "suggest": { + "ext-phpredis": "Pure C implemented extension for PHP" + }, + "time": "2020-07-25T15:56:04+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Flysystem\\Cached\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "frankdejonge", + "email": "info@frenky.net" + } + ], + "description": "An adapter decorator to enable meta-data caching.", + "support": { + "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues", + "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master" + }, + "install-path": "../league/flysystem-cached-adapter" + }, { "name": "league/mime-type-detection", "version": "1.11.0", @@ -1423,18 +1497,24 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.6.5", - "version_normalized": "6.6.5.0", + "version": "v6.6.4", + "version_normalized": "6.6.4.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627" + "reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8b6386d7417526d1ea4da9edb70b8352f7543627", - "reference": "8b6386d7417526d1ea4da9edb70b8352f7543627", - "shasum": "" + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b", + "reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-ctype": "*", @@ -1457,10 +1537,10 @@ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", - "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" }, - "time": "2022-10-07T12:23:10+00:00", + "time": "2022-08-22T09:22:00+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1492,7 +1572,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.6.5" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4" }, "funding": [ { @@ -1949,18 +2029,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", - "version_normalized": "1.26.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" @@ -1971,11 +2057,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2022-05-24T11:49:31+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2015,7 +2101,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -2035,27 +2121,33 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", - "version_normalized": "1.26.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" }, - "time": "2022-05-24T11:49:31+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2094,7 +2186,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -2114,27 +2206,33 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", - "version_normalized": "1.26.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "shasum": "" + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1" }, - "time": "2022-05-10T07:21:04+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2180,7 +2278,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -2200,18 +2298,24 @@ }, { "name": "symfony/var-dumper", - "version": "v4.4.47", - "version_normalized": "4.4.47.0", + "version": "v4.4.46", + "version_normalized": "4.4.46.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "1069c7a3fca74578022fab6f81643248d02f8e63" + "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1069c7a3fca74578022fab6f81643248d02f8e63", - "reference": "1069c7a3fca74578022fab6f81643248d02f8e63", - "shasum": "" + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/90425fd98d1ecad98e4b2dca9f54f62069193b15", + "reference": "90425fd98d1ecad98e4b2dca9f54f62069193b15", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.3", @@ -2234,7 +2338,7 @@ "ext-intl": "To show region name in time zone dump", "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, - "time": "2022-10-03T15:15:11+00:00", + "time": "2022-09-03T23:07:25+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -2272,7 +2376,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.47" + "source": "https://github.com/symfony/var-dumper/tree/v4.4.46" }, "funding": [ { @@ -2368,18 +2472,24 @@ }, { "name": "taoser/think-addons", - "version": "v1.0.8", - "version_normalized": "1.0.8.0", + "version": "v1.0.6", + "version_normalized": "1.0.6.0", "source": { "type": "git", "url": "https://github.com/taoser/think-addons.git", - "reference": "570367e8d4904842625427f132d23c93f5edfc68" + "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/taoser/think-addons/zipball/570367e8d4904842625427f132d23c93f5edfc68", - "reference": "570367e8d4904842625427f132d23c93f5edfc68", - "shasum": "" + "url": "https://api.github.com/repos/taoser/think-addons/zipball/e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "reference": "e6e35bfd8b93dc469ebb5c5530ba350131bd7541", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.1.0", @@ -2388,7 +2498,7 @@ "topthink/think-helper": "^3.0.0", "topthink/think-view": "^1.0" }, - "time": "2022-10-15T06:21:17+00:00", + "time": "2022-10-06T13:11:38+00:00", "type": "library", "extra": { "think": { @@ -2422,7 +2532,7 @@ "description": "The ThinkPHP6 Addons Package", "support": { "issues": "https://github.com/taoser/think-addons/issues", - "source": "https://github.com/taoser/think-addons/tree/v1.0.8" + "source": "https://github.com/taoser/think-addons/tree/v1.0.6" }, "install-path": "../taoser/think-addons" }, @@ -2710,21 +2820,29 @@ }, { "name": "topthink/think-filesystem", - "version": "v2.0.0", - "version_normalized": "2.0.0.0", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", "url": "https://github.com/top-think/think-filesystem.git", - "reference": "63e525fd74f451b2df1df060c3194e9b6e724730" + "reference": "cfc510520db9bcd22d8d80f51d7e415a2f470af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/63e525fd74f451b2df1df060c3194e9b6e724730", - "reference": "63e525fd74f451b2df1df060c3194e9b6e724730", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-filesystem/zipball/cfc510520db9bcd22d8d80f51d7e415a2f470af6", + "reference": "cfc510520db9bcd22d8d80f51d7e415a2f470af6", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "league/flysystem": "^2.0", + "league/flysystem": "^1.1.4", + "league/flysystem-cached-adapter": "^1.0", + "php": ">=7.2.5", "topthink/framework": "^6.1" }, "require-dev": { @@ -2732,7 +2850,7 @@ "mockery/mockery": "^1.2", "phpunit/phpunit": "^8.0" }, - "time": "2022-10-26T04:51:41+00:00", + "time": "2022-10-26T03:50:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -2753,7 +2871,7 @@ "description": "The ThinkPHP6.1 Filesystem Package", "support": { "issues": "https://github.com/top-think/think-filesystem/issues", - "source": "https://github.com/top-think/think-filesystem/tree/v2.0.0" + "source": "https://github.com/top-think/think-filesystem/tree/v1.0.1" }, "install-path": "../topthink/think-filesystem" }, @@ -2868,21 +2986,27 @@ }, { "name": "topthink/think-migration", - "version": "v3.0.4", - "version_normalized": "3.0.4.0", + "version": "v3.0.3", + "version_normalized": "3.0.3.0", "source": { "type": "git", "url": "https://github.com/top-think/think-migration.git", - "reference": "c5880669b277762d5ff935e551bc0d5c71de6811" + "reference": "5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-migration/zipball/c5880669b277762d5ff935e551bc0d5c71de6811", - "reference": "c5880669b277762d5ff935e551bc0d5c71de6811", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-migration/zipball/5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79", + "reference": "5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { - "topthink/framework": "^6.0", + "topthink/framework": "^6.0.0", "topthink/think-helper": "^3.0.3" }, "require-dev": { @@ -2891,7 +3015,7 @@ "suggest": { "fzaninotto/faker": "Required to use the factory builder (^1.8)." }, - "time": "2022-10-26T07:57:54+00:00", + "time": "2020-12-07T05:54:22+00:00", "type": "library", "extra": { "think": { @@ -2919,7 +3043,7 @@ ], "support": { "issues": "https://github.com/top-think/think-migration/issues", - "source": "https://github.com/top-think/think-migration/tree/v3.0.4" + "source": "https://github.com/top-think/think-migration/tree/v3.0.3" }, "install-path": "../topthink/think-migration" }, @@ -2976,18 +3100,24 @@ }, { "name": "topthink/think-orm", - "version": "v2.0.55", - "version_normalized": "2.0.55.0", + "version": "v2.0.54", + "version_normalized": "2.0.54.0", "source": { "type": "git", "url": "https://github.com/top-think/think-orm.git", - "reference": "e1974a4c3b1b4c5b808fcc0863fc254e711dee13" + "reference": "97b061b47616301ff29fbd4c35ed9184e1162e4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-orm/zipball/e1974a4c3b1b4c5b808fcc0863fc254e711dee13", - "reference": "e1974a4c3b1b4c5b808fcc0863fc254e711dee13", - "shasum": "" + "url": "https://api.github.com/repos/top-think/think-orm/zipball/97b061b47616301ff29fbd4c35ed9184e1162e4e", + "reference": "97b061b47616301ff29fbd4c35ed9184e1162e4e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "ext-json": "*", @@ -3000,7 +3130,7 @@ "require-dev": { "phpunit/phpunit": "^7|^8|^9.5" }, - "time": "2022-09-27T14:18:43+00:00", + "time": "2022-07-05T05:25:51+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3028,7 +3158,7 @@ ], "support": { "issues": "https://github.com/top-think/think-orm/issues", - "source": "https://github.com/top-think/think-orm/tree/v2.0.55" + "source": "https://github.com/top-think/think-orm/tree/v2.0.54" }, "install-path": "../topthink/think-orm" }, @@ -3326,18 +3456,24 @@ }, { "name": "workerman/workerman", - "version": "v4.1.4", - "version_normalized": "4.1.4.0", + "version": "v4.1.3", + "version_normalized": "4.1.3.0", "source": { "type": "git", "url": "https://github.com/walkor/workerman.git", - "reference": "83e007acf936e2233ac92d7368b87716f2bae338" + "reference": "01028d8008c5691ec38c5f675fc13d76496a6db9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/walkor/workerman/zipball/83e007acf936e2233ac92d7368b87716f2bae338", - "reference": "83e007acf936e2233ac92d7368b87716f2bae338", - "shasum": "" + "url": "https://api.github.com/repos/walkor/workerman/zipball/01028d8008c5691ec38c5f675fc13d76496a6db9", + "reference": "01028d8008c5691ec38c5f675fc13d76496a6db9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "php": ">=7.0" @@ -3345,7 +3481,7 @@ "suggest": { "ext-event": "For better performance. " }, - "time": "2022-10-09T11:33:14+00:00", + "time": "2022-09-23T14:05:12+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3536,25 +3672,31 @@ }, { "name": "yzh52521/easyhttp", - "version": "v1.0.3", - "version_normalized": "1.0.3.0", + "version": "v1.0.4", + "version_normalized": "1.0.4.0", "source": { "type": "git", "url": "https://github.com/yzh52521/easyhttp.git", - "reference": "aa7f805cfed6ce613f10045aff564b05e62e944c" + "reference": "e34628f8f90295cf0a19e5cd2bcc4dd19000373b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yzh52521/easyhttp/zipball/aa7f805cfed6ce613f10045aff564b05e62e944c", - "reference": "aa7f805cfed6ce613f10045aff564b05e62e944c", - "shasum": "" + "url": "https://api.github.com/repos/yzh52521/easyhttp/zipball/e34628f8f90295cf0a19e5cd2bcc4dd19000373b", + "reference": "e34628f8f90295cf0a19e5cd2bcc4dd19000373b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "guzzlehttp/guzzle": "^6.0|^7.0", "php": "^7.2.5|^8.0", "psr/log": "^1.0|^2.0|^3.0" }, - "time": "2022-10-13T06:56:42+00:00", + "time": "2022-11-10T01:24:11+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3585,7 +3727,7 @@ ], "support": { "issues": "https://github.com/yzh52521/easyhttp/issues", - "source": "https://github.com/yzh52521/easyhttp/tree/v1.0.3" + "source": "https://github.com/yzh52521/easyhttp/tree/v1.0.4" }, "install-path": "../yzh52521/easyhttp" } diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 6fc6fc5..2dc4ba0 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'taoser/taoler', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '6bb4a77619f0244cc914b917f5a95ade44c7500f', + 'reference' => '24134372d0bdc16ddb7f8b3582608efc1319b59b', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -137,14 +137,23 @@ 'dev_requirement' => false, ), 'league/flysystem' => array( - 'pretty_version' => '2.5.0', - 'version' => '2.5.0.0', - 'reference' => '8aaffb653c5777781b0f7f69a5d937baf7ab6cdb', + 'pretty_version' => '1.1.10', + 'version' => '1.1.10.0', + 'reference' => '3239285c825c152bcc315fe0e87d6b55f5972ed1', 'type' => 'library', 'install_path' => __DIR__ . '/../league/flysystem', 'aliases' => array(), 'dev_requirement' => false, ), + 'league/flysystem-cached-adapter' => array( + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'reference' => 'd1925efb2207ac4be3ad0c40b8277175f99ffaff', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/flysystem-cached-adapter', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'league/mime-type-detection' => array( 'pretty_version' => '1.11.0', 'version' => '1.11.0.0', @@ -200,9 +209,9 @@ 'dev_requirement' => false, ), 'phpmailer/phpmailer' => array( - 'pretty_version' => 'v6.6.5', - 'version' => '6.6.5.0', - 'reference' => '8b6386d7417526d1ea4da9edb70b8352f7543627', + 'pretty_version' => 'v6.6.4', + 'version' => '6.6.4.0', + 'reference' => 'a94fdebaea6bd17f51be0c2373ab80d3d681269b', 'type' => 'library', 'install_path' => __DIR__ . '/../phpmailer/phpmailer', 'aliases' => array(), @@ -311,36 +320,36 @@ 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'reference' => '9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php72' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'reference' => 'bf44a9fd41feaac72b074de600314a93e2ae78e2', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php72', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.26.0', - 'version' => '1.26.0.0', - 'reference' => 'cfa0ae98841b9e461207c13ab093d76b0fa7bace', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/var-dumper' => array( - 'pretty_version' => 'v4.4.47', - 'version' => '4.4.47.0', - 'reference' => '1069c7a3fca74578022fab6f81643248d02f8e63', + 'pretty_version' => 'v4.4.46', + 'version' => '4.4.46.0', + 'reference' => '90425fd98d1ecad98e4b2dca9f54f62069193b15', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), @@ -358,16 +367,16 @@ 'taoser/taoler' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '6bb4a77619f0244cc914b917f5a95ade44c7500f', + 'reference' => '24134372d0bdc16ddb7f8b3582608efc1319b59b', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'taoser/think-addons' => array( - 'pretty_version' => 'v1.0.8', - 'version' => '1.0.8.0', - 'reference' => '570367e8d4904842625427f132d23c93f5edfc68', + 'pretty_version' => 'v1.0.6', + 'version' => '1.0.6.0', + 'reference' => 'e6e35bfd8b93dc469ebb5c5530ba350131bd7541', 'type' => 'library', 'install_path' => __DIR__ . '/../taoser/think-addons', 'aliases' => array(), @@ -419,9 +428,9 @@ 'dev_requirement' => false, ), 'topthink/think-filesystem' => array( - 'pretty_version' => 'v2.0.0', - 'version' => '2.0.0.0', - 'reference' => '63e525fd74f451b2df1df060c3194e9b6e724730', + 'pretty_version' => 'v1.0.1', + 'version' => '1.0.1.0', + 'reference' => 'cfc510520db9bcd22d8d80f51d7e415a2f470af6', 'type' => 'library', 'install_path' => __DIR__ . '/../topthink/think-filesystem', 'aliases' => array(), @@ -446,9 +455,9 @@ 'dev_requirement' => false, ), 'topthink/think-migration' => array( - 'pretty_version' => 'v3.0.4', - 'version' => '3.0.4.0', - 'reference' => 'c5880669b277762d5ff935e551bc0d5c71de6811', + 'pretty_version' => 'v3.0.3', + 'version' => '3.0.3.0', + 'reference' => '5717d9e5f3ea745f6dbfd1e30b4402aaadff9a79', 'type' => 'library', 'install_path' => __DIR__ . '/../topthink/think-migration', 'aliases' => array(), @@ -464,9 +473,9 @@ 'dev_requirement' => false, ), 'topthink/think-orm' => array( - 'pretty_version' => 'v2.0.55', - 'version' => '2.0.55.0', - 'reference' => 'e1974a4c3b1b4c5b808fcc0863fc254e711dee13', + 'pretty_version' => 'v2.0.54', + 'version' => '2.0.54.0', + 'reference' => '97b061b47616301ff29fbd4c35ed9184e1162e4e', 'type' => 'library', 'install_path' => __DIR__ . '/../topthink/think-orm', 'aliases' => array(), @@ -527,9 +536,9 @@ 'dev_requirement' => false, ), 'workerman/workerman' => array( - 'pretty_version' => 'v4.1.4', - 'version' => '4.1.4.0', - 'reference' => '83e007acf936e2233ac92d7368b87716f2bae338', + 'pretty_version' => 'v4.1.3', + 'version' => '4.1.3.0', + 'reference' => '01028d8008c5691ec38c5f675fc13d76496a6db9', 'type' => 'library', 'install_path' => __DIR__ . '/../workerman/workerman', 'aliases' => array(), @@ -554,9 +563,9 @@ 'dev_requirement' => false, ), 'yzh52521/easyhttp' => array( - 'pretty_version' => 'v1.0.3', - 'version' => '1.0.3.0', - 'reference' => 'aa7f805cfed6ce613f10045aff564b05e62e944c', + 'pretty_version' => 'v1.0.4', + 'version' => '1.0.4.0', + 'reference' => 'e34628f8f90295cf0a19e5cd2bcc4dd19000373b', 'type' => 'library', 'install_path' => __DIR__ . '/../yzh52521/easyhttp', 'aliases' => array(), diff --git a/vendor/league/flysystem/LICENSE b/vendor/league/flysystem/LICENSE index 1f01652..f2684c8 100644 --- a/vendor/league/flysystem/LICENSE +++ b/vendor/league/flysystem/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2022 Frank de Jonge +Copyright (c) 2013-2019 Frank de Jonge Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/league/flysystem/composer.json b/vendor/league/flysystem/composer.json index 9c244f8..32ec81d 100644 --- a/vendor/league/flysystem/composer.json +++ b/vendor/league/flysystem/composer.json @@ -1,48 +1,68 @@ { "name": "league/flysystem", - "description": "File storage abstraction for PHP", - "keywords": [ - "filesystem", "filesystems", "files", "storage", "aws", - "s3", "ftp", "sftp", "webdav", "file", "cloud" - ], - "scripts": { - "phpstan": "vendor/bin/phpstan analyse -l 6 src" - }, "type": "library", - "minimum-stability": "dev", - "prefer-stable": true, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "filesystem", "filesystems", "files", "storage", "dropbox", "aws", + "abstraction", "s3", "ftp", "sftp", "remote", "webdav", + "file systems", "cloud", "cloud files", "rackspace", "copy.com" + ], + "funding": [ + { + "type": "other", + "url": "https://offset.earth/frankdejonge" } - }, - "require": { - "php": "^7.2 || ^8.0", - "ext-json": "*", - "league/mime-type-detection": "^1.0.0" - }, - "require-dev": { - "ext-fileinfo": "*", - "ext-ftp": "*", - "phpunit/phpunit": "^8.5 || ^9.4", - "phpstan/phpstan": "^0.12.26", - "phpseclib/phpseclib": "^2.0", - "aws/aws-sdk-php": "^3.132.4", - "composer/semver": "^3.0", - "friendsofphp/php-cs-fixer": "^3.2", - "google/cloud-storage": "^1.23", - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", - "sabre/dav": "^4.1" - }, - "conflict": { - "guzzlehttp/ringphp": "<1.1.1" - }, + ], "license": "MIT", "authors": [ { "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" + "email": "info@frenky.net" } - ] + ], + "require": { + "php": "^7.2.5 || ^8.0", + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "League\\Flysystem\\Stub\\": "stub/" + } + }, + "suggest": { + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "scripts": { + "phpstan": "php phpstan.php" + } } diff --git a/vendor/league/flysystem/src/Config.php b/vendor/league/flysystem/src/Config.php index 77c3b5a..639f43d 100644 --- a/vendor/league/flysystem/src/Config.php +++ b/vendor/league/flysystem/src/Config.php @@ -1,43 +1,107 @@ options = $options; + $this->settings = $settings; } /** - * @param mixed $default + * Get a setting. * - * @return mixed + * @param string $key + * @param mixed $default + * + * @return mixed config setting or default when not found */ - public function get(string $property, $default = null) + public function get($key, $default = null) { - return $this->options[$property] ?? $default; + if ( ! array_key_exists($key, $this->settings)) { + return $this->getDefault($key, $default); + } + + return $this->settings[$key]; } - public function extend(array $options): Config + /** + * Check if an item exists by key. + * + * @param string $key + * + * @return bool + */ + public function has($key) { - return new Config(array_merge($this->options, $options)); + if (array_key_exists($key, $this->settings)) { + return true; + } + + return $this->fallback instanceof Config + ? $this->fallback->has($key) + : false; } - public function withDefaults(array $defaults): Config + /** + * Try to retrieve a default setting from a config fallback. + * + * @param string $key + * @param mixed $default + * + * @return mixed config setting or default when not found + */ + protected function getDefault($key, $default) { - return new Config($this->options + $defaults); + if ( ! $this->fallback) { + return $default; + } + + return $this->fallback->get($key, $default); + } + + /** + * Set a setting. + * + * @param string $key + * @param mixed $value + * + * @return $this + */ + public function set($key, $value) + { + $this->settings[$key] = $value; + + return $this; + } + + /** + * Set the fallback. + * + * @param Config $fallback + * + * @return $this + */ + public function setFallback(Config $fallback) + { + $this->fallback = $fallback; + + return $this; } } diff --git a/vendor/league/flysystem/src/CorruptedPathDetected.php b/vendor/league/flysystem/src/CorruptedPathDetected.php index 70631cc..81a27e5 100644 --- a/vendor/league/flysystem/src/CorruptedPathDetected.php +++ b/vendor/league/flysystem/src/CorruptedPathDetected.php @@ -2,11 +2,15 @@ namespace League\Flysystem; -use RuntimeException; +use LogicException; -final class CorruptedPathDetected extends RuntimeException implements FilesystemException +class CorruptedPathDetected extends LogicException implements FilesystemException { - public static function forPath(string $path): CorruptedPathDetected + /** + * @param string $path + * @return CorruptedPathDetected + */ + public static function forPath($path) { return new CorruptedPathDetected("Corrupted path detected: " . $path); } diff --git a/vendor/league/flysystem/src/Filesystem.php b/vendor/league/flysystem/src/Filesystem.php index f66574d..c4eaf27 100644 --- a/vendor/league/flysystem/src/Filesystem.php +++ b/vendor/league/flysystem/src/Filesystem.php @@ -1,163 +1,409 @@ adapter = $adapter; - $this->config = new Config($config); - $this->pathNormalizer = $pathNormalizer ?: new WhitespacePathNormalizer(); - } - - public function fileExists(string $location): bool - { - return $this->adapter->fileExists($this->pathNormalizer->normalizePath($location)); - } - - public function write(string $location, string $contents, array $config = []): void - { - $this->adapter->write( - $this->pathNormalizer->normalizePath($location), - $contents, - $this->config->extend($config) - ); - } - - public function writeStream(string $location, $contents, array $config = []): void - { - /* @var resource $contents */ - $this->assertIsResource($contents); - $this->rewindStream($contents); - $this->adapter->writeStream( - $this->pathNormalizer->normalizePath($location), - $contents, - $this->config->extend($config) - ); - } - - public function read(string $location): string - { - return $this->adapter->read($this->pathNormalizer->normalizePath($location)); - } - - public function readStream(string $location) - { - return $this->adapter->readStream($this->pathNormalizer->normalizePath($location)); - } - - public function delete(string $location): void - { - $this->adapter->delete($this->pathNormalizer->normalizePath($location)); - } - - public function deleteDirectory(string $location): void - { - $this->adapter->deleteDirectory($this->pathNormalizer->normalizePath($location)); - } - - public function createDirectory(string $location, array $config = []): void - { - $this->adapter->createDirectory( - $this->pathNormalizer->normalizePath($location), - $this->config->extend($config) - ); - } - - public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing - { - $path = $this->pathNormalizer->normalizePath($location); - - return new DirectoryListing($this->adapter->listContents($path, $deep)); - } - - public function move(string $source, string $destination, array $config = []): void - { - $this->adapter->move( - $this->pathNormalizer->normalizePath($source), - $this->pathNormalizer->normalizePath($destination), - $this->config->extend($config) - ); - } - - public function copy(string $source, string $destination, array $config = []): void - { - $this->adapter->copy( - $this->pathNormalizer->normalizePath($source), - $this->pathNormalizer->normalizePath($destination), - $this->config->extend($config) - ); - } - - public function lastModified(string $path): int - { - return $this->adapter->lastModified($this->pathNormalizer->normalizePath($path))->lastModified(); - } - - public function fileSize(string $path): int - { - return $this->adapter->fileSize($this->pathNormalizer->normalizePath($path))->fileSize(); - } - - public function mimeType(string $path): string - { - return $this->adapter->mimeType($this->pathNormalizer->normalizePath($path))->mimeType(); - } - - public function setVisibility(string $path, string $visibility): void - { - $this->adapter->setVisibility($this->pathNormalizer->normalizePath($path), $visibility); - } - - public function visibility(string $path): string - { - return $this->adapter->visibility($this->pathNormalizer->normalizePath($path))->visibility(); + $this->setConfig($config); } /** - * @param mixed $contents + * Get the Adapter. + * + * @return AdapterInterface adapter */ - private function assertIsResource($contents): void + public function getAdapter() { - if (is_resource($contents) === false) { - throw new InvalidStreamProvided( - "Invalid stream provided, expected stream resource, received " . gettype($contents) - ); - } elseif ($type = get_resource_type($contents) !== 'stream') { - throw new InvalidStreamProvided( - "Invalid stream provided, expected stream resource, received resource of type " . $type - ); + return $this->adapter; + } + + /** + * @inheritdoc + */ + public function has($path) + { + $path = Util::normalizePath($path); + + return strlen($path) === 0 ? false : (bool) $this->getAdapter()->has($path); + } + + /** + * @inheritdoc + */ + public function write($path, $contents, array $config = []) + { + $path = Util::normalizePath($path); + $this->assertAbsent($path); + $config = $this->prepareConfig($config); + + return (bool) $this->getAdapter()->write($path, $contents, $config); + } + + /** + * @inheritdoc + */ + public function writeStream($path, $resource, array $config = []) + { + if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { + throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); + } + + $path = Util::normalizePath($path); + $this->assertAbsent($path); + $config = $this->prepareConfig($config); + + Util::rewindStream($resource); + + return (bool) $this->getAdapter()->writeStream($path, $resource, $config); + } + + /** + * @inheritdoc + */ + public function put($path, $contents, array $config = []) + { + $path = Util::normalizePath($path); + $config = $this->prepareConfig($config); + + if ( ! $this->getAdapter() instanceof CanOverwriteFiles && $this->has($path)) { + return (bool) $this->getAdapter()->update($path, $contents, $config); + } + + return (bool) $this->getAdapter()->write($path, $contents, $config); + } + + /** + * @inheritdoc + */ + public function putStream($path, $resource, array $config = []) + { + if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { + throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); + } + + $path = Util::normalizePath($path); + $config = $this->prepareConfig($config); + Util::rewindStream($resource); + + if ( ! $this->getAdapter() instanceof CanOverwriteFiles && $this->has($path)) { + return (bool) $this->getAdapter()->updateStream($path, $resource, $config); + } + + return (bool) $this->getAdapter()->writeStream($path, $resource, $config); + } + + /** + * @inheritdoc + */ + public function readAndDelete($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + $contents = $this->read($path); + + if ($contents === false) { + return false; + } + + $this->delete($path); + + return $contents; + } + + /** + * @inheritdoc + */ + public function update($path, $contents, array $config = []) + { + $path = Util::normalizePath($path); + $config = $this->prepareConfig($config); + + $this->assertPresent($path); + + return (bool) $this->getAdapter()->update($path, $contents, $config); + } + + /** + * @inheritdoc + */ + public function updateStream($path, $resource, array $config = []) + { + if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { + throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); + } + + $path = Util::normalizePath($path); + $config = $this->prepareConfig($config); + $this->assertPresent($path); + Util::rewindStream($resource); + + return (bool) $this->getAdapter()->updateStream($path, $resource, $config); + } + + /** + * @inheritdoc + */ + public function read($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if ( ! ($object = $this->getAdapter()->read($path))) { + return false; + } + + return $object['contents']; + } + + /** + * @inheritdoc + */ + public function readStream($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if ( ! $object = $this->getAdapter()->readStream($path)) { + return false; + } + + return $object['stream']; + } + + /** + * @inheritdoc + */ + public function rename($path, $newpath) + { + $path = Util::normalizePath($path); + $newpath = Util::normalizePath($newpath); + $this->assertPresent($path); + $this->assertAbsent($newpath); + + return (bool) $this->getAdapter()->rename($path, $newpath); + } + + /** + * @inheritdoc + */ + public function copy($path, $newpath) + { + $path = Util::normalizePath($path); + $newpath = Util::normalizePath($newpath); + $this->assertPresent($path); + $this->assertAbsent($newpath); + + return $this->getAdapter()->copy($path, $newpath); + } + + /** + * @inheritdoc + */ + public function delete($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + return $this->getAdapter()->delete($path); + } + + /** + * @inheritdoc + */ + public function deleteDir($dirname) + { + $dirname = Util::normalizePath($dirname); + + if ($dirname === '') { + throw new RootViolationException('Root directories can not be deleted.'); + } + + return (bool) $this->getAdapter()->deleteDir($dirname); + } + + /** + * @inheritdoc + */ + public function createDir($dirname, array $config = []) + { + $dirname = Util::normalizePath($dirname); + $config = $this->prepareConfig($config); + + return (bool) $this->getAdapter()->createDir($dirname, $config); + } + + /** + * @inheritdoc + */ + public function listContents($directory = '', $recursive = false) + { + $directory = Util::normalizePath($directory); + $contents = $this->getAdapter()->listContents($directory, $recursive); + + return (new ContentListingFormatter($directory, $recursive, $this->config->get('case_sensitive', true))) + ->formatListing($contents); + } + + /** + * @inheritdoc + */ + public function getMimetype($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if (( ! $object = $this->getAdapter()->getMimetype($path)) || ! array_key_exists('mimetype', $object)) { + return false; + } + + return $object['mimetype']; + } + + /** + * @inheritdoc + */ + public function getTimestamp($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if (( ! $object = $this->getAdapter()->getTimestamp($path)) || ! array_key_exists('timestamp', $object)) { + return false; + } + + return (int) $object['timestamp']; + } + + /** + * @inheritdoc + */ + public function getVisibility($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if (( ! $object = $this->getAdapter()->getVisibility($path)) || ! array_key_exists('visibility', $object)) { + return false; + } + + return $object['visibility']; + } + + /** + * @inheritdoc + */ + public function getSize($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + if (( ! $object = $this->getAdapter()->getSize($path)) || ! array_key_exists('size', $object)) { + return false; + } + + return (int) $object['size']; + } + + /** + * @inheritdoc + */ + public function setVisibility($path, $visibility) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + return (bool) $this->getAdapter()->setVisibility($path, $visibility); + } + + /** + * @inheritdoc + */ + public function getMetadata($path) + { + $path = Util::normalizePath($path); + $this->assertPresent($path); + + return $this->getAdapter()->getMetadata($path); + } + + /** + * @inheritdoc + */ + public function get($path, Handler $handler = null) + { + $path = Util::normalizePath($path); + + if ( ! $handler) { + $metadata = $this->getMetadata($path); + $handler = ($metadata && $metadata['type'] === 'file') ? new File($this, $path) : new Directory($this, $path); + } + + $handler->setPath($path); + $handler->setFilesystem($this); + + return $handler; + } + + /** + * Assert a file is present. + * + * @param string $path path to file + * + * @throws FileNotFoundException + * + * @return void + */ + public function assertPresent($path) + { + if ($this->config->get('disable_asserts', false) === false && ! $this->has($path)) { + throw new FileNotFoundException($path); } } /** - * @param resource $resource + * Assert a file is absent. + * + * @param string $path path to file + * + * @throws FileExistsException + * + * @return void */ - private function rewindStream($resource): void + public function assertAbsent($path) { - if (ftell($resource) !== 0 && stream_get_meta_data($resource)['seekable']) { - rewind($resource); + if ($this->config->get('disable_asserts', false) === false && $this->has($path)) { + throw new FileExistsException($path); } } } diff --git a/vendor/league/flysystem/src/FilesystemException.php b/vendor/league/flysystem/src/FilesystemException.php index f9d6018..3121e53 100644 --- a/vendor/league/flysystem/src/FilesystemException.php +++ b/vendor/league/flysystem/src/FilesystemException.php @@ -1,11 +1,7 @@ - */ - private $filesystems = []; + use PluggableTrait; /** - * MountManager constructor. + * @var FilesystemInterface[] + */ + protected $filesystems = []; + + /** + * Constructor. * - * @param array $filesystems + * @param FilesystemInterface[] $filesystems [:prefix => Filesystem,] + * + * @throws InvalidArgumentException */ public function __construct(array $filesystems = []) { $this->mountFilesystems($filesystems); } - public function fileExists(string $location): bool + /** + * Mount filesystems. + * + * @param FilesystemInterface[] $filesystems [:prefix => Filesystem,] + * + * @throws InvalidArgumentException + * + * @return $this + */ + public function mountFilesystems(array $filesystems) { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->fileExists($path); - } catch (UnableToCheckFileExistence $exception) { - throw UnableToCheckFileExistence::forLocation($location, $exception); + foreach ($filesystems as $prefix => $filesystem) { + $this->mountFilesystem($prefix, $filesystem); } - } - public function read(string $location): string - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->read($path); - } catch (UnableToReadFile $exception) { - throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception); - } - } - - public function readStream(string $location) - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->readStream($path); - } catch (UnableToReadFile $exception) { - throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception); - } - } - - public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path, $mountIdentifier] = $this->determineFilesystemAndPath($location); - - return - $filesystem - ->listContents($path, $deep) - ->map( - function (StorageAttributes $attributes) use ($mountIdentifier) { - return $attributes->withPath(sprintf('%s://%s', $mountIdentifier, $attributes->path())); - } - ); - } - - public function lastModified(string $location): int - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->lastModified($path); - } catch (UnableToRetrieveMetadata $exception) { - throw UnableToRetrieveMetadata::lastModified($location, $exception->reason(), $exception); - } - } - - public function fileSize(string $location): int - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->fileSize($path); - } catch (UnableToRetrieveMetadata $exception) { - throw UnableToRetrieveMetadata::fileSize($location, $exception->reason(), $exception); - } - } - - public function mimeType(string $location): string - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->mimeType($path); - } catch (UnableToRetrieveMetadata $exception) { - throw UnableToRetrieveMetadata::mimeType($location, $exception->reason(), $exception); - } - } - - public function visibility(string $location): string - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - return $filesystem->visibility($path); - } catch (UnableToRetrieveMetadata $exception) { - throw UnableToRetrieveMetadata::visibility($location, $exception->reason(), $exception); - } - } - - public function write(string $location, string $contents, array $config = []): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - $filesystem->write($path, $contents, $config); - } catch (UnableToWriteFile $exception) { - throw UnableToWriteFile::atLocation($location, $exception->reason(), $exception); - } - } - - public function writeStream(string $location, $contents, array $config = []): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - $filesystem->writeStream($path, $contents, $config); - } - - public function setVisibility(string $path, string $visibility): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($path); - $filesystem->setVisibility($path, $visibility); - } - - public function delete(string $location): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - $filesystem->delete($path); - } catch (UnableToDeleteFile $exception) { - throw UnableToDeleteFile::atLocation($location, '', $exception); - } - } - - public function deleteDirectory(string $location): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - $filesystem->deleteDirectory($path); - } catch (UnableToDeleteDirectory $exception) { - throw UnableToDeleteDirectory::atLocation($location, '', $exception); - } - } - - public function createDirectory(string $location, array $config = []): void - { - /** @var FilesystemOperator $filesystem */ - [$filesystem, $path] = $this->determineFilesystemAndPath($location); - - try { - $filesystem->createDirectory($path, $config); - } catch (UnableToCreateDirectory $exception) { - throw UnableToCreateDirectory::dueToFailure($location, $exception); - } - } - - public function move(string $source, string $destination, array $config = []): void - { - /** @var FilesystemOperator $sourceFilesystem */ - /* @var FilesystemOperator $destinationFilesystem */ - [$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source); - [$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination); - - $sourceFilesystem === $destinationFilesystem ? $this->moveInTheSameFilesystem( - $sourceFilesystem, - $sourcePath, - $destinationPath, - $source, - $destination - ) : $this->moveAcrossFilesystems($source, $destination); - } - - public function copy(string $source, string $destination, array $config = []): void - { - /** @var FilesystemOperator $sourceFilesystem */ - /* @var FilesystemOperator $destinationFilesystem */ - [$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source); - [$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination); - - $sourceFilesystem === $destinationFilesystem ? $this->copyInSameFilesystem( - $sourceFilesystem, - $sourcePath, - $destinationPath, - $source, - $destination - ) : $this->copyAcrossFilesystem( - $config['visibility'] ?? null, - $sourceFilesystem, - $sourcePath, - $destinationFilesystem, - $destinationPath, - $source, - $destination - ); - } - - private function mountFilesystems(array $filesystems): void - { - foreach ($filesystems as $key => $filesystem) { - $this->guardAgainstInvalidMount($key, $filesystem); - /* @var string $key */ - /* @var FilesystemOperator $filesystem */ - $this->mountFilesystem($key, $filesystem); - } + return $this; } /** - * @param mixed $key - * @param mixed $filesystem + * Mount filesystems. + * + * @param string $prefix + * @param FilesystemInterface $filesystem + * + * @throws InvalidArgumentException + * + * @return $this */ - private function guardAgainstInvalidMount($key, $filesystem): void + public function mountFilesystem($prefix, FilesystemInterface $filesystem) { - if ( ! is_string($key)) { - throw UnableToMountFilesystem::becauseTheKeyIsNotValid($key); + if ( ! is_string($prefix)) { + throw new InvalidArgumentException(__METHOD__ . ' expects argument #1 to be a string.'); } - if ( ! $filesystem instanceof FilesystemOperator) { - throw UnableToMountFilesystem::becauseTheFilesystemWasNotValid($filesystem); - } + $this->filesystems[$prefix] = $filesystem; + + return $this; } - private function mountFilesystem(string $key, FilesystemOperator $filesystem): void + /** + * Get the filesystem with the corresponding prefix. + * + * @param string $prefix + * + * @throws FilesystemNotFoundException + * + * @return FilesystemInterface + */ + public function getFilesystem($prefix) { - $this->filesystems[$key] = $filesystem; + if ( ! isset($this->filesystems[$prefix])) { + throw new FilesystemNotFoundException('No filesystem mounted with prefix ' . $prefix); + } + + return $this->filesystems[$prefix]; + } + + /** + * Retrieve the prefix from an arguments array. + * + * @param array $arguments + * + * @throws InvalidArgumentException + * + * @return array [:prefix, :arguments] + */ + public function filterPrefix(array $arguments) + { + if (empty($arguments)) { + throw new InvalidArgumentException('At least one argument needed'); + } + + $path = array_shift($arguments); + + if ( ! is_string($path)) { + throw new InvalidArgumentException('First argument should be a string'); + } + + list($prefix, $path) = $this->getPrefixAndPath($path); + array_unshift($arguments, $path); + + return [$prefix, $arguments]; + } + + /** + * @param string $directory + * @param bool $recursive + * + * @throws InvalidArgumentException + * @throws FilesystemNotFoundException + * + * @return array + */ + public function listContents($directory = '', $recursive = false) + { + list($prefix, $directory) = $this->getPrefixAndPath($directory); + $filesystem = $this->getFilesystem($prefix); + $result = $filesystem->listContents($directory, $recursive); + + foreach ($result as &$file) { + $file['filesystem'] = $prefix; + } + + return $result; + } + + /** + * Call forwarder. + * + * @param string $method + * @param array $arguments + * + * @throws InvalidArgumentException + * @throws FilesystemNotFoundException + * + * @return mixed + */ + public function __call($method, $arguments) + { + list($prefix, $arguments) = $this->filterPrefix($arguments); + + return $this->invokePluginOnFilesystem($method, $arguments, $prefix); + } + + /** + * @param string $from + * @param string $to + * @param array $config + * + * @throws InvalidArgumentException + * @throws FilesystemNotFoundException + * @throws FileExistsException + * + * @return bool + */ + public function copy($from, $to, array $config = []) + { + list($prefixFrom, $from) = $this->getPrefixAndPath($from); + + $buffer = $this->getFilesystem($prefixFrom)->readStream($from); + + if ($buffer === false) { + return false; + } + + list($prefixTo, $to) = $this->getPrefixAndPath($to); + + $result = $this->getFilesystem($prefixTo)->writeStream($to, $buffer, $config); + + if (is_resource($buffer)) { + fclose($buffer); + } + + return $result; + } + + /** + * List with plugin adapter. + * + * @param array $keys + * @param string $directory + * @param bool $recursive + * + * @throws InvalidArgumentException + * @throws FilesystemNotFoundException + * + * @return array + */ + public function listWith(array $keys = [], $directory = '', $recursive = false) + { + list($prefix, $directory) = $this->getPrefixAndPath($directory); + $arguments = [$keys, $directory, $recursive]; + + return $this->invokePluginOnFilesystem('listWith', $arguments, $prefix); + } + + /** + * Move a file. + * + * @param string $from + * @param string $to + * @param array $config + * + * @throws InvalidArgumentException + * @throws FilesystemNotFoundException + * + * @return bool + */ + public function move($from, $to, array $config = []) + { + list($prefixFrom, $pathFrom) = $this->getPrefixAndPath($from); + list($prefixTo, $pathTo) = $this->getPrefixAndPath($to); + + if ($prefixFrom === $prefixTo) { + $filesystem = $this->getFilesystem($prefixFrom); + $renamed = $filesystem->rename($pathFrom, $pathTo); + + if ($renamed && isset($config['visibility'])) { + return $filesystem->setVisibility($pathTo, $config['visibility']); + } + + return $renamed; + } + + $copied = $this->copy($from, $to, $config); + + if ($copied) { + return $this->delete($from); + } + + return false; + } + + /** + * Invoke a plugin on a filesystem mounted on a given prefix. + * + * @param string $method + * @param array $arguments + * @param string $prefix + * + * @throws FilesystemNotFoundException + * + * @return mixed + */ + public function invokePluginOnFilesystem($method, $arguments, $prefix) + { + $filesystem = $this->getFilesystem($prefix); + + try { + return $this->invokePlugin($method, $arguments, $filesystem); + } catch (PluginNotFoundException $e) { + // Let it pass, it's ok, don't panic. + } + + $callback = [$filesystem, $method]; + + return call_user_func_array($callback, $arguments); } /** * @param string $path * - * @return array{0:FilesystemOperator, 1:string} + * @throws InvalidArgumentException + * + * @return string[] [:prefix, :path] */ - private function determineFilesystemAndPath(string $path): array + protected function getPrefixAndPath($path) { if (strpos($path, '://') < 1) { - throw UnableToResolveFilesystemMount::becauseTheSeparatorIsMissing($path); + throw new InvalidArgumentException('No prefix detected in path: ' . $path); } - /** @var string $mountIdentifier */ - /** @var string $mountPath */ - [$mountIdentifier, $mountPath] = explode('://', $path, 2); - - if ( ! array_key_exists($mountIdentifier, $this->filesystems)) { - throw UnableToResolveFilesystemMount::becauseTheMountWasNotRegistered($mountIdentifier); - } - - return [$this->filesystems[$mountIdentifier], $mountPath, $mountIdentifier]; + return explode('://', $path, 2); } - private function copyInSameFilesystem( - FilesystemOperator $sourceFilesystem, - string $sourcePath, - string $destinationPath, - string $source, - string $destination - ): void { - try { - $sourceFilesystem->copy($sourcePath, $destinationPath); - } catch (UnableToCopyFile $exception) { - throw UnableToCopyFile::fromLocationTo($source, $destination, $exception); - } - } - - private function copyAcrossFilesystem( - ?string $visibility, - FilesystemOperator $sourceFilesystem, - string $sourcePath, - FilesystemOperator $destinationFilesystem, - string $destinationPath, - string $source, - string $destination - ): void { - try { - $visibility = $visibility ?? $sourceFilesystem->visibility($sourcePath); - $stream = $sourceFilesystem->readStream($sourcePath); - $destinationFilesystem->writeStream($destinationPath, $stream, compact('visibility')); - } catch (UnableToRetrieveMetadata | UnableToReadFile | UnableToWriteFile $exception) { - throw UnableToCopyFile::fromLocationTo($source, $destination, $exception); - } - } - - private function moveInTheSameFilesystem( - FilesystemOperator $sourceFilesystem, - string $sourcePath, - string $destinationPath, - string $source, - string $destination - ): void { - try { - $sourceFilesystem->move($sourcePath, $destinationPath); - } catch (UnableToMoveFile $exception) { - throw UnableToMoveFile::fromLocationTo($source, $destination, $exception); - } - } - - private function moveAcrossFilesystems(string $source, string $destination): void + /** + * Check whether a file exists. + * + * @param string $path + * + * @return bool + */ + public function has($path) { - try { - $this->copy($source, $destination); - $this->delete($source); - } catch (UnableToCopyFile | UnableToDeleteFile $exception) { - throw UnableToMoveFile::fromLocationTo($source, $destination, $exception); - } + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->has($path); + } + + /** + * Read a file. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return string|false The file contents or false on failure. + */ + public function read($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->read($path); + } + + /** + * Retrieves a read-stream for a path. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return resource|false The path resource or false on failure. + */ + public function readStream($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->readStream($path); + } + + /** + * Get a file's metadata. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return array|false The file metadata or false on failure. + */ + public function getMetadata($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->getMetadata($path); + } + + /** + * Get a file's size. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return int|false The file size or false on failure. + */ + public function getSize($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->getSize($path); + } + + /** + * Get a file's mime-type. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return string|false The file mime-type or false on failure. + */ + public function getMimetype($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->getMimetype($path); + } + + /** + * Get a file's timestamp. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return string|false The timestamp or false on failure. + */ + public function getTimestamp($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->getTimestamp($path); + } + + /** + * Get a file's visibility. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return string|false The visibility (public|private) or false on failure. + */ + public function getVisibility($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->getVisibility($path); + } + + /** + * Write a new file. + * + * @param string $path The path of the new file. + * @param string $contents The file contents. + * @param array $config An optional configuration array. + * + * @throws FileExistsException + * + * @return bool True on success, false on failure. + */ + public function write($path, $contents, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->write($path, $contents, $config); + } + + /** + * Write a new file using a stream. + * + * @param string $path The path of the new file. + * @param resource $resource The file handle. + * @param array $config An optional configuration array. + * + * @throws InvalidArgumentException If $resource is not a file handle. + * @throws FileExistsException + * + * @return bool True on success, false on failure. + */ + public function writeStream($path, $resource, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->writeStream($path, $resource, $config); + } + + /** + * Update an existing file. + * + * @param string $path The path of the existing file. + * @param string $contents The file contents. + * @param array $config An optional configuration array. + * + * @throws FileNotFoundException + * + * @return bool True on success, false on failure. + */ + public function update($path, $contents, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->update($path, $contents, $config); + } + + /** + * Update an existing file using a stream. + * + * @param string $path The path of the existing file. + * @param resource $resource The file handle. + * @param array $config An optional configuration array. + * + * @throws InvalidArgumentException If $resource is not a file handle. + * @throws FileNotFoundException + * + * @return bool True on success, false on failure. + */ + public function updateStream($path, $resource, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->updateStream($path, $resource, $config); + } + + /** + * Rename a file. + * + * @param string $path Path to the existing file. + * @param string $newpath The new path of the file. + * + * @throws FileExistsException Thrown if $newpath exists. + * @throws FileNotFoundException Thrown if $path does not exist. + * + * @return bool True on success, false on failure. + */ + public function rename($path, $newpath) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->rename($path, $newpath); + } + + /** + * Delete a file. + * + * @param string $path + * + * @throws FileNotFoundException + * + * @return bool True on success, false on failure. + */ + public function delete($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->delete($path); + } + + /** + * Delete a directory. + * + * @param string $dirname + * + * @throws RootViolationException Thrown if $dirname is empty. + * + * @return bool True on success, false on failure. + */ + public function deleteDir($dirname) + { + list($prefix, $dirname) = $this->getPrefixAndPath($dirname); + + return $this->getFilesystem($prefix)->deleteDir($dirname); + } + + /** + * Create a directory. + * + * @param string $dirname The name of the new directory. + * @param array $config An optional configuration array. + * + * @return bool True on success, false on failure. + */ + public function createDir($dirname, array $config = []) + { + list($prefix, $dirname) = $this->getPrefixAndPath($dirname); + + return $this->getFilesystem($prefix)->createDir($dirname); + } + + /** + * Set the visibility for a file. + * + * @param string $path The path to the file. + * @param string $visibility One of 'public' or 'private'. + * + * @throws FileNotFoundException + * + * @return bool True on success, false on failure. + */ + public function setVisibility($path, $visibility) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->setVisibility($path, $visibility); + } + + /** + * Create a file or update if exists. + * + * @param string $path The path to the file. + * @param string $contents The file contents. + * @param array $config An optional configuration array. + * + * @return bool True on success, false on failure. + */ + public function put($path, $contents, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->put($path, $contents, $config); + } + + /** + * Create a file or update if exists. + * + * @param string $path The path to the file. + * @param resource $resource The file handle. + * @param array $config An optional configuration array. + * + * @throws InvalidArgumentException Thrown if $resource is not a resource. + * + * @return bool True on success, false on failure. + */ + public function putStream($path, $resource, array $config = []) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->putStream($path, $resource, $config); + } + + /** + * Read and delete a file. + * + * @param string $path The path to the file. + * + * @throws FileNotFoundException + * + * @return string|false The file contents, or false on failure. + */ + public function readAndDelete($path) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->readAndDelete($path); + } + + /** + * Get a file/directory handler. + * + * @deprecated + * + * @param string $path The path to the file. + * @param Handler $handler An optional existing handler to populate. + * + * @return Handler Either a file or directory handler. + */ + public function get($path, Handler $handler = null) + { + list($prefix, $path) = $this->getPrefixAndPath($path); + + return $this->getFilesystem($prefix)->get($path); } } diff --git a/vendor/phpmailer/phpmailer/VERSION b/vendor/phpmailer/phpmailer/VERSION index 653877f..a08b5f1 100644 --- a/vendor/phpmailer/phpmailer/VERSION +++ b/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.6.5 \ No newline at end of file +6.6.4 \ No newline at end of file diff --git a/vendor/phpmailer/phpmailer/composer.json b/vendor/phpmailer/phpmailer/composer.json index 9275fab..1db6f03 100644 --- a/vendor/phpmailer/phpmailer/composer.json +++ b/vendor/phpmailer/phpmailer/composer.json @@ -51,7 +51,7 @@ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", "league/oauth2-google": "Needed for Google XOAUTH2 authentication", "psr/log": "For optional PSR-3 debug logging", - "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication", + "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)" }, "autoload": { diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php index 8b7b38a..1edba1d 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php @@ -14,22 +14,16 @@ $PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret. $PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold'; $PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: '; $PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: '; -$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; $PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: '; $PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: '; $PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: '; $PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.'; $PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: '; -$PHPMAILER_LANG['invalid_header'] = 'Ugyldig header navn eller værdi'; -$PHPMAILER_LANG['invalid_hostentry'] = 'Ugyldig hostentry: '; -$PHPMAILER_LANG['invalid_host'] = 'Ugyldig vært: '; $PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.'; $PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere fejlede: '; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: '; $PHPMAILER_LANG['signing'] = 'Signeringsfejl: '; -$PHPMAILER_LANG['smtp_code'] = 'SMTP kode: '; -$PHPMAILER_LANG['smtp_code_ex'] = 'Yderligere SMTP info: '; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.'; -$PHPMAILER_LANG['smtp_detail'] = 'Detalje: '; $PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: '; $PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: '; +$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: '; diff --git a/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php b/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php index b0469fd..23caa71 100644 --- a/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php +++ b/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php @@ -9,18 +9,19 @@ $PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzi $PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.'; $PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.'; $PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.'; -$PHPMAILER_LANG['encoding'] = 'Błędny sposób kodowania znaków: '; +$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: '; $PHPMAILER_LANG['execute'] = 'Nie można uruchomić: '; $PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: '; $PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: '; -$PHPMAILER_LANG['from_failed'] = 'Następujący adres nadawcy jest nieprawidłowy lub nie istnieje: '; +$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: '; $PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.'; -$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . 'następujący adres odbiorcy jest nieprawidłowy lub nie istnieje: '; -$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email odbiorcy.'; +$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . + 'następujący adres Odbiorcy jest nieprawidłowy: '; +$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.'; $PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.'; -$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi lub nie istnieją: '; +$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: '; $PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'Wywołanie funkcji SMTP Connect() zostało zakończone niepowodzeniem.'; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zakończone niepowodzeniem.'; $PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: '; $PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: '; $PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: '; diff --git a/vendor/phpmailer/phpmailer/src/PHPMailer.php b/vendor/phpmailer/phpmailer/src/PHPMailer.php index 7e6c88f..6242454 100644 --- a/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -750,7 +750,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.6.5'; + const VERSION = '6.6.4'; /** * Error severity: message only, continue processing. @@ -1671,7 +1671,7 @@ class PHPMailer return $this->mailSend($this->MIMEHeader, $this->MIMEBody); } } catch (Exception $exc) { - if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) { + if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) { $this->smtp->reset(); } $this->setError($exc->getMessage()); @@ -1863,7 +1863,7 @@ class PHPMailer if (!static::isPermittedPath($path)) { return false; } - $readable = is_file($path); + $readable = file_exists($path); //If not a UNC path (expected to start with \\), check read permission, see #2069 if (strpos($path, '\\\\') !== 0) { $readable = $readable && is_readable($path); @@ -2101,9 +2101,6 @@ class PHPMailer $this->smtp->setDebugLevel($this->SMTPDebug); $this->smtp->setDebugOutput($this->Debugoutput); $this->smtp->setVerp($this->do_verp); - if ($this->Host === null) { - $this->Host = 'localhost'; - } $hosts = explode(';', $this->Host); $lastexception = null; diff --git a/vendor/phpmailer/phpmailer/src/POP3.php b/vendor/phpmailer/phpmailer/src/POP3.php index a3c9f45..78e91e4 100644 --- a/vendor/phpmailer/phpmailer/src/POP3.php +++ b/vendor/phpmailer/phpmailer/src/POP3.php @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.6.5'; + const VERSION = '6.6.4'; /** * Default POP3 port number. diff --git a/vendor/phpmailer/phpmailer/src/SMTP.php b/vendor/phpmailer/phpmailer/src/SMTP.php index 312f753..cc1711d 100644 --- a/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/vendor/phpmailer/phpmailer/src/SMTP.php @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.6.5'; + const VERSION = '6.6.4'; /** * SMTP line break constant. @@ -682,6 +682,7 @@ class SMTP */ public function close() { + $this->setError(''); $this->server_caps = null; $this->helo_rply = null; if (is_resource($this->smtp_conn)) { diff --git a/vendor/services.php b/vendor/services.php index 998fcb3..d78d207 100644 --- a/vendor/services.php +++ b/vendor/services.php @@ -1,5 +1,5 @@ 'taoser\\addons\\Service', diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php index 693749f..bce5c4a 100644 --- a/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -80,7 +80,7 @@ final class Mbstring public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { - if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) { + if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); } else { $fromEncoding = self::getEncoding($fromEncoding); @@ -102,7 +102,7 @@ final class Mbstring $fromEncoding = 'Windows-1252'; } if ('UTF-8' !== $fromEncoding) { - $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s); + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); } return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); @@ -113,7 +113,7 @@ final class Mbstring $fromEncoding = 'UTF-8'; } - return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); } public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) @@ -130,7 +130,7 @@ final class Mbstring public static function mb_decode_mimeheader($s) { - return \iconv_mime_decode($s, 2, self::$internalEncoding); + return iconv_mime_decode($s, 2, self::$internalEncoding); } public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) @@ -140,7 +140,7 @@ final class Mbstring public static function mb_decode_numericentity($s, $convmap, $encoding = null) { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -150,7 +150,7 @@ final class Mbstring return false; } - if (null !== $encoding && !is_scalar($encoding)) { + if (null !== $encoding && !\is_scalar($encoding)) { trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); return ''; // Instead of null (cf. mb_encode_numericentity). @@ -166,10 +166,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } $cnt = floor(\count($convmap) / 4) * 4; @@ -195,12 +195,12 @@ final class Mbstring return $s; } - return \iconv('UTF-8', $encoding.'//IGNORE', $s); + return iconv('UTF-8', $encoding.'//IGNORE', $s); } public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -210,13 +210,13 @@ final class Mbstring return false; } - if (null !== $encoding && !is_scalar($encoding)) { + if (null !== $encoding && !\is_scalar($encoding)) { trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; // Instead of '' (cf. mb_decode_numericentity). } - if (null !== $is_hex && !is_scalar($is_hex)) { + if (null !== $is_hex && !\is_scalar($is_hex)) { trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -232,10 +232,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; @@ -265,7 +265,7 @@ final class Mbstring return $result; } - return \iconv('UTF-8', $encoding.'//IGNORE', $result); + return iconv('UTF-8', $encoding.'//IGNORE', $result); } public static function mb_convert_case($s, $mode, $encoding = null) @@ -280,10 +280,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } if (\MB_CASE_TITLE == $mode) { @@ -343,7 +343,7 @@ final class Mbstring return $s; } - return \iconv('UTF-8', $encoding.'//IGNORE', $s); + return iconv('UTF-8', $encoding.'//IGNORE', $s); } public static function mb_internal_encoding($encoding = null) @@ -354,7 +354,7 @@ final class Mbstring $normalizedEncoding = self::getEncoding($encoding); - if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) { + if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) { self::$internalEncoding = $normalizedEncoding; return true; @@ -413,7 +413,7 @@ final class Mbstring $encoding = self::$internalEncoding; } - return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var); + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); } public static function mb_detect_encoding($str, $encodingList = null, $strict = false) @@ -488,7 +488,7 @@ final class Mbstring return \strlen($s); } - return @\iconv_strlen($s, $encoding); + return @iconv_strlen($s, $encoding); } public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) @@ -509,7 +509,7 @@ final class Mbstring return 0; } - return \iconv_strpos($haystack, $needle, $offset, $encoding); + return iconv_strpos($haystack, $needle, $offset, $encoding); } public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) @@ -533,7 +533,7 @@ final class Mbstring } $pos = '' !== $needle || 80000 > \PHP_VERSION_ID - ? \iconv_strrpos($haystack, $needle, $encoding) + ? iconv_strrpos($haystack, $needle, $encoding) : self::mb_strlen($haystack, $encoding); return false !== $pos ? $offset + $pos : false; @@ -541,7 +541,7 @@ final class Mbstring public static function mb_str_split($string, $split_length = 1, $encoding = null) { - if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); return null; @@ -550,6 +550,7 @@ final class Mbstring if (1 > $split_length = (int) $split_length) { if (80000 > \PHP_VERSION_ID) { trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); + return false; } @@ -617,7 +618,7 @@ final class Mbstring } if ($start < 0) { - $start = \iconv_strlen($s, $encoding) + $start; + $start = iconv_strlen($s, $encoding) + $start; if ($start < 0) { $start = 0; } @@ -626,13 +627,13 @@ final class Mbstring if (null === $length) { $length = 2147483647; } elseif ($length < 0) { - $length = \iconv_strlen($s, $encoding) + $length - $start; + $length = iconv_strlen($s, $encoding) + $length - $start; if ($length < 0) { return ''; } } - return (string) \iconv_substr($s, $start, $length, $encoding); + return (string) iconv_substr($s, $start, $length, $encoding); } public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) @@ -657,7 +658,7 @@ final class Mbstring $pos = strrpos($haystack, $needle); } else { $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = \iconv_strrpos($haystack, $needle, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); } return self::getSubpart($pos, $part, $haystack, $encoding); @@ -736,12 +737,12 @@ final class Mbstring $encoding = self::getEncoding($encoding); if ('UTF-8' !== $encoding) { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); - return ($wide << 1) + \iconv_strlen($s, 'UTF-8'); + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); } public static function mb_substr_count($haystack, $needle, $encoding = null) diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json index 9cd2e92..4489553 100644 --- a/vendor/symfony/polyfill-mbstring/composer.json +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -31,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/symfony/polyfill-php72/Php72.php b/vendor/symfony/polyfill-php72/Php72.php index 5e20d5b..7bf96c9 100644 --- a/vendor/symfony/polyfill-php72/Php72.php +++ b/vendor/symfony/polyfill-php72/Php72.php @@ -83,7 +83,7 @@ final class Php72 'SunOS' => 'Solaris', ]; - return isset($map[\PHP_OS]) ? $map[\PHP_OS] : 'Unknown'; + return $map[\PHP_OS] ?? 'Unknown'; } public static function spl_object_id($object) @@ -96,7 +96,7 @@ final class Php72 } // On 32-bit systems, PHP_INT_SIZE is 4, - return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1)); } public static function sapi_windows_vt100_support($stream, $enable = null) @@ -167,7 +167,7 @@ final class Php72 self::$hashMask = (int) substr(ob_get_clean(), 17); } - self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1)); } public static function mb_chr($code, $encoding = null) diff --git a/vendor/symfony/polyfill-php72/composer.json b/vendor/symfony/polyfill-php72/composer.json index 4eac690..5f17af3 100644 --- a/vendor/symfony/polyfill-php72/composer.json +++ b/vendor/symfony/polyfill-php72/composer.json @@ -25,7 +25,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php index 7ea6d27..2b95542 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + #[Attribute(Attribute::TARGET_CLASS)] final class Attribute { diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php index 72f1081..bd1212f 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -1,6 +1,15 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { class PhpToken extends Symfony\Polyfill\Php80\PhpToken { } diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php index 77e037c..7c62d75 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + if (\PHP_VERSION_ID < 80000) { interface Stringable { diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php index 37937cb..01c6c6c 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + if (\PHP_VERSION_ID < 80000) { class UnhandledMatchError extends Error { diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php index a3a9b88..783dbc2 100644 --- a/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +++ b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + if (\PHP_VERSION_ID < 80000) { class ValueError extends Error { diff --git a/vendor/symfony/polyfill-php80/composer.json b/vendor/symfony/polyfill-php80/composer.json index cd3e9b6..bd9a326 100644 --- a/vendor/symfony/polyfill-php80/composer.json +++ b/vendor/symfony/polyfill-php80/composer.json @@ -30,7 +30,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/vendor/symfony/var-dumper/Resources/bin/var-dump-server b/vendor/symfony/var-dumper/Resources/bin/var-dump-server index f398fce..98c813a 100644 --- a/vendor/symfony/var-dumper/Resources/bin/var-dump-server +++ b/vendor/symfony/var-dumper/Resources/bin/var-dump-server @@ -10,10 +10,6 @@ * file that was distributed with this source code. */ -if ('cli' !== PHP_SAPI) { - throw new Exception('This script must be run from the command line.'); -} - /** * Starts a dump server to collect and output dumps on a single place with multiple formats support. * diff --git a/vendor/taoser/think-addons/src/addons/Controller.php b/vendor/taoser/think-addons/src/addons/Controller.php index 987f41a..4985fff 100644 --- a/vendor/taoser/think-addons/src/addons/Controller.php +++ b/vendor/taoser/think-addons/src/addons/Controller.php @@ -15,37 +15,15 @@ class Controller extends BaseController { // app 容器 protected $app; - // 当前插件操作 - protected $addon = null; // 请求对象 protected $request; // 当前插件标识 protected $name; // 插件路径 protected $addon_path; - protected $controller = null; - protected $action = null; // 视图模型 protected $view; - /** - * 无需登录的方法,同时也就不需要鉴权了 - * @var array - */ - protected $noNeedLogin = ['*']; - - /** - * 无需鉴权的方法,但需要登录 - * @var array - */ - protected $noNeedRight = ['*']; - - /** - * 权限Auth - * @var Auth - */ - protected $auth = null; - /** * 插件构造函数 @@ -57,8 +35,6 @@ class Controller extends BaseController $this->app = $app; $this->request = $app->request; $this->name = $this->getName(); - $this->controller = $this->request->controller(); - $this->action = $this->request->action(); $this->addon_path = $app->addons->getAddonsPath() . $this->name . DIRECTORY_SEPARATOR; $this->addon_config = "addon_{$this->name}_config"; $this->addon_info = "addon_{$this->name}_info"; @@ -68,17 +44,12 @@ class Controller extends BaseController ]); // 控制器初始化 - $this->_initialize(); - parent::__construct($app); - + $this->initialize(); } // 初始化 - protected function _initialize() - { - $controller = $this->controller; - $action = $this->action; - } + protected function initialize() + {} /** * 获取插件标识 diff --git a/vendor/taoser/think-addons/src/helper.php b/vendor/taoser/think-addons/src/helper.php index 6646946..b726ddc 100644 --- a/vendor/taoser/think-addons/src/helper.php +++ b/vendor/taoser/think-addons/src/helper.php @@ -284,37 +284,3 @@ if (!function_exists('get_addons_menu')) { } } -if (!function_exists('get_addons_list')) { - /** - * 获得插件列表 - * @return array - */ - function get_addons_list() - { - $list = Cache::get('addonslist'); - if (empty($list)) { - $addonsPath = app()->getRootPath().'addons'.DS; // 插件列表 - $results = scandir($addonsPath); - $list = []; - foreach ($results as $name) { - if ($name === '.' or $name === '..') - continue; - if (is_file($addonsPath . $name)) - continue; - $addonDir = $addonsPath . $name . DS; - if (!is_dir($addonDir)) - continue; - if (!is_file($addonDir . 'Plugin' . '.php')) - continue; - $info = get_addons_info($name); - if (!isset($info['name'])) - continue; - $info['url'] =isset($info['url']) && $info['url'] ?(string)addons_url($info['url']):''; - $list[$name] = $info; - } - Cache::set('addonslist', $list); - } - return $list; - } - -} \ No newline at end of file diff --git a/vendor/topthink/think-filesystem/composer.json b/vendor/topthink/think-filesystem/composer.json index d8a99be..040f4a3 100644 --- a/vendor/topthink/think-filesystem/composer.json +++ b/vendor/topthink/think-filesystem/composer.json @@ -20,8 +20,10 @@ } }, "require": { + "php": ">=7.2.5", "topthink/framework": "^6.1", - "league/flysystem": "^2.0" + "league/flysystem": "^1.1.4", + "league/flysystem-cached-adapter": "^1.0" }, "require-dev": { "mikey179/vfsstream": "^1.6", diff --git a/vendor/topthink/think-filesystem/src/filesystem/CacheStore.php b/vendor/topthink/think-filesystem/src/filesystem/CacheStore.php new file mode 100644 index 0000000..0a62399 --- /dev/null +++ b/vendor/topthink/think-filesystem/src/filesystem/CacheStore.php @@ -0,0 +1,54 @@ + +// +---------------------------------------------------------------------- +declare (strict_types = 1); + +namespace think\filesystem; + +use League\Flysystem\Cached\Storage\AbstractCache; +use Psr\SimpleCache\CacheInterface; + +class CacheStore extends AbstractCache +{ + protected $store; + + protected $key; + + protected $expire; + + public function __construct(CacheInterface $store, $key = 'flysystem', $expire = null) + { + $this->key = $key; + $this->store = $store; + $this->expire = $expire; + } + + /** + * Store the cache. + */ + public function save() + { + $contents = $this->getForStorage(); + + $this->store->set($this->key, $contents, $this->expire); + } + + /** + * Load the cache. + */ + public function load() + { + $contents = $this->store->get($this->key); + + if (!is_null($contents)) { + $this->setFromStorage($contents); + } + } +} diff --git a/vendor/topthink/think-filesystem/src/filesystem/Driver.php b/vendor/topthink/think-filesystem/src/filesystem/Driver.php index dfa19bd..81089b8 100644 --- a/vendor/topthink/think-filesystem/src/filesystem/Driver.php +++ b/vendor/topthink/think-filesystem/src/filesystem/Driver.php @@ -12,10 +12,11 @@ declare (strict_types = 1); namespace think\filesystem; +use League\Flysystem\AdapterInterface; +use League\Flysystem\Adapter\AbstractAdapter; +use League\Flysystem\Cached\CachedAdapter; +use League\Flysystem\Cached\Storage\Memory as MemoryStore; use League\Flysystem\Filesystem; -use League\Flysystem\FilesystemAdapter; -use League\Flysystem\UnableToSetVisibility; -use League\Flysystem\UnableToWriteFile; use RuntimeException; use think\Cache; use think\File; @@ -49,13 +50,30 @@ abstract class Driver $this->filesystem = $this->createFilesystem($adapter); } - abstract protected function createAdapter(): FilesystemAdapter; - - protected function createFilesystem(FilesystemAdapter $adapter): Filesystem + protected function createCacheStore($config) { + if (true === $config) { + return new MemoryStore; + } + + return new CacheStore( + $this->cache->store($config['store']), + $config['prefix'] ?? 'flysystem', + $config['expire'] ?? null + ); + } + + abstract protected function createAdapter(): AdapterInterface; + + protected function createFilesystem(AdapterInterface $adapter): Filesystem + { + if (!empty($this->config['cache'])) { + $adapter = new CachedAdapter($adapter, $this->createCacheStore($this->config['cache'])); + } + $config = array_intersect_key($this->config, array_flip(['visibility', 'disable_asserts', 'url'])); - return new Filesystem($adapter, count($config) > 0 ? $config : null); + return new Filesystem($adapter, count($config) > 0 ? $config : []); } /** @@ -65,6 +83,12 @@ abstract class Driver */ public function path(string $path): string { + $adapter = $this->filesystem->getAdapter(); + + if ($adapter instanceof AbstractAdapter) { + return $adapter->applyPathPrefix($path); + } + return $path; } @@ -80,10 +104,10 @@ abstract class Driver /** * 保存文件 - * @param string $path 路径 - * @param File $file 文件 - * @param null|string|\Closure $rule 文件名规则 - * @param array $options 参数 + * @param string $path 路径 + * @param File $file 文件 + * @param null|string|\Closure $rule 文件名规则 + * @param array $options 参数 * @return bool|string */ public function putFile(string $path, File $file, $rule = null, array $options = []) @@ -93,10 +117,10 @@ abstract class Driver /** * 指定文件名保存文件 - * @param string $path 路径 - * @param File $file 文件 - * @param string $name 文件名 - * @param array $options 参数 + * @param string $path 路径 + * @param File $file 文件 + * @param string $name 文件名 + * @param array $options 参数 * @return bool|string */ public function putFileAs(string $path, File $file, string $name, array $options = []) @@ -104,7 +128,7 @@ abstract class Driver $stream = fopen($file->getRealPath(), 'r'); $path = trim($path . '/' . $name, '/'); - $result = $this->put($path, $stream, $options); + $result = $this->putStream($path, $stream, $options); if (is_resource($stream)) { fclose($stream); @@ -113,16 +137,6 @@ abstract class Driver return $result ? $path : false; } - protected function put(string $path, $contents, array $options = []) - { - try { - $this->writeStream($path, $contents, $options); - } catch (UnableToWriteFile|UnableToSetVisibility $e) { - return false; - } - return true; - } - public function __call($method, $parameters) { return $this->filesystem->$method(...$parameters); diff --git a/vendor/topthink/think-filesystem/src/filesystem/driver/Local.php b/vendor/topthink/think-filesystem/src/filesystem/driver/Local.php index 3b1b64d..5749335 100644 --- a/vendor/topthink/think-filesystem/src/filesystem/driver/Local.php +++ b/vendor/topthink/think-filesystem/src/filesystem/driver/Local.php @@ -12,13 +12,8 @@ declare (strict_types = 1); namespace think\filesystem\driver; -use League\Flysystem\FilesystemAdapter; -use League\Flysystem\Local\LocalFilesystemAdapter; -use League\Flysystem\PathNormalizer; -use League\Flysystem\PathPrefixer; -use League\Flysystem\UnixVisibility\PortableVisibilityConverter; -use League\Flysystem\Visibility; -use League\Flysystem\WhitespacePathNormalizer; +use League\Flysystem\AdapterInterface; +use League\Flysystem\Adapter\Local as LocalAdapter; use think\filesystem\Driver; class Local extends Driver @@ -31,51 +26,22 @@ class Local extends Driver 'root' => '', ]; - /** - * @var PathPrefixer - */ - protected $prefixer; - - /** - * @var PathNormalizer - */ - protected $normalizer; - - protected function createAdapter(): FilesystemAdapter + protected function createAdapter(): AdapterInterface { - $visibility = PortableVisibilityConverter::fromArray( - $this->config['permissions'] ?? [], - $this->config['visibility'] ?? Visibility::PRIVATE - ); + $permissions = $this->config['permissions'] ?? []; $links = ($this->config['links'] ?? null) === 'skip' - ? LocalFilesystemAdapter::SKIP_LINKS - : LocalFilesystemAdapter::DISALLOW_LINKS; + ? LocalAdapter::SKIP_LINKS + : LocalAdapter::DISALLOW_LINKS; - return new LocalFilesystemAdapter( + return new LocalAdapter( $this->config['root'], - $visibility, - $this->config['lock'] ?? LOCK_EX, - $links + LOCK_EX, + $links, + $permissions ); } - protected function prefixer() - { - if (!$this->prefixer) { - $this->prefixer = new PathPrefixer($this->config['root'], DIRECTORY_SEPARATOR); - } - return $this->prefixer; - } - - protected function normalizer() - { - if (!$this->normalizer) { - $this->normalizer = new WhitespacePathNormalizer(); - } - return $this->normalizer; - } - /** * 获取文件访问地址 * @param string $path 文件路径 @@ -83,16 +49,11 @@ class Local extends Driver */ public function url(string $path): string { - $path = $this->normalizer()->normalizePath($path); + $path = str_replace('\\', '/', $path); if (isset($this->config['url'])) { return $this->concatPathToUrl($this->config['url'], $path); } return parent::url($path); } - - public function path(string $path): string - { - return $this->prefixer()->prefixPath($path); - } } diff --git a/vendor/topthink/think-filesystem/tests/FilesystemTest.php b/vendor/topthink/think-filesystem/tests/FilesystemTest.php index cc9d94e..a589771 100644 --- a/vendor/topthink/think-filesystem/tests/FilesystemTest.php +++ b/vendor/topthink/think-filesystem/tests/FilesystemTest.php @@ -2,15 +2,20 @@ namespace think\tests; +use League\Flysystem\Adapter\NullAdapter; +use League\Flysystem\AdapterInterface; use Mockery as m; use Mockery\MockInterface; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamDirectory; use PHPUnit\Framework\TestCase; use think\App; +use think\Cache; +use think\cache\driver\File; use think\Config; use think\Container; use think\Filesystem; +use think\filesystem\Driver; use think\filesystem\driver\Local; class FilesystemTest extends TestCase @@ -62,5 +67,65 @@ class FilesystemTest extends TestCase $this->assertInstanceOf(Local::class, $this->filesystem->disk('foo')); } + public function testCache() + { + $this->config->shouldReceive('get')->with('filesystem.disks.local', null)->andReturn([ + 'type' => 'local', + 'root' => $this->root->url(), + 'cache' => true, + ]); + + $this->assertInstanceOf(Local::class, $this->filesystem->disk()); + + $this->config->shouldReceive('get')->with('filesystem.disks.cache', null)->andReturn([ + 'type' => NullDriver::class, + 'root' => $this->root->url(), + 'cache' => [ + 'store' => 'flysystem', + ], + ]); + + $cache = m::mock(Cache::class); + + $cacheDriver = m::mock(File::class); + + $cache->shouldReceive('store')->once()->with('flysystem')->andReturn($cacheDriver); + + $this->app->shouldReceive('make')->with(Cache::class)->andReturn($cache); + + $cacheDriver->shouldReceive('get')->with('flysystem')->once()->andReturn(null); + + $cacheDriver->shouldReceive('set')->withAnyArgs(); + + $this->filesystem->disk('cache')->put('test.txt', 'aa'); + } + + public function testPutFile() + { + $root = vfsStream::setup('rootDir', null, [ + 'foo.jpg' => 'hello', + ]); + + $this->config->shouldReceive('get')->with('filesystem.disks.local', null)->andReturn([ + 'type' => NullDriver::class, + 'root' => $root->url(), + 'cache' => true, + ]); + + $file = m::mock(\think\File::class); + + $file->shouldReceive('hashName')->with(null)->once()->andReturn('foo.jpg'); + + $file->shouldReceive('getRealPath')->once()->andReturn($root->getChild('foo.jpg')->url()); + + $this->filesystem->putFile('test', $file); + } } +class NullDriver extends Driver +{ + protected function createAdapter(): AdapterInterface + { + return new NullAdapter(); + } +} diff --git a/vendor/topthink/think-migration/composer.json b/vendor/topthink/think-migration/composer.json index 78af31f..34b1339 100644 --- a/vendor/topthink/think-migration/composer.json +++ b/vendor/topthink/think-migration/composer.json @@ -21,7 +21,7 @@ } }, "require": { - "topthink/framework": "^6.0", + "topthink/framework": "^6.0.0", "topthink/think-helper": "^3.0.3" }, "minimum-stability": "dev", diff --git a/vendor/topthink/think-migration/src/FactoryBuilder.php b/vendor/topthink/think-migration/src/FactoryBuilder.php index a72b07e..d192ba1 100644 --- a/vendor/topthink/think-migration/src/FactoryBuilder.php +++ b/vendor/topthink/think-migration/src/FactoryBuilder.php @@ -85,11 +85,11 @@ class FactoryBuilder * * @param string $class * @param string $name - * @param array $definitions - * @param array $states - * @param array $afterMaking - * @param array $afterCreating - * @param Faker $faker + * @param array $definitions + * @param array $states + * @param array $afterMaking + * @param array $afterCreating + * @param Faker $faker * @return void */ public function __construct($class, $name, array $definitions, array $states, @@ -283,12 +283,9 @@ class FactoryBuilder */ protected function makeInstance(array $attributes = []) { - /** @var Model $model */ - $model = new $this->class; - - $model->setAttrs($this->getRawAttributes($attributes)); - - return $model; + return new $this->class( + $this->getRawAttributes($attributes) + ); } /** @@ -322,7 +319,7 @@ class FactoryBuilder * Get the state attributes. * * @param string $state - * @param array $attributes + * @param array $attributes * @return array */ protected function stateAttributes($state, array $attributes) @@ -389,7 +386,7 @@ class FactoryBuilder /** * Call after callbacks for each model and state. * - * @param array $afterCallbacks + * @param array $afterCallbacks * @param Collection $models * @return void */ @@ -407,8 +404,8 @@ class FactoryBuilder /** * Call after callbacks for each model and state. * - * @param array $afterCallbacks - * @param Model $model + * @param array $afterCallbacks + * @param Model $model * @param string $state * @return void */ diff --git a/vendor/topthink/think-migration/src/Seeder.php b/vendor/topthink/think-migration/src/Seeder.php index 4b5f7f2..a1c46db 100644 --- a/vendor/topthink/think-migration/src/Seeder.php +++ b/vendor/topthink/think-migration/src/Seeder.php @@ -14,11 +14,5 @@ use Phinx\Seed\AbstractSeed; class Seeder extends AbstractSeed { - /** - * @return Factory - */ - public function factory() - { - return app(Factory::class); - } + } diff --git a/vendor/topthink/think-migration/src/command/factory/Create.php b/vendor/topthink/think-migration/src/command/factory/Create.php index a7b4684..3db6497 100644 --- a/vendor/topthink/think-migration/src/command/factory/Create.php +++ b/vendor/topthink/think-migration/src/command/factory/Create.php @@ -26,7 +26,7 @@ class Create extends Command ->addArgument('name', InputArgument::REQUIRED, 'What is the name of the model?'); } - public function handle() + protected function handle() { $path = $this->getPath(); diff --git a/vendor/topthink/think-migration/src/command/migrate/Status.php b/vendor/topthink/think-migration/src/command/migrate/Status.php index ccf424a..1b5f8d4 100644 --- a/vendor/topthink/think-migration/src/command/migrate/Status.php +++ b/vendor/topthink/think-migration/src/command/migrate/Status.php @@ -74,8 +74,6 @@ EOT $status = ' up '; } else { $status = ' down '; - $version = []; - $version['start_time'] = $version['end_time'] = $version['breakpoint'] = ''; } $maxNameLength = max($maxNameLength, strlen($migration->getName())); diff --git a/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php b/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php index cabd65b..0015a24 100644 --- a/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php +++ b/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php @@ -559,4 +559,23 @@ trait ModelRelationQuery $result->refreshOrigin(); } + /** + * 查询软删除数据 + * @access public + * @return Query + */ + public function withTrashed() + { + return $this->model ? $this->model->queryWithTrashed() : $this; + } + + /** + * 只查询软删除数据 + * @access public + * @return Query + */ + public function onlyTrashed() + { + return $this->model ? $this->model->queryOnlyTrashed() : $this; + } } diff --git a/vendor/topthink/think-orm/src/model/concern/Attribute.php b/vendor/topthink/think-orm/src/model/concern/Attribute.php index b14d25a..897d327 100644 --- a/vendor/topthink/think-orm/src/model/concern/Attribute.php +++ b/vendor/topthink/think-orm/src/model/concern/Attribute.php @@ -383,7 +383,7 @@ trait Attribute } elseif (isset($this->type[$name])) { // 类型转换 $value = $this->writeTransform($value, $this->type[$name]); - } elseif ((array_key_exists($name, $this->origin) || empty($this->origin)) && is_object($value) && method_exists($value, '__toString')) { + } elseif (array_key_exists($name, $this->origin) && is_object($value) && method_exists($value, '__toString')) { // 对象类型 $value = $value->__toString(); } diff --git a/vendor/topthink/think-orm/src/model/concern/SoftDelete.php b/vendor/topthink/think-orm/src/model/concern/SoftDelete.php index b7b1092..117f1ef 100644 --- a/vendor/topthink/think-orm/src/model/concern/SoftDelete.php +++ b/vendor/topthink/think-orm/src/model/concern/SoftDelete.php @@ -18,18 +18,14 @@ use think\Model; /** * 数据软删除 * @mixin Model - * @method $this withTrashed() - * @method $this onlyTrashed() */ trait SoftDelete { - - public function db($scope = []): Query - { - $query = parent::db($scope); - $this->withNoTrashed($query); - return $query; - } + /** + * 是否包含软删除数据 + * @var bool + */ + protected $withTrashed = false; /** * 判断当前实例是否被软删除 @@ -47,18 +43,74 @@ trait SoftDelete return false; } - public function scopeWithTrashed(Query $query) + /** + * 查询软删除数据 + * @access public + * @return Query + */ + public static function withTrashed(): Query { - $query->removeOption('soft_delete'); + $model = new static(); + + return $model->withTrashedData(true)->db(); } - public function scopeOnlyTrashed(Query $query) + /** + * 查询软删除数据 + * @access public + * @return Query + */ + public function queryWithTrashed(): Query + { + return $this->withTrashedData(true)->db(); + } + + /** + * 是否包含软删除数据 + * @access protected + * @param bool $withTrashed 是否包含软删除数据 + * @return $this + */ + protected function withTrashedData(bool $withTrashed) + { + $this->withTrashed = $withTrashed; + return $this; + } + + /** + * 只查询软删除数据 + * @access public + * @return Query + */ + public static function onlyTrashed(): Query + { + $model = new static(); + $field = $model->getDeleteTimeField(true); + + if ($field) { + return $model + ->db() + ->useSoftDelete($field, $model->getWithTrashedExp()); + } + + return $model->db(); + } + + /** + * 只查询软删除数据 + * @access public + * @return Query + */ + public function queryOnlyTrashed(): Query { $field = $this->getDeleteTimeField(true); if ($field) { - $query->useSoftDelete($field, $this->getWithTrashedExp()); + return $this->db() + ->useSoftDelete($field, $this->getWithTrashedExp()); } + + return $this->db(); } /** @@ -87,9 +139,9 @@ trait SoftDelete if ($name && !$force) { // 软删除 - $this->set($name, $this->autoWriteTimestamp()); + $this->set($name, $this->autoWriteTimestamp($name)); - $this->exists()->withEvent(false)->save(); + $result = $this->exists()->withEvent(false)->save(); $this->withEvent(true); } else { @@ -97,7 +149,7 @@ trait SoftDelete $where = $this->getWhere(); // 删除当前模型数据 - $this->db() + $result = $this->db() ->where($where) ->removeOption('soft_delete') ->delete(); @@ -120,8 +172,8 @@ trait SoftDelete /** * 删除记录 * @access public - * @param mixed $data 主键列表 支持闭包查询条件 - * @param bool $force 是否强制删除 + * @param mixed $data 主键列表 支持闭包查询条件 + * @param bool $force 是否强制删除 * @return bool */ public static function destroy($data, bool $force = false): bool @@ -130,20 +182,18 @@ trait SoftDelete if (empty($data) && 0 !== $data) { return false; } - $model = (new static()); - - $query = $model->db(false); - // 仅当强制删除时包含软删除数据 + $model = (new static()); if ($force) { - $query->removeOption('soft_delete'); + $model->withTrashedData(true); } + $query = $model->db(false); if (is_array($data) && key($data) !== 0) { $query->where($data); $data = null; } elseif ($data instanceof \Closure) { - call_user_func_array($data, [&$query]); + call_user_func_array($data, [ & $query]); $data = null; } elseif (is_null($data)) { return false; @@ -152,7 +202,6 @@ trait SoftDelete $resultSet = $query->select($data); foreach ($resultSet as $result) { - /** @var Model $result */ $result->force($force)->delete(); } @@ -162,7 +211,7 @@ trait SoftDelete /** * 恢复被软删除的记录 * @access public - * @param array $where 更新条件 + * @param array $where 更新条件 * @return bool */ public function restore($where = []): bool @@ -194,7 +243,7 @@ trait SoftDelete /** * 获取软删除字段 * @access protected - * @param bool $read 是否查询操作 写操作的时候会自动去掉表别名 + * @param bool $read 是否查询操作 写操作的时候会自动去掉表别名 * @return string|false */ protected function getDeleteTimeField(bool $read = false) @@ -220,7 +269,7 @@ trait SoftDelete /** * 查询的时候默认排除软删除数据 * @access protected - * @param Query $query + * @param Query $query * @return void */ protected function withNoTrashed(Query $query): void diff --git a/vendor/topthink/think-orm/src/model/relation/BelongsTo.php b/vendor/topthink/think-orm/src/model/relation/BelongsTo.php index 741a2e8..dd54f52 100644 --- a/vendor/topthink/think-orm/src/model/relation/BelongsTo.php +++ b/vendor/topthink/think-orm/src/model/relation/BelongsTo.php @@ -241,7 +241,7 @@ class BelongsTo extends OneToOne if (!empty($this->bindAttr)) { // 绑定关联属性 $this->bindAttr($result, $relationModel); - $result->hidden([$relation], true); + $result->hidden([$relation]); } } } @@ -283,7 +283,7 @@ class BelongsTo extends OneToOne if (!empty($this->bindAttr)) { // 绑定关联属性 $this->bindAttr($result, $relationModel); - $result->hidden([$relation], true); + $result->hidden([$relation]); } } diff --git a/vendor/topthink/think-orm/src/model/relation/HasOne.php b/vendor/topthink/think-orm/src/model/relation/HasOne.php index 5e5e501..43f220c 100644 --- a/vendor/topthink/think-orm/src/model/relation/HasOne.php +++ b/vendor/topthink/think-orm/src/model/relation/HasOne.php @@ -240,7 +240,7 @@ class HasOne extends OneToOne if (!empty($this->bindAttr)) { // 绑定关联属性 $this->bindAttr($result, $relationModel); - $result->hidden([$relation], true); + $result->hidden([$relation]); } } } @@ -282,7 +282,7 @@ class HasOne extends OneToOne if (!empty($this->bindAttr)) { // 绑定关联属性 $this->bindAttr($result, $relationModel); - $result->hidden([$relation], true); + $result->hidden([$relation]); } } diff --git a/vendor/topthink/think-orm/src/model/relation/MorphTo.php b/vendor/topthink/think-orm/src/model/relation/MorphTo.php index 74b16c2..f53fe4f 100644 --- a/vendor/topthink/think-orm/src/model/relation/MorphTo.php +++ b/vendor/topthink/think-orm/src/model/relation/MorphTo.php @@ -13,7 +13,6 @@ namespace think\model\relation; use Closure; use think\db\exception\DbException as Exception; -use think\db\Query; use think\helper\Str; use think\Model; use think\model\Relation; @@ -47,16 +46,14 @@ class MorphTo extends Relation */ protected $relation; - protected $queryCaller = []; - /** * 架构函数 * @access public - * @param Model $parent 上级模型对象 - * @param string $morphType 多态字段名 - * @param string $morphKey 外键名 - * @param array $alias 多态别名定义 - * @param ?string $relation 关联名 + * @param Model $parent 上级模型对象 + * @param string $morphType 多态字段名 + * @param string $morphKey 外键名 + * @param array $alias 多态别名定义 + * @param string $relation 关联名 */ public function __construct(Model $parent, string $morphType, string $morphKey, array $alias = [], string $relation = null) { @@ -83,8 +80,8 @@ class MorphTo extends Relation /** * 延迟获取关联数据 * @access public - * @param array $subRelation 子关联名 - * @param ?Closure $closure 闭包查询条件 + * @param array $subRelation 子关联名 + * @param Closure $closure 闭包查询条件 * @return Model */ public function getRelation(array $subRelation = [], Closure $closure = null) @@ -98,7 +95,7 @@ class MorphTo extends Relation // 主键数据 $pk = $this->parent->$morphKey; - $relationModel = $this->buildQuery((new $model)->relation($subRelation))->find($pk); + $relationModel = (new $model)->relation($subRelation)->find($pk); if ($relationModel) { $relationModel->setParent(clone $this->parent); @@ -110,11 +107,11 @@ class MorphTo extends Relation /** * 根据关联条件查询当前模型 * @access public - * @param string $operator 比较操作符 - * @param integer $count 个数 - * @param string $id 关联表的统计字段 - * @param string $joinType JOIN类型 - * @param Query $query Query对象 + * @param string $operator 比较操作符 + * @param integer $count 个数 + * @param string $id 关联表的统计字段 + * @param string $joinType JOIN类型 + * @param Query $query Query对象 * @return Query */ public function has(string $operator = '>=', int $count = 1, string $id = '*', string $joinType = '', Query $query = null) @@ -125,45 +122,22 @@ class MorphTo extends Relation /** * 根据关联条件查询当前模型 * @access public - * @param mixed $where 查询条件(数组或者闭包) - * @param mixed $fields 字段 - * @param string $joinType JOIN类型 - * @param ?Query $query Query对象 + * @param mixed $where 查询条件(数组或者闭包) + * @param mixed $fields 字段 + * @param string $joinType JOIN类型 + * @param Query $query Query对象 * @return Query */ public function hasWhere($where = [], $fields = null, string $joinType = '', Query $query = null) { - $alias = class_basename($this->parent); - - $types = $this->parent->distinct()->column($this->morphType); - - $query = $query ?: $this->parent->db(); - - return $query->alias($alias) - ->where(function (Query $query) use ($types, $where, $alias) { - foreach ($types as $type) { - if ($type) { - $query->whereExists(function (Query $query) use ($type, $where, $alias) { - /** @var Model $model */ - $model = new ($this->parseModel($type)); - - $table = $model->getTable(); - $query - ->table($table) - ->where($alias . '.' . $this->morphType, $type) - ->whereRaw("`{$alias}`.`{$this->morphKey}`=`{$table}`.`{$model->getPk()}`") - ->where($where); - }, 'OR'); - } - } - }); + throw new Exception('relation not support: hasWhere'); } /** * 解析模型的完整命名空间 * @access protected - * @param string $model 模型名(或者完整类名) - * @return Model + * @param string $model 模型名(或者完整类名) + * @return string */ protected function parseModel(string $model): string { @@ -184,7 +158,7 @@ class MorphTo extends Relation /** * 设置多态别名 * @access public - * @param array $alias 别名定义 + * @param array $alias 别名定义 * @return $this */ public function setAlias(array $alias) @@ -199,7 +173,7 @@ class MorphTo extends Relation * @access public * @return $this */ - public function removeOption(string $option = '') + public function removeOption() { return $this; } @@ -207,11 +181,11 @@ class MorphTo extends Relation /** * 预载入关联查询 * @access public - * @param array $resultSet 数据集 - * @param string $relation 当前关联名 - * @param array $subRelation 子关联名 - * @param ?Closure $closure 闭包 - * @param array $cache 关联缓存 + * @param array $resultSet 数据集 + * @param string $relation 当前关联名 + * @param array $subRelation 子关联名 + * @param Closure $closure 闭包 + * @param array $cache 关联缓存 * @return void * @throws Exception */ @@ -237,8 +211,8 @@ class MorphTo extends Relation if (!\is_null($closure)) { $obj = $closure($obj); } - $pk = $obj->getPk(); - $list = $obj->with($subRelation) + $pk = $obj->getPk(); + $list = $obj->with($subRelation) ->cache($cache[0] ?? false, $cache[1] ?? null, $cache[2] ?? null) ->select($val); $data = []; @@ -268,11 +242,11 @@ class MorphTo extends Relation /** * 预载入关联查询 * @access public - * @param Model $result 数据对象 - * @param string $relation 当前关联名 - * @param array $subRelation 子关联名 - * @param ?Closure $closure 闭包 - * @param array $cache 关联缓存 + * @param Model $result 数据对象 + * @param string $relation 当前关联名 + * @param array $subRelation 子关联名 + * @param Closure $closure 闭包 + * @param array $cache 关联缓存 * @return void */ public function eagerlyResult(Model $result, string $relation, array $subRelation = [], Closure $closure = null, array $cache = []): void @@ -286,42 +260,36 @@ class MorphTo extends Relation /** * 关联统计 * @access public - * @param Model $result 数据对象 - * @param ?Closure $closure 闭包 - * @param string $aggregate 聚合查询方法 - * @param string $field 字段 + * @param Model $result 数据对象 + * @param Closure $closure 闭包 + * @param string $aggregate 聚合查询方法 + * @param string $field 字段 * @return integer */ public function relationCount(Model $result, Closure $closure = null, string $aggregate = 'count', string $field = '*') - { - } + {} /** * 多态MorphTo 关联模型预查询 * @access protected - * @param string $model 关联模型对象 - * @param string $relation 关联名 - * @param Model $result - * @param array $subRelation 子关联 - * @param array $cache 关联缓存 + * @param string $model 关联模型对象 + * @param string $relation 关联名 + * @param Model $result + * @param array $subRelation 子关联 + * @param array $cache 关联缓存 * @return void */ protected function eagerlyMorphToOne(string $model, string $relation, Model $result, array $subRelation = [], array $cache = []): void { // 预载入关联查询 支持嵌套预载入 $pk = $this->parent->{$this->morphKey}; + $data = (new $model)->with($subRelation) + ->cache($cache[0] ?? false, $cache[1] ?? null, $cache[2] ?? null) + ->find($pk); - $data = null; - - if(\class_exists($model)){ - $data = (new $model)->with($subRelation) - ->cache($cache[0] ?? false, $cache[1] ?? null, $cache[2] ?? null) - ->find($pk); - - if ($data) { - $data->setParent(clone $result); - $data->exists(true); - } + if ($data) { + $data->setParent(clone $result); + $data->exists(true); } $result->setRelation($relation, $data ?: null); @@ -330,8 +298,8 @@ class MorphTo extends Relation /** * 添加关联数据 * @access public - * @param Model $model 关联模型对象 - * @param string $type 多态类型 + * @param Model $model 关联模型对象 + * @param string $type 多态类型 * @return Model */ public function associate(Model $model, string $type = ''): Model @@ -364,18 +332,4 @@ class MorphTo extends Relation return $this->parent->setRelation($this->relation, null); } - protected function buildQuery(Query $query) - { - foreach ($this->queryCaller as $caller) { - call_user_func_array([$query, $caller[0]], $caller[1]); - } - - return $query; - } - - public function __call($method, $args) - { - $this->queryCaller[] = [$method, $args]; - return $this; - } } diff --git a/vendor/workerman/workerman/Connection/ConnectionInterface.php b/vendor/workerman/workerman/Connection/ConnectionInterface.php index 5d815d8..4d3f5e1 100644 --- a/vendor/workerman/workerman/Connection/ConnectionInterface.php +++ b/vendor/workerman/workerman/Connection/ConnectionInterface.php @@ -16,7 +16,6 @@ namespace Workerman\Connection; /** * ConnectionInterface. */ -#[\AllowDynamicProperties] abstract class ConnectionInterface { /** diff --git a/vendor/workerman/workerman/Worker.php b/vendor/workerman/workerman/Worker.php index f26eaab..738b171 100644 --- a/vendor/workerman/workerman/Worker.php +++ b/vendor/workerman/workerman/Worker.php @@ -26,7 +26,6 @@ use \Exception; * Worker class * A container for listening ports */ -#[\AllowDynamicProperties] class Worker { /** @@ -34,7 +33,7 @@ class Worker * * @var string */ - const VERSION = '4.1.4'; + const VERSION = '4.1.3'; /** * Status starting. @@ -638,18 +637,9 @@ class Worker if (\DIRECTORY_SEPARATOR !== '/') { return; } - $lock_file = static::$pidFile . '.lock'; - $fd = $fd ?: \fopen($lock_file, 'a+'); + $fd = $fd ?: \fopen(static::$pidFile . '.lock', 'a+'); if ($fd) { flock($fd, $flag); - if ($flag === \LOCK_UN) { - fclose($fd); - $fd = null; - clearstatcache(); - if (\is_file($lock_file)) { - unlink($lock_file); - } - } } } diff --git a/vendor/yzh52521/easyhttp/src/Http.php b/vendor/yzh52521/easyhttp/src/Http.php index 1be8dd0..fad314c 100644 --- a/vendor/yzh52521/easyhttp/src/Http.php +++ b/vendor/yzh52521/easyhttp/src/Http.php @@ -47,6 +47,7 @@ namespace yzh52521\EasyHttp; * @method static \yzh52521\EasyHttp\Request headAsync(string $url, array|null $data = null, callable $success = null, callable $fail = null) * @method static \yzh52521\EasyHttp\Request optionsAsync(string $url, array|null $data = null, callable $success = null, callable $fail = null) * @method static \yzh52521\EasyHttp\Request multiAsync(array $promises, callable $success = null, callable $fail = null) + * @method static \yzh52521\EasyHttp\Request wait() */ class Http extends Facade diff --git a/vendor/yzh52521/easyhttp/src/Request.php b/vendor/yzh52521/easyhttp/src/Request.php index da3e519..69f942d 100644 --- a/vendor/yzh52521/easyhttp/src/Request.php +++ b/vendor/yzh52521/easyhttp/src/Request.php @@ -594,6 +594,14 @@ class Request } } + public function wait() + { + if (!empty($this->promises)) { + Promise\settle($this->promises)->wait(); + } + $this->promises = []; + } + protected function response($response) { return new Response( $response ); diff --git a/view/taoler/index/article/shop/.gitignore b/view/taoler/index/article/shop/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/view/taoler/index/article/shop/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/view/taoler/index/article/video/.gitignore b/view/taoler/index/article/video/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/view/taoler/index/article/video/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/view/wcompany/.gitignore b/view/wcompany/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/view/wcompany/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file