From 2ee8cf4c037ccbe8f5aeaafa00479af9e4695d92 Mon Sep 17 00:00:00 2001
From: joyqi
Date: Wed, 9 Oct 2013 22:14:35 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AE=89=E8=A3=85=E6=96=87?=
=?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
admin/css/style.css | 5 +-
install.php | 238 ++++++++++++++++++++++++++++++++++++--------
2 files changed, 202 insertions(+), 41 deletions(-)
diff --git a/admin/css/style.css b/admin/css/style.css
index 867bf6bc..344c25ea 100644
--- a/admin/css/style.css
+++ b/admin/css/style.css
@@ -242,6 +242,7 @@ select {
button {
height: 28px;
+ margin: 0;
vertical-align: middle;
zoom: 1;
display: inline-block;
@@ -344,7 +345,7 @@ button.primary:active, button.primary.active {
list-style: none;
position: absolute;
z-index: 2;
- left: 2px;
+ left: 0;
margin: 0;
padding: 0;
background: #f9f9f7;
@@ -358,7 +359,7 @@ button.primary:active, button.primary.active {
}
.dropdown-menu li p {
- padding: 5px 13px;
+ padding: 5px 15px;
}
.dropdown-menu li a {
diff --git a/install.php b/install.php
index 117b7d15..fbfa0da5 100644
--- a/install.php
+++ b/install.php
@@ -54,7 +54,7 @@ Typecho_Common::init();
ob_start();
//判断是否已经安装
-if (!isset($_GET['finish']) && file_exists(__TYPECHO_ROOT_DIR__ . '/config.inc.php')) {
+if (!isset($_GET['finish']) && file_exists(__TYPECHO_ROOT_DIR__ . '/config.inc.php') && !file_exists(sys_get_temp_dir() . '/install-typecho')) {
exit;
}
@@ -163,6 +163,7 @@ list($prefixVersion, $suffixVersion) = explode('/', $currentVersion);
- class="current">
- class="current">
+ - class="current">
- class="current">
@@ -217,7 +218,173 @@ list($prefixVersion, $suffixVersion) = explode('/', $currentVersion);
-
+
+
+
+
+
+ addServer($config, Typecho_Db::READ | Typecho_Db::WRITE);
+
+ /** 初始化数据库结构 */
+ $scripts = file_get_contents ('./install/' . $type . '.sql');
+ $scripts = str_replace('typecho_', $config['prefix'], $scripts);
+
+ if (isset($config['charset'])) {
+ $scripts = str_replace('%charset%', $config['charset'], $scripts);
+ }
+
+ $scripts = explode(';', $scripts);
+ foreach ($scripts as $script) {
+ $script = trim($script);
+ if ($script) {
+ $installDb->query($script, Typecho_Db::WRITE);
+ }
+ }
+
+ /** 全局变量 */
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'theme', 'user' => 0, 'value' => 'default')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'timezone', 'user' => 0, 'value' => _t('28800'))));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'charset', 'user' => 0, 'value' => 'UTF-8')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'contentType', 'user' => 0, 'value' => 'text/html')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'gzip', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'generator', 'user' => 0, 'value' => $options->generator)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'title', 'user' => 0, 'value' => 'Hello World')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'description', 'user' => 0, 'value' => 'Just So So ...')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'keywords', 'user' => 0, 'value' => 'typecho,php,blog')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'rewrite', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'frontPage', 'user' => 0, 'value' => 'recent')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireMail', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsWhitelist', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireURL', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsRequireModeration', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'plugins', 'user' => 0, 'value' => 'a:0:{}')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentDateFormat', 'user' => 0, 'value' => 'F jS, Y \a\t h:i a')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'siteUrl', 'user' => 0, 'value' => $config['siteUrl'])));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultCategory', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'allowRegister', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowComment', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowPing', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'defaultAllowFeed', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'pageSize', 'user' => 0, 'value' => 5)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'postsListSize', 'user' => 0, 'value' => 10)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsListSize', 'user' => 0, 'value' => 10)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsHTMLTagAllowed', 'user' => 0, 'value' => NULL)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'postDateFormat', 'user' => 0, 'value' => 'Y-m-d')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'feedFullText', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'editorSize', 'user' => 0, 'value' => 350)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'autoSave', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsMaxNestingLevels', 'user' => 0, 'value' => 5)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostTimeout', 'user' => 0, 'value' => 24 * 3600 * 30)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsUrlNofollow', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsShowUrl', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageBreak', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsThreaded', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageSize', 'user' => 0, 'value' => 20)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPageDisplay', 'user' => 0, 'value' => 'last')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsOrder', 'user' => 0, 'value' => 'ASC')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsCheckReferer', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAutoClose', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostIntervalEnable', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsPostInterval', 'user' => 0, 'value' => 60)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsShowCommentOnly', 'user' => 0, 'value' => 0)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAvatar', 'user' => 0, 'value' => 1)));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'commentsAvatarRating', 'user' => 0, 'value' => 'G')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'routingTable', 'user' => 0, 'value' => 'a:23:{s:5:"index";a:3:{s:3:"url";s:1:"/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:2:"do";a:3:{s:3:"url";s:22:"/action/[action:alpha]";s:6:"widget";s:9:"Widget_Do";s:6:"action";s:6:"action";}s:4:"post";a:3:{s:3:"url";s:24:"/archives/[cid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:10:"attachment";a:3:{s:3:"url";s:26:"/attachment/[cid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:8:"category";a:3:{s:3:"url";s:17:"/category/[slug]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:3:"tag";a:3:{s:3:"url";s:12:"/tag/[slug]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:6:"author";a:3:{s:3:"url";s:22:"/author/[uid:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:6:"search";a:3:{s:3:"url";s:19:"/search/[keywords]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:10:"index_page";a:3:{s:3:"url";s:21:"/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:13:"category_page";a:3:{s:3:"url";s:32:"/category/[slug]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:8:"tag_page";a:3:{s:3:"url";s:27:"/tag/[slug]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"author_page";a:3:{s:3:"url";s:37:"/author/[uid:digital]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"search_page";a:3:{s:3:"url";s:34:"/search/[keywords]/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:12:"archive_year";a:3:{s:3:"url";s:18:"/[year:digital:4]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:13:"archive_month";a:3:{s:3:"url";s:36:"/[year:digital:4]/[month:digital:2]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:11:"archive_day";a:3:{s:3:"url";s:52:"/[year:digital:4]/[month:digital:2]/[day:digital:2]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:17:"archive_year_page";a:3:{s:3:"url";s:38:"/[year:digital:4]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:18:"archive_month_page";a:3:{s:3:"url";s:56:"/[year:digital:4]/[month:digital:2]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:16:"archive_day_page";a:3:{s:3:"url";s:72:"/[year:digital:4]/[month:digital:2]/[day:digital:2]/page/[page:digital]/";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:12:"comment_page";a:3:{s:3:"url";s:53:"[permalink:string]/comment-page-[commentPage:digital]";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}s:4:"feed";a:3:{s:3:"url";s:20:"/feed[feed:string:0]";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:4:"feed";}s:8:"feedback";a:3:{s:3:"url";s:31:"[permalink:string]/[type:alpha]";s:6:"widget";s:15:"Widget_Feedback";s:6:"action";s:6:"action";}s:4:"page";a:3:{s:3:"url";s:12:"/[slug].html";s:6:"widget";s:14:"Widget_Archive";s:6:"action";s:6:"render";}}')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'actionTable', 'user' => 0, 'value' => 'a:0:{}')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'panelTable', 'user' => 0, 'value' => 'a:0:{}')));
+ $installDb->query($installDb->insert('table.options')->rows(array('name' => 'attachmentTypes', 'user' => 0, 'value' => '@image@')));
+
+ /** 初始分类 */
+ $installDb->query($installDb->insert('table.metas')->rows(array('name' => _t('默认分类'), 'slug' => 'default', 'type' => 'category', 'description' => _t('只是一个默认分类'),
+ 'count' => 1, 'order' => 1)));
+
+ /** 初始关系 */
+ $installDb->query($installDb->insert('table.relationships')->rows(array('cid' => 1, 'mid' => 1)));
+
+ /** 初始内容 */
+ $installDb->query($installDb->insert('table.contents')->rows(array('title' => _t('欢迎使用Typecho'), 'slug' => 'start', 'created' => Typecho_Date::gmtTime(), 'modified' => Typecho_Date::gmtTime(),
+ 'text' => _t('如果您看到这篇文章,表示您的blog已经安装成功.'), 'authorId' => 1, 'type' => 'post', 'status' => 'publish', 'commentsNum' => 1, 'allowComment' => 1,
+ 'allowPing' => 1, 'allowFeed' => 1, 'parent' => 0)));
+
+ $installDb->query($installDb->insert('table.contents')->rows(array('title' => _t('关于'), 'slug' => 'start-page', 'created' => Typecho_Date::gmtTime(), 'modified' => Typecho_Date::gmtTime(),
+ 'text' => _t('本页面由Typecho创建, 这只是个测试页面.'), 'authorId' => 1, 'order' => 0, 'type' => 'page', 'status' => 'publish', 'commentsNum' => 0, 'allowComment' => 1,
+ 'allowPing' => 1, 'allowFeed' => 1, 'parent' => 0)));
+
+ /** 初始评论 */
+ $installDb->query($installDb->insert('table.comments')->rows(array('cid' => 1, 'created' => Typecho_Date::gmtTime(), 'author' => 'Typecho', 'ownerId' => 1, 'url' => 'http://typecho.org',
+ 'ip' => '127.0.0.1', 'agent' => $options->generator, 'text' => '欢迎加入Typecho大家族', 'type' => 'comment', 'status' => 'approved', 'parent' => 0)));
+
+ /** 初始用户 */
+ $password = substr(uniqid(), 7);
+
+ $installDb->query($installDb->insert('table.users')->rows(array('name' => $config['userName'], 'password' => Typecho_Common::hash($password), 'mail' => $config['userMail'],
+ 'url' => 'http://www.typecho.org', 'screenName' => $config['userName'], 'group' => 'administrator', 'created' => Typecho_Date::gmtTime())));
+
+ unlink(sys_get_temp_dir() . '/install-typecho');
+ Typecho_Cookie::delete('__typecho_config');
+ header('Location: ./install.php?finish&user=' . urlencode($config['userName'])
+ . '&password=' . $password);
+ } catch (Typecho_Db_Exception $e) {
+ $success = false;
+ $code = $e->getCode();
+?>
+
+
+
+
+
' . _t('没有检测到您手动创建的配置文件, 请检查后再次创建') . '
';
- $success = false;
- }
+ if (_r('created') && !file_exists('./config.inc.php')) {
+ echo '' . _t('没有检测到您手动创建的配置文件, 请检查后再次创建') . '
';
+ $success = false;
} else {
if (NULL == _r('userUrl')) {
$success = false;
@@ -258,20 +420,17 @@ list($prefixVersion, $suffixVersion) = explode('/', $currentVersion);
}
}
+ $_dbConfig = _rFrom('dbHost', 'dbUser', 'dbPassword', 'dbCharset', 'dbPort', 'dbDatabase', 'dbFile', 'dbDsn');
- if ($success) {
- if (!isset($installDb)) {
- $installDb = new Typecho_Db ($adapter, _r('dbPrefix'));
- $_dbConfig = _rFrom('dbHost', 'dbUser', 'dbPassword', 'dbCharset', 'dbPort', 'dbDatabase', 'dbFile', 'dbDsn');
+ $_dbConfig = array_filter($_dbConfig);
+ $dbConfig = array();
+ foreach ($_dbConfig as $key => $val) {
+ $dbConfig[strtolower (substr($key, 2))] = $val;
+ }
- $_dbConfig = array_filter($_dbConfig);
- $dbConfig = array();
- foreach ($_dbConfig as $key => $val) {
- $dbConfig[strtolower (substr($key, 2))] = $val;
- }
-
- $installDb->addServer($dbConfig, Typecho_Db::READ | Typecho_Db::WRITE);
- }
+ if ($success && !_r('created')) {
+ $installDb = new Typecho_Db ($adapter, _r('dbPrefix'));
+ $installDb->addServer($dbConfig, Typecho_Db::READ | Typecho_Db::WRITE);
/** 检测数据库配置 */
@@ -286,12 +445,19 @@ list($prefixVersion, $suffixVersion) = explode('/', $currentVersion);
echo ''
. _t('安装程序捕捉到以下错误: "%s". 程序被终止, 请检查您的配置信息.',$e->getMessage()) . '
';
}
-
}
if($success) {
+ Typecho_Cookie::set('__typecho_config', base64_encode(serialize(array_merge(array(
+ 'prefix' => _r('dbPrefix'),
+ 'userName' => _r('userName'),
+ 'userMail' => _r('userMail'),
+ 'adapter' => $adapter,
+ 'siteUrl' => _r('userUrl')
+ ), $dbConfig))));
+
if (_r('created')) {
- header('Location: ./install.php?finish');
+ header('Location: ./install.php?start');
exit;
}
@@ -304,13 +470,20 @@ list($prefixVersion, $suffixVersion) = explode('/', $currentVersion);
Typecho_Db::set(\$db);
";
$contents = implode('', $lines);
+ file_put_contents('./config.inc.php', $contents);
- if (true !== @file_put_contents('./config.inc.php', $contents)) {
+ // 创建一个用于标识的临时文件
+ file_put_contents(sys_get_temp_dir() . '/install-typecho', '');
+
+ if (!file_exists('./config.inc.php')) {
?>
- ' . _t('安装目录不可写, 请设置你的目录权限为可写。
或者在安装过程中手动上传config.inc.php文件.') . '';
- } else {
- fclose($handle);
- unlink('./config.inc.php');
- }
- ?>
@@ -397,11 +561,7 @@ Typecho_Db::set(\$db);
- ';
- }
- ?>
+