Compare commits

..

1 Commits

Author SHA1 Message Date
MI15\Win
689dcb2e94 v2.0.17-20230428 2023-04-28 15:45:38 +08:00
17 changed files with 468 additions and 41 deletions

View File

@@ -119,7 +119,54 @@ if(!empty($_GET['type'])){
opcache_reset(); //清理PHP缓存
}
msgA(['code'=>1,'msg'=>'操作成功']);
//改账号
}elseif($_GET['type'] == 'set_user_name'){
//新用户名是否合规
if(empty($_POST['new_user_name'])){
msgA(['code'=>-1,'msg'=>'用户名不能为空']);
}elseif(empty($_POST['ID'])){
msgA(['code'=>-1,'msg'=>'ID不能为空']);
}elseif(!preg_match('/^[A-Za-z0-9]{4,13}$/',$_POST['new_user_name'])){
msg(-1,'账号只能是4到13位的数字和字母!');
}
//检测是否冲突
if(file_exists(DIR."/data/user/".$_POST['new_user_name'])){
msgA(['code'=>-1,'msg'=>'data/user/存在同名文件夹']);
}
if(file_exists(DIR."/data/backup/".$_POST['new_user_name'])){
msgA(['code'=>-1,'msg'=>'data/backup/存在同名文件夹']);
}
//读取用户信息
$USER = get_db("global_user", "*", ["ID" => $_POST['ID']]);
if(empty($USER)){
msgA(['code'=>-1,'msg'=>'用户ID不存在']);
}elseif($USER['User'] == $_POST['new_user_name']){
msgA(['code'=>-1,'msg'=>'新用户名不能和旧的一样']);
}elseif(has_db('global_user',['User'=>$_POST['new_user_name']])){
msgA(['code'=>-1,'msg'=>'新账号已存在,请核对后再试!']);
}
//移动数据目录
$Path = DIR.'/data/user/'.$USER['User'];
if(is_dir($Path)){
$New_Path = DIR.'/data/user/'.$_POST['new_user_name'];
if(!rename($Path,$New_Path)){
msgA(['code'=>-1,'msg'=>'移动数据目录失败']);
}
}
//移动备份目录
$Path = DIR.'/data/backup/'.$USER['User'];
if(is_dir($Path)){
$New_Path = DIR.'/data/backup/'.$_POST['new_user_name'];
if(!rename($Path,$New_Path)){
msgA(['code'=>-1,'msg'=>'移动备份目录失败']);
}
}
update_db("user_login_info", ["user" => $_POST['new_user_name']], ["user" => $USER['User']]);
update_db("user_log", ["user" => $_POST['new_user_name']], ["user" => $USER['User']]);
update_db("global_user", ["User" => $_POST['new_user_name']], ["ID" => $_POST['ID']],[1,'操作成功']);
}
msgA(['code'=>-1,'msg'=>'请求类型错误']);
}else{
//判断是否已验证
@@ -174,7 +221,7 @@ function echo_Atool(){
<link rel="stylesheet" href="../static/Layui/v2.6.8/css/layui.css">
<style>
html, body {min-width: 1200px;background-color: #fff;position: relative;}
.page-wrapper {width: 900px;margin: 0 auto;padding: 0 15px;}
.page-wrapper {width: 1200px;margin: 0 auto;padding: 0 15px;}
</style>
</head>
<body>
@@ -219,6 +266,7 @@ function echo_Atool(){
<div class="layui-btn-group">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="set_pwd">改密码</a>
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="set_root">设站长</a>
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="set_user_name">改账号</a>
</div>
</script>
<script src="../static/Layui/v2.6.8/layui.js"></script>
@@ -232,7 +280,7 @@ function echo_Atool(){
var table = layui.table;
var cols = [[
{field:'ID',title:'ID',width:60,sort:true}
,{title:'操作',toolbar:'#tablebar',width:130}
,{title:'操作',toolbar:'#tablebar',width:175}
,{field:'User',title:'账号',minWidth:120,templet:function(d){
return '<a style="color:#3c78d8" title="打开用户主页" target="_blank" href="../?u='+d.User+'">'+d.User+'</a>'
}}
@@ -299,6 +347,18 @@ function echo_Atool(){
layer.msg(data.msg, {icon: 5});
}
});
}else if(obj.event == 'set_user_name'){
layer.prompt({formType: 3,value: '',title:'请输入新账号 (原账号:'+data.User+')'}, function(value, index, elem){
$.post('./ATool.php?type=set_user_name',{ID:data.ID,new_user_name:value},function(data,status){
if(data.code == 1) {
layer.close(index);
table.reload('table');
layer.msg(data.msg, {icon: 1});
}else{
layer.msg(data.msg, {icon: 5});
}
});
});
}
});
$('.set').click(function () {

View File

@@ -68,6 +68,49 @@ if(!preg_match('/^[A-Za-z0-9]{4,13}$/', $user)){
msg(-1,'该账号已被站长保留!');
}
//读取邮件配置
$mail_config = get_db("global_config","v",["k"=>"mail_config"]);
if(!empty($mail_config)){
$mail_config = unserialize($mail_config);
if($mail_config['verify_email'] == 1 && $_GET['type'] == 'getcode'){
//判断是否频繁发送
$send_interval = intval($mail_config['send_interval']);
if($send_interval > 0 && has_db('user_log',['type'=>'send_email','ip'=>$IP,'time[>]'=>time() - $send_interval])){
msg(-1,'请勿频繁获取验证码');
}
$mail_config['addressee'] = $_POST['Email'];
$mail_config['Subject'] = '验证码';
$code = mt_rand(100000,999999);
if(!strstr($mail_config['verify_template'],'$code')){
$mail_config['verify_template'] = '您的验证:$code';
}
$mail_config['Body'] = empty($mail_config['verify_template']) ? '您的验证:'.$code:str_replace('$code', $code, $mail_config['verify_template']);
$mail_config['return']='bool';
if(send_email($mail_config)){
session_start();
$_SESSION["{$_POST['Email']}"]['code'] = "$code";
$_SESSION["{$_POST['Email']}"]['time'] = time();
insert_db("user_log", ["uid" => 0,"user"=>$user,"ip"=>$IP,"time"=>time(),"type" => 'send_email',"content"=>Get_Request_Content(),"description"=>"发送注册验证码:".$code.', 接收邮箱: '.$_POST['Email']]);
msg(1,'发送成功');
}else{
msg(-1,'发送失败');
}
exit;
}
}
//验证码效验
if(!empty($mail_config['verify_email']) && $mail_config['verify_email'] == 1){
session_start();
if(empty($_POST['code'])){
msg(-1,'请输入验证码');
}elseif ($_POST['code'] != $_SESSION["{$_POST['Email']}"]['code']) {
msg(-1,'验证码错误'.$_SESSION["{$_POST['Email']}"]['code']);
}elseif($_SESSION["{$_POST['Email']}"]['time'] + 300 < time()){
msg(-1,'验证码已过期');
}
unset($_SESSION["{$_POST['Email']}"]);
}
//插入用户表和创建初始数据库
$RegTime = time();
$PassMD5 = Get_MD5_Password($pass,$RegTime);
@@ -155,28 +198,28 @@ insert_db("user_config", ["uid" => $USER_DB['ID'],"k"=>"s_templates","v"=>$globa
$time = time();
if($blueprint){
$categorys = select_db('user_categorys','*',['uid'=>$Group['uid']]);
$inks = select_db('user_links','*',['uid'=>$Group['uid']]);
$links = select_db('user_links','*',['uid'=>$Group['uid']]);
}else{
$categorys = select_db('user_categorys','*',['uid'=>0]);
$inks = select_db('user_links','*',['uid'=>0]);
$links = select_db('user_links','*',['uid'=>0]);
}
foreach ($categorys as $key => $data){
$categorys[$key]['uid'] = $USER_DB['ID'];
$categorys[$key]['add_time'] = $time;
$categorys[$key]['up_time'] = $time;
unset($categorys[$key]['id']);
$data['uid'] = $USER_DB['ID'];
$data['add_time'] = $time;
$data['up_time'] = $time;
unset($data['id']);
insert_db('user_categorys',$data);
}
insert_db('user_categorys',$categorys);
foreach ($inks as $key => $data){
$inks[$key]['uid'] = $USER_DB['ID'];
$inks[$key]['add_time'] = $time;
$inks[$key]['up_time'] = $time;
unset($inks[$key]['id']);
foreach ($links as $key => $data){
$data['uid'] = $USER_DB['ID'];
$data['add_time'] = $time;
$data['up_time'] = $time;
unset($data['id']);
insert_db('user_links',$data);
}
insert_db('user_links',$inks);
//写初始ID
$link_id = intval(max_db('user_links','lid',['uid'=>$USER_DB['ID']])) +1;
insert_db("user_config", ["uid"=>$USER_DB['ID'],"k"=>"link_id","v"=>$link_id,"t"=>"max_id","d"=>'链接ID']);

View File

@@ -44,8 +44,10 @@ if(!is_login()){
}else{
msg(-1,'请先验证二级密码!');
}
//是否加载扩展API
if($global_config['api_extend'] == 1 && is_file('./system/api_extend.php')){
require './system/api_extend.php';
}
//站长相关方法名
$root = ['write_subscribe','write_sys_settings','write_default_settings','read_user_list','write_user_info','read_purview_list','read_users_list','write_users','read_regcode_list','write_regcode','other_upsys','read_log','other_root'];
@@ -1098,6 +1100,9 @@ function other_testing_link(){
global $global_config;
if ( $global_config['offline'] == '1'){ msg(-1,"离线模式无法使用此功能"); }
$code = get_http_code($_POST['url']);
if($code != 200 && $code != 302 && $code != 301){
$code = ccurl($_POST['url'])['code'];
}
msgA(['code' => 0 ,'StatusCode'=> $code]);
}

View File

@@ -321,10 +321,25 @@ function write_user_info(){
//删除
case "Del":
$uids = json_decode($_POST['ID']);
$USER_S = select_db('global_user','User',['ID'=>$uids]);
foreach($USER_S as $USER){
if(is_dir(DIR.'/data/user/'.$USER)){
deldir(DIR.'/data/user/'.$USER);
if(is_dir(DIR.'/data/user/'.$USER)){
msg(1,'删除用户数据目录失败,用户名:'.$USER);
}
}
if(is_dir(DIR.'/data/backup/'.$USER)){
deldir(DIR.'/data/backup/'.$USER);
if(is_dir(DIR.'/data/backup/'.$USER)){
msg(1,'删除用户备份目录失败,用户名:'.$USER);
}
}
}
foreach (['regcode_list','user_categorys','user_config','user_count','user_links','user_log','user_login_info'] as $table){
delete_db($table,[ "uid" => $uids ]);
}
delete_db('global_user',["ID" => json_decode($_POST['ID']) ]);
delete_db('global_user',["ID" => $uids]);
msg(1,'删除成功');
break;
//设用户组
@@ -504,6 +519,7 @@ function write_sys_settings(){
'copyright'=>['empty'=>true],
'global_header'=>['empty'=>true],
'global_footer'=>['empty'=>true],
'api_extend'=>['empty'=>true],
//扩展功能-(全局开关)
'apply'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'收录管理参数错误'],
'guestbook'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'留言管理参数错误'],
@@ -609,6 +625,7 @@ function read_log(){
$count = count_db('user_log',$where);
//分页
$where['LIMIT'] = [$offset,$limit];
$where['ORDER']['id'] = 'DESC';
//查询
$datas = select_db('user_log','*',$where);
//返回
@@ -651,6 +668,38 @@ function other_root(){
}
write_global_config('username_retain',$_POST['username_retain'],'账号保留');
msg(1,'保存成功');
}elseif($_GET['type'] == 'write_mail_config'){
if($GLOBALS['global_config']['offline'] == '1'){msg(-1,"离线模式无法使用此功能");}
if(!is_subscribe('bool')){msg(-1,"未检测到有效授权,无法使用该功能!");}
//检测PHPMailer是否存在
clearstatcache();
if(!is_file(DIR.'/system/PHPMailer/PHPMailer.php')){
$filePath = "./data/temp/PHPMailer_6.8.0.tar.gz";
if(downFile('https://update.lm21.top/TwoNav/updata/PHPMailer_6.8.0.tar.gz','PHPMailer_6.8.0.tar.gz','./data/temp/')){
$file_md5 = md5_file($filePath);
if($file_md5 != "07251997fb7ebf3bf2d296d4214ccf0a"){
unlink($filePath);
msg(-1,'效验PHPMailer失败<br/>!');
}
}else{
msg(-1,'下载PHPMailer失败,请重试!<br/>如需手动安装可联系技术支持!');
}
try {
$phar = new PharData($filePath);
$phar->extractTo('./system/', null, true);
unlink($filePath);
clearstatcache();
} catch (Exception $e) {
msg(-1,'安装PHPMailer失败');
}
}
write_global_config('mail_config',$_POST,'账号保留');
msg(1,'保存成功');
}elseif($_GET['type'] == 'write_mail_test'){
$_POST['Subject'] = 'TwoNav 测试邮件' . time();
$_POST['Body'] = '<h1>TwoNav 测试邮件</h1>' . date('Y-m-d H:i:s');
send_email($_POST);
}
}

View File

@@ -7,7 +7,7 @@ session_start();
//判断请求类型
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if( !$_SESSION['initial'] ){ msg(-1,'当前环境无法满足程序运行条件!'); }
if(empty($_SESSION['initial'])){ msg(-1,'当前环境无法满足程序运行条件!'); }
define('Debug',TRUE);
$db = null;
$USER_DB =null;
@@ -51,7 +51,7 @@ function diagnosis() {
$log='';
$log .= "服务器时间:" . date("Y-m-d H:i:s") ."<br />";
$log .= "系统信息:" . php_uname('s').','.php_uname('r') ."<br />";
$log .= "当前版本:" . SysVer . "<br />";
$log .= "当前版本:" . file_get_contents('./system/version.txt') . "<br />";
//检查PHP版本需要大于5.6小于8.0
$php_version = floatval(PHP_VERSION);
@@ -76,7 +76,7 @@ function diagnosis() {
if(function_exists("opcache_reset")){
$log = $log ."opcache: 已安装<br />";
}
$log .= "脚本权限:" . get_current_user()."/".substr(sprintf("%o",fileperms("index.php")),-4)."\n";
$log .= "脚本权限:" . get_current_user()."/".substr(sprintf("%o",fileperms("index.php")),-4)."<br />";
$log .= in_array("pdo_sqlite",$ext) ? "PDO_Sqlite支持<br />" : "PDO_Sqlite不支持 (导入db3)<br />";
$log .= in_array("curl",$ext) ? "curl支持<br />" : "curl不支持 (链接识别/在线更新/主题下载/订阅等)<br />";
$log .= in_array("mbstring",$ext) ? "mbstring支持<br />" : "mbstring不支持 (链接识别)<br />";

View File

@@ -480,6 +480,7 @@ function get_http_code($url) {
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36');
$data = curl_exec($curl);
$return = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
@@ -495,6 +496,7 @@ function ccurl($url,$overtime = 3){
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36');
$Res["content"] = curl_exec ( $curl ) ;
$Res["code"] = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close ( $curl ) ;
@@ -636,3 +638,51 @@ function Get_Rand_Str( $length = 8 ,$extend = false){
}
return $str;
}
//发送邮件
function send_email($config){
if(!is_file(DIR.'/system/PHPMailer/PHPMailer.php')){
msg(-1,'未安装PHPMailer!');
}
require DIR.'/system/PHPMailer/Exception.php';
require DIR.'/system/PHPMailer/PHPMailer.php';
require DIR.'/system/PHPMailer/SMTP.php';
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
try {
$mail->CharSet ="UTF-8";
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = $config['host'];
$mail->SMTPAuth = true;
$mail->Username = $config['user'];
$mail->Password = $config['pwd'];
$mail->SMTPSecure = $config['secure'];
$mail->Port = intval($config['port']);
if(preg_match('/(.+)<(.+)>/', $config['sender'], $match)){
$mail->setFrom($match[2],$match[1]);
}else{
$mail->setFrom($config['sender']);
}
$mail->addAddress($config['addressee']); //收件人
$mail->isHTML(true);
$mail->Subject = $config['Subject'];
$mail->Body = $config['Body'];
$mail->send();
if(!empty($config['return']) && $config['return'] == 'bool'){
return true;
}
msg(1,'邮件发送成功');
} catch (Exception $e) {
if(!empty($config['return']) && $config['return'] == 'bool'){
return false;
}
if(Debug){
msgA(['code'=>-1,'msg'=>'发送失败:'.$mail->ErrorInfo]);
}else{
msg(-1,'发送失败');
}
}
}

View File

@@ -69,7 +69,10 @@ if(empty($c) || in_array($c,['index','click'])){
}//如果参数错误则使用本地服务器
}
//取分类图标(六零系主题在用)
function get_category($content){
function get_category($content){ //抽风的命名..过度几个版本后删除
return get_category_icon($content);
}
function get_category_icon($content){
if(empty($content)){
return '';
}

View File

@@ -1 +1 @@
v2.0.16-20230425
v2.0.17-20230428

View File

@@ -0,0 +1,144 @@
<?php
if($USER_DB['UserGroup'] != 'root'){$content='您没有权限访问此页面'; require(DIR.'/templates/admin/page/404.php');exit;}
$title='系统设置';require(dirname(__DIR__).'/header.php');
?>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<form class="layui-form" lay-filter="form">
<div class="layui-form layuimini-form layui-form-pane">
<blockquote class="layui-elem-quote layui-text" style="">
1.此功能<a href="https://gitee.com/tznb/OneNav/wikis/%E8%AE%A2%E9%98%85%E6%9C%8D%E5%8A%A1%E6%8C%87%E5%BC%95" target="_blank">授权用户</a>专享
</blockquote>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"><legend>SMTP 配置</legend></fieldset>
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-inline">
<input type="pass" name="user" lay-verify="required" lay-reqtext="账号不能为空" placeholder='请输入账号' autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-inline">
<input type="password" name="pwd" lay-verify="required" lay-reqtext="密码不能为空" placeholder='请输入密码或授权码' autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">服务器</label>
<div class="layui-input-inline">
<input type="text" name="host" lay-verify="required" lay-reqtext="服务器不能为空" placeholder='请输入发件服务器地址' autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">端口</label>
<div class="layui-input-inline">
<input type="number" name="port" lay-verify="required" lay-reqtext="端口不能为空" placeholder='请输入服务器端口' value="465" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">协议</label>
<div class="layui-input-inline" >
<select name="secure">
<option value="ssl" selected="">SSL</option>
<option value="TLS" >TLS</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发送人</label>
<div class="layui-input-inline">
<input type="text" name="sender" lay-verify="required" lay-reqtext="发送人邮箱不能为空" placeholder='' autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">收件人</label>
<div class="layui-input-inline">
<input type="text" name="addressee" placeholder='仅用于发件测试' autocomplete="off" class="layui-input">
</div>
</div>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"><legend>注册参数</legend></fieldset>
<div class="layui-form-item">
<label class="layui-form-label">验证邮箱</label>
<div class="layui-input-inline" >
<select name="verify_email">
<option value="0" selected="">关闭</option>
<option value="1" >开启</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发送间隔</label>
<div class="layui-input-inline">
<input type="number" name="send_interval" lay-verify="required" lay-reqtext="发送间隔不能为空" placeholder='IP发送间隔,单位秒!' value="60" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">验证码模板</label>
<div class="layui-input-block">
<textarea name="verify_template" class="layui-textarea" placeholder='您的验证码: $code'></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="send_test">测试</button>
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">确认保存</button>
</div>
</div>
</div>
</form>
</div>
</div>
<?php load_static('js.layui');?>
<script src="./templates/admin/js/public.js?v=<?php echo $Ver;?>"></script>
<script>
layui.use(['jquery','form'], function () {
var form = layui.form;
var layer = layui.layer;
var $ = layui.jquery;
//表单赋值
form.val('form', <?php echo json_encode(unserialize( get_db("global_config", "v", ["k" => "mail_config"])));?>);
//监听提交
form.on('submit(save)', function (data) {
$.post(get_api('other_root','write_mail_config'),data.field,function(data,status){
if(data.code == 1) {
if(data.msg!="保存成功"){
layer.alert(data.msg)
}else{
layer.msg(data.msg, {icon: 1});
}
}else{
layer.msg(data.msg, {icon: 5});
}
});
return false;
});
//测试
form.on('submit(send_test)', function (data) {
layer.load(1, {shade:[0.3,'#fff']});
layer.msg('正在发送中..', {icon: 16,time: 1000*300});
$.post(get_api('other_root','write_mail_test'),data.field,function(data,status){
layer.closeAll();
if(data.code == 1) {
layer.alert(data.msg);
}else{
layer.msg(data.msg, {icon: 5});
}
});
return false;
});
});
</script>
</body>
</html>

View File

@@ -13,6 +13,7 @@ require(dirname(__DIR__).'/header.php');
<option value="" selected>全部</option>
<option value="login">登录</option>
<option value="register">注册</option>
<option value="send_email">邮件</option>
</select>
</div>
</div>
@@ -57,6 +58,9 @@ layui.use(['table','layer','form'], function () {
//{type:'checkbox'} //开启复选框
{field:'id',title:'ID',width:60}
,{field:'user',title:'账号',width:120,templet:function(d){
if(d.type == 'send_email'){
return d.user;
}
return '<a style="color:#3c78d8" title="用户ID:' + d.uid + ',点击打开用户主页" target="_blank" href="./?u='+d.user+'">'+d.user+'</a>'
}}
,{field:'ip',title:'请求IP',width:140,templet:function(d){

View File

@@ -179,6 +179,16 @@ $title='系统设置';require(dirname(__DIR__).'/header.php');
<textarea name="global_footer" class="layui-textarea" placeholder='例如备案号,统计代码等,支持HTML,JS,CSS'></textarea>
</div>
</div>
<div class="layui-form-item" id="api_extend" style="display:none;">
<label class="layui-form-label required">api_extend</label>
<div class="layui-input-inline">
<select name="api_extend">
<option value="0" selected="">关闭</option>
<option value="1" >开启</option>
</select>
</div>
</div>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"><legend>扩展功能</legend></fieldset>
<blockquote class="layui-elem-quote layui-text" style="">注:开关后请刷新整个页面</blockquote>
@@ -244,6 +254,18 @@ layui.use(['jquery','form'], function () {
});
return false;
});
//开启隐藏功能
$('.layui-elem-field').click(function () {
if(Number( $(this).attr('click')) >= 6){
$("#api_extend").show();
}else{
let click = $(this).attr('click') ? Number($(this).attr('click')) + 1 : 0;
$(this).attr('click',click)
}
});
});
</script>
</body>

View File

@@ -27,7 +27,7 @@ require(dirname(__DIR__).'/header.php');
<button type="button" class="layui-btn" layuimini-content-href="root/sys_log" data-title="系统日志">系统日志</button>
<button type="button" class="layui-btn" layuimini-content-href="updatelog" data-title="更新日志">更新日志</button>
<button type="button" class="layui-btn" layuimini-content-href="root/import_data" data-title="导入数据">导入数据</button>
<button type="button" class="layui-btn" layuimini-content-href="root/mail_set" data-title="邮件配置">邮件配置</button>
</div>
<pre class="layui-code" id="console_log" >
1.功能都集中在上方的按钮了,需要那个就点击那个!

View File

@@ -2,6 +2,20 @@
<body>
<div class="layuimini-container">
<div class="layuimini-main" style=" margin-left: 20px;">
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h4 class="layui-timeline-title">v2.0.17-20230428</h4>
<ul>
<li>[优化] 删除用户时支持同时删除用户文件夹 ( 图标/留言等数据 ) 和备份数据</li>
<li>[优化] 链接列表 > 检测功能的准确性</li>
<li>[优化] 系统日志按新旧排序,支持记录邮件发送日志</li>
<li>[修复] 用户注册初始数据可能复制失败</li>
<li>[新增] <a href="https://gitee.com/tznb/TwoNav/wikis/pages?sort_id=7993451&doc_id=3767990" target="_blank">ATool工具箱</a>支持修改用户名 ( 建议修改前先备份数据 ) </li>
<li>[新增] 网站管理 > 站长工具 > 邮件配置 ( 用于配置注册时发送验证码 )</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">

View File

@@ -36,7 +36,7 @@ if ($DescrRowNumber <= 0 ){
<link rel='stylesheet' href='<?php echo $libs?>/ContextMenu/2.9.2/jquery.contextMenu.min.css'>
<link rel="stylesheet" href="<?php echo $libs?>/Font-awesome/4.7.0/css/font-awesome.css">
<link rel="stylesheet" href="<?php echo $libs?>/Layui/v2.6.8/css/layui-icon.css">
<link rel="stylesheet" href="<?php echo $theme_dir?>/static/style<?php echo $theme_config['CardNum'];?>.css?v=<?php echo $version; ?>">
<link rel="stylesheet" href="<?php echo $theme_dir?>/static/style<?php echo $theme_config['CardNum'];?>.css?v=<?php echo $theme_ver; ?>">
<link rel="shortcut icon" href="<?php echo $favicon;?>">
<style>
<?php $SBC = $theme_config['SidebarBackgroundColor']; if( empty($night) ) {?>
@@ -242,7 +242,7 @@ var is_login = <?php echo is_login?'true':'false'; ?>;
<script src = "<?php echo $libs?>/MDUI/v1.0.1/js/mdui.min.js"></script>
<script src = "<?php echo $libs?>/Other/holmes.js"></script>
<script src = "<?php echo $libs; ?>/jquery/jquery.qrcode.min.js"></script>
<script src = "<?php echo $theme_dir?>/static/embed.js?v=<?php echo $version.time(); ?>"></script>
<script src = "<?php echo $theme_dir?>/static/embed.js?v=<?php echo $theme_ver;?>"></script>
<?php
// 如果Key不为空,则加载天气插件!
if ($WeatherPosition != 0){

View File

@@ -2,8 +2,8 @@
"name":"默认主题(加强)",
"description":"默认主题(加强)",
"homepage":"https://gitee.com/tznb/OneNav",
"version":"2.0.0",
"update":"2023/03/15",
"version":"2.0.1",
"update":"2023/04/25",
"author":"落幕",
"screenshot":"https://s3.bmp.ovh/imgs/2022/04/17/8cac968a8cc8135c.png",
"config": {

View File

@@ -2,7 +2,7 @@
"name": "默认",
"description": "默认",
"homepage": "https://gitee.com/tznb/TwoNav",
"version": "2.0.1",
"update": "2023/04/01",
"version": "2.0.2",
"update": "2023/04/25",
"author": "TwoNav"
}

View File

@@ -1,4 +1,10 @@
<?php if(!defined('DIR')){header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit;}?>
<?php if(!defined('DIR')){header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit;}
$mail_config = get_db("global_config","v",["k"=>"mail_config"]);
if(!empty($mail_config)){
$mail_config = unserialize($mail_config);
}
?>
<!DOCTYPE html>
<html>
<head>
@@ -33,17 +39,26 @@
<input type="text" name="User" lay-verify="required" placeholder="请输入账号">
</div>
<div class="item">
<span class="icon layui-icon layui-icon-release"></span>
<input type="text" name="Email" lay-verify="required|email" placeholder="请输入邮箱">
</div>
<div class="item">
<span class="icon layui-icon layui-icon-password"></span>
<input type="password" name="Password" lay-verify="required" placeholder="请输入密码">
<span class="bind-password icon icon-4"></span>
</div>
<div class="item">
<span class="icon layui-icon layui-icon-email"></span>
<input type="text" name="Email" lay-verify="required|email" placeholder="请输入邮箱">
</div>
<?php if($mail_config['verify_email'] == 1){ ?>
<div class="item" style="width: 150px;">
<span class="icon layui-icon layui-icon-auz"></span>
<input type="text" name="code" placeholder="请输入验证码">
<div style="display: inline-block;position: absolute;right: 0px;">
<span><a class="layui-btn layui-btn-normal" lay-submit="" lay-filter="getcode" id="getcode">获取验证码</a></span>
</div>
</div>
<?php }?>
<div class="item" <?php echo $global_config['RegOption'] == 2 ?'':'style = "display:none;"'?>>
<span class="icon layui-icon layui-icon-fonts-code"></span>
<input type="text" name="regcode" placeholder="请输入注册码" value="<?php echo $_GET['key'];?>">
@@ -88,8 +103,27 @@
$("input[name='Password']").attr('type', 'text');
}
});
//获取验证码
form.on('submit(getcode)', function (data) {
data = data.field;
data.Password = $.md5(data.Password);
if( /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(data.Email)){
layer.load(1, {shade:[0.3,'#fff']});
layer.msg('正在发送中..', {icon: 16,time: 1000*300});
$.post('./index.php?c=<?php echo $c; ?>&u='+data.User+"&type=getcode",data,function(re,status){
layer.closeAll();
if(re.code == 1) {
layer.msg("发送成功", {icon: 1});
}else{
layer.msg(re.msg, {icon: 5});
}
});
}else{
layer.msg('请输入正确的邮箱', {icon: 5});
}
});
// 进行注册操作
form.on('submit(login)', function (data) {
$("*").blur();
@@ -119,7 +153,6 @@ function Get_Invitation($base64) {
var content =decodeURIComponent(escape(window.atob($base64)));
if (content.substr(0,4) =='http'){
window.open(content);
//window.location.href = content;
}else{
layer.open({title:'获取注册码',content:content});
}