v2.0.23-20230527

This commit is contained in:
MI15\Win
2023-05-27 21:51:23 +08:00
parent 3073302069
commit b6b0d7efe5
9 changed files with 58 additions and 16 deletions

View File

@@ -677,7 +677,7 @@ function write_link(){
//图标拉取
}elseif($_GET['type'] === 'icon_pull'){
if($global_config['offline']){
msg(-1,"离线模式禁止下载主题!");
msg(-1,"离线模式不可用");
}
if(!is_subscribe('bool')){
msg(-1,"未检测到有效授权,无法使用该功能!");
@@ -689,25 +689,32 @@ function write_link(){
if(empty($link)){
msg(-1,'请求的链接id不存在');
}
if(empty($_POST['cover']) && !empty($link['icon'])){
msg(1,'skip');//跳过存在图标的链接
}
$path = DIR ."/data/user/".U."/favicon";
if(!Check_Path($path)){
msg(-1,'创建目录失败,请检查权限');
}
//检查配置
$config = unserialize( get_db("global_config", "v", ["k" => "icon_config"])) ?? [];
if($config['o_switch'] == '0'){
msg(-1,'相关服务处于关闭状态,请联系站长开启');
}
//跳过存在图标的链接
if(empty($_POST['cover']) && !empty($link['icon'])){
msg(1,'skip');
}
$api = Get_Index_URL().'?c=icon&url='.base64_encode($link['url']);
$res = ccurl($api);
$data = get_db('global_icon','*',['url_md5'=>md5($link['url'])]);
if(empty($data)){
msg(-1,'fail');
msg(1,'fail');
}
$new_path = "./data/user/".U.'/favicon/'.$data['file_name'];
if(copy("./data/icon/{$data['file_name']}",$new_path)){
update_db('user_links',['icon'=>$new_path],['uid'=>UID ,"lid" => $_POST['id'] ],[1,'success']);
}
msg(-1,'fail');
msg(1,'fail');
}elseif($_GET['type'] == 'extend_list'){
if($GLOBALS['global_config']['link_extend'] != 1 ||!check_purview('link_extend',1)){
@@ -813,11 +820,15 @@ function write_apply(){
if($_GET['type'] == 'set'){
$s['apply'] = intval($_POST['apply']); // 功能选项0.关闭 1.需要审核 2.无需审核
$s['Notice'] = $_POST['Notice']??''; // 公告
$s['submit_limit'] = intval($_POST['submit_limit']); //提交限制
if($s['apply'] < 0 || $s['apply'] > 2 ){
msg(-1102,'参数错误!');
msg(-1,'参数错误!');
}elseif(strlen($s['Notice']) > 512){
msg(-1102,'公告长度超限!');
msg(-1,'公告长度超限!');
}if(empty($_POST['submit_limit']) || !preg_match("/^\d*$/",$_POST['submit_limit'])){
msg(-1,'提交限制必须为正整数!');
}
write_user_config('apply',$s,'config','收录配置');
msg(1,'保存成功');
}elseif($_GET['type'] == '2'){ //通过
@@ -846,6 +857,7 @@ function write_apply(){
'url' => $link['url'],
'description' => $link['description'],
'add_time' => time(),
'up_time' => time(),
'icon' => $link['iconurl']
];
insert_db('user_links',$data);//插入链接

View File

@@ -84,7 +84,7 @@ if(isset($url_data['id'])){
// 统计IP 24小时内提交的数量!,超限则拦截!
$count = count_db("user_apply", ["uid"=>UID , "ip" => $user_ip ,"time[>]" => time() - 60*60*24]);
if ($count >= 5){
if ($count >= $apply['submit_limit'] ?? 5){
msg(-1,'您提交的申请数量已达到上限!请明天再试!');
}
@@ -112,13 +112,16 @@ if($apply['apply'] == 1){
if(!empty(get_db("user_links","*",["url"=> $url,'uid'=>UID ]))){
msg(-1,'URL已经存在'); //存在于链接列表中!
}
$lid = get_maxid('link_id');
$url_data = [
'lid' => $lid,
'uid' => UID,
'fid' => $category_id,
'title' => $title,
'url' => $url,
'description' => $description,
'add_time' => time(),
'up_time' => time(),
'weight' => 0,
'property' => 0,
'icon' => $iconurl

View File

@@ -82,9 +82,9 @@ $favicon_url = url_patch($favicon_url,$url);
//if 如果图标类型是base64或者svg则不需要下载
//匹配图标类型>下载>输出
$suffix = strtolower(end(explode('.',$favicon_url)));
$suffix = strtolower(reset(explode('?',$suffix)));
$suffix = preg_match('/^(jpg|jpeg|png|ico|bmp|svg|webp)$/i',$suffix) ? $suffix : 'ico';
//下载图标 > 成功则输出
@@ -184,6 +184,7 @@ function get_html($url,$TIMEOUT = 5){
function down_ico($ico_url, $savePath = './data/temp/',$referer = '',$TIMEOUT = 60){
$suffix = strtolower(end(explode('.',$ico_url)));
$suffix = strtolower(reset(explode('?',$suffix))); //截取?前面的
if(!preg_match('/^(jpg|jpeg|png|ico|bmp|svg|webp)$/i',$suffix)){
$suffix = 'ico'; //没匹配到后缀名则默认为ico
}

View File

@@ -1 +1 @@
v2.0.22-20230523
v2.0.23-20230527

View File

@@ -63,7 +63,7 @@ layui.use(['layer','miniTab'], function(){
}else{
i++;
}
$("#layui-layer"+ msg_id+" .layui-layer-padding").html('<i class="layui-layer-ico layui-layer-ico16"></i>[ ' + i + ' / ' + up_info.info.length + ' ] ' + up_info.info[i-1]);
$("#layui-layer"+ msg_id+" .layui-layer-padding").html('<i class="layui-layer-face layui-icon layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>[ ' + i + ' / ' + up_info.info.length + ' ] ' + up_info.info[i-1]);
$.post(get_api("other_upsys"),{"i":i}, function(data, status) {
if (data.code == 1) {

View File

@@ -278,6 +278,10 @@ layui.use(['form','table','dropdown','miniTab'], function () {
fail ++;
}else if(data.msg == 'skip'){
skip ++;
}else{
layer.closeAll();
layer.alert(data.msg,{icon:2,title:'信息',anim: 2,shadeClose: false,closeBtn: 0});
return true;
}
i ++;
icon_pull(i);

View File

@@ -43,13 +43,21 @@ $title='收录管理';$awesome=true; require dirname(__DIR__).'/header.php';
<textarea name = "Notice" placeholder="显示在收录页的公告使用HTML代码编写(如有拦截提示,请暂时关闭防XSS脚本和防SQL注入)" rows = "5" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">提交限制</label>
<div class="layui-input-inline" style=" width: 71px;">
<input type="number" name="submit_limit" lay-verify="required" placeholder='单位:秒' value="10" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">单位:次,指最近24小时内可以提交多少次(为了防止恶意提交,删除记录可以恢复次数)</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">使用说明</label>
<div class="layui-form-mid ">部分主题没有收录入口,请自行添加到链接或者底部等你认为合适的地方!前往<a style="color:#3c78d8" target="_blank" href="./index.php?c=apply&u=<?php echo $u?>" target="_blank">申请收录</a></div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">安全限制</label>
<div class="layui-form-mid ">1.禁止含有特殊字符<'&">等 &nbsp; 2.SQL和XSS相关的敏感词 &nbsp; 3.限制超过256个字符 <br /> 4.提交限频:IP/24小时/5次 (删除记录可恢复)</div>
<div class="layui-form-mid ">1.禁止含有特殊字符<'&">等 &nbsp; 2.SQL和XSS相关的敏感词 &nbsp; 3.限制超过256个字符</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
@@ -340,7 +348,7 @@ table.on('toolbar(apply_list)', function(obj){
var data = checkStatus.data;
switch(obj.event){
case 'conf':
if(document.body.clientWidth < 768){area = ['100%' , '100%'];}else{area = ['768px' , '450px'];}
if(document.body.clientWidth < 768){area = ['100%' , '100%'];}else{area = ['768px' , '500px'];}
layer.open({
type: 1,
scrollbar: false,

View File

@@ -74,8 +74,10 @@
<?php }?>
<?php if($global_config['offline'] != 1 ){ ?>
<button class="layui-btn layui-btn-sm layui-btn-normal layui-btn-danger layui-hide-xs" lay-event="testing" id="testing">检测</button>
<button class="layui-btn layui-btn-sm layui-btn-normal layui-btn-danger layui-hide-xs" lay-event="icon_pull" id="icon_pull">图标拉取</button>
<?php }?>
<?php if($global_config['offline'] != 1 && check_purview('icon_pull',1)){ ?>
<button class="layui-btn layui-btn-sm layui-btn-normal layui-btn-danger layui-hide-xs" lay-event="icon_pull" id="icon_pull">图标拉取</button>
<?php }?>
<button class="layui-btn layui-btn-sm layui-btn-normal layui-btn-danger" layuimini-content-href="link_sort" data-title="链接排序">排序模式</button>
</div>
</script>

View File

@@ -2,6 +2,18 @@
<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.23-20230527</h4>
<ul>
<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">