DiscuzX/upload/source/admincp/admincp_optimizer.php

328 lines
12 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: admincp_optimizer.php 33867 2013-08-23 06:12:21Z jeffjzhang $
*/
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}
cpheader();
$optimizer_option = array(
'optimizer_thread',
'optimizer_setting',
'optimizer_post',
'optimizer_member',
'optimizer_dbbackup',
'optimizer_dbbackup_clean',
'optimizer_seo'
);
$security_option = array(
'optimizer_inviteregister',
'optimizer_emailregister',
'optimizer_pwlength',
'optimizer_regmaildomain',
'optimizer_ipregctrl',
'optimizer_newbiespan',
'optimizer_editperdel',
'optimizer_recyclebin',
'optimizer_forumstatus',
'optimizer_usergroup9',
'optimizer_usergroup4',
'optimizer_usergroup5',
'optimizer_usergroup6',
'optimizer_cloudsecurity',
'optimizer_attachexpire',
'optimizer_attachrefcheck',
'optimizer_filecheck',
'optimizer_plugin',
'optimizer_upgrade',
'optimizer_patch',
'optimizer_loginpwcheck',
'optimizer_loginoutofdate',
'optimizer_eviluser',
'optimizer_white_list',
'optimizer_security_daily',
);
if($_G['setting']['connect']['allow']) {
$security_option[] = 'optimizer_postqqonly';
$security_option[] = 'optimizer_aggid';
}
$check_record_time_key = 'check_record_time';
if(in_array($operation, array('security', 'performance'))) {
$_GET['anchor'] = $operation;
$operation = '';
}
if($_GET['anchor'] == 'security') {
shownav('safe', 'menu_security');
$optimizer_option = $security_option;
$check_record_time_key = 'security_check_record_time';
showsubmenu('menu_security');
} elseif($_GET['anchor'] == 'performance') {
shownav('founder', 'menu_optimizer');
showsubmenu('menu_optimizer');
}
if($operation) {
$type = $_GET['type'];
if(!in_array($type, $optimizer_option)) {
cpmsg('parameters_error', '', 'error');
}
include_once 'source/discuz_version.php';
$optimizer = new optimizer($type);
}
$_GET['anchor'] = in_array($_GET['anchor'], array('security', 'performance')) ? $_GET['anchor'] : 'security';
$current = array($_GET['anchor'] => 1);
showmenu('nav_founder_optimizer', array(
array('founder_optimizer_security', 'optimizer&anchor=security', $current['security']),
array('founder_optimizer_performance', 'optimizer&anchor=performance', $current['performance']),
));
if($operation == 'optimize_unit') {
$optimizer->optimizer();
} elseif($operation == 'check_unit') {
$checkstatus = $optimizer->check();
C::t('common_optimizer')->update($type.'_checkrecord', ($checkstatus['status'] == 1 ? $checkstatus['status'] : 0));
C::t('common_optimizer')->update($check_record_time_key, $_G['timestamp']);
include template('common/header_ajax');
echo '<script type="text/javascript">updatecheckstatus(\''.$type.'\', \''.$checkstatus['lang'].'\', \''.$checkstatus['status'].'\', \''.$checkstatus['type'].'\', \''.$checkstatus['extraurl'].'\');</script>';
include template('common/footer_ajax');
exit;
} elseif($operation == 'setting_optimizer') {
if(submitcheck('setting_optimizer', 1)) {
$setting_options = $_GET['options'];
if($optimizer->option_optimizer($setting_options)) {
cpmsg('founder_optimizer_setting_succeed', 'action=optimizer&operation=setting_optimizer&type=optimizer_setting', 'succeed');
} else {
cpmsg('founder_optimizer_setting_error', '', 'error');
}
} else {
showformheader('optimizer&operation=setting_optimizer&type=optimizer_setting');
showtableheader();
$option = $optimizer->get_option();
echo '<tr class="header">';
echo '<th></th>';
echo '<th class="td24">'.$lang['founder_optimizer_setting_option'].'</th>';
echo '<th>'.$lang['founder_optimizer_setting_option_description'].'</th>';
echo '<th class="td24">'.$lang['founder_optimizer_setting_description'].'</th>';
echo '</tr>';
foreach($option as $setting) {
$color = ' style="'.($setting[4] ? 'color:red;' : 'color:green').'"';
echo '<tr>';
echo '<td><input type="checkbox" name="options[]" value="'.$setting[0].'" '.($setting[4] ? 'checked' : 'disabled').' /></td>';
echo '<td'.$color.'>'.$setting[1].'</td>';
echo '<td'.$color.'>'.$setting[2].'</td>';
echo '<td'.$color.'>'.$setting[3].'</td>';
echo '</tr>';
}
showsubmit('setting_optimizer');
showtablefooter();
showformfooter();
}
} else {
$checkrecordtime = C::t('common_optimizer')->fetch($check_record_time_key);
if(!$_GET['checking'] && $_GET['anchor'] == 'security') {
showtips('optimizer_security_tips');
}
showtableheader();
echo '<div class="optblock cl">';
echo $_GET['checking'] ? '<a href="javascript:;" id="checking" class="btn_big">'.$lang['founder_optimizer_checking'].'</a>' :
'<a href="'.ADMINSCRIPT.'?action=optimizer&checking=1&anchor='.$_GET['anchor'].'" id="checking" class="btn_big">'.$lang['founder_optimizer_start_check'].'</a>';
if($_GET['checking']) {
echo '<div class="pbg" id="processid">';
echo '<div class="pbr" style="width: 0;" id="percentprocess"></div>';
echo '<div class="xs0" id="percent">0%</div>';
echo '</div>';
}
echo '<div id="checkstatus">';
if(!$checkrecordtime) {
echo $lang['founder_optimizer_first_use'];
} else {
$num = 0;
$checkrecordkey = array();
foreach($optimizer_option as $option) {
$checkrecordkey[] = $option.'_checkrecord';
}
foreach(C::t('common_optimizer')->fetch_all($checkrecordkey) as $checkrecordvalue) {
if($checkrecordvalue['v'] == 1) {
$num++;
}
}
if(!$_GET['checking']) {
echo $lang['founder_optimizer_lastcheck'].dgmdate($checkrecordtime).$lang['founder_optimizer_findnum'].$num.$lang['founder_optimizer_neednum'];
}
}
echo '</div>';
echo '</div>';
if($_GET['checking']) {
$inc_unit = ceil(100/count($optimizer_option));
$adminscipt = ADMINSCRIPT;
$C = '$C';
print <<<END
<script type="text/javascript">
var checkpercent = 0;
var checknum = 0;
var optimize_num = 0;
var security_num = 0;
var tip_num = 0;
var securitygrade = '';
function updatecheckpercent() {
checkpercent += {$inc_unit};
checknum++;
$('percent').innerHTML = parseInt(checkpercent) + '%';
$('percentprocess').style.width = parseInt(checkpercent) * 2 + 'px';
}
function updatecheckstatus(id, msg, status, type, extraurl) {
var optimize_table = $('optimizerable');
var optimize_tablerows = optimize_table.rows.length;
var security_table = $('securityoption');
var security_tablerows = security_table.rows.length;
var tip_table = $('tipoption');
var tip_tablerows = tip_table.rows.length;
if(id == 'optimizer_upgrade' || id == 'optimizer_patch') {
securitygrade = '{$lang[founder_optimizer_low]}';
}
var optiontype = id;
id = 'progress_' + id;
$(id + '_tr').style.display = 'none';
var color = 'green';
if(status == 1) {
color = 'red';
optimize_num++;
$('optimizerablenum').innerHTML = optimize_num;
optimize_table.style.display = 'block';
var newtr = optimize_table.insertRow(optimize_tablerows);
newtr.className = 'ooclass';
} else if(status == 2) {
color = 'blue';
tip_num++;
$('tipoptionnum').innerHTML = tip_num;
tip_table.style.display = 'block';
var newtr = tip_table.insertRow(tip_tablerows);
newtr.className = 'toclass';
newtr.style.display = 'none';
} else {
color = 'green';
security_num++;
$('securityoptionnum').innerHTML = security_num;
security_table.style.display = 'block';
var newtr = security_table.insertRow(security_tablerows);
newtr.className = 'soclass';
newtr.style.display = 'none';
}
var statusstr = '';
if(status != 0) {
if(type == 'header') {
statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_optimizer]}</a>';
} else if(type == 'view') {
statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_view]}</a>';
} else if(type == 'scan') {
statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_scan]}</a>';
}
}
newtr.insertCell(0).innerHTML = $(id + '_unit').innerHTML;
newtr.insertCell(1).innerHTML = msg;
newtr.insertCell(2).innerHTML = statusstr;
if(parseInt(checkpercent) >= 100) {
$('checking').innerHTML = '{$lang[founder_optimizer_recheck_js]}';
$('checking').href = '{$adminscipt}?action=optimizer&checking=1&anchor={$_GET[anchor]}';
$('processid').style.display = 'none';
if('$_GET[anchor]' == 'security') {
if(securitygrade == '') {
if(optimize_num <= 1) {
securitygrade = '{$lang[founder_optimizer_high]}';
} else if(optimize_num >=2 && optimize_num <=4) {
securitygrade = '{$lang[founder_optimizer_middle]}';
} else {
securitygrade = '{$lang[founder_optimizer_low]}';
}
}
$('checkstatus').innerHTML = '{$lang[founder_optimizer_check_complete_js]}' + checknum + '{$lang[founder_optimizer_findnum]}' + optimize_num + '{$lang[founder_optimizer_neednum]}' + ' {$lang[founder_optimizer_level]}: <span style="color:green;font-size:16px;font-weight:700;">' + securitygrade + '</span>';
} else {
$('checkstatus').innerHTML = '{$lang[founder_optimizer_check_complete_js]}' + checknum + '{$lang[founder_optimizer_findnum]}' + optimize_num + '{$lang[founder_optimizer_neednum]}';
}
}
}
function showoptions(obj, option) {
var o = $C(option);
var isopen = 0;
if(obj.innerHTML == '[-]') {
isoepn = 0;
obj.innerHTML = '[+]';
} else {
isopen = 1;
obj.innerHTML = '[-]';
}
for(var i=0; i<o.length; i++) {
if(isopen == 1) {
o[i].style.display = '';
} else {
o[i].style.display = 'none';
}
}
}
function showlistmore(btnid, classname) {
var btn = $(btnid);
var o = $C(classname);
btn.style.display = 'none';
for(var i=0; i<o.length; i++) {
o[i].style.display = 'block';
}
}
</script>
END;
echo '<table class="tb tb2 tb3" style="margin-top:0;">';
foreach($optimizer_option as $option) {
echo '<tr class="hover" id="progress_'.$option.'_tr">';
echo '<td width="200"><div id="progress_'.$option.'_unit">'.$lang['optimizer_check_unit_'.$option].'</td>';
echo '<td width="350"><div id="progress_'.$option.'">'.$lang['founder_optimizer_checking'].'...</div></td><script type="text/javascript">ajaxget(\''.ADMINSCRIPT.'?action=optimizer&operation=check_unit&type='.$option.'&anchor='.$_GET['anchor'].'\', \'progress_'.$option.'\', \'\', \'\', \'\', updatecheckpercent)</script>';
echo '<td><div id="progress_'.$option.'_status"></div></td>';
echo '</tr>';
}
echo '</table>';
echo '<table id="optimizerable" class="tb tb2 tb3" style="margin-top:0;display:none;">';
echo '<tr><td width="200" style="color:red;font-weight:700;"><a href="javascript:;" onclick="showoptions(this, \'ooclass\')">[-]</a> '.$lang['founder_optimizer_needopti'].'(<span id="optimizerablenum"></span>)</td><td width="350"></td><td></td></tr>';
echo '</table>';
echo '<table id="securityoption" class="tb tb2 tb3" style="margin-top:0;display:none;">';
echo '<tr><td width="200" style="color:green;font-weight:700;"><a href="javascript:;" onclick="showoptions(this, \'soclass\')">[+]</a> '.$lang['founder_optimizer_safe'].'(<span id="securityoptionnum"></span>)</td><td width="350"></td><td></td></tr>';
echo '</table>';
echo '<table id="tipoption" class="tb tb2 tb3" style="margin-top:0;display:none;">';
echo '<tr><td width="200" style="color:blue;font-weight:700;"><a href="javascript:;" onclick="showoptions(this, \'toclass\')">[+]</a> '.$lang['founder_optimizer_notice'].'(<span id="tipoptionnum"></span>)</td><td width="350"></td><td></td></tr>';
echo '</table>';
}
showtablefooter();
}
?>