Compare commits

...

2 Commits

Author SHA1 Message Date
MI15\Win 01fdca800b v2.1.06-20231113 2023-11-14 01:25:59 +08:00
MI15\Win 77f357061a v2.1.05-20231106 2023-11-07 23:07:03 +08:00
15 changed files with 164 additions and 27 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ if(!empty($regcode_info['u_group'])){
}
//读取用户组信息,如果用户组不存在则设为默认用户组
if($UserGroup != 'default'){
if(!in_array($UserGroup,['default','root','visitor'])){
$Group = get_db('user_group','*',['code' => $UserGroup]);
if(empty( $Group )){
$UserGroup = 'default';
+1 -1
View File
@@ -69,7 +69,7 @@ if($page == 'config_home'){
msg(-1,"参数错误");
}
if(in_array($_GET['fn'],['guide','register'])){
$theme_config_db = get_db('user_config','v',['k'=>'theme_'.$theme,'uid'=>UID]);
$theme_config_db = get_db('global_config','v',['k'=>"theme_{$_GET['fn']}_{$theme}"]);
}else{
$theme_config_db = get_db('user_config','v',['t'=>'theme_'.$_GET['fn'],'k'=>$theme,'uid'=>UID]);
}
+5 -4
View File
@@ -1132,7 +1132,10 @@ function read_theme(){
msgA(['code'=>1,'data'=>$themes,'current'=>$current,'referrer'=>($data['referrer'] ?? '')]);
}
function msg_tip(){
msg(-1,'免费版不支持此功能,购买授权版<br /> <a href="https://gitee.com/tznb/TwoNav/wikis/pages?sort_id=7968669&doc_id=3767990" target="_blank" style="color: #1e9fff;">点击此处前往购买页面</a>');
if(is_subscribe()){
msg(-1,'请前往概要页面更新系统,未提示更新则尝试刷新页面<br />更新后即可解锁全部功能,如有疑问请联系客服');
}
msg(-1,'免费版不支持此功能<br /> <a href="https://gitee.com/tznb/TwoNav/wikis/pages?sort_id=7968669&doc_id=3767990" target="_blank" style="color: #1e9fff;">点击此处前往购买页面</a>');
}
//主题下载/更新/删除
@@ -1547,12 +1550,10 @@ function read_data(){
$date = date('Ymd', strtotime("-$i days"));
$dates[] = $date;
}
$dates = array_reverse($dates);
$day_data = [];
foreach ($dates as $date) {
$list = get_db('user_count', 'e', ['uid' => UID, 'k' => $date, 't' => 'ip_list']);
$list = unserialize($list);
$list = select_db('user_count','e',['uid'=>UID,'k'=>$date,'t'=>'access_ip']);
$day_data[$date] = empty($list) ? [] : $list ;
}
msgA(['code'=>1,'data'=>$day_data]);
+2 -2
View File
@@ -732,8 +732,8 @@ function send_email($config){
//统计访问ip数
function count_ip(){
$ip = Get_IP(); $k = date('Ymd'); $t = 'access_ip';
if(!has_db('user_count',['uid'=>UID,'k'=>$k,'t'=>$t,'v'=>$ip])){
insert_db("user_count",['uid'=>UID,'k'=>$k,'t'=>$t,'v'=>$ip]);
if(!has_db('user_count',['uid'=>UID,'k'=>$k,'t'=>$t,'e'=>$ip])){
insert_db("user_count",['uid'=>UID,'k'=>$k,'t'=>$t,'e'=>$ip,'v'=>0]);
write_user_count($k,'ip_count');//访问ip数+1
}
}
+1 -1
View File
@@ -1 +1 @@
v2.1.04-20231029
v2.1.06-20231113
+1
View File
@@ -35,6 +35,7 @@
<dl class="layui-nav-child">
<dd><a href="javascript:;" layuimini-content-href="LoginDevice" data-title="登录设备">登录设备</a></dd>
<dd><a href="javascript:;" layuimini-content-href="SecuritySetting" data-title="安全设置">安全设置</a></dd>
<dd><a href="javascript:;" layuimini-content-href="AccessRestrictions" data-title="访问限制">访问限制</a></dd>
<dd><a href="javascript:;" layuimini-content-href="UserPassword" data-title="修改密码">修改密码</a></dd>
<dd><hr></dd>
<dd><a href="javascript:;" id="logout">退出登录</a></dd>
+13 -5
View File
@@ -9,14 +9,22 @@ layui.use(['layer','miniTab'], function(){
// 获取最新信息
$.post(get_api('other_services','get_notice'),function(data,status){
console.log(data );
if(data.code == 200) {
$("#new_ver a").text(data.version);
$('#notice_link').text('');
data.notice.forEach(notice => {
$('#notice_link').append(`<div class="layuimini-notice"><div class="layuimini-notice-title"><a href="${notice.url}" target="_blank">${notice.title}</a></div></div>`);
});
$('#notice_text').html(data.message);
if (Array.isArray(data.notice) && data.notice.length > 0) {
data.notice.forEach(notice => {
$('#notice_link').append(`<div class="layuimini-notice"><div class="layuimini-notice-title"><a href="${notice.url}" target="_blank">${notice.title}</a></div></div>`);
});
}else{
$('.notice1').remove();
}
if(data.message.length > 0){
$('#notice_text').html(data.message);
}else{
$('.notice2').remove();
}
}
init_update();
$(".update").remove();
+3
View File
@@ -104,6 +104,9 @@ layui.use(function(){
$.post(`./index.php?c=api&method=read_theme&dir=${dir}&u=${u}&cache=${cache ? 'no':'yes'}`, function (r, status) {
layer.closeAll();
if (r.code == 1) {
if(r.referrer.length > 0){
$('meta[name="referrer"]').replaceWith(`<meta name="referrer" content="${r.referrer}">`);
}
datas = r.data;
render_data(r);
} else {
@@ -0,0 +1,71 @@
<?php $title='访问限制'; require 'header.php';?>
<style>
.layui-btn-container .layui-btn{border-width: 1px; border-style: solid; border-color: #FF5722!important; color: #FF5722!important;background: none;height: 30px; line-height: 30px; padding: 0 10px; font-size: 12px;}
</style>
<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="">
此功能<a href="https://gitee.com/tznb/TwoNav/wikis/pages?sort_id=7968669&doc_id=3767990" target="_blank">授权用户</a>专享
</blockquote>
<blockquote class="layui-elem-quote layui-text" style="">白名单模式 > 除了名单中的账号和分组一律不可访问您的主页<br />黑名单模式 > 黑名单中的账号和分组不可访问您的主页<br />匹配优先级: 用户组名单 > 账号名单<br />使用黑白名单模式时,未登录账号不可访问您的主页<br />名单中多个账号或分组时用半角的逗号,间隔<br />新增功能,难免会有BUG,如有遇到请反馈并关闭该功能</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">访问限制</label>
<div class="layui-input-inline" >
<select name="mode">
<option value="0" selected="">无限制</option>
<option value="white">白名单模式</option>
<option value="black">黑名单模式</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux"></div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">用户组名单</label>
<div class="layui-input-block">
<textarea name="users_list" class="layui-textarea" placeholder='填写用户组代号,例如: group1,group2,group3'></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">账号名单</label>
<div class="layui-input-block">
<textarea name="user_list" class="layui-textarea" placeholder='填写用户账号,例如: user1,user2,user3'></textarea>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">限制提示</label>
<div class="layui-input-block">
<textarea name="prompt" class="layui-textarea" placeholder='留空时: 显示引导页
以http开头时: 跳转到url
其他内容则直接显示'></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block"><button class="layui-btn layui-btn-normal" lay-submit lay-filter="save">确认保存</button></div>
</div>
</div>
</form>
</div>
</div>
<script src = "<?php echo $libs;?>/jquery/jquery-3.6.0.min.js"></script>
<?php load_static('js.layui');?>
<script>
layui.use(['jquery','form','miniTab'], function () {
var form = layui.form;
var layer = layui.layer;
var $ = layui.jquery;
var miniTab = layui.miniTab;
miniTab.listen();
//监听提交
form.on('submit(save)', function (data) {
return false;
});
});
</script>
</body>
</html>
+6 -1
View File
@@ -195,13 +195,18 @@ layui.use(['jquery','form','upload'], function () {
});
//监听提交
form.on('submit(save)', function (data) {
layer.load(0);
$.post('./index.php?c=api&method=write_site_setting&u='+u,data.field,function(data,status){
layer.closeLast('loading');
if(data.code == 1) {
layer.msg(data.msg, {icon: 1});
}else{
layer.msg(data.msg, {icon: 5});
}
});
}).fail(function(xhr, textStatus, errorThrown) {
layer.closeLast('loading');
layer.alert('请求失败');
});
return false;
});
+1 -1
View File
@@ -7,7 +7,7 @@
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<?php if(defined('referrer')) echo '<meta name="referrer" content="' . referrer . '">'."\n";?>
<meta name="referrer" content="no-referrer-when-downgrade">
<?php load_static('css');if($awesome) echo str_replace('#',$libs,' <link rel="stylesheet" href="#/Font-awesome/4.7.0/css/font-awesome.css" media="all">'."\n");?>
<script>var u = "<?php echo U;?>";</script>
</head>
+2 -2
View File
@@ -8,7 +8,7 @@ $data = empty($Notice)?[]:json_decode($Notice, true);
//输出最新动态
function echo_notice_link($data){
echo '<div class="layui-card"><div class="layui-card-header"><i class="fa fa-bullhorn icon"></i>最新动态</div><div class="layui-card-body layui-text" id="notice_link">';
echo '<div class="layui-card notice1"><div class="layui-card-header"><i class="fa fa-bullhorn icon"></i>最新动态</div><div class="layui-card-body layui-text" id="notice_link">';
foreach($data["notice"] as $value){
echo "<div class=\"layuimini-notice\"><div class=\"layuimini-notice-title\"><a href=\"{$value['url']}\" target=\"_blank\">{$value['title']}</a></div></div>";
}
@@ -17,7 +17,7 @@ function echo_notice_link($data){
//输出官方公告
function echo_notice_text($data){
echo '<div class="layui-card"><div class="layui-card-header"><i class="fa fa-bell-o icon"></i>官方公告</div><div class="layui-card-body layui-text layadmin-text" id="notice_text">';
echo '<div class="layui-card notice2"><div class="layui-card-header"><i class="fa fa-bell-o icon"></i>官方公告</div><div class="layui-card-body layui-text layadmin-text" id="notice_text">';
echo $data['message'];
echo '</div></div>';
}
+22 -5
View File
@@ -69,16 +69,22 @@ layui.use(['layer','form','miniTab'], function () {
});
//一键诊断
$('.diagnose').on('click', function(){
layer.load(0);
$("#console_log").text("");
$("#console_log").append("浏览器UA" + navigator.userAgent +"\n");
$("#console_log").append("客户端时间:" + timestampToTime(Math.round(new Date() / 1000) ) +"\n");
$.post(get_api('read_data','diagnostic_log'),function(data,status){
layer.closeLast('loading');
$("#console_log").append(data.msg);
}).fail(function(xhr, textStatus, errorThrown) {
layer.closeLast('loading');
layer.alert('请求失败');
});
});
//连通测试
$('.connectivity_test').on('click', function(){
layer.load(0);
$("#console_log").text("");
$("#console_log").append("浏览器UA" + navigator.userAgent +"\n");
$("#console_log").append("客户端时间:" + timestampToTime(Math.round(new Date() / 1000) ) +"\n");
@@ -94,12 +100,13 @@ layui.use(['layer','form','miniTab'], function () {
url: get_api('read_data', 'connectivity_test'),
type: 'POST',
data: { url: url },
async: false,
//async: false,
success: function(data, status) {
$("#console_log").append(data.msg + "\n");
},
error: function(jqXHR, textStatus, errorThrown) {
$("#console_log").append(routeName + ": 请求 " + url + " 发生错误:" + errorThrown + "\n");
layer.closeLast('loading');
$("#console_log").append(data.msg + "\n");
},error: function(jqXHR, textStatus, errorThrown) {
layer.closeLast('loading');
$("#console_log").append(routeName + ": 请求 " + url + " 发生错误:" + errorThrown + "\n");
}
});
});
@@ -146,21 +153,31 @@ layui.use(['layer','form','miniTab'], function () {
});
//清理缓存
$('.CleanCache').on('click', function(){
layer.load(0);
$.post(get_api('other_root','CleanCache'),function(data,status){
layer.closeLast('loading');
if(data.code == 1){
layer.msg(data.msg,{icon: 1})
} else{
layer.msg(data.msg,{icon: 5});
}
}).fail(function(xhr, textStatus, errorThrown) {
layer.closeLast('loading');
layer.alert('请求失败');
});
});
//数据库升级
$('.db_upgrade').on('click', function(){
layer.load(0);
$("#console_log").text("");
$("#console_log").append(`正在处理中,请勿操作页面...\n`);
$.post(get_api("other_upsys"),{"i":4,"pattern":"manual"}, function(data, status) {
layer.closeLast('loading');
$("#console_log").text("");
$("#console_log").append(`${data.msg}\n`);
}).fail(function(xhr, textStatus, errorThrown) {
layer.closeLast('loading');
layer.alert('请求失败');
});
});
});
+3 -3
View File
@@ -1,4 +1,4 @@
<?php $title='主题管理';$awesome=true; require 'header.php';?>
<?php $title='主题管理';$awesome=true; define('referrer','same-origin'); require 'header.php';?>
<style>
.tab-header .layui-btn.layui-this{border-color: #1E9FFF; color: #1E9FFF;}
.screenshot{
@@ -25,7 +25,6 @@
<script src="<?php echo $libs;?>/jquery/jquery.lazyload.min.js"></script>
<script src="./templates/admin/js/public.js?v=<?php echo $Ver;?>"></script>
<?php load_static('js');?>
<script src="./templates/admin/js/theme.js?v=<?php echo $Ver;?>"></script>
<script>
const is_admin = <?php echo $USER_DB['UserGroup'] === 'root' ? 'true' : 'false'; ?>;
const theme_set = <?php echo check_purview('theme_set',1) ? 'true' : 'false'; ?>;
@@ -33,4 +32,5 @@
const guestbook = <?php echo check_purview('guestbook',1) ? 'true' : 'false'; ?>;
const article = <?php echo check_purview('article',1) ? 'true' : 'false'; ?>;
const loginAddress = '<?php echo $USER_DB['Login']; ?>';
</script>
</script>
<script src="./templates/admin/js/theme.js?v=<?php echo $Ver;?>"></script>
+32 -1
View File
@@ -5,11 +5,42 @@
<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.1.04-20231029</h4>
<h4 class="layui-timeline-title">v2.1.06-20231113</h4>
<ul>
<li>[修复] 开启离线模式时概要页依旧获取在线数据,V0921</li>
<li>[优化] 为部分操作添加处理中的效果( 防止网络极差的用户以为没点到而重复点击 )</li>
<li>[新增] 内置用户组新增:访客 (代号:visitor,处于该用户组的账号登录后跳转到默认用户的主页,配合引导页使用实现需注册登录才能访问站点)</li>
<li>[备注] 由于访客无权限进入后台,所以也无法自助修改密码</li>
<li>[新增] 在用户组列表中显示内置用户组 ( 默认/访客/站长 )</li>
<li>[变更] 系统设置中的默认分组允许设置为内置用户组 ( 例如设为访客 )</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">
<h4 class="layui-timeline-title">v2.1.05-20231107</h4>
<ul>
<li>[修复] 使用MySQL/MariaDB数据库时记录访客IP错误</li>
<li>[修复] 注册模板/引导页模板配置无法正常读取</li>
<li>[模板] 主页模板新增 > Snavigation ( 简约型的模板,点击时间显示书签数据 )</li>
<li>[模板] 引导页模板新增 > 無名の主页</li>
<li>[模板] WebStack-Hugo > 搜索栏新增站内搜索选项,用于解决同时开启站内搜索和搜索热词时遮挡问题</li>
<li>[模板] 挽风导航V1.0 > CSS样式细节优化 </li>
</ul>
</div>
</li>
<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.1.04-20231101</h4>
<ul>
<li>[修复] 连续添加分类时未正确添加到所选的父分类中</li>
<li>[修复] 使用MySQL/MariaDB数据库时文章图片可能不显示的bug</li>
<li>[优化] 二级域名功能支持已知的双后缀顶级域名(例如example.com.cn)</li>
<li>[新增] Docker镜像增加intl模块</li>
<li>[模板] WebStack-Hugo > 修复过渡页模板logo设置无效</li>
</ul>
</div>
</li>