修复分类设置
This commit is contained in:
parent
e37fc82280
commit
6d59293477
@ -488,10 +488,10 @@ abstract class BaseController
|
||||
return $upRes;
|
||||
}
|
||||
|
||||
//获取artcile所有图片
|
||||
//获取artcile内容所有图片,返回数组
|
||||
protected function getArticleAllpic($str)
|
||||
{
|
||||
// <img src="http://img.com" />
|
||||
//正则匹配<img src="http://img.com" />
|
||||
$pattern = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
|
||||
preg_match_all($pattern,$str,$matchContent);
|
||||
if(isset($matchContent[1])){
|
||||
@ -505,7 +505,7 @@ abstract class BaseController
|
||||
}
|
||||
|
||||
|
||||
//下载图片
|
||||
//下载远程图片
|
||||
private function downloadImage($url)
|
||||
{
|
||||
$ch = curl_init();
|
||||
@ -520,7 +520,7 @@ abstract class BaseController
|
||||
|
||||
}
|
||||
|
||||
//保存图片
|
||||
//把图片保存到本地
|
||||
private function saveAsImage($url, $file)
|
||||
{
|
||||
$filename = pathinfo($url, PATHINFO_BASENAME);
|
||||
@ -561,19 +561,18 @@ abstract class BaseController
|
||||
$images = $this->getArticleAllpic($content);
|
||||
if(count($images)) {
|
||||
foreach($images as $image){
|
||||
//1.网络图片
|
||||
//halt((stripos($image, Request::domain()) === false));
|
||||
if((stripos($image,'http') !== false) && (stripos($image, Request::domain()) === false)) {
|
||||
|
||||
//2.下载远程图片
|
||||
$newImageUrl = $this->downloadImage($image);
|
||||
|
||||
$content = str_replace($image,Request::domain().$newImageUrl,$content);
|
||||
|
||||
//1.带http地址的图片,2.非本站的网络图片 3.非带有?号等参数的图片
|
||||
if((stripos($image,'http') !== false) && (stripos($image, Request::domain()) === false) && (stripos($image, '?') === false)) {
|
||||
// 如果图片中没有带参数或者加密可下载
|
||||
//下载远程图片(可下载)
|
||||
$newImageUrl = $this->downloadImage($image);
|
||||
//替换图片链接
|
||||
$content = str_replace($image,Request::domain().$newImageUrl,$content);
|
||||
}
|
||||
}
|
||||
//不可下载的图片,如加密或者带有参数的图片如?type=jpeg,直接返回content
|
||||
}
|
||||
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
|
2
app/admin/controller/.gitignore
vendored
2
app/admin/controller/.gitignore
vendored
@ -3,4 +3,6 @@ Version.php
|
||||
TimeLine.php
|
||||
Plugins.php
|
||||
App.php
|
||||
AddonsMarket.php
|
||||
ViewsMarket.php
|
||||
|
||||
|
@ -5,7 +5,6 @@ use app\common\controller\AdminController;
|
||||
use think\facade\View;
|
||||
use think\facade\Db;
|
||||
use think\facade\Request;
|
||||
use think\facade\Cache;
|
||||
use think\facade\Config;
|
||||
use app\admin\model\Addons as AddonsModel;
|
||||
use taoler\com\Files;
|
||||
@ -75,8 +74,9 @@ class Addons extends AdminController
|
||||
['field' => 'price','title'=> '价格(元)'],
|
||||
['field' => 'status','title'=> '状态', 'width'=> 100],
|
||||
['field' => 'install','title'=> '安装', 'width'=> 100],
|
||||
['field' => 'vers','title'=> '版本选择','exportTemplet' => "function(d, obj){console.log(obj) var td = obj.td(this.field); return td.find('select').val();}"],
|
||||
['field' => 'ctime','title'=> '时间', 'width'=> 150],
|
||||
['title' => '操作', 'width'=> 150, 'align'=>'center', 'toolbar'=> '#addons-tool']
|
||||
['title' => '操作', 'width'=> 300, 'align'=>'center', 'toolbar'=> '#addons-tool']
|
||||
];
|
||||
} else {
|
||||
$res = ['code'=>-1,'msg'=>'未获取到服务器信息'];
|
||||
|
@ -164,6 +164,7 @@ class Forum extends AdminController
|
||||
$msg = $addOrEdit ? lang('edit') : lang('add');
|
||||
if(Request::isAjax()) {
|
||||
$data = Request::param();
|
||||
if(isset($data['id']) && $data['pid'] == $data['id']) return json(['code'=>-1,'msg'=> $msg.'不能作为自己的子类']);
|
||||
$list = Db::name('cate')->cache('catename')->save($data);
|
||||
|
||||
if($list){
|
||||
|
1
app/admin/model/.gitignore
vendored
1
app/admin/model/.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
App.php
|
||||
Version.php
|
||||
Plugins.php
|
5
app/admin/view/.gitignore
vendored
5
app/admin/view/.gitignore
vendored
@ -1,4 +1,7 @@
|
||||
/key_auth
|
||||
/time_line
|
||||
/version
|
||||
/plugins
|
||||
/plugins
|
||||
/addons_market
|
||||
/views_market
|
||||
/app
|
@ -4,48 +4,54 @@
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form layui-card-header layuiadmin-card-header-auto">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
插件分类
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<select name="id" lay-filter="LAY-user-adminrole-type">
|
||||
<option value="">全部插件</option>
|
||||
<option value="">支付</option>
|
||||
<option value="">第三方登陆</option>
|
||||
<form class="layui-form layui-card-header layuiadmin-card-header-auto">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-inline">
|
||||
插件分类
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<select name="id" lay-filter="LAY-user-adminrole-type">
|
||||
<option value="">全部插件</option>
|
||||
<option value="">支付</option>
|
||||
<option value="">第三方登陆</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<table id="addons-list" lay-filter="addons-list"></table>
|
||||
|
||||
<script type="text/html" id="toolbar">
|
||||
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="onlineAddons">在线</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="installed">已安装</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="freeAddons">免费</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="payAddons">付费</button>
|
||||
</div>
|
||||
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
||||
<button class="layui-btn layui-btn-sm layuiadmin-btn-admin" data-type="add">离线安装</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="addons-installed-tool">
|
||||
{{# if(d.status == 1){ }}
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="shutdown"><i class="layui-icon layui-icon-pause"></i>禁用</a>
|
||||
{{# } else { }}
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="start"><i class="layui-icon layui-icon-play"></i>启动</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="config"><i class="layui-icon layui-icon-set"></i>设置</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>卸载</a>
|
||||
</script>
|
||||
<script type="text/html" id="addons-tool">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="install"><i class="layui-icon layui-icon-edit"></i>安装</a>
|
||||
<select id="vers{{d.name}}" name="sss" class="layui-border" lay-ignore lay-filter="versSelect">
|
||||
{{# d.vers.forEach(function(item, index){ }}
|
||||
<option value="{{ item }}">{{ item }}</option>
|
||||
{{# }); }}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table id="addons-list" lay-filter="addons-list"></table>
|
||||
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="config"><i class="layui-icon layui-icon-set"></i>设置</a>
|
||||
</script>
|
||||
</form>
|
||||
|
||||
<script type="text/html" id="toolbar">
|
||||
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="onlineAddons">在线</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="installed">已安装</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="freeAddons">免费</button>
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="payAddons">付费</button>
|
||||
</div>
|
||||
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
||||
<button class="layui-btn layui-btn-sm layuiadmin-btn-admin" data-type="add">离线安装</button>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="addons-installed-tool">
|
||||
{{# if(d.status == 1){ }}
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="shutdown"><i class="layui-icon layui-icon-pause"></i>禁用</a>
|
||||
{{# } else { }}
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="start"><i class="layui-icon layui-icon-play"></i>启动</a>
|
||||
{{# } }}
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="config"><i class="layui-icon layui-icon-set"></i>设置</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>卸载</a>
|
||||
</script>
|
||||
|
||||
<script type="text/html" id="addons-tool">
|
||||
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="install"><i class="layui-icon layui-icon-edit"></i>安装</a>
|
||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="config"><i class="layui-icon layui-icon-set"></i>设置</a>
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -72,7 +78,14 @@
|
||||
,table = layui.table
|
||||
,form = layui.form
|
||||
,upload = layui.upload;
|
||||
|
||||
|
||||
form.render('select'); // 渲染所在容器内的 select 元素
|
||||
//监听版本选择
|
||||
form.on('select(versSelect)', function(obj){
|
||||
console.log(111)
|
||||
layer.tips(this.value + ' ' + this.name + ':'+ obj.elem.checked, obj.othis);
|
||||
});
|
||||
|
||||
//事件
|
||||
var active = {
|
||||
add: function(){
|
||||
|
@ -113,7 +113,7 @@ overflow: visible;
|
||||
treeTable.on('tool(Article-cate-list)', function(obj){
|
||||
var data = obj.data;
|
||||
if(obj.event === 'del'){
|
||||
layer.confirm('确定删除此分类?', function(index){
|
||||
layer.confirm('是否删除此分类及分类下内容?', function(index){
|
||||
$.ajax({
|
||||
type:'post',
|
||||
url:forumTagsDelete,
|
||||
|
@ -20,7 +20,7 @@
|
||||
{block name="css"}{/block}
|
||||
<script src="/static/layui/layui.js"></script>
|
||||
</head>
|
||||
<body {if($Request.url == url('index/index'))}class="layui-layout-body"{/if}>
|
||||
<body class="{if($Request.url == url('index/index'))} layui-layout-body {/if}">
|
||||
{block name="body"}内容{/block}
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var AdminLogin = "{:url('Login/index')}",
|
||||
|
@ -30,7 +30,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="layui-nav layui-layout-right" lay-filter="layadmin-layout-right">
|
||||
<li class="layui-nav-item" lay-unselect>
|
||||
<li class="layui-nav-item layui-hide" lay-unselect>
|
||||
<a lay-href="app/message/index.html" layadmin-event="message" lay-text="消息中心">
|
||||
<i class="layui-icon layui-icon-notice"></i>
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
<div class="layui-side layui-side-menu">
|
||||
<div class="layui-side-scroll">
|
||||
<div class="layui-logo" lay-href="home/console.html">
|
||||
<span>TaoLer_Admin</span>
|
||||
<span>TaoLerAdmin</span>
|
||||
</div>
|
||||
|
||||
<ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">
|
||||
|
@ -281,4 +281,22 @@ function getOnepic($str)
|
||||
}
|
||||
|
||||
return $img;
|
||||
}
|
||||
|
||||
//判断蜘蛛函数
|
||||
function find_spider(){
|
||||
$useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : '');
|
||||
$spider_arr=array(
|
||||
'bot',
|
||||
'spider',
|
||||
'slurp',
|
||||
'ia_archiver',
|
||||
);
|
||||
foreach($spider_arr as $spider){
|
||||
$spider = strtolower($spider);
|
||||
if(strstr($useragent,$spider)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
@ -28,7 +28,7 @@ class Article extends Model
|
||||
//文章关联栏目表
|
||||
public function cate()
|
||||
{
|
||||
return $this->belongsTo('Cate','cate_id','id');
|
||||
return $this->belongsTo(Cate::class);
|
||||
}
|
||||
|
||||
//文章关联评论
|
||||
|
@ -19,6 +19,12 @@ class Cate extends Model
|
||||
use SoftDelete;
|
||||
protected $deleteTime = 'delete_time';
|
||||
protected $defaultSoftDelete = 0;
|
||||
|
||||
//关联文章
|
||||
public function article()
|
||||
{
|
||||
return $this->hasMany(Article::class);
|
||||
}
|
||||
|
||||
// 查询类别信息
|
||||
public function getCateInfo(string $ename)
|
||||
@ -30,15 +36,20 @@ class Cate extends Model
|
||||
// 删除类别
|
||||
public function del($id)
|
||||
{
|
||||
$cates = $this->find($id);
|
||||
|
||||
$res = $cates->delete();
|
||||
if($res){
|
||||
return 1;
|
||||
}else{
|
||||
return '删除分类失败';
|
||||
$cates = $this::field('id,pid')->with('article')->find($id);
|
||||
$sonCate = $this::field('id,pid')->where('pid',$cates['id'])->find();
|
||||
if(empty($sonCate)) {
|
||||
$res = $cates->together(['article'])->delete();
|
||||
if($res){
|
||||
return 1;
|
||||
}else{
|
||||
return '删除分类失败';
|
||||
}
|
||||
} else {
|
||||
return '存在子分类,无法删除';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -265,7 +265,7 @@ class Article extends BaseController
|
||||
|
||||
// 处理内容
|
||||
$data['content'] = $this->downUrlPicsReaplace($data['content']);
|
||||
// 把,转换为,并去空格->转为数组->去掉空数组->再转化为带,号的字符串
|
||||
// 把中文,转换为英文,并去空格->转为数组->去掉空数组->再转化为带,号的字符串
|
||||
$data['keywords'] = implode(',',array_filter(explode(',',trim(str_replace(',',',',$data['keywords'])))));
|
||||
|
||||
// 获取分类ename
|
||||
@ -275,6 +275,7 @@ class Article extends BaseController
|
||||
|
||||
$result = $article->add($data);
|
||||
if ($result['code'] == 1) {
|
||||
// 获取到的最新ID
|
||||
$aid = $result['data']['id'];
|
||||
//写入taglist表
|
||||
$tagArr = [];
|
||||
@ -285,8 +286,6 @@ class Article extends BaseController
|
||||
}
|
||||
}
|
||||
Db::name('taglist')->insertAll($tagArr);
|
||||
// 获取到的最新ID
|
||||
//$aid = Db::name('article')->max('id');
|
||||
|
||||
// 清除文章tag缓存
|
||||
Cache::tag('tagArtDetail')->clear();
|
||||
|
@ -273,30 +273,31 @@ INSERT INTO `tao_auth_rule` VALUES ('112', 'Tag/index', 'Tag设置', '', '1', '1
|
||||
-- Table structure for tao_cate
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `tao_cate`;
|
||||
CREATE TABLE `tao_cate` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||
`catename` varchar(20) NOT NULL COMMENT '导航名称',
|
||||
`ename` varchar(20) NOT NULL DEFAULT '' COMMENT '分类别名',
|
||||
`detpl` varchar(20) NOT NULL COMMENT '详情模板',
|
||||
`icon` varchar(50) DEFAULT NULL COMMENT '图标',
|
||||
`sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
|
||||
`status` enum('0','1') NOT NULL DEFAULT '1' COMMENT '状态1启用0禁用',
|
||||
`type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0帖子1文章',
|
||||
`desc` varchar(255) NOT NULL,
|
||||
`is_hot` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否是热点',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`updata_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ename` (`ename`) COMMENT '英文名称索引'
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='分类表';
|
||||
CREATE TABLE `tao_cate` (
|
||||
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||
`pid` smallint NOT NULL DEFAULT 0 COMMENT '上级id',
|
||||
`catename` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '导航名称',
|
||||
`ename` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '分类别名',
|
||||
`detpl` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '详情模板',
|
||||
`icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
|
||||
`sort` int NOT NULL DEFAULT 0 COMMENT '排序',
|
||||
`status` enum('0','1') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '状态1启用0禁用',
|
||||
`type` tinyint(1) NOT NULL DEFAULT 0 COMMENT '0帖子1文章',
|
||||
`desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
`is_hot` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否是热点',
|
||||
`create_time` int NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||
`updata_time` int NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||
`delete_time` int NOT NULL DEFAULT 0 COMMENT '删除时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `ename`(`ename`) USING BTREE COMMENT '英文名称索引'
|
||||
) ENGINE = MyISAM AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '分类表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of tao_cate
|
||||
-- ----------------------------
|
||||
INSERT INTO `tao_cate` VALUES ('1', '提问', 'ask', 'ask', 'layui-icon-help', '1', '1', '0', 'TaoLer社区提问专栏1', '0', '0', '0', '0');
|
||||
INSERT INTO `tao_cate` VALUES ('2', '分享', 'share', 'posts', 'layui-icon-share', '2', '1', '0', '', '0', '0', '0', '0');
|
||||
INSERT INTO `tao_cate` VALUES ('3', '讨论', 'talk', 'posts', 'layui-icon-dialogue', '3', '1', '0', '', '1', '0', '0', '0');
|
||||
INSERT INTO `tao_cate` VALUES (1, 0, '提问', 'ask', 'ask', 'layui-icon-help', 1, '1', 0, 'TaoLer社区提问专栏1', 0, 0, 0, 0);
|
||||
INSERT INTO `tao_cate` VALUES (2, 0, '分享', 'share', 'posts', 'layui-icon-share', 2, '1', 0, '', 0, 0, 0, 0);
|
||||
INSERT INTO `tao_cate` VALUES (3, 0, '讨论', 'talk', 'posts', 'layui-icon-dialogue', 3, '1', 0, '', 1, 0, 0, 0);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for tao_collection
|
||||
|
75
composer.lock
generated
75
composer.lock
generated
@ -109,16 +109,16 @@
|
||||
},
|
||||
{
|
||||
"name": "endroid/qr-code",
|
||||
"version": "4.4.9",
|
||||
"version": "4.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/endroid/qr-code.git",
|
||||
"reference": "bf087fa1e93a1b7310e2d94d187e26ae51db199d"
|
||||
"reference": "36681470bd10352b53bcb9731bdf2270e0d79b22"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/endroid/qr-code/zipball/bf087fa1e93a1b7310e2d94d187e26ae51db199d",
|
||||
"reference": "bf087fa1e93a1b7310e2d94d187e26ae51db199d",
|
||||
"url": "https://api.github.com/repos/endroid/qr-code/zipball/36681470bd10352b53bcb9731bdf2270e0d79b22",
|
||||
"reference": "36681470bd10352b53bcb9731bdf2270e0d79b22",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -169,7 +169,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/endroid/qr-code/issues",
|
||||
"source": "https://github.com/endroid/qr-code/tree/4.4.9"
|
||||
"source": "https://github.com/endroid/qr-code/tree/4.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -177,7 +177,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-10T07:25:08+00:00"
|
||||
"time": "2022-08-21T09:22:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "firebase/php-jwt",
|
||||
@ -323,16 +323,16 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "1.5.1",
|
||||
"version": "1.5.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -387,7 +387,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.1"
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -403,7 +403,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-10-22T20:56:57+00:00"
|
||||
"time": "2022-08-28T14:55:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
@ -517,25 +517,26 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
"version": "v1.2.0",
|
||||
"version": "v1.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/serializable-closure.git",
|
||||
"reference": "09f0e9fb61829f628205b7c94906c28740ff9540"
|
||||
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540",
|
||||
"reference": "09f0e9fb61829f628205b7c94906c28740ff9540",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae",
|
||||
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.3|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"pestphp/pest": "^1.18",
|
||||
"phpstan/phpstan": "^0.12.98",
|
||||
"symfony/var-dumper": "^5.3"
|
||||
"nesbot/carbon": "^2.61",
|
||||
"pestphp/pest": "^1.21.3",
|
||||
"phpstan/phpstan": "^1.8.2",
|
||||
"symfony/var-dumper": "^5.4.11"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
@ -572,7 +573,7 @@
|
||||
"issues": "https://github.com/laravel/serializable-closure/issues",
|
||||
"source": "https://github.com/laravel/serializable-closure"
|
||||
},
|
||||
"time": "2022-05-16T17:09:47+00:00"
|
||||
"time": "2022-09-08T13:45:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
@ -1069,16 +1070,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.6.3",
|
||||
"version": "v6.6.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3"
|
||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1135,7 +1136,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.3"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -1143,7 +1144,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-06-20T09:21:02+00:00"
|
||||
"time": "2022-08-22T09:22:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/cache",
|
||||
@ -2270,20 +2271,20 @@
|
||||
},
|
||||
{
|
||||
"name": "workerman/workerman",
|
||||
"version": "v4.0.42",
|
||||
"version": "v4.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/workerman.git",
|
||||
"reference": "83f09b50eaf7412504604030daa9e1f9c767e6c3"
|
||||
"reference": "88ddf517e5c35bee072b2e453c4fcca0c6f1e59a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/83f09b50eaf7412504604030daa9e1f9c767e6c3",
|
||||
"reference": "83f09b50eaf7412504604030daa9e1f9c767e6c3",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/88ddf517e5c35bee072b2e453c4fcca0c6f1e59a",
|
||||
"reference": "88ddf517e5c35bee072b2e453c4fcca0c6f1e59a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4"
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-event": "For better performance. "
|
||||
@ -2329,20 +2330,20 @@
|
||||
"type": "patreon"
|
||||
}
|
||||
],
|
||||
"time": "2022-07-29T09:06:29+00:00"
|
||||
"time": "2022-08-20T10:16:22+00:00"
|
||||
},
|
||||
{
|
||||
"name": "yansongda/pay",
|
||||
"version": "v3.1.10",
|
||||
"version": "v3.1.12",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/yansongda/pay.git",
|
||||
"reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a"
|
||||
"reference": "7ff004f05f9d6e288ff9b4deef585d30395f37f2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/yansongda/pay/zipball/e02069503b608f2cb8fcb75011cdd0810bbfe88a",
|
||||
"reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a",
|
||||
"url": "https://api.github.com/repos/yansongda/pay/zipball/7ff004f05f9d6e288ff9b4deef585d30395f37f2",
|
||||
"reference": "7ff004f05f9d6e288ff9b4deef585d30395f37f2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2406,7 +2407,7 @@
|
||||
"issues": "https://github.com/yansongda/pay/issues",
|
||||
"source": "https://github.com/yansongda/pay"
|
||||
},
|
||||
"time": "2022-08-09T13:49:29+00:00"
|
||||
"time": "2022-09-03T05:39:21+00:00"
|
||||
},
|
||||
{
|
||||
"name": "yansongda/supports",
|
||||
|
2
public/.gitignore
vendored
2
public/.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
install.lock
|
||||
/home
|
||||
/addons
|
||||
/sys
|
||||
*.xml
|
@ -44,6 +44,8 @@ layui.define(["table", "form", "upload"], function (exports) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
//监听工具条
|
||||
table.on("tool(addons-list)", function (obj) {
|
||||
var data = obj.data;
|
||||
@ -168,6 +170,7 @@ layui.define(["table", "form", "upload"], function (exports) {
|
||||
},
|
||||
});
|
||||
} else if (obj.event === "install") {
|
||||
|
||||
var index = layer.load(1);
|
||||
//安装插件
|
||||
$.post(
|
||||
|
@ -134,7 +134,13 @@ i{font-style: normal;}
|
||||
|
||||
/* 辅助 */
|
||||
a:hover{color: #009688; transition: all .3s;}
|
||||
pre{position: relative; margin: 10px 0; padding: 15px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}
|
||||
/*pre{position: relative; margin: 10px 0; padding: 15px; line-height: 20px; border: 1px solid #ddd; border-left-width: 6px; background-color: #F2F2F2; color: #333; font-family: Courier New; font-size: 12px;}*/
|
||||
pre{overflow-y: auto;
|
||||
background-color: #fdfbfb;
|
||||
border: 0;
|
||||
border-radius: 2px;
|
||||
padding: 1.25rem;
|
||||
margin: 1.5rem 0;}
|
||||
|
||||
.layui-container{padding: 0;}
|
||||
.fly-main{width: 1079px; min-height: 600px; margin: 0 auto 15px;}
|
||||
@ -225,9 +231,6 @@ pre{position: relative; margin: 10px 0; padding: 15px; line-height: 20px; border
|
||||
|
||||
|
||||
/* 底部 */
|
||||
.fly-footer {margin: 50px 0 0; padding: 20px 0 30px; line-height: 30px; text-align: center; color: #737573; border-top: 1px solid #e2e2e2;}
|
||||
.fly-footer a{padding:0 6px; font-weight: 300;color: rgb(230, 227, 227);}
|
||||
.fly-footer a:hover{color: #fff;}
|
||||
.fly-union{margin-top: 10px; color: #999;}
|
||||
.fly-union>*{display: inline-block; vertical-align: middle;}
|
||||
.fly-union a[upyun] img{width: 80px;}
|
||||
@ -483,7 +486,8 @@ body .layui-edit-face .layui-layer-content{padding:0; background-color:#fff; co
|
||||
.detail-hits .layui-btn+.layui-btn{margin-left: 5px;}
|
||||
.detail-hits .jie-admin{margin-right: 1px;}
|
||||
.detail-body{margin: 10px 0 0; min-height: 50px; line-height: 26px; font-size: 16px; color: #333; word-wrap: break-word;}
|
||||
.detail-body p{margin-bottom:15px;}
|
||||
.detail-body p{margin-bottom: .6rem;font-size: .9375rem;line-height: 1.875;color: var(--color-secondary);word-wrap: break-word;}
|
||||
|
||||
.detail-body img{max-width: 100%; cursor: pointer;}
|
||||
/*
|
||||
.detail-body table{margin: 10px 0 15px;}
|
||||
@ -529,12 +533,12 @@ body .layui-edit-face .layui-layer-content{padding:0; background-color:#fff; co
|
||||
|
||||
|
||||
/* 详情页的底部操作条 */
|
||||
.site-tree-mobile-detail-bottom{display: block!important; position: fixed; z-index: 1000; bottom: 0px; left: 0px; width: 100%; height: 30px; line-height: 30px; border-radius: 2px; text-align: center; color: #e2e2e2;background:#eeeeee}
|
||||
.site-home .site-tree-mobile-detail-bottom{display: none!important;}
|
||||
.site-mobile .site-tree-mobile-detail-bottom{display: none !important;}
|
||||
.site-mobile .site-menu{left: 0;}
|
||||
.site-mobile .site-tree-mobile-detail-bottom{content: ''; position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0,0,0,.8); z-index: 999;}
|
||||
.site-tree-mobile-detail-bottom i{font-size: 30px;}
|
||||
.site-tree-mobile-detail-bottom{display: block!important; position: fixed; z-index: 1000; bottom: 0px; left: 0px; width: 100%; height: 30px; line-height: 30px; border-radius: 2px; text-align: center; color: #e2e2e2;background:#eeeeee}
|
||||
.site-home .site-tree-mobile-detail-bottom{display: none!important;}
|
||||
.site-mobile .site-tree-mobile-detail-bottom{display: none !important;}
|
||||
.site-mobile .site-menu{left: 0;}
|
||||
.site-mobile .site-tree-mobile-detail-bottom{content: ''; position: fixed; top: 0; bottom: 0; left: 0; right: 0; background-color: rgba(0,0,0,.8); z-index: 999;}
|
||||
.site-tree-mobile-detail-bottom i{font-size: 30px;}
|
||||
|
||||
/*标题颜色展示方式*/
|
||||
.layui-colorpicker.layui-colorpicker-xs {width: 30px;height: 20px;line-height: 16px;border: 0px solid #e6e6e6;padding: 0;vertical-align: top;border-radius: 0;}
|
||||
@ -724,9 +728,6 @@ body .fly-user-main{position: relative; min-height: 600px;}
|
||||
.fly-column-right{right: 10px;}
|
||||
.fly-column ul li.layui-this:after{display: none;}
|
||||
|
||||
/* 页脚 */
|
||||
.fly-footer{margin-top: 0; border-top: none;}
|
||||
|
||||
/* 分页 */
|
||||
.laypage-main a, .laypage-main span{display: none;}
|
||||
.laypage-main .laypage-prev,
|
||||
@ -758,4 +759,127 @@ body .fly-user-main{position: relative; min-height: 600px;}
|
||||
}
|
||||
|
||||
/*前台公用样式*/
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
margin: 0 0 1rem;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: 1px solid #f2f2f5;
|
||||
padding: 8px 12px;
|
||||
}
|
||||
p {
|
||||
color: #393e46;
|
||||
margin: 0;
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
code[class*="language-"], pre[class*="language-"] {
|
||||
color: #000;
|
||||
text-shadow: 0 1px #ffffff00;
|
||||
font-family: Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;
|
||||
direction: ltr;
|
||||
/* text-align: left; */
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
position: relative;
|
||||
margin: 2rem 0;
|
||||
padding: 0 0 0 1.75rem;
|
||||
border-left: 5px solid #f2f2f5;
|
||||
}
|
||||
|
||||
/*页脚*/
|
||||
.footer {margin-top:10px;padding:50px 0;color:rgba(255,255,255,.7);background:#2d3236}
|
||||
@media (max-width:991px) {.footer {padding:25px 10px;text-align:center}
|
||||
}
|
||||
@media (max-width:767px) {.footer {padding:20px 0}
|
||||
}
|
||||
.footer a:hover {color:rgba(255,255,255,.9);text-decoration:none}
|
||||
.footer .copyright {font-size:14px;}
|
||||
@media (max-width:767px) {.footer .copyright {font-size:12px}
|
||||
}
|
||||
.footer .copyright p {margin:0 0 5px;color: rgba(250, 250, 250, 0.7);}
|
||||
.footer .footer-nav li a,.footer .copyright a{color:#fff}
|
||||
.footer .footer-nav li a:hover,.footer .copyright a:hover{color:#0055ff}
|
||||
.footer .footer-nav,.footer .menu ul,.footer ul.menu {padding:0;margin:0 0 12px;font-size:14px;list-style:none}
|
||||
.footer .footer-nav li,.footer .menu ul li,.footer ul.menu li {display:inline-block;margin-right:10px;line-height:18px}
|
||||
.footer .footer-nav li:after,.footer .menu ul li:after,.footer ul.menu li:after {display:inline-block;font-size:12px;line-height:18px;opacity:.8;content:"|";vertical-align:top}
|
||||
.footer .footer-nav li:last-child:after,.footer .menu ul li:last-child:after,.footer ul.menu li:last-child:after {display:none}
|
||||
.footer .footer-nav a,.footer .menu ul a,.footer ul.menu a {display:inline-block;padding-right:10px;vertical-align:top}
|
||||
.footer-col {display:inline-block;font-size:0;vertical-align:middle;margin-right:32px}
|
||||
@media (max-width:767px) {.footer-col {margin-right:0}
|
||||
}
|
||||
@media (max-width:1239px) {
|
||||
.footer-col-logo {display:none}
|
||||
}
|
||||
.footer-col-logo img {display:block;max-width:160px;max-height:60px;height:auto}
|
||||
.footer-col-sns {float:right;margin-right:0}
|
||||
@media (max-width:991px) {.footer-col-sns {display:none}
|
||||
}
|
||||
.footer-sns {display:inline-block;margin-top:3px;font-size:0}
|
||||
.footer-sns a {display:inline-block;margin:7px 0 7px 20px;vertical-align:top}
|
||||
.footer-sns .sns-icon {display:inline-block;position:relative;width:40px;height:40px;font-size:20px;line-height:40px;border-radius:50%;text-align:center;background:rgba(255,255,255,.1);color:rgba(255,255,255,.8);z-index:0}
|
||||
.footer-sns .sns-icon svg,.footer-sns .sns-icon:before {position:relative;z-index:1}
|
||||
.footer-sns .sns-icon:after {position:absolute;left:0;top:0;width:100%;height:100%;background:var(--theme-hover);border-radius:50%;content:"";opacity:0;filter:alpha(opacify=0);-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}
|
||||
.footer-sns .sns-icon.material-icons:after {z-index:-1}
|
||||
.footer-sns .sns-icon:hover {color:#fff}
|
||||
.footer-sns .sns-icon:hover:after {-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);opacity:1;filter:alpha(opacify=100);-webkit-transition:all .5s cubic-bezier(.3,0,0,1.3) 0s;-o-transition:all .5s cubic-bezier(.3,0,0,1.3) 0s;transition:all .5s cubic-bezier(.3,0,0,1.3) 0s}
|
||||
.sns-wx {position:relative;overflow:hidden}
|
||||
.sns-wx span,.sns-wx:hover span {-webkit-transition:all .2s ease-out .1s;-o-transition:all .2s ease-out .1s;transition:all .2s ease-out .1s}
|
||||
.sns-wx span {position:absolute;z-index:1;top:-170px;left:0;margin-left:-57px;width:150px;height:150px;background-color:#fff;background-size:95% auto;background-position:50%;background-repeat:no-repeat;-webkit-box-shadow:0 0 5px 1px rgba(0,0,0,.3);box-shadow:0 0 5px 1px rgba(0,0,0,.3);opacity:0;filter:alpha(opacify=0)}
|
||||
.sns-wx span:after {position:absolute;bottom:-16px;left:50%;width:0;height:0;margin-left:-8px;line-height:0;border:8px solid transparent;border-top-color:#fff;content:""}
|
||||
.sns-wx:hover {overflow:visible}
|
||||
.sns-wx:hover span {top:-165px;opacity:1;filter:alpha(opacify=100)}
|
||||
|
||||
.container {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.container {
|
||||
width:750px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.container {
|
||||
width:970px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.container {
|
||||
width:1170px;
|
||||
}
|
||||
}
|
||||
|
||||
.container-fluid {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/* 右下角固定栏*/
|
||||
.layui-fixbar li {
|
||||
border-radius:100%;
|
||||
}
|
@ -903,7 +903,7 @@ layui.define(['layer', 'laytpl', 'form', 'element', 'upload', 'util', 'imgcom'],
|
||||
var stop = $(window).scrollTop();
|
||||
|
||||
if($(window).width() <= 992) return;
|
||||
var bottom = $('.fly-footer').offset().top - $(window).height();
|
||||
var bottom = $('.footer').offset().top - $(window).height();
|
||||
|
||||
if(stop > 60){ //211
|
||||
if(!main.hasClass('site-fix')){
|
||||
|
87
vendor/composer/installed.json
vendored
87
vendor/composer/installed.json
vendored
@ -109,17 +109,17 @@
|
||||
},
|
||||
{
|
||||
"name": "endroid/qr-code",
|
||||
"version": "4.4.9",
|
||||
"version_normalized": "4.4.9.0",
|
||||
"version": "4.5.0",
|
||||
"version_normalized": "4.5.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/endroid/qr-code.git",
|
||||
"reference": "bf087fa1e93a1b7310e2d94d187e26ae51db199d"
|
||||
"reference": "36681470bd10352b53bcb9731bdf2270e0d79b22"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/endroid/qr-code/zipball/bf087fa1e93a1b7310e2d94d187e26ae51db199d",
|
||||
"reference": "bf087fa1e93a1b7310e2d94d187e26ae51db199d",
|
||||
"url": "https://api.github.com/repos/endroid/qr-code/zipball/36681470bd10352b53bcb9731bdf2270e0d79b22",
|
||||
"reference": "36681470bd10352b53bcb9731bdf2270e0d79b22",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -138,7 +138,7 @@
|
||||
"roave/security-advisories": "Makes sure package versions with known security issues are not installed",
|
||||
"setasign/fpdf": "Enables you to use the PDF writer"
|
||||
},
|
||||
"time": "2022-05-10T07:25:08+00:00",
|
||||
"time": "2022-08-21T09:22:43+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@ -172,7 +172,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/endroid/qr-code/issues",
|
||||
"source": "https://github.com/endroid/qr-code/tree/4.4.9"
|
||||
"source": "https://github.com/endroid/qr-code/tree/4.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -338,17 +338,17 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "1.5.1",
|
||||
"version_normalized": "1.5.1.0",
|
||||
"version": "1.5.2",
|
||||
"version_normalized": "1.5.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"reference": "b94b2807d85443f9719887892882d0329d1e2598",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -357,7 +357,7 @@
|
||||
"require-dev": {
|
||||
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
||||
},
|
||||
"time": "2021-10-22T20:56:57+00:00",
|
||||
"time": "2022-08-28T14:55:35+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@ -405,7 +405,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.1"
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -538,28 +538,29 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
"version": "v1.2.0",
|
||||
"version_normalized": "1.2.0.0",
|
||||
"version": "v1.2.2",
|
||||
"version_normalized": "1.2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/serializable-closure.git",
|
||||
"reference": "09f0e9fb61829f628205b7c94906c28740ff9540"
|
||||
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540",
|
||||
"reference": "09f0e9fb61829f628205b7c94906c28740ff9540",
|
||||
"url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae",
|
||||
"reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.3|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"pestphp/pest": "^1.18",
|
||||
"phpstan/phpstan": "^0.12.98",
|
||||
"symfony/var-dumper": "^5.3"
|
||||
"nesbot/carbon": "^2.61",
|
||||
"pestphp/pest": "^1.21.3",
|
||||
"phpstan/phpstan": "^1.8.2",
|
||||
"symfony/var-dumper": "^5.4.11"
|
||||
},
|
||||
"time": "2022-05-16T17:09:47+00:00",
|
||||
"time": "2022-09-08T13:45:54+00:00",
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
@ -1131,17 +1132,17 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v6.6.3",
|
||||
"version_normalized": "6.6.3.0",
|
||||
"version": "v6.6.4",
|
||||
"version_normalized": "6.6.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3"
|
||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"reference": "9400f305a898f194caff5521f64e5dfa926626f3",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1168,7 +1169,7 @@
|
||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||
},
|
||||
"time": "2022-06-20T09:21:02+00:00",
|
||||
"time": "2022-08-22T09:22:00+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -1200,7 +1201,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.3"
|
||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -2863,26 +2864,26 @@
|
||||
},
|
||||
{
|
||||
"name": "workerman/workerman",
|
||||
"version": "v4.0.42",
|
||||
"version_normalized": "4.0.42.0",
|
||||
"version": "v4.1.0",
|
||||
"version_normalized": "4.1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/walkor/workerman.git",
|
||||
"reference": "83f09b50eaf7412504604030daa9e1f9c767e6c3"
|
||||
"reference": "88ddf517e5c35bee072b2e453c4fcca0c6f1e59a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/83f09b50eaf7412504604030daa9e1f9c767e6c3",
|
||||
"reference": "83f09b50eaf7412504604030daa9e1f9c767e6c3",
|
||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/88ddf517e5c35bee072b2e453c4fcca0c6f1e59a",
|
||||
"reference": "88ddf517e5c35bee072b2e453c4fcca0c6f1e59a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4"
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-event": "For better performance. "
|
||||
},
|
||||
"time": "2022-07-29T09:06:29+00:00",
|
||||
"time": "2022-08-20T10:16:22+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -2929,17 +2930,17 @@
|
||||
},
|
||||
{
|
||||
"name": "yansongda/pay",
|
||||
"version": "v3.1.10",
|
||||
"version_normalized": "3.1.10.0",
|
||||
"version": "v3.1.12",
|
||||
"version_normalized": "3.1.12.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/yansongda/pay.git",
|
||||
"reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a"
|
||||
"reference": "7ff004f05f9d6e288ff9b4deef585d30395f37f2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/yansongda/pay/zipball/e02069503b608f2cb8fcb75011cdd0810bbfe88a",
|
||||
"reference": "e02069503b608f2cb8fcb75011cdd0810bbfe88a",
|
||||
"url": "https://api.github.com/repos/yansongda/pay/zipball/7ff004f05f9d6e288ff9b4deef585d30395f37f2",
|
||||
"reference": "7ff004f05f9d6e288ff9b4deef585d30395f37f2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -2973,7 +2974,7 @@
|
||||
"illuminate/container": "Laravel 框架下使用 SDK,请安装",
|
||||
"php-di/php-di": "其它/无框架下使用 SDK,请安装"
|
||||
},
|
||||
"time": "2022-08-09T13:49:29+00:00",
|
||||
"time": "2022-09-03T05:39:21+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
|
40
vendor/composer/installed.php
vendored
40
vendor/composer/installed.php
vendored
@ -3,7 +3,7 @@
|
||||
'name' => 'taoser/taoler',
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'b7290931244a7ca51d61cdc44ac0e774d54a44d9',
|
||||
'reference' => '2f7a73366c80586c404f620fc440626d4c033930',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@ -29,9 +29,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'endroid/qr-code' => array(
|
||||
'pretty_version' => '4.4.9',
|
||||
'version' => '4.4.9.0',
|
||||
'reference' => 'bf087fa1e93a1b7310e2d94d187e26ae51db199d',
|
||||
'pretty_version' => '4.5.0',
|
||||
'version' => '4.5.0.0',
|
||||
'reference' => '36681470bd10352b53bcb9731bdf2270e0d79b22',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../endroid/qr-code',
|
||||
'aliases' => array(),
|
||||
@ -56,9 +56,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'guzzlehttp/promises' => array(
|
||||
'pretty_version' => '1.5.1',
|
||||
'version' => '1.5.1.0',
|
||||
'reference' => 'fe752aedc9fd8fcca3fe7ad05d419d32998a06da',
|
||||
'pretty_version' => '1.5.2',
|
||||
'version' => '1.5.2.0',
|
||||
'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../guzzlehttp/promises',
|
||||
'aliases' => array(),
|
||||
@ -74,9 +74,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'laravel/serializable-closure' => array(
|
||||
'pretty_version' => 'v1.2.0',
|
||||
'version' => '1.2.0.0',
|
||||
'reference' => '09f0e9fb61829f628205b7c94906c28740ff9540',
|
||||
'pretty_version' => 'v1.2.2',
|
||||
'version' => '1.2.2.0',
|
||||
'reference' => '47afb7fae28ed29057fdca37e16a84f90cc62fae',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../laravel/serializable-closure',
|
||||
'aliases' => array(),
|
||||
@ -155,9 +155,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'phpmailer/phpmailer' => array(
|
||||
'pretty_version' => 'v6.6.3',
|
||||
'version' => '6.6.3.0',
|
||||
'reference' => '9400f305a898f194caff5521f64e5dfa926626f3',
|
||||
'pretty_version' => 'v6.6.4',
|
||||
'version' => '6.6.4.0',
|
||||
'reference' => 'a94fdebaea6bd17f51be0c2373ab80d3d681269b',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||
'aliases' => array(),
|
||||
@ -292,7 +292,7 @@
|
||||
'taoser/taoler' => array(
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'b7290931244a7ca51d61cdc44ac0e774d54a44d9',
|
||||
'reference' => '2f7a73366c80586c404f620fc440626d4c033930',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@ -443,18 +443,18 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'workerman/workerman' => array(
|
||||
'pretty_version' => 'v4.0.42',
|
||||
'version' => '4.0.42.0',
|
||||
'reference' => '83f09b50eaf7412504604030daa9e1f9c767e6c3',
|
||||
'pretty_version' => 'v4.1.0',
|
||||
'version' => '4.1.0.0',
|
||||
'reference' => '88ddf517e5c35bee072b2e453c4fcca0c6f1e59a',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../workerman/workerman',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'yansongda/pay' => array(
|
||||
'pretty_version' => 'v3.1.10',
|
||||
'version' => '3.1.10.0',
|
||||
'reference' => 'e02069503b608f2cb8fcb75011cdd0810bbfe88a',
|
||||
'pretty_version' => 'v3.1.12',
|
||||
'version' => '3.1.12.0',
|
||||
'reference' => '7ff004f05f9d6e288ff9b4deef585d30395f37f2',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../yansongda/pay',
|
||||
'aliases' => array(),
|
||||
|
2
vendor/endroid/qr-code/LICENSE
vendored
2
vendor/endroid/qr-code/LICENSE
vendored
@ -1,4 +1,4 @@
|
||||
Copyright 2020 (c) Jeroen van den Enden
|
||||
Copyright 2022 (c) Jeroen van den Enden
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
4
vendor/endroid/qr-code/README.md
vendored
4
vendor/endroid/qr-code/README.md
vendored
@ -14,6 +14,10 @@ for validating generated QR codes. Further extended with Twig extensions, genera
|
||||
Symfony bundle for easy installation and configuration. Different writers are provided to generate the QR code
|
||||
as PNG, SVG, EPS or in binary format.
|
||||
|
||||
## Sponsored by
|
||||
|
||||
[![Blackfire.io](assets/blackfire.png)](https://www.blackfire.io)
|
||||
|
||||
## Installation
|
||||
|
||||
Use [Composer](https://getcomposer.org/) to install the library. Also make sure you have enabled and configured the
|
||||
|
BIN
vendor/endroid/qr-code/assets/blackfire.png
vendored
Normal file
BIN
vendor/endroid/qr-code/assets/blackfire.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
8
vendor/endroid/qr-code/src/Label/Label.php
vendored
8
vendor/endroid/qr-code/src/Label/Label.php
vendored
@ -29,10 +29,10 @@ final class Label implements LabelInterface
|
||||
ColorInterface $textColor = null
|
||||
) {
|
||||
$this->text = $text;
|
||||
$this->font = isset($font) ? $font : new Font(__DIR__.'/../../assets/noto_sans.otf', 16);
|
||||
$this->alignment = isset($alignment) ? $alignment : new LabelAlignmentCenter();
|
||||
$this->margin = isset($margin) ? $margin : new Margin(0, 10, 10, 10);
|
||||
$this->textColor = isset($textColor) ? $textColor : new Color(0, 0, 0);
|
||||
$this->font = $font ?? new Font(__DIR__.'/../../assets/noto_sans.otf', 16);
|
||||
$this->alignment = $alignment ?? new LabelAlignmentCenter();
|
||||
$this->margin = $margin ?? new Margin(0, 10, 10, 10);
|
||||
$this->textColor = $textColor ?? new Color(0, 0, 0);
|
||||
}
|
||||
|
||||
public static function create(string $text): self
|
||||
|
29
vendor/endroid/qr-code/src/Writer/ConsoleWriter.php
vendored
Normal file
29
vendor/endroid/qr-code/src/Writer/ConsoleWriter.php
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer;
|
||||
|
||||
use Endroid\QrCode\Bacon\MatrixFactory;
|
||||
use Endroid\QrCode\Label\LabelInterface;
|
||||
use Endroid\QrCode\Logo\LogoInterface;
|
||||
use Endroid\QrCode\QrCodeInterface;
|
||||
use Endroid\QrCode\Writer\Result\ConsoleResult;
|
||||
use Endroid\QrCode\Writer\Result\ResultInterface;
|
||||
|
||||
/**
|
||||
* Writer of QR Code for CLI.
|
||||
*/
|
||||
class ConsoleWriter implements WriterInterface
|
||||
{
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, $options = []): ResultInterface
|
||||
{
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
return new ConsoleResult($matrix, $qrCode->getForegroundColor(), $qrCode->getBackgroundColor());
|
||||
}
|
||||
}
|
73
vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php
vendored
Normal file
73
vendor/endroid/qr-code/src/Writer/Result/ConsoleResult.php
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Endroid\QrCode\Writer\Result;
|
||||
|
||||
use Endroid\QrCode\Color\ColorInterface;
|
||||
use Endroid\QrCode\Matrix\MatrixInterface;
|
||||
|
||||
/**
|
||||
* Implementation of ResultInterface for printing a QR-Code on command line interface.
|
||||
*/
|
||||
class ConsoleResult extends AbstractResult
|
||||
{
|
||||
protected MatrixInterface $matrix;
|
||||
protected string $colorEscapeCode;
|
||||
|
||||
public const twoblocks = [
|
||||
0 => ' ',
|
||||
1 => "\xe2\x96\x80",
|
||||
2 => "\xe2\x96\x84",
|
||||
3 => "\xe2\x96\x88",
|
||||
];
|
||||
|
||||
/**
|
||||
* Ctor.
|
||||
*/
|
||||
public function __construct(MatrixInterface $matrix, ColorInterface $foreground, ColorInterface $background)
|
||||
{
|
||||
$this->matrix = $matrix;
|
||||
$this->colorEscapeCode = sprintf(
|
||||
"\e[38;2;%d;%d;%dm\e[48;2;%d;%d;%dm",
|
||||
$foreground->getRed(),
|
||||
$foreground->getGreen(),
|
||||
$foreground->getBlue(),
|
||||
$background->getRed(),
|
||||
$background->getGreen(),
|
||||
$background->getBlue()
|
||||
);
|
||||
}
|
||||
|
||||
public function getMimeType(): string
|
||||
{
|
||||
return 'text/plain';
|
||||
}
|
||||
|
||||
public function getString(): string
|
||||
{
|
||||
$side = $this->matrix->getBlockCount();
|
||||
$marginLeft = $this->colorEscapeCode.self::twoblocks[0].self::twoblocks[0];
|
||||
$marginRight = self::twoblocks[0].self::twoblocks[0]."\e[0m".PHP_EOL;
|
||||
$marginVertical = $marginLeft.str_repeat(self::twoblocks[0], $side).$marginRight;
|
||||
|
||||
ob_start();
|
||||
echo $marginVertical; // margin-top
|
||||
|
||||
for ($rowIndex = 0; $rowIndex < $side; $rowIndex += 2) {
|
||||
echo $marginLeft; // margin-left
|
||||
for ($columnIndex = 0; $columnIndex < $side; ++$columnIndex) {
|
||||
$combined = $this->matrix->getBlockValue($rowIndex, $columnIndex);
|
||||
if (($rowIndex + 1) < $side) {
|
||||
$combined |= $this->matrix->getBlockValue($rowIndex + 1, $columnIndex) << 1;
|
||||
}
|
||||
echo self::twoblocks[$combined];
|
||||
}
|
||||
echo $marginRight; // margin-right
|
||||
}
|
||||
|
||||
echo $marginVertical; // margin-bottom
|
||||
|
||||
return (string) ob_get_clean();
|
||||
}
|
||||
}
|
11
vendor/endroid/qr-code/src/Writer/SvgWriter.php
vendored
11
vendor/endroid/qr-code/src/Writer/SvgWriter.php
vendored
@ -17,6 +17,7 @@ final class SvgWriter implements WriterInterface
|
||||
public const DECIMAL_PRECISION = 10;
|
||||
public const WRITER_OPTION_BLOCK_ID = 'block_id';
|
||||
public const WRITER_OPTION_EXCLUDE_XML_DECLARATION = 'exclude_xml_declaration';
|
||||
public const WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT = 'exclude_svg_width_and_height';
|
||||
public const WRITER_OPTION_FORCE_XLINK_HREF = 'force_xlink_href';
|
||||
|
||||
public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface
|
||||
@ -29,13 +30,19 @@ final class SvgWriter implements WriterInterface
|
||||
$options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION] = false;
|
||||
}
|
||||
|
||||
if (!isset($options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT])) {
|
||||
$options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT] = false;
|
||||
}
|
||||
|
||||
$matrixFactory = new MatrixFactory();
|
||||
$matrix = $matrixFactory->create($qrCode);
|
||||
|
||||
$xml = new \SimpleXMLElement('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"/>');
|
||||
$xml->addAttribute('version', '1.1');
|
||||
$xml->addAttribute('width', $matrix->getOuterSize().'px');
|
||||
$xml->addAttribute('height', $matrix->getOuterSize().'px');
|
||||
if (!$options[self::WRITER_OPTION_EXCLUDE_SVG_WIDTH_AND_HEIGHT]) {
|
||||
$xml->addAttribute('width', $matrix->getOuterSize().'px');
|
||||
$xml->addAttribute('height', $matrix->getOuterSize().'px');
|
||||
}
|
||||
$xml->addAttribute('viewBox', '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize());
|
||||
$xml->addChild('defs');
|
||||
|
||||
|
9
vendor/guzzlehttp/promises/CHANGELOG.md
vendored
9
vendor/guzzlehttp/promises/CHANGELOG.md
vendored
@ -1,5 +1,11 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 1.5.2 - 2022-08-07
|
||||
|
||||
### Changed
|
||||
|
||||
- Officially support PHP 8.2
|
||||
|
||||
## 1.5.1 - 2021-10-22
|
||||
|
||||
### Fixed
|
||||
@ -12,10 +18,11 @@
|
||||
### Changed
|
||||
|
||||
- Call handler when waiting on fulfilled/rejected Promise
|
||||
- Officially support PHP 8.1
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix manually settle promises generated with Utils::task
|
||||
- Fix manually settle promises generated with `Utils::task`
|
||||
|
||||
## 1.4.1 - 2021-02-18
|
||||
|
||||
|
57
vendor/guzzlehttp/promises/README.md
vendored
57
vendor/guzzlehttp/promises/README.md
vendored
@ -17,7 +17,7 @@ for a general introduction to promises.
|
||||
- [Implementation notes](#implementation-notes)
|
||||
|
||||
|
||||
# Features
|
||||
## Features
|
||||
|
||||
- [Promises/A+](https://promisesaplus.com/) implementation.
|
||||
- Promise resolution and chaining is handled iteratively, allowing for
|
||||
@ -29,15 +29,14 @@ for a general introduction to promises.
|
||||
`GuzzleHttp\Promise\Coroutine::of()`.
|
||||
|
||||
|
||||
# Quick start
|
||||
## Quick Start
|
||||
|
||||
A *promise* represents the eventual result of an asynchronous operation. The
|
||||
primary way of interacting with a promise is through its `then` method, which
|
||||
registers callbacks to receive either a promise's eventual value or the reason
|
||||
why the promise cannot be fulfilled.
|
||||
|
||||
|
||||
## Callbacks
|
||||
### Callbacks
|
||||
|
||||
Callbacks are registered with the `then` method by providing an optional
|
||||
`$onFulfilled` followed by an optional `$onRejected` function.
|
||||
@ -60,12 +59,11 @@ $promise->then(
|
||||
```
|
||||
|
||||
*Resolving* a promise means that you either fulfill a promise with a *value* or
|
||||
reject a promise with a *reason*. Resolving a promises triggers callbacks
|
||||
registered with the promises's `then` method. These callbacks are triggered
|
||||
reject a promise with a *reason*. Resolving a promise triggers callbacks
|
||||
registered with the promise's `then` method. These callbacks are triggered
|
||||
only once and in the order in which they were added.
|
||||
|
||||
|
||||
## Resolving a promise
|
||||
### Resolving a Promise
|
||||
|
||||
Promises are fulfilled using the `resolve($value)` method. Resolving a promise
|
||||
with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger
|
||||
@ -92,8 +90,7 @@ $promise
|
||||
$promise->resolve('reader.');
|
||||
```
|
||||
|
||||
|
||||
## Promise forwarding
|
||||
### Promise Forwarding
|
||||
|
||||
Promises can be chained one after the other. Each then in the chain is a new
|
||||
promise. The return value of a promise is what's forwarded to the next
|
||||
@ -123,7 +120,7 @@ $promise->resolve('A');
|
||||
$nextPromise->resolve('B');
|
||||
```
|
||||
|
||||
## Promise rejection
|
||||
### Promise Rejection
|
||||
|
||||
When a promise is rejected, the `$onRejected` callbacks are invoked with the
|
||||
rejection reason.
|
||||
@ -140,7 +137,7 @@ $promise->reject('Error!');
|
||||
// Outputs "Error!"
|
||||
```
|
||||
|
||||
## Rejection forwarding
|
||||
### Rejection Forwarding
|
||||
|
||||
If an exception is thrown in an `$onRejected` callback, subsequent
|
||||
`$onRejected` callbacks are invoked with the thrown exception as the reason.
|
||||
@ -195,7 +192,8 @@ $promise
|
||||
$promise->reject('Error!');
|
||||
```
|
||||
|
||||
# Synchronous wait
|
||||
|
||||
## Synchronous Wait
|
||||
|
||||
You can synchronously force promises to complete using a promise's `wait`
|
||||
method. When creating a promise, you can provide a wait function that is used
|
||||
@ -247,8 +245,7 @@ $promise->wait();
|
||||
|
||||
> PHP Fatal error: Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo'
|
||||
|
||||
|
||||
## Unwrapping a promise
|
||||
### Unwrapping a Promise
|
||||
|
||||
When synchronously waiting on a promise, you are joining the state of the
|
||||
promise into the current state of execution (i.e., return the value of the
|
||||
@ -275,7 +272,7 @@ wait function will be the value delivered to promise B.
|
||||
**Note**: when you do not unwrap the promise, no value is returned.
|
||||
|
||||
|
||||
# Cancellation
|
||||
## Cancellation
|
||||
|
||||
You can cancel a promise that has not yet been fulfilled using the `cancel()`
|
||||
method of a promise. When creating a promise you can provide an optional
|
||||
@ -283,10 +280,9 @@ cancel function that when invoked cancels the action of computing a resolution
|
||||
of the promise.
|
||||
|
||||
|
||||
# API
|
||||
## API
|
||||
|
||||
|
||||
## Promise
|
||||
### Promise
|
||||
|
||||
When creating a promise object, you can provide an optional `$waitFn` and
|
||||
`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is
|
||||
@ -349,7 +345,7 @@ A promise has the following methods:
|
||||
Rejects the promise with the given `$reason`.
|
||||
|
||||
|
||||
## FulfilledPromise
|
||||
### FulfilledPromise
|
||||
|
||||
A fulfilled promise can be created to represent a promise that has been
|
||||
fulfilled.
|
||||
@ -366,7 +362,7 @@ $promise->then(function ($value) {
|
||||
```
|
||||
|
||||
|
||||
## RejectedPromise
|
||||
### RejectedPromise
|
||||
|
||||
A rejected promise can be created to represent a promise that has been
|
||||
rejected.
|
||||
@ -383,7 +379,7 @@ $promise->then(null, function ($reason) {
|
||||
```
|
||||
|
||||
|
||||
# Promise interop
|
||||
## Promise Interoperability
|
||||
|
||||
This library works with foreign promises that have a `then` method. This means
|
||||
you can use Guzzle promises with [React promises](https://github.com/reactphp/promise)
|
||||
@ -409,7 +405,7 @@ a foreign promise. You will need to wrap a third-party promise with a Guzzle
|
||||
promise in order to utilize wait and cancel functions with foreign promises.
|
||||
|
||||
|
||||
## Event Loop Integration
|
||||
### Event Loop Integration
|
||||
|
||||
In order to keep the stack size constant, Guzzle promises are resolved
|
||||
asynchronously using a task queue. When waiting on promises synchronously, the
|
||||
@ -437,10 +433,9 @@ $loop->addPeriodicTimer(0, [$queue, 'run']);
|
||||
*TODO*: Perhaps adding a `futureTick()` on each tick would be faster?
|
||||
|
||||
|
||||
# Implementation notes
|
||||
## Implementation Notes
|
||||
|
||||
|
||||
## Promise resolution and chaining is handled iteratively
|
||||
### Promise Resolution and Chaining is Handled Iteratively
|
||||
|
||||
By shuffling pending handlers from one owner to another, promises are
|
||||
resolved iteratively, allowing for "infinite" then chaining.
|
||||
@ -476,8 +471,7 @@ all of its pending handlers to the new promise. When the new promise is
|
||||
eventually resolved, all of the pending handlers are delivered the forwarded
|
||||
value.
|
||||
|
||||
|
||||
## A promise is the deferred.
|
||||
### A Promise is the Deferred
|
||||
|
||||
Some promise libraries implement promises using a deferred object to represent
|
||||
a computation and a promise object to represent the delivery of the result of
|
||||
@ -505,7 +499,10 @@ $promise->resolve('foo');
|
||||
|
||||
## Upgrading from Function API
|
||||
|
||||
A static API was first introduced in 1.4.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API will be removed in 2.0.0. A migration table has been provided here for your convenience:
|
||||
A static API was first introduced in 1.4.0, in order to mitigate problems with
|
||||
functions conflicting between global and local copies of the package. The
|
||||
function API will be removed in 2.0.0. A migration table has been provided here
|
||||
for your convenience:
|
||||
|
||||
| Original Function | Replacement Method |
|
||||
|----------------|----------------|
|
||||
@ -536,10 +533,12 @@ A static API was first introduced in 1.4.0, in order to mitigate problems with f
|
||||
|
||||
If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/promises/security/policy) for more information.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
Guzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.
|
||||
|
||||
|
||||
## For Enterprise
|
||||
|
||||
Available as part of the Tidelift Subscription
|
||||
|
@ -81,16 +81,8 @@ class EachPromise implements PromisorInterface
|
||||
$this->iterable->rewind();
|
||||
$this->refillPending();
|
||||
} catch (\Throwable $e) {
|
||||
/**
|
||||
* @psalm-suppress NullReference
|
||||
* @phpstan-ignore-next-line
|
||||
*/
|
||||
$this->aggregate->reject($e);
|
||||
} catch (\Exception $e) {
|
||||
/**
|
||||
* @psalm-suppress NullReference
|
||||
* @phpstan-ignore-next-line
|
||||
*/
|
||||
$this->aggregate->reject($e);
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,10 @@
|
||||
"php": "^7.3|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"pestphp/pest": "^1.18",
|
||||
"phpstan/phpstan": "^0.12.98",
|
||||
"symfony/var-dumper": "^5.3"
|
||||
"nesbot/carbon": "^2.61",
|
||||
"pestphp/pest": "^1.21.3",
|
||||
"phpstan/phpstan": "^1.8.2",
|
||||
"symfony/var-dumper": "^5.4.11"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace Laravel\SerializableClosure\Serializers;
|
||||
|
||||
use Closure;
|
||||
use DateTimeInterface;
|
||||
use Laravel\SerializableClosure\Contracts\Serializable;
|
||||
use Laravel\SerializableClosure\SerializableClosure;
|
||||
use Laravel\SerializableClosure\Support\ClosureScope;
|
||||
@ -460,6 +461,12 @@ class Native implements Serializable
|
||||
|
||||
$instance = $data;
|
||||
|
||||
if ($data instanceof DateTimeInterface) {
|
||||
$this->scope[$instance] = $data;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ($data instanceof UnitEnum) {
|
||||
$this->scope[$instance] = $data;
|
||||
|
||||
|
@ -83,6 +83,9 @@ class Signed implements Serializable
|
||||
throw new InvalidSignatureException();
|
||||
}
|
||||
|
||||
$this->closure = unserialize($signature['serializable'])->getClosure();
|
||||
/** @var \Laravel\SerializableClosure\Contracts\Serializable $serializable */
|
||||
$serializable = unserialize($signature['serializable']);
|
||||
|
||||
$this->closure = $serializable->getClosure();
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace Laravel\SerializableClosure\Support;
|
||||
|
||||
#[\AllowDynamicProperties]
|
||||
class ClosureStream
|
||||
{
|
||||
/**
|
||||
|
1
vendor/phpmailer/phpmailer/README.md
vendored
1
vendor/phpmailer/phpmailer/README.md
vendored
@ -10,6 +10,7 @@
|
||||
[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer)
|
||||
[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer)
|
||||
[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/)
|
||||
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer/badge)](https://api.securityscorecards.dev/projects/github.com/PHPMailer/PHPMailer)
|
||||
|
||||
## Features
|
||||
- Probably the world's most popular code for sending email from PHP!
|
||||
|
2
vendor/phpmailer/phpmailer/VERSION
vendored
2
vendor/phpmailer/phpmailer/VERSION
vendored
@ -1 +1 @@
|
||||
6.6.3
|
||||
6.6.4
|
@ -5,22 +5,29 @@
|
||||
* @package PHPMailer
|
||||
*/
|
||||
|
||||
$PHPMAILER_LANG['authenticate'] = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).';
|
||||
$PHPMAILER_LANG['connect_host'] = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Το E-Mail δεν έχει περιεχόμενο .';
|
||||
$PHPMAILER_LANG['encoding'] = 'Αγνωστο Encoding-Format: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Αδυναμία προσπέλασης του αρχείου: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης Mail function.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: ';
|
||||
$PHPMAILER_LANG['authenticate'] = 'Σφάλμα SMTP: Αδυναμία πιστοποίησης.';
|
||||
$PHPMAILER_LANG['buggy_php'] = 'Η έκδοση PHP που χρησιμοποιείτε παρουσιάζει σφάλμα που μπορεί να έχει ως αποτέλεσμα κατεστραμένα μηνύματα. Για να το διορθώσετε, αλλάξτε τον τρόπο αποστολής σε SMTP, απενεργοποιήστε την επιλογή mail.add_x_header στο αρχείο php.ini, αλλάξτε λειτουργικό σε MacOS ή Linux ή αναβαθμίστε την PHP σε έκδοση 7.0.17+ ή 7.1.3+.';
|
||||
$PHPMAILER_LANG['connect_host'] = 'Σφάλμα SMTP: Αδυναμία σύνδεσης με τον φιλοξενητή SMTP.';
|
||||
$PHPMAILER_LANG['data_not_accepted'] = 'Σφάλμα SMTP: Μη αποδεκτά δεδομένα.';
|
||||
$PHPMAILER_LANG['empty_message'] = 'Η ηλεκτρονική επιστολή δεν έχει περιεχόμενο.';
|
||||
$PHPMAILER_LANG['encoding'] = 'Άγνωστη μορφή κωδικοποίησης: ';
|
||||
$PHPMAILER_LANG['execute'] = 'Αδυναμία εκτέλεσης: ';
|
||||
$PHPMAILER_LANG['extension_missing'] = 'Απουσία επέκτασης: ';
|
||||
$PHPMAILER_LANG['file_access'] = 'Αδυναμία πρόσβασης στο αρχείο: ';
|
||||
$PHPMAILER_LANG['file_open'] = 'Σφάλμα Αρχείου: Αδυναμία ανοίγματος αρχείου: ';
|
||||
$PHPMAILER_LANG['from_failed'] = 'Η ακόλουθη διεύθυνση αποστολέα δεν είναι σωστή: ';
|
||||
$PHPMAILER_LANG['instantiate'] = 'Αδυναμία εκκίνησης συνάρτησης Mail.';
|
||||
$PHPMAILER_LANG['invalid_address'] = 'Μη έγκυρη διεύθυνση: ';
|
||||
$PHPMAILER_LANG['invalid_header'] = 'Μη έγκυρο όνομα κεφαλίδας ή τιμή';
|
||||
$PHPMAILER_LANG['invalid_hostentry'] = 'Μη έγκυρη εισαγωγή φιλοξενητή: ';
|
||||
$PHPMAILER_LANG['invalid_host'] = 'Μη έγκυρος φιλοξενητής: ';
|
||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
|
||||
$PHPMAILER_LANG['provide_address'] = 'Δώστε τουλάχιστον μια ηλεκτρονική διεύθυνση παραλήπτη.';
|
||||
$PHPMAILER_LANG['recipients_failed'] = 'Σφάλμα SMTP: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';
|
||||
$PHPMAILER_LANG['signing'] = 'Σφάλμα υπογραφής: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης στον SMTP Server.';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα από τον SMTP Server: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: ';
|
||||
//$PHPMAILER_LANG['extension_missing'] = 'Extension missing: ';
|
||||
$PHPMAILER_LANG['smtp_code'] = 'Κώδικάς SMTP: ';
|
||||
$PHPMAILER_LANG['smtp_code_ex'] = 'Πρόσθετες πληροφορίες SMTP: ';
|
||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'Αποτυχία σύνδεσης SMTP.';
|
||||
$PHPMAILER_LANG['smtp_detail'] = 'Λεπτομέρεια: ';
|
||||
$PHPMAILER_LANG['smtp_error'] = 'Σφάλμα με τον διακομιστή SMTP: ';
|
||||
$PHPMAILER_LANG['variable_set'] = 'Αδυναμία ορισμού ή επαναφοράς μεταβλητής: ';
|
||||
|
20
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
20
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
@ -350,8 +350,8 @@ class PHPMailer
|
||||
public $Password = '';
|
||||
|
||||
/**
|
||||
* SMTP auth type.
|
||||
* Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified.
|
||||
* SMTP authentication type. Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2.
|
||||
* If not specified, the first one from that list that the server supports will be selected.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
@ -750,7 +750,7 @@ class PHPMailer
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.6.3';
|
||||
const VERSION = '6.6.4';
|
||||
|
||||
/**
|
||||
* Error severity: message only, continue processing.
|
||||
@ -1096,7 +1096,7 @@ class PHPMailer
|
||||
|
||||
return false;
|
||||
}
|
||||
if ($name !== null) {
|
||||
if ($name !== null && is_string($name)) {
|
||||
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
|
||||
} else {
|
||||
$name = '';
|
||||
@ -1288,7 +1288,7 @@ class PHPMailer
|
||||
*/
|
||||
public function setFrom($address, $name = '', $auto = true)
|
||||
{
|
||||
$address = trim($address);
|
||||
$address = trim((string)$address);
|
||||
$name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
|
||||
//Don't validate now addresses with IDN. Will be done in send().
|
||||
$pos = strrpos($address, '@');
|
||||
@ -1891,7 +1891,14 @@ class PHPMailer
|
||||
foreach ($this->to as $toaddr) {
|
||||
$toArr[] = $this->addrFormat($toaddr);
|
||||
}
|
||||
$to = implode(', ', $toArr);
|
||||
$to = trim(implode(', ', $toArr));
|
||||
|
||||
//If there are no To-addresses (e.g. when sending only to BCC-addresses)
|
||||
//the following should be added to get a correct DKIM-signature.
|
||||
//Compare with $this->preSend()
|
||||
if ($to === '') {
|
||||
$to = 'undisclosed-recipients:;';
|
||||
}
|
||||
|
||||
$params = null;
|
||||
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
|
||||
@ -4470,6 +4477,7 @@ class PHPMailer
|
||||
'ics' => 'text/calendar',
|
||||
'xml' => 'text/xml',
|
||||
'xsl' => 'text/xml',
|
||||
'csv' => 'text/csv',
|
||||
'wmv' => 'video/x-ms-wmv',
|
||||
'mpeg' => 'video/mpeg',
|
||||
'mpe' => 'video/mpeg',
|
||||
|
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
@ -46,7 +46,7 @@ class POP3
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.6.3';
|
||||
const VERSION = '6.6.4';
|
||||
|
||||
/**
|
||||
* Default POP3 port number.
|
||||
|
2
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
2
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
@ -35,7 +35,7 @@ class SMTP
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '6.6.3';
|
||||
const VERSION = '6.6.4';
|
||||
|
||||
/**
|
||||
* SMTP line break constant.
|
||||
|
2
vendor/services.php
vendored
2
vendor/services.php
vendored
@ -1,5 +1,5 @@
|
||||
<?php
|
||||
// This file is automatically generated at:2022-08-15 14:50:32
|
||||
// This file is automatically generated at:2022-09-15 15:52:54
|
||||
declare (strict_types = 1);
|
||||
return array (
|
||||
0 => 'taoser\\addons\\Service',
|
||||
|
26
vendor/workerman/workerman/Events/Select.php
vendored
26
vendor/workerman/workerman/Events/Select.php
vendored
@ -13,6 +13,9 @@
|
||||
*/
|
||||
namespace Workerman\Events;
|
||||
|
||||
use Throwable;
|
||||
use Workerman\Worker;
|
||||
|
||||
/**
|
||||
* select eventloop
|
||||
*/
|
||||
@ -211,6 +214,7 @@ class Select implements EventInterface
|
||||
*/
|
||||
protected function tick()
|
||||
{
|
||||
$tasks_to_insert = [];
|
||||
while (!$this->_scheduler->isEmpty()) {
|
||||
$scheduler_data = $this->_scheduler->top();
|
||||
$timer_id = $scheduler_data['data'];
|
||||
@ -228,14 +232,28 @@ class Select implements EventInterface
|
||||
$task_data = $this->_eventTimer[$timer_id];
|
||||
if ($task_data[2] === self::EV_TIMER) {
|
||||
$next_run_time = $time_now + $task_data[3];
|
||||
$this->_scheduler->insert($timer_id, -$next_run_time);
|
||||
$tasks_to_insert[] = [$timer_id, -$next_run_time];
|
||||
}
|
||||
try {
|
||||
\call_user_func_array($task_data[0], $task_data[1]);
|
||||
} catch (Throwable $e) {
|
||||
Worker::stopAll(250, $e);
|
||||
}
|
||||
\call_user_func_array($task_data[0], $task_data[1]);
|
||||
if (isset($this->_eventTimer[$timer_id]) && $task_data[2] === self::EV_TIMER_ONCE) {
|
||||
$this->del($timer_id, self::EV_TIMER_ONCE);
|
||||
}
|
||||
continue;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach ($tasks_to_insert as $item) {
|
||||
$this->_scheduler->insert($item[0], $item[1]);
|
||||
}
|
||||
if (!$this->_scheduler->isEmpty()) {
|
||||
$scheduler_data = $this->_scheduler->top();
|
||||
$next_run_time = -$scheduler_data['priority'];
|
||||
$time_now = \microtime(true);
|
||||
$this->_selectTimeout = \max((int) (($next_run_time - $time_now) * 1000000), 0);
|
||||
return;
|
||||
}
|
||||
$this->_selectTimeout = 100000000;
|
||||
@ -275,10 +293,8 @@ class Select implements EventInterface
|
||||
|
||||
} else {
|
||||
$this->_selectTimeout >= 1 && usleep($this->_selectTimeout);
|
||||
$ret = false;
|
||||
}
|
||||
|
||||
|
||||
if (!$this->_scheduler->isEmpty()) {
|
||||
$this->tick();
|
||||
}
|
||||
|
@ -596,7 +596,7 @@ class Request
|
||||
*/
|
||||
protected static function createSessionId()
|
||||
{
|
||||
return \bin2hex(\pack('d', \microtime(true)) . \pack('N', \mt_rand()));
|
||||
return \bin2hex(\pack('d', \microtime(true)) . random_bytes(8));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -410,7 +410,7 @@ class Session
|
||||
public function __destruct()
|
||||
{
|
||||
$this->save();
|
||||
if (\rand(1, static::$gcProbability[1]) <= static::$gcProbability[0]) {
|
||||
if (\random_int(1, static::$gcProbability[1]) <= static::$gcProbability[0]) {
|
||||
$this->gc();
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ class FileSessionHandler implements SessionHandlerInterface
|
||||
*/
|
||||
public function write($session_id, $session_data)
|
||||
{
|
||||
$temp_file = static::$_sessionSavePath.uniqid(mt_rand(), true);
|
||||
$temp_file = static::$_sessionSavePath . uniqid(bin2hex(random_bytes(8)), true);
|
||||
if (!\file_put_contents($temp_file, $session_data)) {
|
||||
return false;
|
||||
}
|
||||
|
2
vendor/workerman/workerman/Protocols/Ws.php
vendored
2
vendor/workerman/workerman/Protocols/Ws.php
vendored
@ -355,7 +355,7 @@ class Ws
|
||||
$port = $connection->getRemotePort();
|
||||
$host = $port === 80 ? $connection->getRemoteHost() : $connection->getRemoteHost() . ':' . $port;
|
||||
// Handshake header.
|
||||
$connection->websocketSecKey = \base64_encode(\md5(\mt_rand(), true));
|
||||
$connection->websocketSecKey = \base64_encode(random_bytes(16));
|
||||
$user_header = isset($connection->headers) ? $connection->headers :
|
||||
(isset($connection->wsHttpHeader) ? $connection->wsHttpHeader : null);
|
||||
$user_header_str = '';
|
||||
|
12
vendor/workerman/workerman/Worker.php
vendored
12
vendor/workerman/workerman/Worker.php
vendored
@ -33,7 +33,7 @@ class Worker
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const VERSION = '4.0.42';
|
||||
const VERSION = '4.1.0';
|
||||
|
||||
/**
|
||||
* Status starting.
|
||||
@ -183,7 +183,7 @@ class Worker
|
||||
public $onBufferDrain = null;
|
||||
|
||||
/**
|
||||
* Emitted when worker processes stoped.
|
||||
* Emitted when worker processes stopped.
|
||||
*
|
||||
* @var callable
|
||||
*/
|
||||
@ -1693,11 +1693,9 @@ class Worker
|
||||
// onWorkerExit
|
||||
if ($worker->onWorkerExit) {
|
||||
try {
|
||||
call_user_func($worker->onWorkerExit, $worker, $status, $pid);
|
||||
} catch (\Exception $e) {
|
||||
static::log("worker[{$worker->name}] onWorkerExit $e");
|
||||
} catch (\Error $e) {
|
||||
static::log("worker[{$worker->name}] onWorkerExit $e");
|
||||
($worker->onWorkerExit)($worker, $status, $pid);
|
||||
} catch (\Throwable $exception) {
|
||||
static::log("worker[{$worker->name}] onWorkerExit $exception");
|
||||
}
|
||||
}
|
||||
|
||||
|
2
vendor/workerman/workerman/composer.json
vendored
2
vendor/workerman/workerman/composer.json
vendored
@ -24,7 +24,7 @@
|
||||
"source": "https://github.com/walkor/workerman"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.4"
|
||||
"php": ">=7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-event": "For better performance. "
|
||||
|
16
vendor/yansongda/pay/CHANGELOG.md
vendored
16
vendor/yansongda/pay/CHANGELOG.md
vendored
@ -1,3 +1,19 @@
|
||||
## v3.1.12
|
||||
|
||||
### fixed
|
||||
|
||||
- fix: 微信代金券详情 url 不正确(#663)
|
||||
|
||||
### refactor
|
||||
|
||||
- refactor: 优化代码 (#661)
|
||||
|
||||
## v3.1.11
|
||||
|
||||
### added
|
||||
|
||||
- feat: 微信退款自动增加回调url(#649)
|
||||
|
||||
## v3.1.10
|
||||
|
||||
### added
|
||||
|
4
vendor/yansongda/pay/LICENSE
vendored
4
vendor/yansongda/pay/LICENSE
vendored
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) yansongda <me@yansongda.cn>
|
||||
Copyright (c) 2017 yansongda <me@yansongda.cn>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
@ -17,4 +17,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
3
vendor/yansongda/pay/README.md
vendored
3
vendor/yansongda/pay/README.md
vendored
@ -1,8 +1,9 @@
|
||||
<p align="center">
|
||||
<a href="https://pay.yansongda.cn" target="_blank" rel="noopener noreferrer"><img width="200" src="https://cdn.jsdelivr.net/gh/yansongda/pay-site/.vuepress/public/images/logo.png" alt="Logo"></a>
|
||||
<a href="https://pay.yansongda.cn" target="_blank" rel="noopener noreferrer"><img width="200" src="https://pay.yansongda.cn/images/logo.png" alt="Logo"></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://codecov.io/gh/yansongda/pay" ><img src="https://codecov.io/gh/yansongda/pay/branch/master/graph/badge.svg?token=tYMV0YT5jj"/></a>
|
||||
<a href="https://scrutinizer-ci.com/g/yansongda/pay/?branch=master"><img src="https://scrutinizer-ci.com/g/yansongda/pay/badges/quality-score.png?b=master" alt="scrutinizer"></a>
|
||||
<a href="https://github.com/yansongda/pay/actions"><img src="https://github.com/yansongda/pay/workflows/Linter/badge.svg" alt="Linter Status"></a>
|
||||
<a href="https://github.com/yansongda/pay/actions"><img src="https://github.com/yansongda/pay/workflows/Tester/badge.svg" alt="Tester Status"></a>
|
||||
|
@ -12,11 +12,11 @@ interface ProviderInterface
|
||||
/**
|
||||
* pay.
|
||||
*
|
||||
* @return \Psr\Http\Message\MessageInterface|\Yansongda\Supports\Collection|array|null
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\InvalidParamsException
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
*
|
||||
* @return \Psr\Http\Message\MessageInterface|\Yansongda\Supports\Collection|array|null
|
||||
*/
|
||||
public function pay(array $plugins, array $params);
|
||||
|
||||
|
4
vendor/yansongda/pay/src/Functions.php
vendored
4
vendor/yansongda/pay/src/Functions.php
vendored
@ -300,9 +300,9 @@ if (!function_exists('decrypt_wechat_resource')) {
|
||||
|
||||
if (!function_exists('decrypt_wechat_resource_aes_256_gcm')) {
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\InvalidResponseException
|
||||
*
|
||||
* @return array|string
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\InvalidResponseException
|
||||
*/
|
||||
function decrypt_wechat_resource_aes_256_gcm(string $ciphertext, string $secret, string $nonce, string $associatedData)
|
||||
{
|
||||
|
12
vendor/yansongda/pay/src/Pay.php
vendored
12
vendor/yansongda/pay/src/Pay.php
vendored
@ -79,10 +79,10 @@ class Pay
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function __callStatic(string $service, array $config)
|
||||
{
|
||||
@ -143,9 +143,9 @@ class Pay
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
*/
|
||||
public static function make(string $service, array $parameters = [])
|
||||
{
|
||||
@ -167,10 +167,10 @@ class Pay
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
|
||||
* @throws \Yansongda\Pay\Exception\ContainerException
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function get(string $service)
|
||||
{
|
||||
|
@ -109,7 +109,11 @@ class PreparePlugin implements PluginInterface
|
||||
$cert = file_get_contents($path);
|
||||
$ssl = openssl_x509_parse($cert);
|
||||
|
||||
return $this->getCertSn($ssl['issuer'], $ssl['serialNumber']);
|
||||
if (false === $ssl) {
|
||||
throw new InvalidConfigException(Exception::ALIPAY_CONFIG_ERROR, 'Parse `app_public_cert_path` Error');
|
||||
}
|
||||
|
||||
return $this->getCertSn($ssl['issuer'] ?? [], $ssl['serialNumber'] ?? '');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -169,8 +173,8 @@ class PreparePlugin implements PluginInterface
|
||||
|
||||
protected function formatCert(array $ssl): array
|
||||
{
|
||||
if (0 === strpos($ssl['serialNumber'], '0x')) {
|
||||
$ssl['serialNumber'] = $this->hex2dec($ssl['serialNumberHex']);
|
||||
if (0 === strpos($ssl['serialNumber'] ?? '', '0x')) {
|
||||
$ssl['serialNumber'] = $this->hex2dec($ssl['serialNumberHex'] ?? '');
|
||||
}
|
||||
|
||||
return $ssl;
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_1.shtml
|
||||
*/
|
||||
class ApplyPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_2.shtml
|
||||
*/
|
||||
class FindPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_5.shtml
|
||||
*/
|
||||
class FindReturnAdvancePlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_6_4.shtml
|
||||
*/
|
||||
class ReturnAdvancePlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_7.shtml
|
||||
*/
|
||||
class CreateBillReceiptPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_9.shtml
|
||||
*/
|
||||
class CreateDetailReceiptPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Pay\Traits\HasWechatEncryption;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml
|
||||
*/
|
||||
class CreatePlugin extends GeneralPlugin
|
||||
{
|
||||
use HasWechatEncryption;
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Parser\OriginResponseParser;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_11.shtml
|
||||
*/
|
||||
class DownloadReceiptPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_3.shtml
|
||||
*/
|
||||
class QueryBatchDetailIdPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_2.shtml
|
||||
*/
|
||||
class QueryBatchIdPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_8.shtml
|
||||
*/
|
||||
class QueryBillReceiptPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_10.shtml
|
||||
*/
|
||||
class QueryDetailReceiptPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_6.shtml
|
||||
*/
|
||||
class QueryOutBatchDetailNoPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_5.shtml
|
||||
*/
|
||||
class QueryOutBatchNoPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -40,9 +40,9 @@ class LaunchPlugin implements PluginInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Yansongda\Pay\Exception\InvalidResponseException
|
||||
*
|
||||
* @return array|\Psr\Http\Message\MessageInterface|\Yansongda\Supports\Collection|null
|
||||
*
|
||||
* @throws \Yansongda\Pay\Exception\InvalidResponseException
|
||||
*/
|
||||
protected function validateResponse(Rocket $rocket)
|
||||
{
|
||||
|
@ -7,6 +7,9 @@ namespace Yansongda\Pay\Plugin\Wechat\Marketing\Coupon;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_1.shtml
|
||||
*/
|
||||
class CreatePlugin extends GeneralPlugin
|
||||
{
|
||||
protected function doSomething(Rocket $rocket): void
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_13.shtml
|
||||
*/
|
||||
class PausePlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_9.shtml
|
||||
*/
|
||||
class QueryCouponDetailPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
@ -38,7 +41,7 @@ class QueryCouponDetailPlugin extends GeneralPlugin
|
||||
|
||||
return 'v3/marketing/favor/users/'.
|
||||
$payload->get('openid').
|
||||
'coupons/'.$payload->get('coupon_id').
|
||||
'/coupons/'.$payload->get('coupon_id').
|
||||
'?appid='.$appid;
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_5.shtml
|
||||
*/
|
||||
class QueryStockDetailPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_8.shtml
|
||||
*/
|
||||
class QueryStockItemsPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_7.shtml
|
||||
*/
|
||||
class QueryStockMerchantsPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_11.shtml
|
||||
*/
|
||||
class QueryStockRefundFlowPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_10.shtml
|
||||
*/
|
||||
class QueryStockUseFlowPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -7,6 +7,9 @@ namespace Yansongda\Pay\Plugin\Wechat\Marketing\Coupon;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_4.shtml
|
||||
*/
|
||||
class QueryStocksPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_9.shtml
|
||||
*/
|
||||
class QueryUserCouponsPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function getMethod(): string
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_14.shtml
|
||||
*/
|
||||
class RestartPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -10,6 +10,9 @@ use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_2.shtml
|
||||
*/
|
||||
class SendPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function doSomething(Rocket $rocket): void
|
||||
|
@ -7,6 +7,9 @@ namespace Yansongda\Pay\Plugin\Wechat\Marketing\Coupon;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_12.shtml
|
||||
*/
|
||||
class SetCallbackPlugin extends GeneralPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Plugin\Wechat\GeneralPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter9_1_3.shtml
|
||||
*/
|
||||
class StartPlugin extends GeneralPlugin
|
||||
{
|
||||
protected function doSomething(Rocket $rocket): void
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_3.shtml
|
||||
*/
|
||||
class ClosePlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\ClosePlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_8.shtml
|
||||
*/
|
||||
class DownloadBillPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\DownloadBillPlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_10.shtml
|
||||
*/
|
||||
class FindRefundPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\FindRefundPlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_7.shtml
|
||||
*/
|
||||
class GetFlowBillPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\GetFlowBillPlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_6.shtml
|
||||
*/
|
||||
class GetTradeBillPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\GetTradeBillPlugin
|
||||
{
|
||||
}
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Supports\Collection;
|
||||
use Yansongda\Supports\Config;
|
||||
use Yansongda\Supports\Str;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml
|
||||
*/
|
||||
class InvokePrepayPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\InvokePrepayPlugin
|
||||
{
|
||||
/**
|
||||
|
@ -6,6 +6,9 @@ namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
|
||||
*/
|
||||
class PrepayPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\PrepayPlugin
|
||||
{
|
||||
protected function getUri(Rocket $rocket): string
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_2.shtml
|
||||
*/
|
||||
class QueryPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\QueryPlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\App;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_9.shtml
|
||||
*/
|
||||
class RefundPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\RefundPlugin
|
||||
{
|
||||
}
|
||||
|
@ -7,6 +7,9 @@ namespace Yansongda\Pay\Plugin\Wechat\Pay\Combine;
|
||||
use Yansongda\Pay\Plugin\Wechat\Pay\Common\CombinePrepayPlugin;
|
||||
use Yansongda\Pay\Rocket;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_1.shtml
|
||||
*/
|
||||
class AppPrepayPlugin extends CombinePrepayPlugin
|
||||
{
|
||||
protected function getUri(Rocket $rocket): string
|
||||
|
@ -9,6 +9,9 @@ use Yansongda\Pay\Exception\InvalidParamsException;
|
||||
use Yansongda\Pay\Rocket;
|
||||
use Yansongda\Supports\Collection;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_12.shtml
|
||||
*/
|
||||
class ClosePlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\ClosePlugin
|
||||
{
|
||||
protected function getUri(Rocket $rocket): string
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\Combine;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_19.shtml
|
||||
*/
|
||||
class DownloadBillPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\DownloadBillPlugin
|
||||
{
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Yansongda\Pay\Plugin\Wechat\Pay\Combine;
|
||||
|
||||
/**
|
||||
* @see https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter5_1_15.shtml
|
||||
*/
|
||||
class FindRefundPlugin extends \Yansongda\Pay\Plugin\Wechat\Pay\Common\FindRefundPlugin
|
||||
{
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user