2016-07-18 16:39:37 +00:00
< ? php
2022-10-20 09:07:43 +00:00
requireLib ( 'bootstrap5' );
requireLib ( 'md5' );
requireLib ( 'jquery.query' );
2016-07-18 16:39:37 +00:00
requirePHPLib ( 'form' );
requirePHPLib ( 'judger' );
2022-10-20 09:07:43 +00:00
define ( 'SCRIPT_REFRESH_AS_GET' , '<script>;window.location = window.location.origin + window.location.pathname + (window.location.search.length ? window.location.search + "&" : "?") + "_=" + (+new Date()) + window.location.hash;</script>' );
2022-10-07 09:29:26 +00:00
if ( ! isSuperUser ( $myUser )) {
2016-07-18 16:39:37 +00:00
become403Page ();
}
2022-03-17 10:26:29 +00:00
2022-10-20 09:07:43 +00:00
$cur_tab = isset ( $_GET [ 'tab' ]) ? $_GET [ 'tab' ] : 'index' ;
$tabs_info = [
'index' => [
'name' => '首页管理' ,
'url' => " /super_manage/index " ,
],
'users' => [
'name' => '用户管理' ,
'url' => " /super_manage/users " ,
],
'submissions' => [
'name' => '提交记录' ,
'url' => " /super_manage/submissions " ,
],
'custom_test' => [
'name' => '自定义测试' ,
'url' => " /super_manage/custom_test " ,
],
'image_hosting' => [
'name' => '图床管理' ,
'url' => " /super_manage/image_hosting " ,
],
];
if ( ! isset ( $tabs_info [ $cur_tab ])) {
become404Page ();
}
if ( $cur_tab == 'index' ) {
// ========== 公告 ==========
if ( isset ( $_POST [ 'submit-delete_announcement' ]) && $_POST [ 'submit-delete_announcement' ] == 'delete_announcement' ) {
crsf_defend ();
$blog_id = $_POST [ 'blog_id' ];
if ( ! validateUInt ( $blog_id )) {
die ( '<script>alert("移除失败:博客 ID 无效");</script>' . SCRIPT_REFRESH_AS_GET );
2016-07-18 16:39:37 +00:00
}
2022-10-20 09:07:43 +00:00
DB :: delete ( " DELETE FROM important_blogs WHERE blog_id = { $blog_id } " );
die ( '<script>alert("移除成功!");</script>' . SCRIPT_REFRESH_AS_GET );
2022-09-19 07:42:26 +00:00
}
2022-10-20 09:07:43 +00:00
$announcements = DB :: selectAll ( " SELECT blogs.id as id, blogs.title as title, blogs.poster as poster, user_info.realname as realname, blogs.post_time as post_time, important_blogs.level as level, blogs.is_hidden as is_hidden FROM important_blogs INNER JOIN blogs ON important_blogs.blog_id = blogs.id INNER JOIN user_info ON blogs.poster = user_info.username ORDER BY level DESC, important_blogs.blog_id DESC " );
$add_announcement_form = new UOJForm ( 'add_announcement' );
$add_announcement_form -> addInput ( 'blog_id' , 'text' , '博客 ID' , '' ,
function ( $id , & $vdata ) {
if ( ! validateUInt ( $id )) {
return '博客 ID 无效' ;
2022-10-01 11:29:40 +00:00
}
2022-10-20 09:07:43 +00:00
if ( ! queryBlog ( $id )) {
return '博客不存在' ;
2022-10-01 14:03:00 +00:00
}
2022-10-20 09:07:43 +00:00
$vdata [ 'blog_id' ] = $id ;
return '' ;
},
null
);
$add_announcement_form -> addInput ( 'blog_level' , 'text' , '置顶级别' , '0' ,
function ( $x , & $vdata ) {
if ( ! validateUInt ( $x )) {
return '数字不合法' ;
}
if ( $x > 3 ) {
return '该级别不存在' ;
}
$vdata [ 'level' ] = $x ;
return '' ;
},
null
);
$add_announcement_form -> handle = function ( & $vdata ) {
$blog_id = $vdata [ 'blog_id' ];
$blog_level = $vdata [ 'level' ];
2016-07-18 16:39:37 +00:00
if ( DB :: selectFirst ( " select * from important_blogs where blog_id = { $blog_id } " )) {
DB :: update ( " update important_blogs set level = { $blog_level } where blog_id = { $blog_id } " );
} else {
DB :: insert ( " insert into important_blogs (blog_id, level) values ( { $blog_id } , { $blog_level } ) " );
}
2022-10-20 09:07:43 +00:00
};
$add_announcement_form -> submit_button_config [ 'align' ] = 'compressed' ;
$add_announcement_form -> submit_button_config [ 'text' ] = '提交' ;
$add_announcement_form -> succ_href = '/super_manage/index#announcements' ;
$add_announcement_form -> runAtServer ();
2022-09-21 03:00:12 +00:00
2022-10-20 09:07:43 +00:00
// ========== 倒计时 ==========
if ( isset ( $_POST [ 'submit-delete_countdown' ]) && $_POST [ 'submit-delete_countdown' ] == 'delete_countdown' ) {
crsf_defend ();
2022-09-21 03:00:12 +00:00
2022-10-20 09:07:43 +00:00
$countdown_id = $_POST [ 'countdown_id' ];
2022-09-21 03:33:42 +00:00
2022-10-20 09:07:43 +00:00
if ( ! validateUInt ( $countdown_id )) {
die ( '<script>alert("删除失败:倒计时 ID 无效");</script>' . SCRIPT_REFRESH_AS_GET );
2022-09-21 03:33:42 +00:00
}
2022-10-20 09:07:43 +00:00
DB :: delete ( " DELETE FROM countdowns WHERE id = { $countdown_id } " );
2022-09-21 03:33:42 +00:00
2022-10-20 09:07:43 +00:00
die ( '<script>alert("删除成功!");</script>' . SCRIPT_REFRESH_AS_GET );
2016-07-18 16:39:37 +00:00
}
2022-10-20 09:07:43 +00:00
$countdowns = DB :: selectAll ( " SELECT id, title, endtime FROM countdowns ORDER BY endtime ASC " );
$add_countdown_form = new UOJForm ( 'add_countdown' );
$add_countdown_form -> addInput ( 'countdown_title' , 'text' , '标题' , '' ,
function ( $title , & $vdata ) {
if ( $title == '' ) {
return '标题不能为空' ;
}
$vdata [ 'title' ] = $title ;
return '' ;
},
null
);
$add_countdown_form -> addInput ( 'countdown_endtime' , 'text' , '结束时间' , date ( " Y-m-d H:i:s " ),
function ( $endtime , & $vdata ) {
try {
$vdata [ 'endtime' ] = new DateTime ( $endtime );
} catch ( Exception $e ) {
return '无效时间格式' ;
}
return '' ;
},
null
);
$add_countdown_form -> handle = function ( & $vdata ) {
$esc_title = DB :: escape ( $vdata [ 'title' ]);
$esc_endtime = DB :: escape ( $vdata [ 'endtime' ] -> format ( 'Y-m-d H:i:s' ));
DB :: insert ( " INSERT INTO countdowns (title, endtime) VALUES (' { $esc_title } ', ' { $esc_endtime } ') " );
};
$add_countdown_form -> submit_button_config [ 'align' ] = 'compressed' ;
$add_countdown_form -> submit_button_config [ 'text' ] = '添加' ;
$add_countdown_form -> succ_href = '/super_manage/index#countdowns' ;
$add_countdown_form -> runAtServer ();
// ========== 常用链接 ==========
if ( isset ( $_POST [ 'submit-delete_link' ]) && $_POST [ 'submit-delete_link' ] == 'delete_link' ) {
crsf_defend ();
$item_id = $_POST [ 'item_id' ];
if ( ! validateUInt ( $item_id )) {
die ( '<script>alert("删除失败: ID 无效");</script>' . SCRIPT_REFRESH_AS_GET );
2019-09-12 10:12:01 +00:00
}
2022-03-17 11:38:33 +00:00
2022-10-20 09:07:43 +00:00
DB :: delete ( " DELETE FROM links WHERE id = { $item_id } " );
die ( '<script>alert("删除成功!");</script>' . SCRIPT_REFRESH_AS_GET );
2022-10-13 12:20:51 +00:00
}
2022-10-20 09:07:43 +00:00
$links = DB :: selectAll ( " SELECT `id`, `title`, `url`, `level` FROM `friend_links` ORDER BY `level` DESC, `id` ASC " );
$add_link_form = new UOJForm ( 'add_link' );
$add_link_form -> addInput ( 'link_title' , 'text' , '标题' , '' ,
function ( $title , & $vdata ) {
if ( $title == '' ) {
return '标题不能为空' ;
}
$vdata [ 'title' ] = $title ;
return '' ;
},
null
);
$add_link_form -> addInput ( 'link_url' , 'text' , '链接' , '' ,
function ( $url , & $vdata ) {
if ( ! validateURL ( $url )) {
return '链接不合法' ;
}
$vdata [ 'url' ] = $url ;
return '' ;
},
null
);
$add_link_form -> addInput ( 'link_level' , 'text' , '权重' , '10' ,
function ( $level , & $vdata ) {
if ( ! validateUInt ( $level )) {
return '数字不合法' ;
}
$vdata [ 'level' ] = $level ;
return '' ;
},
null
);
$add_link_form -> handle = function ( & $vdata ) {
$esc_title = DB :: escape ( $vdata [ 'title' ]);
$esc_url = DB :: escape ( $vdata [ 'url' ]);
$level = $vdata [ 'level' ];
DB :: insert ( " INSERT INTO friend_links (title, url, level) VALUES (' { $esc_title } ', ' { $esc_url } ', { $level } ) " );
};
$add_link_form -> submit_button_config [ 'align' ] = 'compressed' ;
$add_link_form -> submit_button_config [ 'text' ] = '添加' ;
$add_link_form -> succ_href = '/super_manage/index#links' ;
$add_link_form -> runAtServer ();
} elseif ( $cur_tab == 'users' ) {
//
2016-07-18 16:39:37 +00:00
}
2022-09-18 04:58:35 +00:00
?>
2022-10-20 09:07:43 +00:00
< ? php echoUOJPageHeader ( UOJLocale :: get ( 'system manage' )) ?>
< h1 class = " h2 " >
< ? = UOJLocale :: get ( 'system manage' ) ?>
</ h1 >
< div class = " row mt-4 " >
<!-- left col -->
< div class = " col-md-3 " >
< div class = " list-group " >
< ? php foreach ( $tabs_info as $id => $tab ) : ?>
< a
role = " button "
class = " list-group-item list-group-item-action <?= $cur_tab == $id ? 'active' : '' ?> "
href = " <?= $tab['url'] ?> " >
< ? = $tab [ 'name' ] ?>
</ a >
< ? php endforeach ?>
</ div >
</ div >
<!-- end left col -->
<!-- right col -->
< div class = " col-md-9 " >
< ? php if ( $cur_tab == 'index' ) : ?>
< div class = " card " >
< div class = " card-header " >
< ul class = " nav nav-tabs card-header-tabs " role = " tablist " >
< li class = " nav-item " >
< a class = " nav-link active " href = " #announcements " data - bs - toggle = " tab " data - bs - target = " #announcements " > 公告 </ a >
</ li >
< li class = " nav-item " >
< a class = " nav-link " href = " #countdowns " data - bs - toggle = " tab " data - bs - target = " #countdowns " > 倒计时 </ a >
</ li >
< li class = " nav-item " >
< a class = " nav-link " href = " #links " data - bs - toggle = " tab " data - bs - target = " #links " > 常用链接 </ a >
</ li >
</ ul >
2016-07-18 16:39:37 +00:00
</ div >
2022-10-20 09:07:43 +00:00
< div class = " card-body " >
< div class = " tab-content " >
<!-- 公告 -->
< div class = " tab-pane active " id = " announcements " >
< div id = " announcements-list " ></ div >
< script >
var announcements = < ? = json_encode ( $announcements ) ?> ;
$ ( '#announcements-list' ) . long_table (
announcements ,
1 ,
'<tr>' +
'<th style="width:3em">ID</th>' +
'<th style="width:14em">标题</th>' +
'<th style="width:8em">发布者</th>' +
'<th style="width:8em">发布时间</th>' +
'<th style="width:6em">置顶等级</th>' +
'<th style="width:8em">操作</th>' +
'</tr>' ,
function ( row ) {
var col_tr = '' ;
col_tr += '<tr>' ;
col_tr += '<td>' + row [ 'id' ] + '</td>' ;
col_tr += '<td>' +
( row [ 'is_hidden' ] ? '<span class="text-danger">[隐藏]</span> ' : '' ) +
'<a class="text-decoration-none" href="/blogs/' + row [ 'id' ] + '">' +
row [ 'title' ] +
'</a>' +
'</td>' ;
col_tr += '<td>' + getUserLink ( row [ 'poster' ], row [ 'realname' ]) + '</td>' ;
col_tr += '<td>' + row [ 'post_time' ] + '</td>' ;
col_tr += '<td>' + row [ 'level' ] + '</td>' ;
col_tr += '<td>' +
'<a class="text-decoration-none d-inline-block align-middle" href="/post/' + row [ 'id' ] + '/write">编辑</a>' +
'<form class="d-inline-block ms-2" method="POST" onsubmit=\'return confirm("你真的要移除这条公告吗?")\'>' +
'<input type="hidden" name="_token" value="<?= crsf_token() ?>">' +
'<input type="hidden" name="blog_id" value="' + row [ 'id' ] + '">' +
'<button class="btn btn-link text-danger text-decoration-none p-0" type="submit" name="submit-delete_announcement" value="delete_announcement">移除</button>' +
'</form>' +
'</td>' ;
col_tr += '</tr>' ;
return col_tr ;
},
{
div_classes : [ 'table-responsive' ],
table_classes : [ 'table' , 'align-middle' ],
page_len : 20 ,
}
);
</ script >
< h5 > 添加 / 修改公告 </ h5 >
< ? php $add_announcement_form -> printHTML (); ?>
2022-03-17 11:38:33 +00:00
</ div >
2022-10-20 09:07:43 +00:00
<!-- 倒计时 -->
< div class = " tab-pane " id = " countdowns " >
< div id = " countdowns-list " ></ div >
< script >
var countdowns = < ? = json_encode ( $countdowns ) ?> ;
$ ( '#countdowns-list' ) . long_table (
countdowns ,
1 ,
'<tr>' +
'<th style="width:14em">标题</th>' +
'<th style="width:8em">结束时间</th>' +
'<th style="width:6em">操作</th>' +
'</tr>' ,
function ( row ) {
var col_tr = '' ;
col_tr += '<tr>' ;
col_tr += '<td>' + row [ 'title' ] + '</td>' ;
col_tr += '<td>' + row [ 'endtime' ] + '</td>' ;
col_tr += '<td>' +
'<form method="POST" onsubmit=\'return confirm("你真的要删除这个倒计时吗?")\'>' +
'<input type="hidden" name="_token" value="<?= crsf_token() ?>">' +
'<input type="hidden" name="countdown_id" value="' + row [ 'id' ] + '">' +
'<button class="btn btn-link text-danger text-decoration-none p-0" type="submit" name="submit-delete_countdown" value="delete_countdown">删除</button>' +
'</form>' +
'</td>' ;
col_tr += '</tr>' ;
return col_tr ;
},
{
div_classes : [ 'table-responsive' ],
table_classes : [ 'table' , 'align-middle' ],
page_len : 20 ,
}
);
</ script >
2022-04-03 11:33:50 +00:00
< h5 > 添加倒计时 </ h5 >
2022-10-20 09:07:43 +00:00
< ? php $add_countdown_form -> printHTML (); ?>
2022-04-03 11:33:50 +00:00
</ div >
2022-10-20 09:07:43 +00:00
<!-- 常用链接 -->
< div class = " tab-pane " id = " links " >
< div id = " links-list " ></ div >
< script >
var links = < ? = json_encode ( $links ) ?> ;
$ ( '#links-list' ) . long_table (
links ,
1 ,
'<tr>' +
'<th style="width:18em">标题</th>' +
'<th style="width:26em">链接</th>' +
'<th style="width:14em">操作</th>' +
'</tr>' ,
function ( row ) {
var col_tr = '' ;
col_tr += '<tr>' ;
col_tr += '<td>' + row [ 'title' ] + '</td>' ;
col_tr += '<td>' + row [ 'url' ] + '</td>' ;
col_tr += '<td>' +
'<form method="POST" onsubmit=\'return confirm("你真的要删除这条链接吗?")\'>' +
'<input type="hidden" name="_token" value="<?= crsf_token() ?>">' +
'<input type="hidden" name="link_id" value="' + row [ 'id' ] + '">' +
'<button class="btn btn-link text-danger text-decoration-none p-0" type="submit" name="submit-delete_link" value="delete_link">删除</button>' +
'</form>' +
'</td>' ;
col_tr += '</tr>' ;
return col_tr ;
},
{
div_classes : [ 'table-responsive' ],
table_classes : [ 'table' , 'align-middle' ],
page_len : 20 ,
}
);
</ script >
< h5 > 添加常用链接 </ h5 >
< ? php $add_link_form -> printHTML (); ?>
2022-10-14 06:59:26 +00:00
</ div >
2022-10-20 09:07:43 +00:00
</ div >
</ div >
</ div >
< script >
$ ( document ) . ready ( function () {
// Javascript to enable link to tab
var hash = location . hash . replace ( /^ #/, '');
if ( hash ) {
bootstrap . Tab . jQueryInterface . call ( $ ( '.nav-tabs a[href="#' + hash + '"]' ), 'show' ) . blur ();
}
// Change hash for page-reload
$ ( '.nav-tabs a' ) . on ( 'shown.bs.tab' , function ( e ) {
window . location . hash = e . target . hash ;
});
});
</ script >
< ? php elseif ( $cur_tab == 'users' ) : ?>
< div class = " card " >
< div class = " card-header " >
< ul class = " nav nav-tabs card-header-tabs " >
< li class = " nav-item " >
< a class = " nav-link active " href = " # " data - bs - toggle = " tab " data - bs - target = " # " > Active </ a >
</ li >
< li class = " nav-item " >
< a class = " nav-link " href = " # " data - bs - toggle = " tab " data - bs - target = " # " > 2 </ a >
</ li >
</ ul >
2016-07-18 16:39:37 +00:00
</ div >
2022-10-20 09:07:43 +00:00
< div class = " card-body " >
< div class = " tab-content " >
< div class = " tab-pane " id = " " > 1 </ div >
< div class = " tab-pane " id = " " > 2 </ div >
</ div >
</ div >
</ div >
< ? php endif ?>
2016-07-18 16:39:37 +00:00
</ div >
2022-10-20 09:07:43 +00:00
<!-- end right col -->
</ div >
2016-07-18 16:39:37 +00:00
< ? php echoUOJPageFooter () ?>