SilentLittleCat há 7 anos atrás
pai
commit
ce994bb704
5 ficheiros alterados com 1306 adições e 0 exclusões
  1. 8 0
      .idea/modules.xml
  2. 6 0
      .idea/vcs.xml
  3. 257 0
      .idea/workspace.xml
  4. 8 0
      .idea/zijia.iml
  5. 1027 0
      tools.php

+ 8 - 0
.idea/modules.xml

xqd
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/zijia.iml" filepath="$PROJECT_DIR$/.idea/zijia.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

xqd
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 257 - 0
.idea/workspace.xml

xqd
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="b6faea92-a65d-441a-9752-2f40c137a7e3" name="Default" comment="" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="375" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
+  <component name="ProjectFrameBounds" extendedState="7">
+    <option name="x" value="260" />
+    <option name="y" value="20" />
+    <option name="width" value="1400" />
+    <option name="height" value="990" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scratches" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="zijia" type="b2602c69:ProjectViewProjectNode" />
+              <item name="zijia" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
+            <path>
+              <item name="zijia" type="b2602c69:ProjectViewProjectNode" />
+              <item name="zijia" type="2a2b976b:PhpTreeStructureProvider$1" />
+              <item name="config" type="2a2b976b:PhpTreeStructureProvider$1" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="b6faea92-a65d-441a-9752-2f40c137a7e3" name="Default" comment="" />
+      <created>1523670599416</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1523670599416</updated>
+      <workItem from="1523670600557" duration="2455000" />
+      <workItem from="1523751601979" duration="3096000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="5551000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-9" y="-9" width="1938" height="1048" extended-state="7" />
+    <layout>
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1796875" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Docker" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager />
+    <watches-manager />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/admin.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="403">
+          <caret line="18" column="46" lean-forward="true" selection-start-line="18" selection-start-column="46" selection-end-line="18" selection-end-column="46" />
+          <folding>
+            <element signature="e#7#186#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/table/table_baidusubmit_setting.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1333">
+          <caret line="43" column="37" lean-forward="true" selection-start-line="43" selection-start-column="37" selection-end-line="43" selection-end-column="37" />
+          <folding>
+            <marker date="1523670581684" expanded="true" signature="310:326" ph="SELECT * FRO... " />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/function/function_baidu.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/table/index.htm">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/template/bl_notice.jpg">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/template/notice.jpg">
+      <provider selected="true" editor-type-id="images">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/table/table_baidusubmit_setting.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1333">
+          <caret line="43" column="37" lean-forward="false" selection-start-line="43" selection-start-column="37" selection-end-line="43" selection-end-column="37" />
+          <folding>
+            <marker date="1523670581684" expanded="true" signature="310:326" ph="SELECT * FRO... " />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/wechat/api_setting.inc.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-3069">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/archiver/index.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/source/plugin/baidusubmit/function/function_baidu.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="341">
+          <caret line="11" column="60" lean-forward="true" selection-start-line="11" selection-start-column="60" selection-end-line="11" selection-end-column="60" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/config_global.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="372">
+          <caret line="12" column="39" lean-forward="false" selection-start-line="12" selection-start-column="35" selection-end-line="12" selection-end-column="39" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/connect.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-356">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/home.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/config/config_ucenter.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="589">
+          <caret line="19" column="0" lean-forward="true" selection-start-line="19" selection-start-column="0" selection-end-line="19" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/admin.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-883">
+          <caret line="18" column="46" lean-forward="false" selection-start-line="18" selection-start-column="46" selection-end-line="18" selection-end-column="46" />
+          <folding>
+            <element signature="e#7#186#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 8 - 0
.idea/zijia.iml

xqd
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 1027 - 0
tools.php

