upgrade sql, notify, addon status
This commit is contained in:
parent
4ae7a3ea51
commit
8ddee45e5f
@ -3,6 +3,7 @@ namespace app\admin\controller;
|
|||||||
|
|
||||||
use app\common\controller\AdminController;
|
use app\common\controller\AdminController;
|
||||||
use app\common\lib\SqlFile;
|
use app\common\lib\SqlFile;
|
||||||
|
use think\Exception;
|
||||||
use think\facade\View;
|
use think\facade\View;
|
||||||
use think\facade\Request;
|
use think\facade\Request;
|
||||||
use think\facade\Config;
|
use think\facade\Config;
|
||||||
@ -303,26 +304,23 @@ class Addons extends AdminController
|
|||||||
return json(['code' => 0, 'msg' => '插件卸载成功']);
|
return json(['code' => 0, 'msg' => '插件卸载成功']);
|
||||||
}
|
}
|
||||||
|
|
||||||
//启用插件
|
// 启用禁用插件
|
||||||
public function start()
|
public function status(){
|
||||||
{
|
|
||||||
$name = input('name');
|
$name = input('name');
|
||||||
$arr = ['status' => 1];
|
$info = get_addons_info($name);
|
||||||
//$res = get_addons_info($name);
|
try{
|
||||||
//$res = get_addons_instance($name);
|
$arr = ['status' => $info['status'] ? 0 :1];
|
||||||
$res = set_addons_info($name,$arr);
|
set_addons_info($name,$arr);
|
||||||
return json(['code'=>0,'msg'=>$name.'插件已启用']);
|
if($arr['status']) {
|
||||||
|
$res = ['code'=>0,'msg'=>'启用成功'];
|
||||||
|
} else {
|
||||||
|
$res = ['code'=>0,'msg'=>'已被禁用'];
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw new Exception($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
//暂停插件
|
return json($res);
|
||||||
public function shutDown()
|
|
||||||
{
|
|
||||||
$name = input('name');
|
|
||||||
$arr = ['status' => 0];
|
|
||||||
$res = set_addons_info($name,$arr);
|
|
||||||
return json(['code'=>-1,'msg'=>$name.'插件已禁用']);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//配置插件
|
//配置插件
|
||||||
|
@ -2,10 +2,59 @@
|
|||||||
namespace app\admin\controller;
|
namespace app\admin\controller;
|
||||||
|
|
||||||
use app\common\controller\AdminController;
|
use app\common\controller\AdminController;
|
||||||
|
use think\facade\Db;
|
||||||
|
|
||||||
class Menu extends AdminController
|
class Menu extends AdminController
|
||||||
{
|
{
|
||||||
public function index(){
|
public function index(){
|
||||||
return view();
|
return view();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 动态菜单并排序
|
||||||
|
* @return \think\response\Json
|
||||||
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
|
* @throws \think\db\exception\DbException
|
||||||
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
|
*/
|
||||||
|
public function getMenuNavbar()
|
||||||
|
{
|
||||||
|
$pid = empty(input('id')) ? 0 : input('id');
|
||||||
|
$data = Db::name('auth_rule')->field('id,title,icon,name,sort')->where(['delete_time'=> 0,'status'=> 1,'ismenu'=>1,'pid'=>$pid])->select();
|
||||||
|
$tree = [];
|
||||||
|
foreach ($data as $k => $v) {
|
||||||
|
$hasChild = $this->hasChildren($v['id']);
|
||||||
|
if($hasChild) {
|
||||||
|
$v['hasChildren'] = 1;
|
||||||
|
} else {
|
||||||
|
$v['hasChildren'] = 0;
|
||||||
|
}
|
||||||
|
$tree[] = ['id'=>$v['id'],'text'=>$v['title'],'icon'=>$v['icon'],'hasChildren'=>$v['hasChildren'],'href'=>(string) url($v['name']),'sort'=>$v['sort']];
|
||||||
|
}
|
||||||
|
// 排序
|
||||||
|
$cmf_arr = array_column($tree, 'sort');
|
||||||
|
array_multisort($cmf_arr, SORT_ASC, $tree);
|
||||||
|
|
||||||
|
return json($tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否有子菜单
|
||||||
|
* @param $pid
|
||||||
|
* @return bool
|
||||||
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
|
* @throws \think\db\exception\DbException
|
||||||
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
|
*/
|
||||||
|
public function hasChildren($pid)
|
||||||
|
{
|
||||||
|
$data = Db::name('auth_rule')->field('pid')->where(['delete_time'=> 0,'status'=> 1,'ismenu'=>1,'pid'=>$pid])->select()->toArray();
|
||||||
|
if(count($data)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
@ -160,10 +160,7 @@ class Upgrade extends AdminController
|
|||||||
}
|
}
|
||||||
|
|
||||||
//把远程文件放入本地
|
//把远程文件放入本地
|
||||||
|
$upload_dir = Files::getDirPath($this->upload_dir); //拼接路径
|
||||||
//拼接路径
|
|
||||||
//$upload_dir = substr($this->upload_dir,-1) == '/' ? $this->upload_dir : $this->upload_dir.'/';
|
|
||||||
$upload_dir = Files::getDirPath($this->upload_dir);
|
|
||||||
Files::mkdirs($upload_dir);
|
Files::mkdirs($upload_dir);
|
||||||
|
|
||||||
$package_file = $upload_dir.'taoler_'.$version_num.'.zip'; //升级的压缩包文件
|
$package_file = $upload_dir.'taoler_'.$version_num.'.zip'; //升级的压缩包文件
|
||||||
@ -212,14 +209,11 @@ class Upgrade extends AdminController
|
|||||||
//清理缓存
|
//清理缓存
|
||||||
$this->clearSysCache();
|
$this->clearSysCache();
|
||||||
|
|
||||||
//更新版本
|
|
||||||
//Db::name('system')->update(['sys_version_num'=>$version_num,'id'=>1]);
|
|
||||||
|
|
||||||
$value = [
|
$value = [
|
||||||
'version' => $version_num
|
'version' => $version_num
|
||||||
];
|
];
|
||||||
$res = SetArr::name('taoler')->edit($value);
|
$res = SetArr::name('taoler')->edit($value);
|
||||||
if($res == false){
|
if(!$res){
|
||||||
return json(['code'=>-1,'msg'=>'代码更新成功,但版本写入失败']);
|
return json(['code'=>-1,'msg'=>'代码更新成功,但版本写入失败']);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,9 +221,11 @@ class Upgrade extends AdminController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**升级执行
|
/**
|
||||||
|
* 升级执行
|
||||||
* @param string $package_file
|
* @param string $package_file
|
||||||
* @return \think\response\Json
|
* @return \think\response\Json
|
||||||
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
private function execute_update(string $package_file)
|
private function execute_update(string $package_file)
|
||||||
{
|
{
|
||||||
@ -247,6 +243,15 @@ class Upgrade extends AdminController
|
|||||||
|
|
||||||
Log::channel('update')->info('update:{type} {progress} {msg}',['type'=>'success','progress'=>'50%','msg'=>'升级文件解压成功!']);
|
Log::channel('update')->info('update:{type} {progress} {msg}',['type'=>'success','progress'=>'50%','msg'=>'升级文件解压成功!']);
|
||||||
|
|
||||||
|
//升级sql操作
|
||||||
|
$upSql = $zipPath.'runtime/update.sql';
|
||||||
|
if(file_exists($upSql)) {
|
||||||
|
SqlFile::dbExecute($upSql);
|
||||||
|
//删除sql语句
|
||||||
|
unlink($upSql);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//升级PHP
|
//升级PHP
|
||||||
if(is_dir($zipPath)) {
|
if(is_dir($zipPath)) {
|
||||||
//升级前的写入文件权限检查
|
//升级前的写入文件权限检查
|
||||||
@ -288,13 +293,7 @@ class Upgrade extends AdminController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//升级sql操作
|
|
||||||
$upSql = $zipPath.'runtime/update.sql';
|
|
||||||
if(file_exists($upSql)) {
|
|
||||||
SqlFile::dbExecute($upSql);
|
|
||||||
//删除sql语句
|
|
||||||
unlink($upSql);
|
|
||||||
}
|
|
||||||
|
|
||||||
Log::channel('update')->info('update:{type} {progress} {msg}',['type'=>'success','progress'=>'100%','msg'=>'升级成功!']);
|
Log::channel('update')->info('update:{type} {progress} {msg}',['type'=>'success','progress'=>'100%','msg'=>'升级成功!']);
|
||||||
//更新系统的版本号了
|
//更新系统的版本号了
|
||||||
|
@ -15,12 +15,13 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table id="addons-list" lay-filter="addons-list"></table>
|
<table id="addons-list" lay-filter="addons-list"></table>
|
||||||
|
|
||||||
<script type="text/html" id="toolbar">
|
<script type="text/html" id="toolbar">
|
||||||
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
<div class="layui-btn-group" style="padding-bottom: 10px;">
|
||||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="onlineAddons">在线</button>
|
<a href="#denable" type="button" class="layui-btn layui-btn-sm" lay-event="onlineAddons">在线</a>
|
||||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="installed">已安装</button>
|
<a href="#enable" type="button" class="layui-btn layui-btn-sm" lay-event="installed">已安装</a>
|
||||||
<button type="button" class="layui-btn layui-btn-sm" lay-event="freeAddons">免费</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>
|
<button type="button" class="layui-btn layui-btn-sm" lay-event="payAddons">付费</button>
|
||||||
</div>
|
</div>
|
||||||
@ -29,24 +30,22 @@
|
|||||||
<button class="layui-btn layui-btn-sm layuiadmin-btn-admin" data-type="user-info">用户信息</button>
|
<button class="layui-btn layui-btn-sm layuiadmin-btn-admin" data-type="user-info">用户信息</button>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</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">
|
<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-normal layui-btn-xs" lay-event="install" data-url="{:url('Addons/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">
|
<select id="vers{{d.name}}" name="sss" class="layui-border" lay-ignore lay-filter="versSelect">
|
||||||
{{# d.vers.forEach(function(item, index){ }}
|
{{# d.vers.forEach(function(item, index){ }}
|
||||||
<option value="{{ item }}">{{ item }}</option>
|
<option value="{{ item }}">{{ item }}</option>
|
||||||
{{# }); }}
|
{{# }); }}
|
||||||
</select>
|
</select>
|
||||||
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="config"><i class="layui-icon layui-icon-set"></i>设置</a>
|
</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="status" data-url="{:url('Addons/status')}"><i class="layui-icon layui-icon-pause"></i>禁用</a>
|
||||||
|
{{# } else { }}
|
||||||
|
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="status" data-url="{:url('Addons/status')}"><i class="layui-icon layui-icon-play"></i>启动</a>
|
||||||
|
{{# } }}
|
||||||
|
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="config" data-url="{:url('Addons/config')}"><i class="layui-icon layui-icon-set"></i>设置</a>
|
||||||
|
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="uninstall" data-url="{:url('Addons/uninstall')}"><i class="layui-icon layui-icon-delete"></i>卸载</a>
|
||||||
</script>
|
</script>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@ -56,25 +55,21 @@
|
|||||||
|
|
||||||
{/block}
|
{/block}
|
||||||
{block name="js"}
|
{block name="js"}
|
||||||
|
<script src="/static/notify.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var addonsIndex = "{:url('Addons/index')}",
|
var addonsList = "{:url('Addons/addonsList')}",
|
||||||
addonsList = "{:url('Addons/addonsList')}",
|
|
||||||
addonsDelete = "{:url('Addons/uninstall')}",
|
|
||||||
addonsEdit = "{:url('Addons/edit')}";
|
addonsEdit = "{:url('Addons/edit')}";
|
||||||
var addonsStart = "{:url('Addons/start')}";
|
|
||||||
var addonsShut = "{:url('Addons/shutDown')}";
|
|
||||||
var addonsInstall = "{:url('Addons/install')}";
|
|
||||||
var addonsConfig = "{:url('Addons/config')}";
|
|
||||||
|
|
||||||
layui.config({
|
layui.config({
|
||||||
base: '/static/admin/' //静态资源所在路径
|
base: '/static/admin/' //静态资源所在路径
|
||||||
}).extend({
|
}).extend({
|
||||||
index: 'lib/index' //主入口模块
|
index: 'lib/index' //主入口模块
|
||||||
}).use(['index', 'addons','table','form','upload'], function(){
|
}).use(['index', 'addons','table','form','upload',"notify"], function(){
|
||||||
var $ = layui.jquery
|
var $ = layui.jquery
|
||||||
,table = layui.table
|
,table = layui.table
|
||||||
,form = layui.form
|
,form = layui.form
|
||||||
,upload = layui.upload;
|
,upload = layui.upload;
|
||||||
|
var notify = layui.notify;
|
||||||
|
|
||||||
form.render('select'); // 渲染所在容器内的 select 元素
|
form.render('select'); // 渲染所在容器内的 select 元素
|
||||||
//监听版本选择
|
//监听版本选择
|
||||||
@ -107,15 +102,10 @@
|
|||||||
data:field,
|
data:field,
|
||||||
daType:"json",
|
daType:"json",
|
||||||
success:function (data){
|
success:function (data){
|
||||||
if (data.code == 0) {
|
if (res.code == 0) {
|
||||||
layer.msg(data.msg,{icon:6,time:2000});
|
notify.success(res.msg, "topRight");
|
||||||
} else {
|
} else {
|
||||||
layer.open({
|
notify.error(res.msg, "topRight");
|
||||||
title:'添加失败',
|
|
||||||
content:data.msg,
|
|
||||||
icon:5,
|
|
||||||
anim:6
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,10 @@
|
|||||||
{block name="body"}
|
{block name="body"}
|
||||||
<div id="LAY_app">
|
<div id="LAY_app">
|
||||||
<div class="layui-layout layui-layout-admin">
|
<div class="layui-layout layui-layout-admin">
|
||||||
{include file="public/header,public/side_menu,public/page_tabs" /}
|
{include file="public/header" /}
|
||||||
|
<!-- 侧边菜单 -->
|
||||||
|
<div id="hxNavbar" data-url="{:url('menu/getMenuNavbar')}"></div>
|
||||||
|
{include file="public/page_tabs" /}
|
||||||
|
|
||||||
<!-- 主体内容 -->
|
<!-- 主体内容 -->
|
||||||
<div class="layui-body" id="LAY_app_body">
|
<div class="layui-body" id="LAY_app_body">
|
||||||
@ -25,7 +28,21 @@
|
|||||||
base: '/static/admin/' //静态资源所在路径
|
base: '/static/admin/' //静态资源所在路径
|
||||||
}).extend({
|
}).extend({
|
||||||
index: 'lib/index' //主入口模块
|
index: 'lib/index' //主入口模块
|
||||||
}).use('index');
|
}).use(['index','hxNav'],function (){
|
||||||
|
|
||||||
|
// 动态菜单
|
||||||
|
layui.hxNav({
|
||||||
|
element: '#hxNavbar', // 必须,指定ID
|
||||||
|
url: "{:url('menu/getMenuNavbar')}", // 请求后台数据的接口
|
||||||
|
type: 'post',
|
||||||
|
shrink: false,
|
||||||
|
onSelect: function(v) {
|
||||||
|
//console.log(v);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
<script type="text/javascript" charset="utf-8">
|
<script type="text/javascript" charset="utf-8">
|
||||||
var AdminLogin = "{:url('Login/index')}",
|
var AdminLogin = "{:url('Login/index')}",
|
||||||
AdminLogout = "{:url('Admin/logout')}",
|
AdminLogout = "{:url('Admin/logout')}",
|
||||||
adminClearCache = "{:url('Admin/clearCache')}",
|
adminClearCache = "{:url('Admin/clearCache')}", sysCy = "{$clevel}";
|
||||||
sysCy = "{$clevel}";
|
var menuNav = "{:url('menu/getMenuNavbar')}";
|
||||||
</script>
|
</script>
|
||||||
{block name="js"}js文件{/block}
|
{block name="js"}js文件{/block}
|
||||||
</body>
|
</body>
|
||||||
|
@ -1,12 +1,3 @@
|
|||||||
<!--
|
|
||||||
* @Author: TaoLer <alipay_tao@qq.com>
|
|
||||||
* @Date: 2021-12-06 16:04:50
|
|
||||||
* @LastEditTime: 2022-06-28 10:01:33
|
|
||||||
* @LastEditors: TaoLer
|
|
||||||
* @Description: 后台菜单结构
|
|
||||||
* @FilePath: \TaoLer\app\admin\view\public\side_menu.html
|
|
||||||
* Copyright (c) 2020~2022 https://www.aieok.com All rights reserved.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<!-- 侧边菜单 -->
|
<!-- 侧边菜单 -->
|
||||||
<div class="layui-side layui-side-menu">
|
<div class="layui-side layui-side-menu">
|
||||||
@ -28,7 +19,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!--li data-name="user" class="layui-nav-item">
|
<li data-name="user" class="layui-nav-item">
|
||||||
<a href="javascript:;" lay-tips="用户" lay-direction="2">
|
<a href="javascript:;" lay-tips="用户" lay-direction="2">
|
||||||
<i class="layui-icon layui-icon-user"></i>
|
<i class="layui-icon layui-icon-user"></i>
|
||||||
<cite>管理</cite>
|
<cite>管理</cite>
|
||||||
@ -47,9 +38,9 @@
|
|||||||
<a lay-href="{:url('authrule/index')}">权限管理</a>
|
<a lay-href="{:url('authrule/index')}">权限管理</a>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li-->
|
</li>;
|
||||||
|
|
||||||
{volist name="menu" id="vo1"}
|
{volist name="menu" id="vo1"}
|
||||||
{if condition="isset($vo1['children'])"}
|
{if condition="isset($vo1['children'])"}
|
||||||
<li data-name="set" class="layui-nav-item">
|
<li data-name="set" class="layui-nav-item">
|
||||||
<a href="javascript:;" lay-tips="{$vo1.title}" lay-direction="2">
|
<a href="javascript:;" lay-tips="{$vo1.title}" lay-direction="2">
|
||||||
@ -85,8 +76,8 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
{/volist}
|
{/volist}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -308,7 +308,6 @@ function find_spider(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!function_exists('__')) {
|
if (!function_exists('__')) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取语言变量值
|
* 获取语言变量值
|
||||||
* @param string $name 语言变量名
|
* @param string $name 语言变量名
|
||||||
|
@ -30,8 +30,6 @@ class AdminController extends \app\BaseController
|
|||||||
{
|
{
|
||||||
//权限auth检查
|
//权限auth检查
|
||||||
$this->aid = Session::get('admin_id');
|
$this->aid = Session::get('admin_id');
|
||||||
//$this->checkAuth();
|
|
||||||
$this->getMenu();
|
|
||||||
//系统配置
|
//系统配置
|
||||||
$this->getIndexUrl();
|
$this->getIndexUrl();
|
||||||
}
|
}
|
||||||
@ -63,8 +61,7 @@ class AdminController extends \app\BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$menu = !empty($menu) ? getTree($menu) : [];
|
return !empty($menu) ? getTree($menu) : [];
|
||||||
View::assign('menu', $menu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,10 +77,7 @@ class AdminController extends \app\BaseController
|
|||||||
foreach ($auth_rule_list as $value) {
|
foreach ($auth_rule_list as $value) {
|
||||||
$menu[] = $value;
|
$menu[] = $value;
|
||||||
}
|
}
|
||||||
$menus = !empty($menu) ? getTree($menu) : [];
|
return !empty($menu) ? getTree($menu) : [];
|
||||||
//$menu2 = getTree($menu);
|
|
||||||
return $menus;
|
|
||||||
//return View::assign('menus', $menus);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//清除缓存Cache
|
//清除缓存Cache
|
||||||
|
26
composer.lock
generated
26
composer.lock
generated
@ -1413,16 +1413,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpmailer/phpmailer",
|
"name": "phpmailer/phpmailer",
|
||||||
"version": "v6.6.4",
|
"version": "v6.6.5",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b"
|
"reference": "8b6386d7417526d1ea4da9edb70b8352f7543627"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8b6386d7417526d1ea4da9edb70b8352f7543627",
|
||||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
"reference": "8b6386d7417526d1ea4da9edb70b8352f7543627",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1446,8 +1446,8 @@
|
|||||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||||
"psr/log": "For optional PSR-3 debug logging",
|
"psr/log": "For optional PSR-3 debug logging",
|
||||||
"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)",
|
||||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
"thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -1479,7 +1479,7 @@
|
|||||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4"
|
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -1487,7 +1487,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-08-22T09:22:00+00:00"
|
"time": "2022-10-07T12:23:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
@ -3073,16 +3073,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "workerman/workerman",
|
"name": "workerman/workerman",
|
||||||
"version": "v4.1.3",
|
"version": "v4.1.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/walkor/workerman.git",
|
"url": "https://github.com/walkor/workerman.git",
|
||||||
"reference": "01028d8008c5691ec38c5f675fc13d76496a6db9"
|
"reference": "83e007acf936e2233ac92d7368b87716f2bae338"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/01028d8008c5691ec38c5f675fc13d76496a6db9",
|
"url": "https://api.github.com/repos/walkor/workerman/zipball/83e007acf936e2233ac92d7368b87716f2bae338",
|
||||||
"reference": "01028d8008c5691ec38c5f675fc13d76496a6db9",
|
"reference": "83e007acf936e2233ac92d7368b87716f2bae338",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -3132,7 +3132,7 @@
|
|||||||
"type": "patreon"
|
"type": "patreon"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-09-23T14:05:12+00:00"
|
"time": "2022-10-09T11:33:14+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "yansongda/pay",
|
"name": "yansongda/pay",
|
||||||
|
@ -16,7 +16,7 @@ return [
|
|||||||
// 应用名,此项不可更改
|
// 应用名,此项不可更改
|
||||||
'appname' => 'TaoLer',
|
'appname' => 'TaoLer',
|
||||||
// 版本配置
|
// 版本配置
|
||||||
'version' => '2.0.0',
|
'version' => '2.0.2',
|
||||||
// 加盐
|
// 加盐
|
||||||
'salt' => 'taoler',
|
'salt' => 'taoler',
|
||||||
// 数据库备份目录
|
// 数据库备份目录
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
//网站app版本发布
|
//网站app版本发布
|
||||||
|
|
||||||
layui.define(["table", "form", "upload"], function (exports) {
|
layui.define(["table", "form", "upload","notify","hxNav"], function (exports) {
|
||||||
var $ = layui.jquery,
|
var $ = layui.jquery,
|
||||||
table = layui.table,
|
table = layui.table,
|
||||||
form = layui.form,
|
form = layui.form,
|
||||||
upload = layui.upload;
|
upload = layui.upload;
|
||||||
|
var notify = layui.notify;
|
||||||
|
|
||||||
function addList(type) {
|
function addList(type) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -44,40 +45,125 @@ layui.define(["table", "form", "upload"], function (exports) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//监听工具条
|
//监听工具条
|
||||||
table.on("tool(addons-list)", function (obj) {
|
table.on("tool(addons-list)", function (obj) {
|
||||||
var data = obj.data;
|
var data = obj.data;
|
||||||
|
var event = obj.event;
|
||||||
|
var url = $(this).data('url')
|
||||||
|
|
||||||
if (obj.event === "del") {
|
//安装插件
|
||||||
layer.prompt(
|
if (event === "install") {
|
||||||
{
|
var index = layer.load(1);
|
||||||
formType: 1,
|
$.post(url, { name: data.name, version: data.version }, function (res) {
|
||||||
title: "敏感操作,请验证口令",
|
|
||||||
},
|
|
||||||
function (value, index) {
|
|
||||||
layer.close(index);
|
|
||||||
layer.confirm("真的删除行么", function (index) {
|
|
||||||
$.post(addonsDelete, { name: data.name }, function (res) {
|
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
layer.msg(res.msg, { icon: 6, time: 2000 });
|
notify.success(res.msg, "topRight");
|
||||||
} else {
|
} else {
|
||||||
layer.open({
|
notify.error(res.msg, "topRight");
|
||||||
tiele: "修改失败",
|
}
|
||||||
content: res.msg,
|
layer.close(index);
|
||||||
icon: 5,
|
|
||||||
anim: 6,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 启用禁用
|
||||||
|
if(event == 'status') {
|
||||||
|
notify.confirm("确认框", "vcenter", function(){
|
||||||
|
$.post(url,{ name: data.name },function(res){
|
||||||
|
if (res.code == 0) {
|
||||||
|
notify.success(res.msg, "topRight");
|
||||||
|
} else {
|
||||||
|
notify.error(res.msg, "topRight");
|
||||||
|
}
|
||||||
|
table.reloadData("addons-list",{},'deep');
|
||||||
|
// addList("installed");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 卸载插件
|
||||||
|
if (event === "uninstall") {
|
||||||
|
notify.confirm("确认框", "vcenter",function() {
|
||||||
|
var index = layer.load(1);
|
||||||
|
$.post(url, { name: data.name }, function (res) {
|
||||||
|
if (res.code == 0) {
|
||||||
|
notify.success(res.msg, "topRight");
|
||||||
|
} else {
|
||||||
|
notify.error(res.msg, "topRight");
|
||||||
|
}
|
||||||
|
});
|
||||||
table.reload("addons-list");
|
table.reload("addons-list");
|
||||||
layer.close(index);
|
layer.close(index);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 配置插件
|
||||||
|
if (event === "config") {
|
||||||
|
layer.open({
|
||||||
|
type: 2,
|
||||||
|
title: '配置插件',
|
||||||
|
content: url + "?name=" + data.name,
|
||||||
|
maxmin: true,
|
||||||
|
area: ["780px", "90%"],
|
||||||
|
btn: ["确定", "取消"],
|
||||||
|
yes: function (index, layero) {
|
||||||
|
var iframeWindow = window["layui-layer-iframe" + index],
|
||||||
|
submitID = "LAY-addons-config-submit",
|
||||||
|
submit = layero.find("iframe").contents().find("#" + submitID);
|
||||||
|
//监听提交
|
||||||
|
iframeWindow.layui.form.on(
|
||||||
|
"submit(" + submitID + ")",
|
||||||
|
function (data) {
|
||||||
|
var field = data.field; //获取提交的字段
|
||||||
|
$.ajax({
|
||||||
|
type: "post",
|
||||||
|
url: addonsConfig,
|
||||||
|
data: field,
|
||||||
|
daType: "json",
|
||||||
|
success: function (res) {
|
||||||
|
if (res.code == 0) {
|
||||||
|
notify.success(res.msg, "topRight");
|
||||||
|
} else {
|
||||||
|
notify.error(res.msg, "topRight");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
layer.close(index); //关闭弹层
|
||||||
|
}
|
||||||
);
|
);
|
||||||
} else if (obj.event === "edit") {
|
submit.trigger("click");
|
||||||
|
},
|
||||||
|
success: function (layero, index) {
|
||||||
|
var forms = layero.find("iframe").contents().find(".layui-form");
|
||||||
|
var button = forms.find("button");
|
||||||
|
//事件委托
|
||||||
|
forms.on("click", "button", function (data) {
|
||||||
|
var even = this.getAttribute("lay-event");
|
||||||
|
var names = this.dataset.name;
|
||||||
|
if (even == "addInput") {
|
||||||
|
var html = '<div class="layui-form-item">\n' +
|
||||||
|
'<label class="layui-form-label"></label>\n' +
|
||||||
|
'<div class="layui-input-inline">\n' +
|
||||||
|
' <input type="text" name="'+ names +'[key][]" value="" placeholder="key" autocomplete="off" class="layui-input input-double-width">\n' +
|
||||||
|
'</div>\n' +
|
||||||
|
'<div class="layui-input-inline">\n' +
|
||||||
|
' <input type="text" name="'+ names +'[value][]" value="" placeholder="value" autocomplete="off" class="layui-input input-double-width">\n' +
|
||||||
|
'</div>\n' +
|
||||||
|
'<button data-name="'+ names +'" type="button" class="layui-btn layui-btn-danger layui-btn-sm removeInupt" lay-event="removeInupt">\n' +
|
||||||
|
' <i class="layui-icon"></i>\n' +
|
||||||
|
'</button>\n' +
|
||||||
|
'</div>';
|
||||||
|
$(this).parent().parent().append(html);
|
||||||
|
} else {
|
||||||
|
$(this).parent().remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event === "edit") {
|
||||||
var tr = $(obj.tr);
|
var tr = $(obj.tr);
|
||||||
layer.open({
|
layer.open({
|
||||||
type: 2,
|
type: 2,
|
||||||
@ -129,140 +215,8 @@ layui.define(["table", "form", "upload"], function (exports) {
|
|||||||
},
|
},
|
||||||
success: function (layero, index) {},
|
success: function (layero, index) {},
|
||||||
});
|
});
|
||||||
} else if (obj.event === "start") {
|
|
||||||
//提交 Ajax 成功后,静态更新表格中的数据
|
|
||||||
$.ajax({
|
|
||||||
type: "post",
|
|
||||||
url: addonsStart,
|
|
||||||
data: { name: data.name },
|
|
||||||
daType: "json",
|
|
||||||
success: function (res) {
|
|
||||||
if (res.code == 0) {
|
|
||||||
layer.msg(res.msg, { icon: 6, time: 2000 });
|
|
||||||
} else {
|
|
||||||
layer.open({
|
|
||||||
tiele: "修改失败",
|
|
||||||
content: res.msg,
|
|
||||||
icon: 5,
|
|
||||||
anim: 6,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
|
||||||
});
|
|
||||||
} else if (obj.event === "shutdown") {
|
|
||||||
//提交 Ajax 成功后,静态更新表格中的数据
|
|
||||||
$.ajax({
|
|
||||||
type: "post",
|
|
||||||
url: addonsShut,
|
|
||||||
data: { name: data.name },
|
|
||||||
daType: "json",
|
|
||||||
success: function (res) {
|
|
||||||
if (res.code == 0) {
|
|
||||||
layer.msg(res.msg, { icon: 6, time: 2000 });
|
|
||||||
} else {
|
|
||||||
layer.open({
|
|
||||||
tiele: "修改失败",
|
|
||||||
content: res.msg,
|
|
||||||
icon: 5,
|
|
||||||
anim: 6,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else if (obj.event === "install") {
|
|
||||||
|
|
||||||
var index = layer.load(1);
|
|
||||||
//安装插件
|
|
||||||
$.post(
|
|
||||||
addonsInstall,
|
|
||||||
{ name: data.name, version: data.version },
|
|
||||||
function (res) {
|
|
||||||
if (res.code == 0) {
|
|
||||||
layer.msg(res.msg, { icon: 6, time: 2000 });
|
|
||||||
} else {
|
|
||||||
layer.open({
|
|
||||||
tiele: "修改失败",
|
|
||||||
content: res.msg,
|
|
||||||
icon: 5,
|
|
||||||
anim: 6,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
layer.close(index);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else if (obj.event === "config") {
|
|
||||||
layer.open({
|
|
||||||
type: 2,
|
|
||||||
title: "配置插件",
|
|
||||||
content: addonsConfig + "?name=" + data.name,
|
|
||||||
maxmin: true,
|
|
||||||
area: ["780px", "90%"],
|
|
||||||
btn: ["确定", "取消"],
|
|
||||||
yes: function (index, layero) {
|
|
||||||
var iframeWindow = window["layui-layer-iframe" + index],
|
|
||||||
submitID = "LAY-addons-config-submit",
|
|
||||||
submit = layero
|
|
||||||
.find("iframe")
|
|
||||||
.contents()
|
|
||||||
.find("#" + submitID);
|
|
||||||
//监听提交
|
|
||||||
iframeWindow.layui.form.on(
|
|
||||||
"submit(" + submitID + ")",
|
|
||||||
function (data) {
|
|
||||||
var field = data.field; //获取提交的字段
|
|
||||||
$.ajax({
|
|
||||||
type: "post",
|
|
||||||
url: addonsConfig,
|
|
||||||
data: field,
|
|
||||||
daType: "json",
|
|
||||||
success: function (res) {
|
|
||||||
if (res.code == 0) {
|
|
||||||
layer.msg(res.msg, { icon: 6, time: 2000 });
|
|
||||||
} else {
|
|
||||||
layer.open({
|
|
||||||
tiele: "修改失败",
|
|
||||||
content: res.msg,
|
|
||||||
icon: 5,
|
|
||||||
anim: 6,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
layer.close(index); //关闭弹层
|
|
||||||
}
|
|
||||||
);
|
|
||||||
submit.trigger("click");
|
|
||||||
},
|
|
||||||
success: function (layero, index) {
|
|
||||||
var forms = layero.find("iframe").contents().find(".layui-form");
|
|
||||||
var button = forms.find("button");
|
|
||||||
//事件委托
|
|
||||||
forms.on("click", "button", function (data) {
|
|
||||||
var even = this.getAttribute("lay-event");
|
|
||||||
var names = this.dataset.name;
|
|
||||||
if (even == "addInput") {
|
|
||||||
var html = '<div class="layui-form-item">\n' +
|
|
||||||
'<label class="layui-form-label"></label>\n' +
|
|
||||||
'<div class="layui-input-inline">\n' +
|
|
||||||
' <input type="text" name="'+ names +'[key][]" value="" placeholder="key" autocomplete="off" class="layui-input input-double-width">\n' +
|
|
||||||
'</div>\n' +
|
|
||||||
'<div class="layui-input-inline">\n' +
|
|
||||||
' <input type="text" name="'+ names +'[value][]" value="" placeholder="value" autocomplete="off" class="layui-input input-double-width">\n' +
|
|
||||||
'</div>\n' +
|
|
||||||
'<button data-name="'+ names +'" type="button" class="layui-btn layui-btn-danger layui-btn-sm removeInupt" lay-event="removeInupt">\n' +
|
|
||||||
' <i class="layui-icon"></i>\n' +
|
|
||||||
'</button>\n' +
|
|
||||||
'</div>';
|
|
||||||
|
|
||||||
$(this).parent().parent().append(html);
|
|
||||||
} else {
|
|
||||||
$(this).parent().remove();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
table.reload("addons-list"); //数据刷新
|
|
||||||
});
|
});
|
||||||
|
|
||||||
exports("addons", {});
|
exports("addons", {});
|
||||||
|
117
public/static/admin/modules/hxNav.js
Normal file
117
public/static/admin/modules/hxNav.js
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
/**
|
||||||
|
* Async Navbar With Ajax
|
||||||
|
* CopyRight 2020.1 by Hexu
|
||||||
|
* Interface Like: [{ "id": "ident", "text": "title text", "icon": "icon", "href": "targetUrl.php", "hasChildren": 0 }]
|
||||||
|
*/
|
||||||
|
;layui.define(['element','jquery'],function(exports){
|
||||||
|
'use strict';
|
||||||
|
var $ = layui.jquery, element = layui.element, navroot = null, nodes=[], methods = {
|
||||||
|
select: function(id) {
|
||||||
|
if( nodes[id] ) {
|
||||||
|
navroot.find('li,dd').removeClass('layui-this');
|
||||||
|
nodes[id].addClass('layui-this').parents('li,dd').addClass('layui-nav-itemed');
|
||||||
|
opts.onSelect(nodes[id].data('nodeItem'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, internal = {
|
||||||
|
init: function() {
|
||||||
|
navroot = $(opts.element).addClass('layui-side layui-side-menu').append('<div class="layui-side-scroll"><div class="layui-logo" lay-href="home/console.html"><span>TaoLerAdmin</span></div></div>');
|
||||||
|
//.css({'background-color':opts.background, width: opts.width });
|
||||||
|
scroll = $(".layui-side-scroll");
|
||||||
|
// 默认主页li
|
||||||
|
var indexLi = '<li data-name="home" class="layui-nav-item layui-nav-itemed">'+
|
||||||
|
'<a href="javascript:;" lay-tips="主页" lay-direction="2">'+
|
||||||
|
'<i class="layui-icon layui-icon-home"></i>'+
|
||||||
|
'<cite>主页</cite>'+
|
||||||
|
'<i class="layui-icon layui-icon-down layui-nav-more"></i></a>'+
|
||||||
|
'<dl class="layui-nav-child">'+
|
||||||
|
'<dd data-name="console" class="layui-this">'+
|
||||||
|
'<a lay-href="/admin/index/home.html">控制台</a>'+
|
||||||
|
'</dd>'+
|
||||||
|
'</dl>'+
|
||||||
|
'</li>';
|
||||||
|
var node = $('<ul class="layui-nav layui-nav-tree" lay-shrink="all" id="LAY-system-side-menu" lay-filter="layadmin-system-side-menu">'+ indexLi +'</ul>').attr('lay-shrink', opts.shrink?'all':'').appendTo( scroll );
|
||||||
|
//node.css('width','100%');
|
||||||
|
internal.getData(null,node,0);
|
||||||
|
},
|
||||||
|
getData: function(id,node,level){
|
||||||
|
id = id || null;
|
||||||
|
$.ajax({
|
||||||
|
url: opts.url,
|
||||||
|
type: opts.type,
|
||||||
|
cache: false,
|
||||||
|
data: { id: id },
|
||||||
|
dataType: 'json',
|
||||||
|
success: function(res) {
|
||||||
|
$.each(res, function (index, val) {
|
||||||
|
/**
|
||||||
|
* @var val.hasChildren
|
||||||
|
*/
|
||||||
|
val.hasChildren = ( val.hasChildren && val.hasChildren > 0 );
|
||||||
|
var sub = (id === null) ? $('<li class="layui-nav-item"></li>').appendTo(node) : $('<dd></dd>').appendTo(node);
|
||||||
|
sub.data('nodeItem', val);
|
||||||
|
nodes[val.id] = sub;
|
||||||
|
if (val.hasChildren ) {
|
||||||
|
var aHtml = '<a href="javascript:void(0)"></a>';
|
||||||
|
} else {
|
||||||
|
var aHtml = '<a lay-href="'+ val.href+'"></a>';
|
||||||
|
}
|
||||||
|
var a = $(aHtml).appendTo(sub);
|
||||||
|
//a.css('margin-left', level * 12 );
|
||||||
|
if (val.icon) {
|
||||||
|
$('<i class="layui-icon"></i>').addClass(val.icon).appendTo(a);
|
||||||
|
}
|
||||||
|
$('<cite></cite>').text(val.text).appendTo(a);
|
||||||
|
if (val.hasChildren ) {
|
||||||
|
$('<i class="layui-icon layui-icon-down layui-nav-more"></i>').appendTo(a);
|
||||||
|
var dl = $('<dl class="layui-nav-child"></dl>').appendTo(sub);
|
||||||
|
if( opts.autoExpand ) {
|
||||||
|
internal.getData(val.id, dl, level + 1);
|
||||||
|
val.isExpended = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @var val.isExpended
|
||||||
|
*/
|
||||||
|
a.on('click',function() {
|
||||||
|
if( val.hasChildren && ( ! val.isExpended )){
|
||||||
|
internal.getData(val.id, dl, level + 1 );
|
||||||
|
val.isExpended = true;
|
||||||
|
}
|
||||||
|
//点击折叠事件
|
||||||
|
// methods.select(val.id);
|
||||||
|
if(val.hasChildren) {
|
||||||
|
$('.layui-nav-tree').children('li').siblings().removeClass('layui-nav-itemed');
|
||||||
|
} else {
|
||||||
|
$(this).parents('li').siblings().removeClass('layui-nav-itemed');
|
||||||
|
}
|
||||||
|
//console.log(val);
|
||||||
|
opts.onSelect(val);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
element.render('nav','layadmin-system-side-menu');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, opts = {};
|
||||||
|
|
||||||
|
exports('hxNav',function(opt, params ) {
|
||||||
|
if( typeof opt === 'string' ) {
|
||||||
|
if( methods[ opt ] )
|
||||||
|
methods[ opt ].call( this, params );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
opts = $.extend({
|
||||||
|
element: '',
|
||||||
|
width: 220,
|
||||||
|
url: '',
|
||||||
|
type: 'post',
|
||||||
|
shrink: false,
|
||||||
|
autoExpand: false,
|
||||||
|
background: '#393D49',
|
||||||
|
onSelect: function(node){}
|
||||||
|
}, opt || {});
|
||||||
|
internal.init.call( this );
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
461
public/static/admin/modules/notify.js
Normal file
461
public/static/admin/modules/notify.js
Normal file
File diff suppressed because one or more lines are too long
461
public/static/notify.js
Normal file
461
public/static/notify.js
Normal file
File diff suppressed because one or more lines are too long
30
vendor/composer/installed.json
vendored
30
vendor/composer/installed.json
vendored
@ -1487,17 +1487,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpmailer/phpmailer",
|
"name": "phpmailer/phpmailer",
|
||||||
"version": "v6.6.4",
|
"version": "v6.6.5",
|
||||||
"version_normalized": "6.6.4.0",
|
"version_normalized": "6.6.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b"
|
"reference": "8b6386d7417526d1ea4da9edb70b8352f7543627"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/8b6386d7417526d1ea4da9edb70b8352f7543627",
|
||||||
"reference": "a94fdebaea6bd17f51be0c2373ab80d3d681269b",
|
"reference": "8b6386d7417526d1ea4da9edb70b8352f7543627",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1521,10 +1521,10 @@
|
|||||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||||
"psr/log": "For optional PSR-3 debug logging",
|
"psr/log": "For optional PSR-3 debug logging",
|
||||||
"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)",
|
||||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
"thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
|
||||||
},
|
},
|
||||||
"time": "2022-08-22T09:22:00+00:00",
|
"time": "2022-10-07T12:23:10+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -1556,7 +1556,7 @@
|
|||||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
|
||||||
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.4"
|
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.6.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@ -3353,17 +3353,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "workerman/workerman",
|
"name": "workerman/workerman",
|
||||||
"version": "v4.1.3",
|
"version": "v4.1.4",
|
||||||
"version_normalized": "4.1.3.0",
|
"version_normalized": "4.1.4.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/walkor/workerman.git",
|
"url": "https://github.com/walkor/workerman.git",
|
||||||
"reference": "01028d8008c5691ec38c5f675fc13d76496a6db9"
|
"reference": "83e007acf936e2233ac92d7368b87716f2bae338"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/walkor/workerman/zipball/01028d8008c5691ec38c5f675fc13d76496a6db9",
|
"url": "https://api.github.com/repos/walkor/workerman/zipball/83e007acf936e2233ac92d7368b87716f2bae338",
|
||||||
"reference": "01028d8008c5691ec38c5f675fc13d76496a6db9",
|
"reference": "83e007acf936e2233ac92d7368b87716f2bae338",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -3372,7 +3372,7 @@
|
|||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-event": "For better performance. "
|
"ext-event": "For better performance. "
|
||||||
},
|
},
|
||||||
"time": "2022-09-23T14:05:12+00:00",
|
"time": "2022-10-09T11:33:14+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
16
vendor/composer/installed.php
vendored
16
vendor/composer/installed.php
vendored
@ -3,7 +3,7 @@
|
|||||||
'name' => 'taoser/taoler',
|
'name' => 'taoser/taoler',
|
||||||
'pretty_version' => 'dev-master',
|
'pretty_version' => 'dev-master',
|
||||||
'version' => 'dev-master',
|
'version' => 'dev-master',
|
||||||
'reference' => '9f89482c951e9a44bf0e2e4bf91c7e7ccb0fc8dd',
|
'reference' => 'ceb164391c3d212f1460cfbcbb7f4d7ad66f8ce9',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
@ -209,9 +209,9 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'phpmailer/phpmailer' => array(
|
'phpmailer/phpmailer' => array(
|
||||||
'pretty_version' => 'v6.6.4',
|
'pretty_version' => 'v6.6.5',
|
||||||
'version' => '6.6.4.0',
|
'version' => '6.6.5.0',
|
||||||
'reference' => 'a94fdebaea6bd17f51be0c2373ab80d3d681269b',
|
'reference' => '8b6386d7417526d1ea4da9edb70b8352f7543627',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
@ -367,7 +367,7 @@
|
|||||||
'taoser/taoler' => array(
|
'taoser/taoler' => array(
|
||||||
'pretty_version' => 'dev-master',
|
'pretty_version' => 'dev-master',
|
||||||
'version' => 'dev-master',
|
'version' => 'dev-master',
|
||||||
'reference' => '9f89482c951e9a44bf0e2e4bf91c7e7ccb0fc8dd',
|
'reference' => 'ceb164391c3d212f1460cfbcbb7f4d7ad66f8ce9',
|
||||||
'type' => 'project',
|
'type' => 'project',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
@ -527,9 +527,9 @@
|
|||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'workerman/workerman' => array(
|
'workerman/workerman' => array(
|
||||||
'pretty_version' => 'v4.1.3',
|
'pretty_version' => 'v4.1.4',
|
||||||
'version' => '4.1.3.0',
|
'version' => '4.1.4.0',
|
||||||
'reference' => '01028d8008c5691ec38c5f675fc13d76496a6db9',
|
'reference' => '83e007acf936e2233ac92d7368b87716f2bae338',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../workerman/workerman',
|
'install_path' => __DIR__ . '/../workerman/workerman',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
|
2
vendor/phpmailer/phpmailer/VERSION
vendored
2
vendor/phpmailer/phpmailer/VERSION
vendored
@ -1 +1 @@
|
|||||||
6.6.4
|
6.6.5
|
2
vendor/phpmailer/phpmailer/composer.json
vendored
2
vendor/phpmailer/phpmailer/composer.json
vendored
@ -51,7 +51,7 @@
|
|||||||
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
|
||||||
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
|
||||||
"psr/log": "For optional PSR-3 debug logging",
|
"psr/log": "For optional PSR-3 debug logging",
|
||||||
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
|
"thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication",
|
||||||
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -14,16 +14,22 @@ $PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data blev ikke accepteret.
|
|||||||
$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
|
$PHPMAILER_LANG['empty_message'] = 'Meddelelsen er uden indhold';
|
||||||
$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
|
$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
|
||||||
$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: ';
|
$PHPMAILER_LANG['execute'] = 'Kunne ikke afvikle: ';
|
||||||
|
$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';
|
||||||
$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: ';
|
$PHPMAILER_LANG['file_access'] = 'Kunne ikke tilgå filen: ';
|
||||||
$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
|
$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
|
||||||
$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
|
$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
|
||||||
$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.';
|
$PHPMAILER_LANG['instantiate'] = 'Email funktionen kunne ikke initialiseres.';
|
||||||
$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: ';
|
$PHPMAILER_LANG['invalid_address'] = 'Udgyldig adresse: ';
|
||||||
|
$PHPMAILER_LANG['invalid_header'] = 'Ugyldig header navn eller værdi';
|
||||||
|
$PHPMAILER_LANG['invalid_hostentry'] = 'Ugyldig hostentry: ';
|
||||||
|
$PHPMAILER_LANG['invalid_host'] = 'Ugyldig vært: ';
|
||||||
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
|
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
|
||||||
$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.';
|
$PHPMAILER_LANG['provide_address'] = 'Indtast mindst en modtagers email adresse.';
|
||||||
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: ';
|
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere fejlede: ';
|
||||||
$PHPMAILER_LANG['signing'] = 'Signeringsfejl: ';
|
$PHPMAILER_LANG['signing'] = 'Signeringsfejl: ';
|
||||||
|
$PHPMAILER_LANG['smtp_code'] = 'SMTP kode: ';
|
||||||
|
$PHPMAILER_LANG['smtp_code_ex'] = 'Yderligere SMTP info: ';
|
||||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.';
|
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() fejlede.';
|
||||||
|
$PHPMAILER_LANG['smtp_detail'] = 'Detalje: ';
|
||||||
$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: ';
|
$PHPMAILER_LANG['smtp_error'] = 'SMTP server fejl: ';
|
||||||
$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: ';
|
$PHPMAILER_LANG['variable_set'] = 'Kunne ikke definere eller nulstille variablen: ';
|
||||||
$PHPMAILER_LANG['extension_missing'] = 'Udvidelse mangler: ';
|
|
||||||
|
@ -9,19 +9,18 @@ $PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzi
|
|||||||
$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
|
$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
|
||||||
$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
|
$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
|
||||||
$PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.';
|
$PHPMAILER_LANG['empty_message'] = 'Wiadomość jest pusta.';
|
||||||
$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: ';
|
$PHPMAILER_LANG['encoding'] = 'Błędny sposób kodowania znaków: ';
|
||||||
$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
|
$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
|
||||||
$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
|
$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
|
||||||
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
|
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
|
||||||
$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: ';
|
$PHPMAILER_LANG['from_failed'] = 'Następujący adres nadawcy jest nieprawidłowy lub nie istnieje: ';
|
||||||
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
|
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
|
||||||
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' .
|
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' . 'następujący adres odbiorcy jest nieprawidłowy lub nie istnieje: ';
|
||||||
'następujący adres Odbiorcy jest nieprawidłowy: ';
|
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email odbiorcy.';
|
||||||
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
|
|
||||||
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
|
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
|
||||||
$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';
|
$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi lub nie istnieją: ';
|
||||||
$PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: ';
|
$PHPMAILER_LANG['signing'] = 'Błąd podpisywania wiadomości: ';
|
||||||
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() zakończone niepowodzeniem.';
|
$PHPMAILER_LANG['smtp_connect_failed'] = 'Wywołanie funkcji SMTP Connect() zostało zakończone niepowodzeniem.';
|
||||||
$PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: ';
|
$PHPMAILER_LANG['smtp_error'] = 'Błąd SMTP: ';
|
||||||
$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: ';
|
$PHPMAILER_LANG['variable_set'] = 'Nie można ustawić lub zmodyfikować zmiennej: ';
|
||||||
$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';
|
$PHPMAILER_LANG['extension_missing'] = 'Brakujące rozszerzenie: ';
|
||||||
|
9
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
9
vendor/phpmailer/phpmailer/src/PHPMailer.php
vendored
@ -750,7 +750,7 @@ class PHPMailer
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const VERSION = '6.6.4';
|
const VERSION = '6.6.5';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error severity: message only, continue processing.
|
* Error severity: message only, continue processing.
|
||||||
@ -1671,7 +1671,7 @@ class PHPMailer
|
|||||||
return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
|
return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
|
||||||
}
|
}
|
||||||
} catch (Exception $exc) {
|
} catch (Exception $exc) {
|
||||||
if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) {
|
if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true && $this->smtp->connected()) {
|
||||||
$this->smtp->reset();
|
$this->smtp->reset();
|
||||||
}
|
}
|
||||||
$this->setError($exc->getMessage());
|
$this->setError($exc->getMessage());
|
||||||
@ -1863,7 +1863,7 @@ class PHPMailer
|
|||||||
if (!static::isPermittedPath($path)) {
|
if (!static::isPermittedPath($path)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$readable = file_exists($path);
|
$readable = is_file($path);
|
||||||
//If not a UNC path (expected to start with \\), check read permission, see #2069
|
//If not a UNC path (expected to start with \\), check read permission, see #2069
|
||||||
if (strpos($path, '\\\\') !== 0) {
|
if (strpos($path, '\\\\') !== 0) {
|
||||||
$readable = $readable && is_readable($path);
|
$readable = $readable && is_readable($path);
|
||||||
@ -2101,6 +2101,9 @@ class PHPMailer
|
|||||||
$this->smtp->setDebugLevel($this->SMTPDebug);
|
$this->smtp->setDebugLevel($this->SMTPDebug);
|
||||||
$this->smtp->setDebugOutput($this->Debugoutput);
|
$this->smtp->setDebugOutput($this->Debugoutput);
|
||||||
$this->smtp->setVerp($this->do_verp);
|
$this->smtp->setVerp($this->do_verp);
|
||||||
|
if ($this->Host === null) {
|
||||||
|
$this->Host = 'localhost';
|
||||||
|
}
|
||||||
$hosts = explode(';', $this->Host);
|
$hosts = explode(';', $this->Host);
|
||||||
$lastexception = null;
|
$lastexception = null;
|
||||||
|
|
||||||
|
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
2
vendor/phpmailer/phpmailer/src/POP3.php
vendored
@ -46,7 +46,7 @@ class POP3
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const VERSION = '6.6.4';
|
const VERSION = '6.6.5';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default POP3 port number.
|
* Default POP3 port number.
|
||||||
|
3
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
3
vendor/phpmailer/phpmailer/src/SMTP.php
vendored
@ -35,7 +35,7 @@ class SMTP
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const VERSION = '6.6.4';
|
const VERSION = '6.6.5';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SMTP line break constant.
|
* SMTP line break constant.
|
||||||
@ -682,7 +682,6 @@ class SMTP
|
|||||||
*/
|
*/
|
||||||
public function close()
|
public function close()
|
||||||
{
|
{
|
||||||
$this->setError('');
|
|
||||||
$this->server_caps = null;
|
$this->server_caps = null;
|
||||||
$this->helo_rply = null;
|
$this->helo_rply = null;
|
||||||
if (is_resource($this->smtp_conn)) {
|
if (is_resource($this->smtp_conn)) {
|
||||||
|
2
vendor/services.php
vendored
2
vendor/services.php
vendored
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
// This file is automatically generated at:2022-10-07 16:19:38
|
// This file is automatically generated at:2022-10-09 21:18:22
|
||||||
declare (strict_types = 1);
|
declare (strict_types = 1);
|
||||||
return array (
|
return array (
|
||||||
0 => 'taoser\\addons\\Service',
|
0 => 'taoser\\addons\\Service',
|
||||||
|
@ -16,6 +16,7 @@ namespace Workerman\Connection;
|
|||||||
/**
|
/**
|
||||||
* ConnectionInterface.
|
* ConnectionInterface.
|
||||||
*/
|
*/
|
||||||
|
#[\AllowDynamicProperties]
|
||||||
abstract class ConnectionInterface
|
abstract class ConnectionInterface
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
14
vendor/workerman/workerman/Worker.php
vendored
14
vendor/workerman/workerman/Worker.php
vendored
@ -26,6 +26,7 @@ use \Exception;
|
|||||||
* Worker class
|
* Worker class
|
||||||
* A container for listening ports
|
* A container for listening ports
|
||||||
*/
|
*/
|
||||||
|
#[\AllowDynamicProperties]
|
||||||
class Worker
|
class Worker
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -33,7 +34,7 @@ class Worker
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const VERSION = '4.1.3';
|
const VERSION = '4.1.4';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status starting.
|
* Status starting.
|
||||||
@ -637,9 +638,18 @@ class Worker
|
|||||||
if (\DIRECTORY_SEPARATOR !== '/') {
|
if (\DIRECTORY_SEPARATOR !== '/') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$fd = $fd ?: \fopen(static::$pidFile . '.lock', 'a+');
|
$lock_file = static::$pidFile . '.lock';
|
||||||
|
$fd = $fd ?: \fopen($lock_file, 'a+');
|
||||||
if ($fd) {
|
if ($fd) {
|
||||||
flock($fd, $flag);
|
flock($fd, $flag);
|
||||||
|
if ($flag === \LOCK_UN) {
|
||||||
|
fclose($fd);
|
||||||
|
$fd = null;
|
||||||
|
clearstatcache();
|
||||||
|
if (\is_file($lock_file)) {
|
||||||
|
unlink($lock_file);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<p class="fly-home-info">
|
<p class="fly-home-info">
|
||||||
<i class="iconfont icon-kiss" title="飞吻"></i><span style="color: #FF7200;">{$u.point} {:lang('accumulate points')}</span>
|
<i class="iconfont icon-kiss" title="飞吻"></i><span style="color: #FF7200;">{$u.point} {:lang('accumulate points')}</span>
|
||||||
<i class="iconfont icon-shijian"></i><span>{$u.create_time|date='Y-m-d'} {:lang('join')}</span>
|
<i class="iconfont icon-shijian"></i><span>{$u.create_time|date='Y-m-d'} {:lang('join')}</span>
|
||||||
<i class="iconfont icon-chengshi"></i>{if session('user_id')}<span>来自</span>{:hook('ipShow',$u.city)} {else /} lang('log in to view') {/if}
|
<i class="iconfont icon-chengshi"></i>{if session('user_id')}<span>来自</span>{:hook('ipShow',$u.city)} {else /} {:lang('log in to view')} {/if}
|
||||||
</p>
|
</p>
|
||||||
<p class="fly-home-sign">({$u.sign ? $u.sign|raw : lang('it is not signed yet')})</p>
|
<p class="fly-home-sign">({$u.sign ? $u.sign|raw : lang('it is not signed yet')})</p>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user