From 1fe39f83f4ed11fbaaa26f0fcaac6368607ad63d Mon Sep 17 00:00:00 2001 From: "MI15\\Win" <10359480+tznb@user.noreply.gitee.com> Date: Wed, 30 Aug 2023 12:49:45 +0800 Subject: [PATCH] v2.0.37-20230830 --- index.php | 1 + system/Register.php | 19 +- system/admin.php | 64 +-- system/api.php | 242 +++++++++-- system/click.php | 61 +-- system/expand/apply.php | 3 +- system/expand/article.php | 71 +-- system/expand/guestbook.php | 23 +- system/index.php | 167 +++---- system/install.php | 3 +- system/login.php | 11 +- system/templates.php | 289 +++++++++---- system/verify.php | 8 +- system/version.txt | 2 +- templates/admin/index.php | 2 +- templates/admin/js/theme.js | 431 +++++++++++++------ templates/admin/page/expand/article-edit.php | 6 +- templates/admin/page/expand/article-list.php | 5 +- templates/admin/page/home.php | 2 +- templates/admin/page/set_transit.php | 8 +- templates/admin/page/set_verify.php | 58 +++ templates/admin/page/theme.php | 36 ++ templates/admin/page/updatelog.php | 20 +- templates/apply/default/index.php | 107 +++++ templates/apply/default/info.json | 8 + templates/apply/default/screenshot.jpg | Bin 0 -> 34844 bytes templates/article/default/info.json | 2 +- templates/guestbook/default/index.php | 87 ++++ templates/guestbook/default/info.json | 8 + templates/guestbook/default/screenshot.jpg | Bin 0 -> 19085 bytes templates/guide/default/info.json | 2 +- templates/login/default/info.json | 2 +- templates/register/default/info.json | 2 +- templates/transit/default/info.json | 2 +- templates/verify/default/index.php | 91 ++++ templates/verify/default/info.json | 8 + templates/verify/default/screenshot.jpg | Bin 0 -> 59711 bytes 37 files changed, 1278 insertions(+), 573 deletions(-) create mode 100644 templates/admin/page/set_verify.php create mode 100644 templates/admin/page/theme.php create mode 100644 templates/apply/default/index.php create mode 100644 templates/apply/default/info.json create mode 100644 templates/apply/default/screenshot.jpg create mode 100644 templates/guestbook/default/index.php create mode 100644 templates/guestbook/default/info.json create mode 100644 templates/guestbook/default/screenshot.jpg create mode 100644 templates/verify/default/index.php create mode 100644 templates/verify/default/info.json create mode 100644 templates/verify/default/screenshot.jpg diff --git a/index.php b/index.php index 105927c..61b5228 100644 --- a/index.php +++ b/index.php @@ -67,6 +67,7 @@ if(!in_array($c,[$global_config["Register"],'ico','icon'])){ session_name('TwoNavSID'); if(empty($c) || $c == 'index'){ + $c = 'index'; require "./system/index.php";//主页 }elseif($c == $global_config["Register"]){ require "./system/Register.php";//注册 diff --git a/system/Register.php b/system/Register.php index 581e8f8..e0f910e 100644 --- a/system/Register.php +++ b/system/Register.php @@ -4,21 +4,10 @@ if($global_config['Maintenance'] != 0){Amsg(-1,'网站正在进行维护,请稍 $global_templates = unserialize(get_db("global_config",'v', ["k" => "s_templates"])); //如果是Get请求则载入登录模板 if($_SERVER['REQUEST_METHOD'] === 'GET'){ - $t_name = $global_templates['register']; - $t_dir = "./templates/register/".$t_name; //模板目录 - $t_path = "./templates/register/{$t_name}/index.php"; //模板路径 - //如果不存在则使用默认模板 - if(!file_exists($t_path)){ - $t_name = 'default'; - $t_dir ='./templates/register/default'; - $t_path = './templates/register/default/index.php'; - $global_templates['register'] = 'default'; - update_db("global_config", ["v" => $global_templates], ["k"=>"s_templates"]); - } - $copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; - $ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; - $reg_tips = get_db('global_config','v',['k'=>'reg_tips']); - require $t_path; + //通用数据初始化 + require DIR."/system/templates.php"; + $reg_tips = get_db('global_config','v',['k'=>'reg_tips']); //注册提示 + require $index_path; exit; } diff --git a/system/admin.php b/system/admin.php index 941b6b5..f5f97bf 100644 --- a/system/admin.php +++ b/system/admin.php @@ -11,7 +11,9 @@ if(!is_login){ exit; }//已登录,检查是否需要验证二级密码 elseif(!empty($LoginConfig['Password2']) && !Check_Password2($LoginConfig)){ - require DIR.'/templates/admin/other/verify_pwd2.php'; + $c = 'verify';$_GET['c'] = 'pwd2'; + require DIR."/system/templates.php"; + require $index_path; exit; } @@ -64,7 +66,7 @@ if($page == 'config_home'){ $theme_config = empty($theme_config['config']) ? []:$theme_config['config']; //读取用户主题配置 - if(!in_array($_GET['fn'],['home','login','register','transit','guide','article'])){ + if(!in_array($_GET['fn'],['home','login','register','transit','guide','article','verify','guestbook','apply'])){ msg(-1,"参数错误"); } $theme_config_db = get_db('user_config','v',['t'=>'theme_'.$_GET['fn'],'k'=>$theme,'uid'=>UID]); @@ -178,64 +180,6 @@ if( $page == 'theme_home' || $page == 'theme_login' || $page == 'theme_transit' } } - -//菜单接口 -if ($page == 'menu') { - $menu = []; - if(check_purview('site_info',1)){ - array_push($menu,['title'=>'站点设置','href'=>'SiteSetting','icon'=>'fa fa-cog']); - } - if(check_purview('theme_in',1)){ - array_push($menu,['title'=>'主题设置','href'=>'theme_home','icon'=>'fa fa-magic']); - } - array_push($menu, - ['title'=>'分类管理','href'=>'category_list','icon'=>'fa fa-list-ul'], - ['title'=>'加密管理','href'=>'pwd_group','icon'=>'fa fa-lock'], - ['title'=>'链接管理','icon'=>'fa fa-folder-open-o','href'=>'','child'=> - [ - ['title'=>'链接列表','href'=>'link_list','icon'=>'fa fa-link'], - ['title'=>'添加链接','href'=>'link_add','icon'=>'fa fa-plus-square-o'], - ['title'=>'书签分享','href'=>'share','icon'=>'fa fa-external-link'], - ['title'=>'导出导入','href'=>'data_control','icon'=>'fa fa-retweet'], - ] - ]); - - //扩展功能 - $extend = []; - if($global_config['apply'] == 1 && check_purview('apply',1)){ - array_push($extend,['title'=>'收录管理','href'=>'expand/apply-admin','icon'=>'fa fa-pencil']); - } - if($global_config['guestbook'] == 1 && check_purview('guestbook',1)){ - array_push($extend,['title'=>'留言管理','href'=>'expand/guestbook-admin','icon'=>'fa fa-commenting-o']); - } - if($global_config['article'] > 0 && check_purview('article',1)){ - array_push($extend,['title'=>'文章管理','href'=>'expand/article-list','icon'=>'fa fa-file-text-o']); - } - if(!empty($extend)){ - $extend = ['title'=>'扩展功能','icon'=>'fa fa-folder-open-o','href'=>'','child'=> $extend]; - array_push($menu,$extend); - } - - //如果是管理员则追加菜单 - if($USER_DB['UserGroup'] == 'root'){ - array_push($menu, - ['title'=>'网站管理','icon'=>'fa fa-wrench','href'=>'','child'=> - [ - ['title'=>'系统设置','href'=>'root/sys_setting','icon'=>'fa fa-gears'], - ['title'=>'授权管理','href'=>'root/vip','icon'=>'fa fa-diamond'], - //['title'=>'默认设置','href'=>'root/default_setting','icon'=>'fa fa-heart-o'], - ['title'=>'用户管理','href'=>'root/user_control','icon'=>'fa fa-user'], - ['title'=>'用户分组','href'=>'root/users_control','icon'=>'fa fa-users'], - ['title'=>'注册管理','href'=>'root/reg_control','icon'=>'fa fa-user-plus'], - ['title'=>'站长工具','href'=>'root/tool','icon'=>'fa fa-exclamation-triangle'], - ] - ]); - } - $init = array( 'homeInfo'=>['title'=>'概要','href'=>'home'],'logoInfo'=>['title'=>'TwoNav','image'=>'./templates/admin/img/logo.png','href'=>'./?u='.U],'menuInfo'=>$menu); - header('Content-Type:application/json; charset=utf-8'); - exit(json_encode($init)); -} - //不带参数是载入框架 if(empty($page)){ $site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site'])); diff --git a/system/api.php b/system/api.php index a570f30..4b9048a 100644 --- a/system/api.php +++ b/system/api.php @@ -680,10 +680,6 @@ function write_link(){ update_db('user_links',['weight'=>$key[1]],['uid'=>UID,'lid'=>$key[0]]); } msg(1,'保存成功'); - - msg(-1,'未支持'); - - //私有切换 }elseif($_GET['type'] === 'property_sw' ){ update_db('user_links',['property'=>intval($_POST['property']) ],['uid'=>UID,'lid'=>intval($_POST['lid']) ],[1,'保存成功']); @@ -1175,20 +1171,21 @@ function write_transit_setting(){ 'admin_stay_time'=>['int'=>true,'min'=>0,'max'=>60,'msg'=>'管理员停留时间范围0-60'], 'default_keywords'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'默认关键字参数错误'] ]; - - foreach ($datas as $key => $data){ - if($data['int']){ - $s[$key] = ($_POST[$key] >= $data['min'] && $_POST[$key] <= $data['max'])?intval($_POST[$key]):msg(-1,$data['msg']); - }elseif(isset($data['v'])){ - $s[$key] = in_array($_POST[$key],$data['v']) ? $_POST[$key]:msg(-1,$data['msg']); - }else{ - $s[$key] = $data['empty']?$_POST[$key]:(!empty($_POST[$key])?$_POST[$key]:msg(-1,$data['msg'])); - } - } + $s = Post_data_filter($datas); write_user_config('s_transition_page',$s,'config','过渡页配置'); msg(1,"保存成功!"); } +//写验证页配置 +function write_verify_page(){ + $datas = [ + 'link_tip'=>['empty'=>true], + 'share_tip'=>['empty'=>true] + ]; + $s = Post_data_filter($datas); + write_user_config('s_verify_page',$s,'config','验证页配置'); + msg(1,"保存成功!"); +} //修改密码 function write_user_password(){ @@ -1358,10 +1355,137 @@ function other_testing_link(){ msgA(['code' => 0 ,'StatusCode'=> $code]); } +//读主题信息 +function read_theme(){ + global $global_config; + global $USER_DB; + // 检查权限 + if(!check_purview('theme_in',1)){ + msg(-1,'无权限'); + } + + $check_dirs = ['home','login','transit','register','guide','article','apply','verify','guestbook']; + $request_dir = $_GET['dir']; + if(in_array($request_dir,$check_dirs)){ + if(in_array($request_dir,['register','guide']) && $USER_DB['UserGroup'] != 'root' ){ + msg(-1,'管理此模板需管理员权限'); + } + }else{ + msg(-1,'dir参数错误'); + } + $son_dirs = get_dir_list(DIR.'/templates/'.$request_dir); + + foreach ($son_dirs as $son_dir) { + $path = DIR.'/templates/'.$request_dir.'/'.$son_dir; //目录完整路径 + //没有信息文件则跳过 + if(!is_file($path.'/info.json') ) {continue;} + //读取主题信息 + $themes[$son_dir] = json_decode(@file_get_contents($path.'/info.json'),true); + //是否支持配置 + $themes[$son_dir]['config'] = is_file($path.'/config.php') ? '1':'0'; + //预览图优先顺序:png>jpg>info>default + if(is_file($path.'/screenshot.jpg')){ + $themes[$son_dir]['screenshot'] = "./templates/$request_dir/$son_dir/screenshot.jpg"; + }elseif(is_file($path.'/screenshot.png')){ + $themes[$son_dir]['screenshot'] = "./templates/$request_dir/$son_dir/screenshot.png"; + }elseif(empty($themes[$son_dir]['screenshot'])){ + $themes[$son_dir]['screenshot'] = "./templates/admin/static/42ed3ef2c4a50f6d.png"; + } + } + + function filter($arr){ + foreach($arr as $key => $data){ + $new[$key]['name'] = $data['name'] ?? 'null'; + $new[$key]['description']= $data['description'] ?? 'null'; + $new[$key]['homepage']= $data['homepage'] ?? 'null'; + $new[$key]['version']= $data['version'] ?? 'null'; + $new[$key]['update']= $data['update'] ?? 'null'; + $new[$key]['author']= $data['author'] ?? 'null'; + $new[$key]['screenshot']= $data['screenshot'] ?? 'null'; + $new[$key]['config'] = $data['config'] ?? '0'; + $new[$key]['state'] = $data['up'] == 1 ? 'up' : (empty($data['dir']) ? 'local' : 'dw'); + } + return $new; + } + + //在线主题处理 + if ( !$global_config['offline'] && $USER_DB['UserGroup'] === 'root'){ + + if(preg_match('/^v.+-(\d{8})$/i',SysVer,$matches)){ + $sysver = intval( $matches[1] );//取版本中的日期 + }else{ + msg(-1,'获取程序版本异常'); + } + + //读取缓存 + $page = 'theme_'.$request_dir; + $template = get_db('global_config','v',['k'=>$page.'_cache']); + if(!empty($template)){ + $data = json_decode($template, true); + } + + //没有缓存 或 禁止缓存 或 缓存过时 + if(empty($template) || $_GET['cache'] === 'no' || time() - $data["time"] > 1800 ){ + $urls = [ + "lm21" => "https://update.lm21.top/TwoNav/{$request_dir}_template.json", + "gitee" => "https://gitee.com/tznb/twonav_updata/raw/master/{$request_dir}_template.json" + ]; + $Source = $global_config['Update_Source'] ?? ''; + if (!empty($Source) && isset($urls[$Source])) { + $urls = [$Source => $urls[$Source]]; + } + }else{ + $cache = true; + } + //读取超时参数 + $overtime = !isset($global_config['Update_Overtime']) ? 3 : ($global_config['Update_Overtime'] < 3 || $global_config['Update_Overtime'] > 60 ? 3 : $global_config['Update_Overtime']); + //远程获取 + foreach($urls as $key => $url){ + $Res = ccurl($url,$overtime); + $data = json_decode($Res["content"], true); + if($data["code"] == 200 ){ //如果获取成功 + $data["time"] = time(); //记录当前时间 + write_global_config($page.'_cache',json_encode($data),$request_dir.'_模板缓存'); + break; //跳出循环. + } + } + //解析 + foreach($data["data"] as $key){ + $path = DIR.'/templates/'.$request_dir.'/'.$key["dir"]; + if( is_dir($path) ) { //本地存在 + $value = $key["dir"]; + //检查是否可以更新 + $update = str_replace('/','',$themes[$value]['update']); //本地主题版本 + $update_new = str_replace('/','',$key["update"]); //远程主题版本 + if( $sysver >= intval($key["low"]) && $sysver <= intval($key["high"]) && $update < $update_new ){ + $themes[$value]['up'] = '1'; + } + }else{ + //判断是否适配当前系统版本 + if( $sysver >= intval($key["low"]) && $sysver <= intval($key["high"]) ){ + $value = $key["dir"]; + $themes[$value] = json_decode(json_encode($key),true); + } + } + } + } + + //取正在使用的模板 + $s_templates = unserialize(get_db("user_config", "v", ["uid"=>UID,"k"=>"s_templates"])); + if($request_dir == 'home'){ + $current['home_pad'] = $s_templates['home_pad'] ?? 'default'; + $current['home_pc'] = $s_templates['home_pc'] ?? 'default'; + }else{ + $current[$request_dir] = $s_templates[$request_dir] ?? 'default'; + } + + $themes = filter($themes); + msgA(['code'=>1,'data'=>$themes,'current'=>$current,'referrer'=>($data['referrer'] ?? '')]); +} //主题下载/更新/删除 function write_theme(){ global $global_config; - $fn = $_POST['fn'];if($_GET['type'] != 'config' && !in_array($fn,['home','login','transit','register','guide','article'])){msg(-1,'fn参数错误');} + $fn = $_POST['fn'];if($_GET['type'] != 'config' && !in_array($fn,['home','login','transit','register','guide','article','verify','guestbook','apply'])){msg(-1,'fn参数错误');} if($_GET['type'] == 'download'){ is_root(); if($global_config['offline']){msg(-1,"离线模式禁止下载主题!");} //离线模式 @@ -1466,6 +1590,11 @@ function write_theme(){ //读取用户模板配置 require DIR."/system/templates.php"; + if($fn == 'register' || $fn == 'guide'){ + $global_templates[$fn] = $name; + update_db('global_config',['v'=>$global_templates],['k'=>'s_templates'],[1,'操作成功']); + } + //判断设置的类型 if($fn == 'home'){ if( $type == 'PC/Pad'){ @@ -1478,18 +1607,8 @@ function write_theme(){ }else{ msg(-1,'参数错误'); } - }elseif($fn == 'login'){ - $s_templates['login'] = $name; - }elseif($fn == 'transit'){ - $s_templates['transit'] = $name; - }elseif($fn == 'article'){ - $s_templates['article'] = $name; - }elseif($fn == 'register'){ - $global_templates['register'] = $name; - update_db('global_config',['v'=>$global_templates],['k'=>'s_templates'],[1,'注册模板设置成功']); - }elseif($fn == 'guide'){ - $global_templates['guide'] = $name; - update_db('global_config',['v'=>$global_templates],['k'=>'s_templates'],[1,'引导页模板设置成功']); + }else{ + $s_templates[$fn] = $name; } //更新数据 update_db('user_config',['v'=>$s_templates],['uid'=>UID,'k'=>'s_templates'],[1,'设置成功']); @@ -1508,7 +1627,7 @@ function write_theme(){ msg(-1,"获取模板类型错误"); } $fn = empty($GET['fn']) ? $_GET['template_type'] : $GET['fn']; - if(!in_array($fn,['home','login','register','transit','guide','article'])){ + if(!in_array($fn,['home','login','transit','register','guide','article','verify','guestbook','apply'])){ msg(-1,"参数错误"); } //0420 END @@ -1836,6 +1955,59 @@ function read_data(){ $day_data[$date] = empty($list) ? [] : $list ; } msgA(['code'=>1,'data'=>$day_data]); + }elseif($_GET['type'] == 'menu'){ + global $global_config; + $menu = []; + if(check_purview('site_info',1)){ + array_push($menu,['title'=>'站点设置','href'=>'SiteSetting','icon'=>'fa fa-cog']); + } + if(check_purview('theme_in',1)){ + array_push($menu,['title'=>'主题管理','href'=>'theme','icon'=>'fa fa-magic']); + } + array_push($menu, + ['title'=>'分类管理','href'=>'category_list','icon'=>'fa fa-list-ul'], + ['title'=>'加密管理','href'=>'pwd_group','icon'=>'fa fa-lock'], + ['title'=>'链接管理','icon'=>'fa fa-folder-open-o','href'=>'','child'=> + [ + ['title'=>'链接列表','href'=>'link_list','icon'=>'fa fa-link'], + ['title'=>'添加链接','href'=>'link_add','icon'=>'fa fa-plus-square-o'], + ['title'=>'书签分享','href'=>'share','icon'=>'fa fa-external-link'], + ['title'=>'导出导入','href'=>'data_control','icon'=>'fa fa-retweet'], + ] + ]); + + //扩展功能 + $extend = []; + if($global_config['apply'] == 1 && check_purview('apply',1)){ + array_push($extend,['title'=>'收录管理','href'=>'expand/apply-admin','icon'=>'fa fa-pencil']); + } + if($global_config['guestbook'] == 1 && check_purview('guestbook',1)){ + array_push($extend,['title'=>'留言管理','href'=>'expand/guestbook-admin','icon'=>'fa fa-commenting-o']); + } + if($global_config['article'] > 0 && check_purview('article',1)){ + array_push($extend,['title'=>'文章管理','href'=>'expand/article-list','icon'=>'fa fa-file-text-o']); + } + if(!empty($extend)){ + $extend = ['title'=>'扩展功能','icon'=>'fa fa-folder-open-o','href'=>'','child'=> $extend]; + array_push($menu,$extend); + } + + //如果是管理员则追加菜单 + if($USER_DB['UserGroup'] == 'root'){ + array_push($menu, + ['title'=>'网站管理','icon'=>'fa fa-wrench','href'=>'','child'=> + [ + ['title'=>'系统设置','href'=>'root/sys_setting','icon'=>'fa fa-gears'], + ['title'=>'授权管理','href'=>'root/vip','icon'=>'fa fa-diamond'], + ['title'=>'用户管理','href'=>'root/user_control','icon'=>'fa fa-user'], + ['title'=>'用户分组','href'=>'root/users_control','icon'=>'fa fa-users'], + ['title'=>'注册管理','href'=>'root/reg_control','icon'=>'fa fa-user-plus'], + ['title'=>'站长工具','href'=>'root/tool','icon'=>'fa fa-exclamation-triangle'], + ] + ]); + } + $init = array( 'homeInfo'=>['title'=>'概要','href'=>'home'],'logoInfo'=>['title'=>'TwoNav','image'=>'./templates/admin/img/logo.png','href'=>'./?u='.U],'menuInfo'=>$menu); + msgA($init); } } @@ -1887,3 +2059,17 @@ function other_get_link_info(){ $link['description'] = $info['site_description']; msgA(['code'=>1,'data'=>$link]); } + +//POST数据过滤 +function Post_data_filter($datas){ + foreach ($datas as $key => $data){ + if($data['int']){ + $s[$key] = ($_POST[$key] >= $data['min'] && $_POST[$key] <= $data['max'])?intval($_POST[$key]):msg(-1,$data['msg']); + }elseif(isset($data['v'])){ + $s[$key] = in_array($_POST[$key],$data['v']) ? $_POST[$key]:msg(-1,$data['msg']); + }else{ + $s[$key] = $data['empty']?$_POST[$key]:(!empty($_POST[$key])?$_POST[$key]:msg(-1,$data['msg'])); + } + } + return $s; +} \ No newline at end of file diff --git a/system/click.php b/system/click.php index 7505d05..f28135b 100644 --- a/system/click.php +++ b/system/click.php @@ -4,7 +4,7 @@ $id = intval($_GET['id']); //IP数统计 count_ip(); //如果id为空,则显示404 -if(empty($id)){Not_Found();} +if(empty($id)) Not_Found(); //查询链接信息 $where['lid'] = $id; @@ -13,18 +13,7 @@ $where['status'] = 1; $link = get_db('user_links','*',$where); //查找失败时显示404 -if(empty($link)){Not_Found();} - -//站点设置和站点图标 -$site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site'])); -$site['Title'] = $site['title'].(empty($site['subtitle'])?'':' - '.$site['subtitle']); -//免费用户请保留版权,谢谢! -$copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; -$ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; -$favicon = ( !empty($site['site_icon_file'])) ? $site['site_icon'] : './favicon.ico'; - -//取登录状态 -$is_login = is_login(); +if(empty($link)) Not_Found(); //取父分类和祖分类信息 $info_c = ['cid','fid','property','status','pid']; @@ -72,7 +61,9 @@ if(!$is_login){ $verify_type = 'link_pwd'; $password = get_db('user_pwd_group','password',['uid'=>UID,'pid'=>$link['pid']]); if($_SESSION['verify']['link'][$link['lid']] != $password){ - require DIR.'/templates/admin/other/verify_link_pwd.php'; + $c = 'verify'; + require DIR."/system/templates.php"; + require $index_path; exit(); } } @@ -81,7 +72,9 @@ if(!$is_login){ $verify_type = 'category_pwd'; $password = get_db('user_pwd_group','password',['uid'=>UID,'pid'=>$category_parent['pid']]); if($_SESSION['verify']['category'][$category_parent['cid']] != $password){ - require DIR.'/templates/admin/other/verify_link_pwd.php'; + $c = 'verify'; + require DIR."/system/templates.php"; + require $index_path; exit(); } } @@ -90,39 +83,22 @@ if(!$is_login){ $verify_type = 'category_pwd'; $password = get_db('user_pwd_group','password',['uid'=>UID,'pid'=>$category_ancestor['pid']]); if($_SESSION['verify']['category'][$category_ancestor['cid']] != $password){ - require DIR.'/templates/admin/other/verify_link_pwd.php'; + $c = 'verify'; + require DIR."/system/templates.php"; + require $index_path; exit(); } } } -//取模板信息 -require DIR ."/system/templates.php"; -$dir_path = DIR.'/templates/transit/'.$s_templates['transit']; -$theme_dir = str_replace(DIR.'/templates/transit',"./templates/transit",$dir_path); -$transit_path = $dir_path.'/index.php'; -//检查是否存在,不存在则使用默认 -if(!is_file($transit_path)){ - $transit_path= DIR.'/templates/transit/default/index.php'; -} //统计点击数 write_user_count(date('Ym'),'click_Ym'); write_user_count(date('Ymd'),'click_Ymd'); update_db("user_links", ["click[+]"=>1],['uid'=>UID,'lid'=>$id]); - - -//读取用户主题配置 -$theme_config_db = unserialize(get_db('user_config','v',['t'=>'theme_transit','k'=>$s_templates['transit'],'uid'=>UID])); - -//读取默认主题配置 -$theme_info = json_decode(@file_get_contents($dir_path.'/info.json'),true); -$theme_config = empty($theme_info['config']) ? []:$theme_info['config']; -$theme_ver = !Debug?$theme_info['version']:$theme_info['version'].'.'.time(); - -//合并配置数据 -$theme_config = empty($theme_config_db) ? $theme_config : array_merge ($theme_config??[],$theme_config_db??[]); +//通用数据初始化 +require DIR."/system/templates.php"; //如果主题信息声明支持扩展字段 if($global_config['link_extend'] == 1 && check_purview('link_extend',1) && in_array($theme_info['support']['link_extend'],["true","1"])){ @@ -154,11 +130,11 @@ if(!empty($link['url_standby'])) { if(in_array(intval($code),[200,301,302,401]) ){ $site['link_model'] = $site['link_model'] == 'direct' ? '302' : $site['link_model']; }else{ - require $transit_path; + require $index_path; exit; } }else{ - require $transit_path; + require $index_path; exit; } } @@ -185,11 +161,6 @@ if ($site['link_model'] == '302'){ //302重定向(临时) echo '正在保护您的隐私..'; exit; }else{ //Transition 过渡页 - require $transit_path; + require $index_path; exit; } - -//返回404 -function Not_Found() { - header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit; -} diff --git a/system/expand/apply.php b/system/expand/apply.php index 0dd3bbb..355b96f 100644 --- a/system/expand/apply.php +++ b/system/expand/apply.php @@ -18,7 +18,8 @@ if ( $apply['apply'] == 0 ){ } //get请求载入页面 if($_SERVER['REQUEST_METHOD'] === 'GET'){ - require DIR.'/templates/admin/page/expand/apply-user.php'; + require DIR."/system/templates.php"; + require($index_path); exit; } //载入提示页 diff --git a/system/expand/article.php b/system/expand/article.php index 0768b54..828da13 100644 --- a/system/expand/article.php +++ b/system/expand/article.php @@ -1,65 +1,28 @@ UID,'k'=>'s_site'])); -$site['Title'] = $site['title'].(empty($site['subtitle'])?'':' - '.$site['subtitle']); -//免费用户请保留版权,谢谢! -$copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; -$ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; -$favicon = ( !empty($site['site_icon_file'])) ? $site['site_icon'] : './favicon.ico'; - - -//取模板信息 -require DIR ."/system/templates.php"; -$dir_path = DIR.'/templates/article/'.$s_templates['article']; -$theme_dir = str_replace(DIR.'/templates/article',"./templates/article",$dir_path); -$path = $dir_path.'/index.php'; -//检查是否存在,不存在则使用默认 -if(!is_file($path)){ - $path= DIR.'/templates/article/default/index.php'; - $theme_dir = './templates/article/default'; -} +if(empty($data)) Not_Found(); //统计点击数 update_db("user_article_list", ["browse_count[+]"=>1],['uid'=>UID,'id'=>$id]); -//读取用户主题配置 -$theme_config_db = unserialize(get_db('user_config','v',['t'=>'theme_article','k'=>$s_templates['article'],'uid'=>UID])); - -//读取默认主题配置 -$theme_info = json_decode(@file_get_contents($theme_dir.'/info.json'),true); -$theme_config = empty($theme_info['config']) ? []:$theme_info['config']; -$theme_ver = !Debug?$theme_info['version']:$theme_info['version'].'.'.time(); - -//合并配置数据 -$theme_config = empty($theme_config_db) ? $theme_config : array_merge ($theme_config??[],$theme_config_db??[]); - -require $path; -exit; - -//返回404 -function Not_Found() { - header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit; -} \ No newline at end of file +//载入模板 +require $index_path; diff --git a/system/expand/guestbook.php b/system/expand/guestbook.php index c4c9150..8e76ecf 100644 --- a/system/expand/guestbook.php +++ b/system/expand/guestbook.php @@ -16,23 +16,23 @@ if(!Check_Path("data/user/{$u}/MessageBoard")){ //POST提交留言 if($_SERVER['REQUEST_METHOD'] === 'POST'){ - if($s['allow'] != '1'){ msg(-1015,'提交失败,当前禁止留言!'); } + if($s['allow'] != '1'){ msg(-1,'提交失败,当前禁止留言!'); } $type = $_POST['type']; //类型 $contact = $_POST['contact']; //联系方式 $title = $_POST['title']; //标题 $content = $_POST['content']; //内容 if(empty($type)){ - msg(-1015,'提交失败,类型不能为空'); + msg(-1,'提交失败,类型不能为空'); }elseif(empty($contact)){ - msg(-1015,'提交失败,联系方式不能为空'); + msg(-1,'提交失败,联系方式不能为空'); }elseif(empty($title)){ - msg(-1015,'提交失败,标题不能为空'); + msg(-1,'提交失败,标题不能为空'); }elseif(empty($content)){ - msg(-1015,'提交失败,内容不能为空'); + msg(-1,'提交失败,内容不能为空'); }elseif(strlen($type) >= 32 || strlen($contact) >= 64 || strlen($title) >= 128 || strlen($content) >= 2048){ - msg(-1015,'提交失败,长度超限'); + msg(-1,'提交失败,长度超限'); }elseif(ShuLiang("data/user/{$u}/MessageBoard/") > 256){ - msg(-1015,'提交失败,留言太多了请稍后再试'); + msg(-1,'提交失败,留言太多了请稍后再试'); } $json_arr = array( @@ -48,9 +48,9 @@ if($_SERVER['REQUEST_METHOD'] === 'POST'){ $json = json_encode($json_arr); $path = "data/user/{$u}/MessageBoard/".time().'_'.crc32($json).'.json'; if( Check_Path("data/user/{$u}/MessageBoard") && file_put_contents($path, $json)){ - msg(0,'提交成功'); + msg(1,'提交成功'); }else{ - msg(-1015,'系统错误,提交失败'); //创建目录或写入文件失败,请检查权限 + msg(-1,'系统错误,提交失败'); //创建目录或写入文件失败,请检查权限 } } @@ -67,5 +67,8 @@ function ShuLiang($path){ } return $sl; } -require DIR.'/templates/admin/page/expand/guestbook-user.php'; + +//通用数据初始化 +require DIR."/system/templates.php"; +require $index_path; exit; \ No newline at end of file diff --git a/system/index.php b/system/index.php index 1fdc75d..cf3755a 100644 --- a/system/index.php +++ b/system/index.php @@ -1,6 +1,60 @@ UID,'sid'=>$share]); + if(empty($share)){ + $content = '分享已被删除,请联系作者!'; + require DIR.'/templates/admin/page/404.php'; + exit; + } + //判断是否过期 + if(time() > $share['expire_time']){ + $content = '分享已过期,请联系作者!'; + require DIR.'/templates/admin/page/404.php';; + exit; + } + //判断是否加密 + if(!empty($share['pwd']) && !is_login()){ + session_start(); + if($_SESSION['verify']['share'][$share['id']] != $share['pwd']){ + $c = 'verify';$_GET['c'] = 'share'; + require DIR."/system/templates.php"; + require $index_path; + exit; + } + } + + $data = json_decode($share['data']); + //判断分享类型(1.分类 2.链接) + if($share['type'] == 1){ + $where['cid'] = $data; + if($share['pv'] == 1){ + unset($where['property']); + } + }else if($share['type'] == 2){ + $category_parent = [['name' => $share['name'] ,"font_icon" =>"fa fa-bookmark-o" , "id" => 'share' ,"description" => "书签分享"]]; + $categorys = $category_parent; + } + + //浏览计次 + update_db("user_share", ["views[+]"=>1],['uid'=>UID,'id'=>$share['id']]); +} + + +//通用数据初始化 +require DIR."/system/templates.php"; //判断用户组,是否允许未登录时访问主页 if(!is_login && ($global_config['Privacy'] == 1 || !check_purview('Common_home',1))){ @@ -8,73 +62,10 @@ if(!is_login && ($global_config['Privacy'] == 1 || !check_purview('Common_home', header("Location: ./?c=admin&u=".U); exit; } -//载入站点设置 -$site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site'])); -//如果没有权限则清除自定义代码 -if(!check_purview('header',1)){$site['custom_header'] = '';} -if(!check_purview('footer',1)){$site['custom_footer'] = '';} -$site['Title'] = $site['title'].(empty($site['subtitle'])?'':' - '.$site['subtitle']); -//免费用户请保留版权,谢谢! -$copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; -$ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; -$favicon = ( !empty($site['site_icon_file'])) ? $site['site_icon'] : './favicon.ico'; +//例外主题,不支持热门网址/最新网址/输出上限 +$site['ex_theme'] = in_array($theme,['snail-nav','heimdall']); -//读取默认模板信息 -require DIR ."/system/templates.php"; -//引导页 -if(!empty($global_config['default_page']) && $global_config['default_page'] == 2){ - if(empty(Get('u')) && empty($_COOKIE['Default_User'])){ - $theme = $global_templates['guide']; - $dir_path = DIR.'/templates/guide/'.$global_templates['guide']; - $index_path = $dir_path.'/index.php'; - if(!is_file($index_path)){ - $dir_path= DIR.'/templates/guide/default'; - $index_path = $dir_path.'/index.php'; - } - $theme_dir = str_replace(DIR.'/templates/guide',"./templates/guide",$dir_path); - $theme_info = json_decode(@file_get_contents($dir_path.'/info.json'),true); - $theme_config = empty($theme_info['config']) ? []:$theme_info['config']; - $theme_config_db = get_db('user_config','v',['t'=>'theme_guide','k'=>$theme,'uid'=>UID]); - $theme_config_db = unserialize($theme_config_db); - $theme_config = empty($theme_config_db) ? $theme_config : array_merge ($theme_config,$theme_config_db); - require($index_path); - exit; - } -} -//参数指定主题优先 -$theme = trim(@$_GET['theme']); -if ( !empty ($theme) && check_purview('theme_in',1)){ - $dir_path = DIR.'/templates/home/'.$theme; - $index_path = $dir_path.'/index.php'; -}else{ - $is_Pad = preg_match('/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i',$_SERVER['HTTP_USER_AGENT']); - $theme = $is_Pad?$s_templates['home_pad']:$s_templates['home_pc']; - $dir_path = DIR.'/templates/home/'.$theme; - $index_path = $dir_path.'/index.php'; -} -//检查是否存在,不存在则使用默认 -if(!is_file($index_path)){ - $dir_path= DIR.'/templates/home/default'; - $index_path = $dir_path.'/index.php'; -} -//相对路径 -$theme_dir = str_replace(DIR.'/templates/home',"./templates/home",$dir_path); -//主题信息 -$theme_info = json_decode(@file_get_contents($dir_path.'/info.json'),true); -//支持属性 -$support_subitem = $theme_info['support']['subitem']??0; //0.不支持子分类 1.分类栏支持 2.链接栏支持 3.都支持 -$support_category_svg = $theme_info['support']['category_svg']??0; //0.不支持 1.支持 -//主题配置(默认) -$theme_config = empty($theme_info['config']) ? []:$theme_info['config']; -//主题配置(用户) -$theme_config_db = get_db('user_config','v',['t'=>'theme_home','k'=>$theme,'uid'=>UID]); -$theme_config_db = unserialize($theme_config_db); -//合并配置数据 -$theme_config = empty($theme_config_db) ? $theme_config : array_merge ($theme_config,$theme_config_db); -//主题版本(调试时追加时间戳) -$theme_ver = !Debug?$theme_info['version']:$theme_info['version'].'.'.time(); -$site['ex_theme'] = in_array($theme,['snail-nav','heimdall']); //例外主题,不支持热门网址/最新网址/输出上限 //分类查找条件 $categorys = []; //声明一个空数组 $content = ['cid(id)','fid','name','property','font_icon','icon','description'];//需要的内容 @@ -219,7 +210,7 @@ function get_links($fid) { }else{ //首字 $icon = './system/ico.php?text='.mb_strtoupper(mb_substr($article['title'], 0, 1)); } - $article_link = ['type'=>'article','id'=>0,'title'=>$article['title'],'url'=>$url,'real_url'=>$url,'description'=>$article['summary'],'ico'=>$icon,'icon'=>$icon]; + $article_link = ['type'=>'article','id'=>0,'title'=>htmlspecialchars($article['title'],ENT_QUOTES),'url'=>$url,'real_url'=>$url,'description'=> htmlspecialchars($article['summary'],ENT_QUOTES),'ico'=>$icon,'icon'=>$icon]; //判断靠前还是靠后 if($site['article_visual'] == '1'){ array_unshift($links,$article_link); @@ -239,45 +230,7 @@ function get_links($fid) { return $links; } -//书签分享 -$share = Get('share'); -if(!empty($share)){ - $share = get_db('user_share','*',['uid'=>UID,'sid'=>$share]); - if(empty($share)){ - $content = '分享已被删除,请联系作者!'; - require DIR.'/templates/admin/page/404.php'; - exit; - } - //判断是否过期 - if(time() > $share['expire_time']){ - $content = '分享已过期,请联系作者!'; - require DIR.'/templates/admin/page/404.php';; - exit; - } - //判断是否加密 - if(!empty($share['pwd']) && !is_login){ - session_start(); - if($_SESSION['verify']['share'][$share['id']] != $share['pwd']){ - require DIR.'/templates/admin/other/verify_share_pwd.php'; - exit; - } - } - - $data = json_decode($share['data']); - //判断分享类型(1.分类 2.链接) - if($share['type'] == 1){ - $where['cid'] = $data; - if($share['pv'] == 1){ - unset($where['property']); - } - }else if($share['type'] == 2){ - $category_parent = [['name' => $share['name'] ,"font_icon" =>"fa fa-bookmark-o" , "id" => 'share' ,"description" => "书签分享"]]; - $categorys = $category_parent; - } - - //浏览计次 - update_db("user_share", ["views[+]"=>1],['uid'=>UID,'id'=>$share['id']]); -} + //如果为空则查找分类 if($category_parent == []){ diff --git a/system/install.php b/system/install.php index cc72942..3f07b5b 100644 --- a/system/install.php +++ b/system/install.php @@ -161,7 +161,8 @@ $db_config = array( 'port' => $_POST['db_port'], 'database' => $_POST['db_name'], 'username' => $_POST['db_user'], - 'password' => $_POST['db_password'] + 'password' => $_POST['db_password'], + 'charset' => 'utf8mb4' ]); //判断版本,目前基于5.6.50开发,其他版本兼容性未知,若您需要强制安装请屏蔽检测 diff --git a/system/login.php b/system/login.php index 825b248..8782948 100644 --- a/system/login.php +++ b/system/login.php @@ -2,15 +2,8 @@ //如果是Get请求则载入登录模板 if($_SERVER['REQUEST_METHOD'] === 'GET'){ - require DIR ."/system/templates.php"; - $t_path = DIR ."/templates/login/{$s_templates['login']}/index.php"; //模板路径 - $copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; - $ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; - //检查是否存在,不存在则使用默认 - if(!is_file($t_path)){ - $t_path = DIR.'/templates/login/default/index.php'; - } - require $t_path; + require DIR."/system/templates.php"; + require $index_path; exit; } diff --git a/system/templates.php b/system/templates.php index 8411487..aad5cbc 100644 --- a/system/templates.php +++ b/system/templates.php @@ -3,99 +3,197 @@ //读取全局模板配置 $global_templates = unserialize(get_db("global_config",'v', ["k" => "s_templates"])); -//读取用户模板配置 -$s_templates = unserialize(get_db("user_config", "v", ["uid"=>UID,"k"=>"s_templates"])); - -//没找到用户模板配置 -if(empty($s_templates)){ - //将全局默认模板配置写到用户配置 - $s_templates = $global_templates; - insert_db("user_config", ["uid" => UID,"k"=>"s_templates","v"=>$global_templates,"t"=>"config","d" => '默认模板']); +if(defined('UID')){ + //读取用户模板配置 + $s_templates = unserialize(get_db("user_config", "v", ["uid"=>UID,"k"=>"s_templates"])); + //没找到用户模板配置 + if(empty($s_templates)){ + $s_templates = $global_templates; + insert_db("user_config", ["uid" => UID,"k"=>"s_templates","v"=>$global_templates,"t"=>"config","d" => '默认模板']); + } + //声明是否已登录 + define('is_login',is_login()); $is_login = is_login; } -//载入辅助函数 -if(empty($c) || in_array($c,['index','click','article'])){ - //将URL转换为base64编码 - function base64($url){ - $urls = parse_url($url); - $scheme = empty( $urls['scheme'] ) ? 'http://' : $urls['scheme'].'://'; //获取请求协议 - $host = $urls['host']; //获取主机名 - $port = empty( $urls['port'] ) ? '' : ':'.$urls['port']; //获取端口 - $new_url = $scheme.$host.$port; - return base64_encode($new_url); +//根据请求来读取模板名 +if($c == 'index'){ + $theme = trim(@$_GET['theme']); //主题预览 + if (empty($theme)){ + $is_Pad = preg_match('/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i',$_SERVER['HTTP_USER_AGENT']); + $theme = $is_Pad ? $s_templates['home_pad'] : $s_templates['home_pc']; } - //是否启用收录 - function is_apply(){ - global $global_config; - $apply_user = unserialize( get_db("user_config", "v", ["k" => "apply","uid"=>UID])); - return ($global_config['apply'] == 1 && $apply_user['apply'] > 0); - } - //是否启用留言 - function is_guestbook(){ - global $global_config; - $guestbook_user = unserialize( get_db("user_config", "v", ["k" => "guestbook","uid"=>UID]) ); - return ($global_config['guestbook'] == 1 && $guestbook_user['allow'] == 1); - - } - //获取图标URL - function geticourl($icon,$link){ - if( !empty( $link['icon']) ){ - if(substr($link['icon'], 0,4) == ' "s_verify_page","uid"=>$USER_DB['ID']])); + $data['get_tip'] = $config['link_tip']; + }elseif($_GET['c'] == 'share'){ + $data['title'] = $share['name']; + $data['tip'] = '查看分享书签'; + $data['input_tip'] = '请输入提取码'; + $data['post_url'] = "./index.php?c=verify&type=share_pwd&u={$u}&share={$_GET['share']}"; + $config = unserialize(get_db("user_config", "v", ["k" => "s_verify_page","uid"=>$USER_DB['ID']])); + $data['get_tip'] = $config['share_tip']; + }elseif($_GET['c'] == 'pwd2'){ + $data['title'] = '验证二级密码'; + $data['tip'] = '验证二级密码'; + $data['input_tip'] = '请输入二级密码'; + $data['post_url'] = "./index.php?c=verify&type=pwd2&u={$u}"; } + $theme = $s_templates['verify']; + $dir_path = DIR.'/templates/verify'; +}elseif($c == 'article'){ //文章 + $theme = $s_templates['article']; + $dir_path = DIR.'/templates/article'; +}elseif($c == 'guestbook'){ //留言 + $theme = $s_templates['guestbook']; + $dir_path = DIR.'/templates/guestbook'; +}elseif($c == 'apply'){ //收录 + $theme = $s_templates['apply']; + $dir_path = DIR.'/templates/guestbook/'; +}elseif($c == $global_config['Login'] || $c == $USER_DB['Login']){ //登录 + $theme = $s_templates['login']; + $dir_path = DIR.'/templates/login'; +}elseif($c == $global_config["Register"] ){ //注册 + $theme = $global_templates['register']; + $dir_path = DIR.'/templates/register'; +}elseif($c == 'guide'){ //引导页,由主页修改$c + $theme = $global_templates['guide']; + $dir_path = DIR.'/templates/guide'; +} +//模板类型(用于读取配置) +$templates_type = substr($dir_path, strrpos($dir_path, "/") + 1) ; + +//无权限或不存在使用默认 +if( !check_purview('theme_in',1) || !is_file("{$dir_path}/{$theme}/index.php")){ + $theme = 'default'; + $dir_path .= '/default'; + $index_path = $dir_path.'/index.php'; +}else{ + $dir_path .= '/'.$theme; + $index_path = $dir_path.'/index.php'; +} + +//相对路径 +$theme_dir = str_replace(DIR,'.',$dir_path); +//主题信息 +$theme_info = json_decode(@file_get_contents($dir_path.'/info.json'),true); +//主题配置(默认) +$theme_config = empty($theme_info['config']) ? []:$theme_info['config']; + + +if(defined('UID')){ + //主题配置(用户) + $theme_config_db = get_db('user_config','v',['t'=>"theme_{$templates_type}",'k'=>$theme,'uid'=>UID]); + $theme_config_db = unserialize($theme_config_db); +}else{ + //主题配置(用户) + $theme_config_db = get_db('global_config','v',['t'=>"theme_{$templates_type}",'k'=>$theme]); + $theme_config_db = unserialize($theme_config_db); +} + +//合并配置数据 +$theme_config = empty($theme_config_db) ? $theme_config : array_merge ($theme_config,$theme_config_db); +//主题版本 +$theme_ver = Debug ? "{$theme_info['version']}.".time() : $theme_info['version']; + +if(defined('UID')){ + //载入站点设置 + $site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site'])); + //如果没有权限则清除自定义代码 + if(!check_purview('header',1)){$site['custom_header'] = '';} + if(!check_purview('footer',1)){$site['custom_footer'] = '';} + + //主页标题( 主标题 - 副标题 ) + $site['Title'] = $site['title'].(empty($site['subtitle'])?'':' - '.$site['subtitle']); + + //站点图标 + $favicon = ( !empty($site['site_icon_file'])) ? $site['site_icon'] : './favicon.ico'; +}else{ + //站点图标 + $favicon = './favicon.ico'; +} + +//版权信息 +$copyright = empty($global_config['copyright'])?'Copyright © TwoNav':$global_config['copyright']; + +//备案信息 +$ICP = empty($global_config['ICP'])?'':''.$global_config['ICP'].''; + +//是否启用收录 +function is_apply(){ + $apply_user = unserialize( get_db("user_config", "v", ["k" => "apply","uid"=>UID])); + return ($GLOBALS['global_config']['apply'] == 1 && $apply_user['apply'] > 0); +} +//是否启用留言 +function is_guestbook(){ + $guestbook_user = unserialize( get_db("user_config", "v", ["k" => "guestbook","uid"=>UID]) ); + return ($GLOBALS['global_config']['guestbook'] == 1 && $guestbook_user['allow'] == 1); +} + +//取URL域名 +function get_url_host($url, $get_scheme = false, $get_port = false){ + $urls = parse_url($url); + $host = $urls['host']; //获取主机名 + $port = $get_port === true ? ( empty( $urls['port'] ) ? '' : ':'.$urls['port']) : ''; + $scheme = $get_port === true ? ( empty( $urls['scheme'] ) ? 'http://' : $urls['scheme'].'://') : ''; //获取请求协议 + return $scheme.$host.$port; +} +//获取图标URL +function geticourl($icon,$link){ + if( !empty( $link['icon']) ){ + if(substr($link['icon'], 0,4) == ' 0){ $where['AND']['category'] = $category; @@ -126,19 +223,22 @@ function get_article_list($category = 0,$limit = 0){ //为文章添加分类名称 foreach ($datas as &$data) { $data['category_name'] = $categorys[$data['category']] ?? 'Null'; + $data['title'] = htmlspecialchars($data['title'],ENT_QUOTES); + $data['summary'] = htmlspecialchars($data['summary'],ENT_QUOTES); } return ['data'=>$datas,'count'=>$count]; } + //根据文章id获取内容 function get_article_content($id){ $where['uid'] = UID; if(!is_login()){ - $where['AND']['state'] = 1; //状态筛选 - }else{ - $where['AND']['OR']['state'] = [1,2]; //状态筛选 + $where['state'] = 1; //状态筛选 } $where['id'] = $id; $data = get_db('user_article_list','*',$where); + $data['title'] = htmlspecialchars($data['title'],ENT_QUOTES); + $data['summary'] = htmlspecialchars($data['summary'],ENT_QUOTES); $data['category_name'] = get_db('user_categorys','name',['uid'=>UID,'cid'=>$data['category']]); return $data; } @@ -177,4 +277,9 @@ function get_category_list($layer = false){ } } return $categorys; +} + +//返回404 +function Not_Found() { + header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");exit; } \ No newline at end of file diff --git a/system/verify.php b/system/verify.php index 5f81ec1..df3a3e0 100644 --- a/system/verify.php +++ b/system/verify.php @@ -23,8 +23,8 @@ switch ($type) { break; case "pwd2": $LoginConfig = unserialize($USER_DB['LoginConfig']); - if($_POST['Password2'] === $LoginConfig['Password2']){ - setcookie($USER_DB['User'].'_Password2', md5($USER_DB['Password'].$_COOKIE[U.'_key'].$_POST['Password2']), 0,'','',false,true); + if($_POST['Password'] === $LoginConfig['Password2']){ + setcookie($USER_DB['User'].'_Password2', md5($USER_DB['Password'].$_COOKIE[U.'_key'].$_POST['Password']), 0,'','',false,true); msg(1,'二级密码正确!'); }else{ msg(-1,'二级密码错误!'); @@ -32,7 +32,7 @@ switch ($type) { break; case "link_pwd": //读取链接信息 - $link = get_db('user_links',['pid','fid','property'],['uid'=>UID,'lid'=>$_POST['id'],'status'=>1]); + $link = get_db('user_links',['pid','fid','property'],['uid'=>UID,'lid'=>$_GET['id'],'status'=>1]); if(empty($link)){ msg(-1,'链接不存在'); //查找链接失败 } @@ -44,7 +44,7 @@ switch ($type) { } if($password == $_POST['Password']){ session_start(); - $_SESSION['verify']['link'][$_POST['id']] = $password; + $_SESSION['verify']['link'][$_GET['id']] = $password; msg(1,'验证通过'); }else{ msg(-1,'密码错误!'); diff --git a/system/version.txt b/system/version.txt index 2144984..0e69520 100644 --- a/system/version.txt +++ b/system/version.txt @@ -1 +1 @@ -v2.0.36-20230823 \ No newline at end of file +v2.0.37-20230830 \ No newline at end of file diff --git a/templates/admin/index.php b/templates/admin/index.php index 2ce7c50..cbc3808 100644 --- a/templates/admin/index.php +++ b/templates/admin/index.php @@ -82,7 +82,7 @@ layui.config({version:""}); layui.use(['layer','miniAdmin'], function () { var layer = layui.layer; layui.miniAdmin.render({ - iniUrl: "./index.php?c=admin&page=menu&u="+u, + iniUrl: "./index.php?c=api&method=read_data&type=menu&u="+u, urlHashLocation: true, bgColorDefault: false, menuChildOpen: true, diff --git a/templates/admin/js/theme.js b/templates/admin/js/theme.js index bffc625..0cab8ca 100644 --- a/templates/admin/js/theme.js +++ b/templates/admin/js/theme.js @@ -1,140 +1,307 @@ - -layui.use(['form','miniTab'], function () { - var form = layui.form, - layer = layui.layer, - miniTab = layui.miniTab; - miniTab.listen(); - layer.photos({photos: '.img-list',anim: 5}); +layui.use(function(){ + var datas,local_theme,active; + var buttons = [ + {'name':'主页模板','dir':'home','display':true}, + {'name':'过渡模板','dir':'transit','display':true}, + {'name':'登录模板','dir':'login','display':true}, + {'name':'验证模板','dir':'verify','display':true}, + {'name':'收录模板','dir':'apply','display':apply}, + {'name':'留言模板','dir':'guestbook','display':guestbook}, + {'name':'文章模板','dir':'article','display':article}, + {'name':'注册模板','dir':'register','display':is_admin}, + {'name':'引导页模板','dir':'guide','display':is_admin} + ]; + var $tab = $('#tab'); + $tab.append(''); + $tab.append(''); + $tab.append(''); + buttons.forEach(item => { + if(item.display){ + $tab.append(``); + } + }); - //监听按钮 - $(".layui-btn-group .layui-btn").click(function () { - var dir= $(this).parent().attr("id");//取目录名key - var fn= $(this).parent().parent().attr("id");//取模板类型 - var type = $(this).attr("id");//取事件类型 - var data = datas[dir].info; - //console.log(data);alert('目录:'+dir+',类型:'+type+',模板类型:'+fn); - - if(type === 'dw' || type === 'up' ){ //下载或更新 - if (data.desc != null && data.desc.length != 0){ //存在描述时弹窗显示描述 - layer.open({title:data.name,content: data.desc,btn: ['下载', '取消'] - ,yes: function(index, layero){ - theme_download(dir,data.name,data.desc,fn); - },btn2: function(index, layero){ - return true; - },cancel: function(){ - return true; - } - }); - }else{ - theme_download(dir,data.name,data.desc,fn); - } - }else if(type === 'del' ){ //删除 - layer.confirm('确认删除?',{icon: 3, title:'温馨提示'}, function(index){ - theme_del(dir,fn); + var tag_btns = $('#tab .dir'); + local_theme = localStorage.getItem(u + "_theme_active") || 'home'; + local_theme = tag_btns.filter('[dir="' + local_theme + '"]'); + active = local_theme.length > 0 ? local_theme : tag_btns.first(); + $(active).addClass('layui-this'); //激活第一个 + active = $(active).attr('dir'); //取激活的dir + load_data(active); //加载数据 + //刷新按钮 + $('#refresh').click(function() { + load_data(active,true); + }); + //预览按钮 + $("#preview").click(function() { + window.open(`./index.php?c=${loginAddress}&u=${u}`); + }); + //提示信息 + $("#tips").click(function() { + let tip,url; + let title = $("#tab .layui-this:first").text(); + if(active == 'home'){ + tip = '部分模板来自其它开源项目, 本程序仅做适配
主题版权归原作者所有, 如有问题请联系!
注意: 部分模板可能不支持书签分享'; + }else if(active == 'login'){ + tip = '只有使用您的专属登录入口时才会生效,即:概要页面中的专属地址>登录'; + url = `./index.php?c=${loginAddress}&u=${u}`; + }else if(active == 'verify'){ + tip = '验证加密链接/加密分类/二级密码的页面样式'; + }else if(active == 'apply'){ + tip = '收录页面的样式,需在收录管理>设置>申请收录>开启'; + url = `./index.php?c=apply&u=${u}`; + }else if(active == 'guestbook'){ + tip = '留言板的页面样式,需在留言管理>当前设置>允许留言(点击蓝字切换)'; + url = `./index.php?c=guestbook&u=${u}`; + }else if(active == 'article'){ + tip = '浏览文章页面的样式,前端显示样式与后端编辑器不一致属正常现象!'; + }else if(active == 'register'){ + tip = '注册页面的样式'; + }else if(active == 'guide'){ + tip = '引导页面的样式,需将系统设置>默认页面>改为引导页面
未登录时直接访问域名显示引导页
登录后将显示用户主页'; + } + if(url != undefined){ + layer.alert(tip, {title:title,shadeClose: true,anim: 2,closeBtn: 0, + btn: ['预览', '确定'],btn1: function(){ + layer.closeAll(); + setTimeout(function() { window.open(url) }, 288); + } }); - - }else if(type === 'config' ){ //配置 - theme_config(dir,data.name,fn); - }else if(type === 'preview' ){ //预览 - if(fn == 'home'){ - window.open('./index.php?theme='+dir+'&u='+u); - }else{ - layer.msg('不支持预览此模板', {icon: 3});return; + }else{ + layer.alert(tip,{title:title,shadeClose: true,anim: 2,closeBtn: 0}); + } + }); + + //设置(目前仅用于过渡页) + $('#set_up').click(function() { + if(active == 'transit'){ + layer_open2('过渡页面设置',`/?c=admin&page=set_transit&u=${u}`); + }else if(active == 'verify'){ + layer_open2('过渡页面设置',`/?c=admin&page=set_verify&u=${u}`); + } + }); + + //切换tab按钮 + tag_btns.click(function() { + const dir = $(this).attr('dir'); + if(active == dir) return; + active = dir; + tag_btns.removeClass('layui-this').filter(this).addClass('layui-this'); + load_data(active); + localStorage.setItem(u + "_theme_active",active); + }); + + function layer_open2(title,url) { + layer.open({type: 2,title: title,shadeClose: true,area : ['100%','100%'],scrollbar: false,resize: false,content: url}); + } + //加载数据 + function load_data(dir,cache = false) { + const set_up = (dir == 'transit' || dir == 'verify'); + $("#set_up")[ set_up ? "show" : "hide"](); + $("#tips")[ !set_up ? "show" : "hide"](); + layer.load(1, {shade: [0.5,'#fff']});//加载层 + layer.msg('正在获取数据..', {icon: 16,time: 1000*300}); + $.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) { + datas = r.data; + render_data(r); + } else { + layer.alert("获取数据失败,请重试!",{icon:5,title:'错误',anim: 2,closeBtn: 0,btn: ['刷新页面']},function () {location.reload();}); + } + }).fail(function () { + layer.alert("获取数据异常,请重试!",{icon:5,title:'错误',anim: 2,closeBtn: 0,btn: ['刷新页面']},function () {location.reload();}); + }); + } + + //渲染数据 + function render_data(d){ + $row = $('.layui-row'); + $row.html(''); + for (const key in d.data) { + const t = d.data[key]; + let upordw = ''; + if(is_admin){ + if(t.state == 'dw' || t.state == 'up'){ + upordw = ``; + } } - }else if(type === 'set' ){ //使用 - if(fn == 'home'){ - set_theme(dir,data.name,fn); - }else{ - set_theme2(dir,'',fn); - } - - }else if(type === 'detail' ){ //详情 - theme_detail(data); + let html = + `
+
+
+
${t.name}
+
${t.version}
+
+
+
+
+
+
+
+ ${upordw} + ${t.state == 'local' || t.state == 'up' ? '':''} + + ${t.state == 'local' && active == 'home' ? '':''} + ${t.config == '1' && theme_set == true ? '':''} + ${(t.state == 'local' || t.state == 'up' ) && is_admin == true ? '':''} +
+
+
+
`; + $row.append(html); } - //监听End - }) + //标记当前模板,使用中靠前显示 + if(active == 'home'){ + var current1 = $(`#t_${d.current.home_pc}`); + current1.css('color','#03a9f4'); + current1.prepend(' '); + $(`#col_${d.current.home_pc}`).prependTo($row); + var current2 = $(`#t_${d.current.home_pad}`); + current2.css('color','#03a9f4'); + current2.prepend(' '); + $(`#col_${d.current.home_pad}`).prependTo($row); + //if(current1.is(current2)){ $("#set:first").remove(); } + + }else{ + if(d.current[active] !== null && d.current[active] !== undefined && d.current[active].length > 0){ + var current = $(`#t_${d.current[active]}`); + current.css('color','#03a9f4'); + current.prepend(' '); + $(`#col_${d.current[active]}`).prependTo($row); + //$("#set:first").remove(); + } + } + $(`#col_default`).prependTo($row); + //点击图片放大 + layer.photos({photos: '.img-list',anim: 5}); + + //懒加载预览图 + $('.screenshot').lazyload({placeholder:"./templates/admin/img/loading.gif",threshold : 600}); + + //监听按钮 + $(".layui-btn-group .layui-btn").click(function () { + var dir= $(this).parent().attr("id");//取目录名key + var fn= $(this).parent().parent().attr("id");//取模板类型 + var type = $(this).attr("id");//取事件类型 + var data = datas[dir]; + //console.log('目录:'+dir+',类型:'+type+',模板类型:'+fn); + if(type === 'dw' || type === 'up' ){ //下载或更新 + if (data.desc != null && data.desc.length != 0){ //存在描述时弹窗显示描述 + layer.open({title:data.name,content: data.desc,btn: ['下载', '取消'] + ,yes: function(index, layero){ + theme_download(dir,data.name,data.desc,fn); + },btn2: function(index, layero){ + return true; + },cancel: function(){ + return true; + } + }); + }else{ + theme_download(dir,data.name,data.desc,fn); + } + }else if(type === 'del' ){ //删除 + layer.confirm('确认删除?',{icon: 3, title:'温馨提示'}, function(index){ + theme_del(dir,fn); + }); + }else if(type === 'config' ){ //配置 + theme_config(dir,data.name,fn); + }else if(type === 'preview' ){ //预览 + if(fn == 'home'){ + window.open('./index.php?theme='+dir+'&u='+u); + }else{ + layer.msg('不支持预览此模板', {icon: 3});return; + } + }else if(type === 'set' ){ //使用 + if(fn == 'home'){ + set_theme(dir,data.name,fn); + }else{ + set_theme2(dir,'',fn); + } + }else if(type === 'detail' ){ //详情 + theme_detail(data); + } + }); + } + //下载主题 + function theme_download(dir,name,desc,fn){ + layer.msg('下载安装中,请稍后..', {shade:[0.5,'black'],anim: 1,icon: 16,time: 1000*300}); + $.post(get_api('write_theme','download'),{dir:dir,name:name,fn:fn},function(data,status){ + layer.closeAll(); + if( data.code == 1 ) { + layer.msg(data.msg, {icon: 1}); + setTimeout(() => {load_data(active);}, 800); + }else{ + layer.alert(data.msg,{icon:5,title:"错误",anim: "slideDown",shadeClose: true,closeBtn: 0,btn: ['知道了']}); + } + }); + } -}); - -//懒加载预览图 -$('.screenshot').lazyload({placeholder:"./templates/admin/img/loading.gif",threshold : 600}); - -//下载主题 -function theme_download(dir,name,desc,fn){ - layer.load(1, {shade:[0.1,'#fff']});//加载层 - layer.msg('下载安装中,请稍后..', {offset: 'b',anim: 1,time: 60*1000}); - $.post(get_api('write_theme','download'),{dir:dir,name:name,fn:fn},function(data,status){ - layer.closeAll(); - if( data.code == 1 ) { - layer.msg(data.msg, {icon: 1}); - setTimeout(() => {location.reload();}, 500);//延迟刷新 - }else{ - //layer.msg(data.msg, {icon: 5}); - layer.alert(data.msg,{icon:5,title:"错误",anim: "slideDown",shadeClose: true,closeBtn: 0,btn: ['知道了']}); - } - }); -} -//删除主题 -function theme_del(dir,fn){ - layer.load(1, {shade:[0.1,'#fff']});//加载层 - layer.msg('正在删除,请稍后..', {offset: 'b',anim: 1,time: 60*1000}); - $.post(get_api('write_theme','del'),{dir:dir,fn:fn},function(data,status){ - layer.closeAll(); - if( data.code == 1 ) { - layer.msg(data.msg, {icon: 1}); - setTimeout(() => {location.reload();}, 500); - }else{ - layer.msg(data.msg, {icon: 5}); - } - }); -} -//载入主题配置 -function theme_config(key,name,fn){ - layer.open({ - type: 2, - title: name + ' - 主题配置', - shadeClose: true, - area : [( $(window).width() < 768 ? '100%' : '568px' ),'100%'], - scrollbar: false, - resize: false, - offset: 'rt', - content: './index.php?c=admin&page=config_home&u='+u+'&theme='+key+'&fn='+fn+'&source=admin', - }); -} -//使用主题提示框 -function set_theme(key,name,fn) { - layer.open({ - title:name - ,content: '请选择要应用的设备类型 ?' - ,btn: ['全部', 'PC', 'Pad'] - ,yes: function(index, layero){ - set_theme2(key,'PC/Pad',fn); - },btn2: function(index, layero){ - set_theme2(key,'PC',fn); - },btn3: function(index, layero){ - set_theme2(key,'Pad',fn); - },cancel: function(){ - return true; - } - }); -} -//使用主题 -function set_theme2(name,type,fn) { - console.log(type,name); - $.post(get_api('write_theme','set'),{type:type,name:name,fn:fn},function(data,status){ - if( data.code == 1 ) { - layer.msg(data.msg, {icon: 1}); - setTimeout(() => {location.reload();}, 500); - }else{ - layer.msg(data.msg, {icon: 5}); - } - }); -} -//主题详情 -function theme_detail(data){ - layer.open({type: 1,scrollbar: false,maxmin: false,shadeClose: true,resize: false,title: data.name + ' - 主题详情',area: ['60%', '59%'],content: '

'+data.name+'

描述:'+data.description+'

版本:'+data.version+'

更新时间:'+data.update+'

作者:'+data.author+'

主页:访问主页

'}); - -} \ No newline at end of file + //删除主题 + function theme_del(dir,fn){ + layer.load(1, {shade:[0.5,'black']});//加载层 + layer.msg('正在删除,请稍后..', {offset: 'b',anim: 1,time: 60*1000}); + $.post(get_api('write_theme','del'),{dir:dir,fn:fn},function(data,status){ + layer.closeAll(); + if( data.code == 1 ) { + layer.msg(data.msg, {icon: 1}); + setTimeout(() => {load_data(active);}, 800); + }else{ + layer.msg(data.msg, {icon: 5}); + } + }); + } + + //载入主题配置 + function theme_config(key,name,fn){ + layer.open({ + type: 2, + title: name + ' - 主题配置', + shadeClose: true, + area : [( $(window).width() < 768 ? '100%' : '666px' ),'100%'], + scrollbar: false, + resize: false, + offset: 'rt', + content: './index.php?c=admin&page=config_home&u='+u+'&theme='+key+'&fn='+fn+'&source=admin', + }); + } + + //使用主题提示框 + function set_theme(key,name,fn) { + layer.open({ + title:name + ,content: '请选择要应用的设备类型 ?' + ,btn: ['全部', 'PC', 'Pad'] + ,yes: function(index, layero){ + set_theme2(key,'PC/Pad',fn); + },btn2: function(index, layero){ + set_theme2(key,'PC',fn); + },btn3: function(index, layero){ + set_theme2(key,'Pad',fn); + },cancel: function(){ + return true; + } + }); + } + + //使用主题 + function set_theme2(name,type,fn) { + $.post(get_api('write_theme','set'),{type:type,name:name,fn:fn},function(data,status){ + if( data.code == 1 ) { + layer.msg(data.msg, {icon: 1}); + setTimeout(() => {load_data(active);}, 800); + }else{ + layer.msg(data.msg, {icon: 5}); + } + }); + } + + //主题详情 + function theme_detail(data){ + layer.open({type: 1,scrollbar: false,maxmin: false,shadeClose: true,resize: false,title: data.name + ' - 主题详情',area: ['60%', '59%'],content: '

'+data.name+'

描述:'+data.description+'

版本:'+data.version+'

更新时间:'+data.update+'

作者:'+data.author+'

主页:访问主页

'}); + + } +}); \ No newline at end of file diff --git a/templates/admin/page/expand/article-edit.php b/templates/admin/page/expand/article-edit.php index 6e28069..8d04a45 100644 --- a/templates/admin/page/expand/article-edit.php +++ b/templates/admin/page/expand/article-edit.php @@ -62,7 +62,7 @@ require dirname(__DIR__).'/header.php' ?>
- +
@@ -90,7 +90,7 @@ require dirname(__DIR__).'/header.php' ?>
- +
@@ -99,7 +99,7 @@ require dirname(__DIR__).'/header.php' ?>
- +
diff --git a/templates/admin/page/expand/article-list.php b/templates/admin/page/expand/article-list.php index ae1cd22..9e7f6cd 100644 --- a/templates/admin/page/expand/article-list.php +++ b/templates/admin/page/expand/article-list.php @@ -145,7 +145,7 @@ layui.use(['form','table','dropdown','miniTab'], function () { {type:'checkbox'} //开启复选框 ,{ title:'操作', toolbar: '#tablebar',width:110} ,{field: 'title', title: '标题', minWidth:200,templet: function(d){ - return ''+d.title+'' + return ''+htmlspecialchars(d.title)+'' }} ,{field:'category',title:'分类',width:100,templet: function(d){ return d.category_name; @@ -383,6 +383,9 @@ layui.use(['form','table','dropdown','miniTab'], function () { return false; }); + function htmlspecialchars(str) { + return $('
').text(str).html(); + } }); diff --git a/templates/admin/page/home.php b/templates/admin/page/home.php index 0c05f5a..668d696 100644 --- a/templates/admin/page/home.php +++ b/templates/admin/page/home.php @@ -202,7 +202,7 @@ require 'header.php';
- + 主题设置 diff --git a/templates/admin/page/set_transit.php b/templates/admin/page/set_transit.php index 9b2b31b..4a28e7c 100644 --- a/templates/admin/page/set_transit.php +++ b/templates/admin/page/set_transit.php @@ -4,7 +4,7 @@
-
注意: 存在备用链接时停留时间可能无效!
+
注意: 存在备用链接时停留时间可能无效,需模板支持!
@@ -33,7 +33,7 @@
-
+
@@ -60,6 +60,10 @@ layui.use(['jquery','form'], function () { }); return false; }); + //关闭按钮 + $(document).on('click', '#close', function() { + parent.layer.close(parent.layer.getFrameIndex(window.name)); + }); }); diff --git a/templates/admin/page/set_verify.php b/templates/admin/page/set_verify.php new file mode 100644 index 0000000..668d2ea --- /dev/null +++ b/templates/admin/page/set_verify.php @@ -0,0 +1,58 @@ + + +
+
+
+
+
注意事项: 需模板支持,提示内容以http开头则打开网页,其他内容则弹出提示
使用场景: 加密链接/加密分类/二级密码/书签分享等
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/templates/admin/page/theme.php b/templates/admin/page/theme.php new file mode 100644 index 0000000..016d935 --- /dev/null +++ b/templates/admin/page/theme.php @@ -0,0 +1,36 @@ + + +
+
+
+
+
+
+
+
+ + + + + + \ No newline at end of file diff --git a/templates/admin/page/updatelog.php b/templates/admin/page/updatelog.php index fed04f4..97eac00 100644 --- a/templates/admin/page/updatelog.php +++ b/templates/admin/page/updatelog.php @@ -5,7 +5,24 @@
  • -

    v2.0.36-20230823

    +

    v2.0.37-20230830

    +
      +
    • [变更] 优化前端前置处理代码,让模板调用数据更加灵活
    • +
    • [新增] 支持更换验证模板/收录模板/留言模板
    • +
    • [新增] 验证模板支持设置提示内容,如获取密码的提示
    • +
    • [新增] 挽风导航V1的收录模板和留言模板
    • +
    • [新增] 4个简约风格的验证模板
    • +
    • [修复] 文章编辑器输入HTML代码时在编辑存在异常的问题
    • +
    • [修复] 文章标题/摘要存在HTML标签时被解析的问题
    • +
    • [修复] WebStack-Hugo主页模板4个已知问题
    • +
    • [修复] 特定情况下安装时使用MySQL数据库可能乱码的问题
    • +
    +
    +
  • +
  • + +
    +

    v2.0.36-20230824

    • [修复] 判断是否显示收录的逻辑错误(导致设为无需审核时不显示)
    • [变更] 移除2个链接图标API,因稳定性欠佳
    • @@ -13,6 +30,7 @@
    • [新增] 挽风导航主页模板(内置文章模板/拟态风格),注:内置文章模板在预览状态下是不生效的!
    • [新增] 挽风导航登录模板/过度模板
    • [新增] 后台概要页可以点击报表统计获取访问的IP列表
    • +
    • [修复] 文章状态非公开且已登录无法预览文章
  • diff --git a/templates/apply/default/index.php b/templates/apply/default/index.php new file mode 100644 index 0000000..dd7e01b --- /dev/null +++ b/templates/apply/default/index.php @@ -0,0 +1,107 @@ + + + + + 申请收录 + + '> + + + +
    +
    +
    +

    申请收录

    +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    ' + ;} ?> +
    +
    +
    + + + + \ No newline at end of file diff --git a/templates/apply/default/info.json b/templates/apply/default/info.json new file mode 100644 index 0000000..fa1e91f --- /dev/null +++ b/templates/apply/default/info.json @@ -0,0 +1,8 @@ +{ + "name": "默认模板", + "description": "默认", + "homepage": "https://gitee.com/tznb/TwoNav", + "version": "2.0.0", + "update": "2023/08/25", + "author": "TwoNav" +} \ No newline at end of file diff --git a/templates/apply/default/screenshot.jpg b/templates/apply/default/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd2485538e5e92e88ac73f014e32c4a3a05adccf GIT binary patch literal 34844 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 literal 0 HcmV?d00001 diff --git a/templates/article/default/info.json b/templates/article/default/info.json index 2c8daf5..0cff204 100644 --- a/templates/article/default/info.json +++ b/templates/article/default/info.json @@ -1,5 +1,5 @@ { - "name":"默认", + "name":"默认模板", "description":"系统默认的文章模板,支持代码段上色,支持自适应!", "homepage":"https://gitee.com/tznb/TwoNav", "version":"2.0.0", diff --git a/templates/guestbook/default/index.php b/templates/guestbook/default/index.php new file mode 100644 index 0000000..ba8f65a --- /dev/null +++ b/templates/guestbook/default/index.php @@ -0,0 +1,87 @@ + + + + + + + <?php echo $site['title'];?> - 极简留言板 + '> + + + +
    + + +
    + +
    +
    +
    +
    极简留言板
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + 提交';} ?> +
    +
    +
    +
    + + +
    +
    + +
    + + + + + \ No newline at end of file diff --git a/templates/guestbook/default/info.json b/templates/guestbook/default/info.json new file mode 100644 index 0000000..fa1e91f --- /dev/null +++ b/templates/guestbook/default/info.json @@ -0,0 +1,8 @@ +{ + "name": "默认模板", + "description": "默认", + "homepage": "https://gitee.com/tznb/TwoNav", + "version": "2.0.0", + "update": "2023/08/25", + "author": "TwoNav" +} \ No newline at end of file diff --git a/templates/guestbook/default/screenshot.jpg b/templates/guestbook/default/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..397897fbce8b9eb25c87c4eb79d93b720b4f8a3b GIT binary patch literal 19085 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 + + + + + <?php echo $data['title'];?> - <?php echo $site['subtitle']?> + + + + + + + + + + + +
    + +
    + + + + + + \ No newline at end of file diff --git a/templates/verify/default/info.json b/templates/verify/default/info.json new file mode 100644 index 0000000..fa1e91f --- /dev/null +++ b/templates/verify/default/info.json @@ -0,0 +1,8 @@ +{ + "name": "默认模板", + "description": "默认", + "homepage": "https://gitee.com/tznb/TwoNav", + "version": "2.0.0", + "update": "2023/08/25", + "author": "TwoNav" +} \ No newline at end of file diff --git a/templates/verify/default/screenshot.jpg b/templates/verify/default/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b36bcebe94f7a30d9774fd9ff58d8e961c29d6ac GIT binary patch literal 59711 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 z zfg1b2t0D3g$P42e>t&I+4Lcs?%++jxF_gH+Y1!!z!-LAwd@_EUov8;>`5hW6+;04 zDW1g~6@K%p5}{aFJPM-bfiJ+5}@yc{{lFn BLzn;n literal 0 HcmV?d00001