Compare commits

..

3 Commits

Author SHA1 Message Date
MI15\Win fe1244b099 v2.1.13-20240321 2024-03-22 11:07:08 +08:00
MI15\Win 131d0d664b v2.1.12-20240308 2024-03-11 16:32:35 +08:00
MI15\Win 004273c0c4 v2.1.11-20240119 2024-01-21 01:31:42 +08:00
26 changed files with 24273 additions and 46 deletions
+4 -3
View File
@@ -25,11 +25,12 @@ TwoNav 是一款开源的书签(导航)管理程序,界面简洁,安装
- [https://github.com/tznb1/TwoNav](https://github.com/tznb1/TwoNav)
### 技术支持
- QQ: 271152681
- QQ群: 695720839
- 技术支持QQ: 271152681
- 授权版QQ群: 695720839
- 免费版QQ群: 621815595
### 运行环境
* PHP: 7.3 - 8.2
* PHP: 7.3 - 8.2
* 数据库: SQLite3 或 MySQL > 5.6.0
### 功能特色
+2 -2
View File
@@ -35,8 +35,8 @@ if($db_config['type'] == 'sqlite'){
$global_config = unserialize( get_db("global_config", "v", ["k" => "o_config"]) ); //全局配置
$c = Get('c');
$libs = $global_config['Libs'];
$layui['js'] = $libs.'/Layui/v2.9.2/layui.js';
$layui['css'] = $libs.'/Layui/v2.9.2/css/layui.css';
$layui['js'] = $libs.'/Layui/v2.9.7/layui.js';
$layui['css'] = $libs.'/Layui/v2.9.7/css/layui.css';
$global_config['static_link'] = isset($global_config['static_link']) ? $global_config['static_link'] : 0;
define('libs',$global_config['Libs']);
define('SysVer',Get_Version());
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 322 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -228,7 +228,7 @@ function echo_Atool(){
<head>
<meta charset="UTF-8">
<title>ATool 工具箱</title>
<link rel="stylesheet" href="../static/Layui/v2.9.2/css/layui.css">
<link rel="stylesheet" href="../static/Layui/v2.9.7/css/layui.css">
<style>
html, body {min-width: 1200px;background-color: #fff;position: relative;}
.page-wrapper {width: 1200px;margin: 0 auto;padding: 0 15px;}
@@ -280,7 +280,7 @@ function echo_Atool(){
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="del_otp" title="移除OTP登录验证">删OTP</a>
</div>
</script>
<script src="../static/Layui/v2.9.2/layui.js"></script>
<script src="../static/Layui/v2.9.7/layui.js"></script>
<script src="../static/jquery/jquery-3.6.0.min.js"></script>
<script src="../static/jquery/jquery.md5.js"></script>
<script src="../templates/admin/js/public.js?v=<?php echo time();?>"></script>
@@ -417,7 +417,7 @@ function echo_verify(){ ?>
<head>
<meta charset="UTF-8">
<title>ATool 工具箱</title>
<link rel="stylesheet" href="../static/Layui/v2.9.2/css/layui.css">
<link rel="stylesheet" href="../static/Layui/v2.9.7/css/layui.css">
<link rel="stylesheet" href="../static/Other/login.css">
</head>
<body>
@@ -442,7 +442,7 @@ function echo_verify(){ ?>
</div>
</div>
<script src = "../static/jquery/jquery-3.6.0.min.js"></script>
<script src = "../static/Layui/v2.9.2/layui.js"></script>
<script src = "../static/Layui/v2.9.7/layui.js"></script>
<script src = '../static/jquery/jquery.md5.js'></script>
<script>
layui.use(['form','jquery'], function () {
+11 -6
View File
@@ -378,7 +378,7 @@ function write_link(){
//检测链接是否合法
check_link($fid,$title,$url,$_POST['url_standby']);
//检查链接是否已存在
if(get_db('user_links','lid',['uid'=>UID ,"url" => $url])){
if(empty(get_db('user_config','v',['uid'=>UID ,'t'=>'config','k'=>'repeat_url'])) && has_db('user_links',['uid'=>UID ,"url" => $url])){
msg(-1,'链接已存在!');
}
//描述长度检测
@@ -581,7 +581,9 @@ function write_link(){
msg(-1,'关键字长度不能大于'.$length_limit['l_key'].'个字节');
}
//检查链接是否已存在
if(has_db('user_links',['uid'=>UID ,'lid[!]'=>$lid, "url" => $url])){msg(-1,'链接已存在!');}
if(empty(get_db('user_config','v',['uid'=>UID ,'t'=>'config','k'=>'repeat_url'])) && has_db('user_links',['uid'=>UID ,'lid[!]'=>$lid, "url" => $url])){
msg(-1,'链接已存在!');
}
//检查链接ID是否存在
if(!has_db('user_links',['uid'=>UID ,'lid'=>$lid])){msg(-1,'链接ID不存在!');}
@@ -812,6 +814,7 @@ function write_site_setting(){
'link_model'=>['v'=>['direct','Privacy','Privacy_js','Privacy_meta','301','302','Transition'],'msg'=>'链接模式参数错误'],
'main_link_priority'=>['int'=>true,'min'=>0,'max'=>3,'msg'=>'主链优先参数错误'],
'link_icon'=>['int'=>true,'min'=>0,'max'=>30,'msg'=>'链接图标参数错误'],
'repeat_url'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'重复链接参数错误'],
'site_icon'=>['empty'=>true],
'top_link'=>['int'=>true,'min'=>0,'max'=>100,'msg'=>'热门链接参数错误'],
'new_link'=>['int'=>true,'min'=>0,'max'=>100,'msg'=>'最新链接参数错误'],
@@ -837,6 +840,7 @@ function write_site_setting(){
@unlink($site['site_icon_file']);
$s_site['site_icon_file'] = '';
}
write_user_config('repeat_url',$_POST['repeat_url'],'config','重复链接');
update_db("user_config",["v"=>$s_site],["k"=>'s_site',"uid"=>UID],[1,'保存成功']);
}
//写过渡页配置
@@ -1458,8 +1462,8 @@ function read_data(){
$php_version = floatval(PHP_VERSION);
$log .= "PHP版本:{$php_version}\n";
$log .= "Web版本:{$_SERVER['SERVER_SOFTWARE']}\n";
if( ( $php_version < 7.3 ) || ( $php_version > 8.2 ) ) {
$log .= "PHP版本:不满足要求,支持范围7.3 - 8.2 )\n";
if( $php_version < 7.3 ) {
$log .= "PHP版本:不满足要求,要求不低于7.3\n";
}
//获取加载的模块
$ext = get_loaded_extensions();
@@ -1506,6 +1510,8 @@ function read_data(){
$log .= in_array("Phar",$ext) ? "" : "Phar:不支持 (在线更新/主题下载)\n";
$log .= in_array("hash",$ext) ? "" : "hash:不支持 (书签分享/生成注册码)\n";
$log .= in_array("session",$ext) ? "" : "session:不支持 (影响较大)\n";
$log .= in_array("intl",$ext) ? "" : "intl:不支持 (使用中文域名时可能会导致异常)\n";
$log .= $GLOBALS['global_config']['offline'] == '1' ? "离线模式:已开启,会导致无法更新系统/下载主题模板等\n" : "";
$log .= "可用模块:".implode("&#12288;",$ext)."\n";
$updatadb_logs = select_db('updatadb_logs','file_name',['file_name[!]'=>'install.sql']);
$log .= "数据库更新记录:".(empty($updatadb_logs)?'无':"\n".implode("\n",$updatadb_logs))."\n";
@@ -1643,9 +1649,8 @@ function other_get_link_info(){
msg(-1010,'URL不能为空!');
}elseif(!preg_match("/^(http:\/\/|https:\/\/).*/",$url)){
msg(-1010,'只支持识别http/https协议的链接!');
}elseif( !filter_var($url, FILTER_VALIDATE_URL) ) {
msg(-1010,'URL无效!');
}
$url = process_url_idn($url);
//获取网站标题 (HTML/JS跳转无法识别)
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
+2 -1
View File
@@ -296,7 +296,8 @@ function get_a_category(){
//获取TwoNav信息
function app_info(){
$data['php_version'] = floatval(PHP_VERSION);
$data['onenav_version'] = SysVer;
$data['onenav_version'] = 'v0.9.35-20240318'; //模拟版本号用于解决新版插件检测版本>1提示发生异常
$data['twonav_version'] = SysVer;
$data['cat_num'] = count_db('user_categorys',['uid'=>UID])??0;
$data['link_num'] = count_db('user_links',['uid'=>UID])??0;
$data['username'] = U;
+9
View File
@@ -520,6 +520,9 @@ function other_services(){
}else{
$reload = true; //需要刷新
}
if($GLOBALS['global_config']['offline'] == '1'){
msgA(['code'=>200,'message'=>"已开启离线模式,无法获取最新动态/官方公告/下载模板/更新系统等。"]);
}
// 判断是否刷新数据
if(!$global_config['offline'] && $reload){
if(is_subscribe('bool')){
@@ -536,6 +539,12 @@ function other_services(){
$data = $new_data;
}
}
//时间检测
if(isset($_GET['t']) && !empty($_GET['t'])){
if (abs( time() - $_GET['t'] ) > 300) {
$data['message'] .= "<br /><span style=\"color: #ff5722;\" >检测到客户端时间与服务器时间存在较大差异<br />这会导致部分功能无法正常使用<br />请及时校对服务器或客户端时间</span>";
}
}
msgA($data);
}
}
+7 -3
View File
@@ -86,7 +86,9 @@ if(!empty($link['url_standby']) || $site['link_model'] == 'Transition'){
if(!empty($link['url_standby'])) {
$link['url_standby'] = unserialize($link['url_standby']);
//主链优先模式
if(!empty($site['main_link_priority']) && $site['link_model'] != 'Transition'){
if($site['main_link_priority'] == '3'){
$site['link_model'] = $site['link_model'] == 'direct' ? '302' : $site['link_model'];
}elseif($site['main_link_priority'] > 0 && $site['link_model'] != 'Transition'){
$code = get_http_code($link['url'],3,($site['main_link_priority'] == 1));
if(in_array(intval($code),[200,301,302,401]) ){
$site['link_model'] = $site['link_model'] == 'direct' ? '302' : $site['link_model'];
@@ -110,9 +112,11 @@ if ($site['link_model'] == '302'){ //302重定向(临时)
exit;
}elseif($site['link_model'] == 'Privacy'){ //隐私保护_header
header("Content-type: text/html; charset=utf-8");
if(preg_match('/[\x{4e00}-\x{9fa5}]/u', $link['url']) > 0){
exit ('<html lang="zh-ch"><head><title>正在保护您的隐私..</title><meta name="referrer" content="same-origin"><script>window.location.href="'.$link['url'].'"</script></head>');
}
header("Refresh:0;url=".$link['url']);
echo '<html lang="zh-ch"><head><title>正在保护您的隐私..</title><meta name="referrer" content="same-origin"></head>';
exit;
exit ('<html lang="zh-ch"><head><title>正在保护您的隐私..</title><meta name="referrer" content="same-origin"></head>');
}elseif($site['link_model'] == 'Privacy_js'){ //隐私保护_js
header("Content-type: text/html; charset=utf-8");
echo '<html lang="zh-ch"><head><title>正在保护您的隐私..</title><meta name="referrer" content="same-origin"><script>window.location.href="'.$link['url'].'"</script></head>';
+10 -9
View File
@@ -4,8 +4,8 @@ if(!defined('DIR')){header('HTTP/1.1 404 Not Found');header("status: 404 Not Fou
//初始化
session_name('TwoNav_initial');
session_start();
$layui['js'] = './static/Layui/v2.9.2/layui.js';
$layui['css'] = './static/Layui/v2.9.2/css/layui.css';
$layui['js'] = './static/Layui/v2.9.7/layui.js';
$layui['css'] = './static/Layui/v2.9.7/css/layui.css';
//判断请求类型
if($_SERVER['REQUEST_METHOD'] === 'POST'){
@@ -33,8 +33,8 @@ function check_env() {
$ext = get_loaded_extensions(); //获取组件信息
$php_version = floatval(PHP_VERSION); //获取PHP版本
if( ( $php_version < 7.3 ) || ( $php_version > 8.2 ) ) {
exit("当前PHP版本{$php_version}不满足要求,支持范围7.3 - 8.2");
if($php_version < 7.3 ) {
exit("当前PHP版本{$php_version}不满足要求,要求不低于7.3");
}
//检查是否支持pdo_sqlite
@@ -59,8 +59,8 @@ function diagnosis() {
$php_version = floatval(PHP_VERSION);
$log .= "PHP版本:{$php_version}<br />";
$log .= "Web版本:{$_SERVER['SERVER_SOFTWARE']}<br />";
if( ( $php_version < 7.3 ) || ( $php_version > 8.1 ) ) {
$log .= "PHP版本:不满足要求,需要7.3 <= PHP <= 8.1 )<br />";
if( $php_version < 7.3) {
$log .= "PHP版本:不满足要求,要求不低于7.3<br />";
}
//获取加载的模块
$ext = get_loaded_extensions();
@@ -85,6 +85,7 @@ function diagnosis() {
$log .= in_array("Phar",$ext) ? "Phar:支持<br />" : "Phar:不支持 (在线更新/主题下载)<br />";
$log .= in_array("hash",$ext) ? "hash:支持<br />" : "hash:不支持 (书签分享/生成注册码)<br />";
$log .= in_array("session",$ext) ? "session:支持<br />" : "session:不支持 (影响较大)<br />";
$log .= in_array("intl",$ext) ? "" : "intl:不支持 (使用中文域名时可能会导致异常)\n";
$log .= "可用模块:".implode("&#12288;",$ext)."<br />";
exit($log);
}
@@ -312,10 +313,10 @@ function Write_Config(){
$o_config['global_header'] = '';
$o_config['global_footer'] = '';
$o_config['api_extend'] = 0;
$o_config['apply'] = 0;
$o_config['guestbook'] = 0;
$o_config['apply'] = 1;
$o_config['guestbook'] = 1;
$o_config['link_extend'] = 0;
$o_config['article'] = 0;
$o_config['article'] = 1;
$o_config['c_name'] = 0;
$o_config['c_desc'] = 0;
$o_config['l_name'] = 0;
+8
View File
@@ -775,4 +775,12 @@ function get_OEM(){
//返回404
function Not_Found() {
header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit;
}
function process_url_idn($url) {
$parsed_url = parse_url($url);
if(!preg_match('/[\x{4e00}-\x{9fa5}]/u', $parsed_url['host'])){
return $url;
}
return substr_replace($url, idn_to_ascii($parsed_url['host']), strpos($url, "//") + 2, strlen($parsed_url['host']));
}
+1 -1
View File
@@ -1 +1 @@
v2.1.09-20231220
v2.1.13-20240321
+2 -2
View File
@@ -8,7 +8,7 @@ layui.use(['layer','miniTab'], function(){
// 获取最新信息
$.post(get_api('other_services','get_notice'),function(data,status){
$.post(get_api('other_services','get_notice') + '&t=' + Math.round(new Date() / 1000),function(data,status){
if(data.code == 200) {
$("#new_ver a").text(data.version);
$('#notice_link').text('');
@@ -40,7 +40,7 @@ layui.use(['layer','miniTab'], function(){
//获取当前版本
let current_version = $("#ver").text();
let pattern = /\d{8}/;
let pattern = /v(\d+\.\d+\.\d+)/;
current_version = pattern.exec(current_version)[0];
latest_version = pattern.exec(latest_version)[0];
+10 -6
View File
@@ -73,17 +73,21 @@
<option value="20" >本地服务</option>
<option value="21" >本地服务(伪静态)</option>
<option value="2" >favicon.png.pub (小图标)</option>
<!--<option value="4" >api.15777.cn</option>-->
<!--<option value="5" >favicon.cccyun.cc</option>-->
<option value="6" >api.iowen.cn</option>
<!--<option value="7" >toolb.cn</option>-->
<!--<option value="8" >apis.jxcxin.cn</option>-->
<!--<option value="9" >ico.kucat.cn</option>-->
</select>
</div>
<div class="layui-form-mid layui-word-aux">所有API接口均由其他大佬提供!若有异常请尝试更换接口!</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">重复链接</label>
<div class="layui-input-inline" >
<select name="repeat_url" >
<option value="0" selected>禁止</option>
<option value="1">允许</option>
</select>
</div>
<div class="layui-form-mid layui-word-aux">是否允许添加已存在的链接</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">最新网址</label>
<div class="layui-input-inline" >
+8 -6
View File
@@ -22,12 +22,14 @@
<div class="layui-colla-item">
<div class="layui-colla-title">如何使用Chrome浏览器扩展 [非官方]</div>
<div class="layui-colla-content">
前言: 由于浏览器扩展插件非TwoNav所开发适配,如存在Bug或无法使用属正常现象!<br />
安装: 谷歌应用商店下载<a href="https://chrome.google.com/webstore/detail/onenav/omlkjgkogkfpjbdigianpdbjncdchdco?hl=zh-CN&authuser=0" >OneNav</a>并安装 ( 已知0.9.24 - 1.0.1可用,其他版本未知 )<br />
设置S: 1.TwoNav后台>右上角账号>安全设置>API模式>设为<兼容模式> 2.在本页面获取Token<br />
设置C: 插件API设置>填入域名和Token并保存>完成<br />
问题1: 对于单用户使用,确保系统设置中默认用户是当前用户即可!多用户使用时需开启二级域名功能并将域名替换成用户的二级域名,注意结尾不需要带/
问题2: 因为插件非官方开发维护,能用就尽量不要更新,如果插件更新可能会导致无法正常使用,需这个更新获得兼容性!
注意事项: 由于浏览器扩展插件非TwoNav所开发适配,如存在Bug或无法使用属正常现象!<br />
安装扩展: 扩展插件获取:
<a style="color:#3c78d8" href="https://chromewebstore.google.com/detail/onenav/omlkjgkogkfpjbdigianpdbjncdchdco" >Chrome/Edge</a> /
<a style="color:#3c78d8" href="https://addons.mozilla.org/zh-CN/firefox/addon/onenav" >Firefox</a> 下载并安装 ( 已知0.9.24 - 1.1.0可用,其他版本未知 )<br />
后台设置: 1.TwoNav后台>右上角账号>安全设置>API模式>设为<兼容模式> 2.在本页面获取Token<br />
扩展设置: 设置>填入域名和Token并保存即可,注意: 扩展插件中的推荐内容与本程序无关<br />
问题1: 对于单用户使用,确保系统设置中默认用户是当前用户即可!多用户使用时需开启二级域名功能并将域名替换成用户的二级域名,注意结尾不需要带/<br />
问题2: 因为插件非官方开发维护,能用就尽量不要更新,更新后可能会导致无法正常使用!如有发现不兼容我们也会尽快跟进!<br />
问题3: 因为国内环境限制,你可能无法访问谷歌,这种情况你可以在交流群获取插件(安装方法自行百度,部分浏览器可能需要开发者模式加载)
</div>
</div>
+1 -1
View File
@@ -240,7 +240,7 @@ require 'header.php';
<?php }?>
<tr>
<td>用户交流</td>
<td><a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=LaIzFK2hfTYBZGR0cKvW3xZL6aNgcSXH&jump_from=webapi&authKey=LHh1NtAiGdK0wNyoZiHWrzAZTWWq26YgAwX0Ak7rBWchh6Y5ocUX/0cCXLMXvq/k" title="TwoNav - 技术交流">QQ群:695720839</a>
<td><a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=dMXOVXaYcnKMVmPsqBqpeSxcszy-z4vT&jump_from=webapi&authKey=SQArXAovtNKkH4VGv2Uy6p9wITMQxtjx8W2xLxCKkw3IOwXqQ9H34k4K9o1p4DVQ" title="TwoNav - 技术交流2">QQ群:621815595</a>
</td>
</tr>
<tr>
+36
View File
@@ -2,6 +2,42 @@
<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.1.13-20240321</h4>
<ul>
<li>[优化] 兼容OneNav浏览器扩展V1.1.0重构版</li>
<li>[优化] 浏览器插件的相关使用说明 ( 右上角账号>安全设置>获取API )</li>
<li>[优化] 更新检测逻辑由原来判断日期改成判断版本号</li>
<li>[优化] 支持PHP8.3环境下运行</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.12-20240308</h4>
<ul>
<li>[优化] 后台概要页支持时间差异较大提示,避免因时间错误导致的各种问题</li>
<li>[新增] 站点设置新增重复链接选项,解决部分用户需要添加相同链接的问题</li>
<li>[升级] Layui组件由2.9.2升级到2.9.7</li>
<li>[变更] 默认配置调整,概要页QQ群改为免费用户群(授权用户可凭授权加入会员群)</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.11-20240119</h4>
<ul>
<li>[修复] 链接识别遇到中文域名时提示URL无效</li>
<li>[修复] 链接模式为隐私保护(header)时中文域名无法跳转</li>
<li>[修复] 主链优先设为强制优先时不起作用</li>
<li>[优化] 一键诊断缺少intl扩展模块时给出提醒</li>
</ul>
</div>
</li>
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">