admincp_optimizer.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: admincp_optimizer.php 33867 2013-08-23 06:12:21Z jeffjzhang $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. cpheader();
  12. $optimizer_option = array(
  13. 'optimizer_thread',
  14. 'optimizer_setting',
  15. 'optimizer_post',
  16. 'optimizer_member',
  17. 'optimizer_dbbackup',
  18. 'optimizer_dbbackup_clean',
  19. 'optimizer_seo'
  20. );
  21. $security_option = array(
  22. 'optimizer_inviteregister',
  23. 'optimizer_emailregister',
  24. 'optimizer_pwlength',
  25. 'optimizer_regmaildomain',
  26. 'optimizer_ipregctrl',
  27. 'optimizer_newbiespan',
  28. 'optimizer_editperdel',
  29. 'optimizer_recyclebin',
  30. 'optimizer_forumstatus',
  31. 'optimizer_usergroup9',
  32. 'optimizer_usergroup4',
  33. 'optimizer_usergroup5',
  34. 'optimizer_usergroup6',
  35. 'optimizer_cloudsecurity',
  36. 'optimizer_attachexpire',
  37. 'optimizer_attachrefcheck',
  38. 'optimizer_filecheck',
  39. 'optimizer_plugin',
  40. 'optimizer_upgrade',
  41. 'optimizer_patch',
  42. 'optimizer_loginpwcheck',
  43. 'optimizer_loginoutofdate',
  44. 'optimizer_eviluser',
  45. 'optimizer_white_list',
  46. 'optimizer_security_daily',
  47. );
  48. if($_G['setting']['connect']['allow']) {
  49. $security_option[] = 'optimizer_postqqonly';
  50. $security_option[] = 'optimizer_aggid';
  51. }
  52. $check_record_time_key = 'check_record_time';
  53. if(in_array($operation, array('security', 'performance'))) {
  54. $_GET['anchor'] = $operation;
  55. $operation = '';
  56. }
  57. if($_GET['anchor'] == 'security') {
  58. shownav('safe', 'menu_security');
  59. $optimizer_option = $security_option;
  60. $check_record_time_key = 'security_check_record_time';
  61. showsubmenu('menu_security');
  62. } elseif($_GET['anchor'] == 'performance') {
  63. shownav('founder', 'menu_optimizer');
  64. showsubmenu('menu_optimizer');
  65. }
  66. if($operation) {
  67. $type = $_GET['type'];
  68. if(!in_array($type, $optimizer_option)) {
  69. cpmsg('parameters_error', '', 'error');
  70. }
  71. include_once 'source/discuz_version.php';
  72. $optimizer = new optimizer($type);
  73. }
  74. $_GET['anchor'] = in_array($_GET['anchor'], array('security', 'performance')) ? $_GET['anchor'] : 'security';
  75. $current = array($_GET['anchor'] => 1);
  76. showmenu('nav_founder_optimizer', array(
  77. array('founder_optimizer_security', 'optimizer&anchor=security', $current['security']),
  78. array('founder_optimizer_performance', 'optimizer&anchor=performance', $current['performance']),
  79. ));
  80. if($operation == 'optimize_unit') {
  81. $optimizer->optimizer();
  82. } elseif($operation == 'check_unit') {
  83. $checkstatus = $optimizer->check();
  84. C::t('common_optimizer')->update($type.'_checkrecord', ($checkstatus['status'] == 1 ? $checkstatus['status'] : 0));
  85. C::t('common_optimizer')->update($check_record_time_key, $_G['timestamp']);
  86. include template('common/header_ajax');
  87. echo '<script type="text/javascript">updatecheckstatus(\''.$type.'\', \''.$checkstatus['lang'].'\', \''.$checkstatus['status'].'\', \''.$checkstatus['type'].'\', \''.$checkstatus['extraurl'].'\');</script>';
  88. include template('common/footer_ajax');
  89. exit;
  90. } elseif($operation == 'setting_optimizer') {
  91. if(submitcheck('setting_optimizer', 1)) {
  92. $setting_options = $_GET['options'];
  93. if($optimizer->option_optimizer($setting_options)) {
  94. cpmsg('founder_optimizer_setting_succeed', 'action=optimizer&operation=setting_optimizer&type=optimizer_setting', 'succeed');
  95. } else {
  96. cpmsg('founder_optimizer_setting_error', '', 'error');
  97. }
  98. } else {
  99. showformheader('optimizer&operation=setting_optimizer&type=optimizer_setting');
  100. showtableheader();
  101. $option = $optimizer->get_option();
  102. echo '<tr class="header">';
  103. echo '<th></th>';
  104. echo '<th class="td24">'.$lang['founder_optimizer_setting_option'].'</th>';
  105. echo '<th>'.$lang['founder_optimizer_setting_option_description'].'</th>';
  106. echo '<th class="td24">'.$lang['founder_optimizer_setting_description'].'</th>';
  107. echo '</tr>';
  108. foreach($option as $setting) {
  109. $color = ' style="'.($setting[4] ? 'color:red;' : 'color:green').'"';
  110. echo '<tr>';
  111. echo '<td><input type="checkbox" name="options[]" value="'.$setting[0].'" '.($setting[4] ? 'checked' : 'disabled').' /></td>';
  112. echo '<td'.$color.'>'.$setting[1].'</td>';
  113. echo '<td'.$color.'>'.$setting[2].'</td>';
  114. echo '<td'.$color.'>'.$setting[3].'</td>';
  115. echo '</tr>';
  116. }
  117. showsubmit('setting_optimizer');
  118. showtablefooter();
  119. showformfooter();
  120. }
  121. } else {
  122. $checkrecordtime = C::t('common_optimizer')->fetch($check_record_time_key);
  123. if(!$_GET['checking'] && $_GET['anchor'] == 'security') {
  124. showtips('optimizer_security_tips');
  125. }
  126. showtableheader();
  127. echo '<div class="optblock cl">';
  128. echo $_GET['checking'] ? '<a href="javascript:;" id="checking" class="btn_big">'.$lang['founder_optimizer_checking'].'</a>' :
  129. '<a href="'.ADMINSCRIPT.'?action=optimizer&checking=1&anchor='.$_GET['anchor'].'" id="checking" class="btn_big">'.$lang['founder_optimizer_start_check'].'</a>';
  130. if($_GET['checking']) {
  131. echo '<div class="pbg" id="processid">';
  132. echo '<div class="pbr" style="width: 0;" id="percentprocess"></div>';
  133. echo '<div class="xs0" id="percent">0%</div>';
  134. echo '</div>';
  135. }
  136. echo '<div id="checkstatus">';
  137. if(!$checkrecordtime) {
  138. echo $lang['founder_optimizer_first_use'];
  139. } else {
  140. $num = 0;
  141. $checkrecordkey = array();
  142. foreach($optimizer_option as $option) {
  143. $checkrecordkey[] = $option.'_checkrecord';
  144. }
  145. foreach(C::t('common_optimizer')->fetch_all($checkrecordkey) as $checkrecordvalue) {
  146. if($checkrecordvalue['v'] == 1) {
  147. $num++;
  148. }
  149. }
  150. if(!$_GET['checking']) {
  151. echo $lang['founder_optimizer_lastcheck'].dgmdate($checkrecordtime).$lang['founder_optimizer_findnum'].$num.$lang['founder_optimizer_neednum'];
  152. }
  153. }
  154. echo '</div>';
  155. echo '</div>';
  156. if($_GET['checking']) {
  157. $inc_unit = ceil(100/count($optimizer_option));
  158. $adminscipt = ADMINSCRIPT;
  159. $C = '$C';
  160. print <<<END
  161. <script type="text/javascript">
  162. var checkpercent = 0;
  163. var checknum = 0;
  164. var optimize_num = 0;
  165. var security_num = 0;
  166. var tip_num = 0;
  167. var securitygrade = '';
  168. function updatecheckpercent() {
  169. checkpercent += {$inc_unit};
  170. checknum++;
  171. $('percent').innerHTML = parseInt(checkpercent) + '%';
  172. $('percentprocess').style.width = parseInt(checkpercent) * 2 + 'px';
  173. }
  174. function updatecheckstatus(id, msg, status, type, extraurl) {
  175. var optimize_table = $('optimizerable');
  176. var optimize_tablerows = optimize_table.rows.length;
  177. var security_table = $('securityoption');
  178. var security_tablerows = security_table.rows.length;
  179. var tip_table = $('tipoption');
  180. var tip_tablerows = tip_table.rows.length;
  181. if(id == 'optimizer_upgrade' || id == 'optimizer_patch') {
  182. securitygrade = '{$lang[founder_optimizer_low]}';
  183. }
  184. var optiontype = id;
  185. id = 'progress_' + id;
  186. $(id + '_tr').style.display = 'none';
  187. var color = 'green';
  188. if(status == 1) {
  189. color = 'red';
  190. optimize_num++;
  191. $('optimizerablenum').innerHTML = optimize_num;
  192. optimize_table.style.display = 'block';
  193. var newtr = optimize_table.insertRow(optimize_tablerows);
  194. newtr.className = 'ooclass';
  195. } else if(status == 2) {
  196. color = 'blue';
  197. tip_num++;
  198. $('tipoptionnum').innerHTML = tip_num;
  199. tip_table.style.display = 'block';
  200. var newtr = tip_table.insertRow(tip_tablerows);
  201. newtr.className = 'toclass';
  202. newtr.style.display = 'none';
  203. } else {
  204. color = 'green';
  205. security_num++;
  206. $('securityoptionnum').innerHTML = security_num;
  207. security_table.style.display = 'block';
  208. var newtr = security_table.insertRow(security_tablerows);
  209. newtr.className = 'soclass';
  210. newtr.style.display = 'none';
  211. }
  212. var statusstr = '';
  213. if(status != 0) {
  214. if(type == 'header') {
  215. statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_optimizer]}</a>';
  216. } else if(type == 'view') {
  217. statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_view]}</a>';
  218. } else if(type == 'scan') {
  219. statusstr = '<a class="btn" href="$adminscipt?action=optimizer&operation=optimize_unit&anchor=$_GET[anchor]&type='+ optiontype + extraurl + '" target="_blank">{$lang[founder_optimizer_scan]}</a>';
  220. }
  221. }
  222. newtr.insertCell(0).innerHTML = $(id + '_unit').innerHTML;
  223. newtr.insertCell(1).innerHTML = msg;
  224. newtr.insertCell(2).innerHTML = statusstr;
  225. if(parseInt(checkpercent) >= 100) {
  226. $('checking').innerHTML = '{$lang[founder_optimizer_recheck_js]}';
  227. $('checking').href = '{$adminscipt}?action=optimizer&checking=1&anchor={$_GET[anchor]}';
  228. $('processid').style.display = 'none';
  229. if('$_GET[anchor]' == 'security') {
  230. if(securitygrade == '') {
  231. if(optimize_num <= 1) {
  232. securitygrade = '{$lang[founder_optimizer_high]}';
  233. } else if(optimize_num >=2 && optimize_num <=4) {
  234. securitygrade = '{$lang[founder_optimizer_middle]}';
  235. } else {
  236. securitygrade = '{$lang[founder_optimizer_low]}';
  237. }
  238. }
  239. $('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>';
  240. } else {
  241. $('checkstatus').innerHTML = '{$lang[founder_optimizer_check_complete_js]}' + checknum + '{$lang[founder_optimizer_findnum]}' + optimize_num + '{$lang[founder_optimizer_neednum]}';
  242. }
  243. }
  244. }
  245. function showoptions(obj, option) {
  246. var o = $C(option);
  247. var isopen = 0;
  248. if(obj.innerHTML == '[-]') {
  249. isoepn = 0;
  250. obj.innerHTML = '[+]';
  251. } else {
  252. isopen = 1;
  253. obj.innerHTML = '[-]';
  254. }
  255. for(var i=0; i<o.length; i++) {
  256. if(isopen == 1) {
  257. o[i].style.display = '';
  258. } else {
  259. o[i].style.display = 'none';
  260. }
  261. }
  262. }
  263. function showlistmore(btnid, classname) {
  264. var btn = $(btnid);
  265. var o = $C(classname);
  266. btn.style.display = 'none';
  267. for(var i=0; i<o.length; i++) {
  268. o[i].style.display = 'block';
  269. }
  270. }
  271. </script>
  272. END;
  273. echo '<table class="tb tb2 tb3" style="margin-top:0;">';
  274. foreach($optimizer_option as $option) {
  275. echo '<tr class="hover" id="progress_'.$option.'_tr">';
  276. echo '<td width="200"><div id="progress_'.$option.'_unit">'.$lang['optimizer_check_unit_'.$option].'</td>';
  277. 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>';
  278. echo '<td><div id="progress_'.$option.'_status"></div></td>';
  279. echo '</tr>';
  280. }
  281. echo '</table>';
  282. echo '<table id="optimizerable" class="tb tb2 tb3" style="margin-top:0;display:none;">';
  283. 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>';
  284. echo '</table>';
  285. echo '<table id="securityoption" class="tb tb2 tb3" style="margin-top:0;display:none;">';
  286. 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>';
  287. echo '</table>';
  288. echo '<table id="tipoption" class="tb tb2 tb3" style="margin-top:0;display:none;">';
  289. 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>';
  290. echo '</table>';
  291. }
  292. showtablefooter();
  293. }
  294. ?>