xqd
@@ -0,0 +1,1027 @@
+<?php
+/**
+ *      [Discuz!] (C)2001-2099 Comsenz Inc.
+ *      This is NOT a freeware, use is subject to license terms
+ *
+ *      $Id: tools.php 111 2013-03-18 02:43:43Z xujiakun $
+ */
+
+/**
+ * 密码要求:1、必须且只能包含大写字母、小写字母、数字
+ *           2、密码长度大于6
+ * 修改下面的 $password = '',单引号中按照密码要求写入你的密码,举例 $password = 'DiscuzX3' ,注意:请不要把密码设置成 DiscuzX3,以免被人获知。
+ */
+$tpassword = 'qwe12345';
+
+/*************************************以下部分为tools工具箱的核心代码,请不要随意修改**************************************/
+
+error_reporting(0);
+define('TMAGIC_QUOTES_GPC', function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc());
+
+define('TOOLS_ROOT', dirname(__FILE__).'/');
+define('TOOLS_VERSION', 'Tools 3.0.0');
+define('TOOLS_DISCUZ_VERSION', 'Discuz! X3.0');
+
+$tools_versions = TOOLS_VERSION;
+$tools_discuz_version = TOOLS_DISCUZ_VERSION;
+
+if(!TMAGIC_QUOTES_GPC) {
+	$_GET = taddslashes($_GET);
+	$_POST = taddslashes($_POST);
+	$_COOKIE = taddslashes($_COOKIE);
+}
+
+if (isset($_GET['GLOBALS']) || isset($_POST['GLOBALS']) ||  isset($_COOKIE['GLOBALS']) || isset($_FILES['GLOBALS'])) {
+	show_msg('您当前的访问请求当中含有非法字符,已经被系统拒绝');
+}
+
+if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST)) {
+	$_GET = array_merge($_GET, $_POST);
+}
+
+$actionarray = array('index', 'setadmin', 'closesite', 'closeplugin', 'repairdb', 'restoredb', 'updatecache', 'login', 'logout');
+$_GET['action'] = htmlspecialchars($_GET['action']);
+$action = in_array($_GET['action'], $actionarray) ? $_GET['action'] : 'index';
+
+if(!is_login()) {
+	login_page();
+	exit;
+}
+
+$t = new T();
+$t->init();
+$config = $t->config;
+
+if($action == 'index') {
+//首页
+	show_header();
+	print<<<END
+	<p>欢迎使用 Tools 之 Discuz! 急诊箱功能!我们致力于为您解决 Discuz! 站点的紧急故障,欢迎各位站长朋友们使用。</p>
+	<tr><td>
+	<h5>适用版本:</h5>
+	<ul>
+		<li>{$tools_discuz_version}</li>
+	</ul>
+	<h5>主要功能:</h5>
+	<ul>
+		<li>重置管理员账号:将把您指定的会员设置为管理员</li>
+		<li>开启关闭站点:  此处可以进行站点“关闭/打开”的操作</li>
+		<li>一键关闭插件:  一键关闭应用中心开启的所有插件</li>
+		<li>修复数据库:    对所有数据表进行检查修复工作</li>
+		<li>恢复数据库:    一次性导入论坛数据备份</li>
+		<li>更新缓存:      一键更新论坛的数据缓存与模板缓存</li>
+	</ul>
+	<h5>问题反馈:</h5>
+	<p>&nbsp;&nbsp;&nbsp;&nbsp;有关 Tools 工具箱的建议和问题,请反馈到 Discuz! 官方论坛安装使用区(<a href="http://www.discuz.net/forum-2-1.html" target="_blank">http://www.discuz.net/forum-2-1.html</a>),我们会对您的问题进行处理。提交问题时,请注明问题来源于 Discuz! 急诊箱。</p>
+END;
+	show_footer();
+
+}elseif($action == 'setadmin') {
+//找回管理员
+	$t->connect_db();
+	$founders = @explode(',',$t->config['admincp']['founder']);
+	$foundernames = array();
+	foreach($founders as $userid) {
+		$sql = "SELECT username FROM ".$t->dbconfig['tablepre']."common_member WHERE `uid`='$userid'";
+		$foundernames[] = mysql_result(mysql_query($sql, $t->db), 0);
+	}
+	$foundernames = implode($foundernames, ',');
+	print_r($foundernames);
+	$sql = "SELECT username FROM ".$t->dbconfig['tablepre']."common_member WHERE `adminid`='1'";
+	$query = mysql_query($sql, $t->db) or dir(mysql_error());
+	$adminnames = array();
+	while($row = mysql_fetch_row($query)) {
+		$adminnames[] = $row[0];
+	}
+	$adminnames = implode($adminnames, ',');
+	
+	if(!empty($_POST['setadminsubmit'])) {
+		if($_GET['username'] == NULL) {
+			show_msg('请输入用户名', 'tools.php?action='.$action, 2000);
+		}
+		
+		if($_GET['loginfield'] == 'username') {
+			$_GET['username'] = addslashes($_GET['username']);
+			$sql = "SELECT uid FROM ".$t->dbconfig['tablepre']."common_member WHERE `username`='".$_GET['username']."'";
+			$uid = mysql_result(mysql_query($sql, $t->db), 0);
+			$username = $_GET['username'];
+		} elseif($_GET['loginfield'] == 'uid') {
+			$_GET['username'] = addslashes($_GET['username']);
+			$uid = 	$_GET['username'];
+			$sql = "SELECT username FROM ".$t->dbconfig['tablepre']."common_member WHERE `uid`='".$_GET['username']."'";
+			$username = mysql_result(mysql_query($sql, $t->db), 0);
+		}
+		
+		if($uid && $username) {
+			$sql = "UPDATE ".$t->dbconfig['tablepre']."common_member SET `groupid`='1', `adminid`='1' WHERE `uid`='$uid'";
+			@mysql_query($sql, $t->db);
+			if(!in_array($uid,$founders)) {
+				$sql = "REPLACE INTO ".$t->dbconfig['tablepre']. "common_admincp_member (`uid`, `cpgroupid`, `customperm`) VALUES ('$uid', '0', '')";
+				@mysql_query($sql, $t->db);
+			}
+		} else {
+			show_msg('没有这个用户', 'tools.php?action='.$action, 2000);
+		}
+		
+		$t->connect_db('ucdb');
+		if($_GET['password'] != NULL) {
+			$sql = "SELECT salt FROM ".$t->ucdbconfig['tablepre']."members WHERE `uid`='$uid'";
+			$salt = mysql_result(mysql_query($sql, $t->db), 0);
+			$newpassword = md5(md5(trim($_GET['password'])).$salt);
+			$sql = "UPDATE ".$t->ucdbconfig['tablepre']."members SET `password`='$newpassword' WHERE `uid`='$uid'";
+			mysql_query($sql, $t->db);
+		}
+		if($_GET['issecques'] == 1) {
+			$sql = "UPDATE ".$t->ucdbconfig['tablepre']."members SET `secques`='' WHERE `uid`='$uid'";
+			mysql_query($sql, $t->db);
+		}
+		$t->close_db();
+		show_msg('管理员找回成功!', 'tools.php?action='.$action, 2000);
+		
+	} else {
+		show_header();
+		echo "<p>现有创始人:$foundernames</p>";
+		echo "<p>现有管理员:$adminnames</p>";
+		print<<<END
+		<form action="?action={$action}" method="post">
+		<h5>{$info}</h5>
+		<table id="setadmin">
+			<tr><th width="30%"><input class="radio" type="radio" name="loginfield" value="username" checked class="radio">用户名<input class="radio" type="radio" name="loginfield" value="uid" class="radio">UID</th><td width="70%"><input class="textinput" type="text" name="username" size="25" maxlength="40"></td></tr>
+			<tr><th width="30%">请输入密码</th><td width="70%"><input class="textinput" type="text" name="password" size="25"></td></tr>
+			<tr><th width="30%">是否清除安全提问</th><td width="70%">
+			<input class="radio" type="radio" name="issecques" value="1">是&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+			<input class="radio" type="radio" name="issecques" value="0" class="radio" checked>否</td></tr>
+		</table>
+			<input type="submit" name="setadminsubmit" value="提 &nbsp; 交">
+		</form>
+END;
+		print<<<END
+		<br/>
+		恢复步骤: 
+		重置管理员<br/>
+		<ul>
+		<li>选择用户名或者UID。</li>
+		<li>输入用户名或者UID。</li>
+		<li>如果需要重置密码,输入密码。</li>
+		<li>如果需要清除安全提问,请在是否清除安全提问处选择是。</li>
+		</ul>
+		<br/>
+		重置创始人<br/>
+		<ul>
+		<li>重置用户为创始人。</li>
+		<li>修改config_global.php 中 \$_config[\'admincp\'][\'founder\'] = \'管理员的ID\',多个以半角逗号分割。</li>
+		</ul>
+END;
+		show_footer();
+	}
+
+}elseif($action == 'closesite') {
+//一键开关站点
+	$t->connect_db();
+	$sql = "SELECT svalue FROM ".$t->dbconfig['tablepre']."common_setting WHERE skey='bbclosed'";
+	$bbclosed = mysql_result(mysql_query($sql, $t->db), 0);
+
+	if(empty($bbclosed)) {
+		$closed = '';
+		$opened = 'checked';
+	} else {
+		$closed = 'checked';
+		$opened = '';
+	}
+	$sql = "SELECT svalue FROM ".$t->dbconfig['tablepre']."common_setting WHERE `skey`='closedreason'";
+	$closedreason = mysql_result(mysql_query($sql, $t->db), 0);
+	if(!empty($_GET['closesitesubmit'])) {
+		if($_GET['close'] == 1) {
+			$sql = "UPDATE ".$t->dbconfig['tablepre']."common_setting SET `svalue`='1' WHERE `skey`='bbclosed'";
+			mysql_query($sql, $t->db);
+			$sql = "UPDATE ".$t->dbconfig['tablepre']."common_setting SET `svalue`='tools.php closed' WHERE `skey`='closedreason'";
+			mysql_query($sql, $t->db);
+		} else {
+			$sql = "UPDATE ".$t->dbconfig['tablepre']."common_setting SET `svalue`='0' WHERE `skey`='bbclosed'";
+			mysql_query($sql, $t->db);
+			$sql = "UPDATE ".$t->dbconfig['tablepre']."common_setting SET `svalue`='' WHERE `skey`='closedreason'";
+			mysql_query($sql, $t->db);
+		}
+		show_msg('关闭/打开站点操作成功,正在更新缓存...', 'tools.php?action=updatecache',2000);
+	} else {
+		show_header();
+		print<<<END
+		<h4>关闭/打开站点</h4>
+		此处可以进行站点“关闭/打开”的操作。
+		<p>
+		<form action="?action=closesite" method="post">
+		站点当前状态
+		<input class="radio" type="radio" name="close" value="0" {$opened} class="radio">打开
+		<input class="radio" type="radio" name="close" value="1" {$closed} class="radio">关闭
+		</p>
+		<p>
+		<input type="submit" name="closesitesubmit" value="提 &nbsp; 交">
+		</p>
+		</form>
+END;
+		show_footer();
+	}
+
+}elseif($action == 'closeplugin') {
+//一键关闭插件
+	include_once(TOOLS_ROOT.'source/class/class_core.php');
+	include_once(TOOLS_ROOT.'source/function/function_core.php');
+
+	$cachelist = array();
+	$discuz = & discuz_core::instance();
+	$discuz->cachelist = $cachelist;
+	$discuz->init_cron = false;
+	$discuz->init_setting = false;
+	$discuz->init_user = false;
+	$discuz->init_session = false;
+	$discuz->init_misc = false;
+	
+	$discuz->init();
+	require_once libfile('function/plugin');
+	require_once libfile('function/cache');
+	DB::query("UPDATE ".DB::table('common_plugin')." SET available='0'");
+	updatecache(array('plugin', 'setting', 'styles'));
+	cleartemplatecache();
+	show_msg('成功关闭所有插件', 'tools.php?action=index',2000);
+
+}elseif($action == 'repairdb') {
+//修复数据库
+	show_header();
+	$t->connect_db();
+	$typearray = array('index', 'repair', 'repairtables', 'allrepair', 'check', 'detail');
+	$type = in_array($_GET['type'], $typearray) ? $_GET['type'] : 'index';
+	
+	if($type == 'index') {
+	print<<<END
+	<div class=\"bm\">
+		<table id="menu">
+		<tr>
+			<!--<td><a href="?action=repairdb&type=allcheck">一键检查</a></td>--!>
+			<td><a href="?action=repairdb&type=allrepair">一键修复</a></td>
+			<td><a href="?action=repairdb&type=detail">进入详细页面检查或修复</a></td>
+		</tr>
+		</table>
+		说明 & 提示: 
+		<ul>
+			<!--<li>一键检查: 对数据库中所有表进行 CHECK TABLE 操作,列出损坏的数据表。</li>--!>
+			<li>一键修复: 先执行 CHECK TABLE 操作,然后按照检查的结果对有错误的数据表执行REPAIR TABLE 操作。</li>
+			<li>进入详细页面检查或修复: 列出详细表,对单表进行检查或修复。</li>
+			<li><span style="color:red">提示1:数据表比较大的情况下,mysql可能会花费比较长的时间进行检查和修复操作。</span></li>
+			<li><span style="color:red">提示2:REPAIR TABLE 操作不能修复所有情况,如果修复不了数据表,请登录服务器使用myisamchk进行数据表修复。</span></li>
+		</ul>
+	</div>
+END;
+	} elseif ($type == 'allrepair' || $type == 'allcheck' || $type == 'detail' || $type == 'check' || $type == 'repair' || $type == 'repairtables') {
+		$sql = "SHOW TABLE STATUS";
+		$tablelist = mysql_query($sql, $t->db);
+		while($list = mysql_fetch_array($tablelist, MYSQL_ASSOC)) {
+			if($type == 'allcheck' || $type == 'allrepair') {
+				if($list['Engine'] != 'MEMORY' && $list['Engine'] != 'HEAP') {
+					$sql = 'CHECK TABLE '.$list['Name'];
+					$query = mysql_query($sql, $t->db);
+					$checkresult = mysql_fetch_array($query, MYSQL_ASSOC);
+					
+					if( $checkresult['Msg_text'] != 'OK') {
+						$tablelists[$list['Name']]['statu'] = $checkresult['Msg_text'];
+						$tablelists[$list['Name']]['size'] = round(($list['Data_length'] + $list['Index_length'])/1024,2);
+					}
+				}
+			} else {
+				$tablelists[$list['Name']]['size'] = round(($list['Data_length'] + $list['Index_length'])/1024,2);
+			}
+		}
+		if($type == 'allrepair') {
+			foreach($tablelists as $table => $value) {
+				$sql = "REPAIR TABLE `".$table."`";
+				$query = mysql_query($sql, $t->db);
+				$repairresult = mysql_fetch_array($query, MYSQL_ASSOC);
+				$resulttable[$table]['statu'] = $repairresult['Msg_text'];
+				$resulttable[$table]['size'] = '未检查';
+			}
+			$tablelists = $resulttable;
+		}
+
+		if($type == 'check') {
+			$_GET['table'] = addslashes($_GET['table']);
+			$sql = 'CHECK TABLE '.$_GET['table'];
+			$query = mysql_query($sql, $t->db);
+			$checkresult = mysql_fetch_array($query, MYSQL_ASSOC);
+			$tablelists[$_GET['table']]['statu'] = $checkresult['Msg_text'];
+		}
+		if($type == 'repair') {
+			$_GET['table'] = addslashes($_GET['table']);
+			$sql = "REPAIR TABLE `".$_GET['table']."`";
+			$query = mysql_query($sql, $t->db);
+			$repairresult = mysql_fetch_array($query, MYSQL_ASSOC);
+			echo '<div style="background:red">';
+			show_msg_body('修复表单 '.$_GET['table'].' 结果:'.$repairresult['Msg_text'], "tools.php?action=$action&type=detail", 3000);
+			echo '</div>';
+		}
+		if($type == 'repairtables') {
+			if($_POST['optimizesubmit']){
+				$repairtables = addslashes($_POST['repairtables']);
+				foreach ($repairtables as $value) {
+					$sql = "REPAIR TABLE `".$value."`";
+					$query = mysql_query($sql, $t->db);
+					$repairresult = mysql_fetch_array($query, MYSQL_ASSOC);
+					echo '<div style="background:red">';
+					show_msg_body('修复表单 '.$value.' 结果:'.$repairresult['Msg_text'], '', 3000);
+					echo '</div>';
+				}
+				echo '<div style="background:red">';
+				show_msg_body('复选修复表单完成', "tools.php?action=$action&type=detail", 3000);
+				echo '</div>';
+			}
+		}
+			echo '
+			<script type="text/javascript">
+				var BROWSER = {};
+				var USERAGENT = navigator.userAgent.toLowerCase();
+				browserVersion({\'ie\':\'msie\',\'firefox\':\'\',\'chrome\':\'\',\'opera\':\'\',\'safari\':\'\',\'mozilla\':\'\',\'webkit\':\'\',\'maxthon\':\'\',\'qq\':\'qqbrowser\'});
+				function browserVersion(types) {
+					var other = 1;
+					for(i in types) {
+						var v = types[i] ? types[i] : i;
+						if(USERAGENT.indexOf(v) != -1) {
+							var re = new RegExp(v + \'(\\/|\\s)([\\d\\.]+)\', \'ig\');
+							var matches = re.exec(USERAGENT);
+							var ver = matches != null ? matches[2] : 0;
+							other = ver !== 0 && v != \'mozilla\' ? 0 : other;
+						} else {
+							var ver = 0;
+						}
+						eval(\'BROWSER.\' + i + \'= ver\');
+						}
+					BROWSER.other = other;
+				}
+				function jumpurl(url,nw) {
+					if(BROWSER.ie) url += (url.indexOf(\'?\') != -1 ?  \'&\' : \'?\') + \'referer=\' + escape(location.href);
+					if(nw == 1) {
+						window.open(url);	
+					} else {
+						location.href = url;
+					}
+					return false;
+				}
+				</script>';
+				echo '
+				<script type="text/javascript">
+				function checkAll(type, form, value, checkall, changestyle) {
+					var checkall = checkall ? checkall : \'chkall\';
+					for(var i = 0; i < form.elements.length; i++) {
+						var e = form.elements[i];
+						if(type == \'option\' && e.type == \'radio\' && e.value == value && e.disabled != true) {
+							e.checked = true;
+						} else if(type == \'value\' && e.type == \'checkbox\' && e.getAttribute(\'chkvalue\') == value) {
+							e.checked = form.elements[checkall].checked;
+							if(changestyle) {
+								multiupdate(e);
+							}
+						} else if(type == \'prefix\' && e.name && e.name != checkall && (!value || (value && e.name.match(value)))) {
+							e.checked = form.elements[checkall].checked;
+							if(changestyle) {
+								if(e.parentNode && e.parentNode.tagName.toLowerCase() == \'li\') {
+									e.parentNode.className = e.checked ? \'checked\' : \'\';
+								}
+								if(e.parentNode.parentNode && e.parentNode.parentNode.tagName.toLowerCase() == \'div\') {
+									e.parentNode.parentNode.className = e.checked ? \'item checked\' : \'item\';
+								}
+							}
+						}
+					}
+				}
+			</script>';
+			print<<<END
+			<div class=\"bm\">
+				<table class=\"tb\">
+					<tbody>
+					<form name="cpform" method="post" autocomplete="on" action="tools.php?action=repairdb&type=repairtables" id="cpform">
+					<tr>
+						<th></th>
+						<th width="350px">表名</th>
+						<th width="80px">大小</th>
+						<th></th>
+						<th width="80px"></th>
+					</tr>
+END;
+			foreach($tablelists as $name => $value) {
+				if($value['size'] < 1024) {
+					echo '<tr><th><input class="checkbox" type="checkbox" name="repairtables[]" value="'.$name.'"></th><th>'.$name.'</th><td style="text-align:right;color:#339900"">'.$value['size'] .'KB</td><td>';
+				} elseif(1024 < $value['size'] && $value['size']< 1048576 ) {
+					echo '<tr><th><input class="checkbox" type="checkbox" name="repairtables[]" value="'.$name.'"></th><th>'.$name.'</th><td style="text-align:right;color:#3333FF">'.round($value['size']/1024,1) .'MB</td><td>';
+				} elseif(1048576 < $value['size']){
+					echo '<tr><th><input class="checkbox" type="checkbox" name="repairtables[]" value="'.$name.'"></th><th>'.$name.'</th><td style="text-align:right;color:#FF0000"">'.round($value['size']/1048576,1) .'GB</td><td>';
+				}
+
+				if(!isset($value['statu'])) {
+					echo "<button type=\"button\" class=\"pn vm\" onclick=\"jumpurl('tools.php?action=repairdb&type=check&table=".$name."')\"><strong>检查</button>";
+				} elseif($value['statu']!='OK') {
+					echo '<span class=\"red\">'.$value['statu'].'</span>';
+				} else {
+					echo $value['statu'];
+				}
+
+				echo '</td><td>';
+				if($value['statu']!='OK' && $value['statu']!='Not Support CHECK') {
+					echo "<button type=\"button\" class=\"pn vm\" onclick=\"jumpurl('tools.php?action=repairdb&type=repair&table=".$name."')\"><strong>修复</button></strong>";
+				}
+				echo '</td></tr>';
+				}
+				
+			echo "<tr><th><input name=\"chkall\" id=\"chkall\" class=\"checkbox\" onclick=\"checkAll('prefix', this.form)\" type=\"checkbox\"></th><th><input type=\"submit\" class=\"btn\" id=\"submit_optimizesubmit\" name=\"optimizesubmit\" title=\"复选修复\" value=\"复选修复\"></th><td></td><td></td><td></td></form>";
+			echo '</tbody></table></div>';
+			if( count($tablelists) == 0) {
+				echo '<div style="background:#00cc66;">没有需要修复的表</div>';
+			}
+	} elseif ($type == 'allrepair') {
+		show_msg("操作成功", "tools.php?action=$action");
+	}
+	show_footer();
+
+}elseif($action == 'restoredb') {
+//恢复数据
+	$backfiledir = TOOLS_ROOT.'data/';
+	$detailarray = array();
+	$t->connect_db();
+
+	if(!mysql_select_db($t->dbconfig['name'], $t->db)) {
+		$dbname = $t->dbconfig['name'];
+		mysql_query("CREATE DATABASE $dbname");
+	}
+
+	if(!$_GET['importbak'] && !$_GET['nextfile']) {
+		//检测是否关闭站点
+		$sql = "SELECT svalue FROM ".$t->dbconfig['tablepre']."common_setting WHERE skey='bbclosed'";
+		$closed = mysql_result(mysql_query($sql, $t->db), 0);
+		if($closed != '1') {
+			show_msg('恢复数据前,请先关闭站点!', 'tools.php?action=closesite', 3000);
+		}
+		$exportlog = array();
+		$dir = dir($backfiledir);
+		while($entry = $dir->read()) {
+			$entry = $backfiledir."/$entry";
+			$num = 0;
+			if(is_dir($entry) && preg_match("/backup\_/i", $entry)) {
+				$bakdir = dir($entry);
+				while($bakentry = $bakdir->read()) {
+					$bakentry = "$entry/$bakentry";
+					if(is_file($bakentry) && preg_match("/(.*)\-(\d)\.sql/i", $bakentry,$match)) {
+						if($_GET['detail']) {
+							$detailarray[] = $match['1'];
+						}
+						$num++;	
+					}
+					if(is_file($bakentry) && preg_match("/\-1\.sql/i", $bakentry)) {
+						$fp = fopen($bakentry, 'rb');
+						$bakidentify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", fgets($fp, 256))));
+						fclose ($fp);
+						
+						if(preg_match("/\-1\.sql/i", $bakentry) || $bakidentify[3] == 'shell') {
+							$identify['bakentry'] = $bakentry;
+						}
+					}
+				}
+				$detailarray = array_reverse(array_unique($detailarray));
+				
+				if($num != 0) {
+					$exportlog[$entry] = array(	
+								'dateline' => date('Y-m-d H:i:s',$bakidentify[0]),
+								'version' => $bakidentify[1],
+								'type' => $bakidentify[2],
+								'method' => $bakidentify[3],
+								'volume' => $num,
+								'bakentry' => $identify['bakentry'],
+								'filename' => str_replace($backfiledir.'/','',$entry));
+				}
+			}
+		}
+	}else{
+		$bakfile = $_GET['nextfile'] ? $_GET['nextfile'] : $_GET['importbak'];
+		if(!file_exists($bakfile)) {
+			if($_GET['nextfile']) {
+				$tpl = dir(TOOLS_ROOT.'data/template');
+				while($entry = $tpl->read()) {
+					if(preg_match("/\.tpl\.php$/", $entry)) {
+						@unlink(TOOLS_ROOT.'data/template/'.$entry);
+					}
+				}
+				$tpl->close();
+				show_msg('恢复备份成功,请查看论坛,如果数据不同步,请检查数据库前缀。正在更新缓存...', 'tools.php?action=updatecache',2000);
+			}
+			show_msg('备份文件不存在。');
+		}
+		if(!is_readable($bakfile)) {
+			show_msg('备份文件不可读取。');
+		} else {
+			@$fp = fopen($bakfile, "r");
+			@flock($fp, 3);
+			$sqldump = @fread($fp, filesize($bakfile));
+			@fclose($fp);
+		}
+		@$bakidentify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($sqldump, 0, 256))));
+		if(!defined('IN_DISCUZ')) {
+			define('IN_DISCUZ', TRUE);
+		}
+		include_once(TOOLS_ROOT.'source/discuz_version.php');
+		if($bakidentify[1] != DISCUZ_VERSION) {
+			show_msg('备份文件版本错误,不能恢复。');		
+		}
+		$vol = $bakidentify[4];
+		
+		$nextfile = taddslashes(str_replace("-$vol.sql","-".($vol+1).'.sql',$bakfile));
+		$result = $t->db_runquery($sqldump);
+		if($result) {
+			show_msg('正在恢复分卷:'.$vol,"tools.php?action=$action&nextfile=$nextfile", 2000);	
+		}
+	}
+	$t->close_db();
+	show_header();
+	print<<<END
+	<div class="bm">
+	<form action="tools.php?action={$action}" method="post">
+	<table class="tdat"><tbody>
+	<tr class=\'alt h\'><th>备份项目</th><th>版本</th><th>时间</th><th>类型</th><th>文件总数</th><th>导入</th></tr>
+END;
+	foreach( $exportlog  as $value) {
+		echo '<tr><td>'.$value['filename'].'</td><td>'.$value['version'].'</td><td>'.$value['dateline'].'</td><td>'.$value['method'].'</td><td>'.$value['volume'].'</td><td><a href="tools.php?action='.$action.'&detail='.$value['filename'].'"><font color="blue">打开</font></a></td></tr>';
+	}
+	if (count($detailarray)>0) {
+		foreach($detailarray as $value) {
+			echo '<tr><td colspan="5">'.$value.'</td><td><a href="tools.php?action='.$action.'&importbak='.$value.'-1.sql"><font color="blue">导入</font></a></td></tr>';
+		}
+	}
+	echo '</tbody></table></form></div>';
+	show_footer();
+
+}elseif($action == 'updatecache') {
+//更新缓存
+	include_once(TOOLS_ROOT.'source/class/class_core.php');
+	include_once(TOOLS_ROOT.'source/function/function_core.php');
+
+	$cachelist = array();
+	$discuz = & discuz_core::instance();
+	$discuz->cachelist = $cachelist;
+	$discuz->init_cron = false;
+	$discuz->init_setting = false;
+	$discuz->init_user = false;
+	$discuz->init_session = false;
+	$discuz->init_misc = false;
+	
+	$discuz->init();
+
+	require_once libfile('function/cache');
+	updatecache();
+	include_once libfile('function/block');
+	blockclass_cache();
+	//note 清除群组缓存
+	require_once libfile('function/group');
+	$groupindex['randgroupdata'] = $randgroupdata = grouplist('lastupdate', array('ff.membernum', 'ff.icon'), 80);
+	$groupindex['topgrouplist'] = $topgrouplist = grouplist('activity', array('f.commoncredits', 'ff.membernum', 'ff.icon'), 10);
+	$groupindex['updateline'] = TIMESTAMP;
+	$groupdata = DB::fetch_first("SELECT SUM(todayposts) AS todayposts, COUNT(fid) AS groupnum FROM ".DB::table('forum_forum')." WHERE status='3' AND type='sub'");
+	$groupindex['todayposts'] = $groupdata['todayposts'];
+	$groupindex['groupnum'] = $groupdata['groupnum'];
+	save_syscache('groupindex', $groupindex);
+	DB::query("TRUNCATE ".DB::table('forum_groupfield'));
+
+	$tpl = dir(DISCUZ_ROOT.'./data/template');
+	while($entry = $tpl->read()) {
+		if(preg_match("/\.tpl\.php$/", $entry)) {
+			@unlink(DISCUZ_ROOT.'./data/template/'.$entry);
+		}
+	}
+	$tpl->close();
+	show_msg('更新数据缓存模板缓存成功!', 'tools.php?action=index', 2000);
+
+}elseif($action == 'logout') {
+//登出
+	tsetcookie('toolsauth', '', -1);
+	@header('Location: tools.php');
+
+}else{
+	
+}
+ //大的分支 结束
+
+/**********************************************************************************
+ *
+ *	tools.php 通用函数部分
+ *
+ *
+ **********************************************************************************/
+ 
+/*
+	checkpassword 函数
+	判断密码强度,大小写字母加数字,长度大于6位。
+	return flase 或者 errormsg
+ */
+function checkpassword($password){
+	$errormsg = array(	
+						0 => '您设置的密码只能使用数字和大小写字母组成,请修改!',
+						1 => 'tools.php密码少于6位,请重新修改tools.php中密码。',
+						2 => '密码中必须含有数字,请重新修改tools.php中密码。',	
+						3 => '密码中必须含有字母,请重新修改tools.php中密码。',
+						4 => '密码中必须含有大写字母,请重新修改tools.php中密码。',
+						5 => '密码中必须含有小写字母,请重新修改tools.php中密码。',
+						6 => '没有设置密码,请使用FTP或者直接编辑论坛根目录下的 tools.php 文件,并根据文件中的说明设置密码',
+						7 => '不能使用密码示范中的的 DiscuzX3 为密码',
+					);
+	if(empty($password))
+		return $errormsg[6];
+	if(!ctype_alnum($password))
+		return $errormsg[0];
+	if(strlen($password) < 6)
+		return $errormsg[1];
+	if($password === 'DiscuzX3'){
+		return $errormsg[7];
+	}
+	$pw_array = str_split($password);
+
+	$is_upper = false;
+	$is_lower = false;
+	$is_char = false;
+	$is_digit = false;
+	foreach( $pw_array as $a) {
+		if(ctype_digit($a)) {
+			$is_digit = true;
+		} else {
+			$is_char = true;
+			if(ctype_lower($a))
+				$is_lower = true;
+			if(ctype_upper($a))
+				$is_upper = true;
+		}
+	}
+
+	if(!$is_digit)
+		return $errormsg[2];
+
+	if(!$is_char)
+		return $errormsg[3];
+
+	if(!$is_upper)
+		return $errormsg[4];
+
+	if(!$is_lower)
+		return $errormsg[5];
+	return false;
+}
+
+//去掉slassh
+function tstripslashes($string) {
+	if(empty($string)) return $string;
+	if(is_array($string)) {
+		foreach($string as $key => $val) {
+			$string[$key] = tstripslashes($val);
+		}
+	} else {
+		$string = stripslashes($string);
+	}
+	return $string;
+}
+
+function thash() {
+	return substr(md5(substr(time(), 0, -4).TOOLS_ROOT), 16);
+}
+
+function taddslashes($string, $force = 1) {
+	if(is_array($string)) {
+		foreach($string as $key => $val) {
+			$string[$key] = taddslashes($val, $force);
+		}
+	} else {
+		$string = addslashes($string);
+	}
+	return $string;
+}
+
+//显示
+function show_msg($message, $url_forward='', $time = 1, $noexit = 0) {
+	show_header();
+	show_msg_body($message, $url_forward, $time, $noexit);
+	show_footer();
+	!$noexit && exit();
+}
+
+function show_msg_body($message, $url_forward='', $time = 1, $noexit = 0) {
+	if($url_forward) {
+		$url_forward = $_GET['from'] ? $url_forward.'&from='.rawurlencode($_GET['from']) : $url_forward;
+		$message = "<a href=\"$url_forward\">$message (跳转中...)</a><script>setTimeout(\"window.location.href ='$url_forward';\", $time);</script>";
+	}else{
+		$message = "<a href=\"$url_forward\">$message </a>";
+	}
+	print<<<END
+	<table>
+	<tr><td>$message</td></tr>
+	</table>
+END;
+}
+
+function login_page() {
+	show_header();
+	$formhash = thash();
+	print<<<END
+		<span>急诊箱登录</span>
+		<form action="tools.php?action=login" method="post">
+			<table class="specialtable">
+			<tr>
+				<td width="20%"><input class="textinput" type="password" name="toolpassword"></input></td>
+				<td><input class="specialsubmit" type="submit" value="登 录"></input></td>
+			</tr>
+			</table>
+			<input type="hidden" name="action" value="login">
+			<input type="hidden" name="formhash" value="{$formhash}">
+		</form>
+END;
+	show_footer();
+}
+
+function show_header() {
+	$_GET['action'] = htmlspecialchars($_GET['action']);
+	$nowarr = array($_GET['action'] => ' class="current"');
+	print<<<END
+	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+	<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
+	<title>Discuz! X3 急诊箱</title>
+	<style type="text/css">
+	* {font-size:12px; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 1.5em; word-break: break-all; }
+	body { text-align:center; margin: 0; padding: 0; background: #F5FBFF; }
+	.bodydiv { margin: 40px auto 0; width:820px; text-align:left; border: solid #86B9D6; border-width: 5px 1px 1px; background: #FFF; }
+	h1 { font-size: 18px; margin: 1px 0 0; line-height: 50px; height: 50px; background: #E8F7FC; color: #5086A5; padding-left: 10px; }
+	#menu {width: 100%; margin: 10px auto; text-align: center; }
+	#menu td { height: 30px; line-height: 30px; color: #999; border-bottom: 3px solid #EEE; }
+	.current { font-weight: bold; color: #090 !important; border-bottom-color: #F90 !important; }
+	input { border: 1px solid #B2C9D3; padding: 5px; background: #F5FCFF; }
+	#footer { font-size: 10px; line-height: 40px; background: #E8F7FC; text-align: center; height: 38px; overflow: hidden; color: #5086A5; margin-top: 20px; }
+	table {width:100%;font-size:12px;margin-top:5px;}
+		table.specialtable,table.specialtable td {border:0;}
+		td,th {padding:5px;text-align:left;}
+		caption {font-weight:bold;padding:8px 0;color:#3544FF;text-align:left;}
+		th {background:#E8F7FC;font-weight:600;}
+		td.specialtd {text-align:left;}
+	#setadmin {margin: 0px;}
+	.textarea {height: 80px;width: 400px;padding: 3px;margin: 5px;}
+	</style>
+	</head>
+	<body>
+	<div class="bodydiv">
+	<h1>Discuz! X3 急诊箱</h1><br/>
+	<div style="width:90%;margin:0 auto;">
+	<table id="menu">
+	<tr>
+	<td{$nowarr[index]}><a href="?action=index">首页</a></td>
+	<td{$nowarr[setadmin]}><a href="?action=setadmin">重置管理员帐号</a></td>
+	<td{$nowarr[closesite]}><a href="?action=closesite">开启关闭站点</a></td>
+	<td{$nowarr[closeplugin]}><a href="?action=closeplugin">一键关闭插件</a></td>
+	<td{$nowarr[repairdb]}><a href="?action=repairdb">修复数据库</a></td>
+	<td{$nowarr[restoredb]}><a href="?action=restoredb">恢复数据库</a></td>
+	<td{$nowarr[updatecache]}><a href="?action=updatecache">更新缓存</a></td>
+	<td{$nowarr[logout]}><a href="?action=logout">退出</a></td>
+	</tr>
+	</table>
+	<br>
+END;
+}
+
+//页面顶部
+function show_footer() {
+	global $tools_versions;
+	print<<<END
+	</div>
+	<div id="footer">Powered by {$tools_versions} &copy; Comsenz Inc. 2001-2013 <a href="http://www.comsenz.com" target="_blank">http://www.comsenz.com</a></div>
+	</div>
+	<br>
+	</body>
+	</html>
+END;
+}
+
+//登录判断函数
+function is_login() {
+	$error = false;
+	$errormsg = array();
+	global $tpassword;
+
+	if($errormsg = checkpassword($tpassword)) {
+		show_msg($errormsg);
+	}
+
+	if(isset($_COOKIE['toolsauth'])) {
+		if($_COOKIE['toolsauth'] === md5($tpassword.thash())) {
+			return TRUE;
+		}
+	}
+	
+	$lockfile = TOOLS_ROOT.'data/tools.lock';
+	if(@file_exists($lockfile)) {
+		$errormsg = "急救箱已经锁定,请您先登录服务器ftp,手工删除 ./data/tools.lock 文件,再次重新使用急救箱。";
+		show_msg($errormsg);
+	}
+
+	if ( $_GET['action'] === 'login') {
+		$formhash = $_GET['formhash'];
+		if($formhash !== thash()) {
+			show_msg('您的请求来路不正或者输入密码超时,请刷新页面后重新输入正确密码!');
+		}
+		$toolsmd5 = md5($tpassword.thash());
+		if(md5($_GET['toolpassword'].thash()) == $toolsmd5) {
+			tsetcookie('toolsauth', $toolsmd5, time()+'3600', '', false, '','');
+			$lockfile = TOOLS_ROOT.'data/tools.lock';
+			if(@$fp = fopen($lockfile, 'w')) {
+				fwrite($fp, ' ');
+				fclose($fp);
+			}
+			show_msg('登陆成功!', 'tools.php?action=index', 2000);
+		} else {
+			show_msg( '您输入的密码不正确,请重新输入正确密码!', 'tools.php', 2000);
+		}
+	} else {
+		return FALSE;
+	}
+}
+
+//登录成功设置cookie
+function tsetcookie($var, $value = '', $life = 0, $prefix = '', $httponly = false, $cookiepath, $cookiedomain) {
+	$var = (empty($prefix) ? '' : $prefix).$var;
+	$_COOKIE[$var] = $value;
+	
+	if($value == '' || $life < 0) {
+		$value = '';
+		$life = -1;
+	}
+	$path = $httponly && PHP_VERSION < '5.2.0' ? $cookiepath.'; HttpOnly' : $cookiepath;
+	$secure = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
+
+	if(PHP_VERSION < '5.2.0') {
+		$r = setcookie($var, $value, $life);
+	} else {
+		$r = setcookie($var, $value, $life);
+	}
+}
+
+/* 
+	T 类 
+	tools.php 主要类
+*/
+class T{
+	var $dbconfig = null;
+	var $ucdbconfig = null;
+	var $db = null;
+	var $ucdb = null;
+	// 是否已经初始化
+	var $initated = false;
+
+	public function init() {
+		if(!$this->initated) {
+			$this->_init_config();
+			$this->_init_db();
+		}
+		$this->initated = true;
+	}
+
+	public function db_runquery($sql) {
+		$tablepre = $this->dbconfig['tablepre'];
+		$dbcharset = $this->dbconfig['charset'];
+
+		if(!isset($sql) || empty($sql)) return;
+
+		$sql = str_replace("\r", "\n", str_replace(array(' {tablepre}', ' cdb_', ' `cdb_', ' pre_', ' `pre_'), array(' '.$tablepre, ' '.$tablepre, ' `'.$tablepre, ' '.$tablepre, ' `'.$tablepre), $sql));
+
+		$ret = array();
+		$num = 0;
+		foreach(explode(";\n", trim($sql)) as $query) {
+			$ret[$num] = '';
+			$queries = explode("\n", trim($query));
+			foreach($queries as $query) {
+				$ret[$num] .= (isset($query[0]) && $query[0] == '#') || (isset($query[1]) && isset($query[1]) && $query[0].$query[1] == '--') ? '' : $query;
+			}
+			$num++;
+		}
+		unset($sql);
+		$this->connect_db();
+		foreach($ret as $query) {
+			$query = trim($query);
+			if($query) {
+				if(substr($query, 0, 12) == 'CREATE TABLE') {
+					$name = preg_replace("/CREATE TABLE ([a-z0-9_]+) .*/is", "\\1", $query);
+					mysql_query($this->db_createtable($query, $dbcharset), $this->db);
+				} else {
+					mysql_query($query, $this->db);
+				}
+			}
+		}
+		return 1;
+	}
+
+	public function db_createtable($sql, $dbcharset) {
+		$type = strtoupper(preg_replace("/^\s*CREATE TABLE\s+.+\s+\(.+?\).*(ENGINE|TYPE)\s*=\s*([a-z]+?).*$/isU", "\\2", $sql));
+		$type = in_array($type, array('MYISAM', 'HEAP')) ? $type : 'MYISAM';
+		return preg_replace("/^\s*(CREATE TABLE\s+.+\s+\(.+?\)).*$/isU", "\\1", $sql).(mysql_get_server_info() > '4.1' ? " ENGINE=$type DEFAULT CHARSET=$dbcharset" : " TYPE=$type");
+	}
+	
+	public function connect_db($type = 'db') {
+		if($type == 'db') {
+			$dbhost = $this->dbconfig['host'];
+			$dbuser = $this->dbconfig['user'];
+			$dbpw = $this->dbconfig['pw'];
+			$dbname = $this->dbconfig['name'];
+			$dbcharset = $this->dbconfig['charset'];
+		} else {
+			$dbhost = $this->ucdbconfig['host'];
+			$dbuser = $this->ucdbconfig['user'];
+			$dbpw = $this->ucdbconfig['pw'];
+			$dbname = $this->ucdbconfig['name'];
+			$dbcharset = $this->ucdbconfig['charset'];
+		}	
+		if(!$this->db = mysql_connect($dbhost, $dbuser, $dbpw, 1))
+			show_msg('Discuz! X数据库连接出错,请检查config_global.php中数据库相关信息是否正确,与数据库服务器网络连接是否正常');
+		$dbversion = mysql_get_server_info($this->db);
+		if($dbversion > '4.1') {
+			if($dbcharset) {
+				mysql_query("SET character_set_connection=".$dbcharset.", character_set_results=".$dbcharset.", character_set_client=binary", $this->db);
+			}
+			if($dbversion > '5.0.1') {
+				mysql_query("SET sql_mode=''", $this->db);
+			}
+		}
+		@mysql_select_db($dbname, $this->db);
+	}
+
+	public function close_db() {
+		mysql_close($this->db);
+	}
+
+	private function _init_config() {
+		$error = false;
+		$_config = array();
+		
+		global $tpassword;
+		if($errormsg = checkpassword($tpassword)) {
+			$error = true;
+		}
+
+		@include TOOLS_ROOT.'config/config_global.php';
+		if(empty($_config)) {
+			$error = true;
+			$errormsg = '没有找到config文件,请检查 /config/config_global.php 是否存在或有读权限!';
+		}
+		
+		$uc_config_file = TOOLS_ROOT.'config/config_ucenter.php';
+		if(!@file_exists($uc_config_file)) {
+			$error = true;
+			$errormsg = '没有找到uc config文件,请检查 /config/config_ucenter.php 是否存在或有读权限!';
+		}
+		@include $uc_config_file;
+		
+		if($error) {
+			show_msg($errormsg);
+		}
+		
+		$this->config = & $_config;
+		$this->config['dbcharset'] = $_config['db']['1']['dbcharset'];
+		$this->config['charset'] = $_config['output']['charset'];
+	}
+
+	private function _init_db() {
+		$this->dbconfig['host'] = $this->config['db']['1']['dbhost'];
+		$this->dbconfig['user'] = $this->config['db']['1']['dbuser'];
+		$this->dbconfig['pw'] = $this->config['db']['1']['dbpw'];
+		$this->dbconfig['name'] = $this->config['db']['1']['dbname'];
+		$this->dbconfig['charset'] = $this->config['db']['1']['dbcharset'];
+		$this->dbconfig['tablepre'] = $this->config['db']['1']['tablepre'];
+
+		$this->ucdbconfig['host'] = UC_DBHOST;
+		$this->ucdbconfig['user'] = UC_DBUSER;
+		$this->ucdbconfig['pw'] = UC_DBPW;
+		$this->ucdbconfig['name'] = UC_DBNAME;
+		$this->ucdbconfig['charset'] = UC_DBCHARSET;
+		$this->ucdbconfig['tablepre'] = UC_DBTABLEPRE;
+		
+		$this->connect_db();
+		$sql = "SHOW FULL PROCESSLIST";
+		$query = mysql_query($sql, $this->db);
+		$waiting = false;
+		$waiting_msg = '';
+		while($l = mysql_fetch_array($query, MYSQL_ASSOC)) {
+			if($l['State'] == 'Checking table') {
+				$this->close_db();
+				$waiting = true;
+				$waiting_msg = '正在检查表,请稍后...';
+			} elseif($l['State'] == 'Repair by sorting') {
+				$this->close_db();
+				$waiting = true;
+				$waiting_msg = '正在修复表,请稍后...';
+			}
+		}
+		if($waiting) {
+			show_msg($waiting_msg, 'tools.php?action=repairdb', 3000);
+		}
+	}
+}
+
+//T class 结束
+/**
+* End of the tools.php
+*/