From 7ab8b58f415d6bac1911d135e8b2ce68b41aa3fa Mon Sep 17 00:00:00 2001 From: inureyes Date: Mon, 12 Oct 2009 16:51:42 +0000 Subject: [PATCH] =?UTF-8?q?=20refs=20#514=20=20=20*=20branches/1.8=20?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=99=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- framework/Dispatcher.php | 4 +- .../legacy/Needlworks.Cache.PageCache.php | 53 +- .../Textcube.Control.Session.Memcached.php | 29 +- framework/legacy/Textcube.Data.Feed.php | 2 +- .../Textcube.Data.SubscriptionStatistics.php | 2 +- framework/model/URIHandler.php | 17 +- interface/atom/category/index.php | 2 +- interface/atom/comment/index.php | 4 +- interface/atom/index.php | 6 +- interface/atom/line/index.php | 1 + interface/atom/notifycomment/index.php | 2 + interface/atom/response/index.php | 2 + interface/atom/search/index.php | 38 + interface/atom/tag/index.php | 41 + interface/atom/trackback/index.php | 4 +- interface/blog/author.php | 2 +- interface/blog/category.php | 4 +- interface/blog/comment/modify/index.php | 2 +- interface/blog/search.php | 5 +- interface/blog/tag.php | 6 +- interface/common/blog/entries.php | 4 +- interface/common/blog/list.php | 2 + interface/common/control/footer.php | 150 ++ interface/common/control/header.php | 614 ++++++++ interface/common/owner/header.php | 9 +- interface/control/blog/detail/index.php | 6 +- interface/control/blog/index.php | 4 +- interface/control/server/index.php | 4 +- interface/control/system/index.php | 4 +- interface/control/user/detail/index.php | 4 +- interface/control/user/index.php | 4 +- interface/i/entry/index.php | 2 +- interface/index.php | 2 +- interface/owner/center/about/index.php | 1 - interface/owner/center/dashboard/index.php | 14 +- .../owner/communication/comment/index.php | 2 +- .../owner/communication/notify/index.php | 4 +- .../owner/communication/trackback/index.php | 2 +- .../communication/trash/comment/index.php | 2 +- .../communication/trash/trackback/index.php | 2 +- interface/owner/entry/index.php | 5 +- interface/owner/plugin/index.php | 8 +- interface/owner/plugin/saveScope/index.php | 18 +- interface/owner/reader/index.php | 12 +- interface/owner/setting/blog/index.php | 5 +- interface/owner/setting/blog/title/index.php | 11 +- .../owner/setting/entry/editor/index.php | 6 +- interface/owner/setting/entry/index.php | 2 +- interface/owner/skin/adminSkin/set/index.php | 2 +- interface/owner/skin/coverpage/index.php | 4 +- interface/owner/skin/index.php | 2 +- interface/owner/skin/saveScope/index.php | 6 +- interface/owner/skin/setting/index.php | 2 +- interface/rss/category/index.php | 2 +- interface/rss/comment/index.php | 1 + interface/rss/index.php | 2 + interface/rss/line/index.php | 1 + interface/rss/notifycomment/index.php | 2 + interface/rss/response/index.php | 2 + interface/rss/search/index.php | 37 + interface/rss/trackback/index.php | 1 + library/blog.skin.php | 20 +- library/config.default.php | 4 +- library/function/watermark.php | 6 +- library/model/blog.api.php | 6 +- library/model/blog.blogSetting.php | 21 +- library/model/blog.coverpage.php | 2 +- library/model/blog.entry.php | 12 +- library/model/blog.feed.php | 78 +- library/model/blog.response.remote.php | 2 +- library/model/blog.service.php | 2 +- library/model/blog.sidebar.php | 6 +- library/model/blog.skin.php | 61 +- library/model/blog.tag.php | 4 +- library/model/common.module.php | 4 +- library/model/common.plugin.php | 2 +- library/model/common.setting.php | 5 +- library/view/replyEditorView.php | 2 +- library/view/view.php | 4 +- plugins/CL_Moblog/index.php | 52 +- plugins/CT_RecentPS_Default/index.php | 11 +- plugins/FM_Markdown/ttml.php | 2 +- plugins/FM_Modern/index.php | 2 +- plugins/FM_TTML/ttml.php | 2 +- plugins/FM_Textile/ttml.php | 2 +- resources/control/basic.css | 1330 +++++++++++++++++ resources/control/basic.ie.css | 100 ++ resources/control/basic.ie7.css | 58 + resources/control/control.css | 527 +++++++ resources/control/image/bg_body_bottom.png | Bin 0 -> 2919 bytes resources/control/image/bg_body_top.png | Bin 0 -> 2879 bytes resources/control/image/bg_dt.png | Bin 0 -> 2930 bytes resources/control/image/bg_menu.png | Bin 0 -> 143 bytes resources/control/image/bg_menu_divider.gif | Bin 0 -> 73 bytes resources/control/image/bg_menu_left.png | Bin 0 -> 3625 bytes resources/control/image/bg_menu_over.png | Bin 0 -> 2899 bytes resources/control/image/bg_menu_right.png | Bin 0 -> 244 bytes resources/control/image/bg_menu_selected.png | Bin 0 -> 3100 bytes resources/control/image/bg_title_left.png | Bin 0 -> 1428 bytes resources/control/image/bg_title_right.png | Bin 0 -> 641 bytes .../control/image/img_header_textcube.png | Bin 0 -> 18740 bytes resources/control/image/img_helper.gif | Bin 0 -> 202 bytes resources/control/image/img_logout.gif | Bin 0 -> 236 bytes resources/control/image/img_to_my_blog.gif | Bin 0 -> 207 bytes resources/control/plugin-config.css | 284 ++++ resources/control/plugin.css | 505 +++++++ resources/control/plugin.ie.css | 35 + resources/control/plugin.ie7.css | 10 + resources/locale/messages.php | 2 +- setup.php | 16 +- skin/admin/canon/basic.css | 15 +- skin/admin/canon/center.css | 19 +- skin/admin/canon/image/img_control.gif | Bin 0 -> 323 bytes skin/admin/canon/image/img_control_hover.gif | Bin 0 -> 434 bytes skin/admin/whitedream/basic.css | 13 +- .../whitedream/image/img_to_control_panel.png | Bin 0 -> 807 bytes skin/blog/coolant/skin.html | 3 +- 117 files changed, 4161 insertions(+), 261 deletions(-) create mode 100644 interface/atom/search/index.php create mode 100644 interface/atom/tag/index.php create mode 100644 interface/common/control/footer.php create mode 100644 interface/common/control/header.php create mode 100644 interface/rss/search/index.php create mode 100644 resources/control/basic.css create mode 100644 resources/control/basic.ie.css create mode 100644 resources/control/basic.ie7.css create mode 100644 resources/control/control.css create mode 100644 resources/control/image/bg_body_bottom.png create mode 100644 resources/control/image/bg_body_top.png create mode 100644 resources/control/image/bg_dt.png create mode 100644 resources/control/image/bg_menu.png create mode 100644 resources/control/image/bg_menu_divider.gif create mode 100644 resources/control/image/bg_menu_left.png create mode 100644 resources/control/image/bg_menu_over.png create mode 100644 resources/control/image/bg_menu_right.png create mode 100644 resources/control/image/bg_menu_selected.png create mode 100644 resources/control/image/bg_title_left.png create mode 100644 resources/control/image/bg_title_right.png create mode 100644 resources/control/image/img_header_textcube.png create mode 100644 resources/control/image/img_helper.gif create mode 100644 resources/control/image/img_logout.gif create mode 100644 resources/control/image/img_to_my_blog.gif create mode 100644 resources/control/plugin-config.css create mode 100644 resources/control/plugin.css create mode 100644 resources/control/plugin.ie.css create mode 100644 resources/control/plugin.ie7.css create mode 100644 skin/admin/canon/image/img_control.gif create mode 100644 skin/admin/canon/image/img_control_hover.gif create mode 100644 skin/admin/whitedream/image/img_to_control_panel.png diff --git a/framework/Dispatcher.php b/framework/Dispatcher.php index 6e52055c0..a261f1217 100644 --- a/framework/Dispatcher.php +++ b/framework/Dispatcher.php @@ -148,8 +148,8 @@ private function URIinterpreter() { $interfacePath = 'interface/blog/'.$pathPart.'.php'; break; case 'rss': case 'atom': - if($uri['fragment'][1] == 'category') { - $pathPart = $uri['fragment'][0].'/category'; + if(in_array($uri['fragment'][1],array('category','tag','search'))) { + $pathPart = $uri['fragment'][0].'/'.$uri['fragment'][1]; $interfacePath = 'interface/'.$pathPart.'/index.php'; } break; diff --git a/framework/legacy/Needlworks.Cache.PageCache.php b/framework/legacy/Needlworks.Cache.PageCache.php index 3ca84129b..e87e29a83 100644 --- a/framework/legacy/Needlworks.Cache.PageCache.php +++ b/framework/legacy/Needlworks.Cache.PageCache.php @@ -61,6 +61,7 @@ public function load () { global $service; if(isset($service['pagecache']) && $service['pagecache'] == false) return false; $this->initialize(); + $this->contents = $this->dbContents = null; if(!$this->getFileName()) return false; if(empty($this->_fileCacheOnly)) $this->getdbContents(); if($this->getFileContents()) { @@ -355,17 +356,24 @@ function flushAll($blogid = null) { $query->delete(); return true; } - + function flushSkin($blogid = null) { + global $gCacheStorage; + if(empty($blogid)) $blogid = getBlogId(); + $cache = pageCache::getInstance(); + $cache->reset('skinCache'); + $cache->purge(); + $gCacheStorage->purge(); + } function flushCategory($categoryId = null) { global $database; if(empty($categoryId)) $categoryId = ''; - else $categoryId = $categoryId.'\\_'; + else $categoryId = $categoryId.'-'; $categoryLists = POD::queryColumn("SELECT name FROM {$database['prefix']}PageCacheLog WHERE blogid = ".getBlogId()." - AND (name like 'categoryList\\_".$categoryId."%' + AND (name like 'categoryList-".$categoryId."%' OR name like 'categoryRSS-".$categoryId."%' OR name like 'categoryATOM-".$categoryId."%')"); CacheControl::purgeItems($categoryLists); @@ -376,28 +384,29 @@ function flushCategory($categoryId = null) { function flushAuthor($authorId = null) { global $database; if(empty($authorId)) $authorId = ''; - else $authorId = POD::escapeString($authorId).'\\_'; + else $authorId = POD::escapeString($authorId).'-'; $pageLists = POD::queryColumn("SELECT name FROM {$database['prefix']}PageCacheLog WHERE blogid = ".getBlogId()." - AND (name like 'authorList\\_".$authorId."%')"); + AND (name like 'authorList-".$authorId."%')"); CacheControl::purgeItems($pageLists); return true; } function flushTag($tagId = null) { - global $database; - if(empty($tagId)) $tagId = ''; - else $tagId = $tagId.'\\_'; + else $tagId = $tagId.'-'; $cache = pageCache::getInstance(); $tagLists = POD::queryColumn("SELECT name FROM {$database['prefix']}PageCacheLog WHERE blogid = ".getBlogId()." - AND (name like 'tagList\\_".$tagId."%' - OR name like 'keyword\\_".$tagId."%')"); + AND (name like 'tagList-".$tagId."%' + OR name like 'keyword-".$tagId."%' + OR name like 'tagATOM-".$tagId."%' + OR name like 'tagRSS-".$tagId."%')"); CacheControl::purgeItems($tagLists); + CacheControl::flushRSS(); $cache->reset(); $cache->name = 'tagPage'; $cache->purge(); @@ -408,24 +417,38 @@ function flushKeyword($tagId = null) { global $database; if(empty($tagId)) $tagId = ''; - else $tagId = $tagId.'\\_'; + else $tagId = $tagId.'-'; $keywordEntries = POD::queryColumn("SELECT name FROM {$database['prefix']}PageCacheLog WHERE blogid = ".getBlogId()." - AND name like 'keyword\\_".$tagId."%'"); + AND name like 'keyword-".$tagId."%'"); CacheControl::purgeItems($keywordEntries); return true; } + function flushSearchKeywordRSS($search = null) { + global $database; + + if(empty($search)) $search = ''; + else $search = escapeSearchString($search); + $searchEntries = POD::queryColumn("SELECT name + FROM {$database['prefix']}PageCacheLog + WHERE blogid = ".getBlogId()." + AND (name like 'searchATOM-".$search."%' + OR name like 'searchRSS-".$search."%"); + CacheControl::purgeItems($searchEntries); + return true; + } + function flushEntry($entryId = null) { global $database; if(empty($entryId)) $entryId = ''; - else $entryId = $entryId.'\\_'; + else $entryId = $entryId.'-'; $Entries = POD::queryColumn("SELECT name FROM {$database['prefix']}PageCacheLog WHERE blogid = ".getBlogId()." - AND (name like 'entry\\_".$entryId."%' OR name = 'commentRSS_".$entryId."')"); + AND (name like 'entry-".$entryId."%' OR name = 'commentRSS-".$entryId."')"); CacheControl::purgeItems($Entries); if(!empty($entryId)) { $entry = POD::queryCell("SELECT userid, category FROM {$database['prefix']}Entries @@ -448,11 +471,11 @@ function flushRSS() { CacheControl::flushCommentRSS(); CacheControl::flushTrackbackRSS(); CacheControl::flushResponseRSS(); + CacheControl::flushSearchKeywordRSS(); } function flushCommentRSS($entryId = null) { global $database; - if(empty($entryId)) $entryId = ''; $cache = pageCache::getInstance(); $cache->name = 'commentRSS-'.$entryId; diff --git a/framework/legacy/Textcube.Control.Session.Memcached.php b/framework/legacy/Textcube.Control.Session.Memcached.php index 1540f5f86..fdaeb4871 100644 --- a/framework/legacy/Textcube.Control.Session.Memcached.php +++ b/framework/legacy/Textcube.Control.Session.Memcached.php @@ -7,14 +7,11 @@ final class Session { private static $sessionName = null; - private static $mc = null; - private static $domain = null; + private static $mc = null; private static function initialize() { global $memcache; /** After PHP 5.0.5, session write performs after object destruction. */ self::$mc = $memcache; /** To Avoid this, just copy memcache handle into Session object. */ - $config = Model_Config::getInstance(); - self::$domain = $config->service['domain']; } public static function open($savePath, $sessionName) { @@ -41,18 +38,18 @@ public static function getName() { public static function read($id) { if(is_null(self::$mc)) self::initialize(); - return self::$mc->get("{self::$domain}/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}"); + return self::$mc->get("sessions/{$id}/{$_SERVER['REMOTE_ADDR']}"); } public static function write($id, $data) { global $service; - return self::$mc->set("{self::$domain}/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",$data,$service['timeout']); + return self::$mc->set("sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",$data,$service['timeout']); } public static function destroy($id, $setCookie = false) { - self::$mc->delete("{self::$domain}/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}"); - self::$mc->delete("{self::$domain}/anonymousSession/{$_SERVER['REMOTE_ADDR']}"); - return self::$mc->delete("{self::$domain}/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); + self::$mc->delete("sessions/{$id}/{$_SERVER['REMOTE_ADDR']}"); + self::$mc->delete("anonymousSession/{$_SERVER['REMOTE_ADDR']}"); + return self::$mc->delete("authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); } public static function gc($maxLifeTime = false) { @@ -60,7 +57,7 @@ public static function gc($maxLifeTime = false) { } private static function getAnonymousSession() { - $anonymousSessionId = self::$mc->get("{self::$domain}/anonymousSession/{$_SERVER['REMOTE_ADDR']}"); + $anonymousSessionId = self::$mc->get("anonymousSession/{$_SERVER['REMOTE_ADDR']}"); if(!empty($anonymousSessionId)) return $anonymousSessionId; else return false; } @@ -71,9 +68,9 @@ private static function newAnonymousSession() { if (($id = self::getAnonymousSession()) !== false) return $id; $id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)); - $result = self::$mc->set("{self::$domain}/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",true,$config->service['timeout']); + $result = self::$mc->set("sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",true,$config->service['timeout']); if ($result > 0) { - $result = self::$mc->set("{self::$domain}/anonymousSession/{$_SERVER['REMOTE_ADDR']}",$id,$config->service['timeout']); + $result = self::$mc->set("anonymousSession/{$_SERVER['REMOTE_ADDR']}",$id,$config->service['timeout']); return $id; } } @@ -98,14 +95,14 @@ public static function setSessionAnonymous($currentId) { public static function isAuthorized($id) { if(is_null(self::$mc)) self::initialize(); /* OpenID and Admin sessions are treated as authorized ones*/ - $userid = self::$mc->get("{self::$domain}/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); + $userid = self::$mc->get("authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); if(!empty($userid)) return true; else return false; } public static function isGuestOpenIDSession($id) { if(is_null(self::$mc)) self::initialize(); - $userid = self::$mc->get("{self::$domain}/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); + $userid = self::$mc->get("authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}"); if(!empty($userid) && $userid < 0) return true; else return false; } @@ -137,7 +134,7 @@ public static function authorize($blogid, $userid) { $_SESSION['userid'] = $userid; $id = session_id(); if( self::isGuestOpenIDSession($id) ) { - $result = self::$mc->set("{self::$domain}/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,$config->service['timeout']); + $result = self::$mc->set("authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,$config->service['timeout']); if ($result) { return true; } @@ -146,7 +143,7 @@ public static function authorize($blogid, $userid) { if (self::isAuthorized(session_id())) return true; for ($i = 0; $i < 3; $i++) { $id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)); - $result = self::$mc->set("{self::$domain}/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,$config->service['timeout']); + $result = self::$mc->set("authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,$config->service['timeout']); if ($result) { @session_id($id); diff --git a/framework/legacy/Textcube.Data.Feed.php b/framework/legacy/Textcube.Data.Feed.php index 0bf3ed8cf..5238e2116 100644 --- a/framework/legacy/Textcube.Data.Feed.php +++ b/framework/legacy/Textcube.Data.Feed.php @@ -136,7 +136,7 @@ function add() { } $this->id = $query->getCell('id'); - $query->reset($database['prefix'] . 'FeedGroupRelations'); + $query->reset('FeedGroupRelations'); $query->setQualifier('blogid', 'equals',$blogid); $query->setQualifier('feed', 'equals',$this->id); $query->setQualifier('groupid', 'equals',$this->group); diff --git a/framework/legacy/Textcube.Data.SubscriptionStatistics.php b/framework/legacy/Textcube.Data.SubscriptionStatistics.php index 64ca70583..87128d45e 100644 --- a/framework/legacy/Textcube.Data.SubscriptionStatistics.php +++ b/framework/legacy/Textcube.Data.SubscriptionStatistics.php @@ -99,7 +99,7 @@ function _buildQuery() { if (empty($this->host)) return $this->_error('host'); $query = DBModel::getInstance(); - $query->reset($database['prefix'] . 'SubscriptionStatistics'); + $query->reset('SubscriptionStatistics'); $query->setQualifier('blogid', 'equals', getBlogId()); if (isset($this->ip)) { if (!Validator::ip($this->ip)) diff --git a/framework/model/URIHandler.php b/framework/model/URIHandler.php index bed7089de..9e7247a72 100644 --- a/framework/model/URIHandler.php +++ b/framework/model/URIHandler.php @@ -28,28 +28,29 @@ private function __URIInterpreter() { private function __URIParser() { if(!isset($this->uri)) $this->__URIInterpreter(); - $config = Model_Config::getInstance(); + $this->context->useNamespace('service'); + $url = $this->uri['fullpath']; $defaultblogid = Setting::getServiceSetting("defaultBlogId",1); $this->suri = array('url' => $url, 'value' => ''); $this->blogid = null; $this->uri['isStrictBlogURL'] = true; - $depth = substr_count($config->service['path'], '/'); + $depth = substr_count($this->context->getProperty('path'), '/'); if ($depth > 0) { if (preg_match('@^((/+[^/]+){' . $depth . '})(.*)$@', $url, $matches)) $url = $matches[3]; else Respond::NotFoundPage(); } - if ($config->service['type'] == 'single') { + if ($this->context->getProperty('type') == 'single') { $this->blogid = $defaultblogid; } else { - if ($config->service['type'] == 'domain') { - if ($_SERVER['HTTP_HOST'] == $config->service['domain']) { + if ($this->context->getProperty('type') == 'domain') { // Domain-based service + if ($_SERVER['HTTP_HOST'] == $this->context->getProperty('domain')) { $this->blogid = $defaultblogid; } else { $domain = explode('.', $_SERVER['HTTP_HOST'], 2); - if ($domain[1] == $config->service['domain']) { + if ($domain[1] == $this->context->getProperty('domain')) { $this->blogid = $this->__getBlogidByName($domain[0]); if ($this->blogid === null) $this->blogid = $this->__getBlogidBySecondaryDomain($_SERVER['HTTP_HOST']); @@ -57,7 +58,7 @@ private function __URIParser() { $this->blogid = $this->__getBlogidBySecondaryDomain($_SERVER['HTTP_HOST']); } } - } else { + } else { // Path-based service if ($url == '/') { $this->blogid = $defaultblogid; } else if (preg_match('@^/+([^/]+)(.*)$@', $url, $matches)) { @@ -85,7 +86,7 @@ private function __URIParser() { $depth = substr_count(ROOT, '/'); } if ($depth > 0) { - if($config->service['fancyURL'] === 0 || $config->service['fancyURL'] === 1) $url = '/'.$this->uri['input']; // Exclude /blog path. + if($this->context->getProperty('fancyURL') === 0 || $this->context->getProperty('fancyURL') === 1) $url = '/'.$this->uri['input']; // Exclude /blog path. if (preg_match('@^((/+[^/]+){' . $depth . '})/*(.*)$@', $url, $matches)) { $this->suri['directive'] = $matches[1]; if ($matches[3] !== false) { diff --git a/interface/atom/category/index.php b/interface/atom/category/index.php index 827f8d56c..ce8a2d255 100644 --- a/interface/atom/category/index.php +++ b/interface/atom/category/index.php @@ -4,9 +4,9 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; -//requireModel("blog.entry"); requireModel("blog.category"); requireStrictBlogURL(); diff --git a/interface/atom/comment/index.php b/interface/atom/comment/index.php index a5211afb1..584209253 100644 --- a/interface/atom/comment/index.php +++ b/interface/atom/comment/index.php @@ -4,15 +4,13 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); requireModel("blog.entry"); requireStrictBlogURL(); -if (false) { - fetchConfigVal(); -} $cache = pageCache::getInstance(); if(!empty($suri['id'])) { $cache->name = 'commentATOM-'.$suri['id']; diff --git a/interface/atom/index.php b/interface/atom/index.php index 3059643eb..150651b54 100644 --- a/interface/atom/index.php +++ b/interface/atom/index.php @@ -5,14 +5,14 @@ define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); + require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); requireModel("blog.entry"); requireStrictBlogURL(); -if (false) { - fetchConfigVal(); -} + publishEntries(); if (!file_exists(ROOT . "/cache/atom/$blogid.xml")) refreshFeed($blogid,'atom'); diff --git a/interface/atom/line/index.php b/interface/atom/line/index.php index bb4dcf6db..94361b26f 100644 --- a/interface/atom/line/index.php +++ b/interface/atom/line/index.php @@ -4,6 +4,7 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/interface/atom/notifycomment/index.php b/interface/atom/notifycomment/index.php index 9edf6d517..2990d70ea 100644 --- a/interface/atom/notifycomment/index.php +++ b/interface/atom/notifycomment/index.php @@ -4,6 +4,8 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); + if(isset($_GET['loginid'])) $_POST['loginid'] = $_GET['loginid']; if(isset($_GET['key'])) $_POST['key'] = $_GET['key']; diff --git a/interface/atom/response/index.php b/interface/atom/response/index.php index 48b5a8a73..37b962f24 100644 --- a/interface/atom/response/index.php +++ b/interface/atom/response/index.php @@ -3,6 +3,8 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); +define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/interface/atom/search/index.php b/interface/atom/search/index.php new file mode 100644 index 000000000..d7377c6eb --- /dev/null +++ b/interface/atom/search/index.php @@ -0,0 +1,38 @@ + '', 'items' => array(), 'count' => 0); + +$blogid = getBlogId(); +list($entries, $paging) = getEntriesWithPagingBySearch($blogid, $search, 1, 1, 1); + +if(empty($entries)) { + header ("Location: $hostURL$blogURL/atom"); + exit; +} + +$cache = pageCache::getInstance(); +$cache->name = 'searchATOM-'.$search; +if(!$cache->load()) { + requireModel("blog.feed"); + $result = getSearchFeedByKeyword(getBlogId(),$search,'atom',$search); + if($result !== false) { + $cache->contents = $result; + $cache->update(); + } +} +header('Content-Type: application/atom+xml; charset=utf-8'); +fireEvent('FeedOBStart'); +echo fireEvent('ViewSearchATOM', $cache->contents); +fireEvent('FeedOBEnd'); +?> diff --git a/interface/atom/tag/index.php b/interface/atom/tag/index.php new file mode 100644 index 000000000..18322e15c --- /dev/null +++ b/interface/atom/tag/index.php @@ -0,0 +1,41 @@ +name = 'tagATOM-'.$tagId; +if(!$cache->load()) { + requireModel("blog.feed"); + $result = getTagFeedByTagId(getBlogId(),$tagId,'atom',$tagTitle); + if($result !== false) { + $cache->contents = $result; + $cache->update(); + } +} +header('Content-Type: application/atom+xml; charset=utf-8'); +fireEvent('FeedOBStart'); +echo fireEvent('ViewTagATOM', $cache->contents); +fireEvent('FeedOBEnd'); +?> diff --git a/interface/atom/trackback/index.php b/interface/atom/trackback/index.php index 87660ed64..9d4f0be33 100644 --- a/interface/atom/trackback/index.php +++ b/interface/atom/trackback/index.php @@ -4,15 +4,13 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); requireModel("blog.entry"); requireStrictBlogURL(); -if (false) { - fetchConfigVal(); -} $cache = pageCache::getInstance(); if(!empty($suri['id'])) { $cache->name = 'trackbackATOM-'.$suri['id']; diff --git a/interface/blog/author.php b/interface/blog/author.php index 3f20c5a87..de6ccf3ac 100644 --- a/interface/blog/author.php +++ b/interface/blog/author.php @@ -13,7 +13,7 @@ if(empty($authorId)) exit; if ($skinSetting['showListOnAuthor'] != 0) { - $cache->name = 'authorList_'.$authorId."_".$suri['page']."_"; + $cache->name = 'authorList-'.$authorId."-".$suri['page']."-"; if (!$cache->load()) { if(!$listWithPaging = getEntryListWithPagingByAuthor($blogid, $author, $suri['page'], $blog['entriesOnList'])) $listWithPaging = array(array(), array('total' => 0)); diff --git a/interface/blog/category.php b/interface/blog/category.php index e66918e69..dfdbe2c02 100644 --- a/interface/blog/category.php +++ b/interface/blog/category.php @@ -7,15 +7,17 @@ $cache = pageCache::getInstance(); if(!isset($suri['id']) || (Setting::getBlogSettingGlobal('useSloganOnCategory',1) == 1)) { $category = empty($suri['value']) ? 0 : getCategoryIdByLabel($blogid, $suri['value']); + $listFeedURL = 'category/'.$suri['value']; } else { $category = $suri['id']; $suri['value'] = getCategoryLabelById($blogid, $category); + $listFeedURL = 'category/'.$suri['id']; } if(!doesHaveOwnership() && getCategoryVisibility($blogid, $category) < 2) $category = null; if ($skinSetting['showListOnCategory'] != 0) { - $cache->name = 'categoryList_'.$category."_".$suri['page']."_"; + $cache->name = 'categoryList-'.$category."-".$suri['page']."-"; if (!$cache->load()) { if(!$listWithPaging = getEntryListWithPagingByCategory($blogid, $category, $suri['page'], $blog['entriesOnList'])) $listWithPaging = array(array(), array('total' => 0)); diff --git a/interface/blog/comment/modify/index.php b/interface/blog/comment/modify/index.php index a1995dc81..c9d9222bd 100644 --- a/interface/blog/comment/modify/index.php +++ b/interface/blog/comment/modify/index.php @@ -4,5 +4,5 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) $_POST['mode'] = 'edit'; -require ROOT. '/interface/comment/delete/index.php'; +require ROOT. '/interface/blog/comment/delete/index.php'; ?> diff --git a/interface/blog/search.php b/interface/blog/search.php index 217831e02..23e06b04f 100644 --- a/interface/blog/search.php +++ b/interface/blog/search.php @@ -3,9 +3,7 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) require ROOT . '/library/preprocessor.php'; -if (false) { - fetchConfigVal(); -} + $search = isset($_GET['search']) ? $_GET['search'] : $suri['value']; $search = isset($_GET['q']) ? $_GET['q'] : $search; // Consider the common search query GET name. (for compatibility) $list = array('title' => '', 'items' => array(), 'count' => 0); @@ -13,6 +11,7 @@ if (strlen($search) > 0 && !empty($suri['page'])) { $listWithPaging = getEntryListWithPagingBySearch($blogid, $search, $suri['page'], $blog['entriesOnList']); $list = array('title' => $search, 'items' => $listWithPaging[0], 'count' => $listWithPaging[1]['total']); + $listFeedURL = 'search/'.$search; $paging = $listWithPaging[1]; require ROOT . '/interface/common/blog/begin.php'; require ROOT . '/interface/common/blog/list.php'; diff --git a/interface/blog/tag.php b/interface/blog/tag.php index 49eeb2428..a0ebdfa96 100644 --- a/interface/blog/tag.php +++ b/interface/blog/tag.php @@ -9,9 +9,11 @@ if (strlen($suri['value'])) { if(!isset($suri['id']) || (getBlogSetting('useSloganOnTag',1) == 1)) { $tag = getTagId($blogid, $suri['value']); + $listFeedURL = 'tag/'.$suri['value']; } else { $tag = $suri['id']; $suri['value'] = getTagById($blogid, $suri['id']); + $listFeedURL = 'tag/'.$suri['id']; } $preservedEntries = @@ -20,7 +22,7 @@ null; if ($skinSetting['showListOnTag'] != 0) { $cache->reset(); - $cache->name = 'tagList_'.$tag.'_'.$suri['page'].'_'; + $cache->name = 'tagList-'.$tag.'-'.$suri['page'].'-'; if(!$cache->load()) { $listWithPaging = getEntryListWithPagingByTag($blogid, $tag, $suri['page'], $blog['entriesOnList']); if (!array_key_exists('total',$listWithPaging[1])) $listWithPaging[1]['total'] = 0; @@ -43,7 +45,7 @@ require ROOT . '/interface/common/blog/begin.php'; $cache->reset(); if(getBlogSetting('useKeywordAsTag',true)==true) { - $cache->name = 'keyword_'.$tag.'_'; + $cache->name = 'keyword-'.$tag.'-'; if($cache->load()) { require ROOT . '/interface/common/blog/entries.php'; } else { diff --git a/interface/common/blog/entries.php b/interface/common/blog/entries.php index 42570ec98..91d3943a9 100644 --- a/interface/common/blog/entries.php +++ b/interface/common/blog/entries.php @@ -25,7 +25,7 @@ 'title="Responses (ATOM) : '.htmlspecialchars($entry['title']).' - '.htmlspecialchars($blog['title']).'" '. 'href="'.$defaultURL.'/atom/response/'.$entry['id'].'" />'.CRLF; } - if( getBlogSetting('useFOAF',1) && rtrim( $suri['url'], '/' ) == $pathURL ) { + if( Setting::getBlogSettingGlobal('useFOAF',1) && rtrim( $suri['url'], '/' ) == $pathURL ) { /* same code exists in cover.php */ $foafDiscovery = "\n"; } else { @@ -83,7 +83,7 @@ $entryTags = getTags($entry['blogid'], $entry['id']); if (sizeof($entryTags) > 0) { $tags = array(); - $relTag = getBlogSetting('useMicroformat', 3)>1 && (count($entries) == 1 || !empty($skin->hentryExisted) ); + $relTag = Setting::getBlogSettingGlobal('useMicroformat', 3)>1 && (count($entries) == 1 || !empty($skin->hentryExisted) ); foreach ($entryTags as $entryTag) { $tags[$entryTag['name']] = "'; array_push($totalTags,$entryTag['name']); diff --git a/interface/common/blog/list.php b/interface/common/blog/list.php index 09534db0b..c378e3b58 100644 --- a/interface/common/blog/list.php +++ b/interface/common/blog/list.php @@ -35,6 +35,8 @@ dress('list_rep', $itemsView, $listView); dress('list_conform', fireEvent('ViewListHeadTitle', htmlspecialchars($list['title']) ), $listView); dress('list_count', isset($list['count']) ? $list['count'] : '0', $listView); + dress('list_rss_url', $context->getProperty('uri.default').'/rss/'.$listFeedURL, $listView); + dress('list_atom_url', $context->getProperty('uri.default').'/atom/'.$listFeedURL, $listView); $listView = fireEvent('ViewList', $listView, $list); if(empty($entries)) $listView = $listView.CRLF.'[##_paging_list_##]'; diff --git a/interface/common/control/footer.php b/interface/common/control/footer.php new file mode 100644 index 000000000..f81a70534 --- /dev/null +++ b/interface/common/control/footer.php @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + diff --git a/interface/common/control/header.php b/interface/common/control/header.php new file mode 100644 index 000000000..9b408d48f --- /dev/null +++ b/interface/common/control/header.php @@ -0,0 +1,614 @@ +'control','title'=>_t('서비스관리'),'link'=>'/control/blog') + ); + $blogMenu['topMenu'] = 'control'; +} else if(Acl::check('group.administrators')) { + $blogTopMenuItem = array( + array('menu'=>'center','title'=>_t('센터'),'link'=>'/owner/center/dashboard'), + array('menu'=>'entry','title'=>_t('글'),'link'=>'/owner/entry'), + array('menu'=>'communication','title'=>_t('소통'),'link'=>'/owner/communication/comment'), + array('menu'=>'network','title'=>_t('네트워크'),'link'=>'/owner/network/link'), + array('menu'=>'skin','title'=>_t('꾸미기'),'link'=>'/owner/skin'), + array('menu'=>'plugin','title'=>_t('플러그인'),'link'=>'/owner/plugin'), + array('menu'=>'setting','title'=>_t('설정'),'link'=>'/owner/setting/blog') + ); +} else { + $blogTopMenuItem = array( + array('menu'=>'center','title'=>_t('센터'),'link'=>'/owner/center/dashboard'), + array('menu'=>'entry','title'=>_t('글'),'link'=>'/owner/entry'), + array('menu'=>'communication','title'=>_t('소통'),'link'=>'/owner/communication/comment'), + array('menu'=>'network','title'=>_t('네트워크'),'link'=>'/owner/network/link'), + array('menu'=>'setting','title'=>_t('설정'),'link'=>'/owner/setting/account') + ); +} + +switch($blogMenu['topMenu']) { + case 'center': + $blogMenu['title'] = _t('센터'); + $blogMenu['loadCSS'] = array('center'); + $blogMenu['loadCSSIE6'] = array('center'); + $blogMenu['loadCSSIE7'] = array('center'); + break; + case 'entry': + $blogMenu['title'] = _t('글'); + if ($blogMenu['contentMenu'] == 'post' || $blogMenu['contentMenu'] == 'edit') { + $blogMenu['loadCSS'] = array('post','editor'); + $blogMenu['loadCSSIE6'] = array('post','editor'); + $blogMenu['loadCSSIE7'] = array('post','editor'); + } else { + $blogMenu['loadCSS'] = array('post'); + $blogMenu['loadCSSIE6'] = array('post'); + $blogMenu['loadCSSIE7'] = array('post'); + } + + break; + case 'communication': + $blogMenu['title'] = _t('소통'); + $blogMenu['loadCSS'] = array('communication'); + $blogMenu['loadCSSIE6'] = array('communication'); + $blogMenu['loadCSSIE7'] = array('communication'); + break; + case 'network': + $blogMenu['title'] = _t('네트워크'); + $blogMenu['loadCSS'] = array('network'); + $blogMenu['loadCSSIE6'] = array('network'); + $blogMenu['loadCSSIE7'] = array('network'); + break; + case 'skin': + $blogMenu['title'] = _t('꾸미기'); + $blogMenu['loadCSS'] = array('skin'); + $blogMenu['loadCSSIE6'] = array('skin'); + $blogMenu['loadCSSIE7'] = array('skin'); + break; + case 'plugin': + $blogMenu['title'] = _t('플러그인'); + $blogMenu['loadCSS'] = array('plugin'); + $blogMenu['loadCSSIE6'] = array('plugin'); + $blogMenu['loadCSSIE7'] = array('plugin'); + break; + case 'setting': + case 'data': + $blogMenu['title'] = _t('설정'); + $blogMenu['loadCSS'] = array('setting'); + $blogMenu['loadCSSIE6'] = array('setting'); + $blogMenu['loadCSSIE7'] = array('setting'); + break; + case 'reader': + $blogMenu['title'] = _t('리더'); + $blogMenu['loadCSS'] = array('reader'); + $blogMenu['loadCSSIE6'] = array('reader'); + $blogMenu['loadCSSIE7'] = array('reader'); + break; + case 'control': + $blogMenu['title'] = _t('서비스'); + $blogMenu['loadCSS'] = array('control'); + break; +} +// exception for reader CSS. RSS reader will keep as an independent module. +if(defined('__TEXTCUBE_READER_SUBMENU__') && $blogMenu['contentMenu'] == 'reader') { + $blogMenu['topMenu'] = 'network'; + $blogMenu['title'] = _t('네트워크'); + $blogMenu['loadCSS'] = array('reader'); + $blogMenu['loadCSSIE6'] = array('reader'); + $blogMenu['loadCSSIE7'] = array('reader'); +} +// mapping data management to setting +if(isset($blogMenu['topMenu']) && $blogMenu['topMenu']=='data') $blogMenu['topMenu'] = 'setting'; +$pluginListForCSS = array(); +if ($blogMenu['topMenu'] == 'center' && $blogMenu['contentMenu'] == 'dashboard') { + if (isset($centerMappings)) { + foreach ($centerMappings as $tempPlugin) { + array_push($pluginListForCSS, $tempPlugin['plugin']); + } + } +} else if ($blogMenu['topMenu'] == 'entry' && ($blogMenu['contentMenu'] == 'post' || $blogMenu['contentMenu'] == 'edit')) { + if (isset($eventMappings['AddPostEditorToolbox'])) { + foreach ($eventMappings['AddPostEditorToolbox'] as $tempPlugin) { + array_push($pluginListForCSS, $tempPlugin['plugin']); + } + } +} else if (isset($pluginDir)) { + array_push($pluginListForCSS, $pluginDir); +} +unset($tempPlugin); + +/***** Submenu generation *****/ +if(isset($blogMenu['topMenu'])) { + if(Acl::check('group.administrators')) { + $blogContentMenuItem['center'] = array( + array('menu'=>'dashboard','title'=>_t('조각보'),'link'=>'/owner/center/dashboard'), + ); + } else{ + $blogContentMenuItem['center'] = array( + array('menu'=>'dashboard','title'=>_t('조각보'),'link'=>'/owner/center/dashboard') + ); + } + if(Acl::check('group.editors')) { + $blogContentMenuItem['entry'] = array( + array('menu'=>'entry','title'=>_t('글 목록'),'link'=>'/owner/entry'), + array('menu'=>'line','title'=>_t('라인 관리'),'link'=>'/owner/entry/line'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'post','title'=>_t('글 쓰기'),'link'=>'/owner/entry/post'), + array('menu'=>'notice','title'=>_t('공지 쓰기'),'link'=>'/owner/entry/post?category=-2'), + array('menu'=>'keylog','title'=>_t('키워드 만들기'),'link'=>'/owner/entry/post?category=-1'), + array('menu'=>'template','title'=>_t('서식 만들기'),'link'=>'/owner/entry/post?category=-4'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'category','title'=>_t('분류 관리'),'link'=>'/owner/entry/category'), + array('menu'=>'tag','title'=>_t('태그 관리'),'link'=>'/owner/entry/tag') + ); + } else { + $blogContentMenuItem['entry'] = array( + array('menu'=>'entry','title'=>_t('글 목록'),'link'=>'/owner/entry'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'post','title'=>_t('글쓰기'),'link'=>'/owner/entry/post'), + array('menu'=>'notice','title'=>_t('공지 쓰기'),'link'=>'/owner/entry/post?category=-2'), + array('menu'=>'keylog','title'=>_t('키워드 만들기'),'link'=>'/owner/entry/post?category=-1'), + array('menu'=>'template','title'=>_t('서식 만들기'),'link'=>'/owner/entry/post?category=-4') + ); + } + if(Acl::check('group.administrators')) { + $blogContentMenuItem['communication'] = array( + array('menu'=>'comment','title'=>_t('댓글'),'link'=>'/owner/communication/comment?status=comment'), + array('menu'=>'guestbook','title'=>_t('방명록'),'link'=>'/owner/communication/comment?status=guestbook'), + array('menu'=>'notify','title'=>_t('댓글 알리미'),'link'=>'/owner/communication/notify'), + array('menu'=>'trackbackreceived','title'=>_t('걸린 글'),'link'=>'/owner/communication/trackback?status=received'), + array('menu'=>'trackbacksent','title'=>_t('건 글'),'link'=>'/owner/communication/trackback?status=sent'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'openid','title'=>_t('오픈아이디 기록'),'link'=>'/owner/communication/openid'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'trash','title'=>_t('휴지통'),'link'=>'/owner/communication/trash/comment'), + array('menu'=>'filter','title'=>_t('스팸 필터'),'link'=>'/owner/communication/filter') + ); + } else { + $blogContentMenuItem['communication'] = array( + array('menu'=>'comment','title'=>_t('소통 기록'),'link'=>'/owner/communication/comment'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'trash','title'=>_t('휴지통'),'link'=>'/owner/communication/trash/comment') + ); + } + if(Acl::check('group.administrators')) { + $blogContentMenuItem['network'] = array( + array('menu'=>'teamblog','title'=>_t('필진 목록'),'link'=>'/owner/network/teamblog'), + array('menu'=>'link','title'=>_t('링크'),'link'=>'/owner/network/link') + ); + if($service['reader'] == true) array_push($blogContentMenuItem['network'],array('menu'=>'reader','title'=>_t('바깥 글 읽기'),'link'=>'/owner/network/reader')); + } else { + $blogContentMenuItem['network'] = array(); + if($service['reader'] == true) array_push($blogContentMenuItem['network'],array('menu'=>'reader','title'=>_t('바깥 글 읽기'),'link'=>'/owner/network/reader')); + } + if(Acl::check('group.administrators')) { + $blogContentMenuItem['skin'] = array( + array('menu'=>'skin','title'=>_t('스킨 선택'),'link'=>'/owner/skin'), + array('menu'=>'adminSkin','title'=>_t('관리 패널 스킨 선택'),'link'=>'/owner/skin/adminSkin'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'edit','title'=>_t('스킨 편집'),'link'=>'/owner/skin/edit'), + array('menu'=>'setting','title'=>_t('스킨 상세 설정'),'link'=>'/owner/skin/setting'), + array('menu'=>'divider','title'=> '-','link'=>'/'), + array('menu'=>'sidebar','title'=>_t('사이드바 위젯'),'link'=>'/owner/skin/sidebar'), + array('menu'=>'coverpage','title'=>_t('표지 위젯'),'link'=>'/owner/skin/coverpage') + ); + } + if(Acl::check('group.administrators')) { + $blogContentMenuItem['plugin'] = array( + array('menu'=>'plugin','title'=>_t('플러그인 목록'),'link'=>'/owner/plugin') + ); + if(Acl::check('group.creators')) array_push($blogContentMenuItem['plugin'], array('menu'=>'tableSetting','title'=>_t('플러그인 데이터 관리'),'link'=>'/owner/plugin/tableSetting')); + } + if(Acl::check('group.administrators')) { + $blogContentMenuItem['setting'] = array( + array('menu'=>'blog','title'=>_t('블로그'),'link'=>'/owner/setting/blog'), + array('menu'=>'entry','title'=>_t('글 작성'),'link'=>'/owner/setting/entry'), + array('menu'=>'account','title'=>_t('개인 정보'),'link'=>'/owner/setting/account'), + array('menu'=>'data','title'=>_t('데이터 관리'),'link'=>'/owner/data') + ); + } else { + $blogContentMenuItem['setting'] = array( + array('menu'=>'account','title'=>_t('개인 정보'),'link'=>'/owner/setting/account') + ); + } + if(Acl::check('group.creators')) { + $blogContentMenuItem['control'] = array( + array('menu'=>'blog','title'=>_t('블로그'),'link'=>'/control/blog'), + array('menu'=>'user','title'=>_t('사용자'),'link'=>'/control/user'), + array('menu'=>'server','title'=>_t('서버'),'link'=>'/control/server'), + array('menu'=>'system','title'=>_t('시스템 정보'),'link'=>'/control/system') + ); + } +} + +if( empty($blogContentMenuItem) ) { + echo _t('접근권한이 없습니다'); + exit; +} + +foreach($adminMenuMappings as $path => $pluginAdminMenuitem) { + if(isset($blogContentMenuItem[$pluginAdminMenuitem['topMenu']])) { + if(count($blogContentMenuItem[$pluginAdminMenuitem['topMenu']]) < $pluginAdminMenuitem['contentMenuOrder'] + || $pluginAdminMenuitem['contentMenuOrder'] < 1) + $pluginAdminMenuitem['contentMenuOrder'] = count($blogContentMenuItem[$pluginAdminMenuitem['topMenu']]); + array_splice($blogContentMenuItem[$pluginAdminMenuitem['topMenu']], $pluginAdminMenuitem['contentMenuOrder'], 0, + array(array('menu'=>'adminMenu?name='.$path, + 'title'=>$pluginAdminMenuitem['title'], + 'link'=>'/owner/plugin/adminMenu?name='.$path)) + ); + } +} + +/** Adds 'about' panel at the last part of center panel. **/ +$blogContentMenuItem['center'] = array_merge($blogContentMenuItem['center'] , array(array('menu'=>'about','title'=>_t('텍스트큐브는'),'link'=>'/owner/center/about'))); + +/***** Start header output *****/ +?> + +"> + + + <?php echo htmlspecialchars($blog['title']);?> > <?php echo $blogMenu['title'];?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

+ +
+
    + +
  • %1님.', htmlspecialchars($writer));?>
  • +
+
+ + + +
+
    +
  • +
  • +
  • +
+
+ + + +
+
+
+
+ + + +

+ + +
+ + + +
+ +

+ + + + + +
+
+ diff --git a/interface/common/owner/header.php b/interface/common/owner/header.php index e810a9d0f..ca17d3a79 100755 --- a/interface/common/owner/header.php +++ b/interface/common/owner/header.php @@ -431,6 +431,9 @@
  • + +
  • +
@@ -441,11 +444,7 @@
- - diff --git a/interface/owner/setting/blog/index.php b/interface/owner/setting/blog/index.php index cfc354f8d..137d0b9b0 100644 --- a/interface/owner/setting/blog/index.php +++ b/interface/owner/setting/blog/index.php @@ -13,7 +13,8 @@ function setBlog() { if (document.getElementById('common-form').title.value != title) { - var request = new HTTPRequest("GET", "/owner/setting/blog/title?title=" + encodeURIComponent(document.getElementById('common-form').title.value)); + + var request = new HTTPRequest("POST", "/owner/setting/blog/title"); request.onSuccess = function() { PM.showMessage("", "center", "bottom"); title = document.getElementById('common-form').title.value; @@ -21,7 +22,7 @@ function setBlog() { request.onError = function() { alert(""); } - request.send(); + request.send("title=" + encodeURIComponent(document.getElementById('common-form').title.value)); } if (document.getElementById('common-form').description.value != description) { var request = new HTTPRequest("POST", "/owner/setting/blog/description/"); diff --git a/interface/owner/setting/blog/title/index.php b/interface/owner/setting/blog/title/index.php index 85ceba954..9454ce3aa 100644 --- a/interface/owner/setting/blog/title/index.php +++ b/interface/owner/setting/blog/title/index.php @@ -3,14 +3,17 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) $IV = array( - 'GET' => array( + 'POST' => array( 'title' => array('string','default' => '') ) ); require ROOT . '/library/preprocessor.php'; requireStrictRoute(); -if (!empty($_GET['title']) && setBlogTitle(getBlogId(), trim($_GET['title']))) { - Respond::ResultPage(0); +if (!empty($_POST['title'])){ + requireModel('blog.blogSetting'); + if(setBlogTitle(getBlogId(), trim($_POST['title']))) { + Respond::ResultPage(0); + } } -Respond::ResultPage( - 1); +Respond::ResultPage(-1); ?> diff --git a/interface/owner/setting/entry/editor/index.php b/interface/owner/setting/entry/editor/index.php index 9ce861923..c9ff10875 100644 --- a/interface/owner/setting/entry/editor/index.php +++ b/interface/owner/setting/entry/editor/index.php @@ -14,9 +14,9 @@ Respond::ResultPage( -1); if (setBlogSetting("defaultEditor", $_REQUEST['defaultEditor']) - && setBlogSetting("defaultFormatter", $_REQUEST['defaultFormatter']) - && setBlogSetting("useBlogAPI", $useBlogAPI) - && setBlogSetting("blogApiPassword", $_REQUEST['blogApiPassword']) ) { + && Setting::setBlogSettingGlobal("defaultFormatter", $_REQUEST['defaultFormatter']) + && Setting::setBlogSettingGlobal("useBlogAPI", $useBlogAPI) + && Setting::setBlogSettingGlobal("blogApiPassword", $_REQUEST['blogApiPassword']) ) { Respond::ResultPage(0); } Respond::ResultPage( -1); diff --git a/interface/owner/setting/entry/index.php b/interface/owner/setting/entry/index.php index 0d84aa82f..38e3f3ea8 100644 --- a/interface/owner/setting/entry/index.php +++ b/interface/owner/setting/entry/index.php @@ -157,7 +157,7 @@ function refreshLineSearch(mode) {
- " /> + " />
diff --git a/interface/owner/skin/adminSkin/set/index.php b/interface/owner/skin/adminSkin/set/index.php index e90f7ec05..1b273ed58 100644 --- a/interface/owner/skin/adminSkin/set/index.php +++ b/interface/owner/skin/adminSkin/set/index.php @@ -11,7 +11,7 @@ require ROOT . '/library/preprocessor.php'; -if (empty($_POST['adminSkin']) || !file_exists(ROOT."/skin/admin/{$_POST['adminSkin']}/index.xml") || !setBlogSetting("adminSkin", $_POST['adminSkin'])) +if (empty($_POST['adminSkin']) || !file_exists(ROOT."/skin/admin/{$_POST['adminSkin']}/index.xml") || !Setting::setBlogSettingGlobal("adminSkin", $_POST['adminSkin'])) Respond::ResultPage(false); else Respond::ResultPage(true); diff --git a/interface/owner/skin/coverpage/index.php b/interface/owner/skin/coverpage/index.php index 9faec9806..580bb629c 100644 --- a/interface/owner/skin/coverpage/index.php +++ b/interface/owner/skin/coverpage/index.php @@ -213,7 +213,7 @@ function pretty_dress($view) $coverpageCount = count($skin->coverpageBasicModules); if (($_SERVER['REQUEST_METHOD'] == 'POST') && (empty($_POST['useCoverpageInit']))) { - $coverpageInitView = getBlogSetting("coverpageInitView"); + $coverpageInitView = Setting::getBlogSettingGlobal("coverpageInitView"); if (is_null($coverpageInitView)) { setBlogSetting("coverpageInitView", 1); $coverpageInitView = 1; @@ -225,7 +225,7 @@ function pretty_dress($view) setBlogSetting("coverpageInitView", 1); $coverpageInitView = 1; } else { - $coverpageInitView = getBlogSetting("coverpageInitView"); + $coverpageInitView = Setting::getBlogSettingGlobal("coverpageInitView"); } getBlogContentForCoverPage(); diff --git a/interface/owner/skin/index.php b/interface/owner/skin/index.php index 0887bb50f..0d1bf4b8d 100644 --- a/interface/owner/skin/index.php +++ b/interface/owner/skin/index.php @@ -10,7 +10,7 @@ } else $search = null; // get the list type. -$listType = getBlogSetting('skinViewType', 'iconview'); +$listType = Setting::getBlogSettingGlobal('skinViewType', 'iconview'); $skins = array(); $dirHandler = dir(ROOT . "/skin/blog"); diff --git a/interface/owner/skin/saveScope/index.php b/interface/owner/skin/saveScope/index.php index 1980ad5cd..b7a960c2a 100644 --- a/interface/owner/skin/saveScope/index.php +++ b/interface/owner/skin/saveScope/index.php @@ -10,11 +10,11 @@ require ROOT . '/library/preprocessor.php'; requireStrictRoute(); -$backupListView = getBlogSetting('skinViewType'); +$backupListView = Setting::getBlogSettingGlobal('skinViewType'); // 하나라도 저장에 실패하면 롤백. -if (!setBlogSetting("skinViewType", $_POST['viewtype'])) { - setBlogSetting("skinViewType", $backupListView); +if (!Setting::setBlogSettingGlobal("skinViewType", $_POST['viewtype'])) { + Setting::setBlogSettingGlobal("skinViewType", $backupListView); Respond::ResultPage(1); } else { Respond::ResultPage(0); diff --git a/interface/owner/skin/setting/index.php b/interface/owner/skin/setting/index.php index f41e9623c..d92d79f8c 100644 --- a/interface/owner/skin/setting/index.php +++ b/interface/owner/skin/setting/index.php @@ -606,7 +606,7 @@ function changeTreeStyle() {
- /> + />
diff --git a/interface/rss/category/index.php b/interface/rss/category/index.php index c684a747e..799c2a6dc 100644 --- a/interface/rss/category/index.php +++ b/interface/rss/category/index.php @@ -3,10 +3,10 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); define('__TEXTCUBE_LOGIN__',true); require ROOT . '/library/preprocessor.php'; -//requireModel("blog.entry"); requireModel("blog.category"); requireStrictBlogURL(); diff --git a/interface/rss/comment/index.php b/interface/rss/comment/index.php index 7e356960b..73fd05724 100644 --- a/interface/rss/comment/index.php +++ b/interface/rss/comment/index.php @@ -4,6 +4,7 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/interface/rss/index.php b/interface/rss/index.php index 7960c0199..f1cff24c4 100644 --- a/interface/rss/index.php +++ b/interface/rss/index.php @@ -5,6 +5,8 @@ define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); + require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); requireModel("blog.entry"); diff --git a/interface/rss/line/index.php b/interface/rss/line/index.php index 65850b896..4cdad024c 100644 --- a/interface/rss/line/index.php +++ b/interface/rss/line/index.php @@ -4,6 +4,7 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/interface/rss/notifycomment/index.php b/interface/rss/notifycomment/index.php index d89a519e2..c5de1c6d7 100644 --- a/interface/rss/notifycomment/index.php +++ b/interface/rss/notifycomment/index.php @@ -4,6 +4,8 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); + if(isset($_GET['loginid'])) $_POST['loginid'] = $_GET['loginid']; if(isset($_GET['key'])) $_POST['key'] = $_GET['key']; diff --git a/interface/rss/response/index.php b/interface/rss/response/index.php index 8d47e3616..011ecae91 100644 --- a/interface/rss/response/index.php +++ b/interface/rss/response/index.php @@ -3,6 +3,8 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); +define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/interface/rss/search/index.php b/interface/rss/search/index.php new file mode 100644 index 000000000..b3d113fce --- /dev/null +++ b/interface/rss/search/index.php @@ -0,0 +1,37 @@ +name = 'searchRSS-'.$search; +if(!$cache->load()) { + requireModel("blog.feed"); + $result = getSearchFeedByKeyword(getBlogId(),$search,'rss',$search); + if($result !== false) { + $cache->contents = $result; + $cache->update(); + } +} +header('Content-Type: application/rss+xml; charset=utf-8'); +fireEvent('FeedOBStart'); +echo fireEvent('ViewSearchRSS', $cache->contents); +fireEvent('FeedOBEnd'); +?> diff --git a/interface/rss/trackback/index.php b/interface/rss/trackback/index.php index fe5348922..9f6631515 100644 --- a/interface/rss/trackback/index.php +++ b/interface/rss/trackback/index.php @@ -4,6 +4,7 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) define('NO_SESSION', true); define('__TEXTCUBE_LOGIN__',true); +define('__TEXTCUBE_CUSTOM_HEADER__', true); require ROOT . '/library/preprocessor.php'; requireModel("blog.feed"); diff --git a/library/blog.skin.php b/library/blog.skin.php index a01dc481f..4942b29aa 100644 --- a/library/blog.skin.php +++ b/library/blog.skin.php @@ -90,8 +90,10 @@ class Skin { var $dressTags = array(); - function Skin($name, $previewMode = false) { + function __construct($name, $previewMode = false) { global $service, $blogURL, $suri, $blog, $__gDressTags; + $this->cache = new pageCache; + $this->cache->reset('skinCache'); $__gDressTags = array(); if($previewMode == true || ($service['skincache'] != true) || !$this->loadCache()) { $this->noneCommentMessage = Setting::getBlogSettingGlobal('noneCommentMessage',null); @@ -366,18 +368,14 @@ function getDressTags($contents) { function saveCache() { $skinCache = get_object_vars($this); - $cache = pageCache::getInstance(); - $cache->reset('skinCache'); - $cache->contents = serialize($skinCache); - return $cache->update(); + $this->cache->contents = serialize($skinCache); + return $this->cache->update(); } function loadCache() { global $__gDressTags; - $cache = pageCache::getInstance(); - $cache->reset('skinCache'); - if(!$cache->load()) return false; - $skinCache = unserialize($cache->contents); + if(!$this->cache->load()) return false; + $skinCache = unserialize($this->cache->contents); foreach($skinCache as $key=>$value) { $this->$key = $value; } @@ -387,9 +385,7 @@ function loadCache() { function purgeCache() { global $gCacheStorage; - $cache = pageCache::getInstance(); - $cache->reset('skinCache'); - $cache->purge(); + $this->cache->purge(); $gCacheStorage->purge(); } diff --git a/library/config.default.php b/library/config.default.php index a8f0403d8..bf79734e4 100644 --- a/library/config.default.php +++ b/library/config.default.php @@ -5,10 +5,10 @@ // Define basic signatures. define('TEXTCUBE_NAME', 'Textcube'); -define('TEXTCUBE_VERSION', '1.9 : alpha 1'); +define('TEXTCUBE_VERSION', '1.9 : Alpha 1'); define('TEXTCUBE_COPYRIGHT', 'Copyright © 2004-2009. Needlworks / Tatter Network Foundation. All rights reserved. Licensed under the GPL.'); define('TEXTCUBE_HOMEPAGE', 'http://www.textcube.org/'); -define('TEXTCUBE_RESOURCE_URL', 'http://resources.textcube.org/1.9'); +define('TEXTCUBE_RESOURCE_URL', 'http://resources.textcube.org/1.8'); define('CRLF', "\r\n"); define('TAB', " "); define('INT_MAX',2147483647); diff --git a/library/function/watermark.php b/library/function/watermark.php index e00ec44fc..fc7890046 100644 --- a/library/function/watermark.php +++ b/library/function/watermark.php @@ -59,7 +59,7 @@ function deleteAllThumbnails($path) { } function getWaterMarkPosition() { - $waterMarkPosition = getBlogSetting("waterMarkPosition", "left=10|bottom=10"); + $waterMarkPosition = Setting::getBlogSettingGlobal("waterMarkPosition", "left=10|bottom=10"); list($horizontalPos, $verticalPos) = explode("|", $waterMarkPosition); $horizontalPos = explode("=", $horizontalPos); @@ -104,7 +104,7 @@ function getWaterMarkGamma() { } function getThumbnailPadding() { - $thumbnailPadding = getBlogSetting("thumbnailPadding", false); + $thumbnailPadding = Setting::getBlogSettingGlobal("thumbnailPadding", false); if ($thumbnailPadding == false) { return array("top" => 0, "right" => 0, "bottom" => 0, "left" => 0); } else { @@ -114,6 +114,6 @@ function getThumbnailPadding() { } function getThumbnailPaddingColor() { - return getBlogSetting("thumbnailPaddingColor", "FFFFFF"); + return Setting::getBlogSettingGlobal("thumbnailPaddingColor", "FFFFFF"); } ?> diff --git a/library/model/blog.api.php b/library/model/blog.api.php index 9d0f3f062..e62b6f5a4 100644 --- a/library/model/blog.api.php +++ b/library/model/blog.api.php @@ -601,7 +601,7 @@ function blogger_editPost() $post->close(); RSS::refresh(); - if($ret!=false) setBlogSetting('LatestEditedEntry',$post->id); + if($ret!=false) Setting::setBlogSettingGlobal('LatestEditedEntry',$post->id); return $ret ? true : false; } @@ -838,7 +838,7 @@ function metaWeblog_newPost() $id = "{$post->id}"; $post->close(); - if($id) setBlogSetting('LatestEditedEntry',$id); + if($id) Setting::setBlogSettingGlobal('LatestEditedEntry',$id); return $id; } @@ -926,7 +926,7 @@ function metaWeblog_editPost() RSS::refresh(); $post->close(); - if($ret!=false) setBlogSetting('LatestEditedEntry',$post->id); + if($ret!=false) Setting::setBlogSettingGlobal('LatestEditedEntry',$post->id); return $ret ? true : false; } diff --git a/library/model/blog.blogSetting.php b/library/model/blog.blogSetting.php index 2ad9b6e90..44349e60a 100644 --- a/library/model/blog.blogSetting.php +++ b/library/model/blog.blogSetting.php @@ -4,15 +4,16 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) function setBlogTitle($blogid, $title) { - global $blog; - if ($title == $blog['title']) + $context = Model_Context::getInstance(); + if ($title == $context->getProperty('blog.title')) return true; - if(setBlogSetting('title', UTF8::lessenAsEncoding($title, 255)) === false) return false; + if(Setting::setBlogSetting('title', UTF8::lessenAsEncoding($title, 255),true) === false) return false; + $context->setProperty('blog.title',$title); $blog['title'] = $title; requireModel('blog.feed'); requireLibrary('blog.skin'); clearFeed(); - Skin::purgeCache(); + CacheControl::flushSkin(); return true; } @@ -25,7 +26,7 @@ function setBlogDescription($blogid, $description) { requireModel('blog.feed'); requireLibrary('blog.skin'); clearFeed(); - Skin::purgeCache(); + CacheControl::flushSkin(); return true; } @@ -38,7 +39,7 @@ function setBlogTags($blogid, $tags) { } function getBlogTags($blogid) { - if($tags = getBlogSetting('blogTags')) { + if($tags = Setting::getBlogSettingGlobal('blogTags')) { return $tags; } return null; @@ -149,8 +150,8 @@ function useBlogSlogan($blogid, $useSloganOnPost, $useSloganOnCategory, $useSlog && $useSloganOnTag == $blog['useSloganOnTag']) return true; /* if(setBlogSetting('useSloganOnPost',$useSlogan) === false - || setBlogSetting('useSloganOnCategory',$useSlogan) === false - || setBlogSetting('useSloganOnTag',$useSlogan) === false + || Setting::setBlogSettingGlobal('useSloganOnCategory',$useSlogan) === false + || Setting::setBlogSettingGlobal('useSloganOnTag',$useSlogan) === false ) { return false; }*/ @@ -200,7 +201,7 @@ function setBlogLanguage($blogid, $language, $blogLanguage) { return true; $language = UTF8::lessenAsEncoding($language, 5); $blogLanguage = UTF8::lessenAsEncoding($blogLanguage, 5); - if(setBlogSetting('language',$language) && setBlogSetting('blogLanguage',$blogLanguage)) { + if(Setting::setBlogSettingGlobal('language',$language) && Setting::setBlogSettingGlobal('blogLanguage',$blogLanguage)) { $blog['language'] = $language; $blog['blogLanguage'] = $blogLanguage; clearFeed(); @@ -211,7 +212,7 @@ function setBlogLanguage($blogid, $language, $blogLanguage) { function setGuestbook($blogid, $write, $comment) { if (!is_numeric($write) || !is_numeric($comment)) return false; - if(setBlogSetting('allowWriteOnGuestbook',$write) && setBlogSetting('allowWriteDblCommentOnGuestbook',$comment)) { + if(Setting::setBlogSettingGlobal('allowWriteOnGuestbook',$write) && Setting::setBlogSettingGlobal('allowWriteDblCommentOnGuestbook',$comment)) { return true; } else return false; } diff --git a/library/model/blog.coverpage.php b/library/model/blog.coverpage.php index 006bbd3ac..f28df9ec6 100644 --- a/library/model/blog.coverpage.php +++ b/library/model/blog.coverpage.php @@ -3,7 +3,7 @@ /// All rights reserved. Licensed under the GPL. /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) function getCoverpageModuleOrderData() { - if (!is_null($tempValue = getBlogSetting("coverpageOrder", NULL))) { + if (!is_null($tempValue = Setting::getBlogSettingGlobal("coverpageOrder", NULL))) { $emptyArray = unserialize($tempValue); } else { $emptyArray = false; diff --git a/library/model/blog.entry.php b/library/model/blog.entry.php index d01209cde..32b9f363e 100644 --- a/library/model/blog.entry.php +++ b/library/model/blog.entry.php @@ -574,7 +574,7 @@ function addEntry($blogid, $entry, $userid = null) { $published = $entry['published']; $entry['visibility'] = 0 - $entry['visibility']; if($entry['visibility'] < 0) { - $closestReservedTime = getBlogSetting('closestReservedPostTime',INT_MAX); + $closestReservedTime = Setting::getBlogSettingGlobal('closestReservedPostTime',INT_MAX); if($published < $closestReservedTime) { setBlogSetting('closestReservedPostTime',$published); } @@ -726,7 +726,7 @@ function updateEntry($blogid, $entry, $updateDraft = 0) { $published = $entry['published']; $entry['visibility'] = 0 - $entry['visibility']; if($entry['visibility'] < 0) { - $closestReservedTime = getBlogSetting('closestReservedPostTime',9999999999); + $closestReservedTime = Setting::getBlogSettingGlobal('closestReservedPostTime',9999999999); if($published < $closestReservedTime) { setBlogSetting('closestReservedPostTime',$published); } @@ -1094,7 +1094,7 @@ function syndicateEntry($id, $mode) { $pool->setQualifier('blogid','equals',$context->getProperty('blog.id')); $sites = $pool->getAll('url,type'); - $entry = getEntry($blogid, $id); + $entry = getEntry($context->getProperty('blog.id'), $id); if (is_null($entry)) return false; if(!empty($sites)) { @@ -1117,7 +1117,7 @@ function syndicateEntry($id, $mode) { function publishEntries() { global $database; $blogid = getBlogId(); - $closestReservedTime = getBlogSetting('closestReservedPostTime',INT_MAX); + $closestReservedTime = Setting::getBlogSettingGlobal('closestReservedPostTime',INT_MAX); if($closestReservedTime < Timestamp::getUNIXtime()) { $entries = POD::queryAll("SELECT id, visibility, category FROM {$database['prefix']}Entries @@ -1149,8 +1149,8 @@ function publishEntries() { $newClosestTime = POD::queryCell("SELECT min(published) FROM {$database['prefix']}Entries WHERE blogid = $blogid AND draft = 0 AND visibility < 0 AND published > UNIX_TIMESTAMP()"); - if(!empty($newClosestTime)) setBlogSetting('closestReservedPostTime',$newClosestTime); - else setBlogSetting('closestReservedPostTime',INT_MAX); + if(!empty($newClosestTime)) Setting::setBlogSettingGlobal('closestReservedPostTime',$newClosestTime); + else Setting::setBlogSettingGlobal('closestReservedPostTime',INT_MAX); } } diff --git a/library/model/blog.feed.php b/library/model/blog.feed.php index ea05c72c4..85690a053 100644 --- a/library/model/blog.feed.php +++ b/library/model/blog.feed.php @@ -105,7 +105,9 @@ function getFeedItemByEntries($entries) { $content = preg_replace('/" . _t('글 전체보기') . "

"; - } + } else { + $content .= "

" . _t('댓글 쓰기') . "

"; + } $row['repliesCount'] = $row['comments'] + $row['trackbacks']; $item = array( 'id' => $row['id'], @@ -215,7 +217,7 @@ function getCommentFeedTotal($blogid, $rawMode = false, $mode = 'rss') { $channel = initializeRSSchannel($blogid); $channel['title'] = $blog['title']. ': '._text('최근 댓글 목록'); - $result = getRecentComments($blogid, getBlogSetting('commentsOnRSS',20), false, true); + $result = getRecentComments($blogid, Setting::getBlogSettingGlobal('commentsOnRSS',20), false, true); if (!$result) $result = array(); @@ -299,7 +301,7 @@ function getTrackbackFeedTotal($blogid, $rawMode = false, $mode = 'rss') { if(empty($blogid)) $blogid = getBlogId(); $channel = initializeRSSchannel($blogid); $channel['title'] = RSSMessage($blog['title']. ': '._text('최근 트랙백 목록')); - $result = getRecentTrackbacks($blogid, getBlogSetting('commentsOnRSS',20), true); + $result = getRecentTrackbacks($blogid, Setting::getBlogSettingGlobal('commentsOnRSS',20), true); if (!$result) $result = array(); @@ -417,6 +419,71 @@ function getCommentNotifiedFeedTotal($blogid, $mode = 'rss') { return false; } +function getTagFeedByTagId($blogid, $tagId, $mode = 'rss', $tagTitle = null) { + + global $database, $serviceURL, $defaultURL, $blog, $service; + $channel = array(); + $channel = initializeRSSchannel($blogid); + $entries = POD::queryAll("SELECT + e.*, + c.name AS categoryName, + u.name AS author + FROM {$database['prefix']}Entries e + LEFT JOIN {$database['prefix']}Categories c + ON e.blogid = c.blogid AND e.category = c.id + LEFT JOIN {$database['prefix']}Users u + ON e.userid = u.userid + LEFT JOIN {$database['prefix']}TagRelations t + ON e.id = t.entry AND e.blogid = t.blogid + WHERE e.blogid = $blogid AND e.draft = 0 AND e.visibility >= ".($blog['publishEolinSyncOnRSS'] ? '2' : '3')." AND c.visibility > 1 AND t.tag = $tagId + ORDER BY e.published + DESC LIMIT {$blog['entriesOnRSS']}"); + if (!$entries) + $entries = array(); + + $channel['items'] = getFeedItemByEntries($entries); + if(!is_null($tagTitle)) { + $channel['title'] = RSSMessage($blog['title']. ': '._textf('%1 태그 글 목록',htmlspecialchars($tagTitle))); + } + $rss = array('channel' => $channel); + + if($mode == 'rss') return publishRSS($blogid, $rss); + else if($mode == 'atom') return publishATOM($blogid, $rss); + return false; +} + +function getSearchFeedByKeyword($blogid, $search, $mode = 'rss', $title = null) { + + global $database, $serviceURL, $defaultURL, $blog, $service; + $channel = array(); + $channel = initializeRSSchannel($blogid); + $search = escapeSearchString($search); + $entries = POD::queryAll("SELECT + e.*, + c.name AS categoryName, + u.name AS author + FROM {$database['prefix']}Entries e + LEFT JOIN {$database['prefix']}Categories c + ON e.blogid = c.blogid AND e.category = c.id + LEFT JOIN {$database['prefix']}Users u + ON e.userid = u.userid + WHERE e.blogid = $blogid AND e.draft = 0 AND e.visibility >= ".($blog['publishEolinSyncOnRSS'] ? '2' : '3')." AND c.visibility > 1 AND (e.title LIKE '%$search%' OR e.content LIKE '%$search%') + ORDER BY e.published + DESC LIMIT {$blog['entriesOnRSS']}"); + if (!$entries) + $entries = array(); + + $channel['items'] = getFeedItemByEntries($entries); + if(!is_null($title)) { + $channel['title'] = RSSMessage($blog['title']. ': '._textf('%1 이 포함된 글 목록',htmlspecialchars($title))); + } + $rss = array('channel' => $channel); + + if($mode == 'rss') return publishRSS($blogid, $rss); + else if($mode == 'atom') return publishATOM($blogid, $rss); + return false; +} + function getCategoryFeedByCategoryId($blogid, $categoryIds, $mode = 'rss', $categoryTitle = null) { global $database, $serviceURL, $defaultURL, $blog, $service; @@ -446,7 +513,6 @@ function getCategoryFeedByCategoryId($blogid, $categoryIds, $mode = 'rss', $cate else if($mode == 'atom') return publishATOM($blogid, $rss); return false; } - function getLinesFeed($blogid, $category = 'public', $mode = 'atom') { global $blog; $channel = array(); @@ -469,7 +535,7 @@ function getLinesFeed($blogid, $category = 'public', $mode = 'atom') { } function publishRSS($blogid, $data) { - global $blog; + $context = Model_Context::getInstance(); $blogid = getBlogId(); ob_start(); echo '', CRLF; @@ -482,7 +548,7 @@ function publishRSS($blogid, $data) { echo ' ', Timestamp::getRFC1123($data['channel']['pubDate']), '', CRLF; echo ' ', $data['channel']['generator'], '', CRLF; - if (!empty($blog['logo']) && file_exists(ROOT."/attach/$blogid/{$blog['logo']}")) { + if ($context->getProperty('blog.logo') && file_exists(ROOT."/attach/$blogid/{$context->getProperty('blog.logo')}")) { echo ' ', CRLF; echo ' ', htmlspecialchars($data['channel']['title'], ENT_QUOTES), '', CRLF; echo ' ', $data['channel']['url'], '', CRLF; diff --git a/library/model/blog.response.remote.php b/library/model/blog.response.remote.php index b8f045a5b..37f22a949 100644 --- a/library/model/blog.response.remote.php +++ b/library/model/blog.response.remote.php @@ -338,7 +338,7 @@ function sendTrackback($blogid, $entryId, $url) { if (is_null($entry)) return false; $link = "$defaultURL/$entryId"; - $title = fireEvent('ViewPostTitle', $entry['title'], $entry['id']); + $title = htmlspecialchars($entry['title']); $entry['content'] = getEntryContentView($blogid, $entryId, $entry['content'], $entry['contentformatter'], getKeywordNames($blogid)); $excerpt = str_tag_on(UTF8::lessen(removeAllTags(stripHTML($entry['content'])), 255)); $blogTitle = $blog['title']; diff --git a/library/model/blog.service.php b/library/model/blog.service.php index a810ccd99..97261f9ba 100644 --- a/library/model/blog.service.php +++ b/library/model/blog.service.php @@ -21,7 +21,7 @@ function getBlogidBySecondaryDomain($domain) { return POD::queryCell("SELECT blogid FROM {$database['prefix']}BlogSettings WHERE name = 'secondaryDomain' AND (value = '$domain' OR value = '" . (substr($domain, 0, 4) == 'www.' ? substr($domain, 4) : 'www.' . $domain) . "')"); } -function getBlogSettings($blogid) { +function getBlogSettingGlobals($blogid) { return Setting::getBlogSettingsGlobal($blogid); } diff --git a/library/model/blog.sidebar.php b/library/model/blog.sidebar.php index a10e5e283..0041c62ec 100644 --- a/library/model/blog.sidebar.php +++ b/library/model/blog.sidebar.php @@ -4,7 +4,7 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) function getSidebarModuleOrderData($sidebarCount) { - if (!is_null($tempValue = getBlogSetting("sidebarOrder", NULL))) { + if (!is_null($tempValue = Setting::getBlogSettingGlobal("sidebarOrder", NULL))) { $emptyArray = unserialize($tempValue); } else { $emptyArray = false; @@ -53,7 +53,7 @@ function addSidebarModuleOrderData($dataArray, $sidebarNumber, $modulePos, $newM if ($matched == false) return null; } - Skin::purgeCache(); + CacheControl::flushSkin(); $gCacheStorage->purge(); return $dataArray; } @@ -65,7 +65,7 @@ function deleteSidebarModuleOrderData($dataArray, $sidebarNumber, $modulePos) { array_splice($dataArray[$sidebarNumber], $modulePos, 1); - Skin::purgeCache(); + CacheControl::flushSkin(); $gCacheStorage->purge(); return $dataArray; } diff --git a/library/model/blog.skin.php b/library/model/blog.skin.php index a06557275..f306d9ead 100644 --- a/library/model/blog.skin.php +++ b/library/model/blog.skin.php @@ -4,7 +4,6 @@ /// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT) function setTreeSetting($blogid, $setting) { - global $database; requireLibrary('blog.skin'); if(empty($setting['showValueOnTree'])) $setting['showValueOnTree'] = 0; @@ -12,41 +11,43 @@ function setTreeSetting($blogid, $setting) { foreach ($setting as $key => $value) { Setting::setSkinSetting($key, $value, $blogid); } - Skin::purgeCache(); + CacheControl::flushSkin(); Setting::getSkinSettings($blogid, true); // refresh skin cache return true; } function reloadSkin($blogid) { - global $database, $service; - $skinSetting = Setting::getSkinSettings($blogid); - $skinName = $skinSetting['skin']; + $context = Model_Context::getInstance(); + $skinName = $context->getProperty('skin.skin'); if (file_exists(ROOT . "/skin/$skinName/index.xml")) { $xml = file_get_contents(ROOT . "/skin/$skinName/index.xml"); $xmls = new XMLStruct(); - if (!$xmls->open($xml, $service['encoding'])) + if (!$xmls->open($xml, $context->getProperty('service.encoding'))) return; $value = $xmls->getValue('/skin/default/commentMessage/none'); if (is_null($value)) - setBlogSetting('noneCommentMessage', NULL); + Setting::setBlogSetting('noneCommentMessage', NULL, true); else - setBlogSetting('noneCommentMessage', $value); + Setting::setBlogSetting('noneCommentMessage', $value, true); + $value = $xmls->getValue('/skin/default/commentMessage/single'); if (is_null($value)) - setBlogSetting('singleCommentMessage', NULL); + Setting::setBlogSetting('singleCommentMessage', NULL, true); else - setBlogSetting('singleCommentMessage', $value); + Setting::setBlogSetting('singleCommentMessage', $value, true); + $value = $xmls->getValue('/skin/default/trackbackMessage/none'); if (is_null($value)) - setBlogSetting('noneTrackbackMessage', NULL); + Setting::setBlogSetting('noneTrackbackMessage', NULL, true); else - setBlogSetting('noneTrackbackMessage', $value); + Setting::setBlogSetting('noneTrackbackMessage', $value, true); + $value = $xmls->getValue('/skin/default/trackbackMessage/single'); if (is_null($value)) - setBlogSetting('singleTrackbackMessage', NULL); + Setting::setBlogSetting('singleTrackbackMessage', NULL, true); else - setBlogSetting('singleTrackbackMessage', $value); + Setting::setBlogSetting('singleTrackbackMessage', $value, true); } } @@ -76,75 +77,99 @@ function selectSkin($blogid, $skinName) { $value = $xmls->getValue('/skin/default/recentEntries'); if (!empty($value) || is_numeric($value)) $assignments['entriesOnRecent'] = $value; + $value = $xmls->getValue('/skin/default/recentComments'); if (!empty($value) || is_numeric($value)) $assignments['commentsOnRecent'] = $value; + $value = $xmls->getValue('/skin/default/itemsOnGuestbook'); if (!empty($value) || is_numeric($value)) $assignments['commentsOnGuestbook'] = $value; + $value = $xmls->getValue('/skin/default/tagsInCloud'); if (!empty($value) || is_numeric($value)) $assignments['tagsOnTagbox'] = $value; + $value = $xmls->getValue('/skin/default/sortInCloud'); if (!empty($value) || is_numeric($value)) $assignments['tagboxAlign'] = $value; + $value = $xmls->getValue('/skin/default/recentTrackbacks'); if (!empty($value) || is_numeric($value)) $assignments['trackbacksOnRecent'] = $value; + $value = $xmls->getValue('/skin/default/expandComment'); if (isset($value)) $assignments['expandComment'] = ($value ? '1' : '0'); + $value = $xmls->getValue('/skin/default/expandTrackback'); if (isset($value)) $assignments['expandTrackback'] = ($value ? '1' : '0'); + $value = $xmls->getValue('/skin/default/lengthOfRecentNotice'); if (!empty($value) || is_numeric($value)) $assignments['recentNoticeLength'] = $value; + $value = $xmls->getValue('/skin/default/lengthOfRecentEntry'); if (!empty($value) || is_numeric($value)) $assignments['recentEntryLength'] = $value; + $value = $xmls->getValue('/skin/default/lengthOfRecentComment'); if (!empty($value) || is_numeric($value)) $assignments['recentCommentLength'] = $value; + $value = $xmls->getValue('/skin/default/lengthOfRecentTrackback'); if (!empty($value) || is_numeric($value)) $assignments['recentTrackbackLength'] = $value; + $value = $xmls->getValue('/skin/default/lengthOfLink'); if (!empty($value) || is_numeric($value)) $assignments['linkLength'] = $value; + $value = $xmls->getValue('/skin/default/showListOnCategory'); if (isset($value)) $assignments['showListOnCategory'] = $value; + $value = $xmls->getValue('/skin/default/showListOnArchive'); if (isset($value)) $assignments['showListOnArchive'] = $value; + $value = $xmls->getValue('/skin/default/showListOnTag'); if (isset($value)) $assignments['showListOnTag'] = $value; + $value = $xmls->getValue('/skin/default/showListOnSearch'); if (isset($value)) $assignments['showListOnSearch'] = $value; + $value = $xmls->getValue('/skin/default/showListOnAuthor'); if (isset($value)) $assignments['showListOnAuthor'] = $value; + $value = $xmls->getValue('/skin/default/tree/color'); if (isset($value)) $assignments['colorOnTree'] = $value; + $value = $xmls->getValue('/skin/default/tree/bgColor'); if (isset($value)) $assignments['bgcolorOnTree'] = $value; + $value = $xmls->getValue('/skin/default/tree/activeColor'); if (isset($value)) $assignments['activecolorOnTree'] = $value; + $value = $xmls->getValue('/skin/default/tree/activeBgColor'); if (isset($value)) $assignments['activebgcolorOnTree'] = $value; + $value = $xmls->getValue('/skin/default/tree/labelLength'); if (!empty($value) || is_numeric($value)) $assignments['labelLengthOnTree'] = $value; + $value = $xmls->getValue('/skin/default/tree/showValue'); if (isset($value)) $assignments['showValueOnTree'] = ($value ? '1' : '0'); + foreach($assignments as $name => $value) { Setting::setSkinSetting($name, $value, $blogid); } @@ -178,9 +203,9 @@ function selectSkin($blogid, $skinName) { Setting::setSkinSetting('skin',$skinName, $blogid); } - Setting::removeBlogSetting("sidebarOrder"); + Setting::removeBlogSetting("sidebarOrder",true); CacheControl::flushAll(); - Skin::purgeCache(); + CacheControl::flushSkin(); Path::removeFiles(ROOT . "/skin/blog/customize/".getBlogId()."/"); Setting::getSkinSettings($blogid, true); // refresh skin cache return true; @@ -220,7 +245,7 @@ function writeSkinHtml($blogid, $contents, $mode, $file) { fclose($handler); @chmod(ROOT . "/skin/blog/customize/$blogid/$file", 0666); CacheControl::flushAll(); - Skin::purgeCache(); + CacheControl::flushSkin(); return true; } } @@ -259,7 +284,7 @@ function setSkinSetting($blogid, $setting) { Setting::setBlogSetting('entriesOnList',$setting['entriesOnList'],true); CacheControl::flushCategory(); CacheControl::flushTag(); - Skin::purgeCache(); + CacheControl::flushSkin(); Setting::getSkinSettings($blogid, true); // refresh skin cache return true; } diff --git a/library/model/blog.tag.php b/library/model/blog.tag.php index 94079d300..724f053f1 100644 --- a/library/model/blog.tag.php +++ b/library/model/blog.tag.php @@ -219,7 +219,7 @@ function addTag($blogid, $name) { $tagId = getTagId($blogid,$name); if(empty($tagId)) { $query = DBModel::getInstance(); - $query->reset($database['prefix']."Tags"); + $query->reset("Tags"); $insertId = Tag::_getMaxId()+1; $query->setAttribute('id',$insertId); $query->setAttribute('name',$name,true); @@ -237,7 +237,7 @@ function renameTag($blogid, $id, $name) { $oldTagId = $id; $newTagId = addTag($blogid, $name); $query = DBModel::getInstance(); - $query->reset($database['prefix']."TagRelations"); + $query->reset("TagRelations"); $query->setAttribute('tag',$newTagId); $query->setQualifier('blogid','equals',$blogid); $query->setQualifier('tag','equals',$oldTagId); diff --git a/library/model/common.module.php b/library/model/common.module.php index 0745f0879..8715f0fd6 100644 --- a/library/model/common.module.php +++ b/library/model/common.module.php @@ -9,7 +9,7 @@ function getDefaultEditor() { global $editorMapping; reset($editorMapping); - return getBlogSetting('defaultEditor', key($editorMapping)); + return Setting::getBlogSettingGlobal('defaultEditor', key($editorMapping)); } function& getAllEditors() { global $editorMapping; return $editorMapping; } @@ -35,7 +35,7 @@ function getEditorInfo($editor) { function getDefaultFormatter() { global $formatterMapping; reset($formatterMapping); - return getBlogSetting('defaultFormatter', key($formatterMapping)); + return Setting::getBlogSettingGlobal('defaultFormatter', key($formatterMapping)); } function& getAllFormatters() { global $formatterMapping; return $formatterMapping; } diff --git a/library/model/common.plugin.php b/library/model/common.plugin.php index e35605144..486cd5eb6 100644 --- a/library/model/common.plugin.php +++ b/library/model/common.plugin.php @@ -471,7 +471,7 @@ function handleSidebars(& $sval, & $obj, $previewMode) { if (count($newSidebarAllOrders) > 0) { if (($previewMode == false) && !is_null($sidebarAllOrders)) { setBlogSetting("sidebarOrder", serialize($sidebarAllOrders)); - Skin::purgeCache(); + CacheControl::flushSkin(); } } } diff --git a/library/model/common.setting.php b/library/model/common.setting.php index 16460d748..c831abc20 100644 --- a/library/model/common.setting.php +++ b/library/model/common.setting.php @@ -68,8 +68,8 @@ function removeUserSetting($name, $userid = null) { function getDefinedTableNames() { global $database; $prefix = $database['prefix']; - $definedTables = array(" - {$prefix}Attachments", + $definedTables = array( + "{$prefix}Attachments", "{$prefix}BlogSettings", "{$prefix}BlogStatistics", "{$prefix}Categories", @@ -89,6 +89,7 @@ function getDefinedTableNames() { "{$prefix}FeedSettings", "{$prefix}FeedStarred", "{$prefix}Filters", + "{$prefix}Lines", "{$prefix}Links", "{$prefix}LinkCategories", "{$prefix}PageCacheLog", diff --git a/library/view/replyEditorView.php b/library/view/replyEditorView.php index 200988eb6..1a77ffeb6 100644 --- a/library/view/replyEditorView.php +++ b/library/view/replyEditorView.php @@ -68,7 +68,7 @@ function submitComment() { oForm.submit(); } function confirmOverwrite() { - return confirm(""); + return confirm(""); } //]]> diff --git a/library/view/view.php b/library/view/view.php index 28362d02f..c51ce17ce 100644 --- a/library/view/view.php +++ b/library/view/view.php @@ -441,10 +441,10 @@ function getCommentView($entry, $skin) { } if ($useForm == true) { - dress($prefix1 . '_input_form', "
" . $commentView . '
', $commentRrevView); + dress($prefix1 . '_input_form', "
" . $commentView . '
', $commentRrevView); $commentView = $commentRrevView; } else { - $commentView = "
" . $commentView . '
'; + $commentView = "
" . $commentView . '
'; } return $commentView; diff --git a/plugins/CL_Moblog/index.php b/plugins/CL_Moblog/index.php index 8bd8b8671..5097b7f58 100644 --- a/plugins/CL_Moblog/index.php +++ b/plugins/CL_Moblog/index.php @@ -157,7 +157,7 @@ function _getDecoratedContent( & $mail, $docid ) { function statCallback( $total, $totalsize ) { $this->log( "* ".sprintf( _t("총 %d개의 메시지"),$total) ); - $lastStat = getBlogSetting( 'MmsPop3stat', '' ); + $lastStat = Setting::getBlogSettingGlobal( 'MmsPop3stat', '' ); $stat = "$total $totalsize"; if( $stat == $lastStat ) { $this->log( "* "._t("새로운 메시지가 없습니다") ); @@ -324,18 +324,18 @@ function moblog_check() echo '
  • '; $moblog = new Moblog( array( - 'username' => getBlogSetting( 'MmsPop3Username', '' ), - 'password' => getBlogSetting( 'MmsPop3Password', '' ), - 'host' => getBlogSetting( 'MmsPop3Host', 'localhost' ), - 'port' => getBlogSetting( 'MmsPop3Port', 110 ), - 'ssl' => getBlogSetting( 'MmsPop3Ssl', 0 ), - 'userid' => getBlogSetting( 'MmsPop3Fallbackuserid', 1 ), - 'minsize' => getBlogSetting( 'MmsPop3MinSize', 0 )*1024, - 'visibility' => getBlogSetting( 'MmsPop3Visibility', '2' ), - 'category' => getBlogSetting( 'MmsPop3Category', 0 ), - 'allowonly' => getBlogSetting( 'MmsPop3AllowOnly', '0' ), - 'allow' => getBlogSetting( 'MmsPop3Allow', '' ), - 'subject' => getBlogSetting( 'MmsPop3Subject', '%Y-%M-%D' ) ) + 'username' => Setting::getBlogSettingGlobal( 'MmsPop3Username', '' ), + 'password' => Setting::getBlogSettingGlobal( 'MmsPop3Password', '' ), + 'host' => Setting::getBlogSettingGlobal( 'MmsPop3Host', 'localhost' ), + 'port' => Setting::getBlogSettingGlobal( 'MmsPop3Port', 110 ), + 'ssl' => Setting::getBlogSettingGlobal( 'MmsPop3Ssl', 0 ), + 'userid' => Setting::getBlogSettingGlobal( 'MmsPop3Fallbackuserid', 1 ), + 'minsize' => Setting::getBlogSettingGlobal( 'MmsPop3MinSize', 0 )*1024, + 'visibility' => Setting::getBlogSettingGlobal( 'MmsPop3Visibility', '2' ), + 'category' => Setting::getBlogSettingGlobal( 'MmsPop3Category', 0 ), + 'allowonly' => Setting::getBlogSettingGlobal( 'MmsPop3AllowOnly', '0' ), + 'allow' => Setting::getBlogSettingGlobal( 'MmsPop3Allow', '' ), + 'subject' => Setting::getBlogSettingGlobal( 'MmsPop3Subject', '%Y-%M-%D' ) ) ); $moblog->log( "--BEGIN--" ); $moblog->check(); @@ -373,19 +373,19 @@ function moblog_manage() setBlogSetting( 'MmsPop3Allow', $_POST['pop3allow'] ); setBlogSetting( 'MmsPop3Subject', $_POST['pop3subject'] ); } - $pop3email = getBlogSetting( 'MmsPop3Email', '' ); - $pop3host = getBlogSetting( 'MmsPop3Host', 'localhost' ); - $pop3port = getBlogSetting( 'MmsPop3Port', 110 ); - $pop3ssl = getBlogSetting( 'MmsPop3Ssl', 0 ) ? " checked=1 " : ""; - $pop3username = getBlogSetting( 'MmsPop3Username', '' ); - $pop3password = getBlogSetting( 'MmsPop3Password', '' ); - $pop3minsize = getBlogSetting( 'MmsPop3MinSize', 0 ); - $pop3category = getBlogSetting( 'MmsPop3Category', 0 ); - $pop3fallheadercharset = getBlogSetting( 'MmsPop3Fallbackcharset', 'euc-kr' ); - $pop3visibility = getBlogSetting( 'MmsPop3Visibility', '2' ); - $pop3mmsallowonly = getBlogSetting( 'MmsPop3AllowOnly', '0' ); - $pop3mmsallow = getBlogSetting( 'MmsPop3Allow', '' ); - $pop3subject = getBlogSetting( 'MmsPop3Subject', '%Y-%M-%D' ); + $pop3email = Setting::getBlogSettingGlobal( 'MmsPop3Email', '' ); + $pop3host = Setting::getBlogSettingGlobal( 'MmsPop3Host', 'localhost' ); + $pop3port = Setting::getBlogSettingGlobal( 'MmsPop3Port', 110 ); + $pop3ssl = Setting::getBlogSettingGlobal( 'MmsPop3Ssl', 0 ) ? " checked=1 " : ""; + $pop3username = Setting::getBlogSettingGlobal( 'MmsPop3Username', '' ); + $pop3password = Setting::getBlogSettingGlobal( 'MmsPop3Password', '' ); + $pop3minsize = Setting::getBlogSettingGlobal( 'MmsPop3MinSize', 0 ); + $pop3category = Setting::getBlogSettingGlobal( 'MmsPop3Category', 0 ); + $pop3fallheadercharset = Setting::getBlogSettingGlobal( 'MmsPop3Fallbackcharset', 'euc-kr' ); + $pop3visibility = Setting::getBlogSettingGlobal( 'MmsPop3Visibility', '2' ); + $pop3mmsallowonly = Setting::getBlogSettingGlobal( 'MmsPop3AllowOnly', '0' ); + $pop3mmsallow = Setting::getBlogSettingGlobal( 'MmsPop3Allow', '' ); + $pop3subject = Setting::getBlogSettingGlobal( 'MmsPop3Subject', '%Y-%M-%D' ); ?> diff --git a/plugins/CT_RecentPS_Default/index.php b/plugins/CT_RecentPS_Default/index.php index dc804b1ce..326a75089 100644 --- a/plugins/CT_RecentPS_Default/index.php +++ b/plugins/CT_RecentPS_Default/index.php @@ -8,7 +8,7 @@ Maintainer : Peris, inureyes, graphittie Created at : 2006.7.25 - Last modified at : 2009.8.12 + Last modified at : 2009.10.10 This plugin shows recent entries on 'quilt'. For the detail, visit http://forum.tattersite.com/ko @@ -25,8 +25,8 @@ */ function _getRecentEntries($blogid){ - global $database,$skinSetting; - $query = new DBModel($database['prefix'].'Entries'); + $query = DBModel::getInstance(); + $query->reset('Entries'); $query->setQualifier('blogid','equals',$blogid); $query->setQualifier('draft','equals',0); if(doesHaveOwnership()) { @@ -42,11 +42,12 @@ function _getRecentEntries($blogid){ function _getRecentEntriesView($entries,$template){ global $blogURL,$skinSetting; + $context = Model_Context::getInstance(); ob_start(); foreach($entries as $entry){ $view = $template; - Misc::dress('rctps_rep_link',"$blogURL/{$entry['id']}",$view); - Misc::dress('rctps_rep_edit_link',"$blogURL/owner/entry/edit/{$entry['id']}",$view); + Misc::dress('rctps_rep_link',$context->getProperty('uri.blog')."/".$entry['id'],$view); + Misc::dress('rctps_rep_edit_link',$context->getProperty('uri.blog')."/owner/entry/edit/".$entry['id'],$view); Misc::dress('rctps_rep_title',htmlspecialchars(UTF8::lessenAsEm($entry['title'],30)),$view); Misc::dress('rctps_rep_rp_cnt',"".($entry['comments']>0?"({$entry['comments']})":'').'',$view); print $view; diff --git a/plugins/FM_Markdown/ttml.php b/plugins/FM_Markdown/ttml.php index 482ccce81..86864e40c 100644 --- a/plugins/FM_Markdown/ttml.php +++ b/plugins/FM_Markdown/ttml.php @@ -354,7 +354,7 @@ function FM_TTML_getAttachmentBinder($filename, $property, $folderPath, $folderU $bPassing = false; if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { if (!is_null(getBlogSetting("resamplingDefault"))) { - $waterMarkOn = getBlogSetting("waterMarkDefault", "no"); + $waterMarkOn = Setting::getBlogSettingGlobal("waterMarkDefault", "no"); $exist = preg_match('/class="tt-watermark"/i', $property); if (($waterMarkOn == 'yes') && ($exist == 1)) $bPassing = true; } diff --git a/plugins/FM_Modern/index.php b/plugins/FM_Modern/index.php index 940f51da1..8fa7c0e77 100644 --- a/plugins/FM_Modern/index.php +++ b/plugins/FM_Modern/index.php @@ -30,7 +30,7 @@ function FM_Modern_editorinit(&$editor) { ?> if (typeof(document.execCommand) == "undefined" || !(STD.isIE || STD.isFirefox || (STD.isWebkit && STD.engineVersion >= 419.3))) return null; var editor = new TTModernEditor(); - editor.fixPosition = ; + editor.fixPosition = ; editor.hasGD = ; editor.propertyFilePath = "/attach//"; editor.editMode = ""; diff --git a/plugins/FM_TTML/ttml.php b/plugins/FM_TTML/ttml.php index fdc51572f..cb1239e90 100644 --- a/plugins/FM_TTML/ttml.php +++ b/plugins/FM_TTML/ttml.php @@ -354,7 +354,7 @@ function FM_TTML_getAttachmentBinder($filename, $property, $folderPath, $folderU $bPassing = false; if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { if (!is_null(getBlogSetting("resamplingDefault"))) { - $waterMarkOn = getBlogSetting("waterMarkDefault", "no"); + $waterMarkOn = Setting::getBlogSettingGlobal("waterMarkDefault", "no"); $exist = preg_match('/class="tt-watermark"/i', $property); if (($waterMarkOn == 'yes') && ($exist == 1)) $bPassing = true; } diff --git a/plugins/FM_Textile/ttml.php b/plugins/FM_Textile/ttml.php index fdc51572f..cb1239e90 100644 --- a/plugins/FM_Textile/ttml.php +++ b/plugins/FM_Textile/ttml.php @@ -354,7 +354,7 @@ function FM_TTML_getAttachmentBinder($filename, $property, $folderPath, $folderU $bPassing = false; if (defined('__TEXTCUBE_MOBILE__') || defined('__TEXTCUBE_IPHONE__')) { if (!is_null(getBlogSetting("resamplingDefault"))) { - $waterMarkOn = getBlogSetting("waterMarkDefault", "no"); + $waterMarkOn = Setting::getBlogSettingGlobal("waterMarkDefault", "no"); $exist = preg_match('/class="tt-watermark"/i', $property); if (($waterMarkOn == 'yes') && ($exist == 1)) $bPassing = true; } diff --git a/resources/control/basic.css b/resources/control/basic.css new file mode 100644 index 000000000..ede928a1a --- /dev/null +++ b/resources/control/basic.css @@ -0,0 +1,1330 @@ +@charset "utf-8"; + +/* Basic Tag *************************************************************************************/ + +* +{ + margin : 0; + padding : 0; +} + +a:link, a:visited +{ + color : #666666; + text-decoration : none; +} + +a:hover, a:active +{ + color : #4163A2; + text-decoration : underline; +} + +abbr, acronym +{ + cursor : help; +} + +address +{ + font-style: normal; +} + +body +{ + background-color : #fff; + color : #666666; + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + font-size : small; + margin : 0 10px 0 10px; +} + +dl +{ + position : relative; +} + +dl dt +{ + font-weight : bold; + left : 0; + line-height : 2em; + position : absolute; + text-align : left; + top : 0; +} + +dl dd +{ + line-height : 2em; + margin-left : 100px; + text-align : left; +} + +em +{ + font-style : normal; +} + +fieldset +{ + background-image : url("./image/bg_dt.png"); + background-repeat : repeat-y; + border-bottom : 1px solid #DDDDDD; + border-left : none; + border-right : none; + border-top : 1px solid #CCCCCC; + /*float : left;*/ + margin : 0 0 30px 0; + /*width : 460px;*/ +} + +h1, +h2 +{ + display : none; +} + +h3 +{ + font-size : 1em; +} + +input +{ + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + background : -webkit-gradient(linear, left top, 0 10, from(#eee), to(#fff)); + -webkit-background-origin : padding-box; + -webkit-background-clip : content-box; +} + +label +{ + cursor : pointer; +} + +legend +{ + display : none; +} + +ol, +ol li, +ul, +ul li +{ + list-style-type : none; +} + +optgroup +{ + font-style : normal; + padding : 0 5px; +} + +optgroup option +{ + padding : 0 15px; +} + +optgroup.delete option +{ + color : #FF0000; +} + +option +{ + padding-right : 0.5em; +} + +kbd, samp +{ + font-family : "Courier New", Courier, AppleGothic, '굴림', Gulim, monospace; + font-size : 11px; /* Sarafi에서 상대크기를 제대로 인식하지 못함. */ +} + +select +{ + font-size : 1em; + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + vertical-align : middle; +} + +table +{ + border-collapse : collapse; +} + +textarea +{ + border : 1px solid #999999; + font-size : 1em; + padding : 2px; +} + +/* Layout ****************************************************************************************/ + +#temp-wrap +{ + width : 100%; +} + +#all-wrap +{ + font-size : 0.925em; + text-align : justify; +} + +/* Layout Header **********************************************************************************/ + +/* main description */ +#main-description-box +{ + height : 49px; + position : relative; +} + +#main-description +{ + bottom : 5px; + right : 10px; + position : absolute; + text-align : right; + width : 100%; +} + +#main-description li +{ + display : inline; + line-height : 33px; +} + +#description-blogger +{ + float : left; + margin-left : 210px; +} + +/* main action box */ + +#main-action-box +{ + padding-right : 11px; + position : absolute; + right : 0; + top : 15px; +} + +#main-action li +{ + float : left; + display : block; +} + +#action-helper +{ + background-image : url("./image/bg_menu_right.png") !important; + background-position : right top !important; + background-repeat : no-repeat; + height : 40px; + line-height : 3em; + position : absolute; + right : 0; + top : 35px; + padding : 0 26px 0 16px !important; + z-index : 450; +} + +#action-helper a +{ + background-image : url("./image/img_helper.gif"); + background-position : right center; + background-repeat : no-repeat; + color : #DDE5F1; + font-family : Dotum, AppleGothic, '굴림', Gulim, sans-serif; + font-size : 0.9em; + padding : 0 16px !important; +} + +#action-move-to-control-panel a +{ + background-image : url("./image/img_to_control_panel.gif"); + background-position : right center; + background-repeat : no-repeat; + color : #222; + padding : 4px 20px 0 10px; +} + +#action-move-to-blog a +{ + background-image : url("./image/img_to_my_blog.gif"); + background-position : right center; + background-repeat : no-repeat; + color : #222; + padding : 4px 20px 0 10px; +} + +#action-logout a +{ + background-image : url("./image/img_logout.gif"); + background-position : right center; + background-repeat : no-repeat; + color : #222; + padding : 4px 20px 0 10px; +} + +/* main blog box */ +#main-blog-box +{ + right : 200px; + position : absolute; + top : 13px; +} + +/* main menu */ +#main-menu-box +{ + background-image : url("./image/bg_menu.png"); + background-position : left top; + background-repeat : repeat-x; + background-color : #333333; + height : 40px; + line-height : 3em; + margin-top : 1px; +} + +#main-menu +{ + background-image : url("./image/bg_menu_left.png"); + background-position : left top; + background-repeat : no-repeat; + height : 40px; + width : 100%; +} + +#main-menu li +{ + float : left; + position : relative; + height : 40px; + z-index : 400; /* Workaround for IE6 positioned element bug */ + margin : 0 3px; + padding : 0 8px; +} + +#main-menu li a:link, +#main-menu li a:visited +{ + color : #FFFFFF; + text-decoration : none; +} + +#main-menu li a:hover, +#main-menu li a:active +{ + text-decoration : none; +} + +#main-menu li.selected +{ + color : #ADFF2F; +} + +#main-menu li.selected a +{ + color : #ADFF2F !important; +} + +#main-menu li:hover a, +#main-menu li a:hover +{ + color : #FAFAA0; +} + +#main-menu ul.sub-menu +{ + display : none; + border : none; +} + +#main-menu li:hover ul, +#main-menu li a:hover table +{ + display : block !important; + width : 150px; + color : #222; + position : absolute; + z-index : 100 !important; + top : 40px; + left : 0; + border : solid 1px #CCC; + background-color : #EEE; + background-image : url("./image/bg_menu_selected.png"); + background-repeat : no-repeat; + filter : alpha(opacity=90); + opacity : .90; + background-position : -130px -33px; + padding-bottom : 10px; + -moz-box-shadow : 5px 5px 5px #888; + -webkit-box-shadow : 5px 5px 5px #888; + -moz-border-radius-bottomleft : 8px; + -moz-border-radius-bottomright : 8px; + -webkit-border-bottom-left-radius : 8px; + -webkit-border-bottom-right-radius : 8px; +} + +#main-menu li:hover ul:hover, +#main-menu li a:hover ul +{ + display : block; + float : none; + margin : 0; +} + +#main-menu li:hover ul li.firstChild, +#main-menu li a:hover ul li.firstChild +{ + margin-top : 5px; +} + +#main-menu li:hover ul li.selected, +#main-menu li a:hover ul li.selected +{ + font-weight : bold; +} + +#main-menu li:hover ul li, +#main-menu li a:hover ul li +{ + display : block; + width : 125px; + height : 27px; + background-image : none !important; + border : 1px solid #EEE; +} + +#main-menu li:hover ul li:hover, +#main-menu li a:hover ul li a:hover +{ + background-color : #CCC; + padding-left : 5px; + border : 1px solid #BBB; + border-radius : 5px; + -moz-border-radius : 5px; + -webkit-border-radius : 5px; +} + +#main-menu li:hover ul li a:link, +#main-menu li:hover ul li a:visited, +#main-menu li a:hover ul li a:link, +#main-menu li a:hover ul li a:visited +{ + color : #222 !important; + display : block; + line-height : 27px; +} + +#menu-center, +#menu-control +{ + margin-left : 200px !important; +} + +#main-menu #menu-textcube +{ + background-image : url("./image/img_header_textcube.png"); + background-repeat : no-repeat; + height : 75px; + left : 0; + margin : 0 !important; + padding : 0 !important; + position : absolute; + text-indent : -1000px; + top : 8px; + width : 180px; + z-index : 100; +} + +#menu-textcube a +{ + display : block; + height : 75px; + width : 180px; +} + +#main-menu li.divider +{ + height : 3px !important; + border-bottom : 1px solid #BBB !important; +} + +#main-menu li.divider span, +#sub-menu li.divider +{ + display : none; +} + +/* Layout Body ***********************************************************************************/ + +#sub-menu-box +{ + clear : both; + height : 0.4em; + line-height : 2.4em; + padding-left : 200px; +} + +#sub-menu +{ + display : none; +} + +/* pseudo box */ +#pseudo-box +{ + background-color : #FFF; + background-image : url("./image/bg_body_top.png"); + background-position : left top; + background-repeat : repeat-x; + border-left : 1px solid #BBB; + border-right : 1px solid #BBB; + margin : 0 auto; + position : relative; + width : 980px; +} + +#data-outbox +{ + padding : 10px; +} + +.part .caption, +h2.caption +{ + background-color : #FFF; + background-image : url("./image/bg_title_left.png"); + background-position : left top; + background-repeat : no-repeat; + clear : both; + color : #222; + display : block; + height : 38px; + font-size : 1em; + font-weight : normal; + line-height : 38px; + margin-bottom : 10px; + overflow : hidden; + padding-left : 60px; +} + +.part .caption span, +h2.caption span +{ + background-color : #FFF; + background-image : url("./image/bg_title_right.png"); + background-position : right top; + background-repeat : repeat-x; + display : block; + height : 38px; + line-height : 38px; +} + +.part .panel-setting +{ + margin : -50px 10px 0 0; +} + +.part dl.panel-setting +{ + border-top : none !important; + height : 38px; +} + +.part .panel-setting dd +{ + color : #222; + text-align : right; +} + +.part .panel-setting a +{ + color : #22A; + text-align : right; +} + +.part .panel-setting dt +{ + display : none; +} + +.main-explain-box .explain +{ + line-height : 1.5em; + margin-bottom : 30px; + padding : 0 20px; +} + +.main-explain-box .explain a:link, +.main-explain-box .explain a:visited +{ + color : #FF6600; + text-decoration : underline; +} + +.main-explain-box .explain a:hover, +.main-explain-box .explain a:active +{ + color : #FC924B; + text-decoration : underline; +} +/* preventing IE overflow:visible bug */ +.folding +{ + position : relative; +} +/* tab */ +.tabs-box +{ + background-image : url('./image/bg_tabbox.jpg'); + background-position : left bottom; + line-height : 2.3em; + list-style-type : none; + height : 2.55em; + overflow : hidden; + padding-left : 10px; +} +.tabs-box li +{ + background-image : url("./image/bg_submenu_item_selected.gif"); + background-color : #EFEFEF; + border : 1px solid #D9D9D9; + border-bottom : 1px solid #B9B9B9; + cursor : pointer; + display : block; + float : left; + list-style-type : none; + margin : 0 1px; +} + +.right li +{ + float : right !important; +} + +.tabs-box li a +{ + padding : 0 1em; + text-decoration : none; +} + +.tabs-box li.selected +{ + background-image : none; + background-color : #FFF; + border-bottom : 1px solid #FFF; +} + +.tabs-box li.selected a +{ + cursor : default; +} + +/* category form */ +#category-form +{ + margin : 20px 0 6px 15px; +} + +/* data inbox */ +.data-inbox +{ + margin : 2px 10px; + width : 940px; +} + +table.data-inbox thead tr th +{ + background-color : #F3F3F1; + border-bottom : 1px solid #D2D2CC; + border-top : 1px solid #D2D2CC; + color : #333333; + font-weight : normal; + padding : 6px 0; + text-align : center; +} + +table.data-inbox tbody tr td +{ + border-bottom : 1px solid #E3E3DE; + padding : 6px 8px; + text-align : center; +} + +table.data-inbox tbody tr.active-class +{ + background-color : #EFF6FF; +} + +table.data-inbox tr .selection +{ + background-position : right bottom; + padding-left : 0; + padding-right : 0; + width : 30px; +} + +/* icons in table.data-inbox */ +table.data-inbox tbody tr .status .private-on-icon +{ + background-image : url("./image/icon_private.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .private-off-icon +{ + background-image : url("./image/icon_private.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .private-off-icon a +{ + background-image : url("./image/icon_private.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + width : 15px; +} + +table.data-inbox tbody tr .status .private-on-icon span, +table.data-inbox tbody tr .status .private-off-icon span +{ + display : none; +} + +table.data-inbox tbody tr .status .protected-on-icon +{ + background-image : url("./image/icon_protected.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .protected-off-icon +{ + background-image : url("./image/icon_protected.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .protected-off-icon a +{ + background-image : url("./image/icon_protected.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + width : 15px; +} + +table.data-inbox tbody tr .status .protected-on-icon a +{ + background-image : url("./image/icon_protected.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + width : 15px; +} +table.data-inbox tbody tr .status .protected-on-icon span, +table.data-inbox tbody tr .status .protected-off-icon span +{ + display : none; +} + +table.data-inbox tbody tr.keyword-line .status .protected-off-icon, +table.data-inbox tbody tr.notice-line .status .protected-off-icon +{ + background-image : none; +} + +table.data-inbox tbody tr.keyword-line .status .protected-off-icon a, +table.data-inbox tbody tr.notice-line .status .protected-off-icon a +{ + display : none; +} + +table.data-inbox tbody tr.keyword-line .syndicate .syndicated-off-icon a, +table.data-inbox tbody tr.notice-line .syndicate .syndicated-off-icon a +{ + display : none; +} + +table.data-inbox tbody tr .status .public-on-icon +{ + background-image : url("./image/icon_public.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .public-off-icon +{ + background-image : url("./image/icon_public.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + float : left; + height : 15px; + margin-right : 2px; + width : 15px; +} + +table.data-inbox tbody tr .status .public-off-icon a +{ + background-image : url("./image/icon_public.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + height : 15px; + width : 15px; +} + +table.data-inbox tbody tr .status .public-on-icon span, +table.data-inbox tbody tr .status .public-off-icon span +{ + display : none; +} + +table.data-inbox tbody tr .starred .star-icon +{ + background-image : url("./image/icon_starred.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + height : 16px; + margin-right : 2px; + width : 16px; +} + +table.data-inbox tbody tr .starred .unstar-icon +{ + background-image : url("./image/icon_unstarred.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + height : 16px; + margin-right : 2px; + width : 16px; +} + +table.data-inbox tbody tr .starred .star-icon a +{ + background-image : url("./image/icon_starred.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + height : 16px; + width : 16px; +} + +table.data-inbox tbody tr .starred .unstar-icon a +{ + background-image : url("./image/icon_unstarred.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + height : 16px; + width : 16px; +} + +table.data-inbox tbody tr .starred .star-icon span, +table.data-inbox tbody tr .starred .unstar-icon span +{ + display : none; +} + +table.data-inbox tbody tr .syndicate .syndicated-on-icon +{ + background-image : url("./image/icon_syndicated.gif"); + background-position : left bottom; + background-repeat : no-repeat; + display : block; + height : 16px; + width : 16px; +} + +table.data-inbox tbody tr .syndicate .syndicated-off-icon +{ + background-image : url("./image/icon_syndicated.gif"); + background-position : left top; + background-repeat : no-repeat; + display : block; + height : 16px; + width : 16px; +} + +table.data-inbox tbody tr .syndicate .syndicated-off-icon a, +table.data-inbox tbody tr .syndicate .syndicated-on-icon a +{ + display : block; + height : 16px; + width : 16px; +} + +table.data-inbox tbody tr .syndicate .syndicated-off-icon span, +table.data-inbox tbody tr .syndicate .syndicated-on-icon span +{ + display : none; +} + +table.data-inbox tbody tr .protect .protect-on-button +{ + background-color : transparent; + background-image : url("./image/icon_protectedsetting.gif"); + background-position : left bottom; + display : block; + height : 13px; + margin : 0 auto; + padding : 0; + width : 26px; +} + +table.data-inbox tbody tr .protect .protect-off-button +{ + background-color : transparent; + background-image : url("./image/icon_protectedsetting.gif"); + background-position : left top; + display : block; + height : 13px; + margin : 0 auto; + padding : 0; + width : 26px; +} + +table.data-inbox tbody tr .protect .protect-on-button span, +table.data-inbox tbody tr .protect .protect-off-button span +{ + display : none; +} + +table.data-inbox tbody tr .trackback .trackback-on-button +{ + background-image : url("./image/icon_trackback.gif"); + background-position : left top; + display : block; + height : 20px; + margin : 0 auto; + padding : 0; + width : 20px; +} + +table.data-inbox tbody tr .trackback .trackback-off-button +{ + background-image : url("./image/icon_trackback_off.gif"); + background-position : left top; + display : block; + height : 20px; + margin : 0 auto; + padding : 0; + width : 20px; +} + +table.data-inbox tbody tr .trackback .trackback-on-button span, +table.data-inbox tbody tr .trackback .trackback-off-button span +{ + display : none; +} + +table.data-inbox tbody tr .delete .delete-button +{ + background-color : transparent; + background-image : url("./image/icon_delete.gif"); + background-position : left top; + display : block; + height : 11px; + margin : 0 auto; + padding : 0; + width : 11px; +} + +table.data-inbox tbody tr .delete .delete-button span +{ + display : none; +} + +table.data-inbox tbody tr td .block-icon +{ + background-image : url("./image/icon_block_on.gif"); + background-position : left bottom; + display : block; + float : left; + height : 12px; + margin : 0 3px 0 0; + width : 16px; +} + +table.data-inbox tbody tr td .unblock-icon +{ + background-image : url("./image/icon_block_off.gif"); + background-position : left top; + display : block; + float : left; + height : 12px; + margin : 0 3px 0 0; + width : 16px; +} + +table.data-inbox tbody tr td .block-icon span, +table.data-inbox tbody tr td .unblock-icon span +{ + display : none; +} + +/* special columns in table.data-inbox */ +table.data-inbox tbody tr .category, +table.data-inbox tbody tr .title +{ + text-align : left; +} + +/* rollover in table.data-inbox */ +table.data-inbox tbody tr td.rollover-class +{ + background-color : #EEEEEE; +} + +table.data-inbox tbody tr td.inactive-class +{ + background-color : transparent; +} + +/* data subbox */ +.data-subbox +{ + position : relative; +} + +#change-section, +#delete-section +{ + background-color : #EEEEEE; + border-top : 1px solid #BBBBBB; + margin : 0 auto 5px auto; + padding : 8px; + width : 924px; +} + +#change-section-top, +#delete-section-top +{ + background-color : #FFF; + border-top : none; + margin : 0 auto 5px auto; + padding : 8px; + width : 924px; +} + +#page-navigation +{ + background-color : #FFFFFF; + margin : 20px 0 40px 0; + text-align : center; + width : 940px; +} + +#page-navigation span .selected +{ + color : #BBB; +} + +#page-list +{ + display : block; + margin-bottom : 5px; +} + +#page-list a +{ + color : #999999; + padding : 0 1px; +} + +#total-count +{ + color : #999999; +} + +#page-section .page-count +{ + display : block; + position : absolute; + top : 9px; + right : 20px; + text-align : right; +} + +#page-section .page-count select +{ + width : 50px; +} + +#search-form +{ + background-color : transparent; + border : none; + margin : 0; + position : absolute; + right : 25px; + text-align : right; + top : 5.5em; + width : 25em; + z-index : 1; +} + +#search-form label +{ + display : none; +} + +/* Layout Footer *********************************************************************************/ + +#layout-footer +{ + background-image : url("./image/bg_body_bottom.png"); + background-position : left top; + background-repeat : repeat-x; + font-family : Tahoma, sans-serif; + font-size : 0.9em; + margin : 0 auto; + padding : 13px 0 10px 0; + text-align : center; + width : 980px; +} + +#layout-footer div +{ + display : block; +} + +/* Etc *******************************************************************************************/ + +/* data description (for simple help footers) */ +#data-description +{ + text-align : right; +} + +#data-description dl +{ + background-position : left top; + background-repeat : no-repeat; + display : inline; + font-family : 'Lucida Grande', Tahoma, Verdana, sans-serif; + font-size : 0.93em; + font-weight : normal; + padding : 3px 0 1px 29px; +} + +#data-description dl dt +{ + display : none; +} + +#data-description dl dd +{ + display : inline; + margin : 0; + padding-right : 11px; + position : static; +} + +/* eolin suggest */ +.eolinSuggest +{ + background-color : #FFFFFF; + border : 1px solid #BBBBBB; +} + +.eolinSuggest li +{ + margin : 3px; + cursor : pointer; +} + +.eolinSuggest li.hover +{ + background-color : #edf !important; +} + +.eolinSuggest li.disabled +{ + color : #777; +} + +.eolinSuggest +{ + font-size : 9pt; +} + +/* etc */ + +.attention +{ + border : 1px solid #FD2323; + color : #000; + display : block; + font-weight : bold; + padding : 3px; + text-align : center; + vertical-align : middle; +} + +.attention span +{ + background-image : url('./image/icon_alert.gif'); + background-position : left 1px; + background-repeat : no-repeat; + padding-left : 19px; +} + +.hidden +{ + display : none; +} + +.clear +{ + clear : both; + height : 0; + overflow : hidden; +/* width : 100px;*/ +} + +.input-button +{ + background-color : #fff; + background-image : url("./image/bg_submenu_item.gif"); + background-position : left bottom; + background-repeat : repeat-x; + border : 1px solid #777; + border-radius : 5px; + -moz-border-radius : 5px; + -webkit-border-radius : 5px; + cursor : pointer; + font-size : 1em; + height : 1.8em; + line-height : 1.8em; + padding : 0 5px !important; + vertical-align : middle; +} + +.input-button:hover +{ + background-image : url("./image/bg_submenu_item_selected.gif"); + border : 1px solid #333; + -webkit-box-shadow : 0 0 7px #FFE13C; +} + +.wide-button +{ +/* width :100% !important;*/ + +} + +input.checkbox, +input.radio +{ + margin-right : 3px; + vertical-align : middle; +} + +input.input-text +{ + border : 1px solid #777777; + font-size : 1em; + height : 1.3em; + line-height : 1.3em; + padding-top : 3px; + vertical-align : middle; +} + +.button-box +{ + text-align : center; +} + +.button-box a.button +{ + text-decoration : none; +} + +.ajaxMessage +{ + background-repeat: no-repeat; + background-position: center 11px; + font-weight: normal !important; + padding: 27px 25px 13px 25px!important; + color: #000 !important; +} + +.ajaxProcessingMessage, .ajaxSuccessMessage +{ + background-image : url('./image/bg_gray_textcube.gif') !important; + background-color : #dedede !important; + border : 1px solid #999 !important; + color : #000 !important; + filter : alpha(opacity=90); + opacity : .90; +} +.ajaxProcessingMessage +{ + -moz-border-radius-bottomleft : 6px; + -webkit-border-bottom-left-radius: 6px; +} + +.ajaxSuccessMessage, +.ajaxErrorMessage +{ + -moz-border-radius-topleft : 6px; + -moz-border-radius-topright : 6px; + -webkit-border-top-left-radius : 6px; + -webkit-border-top-right-radius : 6px; +} +.ajaxErrorMessage +{ + background-image : url('./image/bg_pink_textcube.gif') !important; + border : 1px solid #ff5f62 !important; + background-color : #fcebeb !important; + color : #000 !important; + filter : alpha(opacity=90); + opacity : .90; +} diff --git a/resources/control/basic.ie.css b/resources/control/basic.ie.css new file mode 100644 index 000000000..2c71f0452 --- /dev/null +++ b/resources/control/basic.ie.css @@ -0,0 +1,100 @@ +@charset "utf-8"; + +/* Layout Header **********************************************************************************/ + +#description-blog +{ + padding-right : 7px; +} + +/* main menu */ +#main-menu-box +{ + height : 40px; + line-height : 3.5em; +} + +#main-menu li, +#main-menu li.selected +{ + height : 40px; +} + +#menu-center +{ + margin-left : 100px !important; +} + +#main-menu table +{ + position : absolute; + top : 0; + left : 0; + border-collapse : collapse; +} + +#main-menu #menu-textcube +{ + background-image : url("./image/img_header_textcube2.png") !important; + background-position: left -8px; + height: 82px; +} + +#sub-menu-helper +{ + height : 40px; + line-height : 3.3em; +} + +/* Layout Body ***********************************************************************************/ + +/* data subbox */ +#page-section .page-count +{ + right : 30px; +} + +.data-subbox .input-button, +#search-form .input-button +{ + line-height : 1.6em !important; +} + +/* Layout Footer *********************************************************************************/ + +#version +{ + padding-left : 3px; +} + +/* Etc *******************************************************************************************/ + +.attention +{ + height : 20px; + line-height : 25px; + overflow : hidden; +} + +.attention span +{ + background-position : left top; +} + +.input-button +{ + height : 1.75em; + /*line-height : 2.4em !important;*/ /* Removed by coolengineer */ + padding : 0 1px !important; +} + +input.checkbox, +input.radio +{ + margin : -3px 0 0 0; +} + +input.input-text +{ + width : 80% !important; +} diff --git a/resources/control/basic.ie7.css b/resources/control/basic.ie7.css new file mode 100644 index 000000000..3533b367d --- /dev/null +++ b/resources/control/basic.ie7.css @@ -0,0 +1,58 @@ +@charset "utf-8"; + +/* Layout Header **********************************************************************************/ + +#description-blog +{ + padding-right : 7px; +} + +/* main menu */ +#main-menu-box +{ + height : 40px; + line-height : 3.5em; +} + +#main-menu li +{ + height : 40px; +} + +#sub-menu-helper +{ + line-height : 3.3em; +} +/* Layout Body ***********************************************************************************/ + +#main-menu li.selected +{ + height : 40px; +} + +#page-section .page-count +{ + top : 8px; +} + +/* Layout Footer *********************************************************************************/ + +#version +{ + padding-left : 3px; +} + +/* Etc *******************************************************************************************/ + +.input-button +{ + height : 1.75em; + line-height : 1.75em; + padding : 0 !important; +} + +input.checkbox, +input.radio +{ + margin : 0; +} diff --git a/resources/control/control.css b/resources/control/control.css new file mode 100644 index 000000000..77a8550b7 --- /dev/null +++ b/resources/control/control.css @@ -0,0 +1,527 @@ +@charset "utf-8"; + +/* Common ****************************************************************************************/ + +.button-box +{ + border-top: 1px solid #ddd !important; + margin-top: 30px; + padding-top: 25px; +} + +.button-box input.input-button +{ + background-color : #FFFFFF; + background-image : none; + border : 1px solid #BBBBBB; + color : #000000; + font-weight : bold; + height : 2.5em; + line-height : 2.5em; + vertical-align : middle; + margin-bottom : 10px; +} + +.button-box a.button +{ + background-color : #fff; + background-image : none; + border : 1px solid #bbb; + color : #000; + font-weight : bold; + height : auto; + line-height : normal; + padding : 10px 10px 8px 10px; + vertical-align : middle; +} + +.warning +{ + color : #FF3333; +} + +fieldset +{ + background-image : none; + border-bottom : none !important; + border-top : none !important; + margin : 0; +} + +dl +{ + border-top : 1px solid #FFFFFF; + border-bottom : 1px solid #FFFFFF; +} + +dl dt +{ + padding : 5px 3px 0 3px; + text-align : right; + width : 210px; +} + +dl dd +{ + line-height : 1.2em; + margin-left : 230px; + padding : 7px 3px 4px 3px; +} + +/* Blog ******************************************************************************************/ + +/* create new blog */ +#part-create-newblog fieldset +{ + background-image: none; + border: none; + margin-bottom: 15px; +} + +#part-create-newblog fieldset dl +{ + padding-top: 10px; + text-align: center; +} + +#part-create-newblog fieldset dl dt +{ + display: inline; + line-height: 15px; + position: static; +} + +#part-create-newblog fieldset dl dd +{ + display: inline; + line-height: 15px; + margin: 0 10px 0 5px; + width: auto; +} + +#part-create-newblog .button-box +{ + margin-bottom: 30px; +} + +/* blog list */ +#part-blog-list .message +{ + color: #f00; + margin-bottom: 10px; + text-align: center; +} + +/* blog in detail */ +#part-blog-about +{ + background-image : url("./image/logo_textcube_full.png"); + background-position : 140px 70px; + background-repeat : no-repeat; + padding-bottom: 50px; +} + +#team-blog-about h3 +{ + font-family : Tahoma, "Lucida Grande", Verdana, sans-serif; + padding-top : 55px; + margin : 30px 0 5px 360px; + text-align : center; + width : 435px; +} + +#team-blog-about .main-explain-box +{ + margin-left : 360px; + padding : 0; + width : 435px; +} + +#team-blog-about .main-explain-box p +{ + border : 1px solid #ddd; + display : block; + margin-top : 20px; + padding : 10px; + text-align : center; +} + +#team-blog-about h3 em, #team-blog-about .main-explain-box p em +{ + font-style: italic; +} + +#part-blog-about ul +{ + list-style-type: disc; + margin-left: 400px; +} + +#part-blog-about ul li +{ + list-style-type: disc; +} + +#part-blog-about ul li em +{ + color: #f00; +} + +#part-blog-about .container h4 +{ + margin: 0 0 5px 13px; +} + +#team-member-list +{ + margin: 50px auto 0 auto; + width: 700px; +} + +#team-member-list h4 +{ + font-size: 1em; +} + +#team-member-list table +{ + width: 700px; +} + +#team-new-member +{ + margin: 20px auto 0 auto; + width: 700px; +} + +#team-new-member h4, #team-new-member dl dt +{ + display: none; +} + +#team-new-member dl dd +{ + margin-left: 0; + text-align: center; +} + +/* User ******************************************************************************************/ + +/* create new user */ +#part-create-newuser fieldset +{ + background-image: none; + border: none; + margin-bottom: 15px; +} + +#part-create-newuser fieldset dl +{ + padding-top: 10px; + text-align: center; +} + +#part-create-newuser fieldset dl dt +{ + display: inline; + line-height: 15px; + position: static; +} + +#part-create-newuser fieldset dl dd +{ + display: inline; + line-height: 15px; + margin: 0 10px 0 5px; + width: auto; +} + +#part-create-newuser .button-box +{ + margin-bottom: 30px; +} + +/* user list */ +#part-user-list .message +{ + color: #f00; + margin-bottom: 10px; + text-align: center; +} + +/* user in detail */ +#part-user-about +{ + background-image : url("./image/logo_textcube_full.png") !important; + background-position : 140px 70px; + background-repeat : no-repeat; + padding-bottom: 50px; +} + +#team-user-about h3 +{ + font-family : Tahoma, "Lucida Grande", Verdana, sans-serif; + padding-top : 55px; + margin : 30px 0 5px 360px; + text-align : center; + width : 435px; +} + +#team-user-about .main-explain-box +{ + margin-left : 360px; + padding : 0; + width : 435px; +} + +#team-user-about .main-explain-box p +{ + border : 1px solid #ddd; + display : block; + margin-top : 20px; + padding : 10px; + text-align : center; +} + +#part-user-about ul +{ + list-style-type: disc; + margin-left: 400px; + padding-bottom: 100px; +} + +#part-user-about ul li +{ + list-style-type: disc; +} + +#part-user-about ul li em +{ + color: #f00; +} + +#part-user-about .container h4 +{ + margin: 0 0 5px 13px; +} + +#team-joined-list +{ + margin: 0 auto; + width: 700px; +} + +#team-joined-list h4 +{ + font-size: 1em; +} + +#team-joined-list table +{ + width: 700px; +} + +/* Add Blog ***************************************************************************************/ +#container-add-blog +{ + margin-bottom : 20px; +} + +/* UserSuggest ************************************************************************************/ +.ctlUserSuggest +{ + background-color : #FFFFFF; + border : 1px solid #BBBBBB; + font-size : 9pt; +} + +.ctlUserSuggest li +{ + margin : 3px; + cursor : pointer; +} + +.ctlUserSuggest li.hover +{ + background-color : #edf !important; +} + +.ctlUserSuggest li.disabled +{ + color : #777; +} + +/* Server ****************************************************************************************/ + +#part-control-config .section +{ + background-color : #FFF; + font-family : Verdana, Arial, Tahoma, "Lucida Grande", sans-serif; + margin : 20px 0 3px 9px; + padding : 7px; +} + +#part-control-config .section dl dt +{ + background-color : #F5F5F5; + border-top : 1px solid #DDD; +} + +#part-control-config .section dl dd +{ + border-top : 1px solid #FFF; +} + +#part-control-config .container +{ + margin-top : 10px; +} + +#part-control-mailhost .button-box +{ + border-top : 1px solid #DDDDDD; + margin : 10px 0 20px 0; + padding-top : 15px; +} + +#part-control-mailhost +{ + margin-bottom: 30px; +} + +#part-control-rewrite textarea +{ + background-color : #FFFFFF; + border : 1px solid #999999; + font-family : Courier, 'Courier New', monospace; + font-size : 12px; + height : 250px; + margin-left : 5px !important; + padding : 0 0 0 2px; + width : 920px !important; +} + + +/* System ****************************************************************************************/ + +/* general information */ +#part-system-generalinfo +{ + margin-bottom: 30px; +} + +#part-system-generalinfo h3 +{ + color: #000; + font-size: 1.2em; + margin: 30px 0 10px 10px; +} + +#part-system-generalinfo h4 +{ + color: #000; + font-size: 1.1em; + margin: 30px 0 10px 10px; +} + +#part-system-generalinfo table +{ + width: 100%; +} + +#part-system-generalinfo table tr th, #part-system-generalinfo table tr td +{ + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; +} + +#part-system-generalinfo table tr th, #part-system-generalinfo table tr td +{ + padding: 5px; + text-align: left; +} + +#part-system-generalinfo table tbody tr th +{ + width: 250px; +} + +/* php information */ +#part-system-phpinfo +{ + margin-bottom: 30px; +} + +#part-system-phpinfo h3 +{ + color: #000; + font-size: 1.2em; + margin: 30px 0 10px 10px; +} + +#part-system-phpinfo h4 +{ + color: #000; + font-size: 1.1em; + margin: 30px 0 0 10px; +} + +#part-system-phpinfo table +{ + margin-top: 10px; + width: 100%; +} + +#part-system-phpinfo table thead +{ + background-color: #efefef; +} + +#part-system-phpinfo table tr th, #part-system-phpinfo table tr td +{ + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; +} + +#part-system-phpinfo table tr th, #part-system-phpinfo table tr td +{ + padding: 5px; + text-align: left; +} + +#part-system-phpinfo table tbody tr th +{ + width: 250px; +} + +#part-system-phpinfo form +{ + margin-top: -37px; + position: relative; + right: 10px; + text-align: right; + z-index: 10; +} + +#part-system-phpinfo form label +{ + display: none; +} + +#PHPLogo +{ + margin-top: 30px; + text-align: center; + width: 150px; +} + +#PHPLogo img +{ + border: none; +} + +#part-system-phpinfo table tr td img +{ + float: left; + margin-right: 10px; +} diff --git a/resources/control/image/bg_body_bottom.png b/resources/control/image/bg_body_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..920a4a728392c768b6f5cb768772a7a1817eb3b8 GIT binary patch literal 2919 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 L>{5-sQ|$i$G6{Xu literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_body_top.png b/resources/control/image/bg_body_top.png new file mode 100644 index 0000000000000000000000000000000000000000..79888f34c9afde09377d897b599e52cb79f2fbb8 GIT binary patch literal 2879 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 literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_dt.png b/resources/control/image/bg_dt.png new file mode 100644 index 0000000000000000000000000000000000000000..3b57573904c66d1fba6cf06a53093b354aa5bc2e GIT binary patch literal 2930 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 literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_menu_divider.gif b/resources/control/image/bg_menu_divider.gif new file mode 100644 index 0000000000000000000000000000000000000000..d01852dc39f8464e36a7fb0814f5122e9d55ea9c GIT binary patch literal 73 zcmZ?wbhEHbUbt#XD?O W&av}`|0<)*J0D0)d$m-A!5RQ+vKik1 literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_menu_left.png b/resources/control/image/bg_menu_left.png new file mode 100644 index 0000000000000000000000000000000000000000..2cedc978d248d942a9bffa4eca5d99bd9a95b5b1 GIT binary patch literal 3625 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 literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_menu_right.png b/resources/control/image/bg_menu_right.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff19cbb4f23700a2e51236fd8f2df4a73d4434f GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^!a%IS!3-p|jSVLNDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MK%FGA+Ec2?LKwt^zPkzwrtsY;>5|5Cr=d=6jW4H}12{bUN zh2pAn{?dF}J~jPEO83PL70*kBNf9QliQlY8=dqlU%w#CJ81V7I^&7 p!Ebkm$+-^2V@FPK3Nv#UFgP2Ugl!Uwu?3pU;OXk;vd$@?2>|6KR*V1u literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_menu_selected.png b/resources/control/image/bg_menu_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..d0672d0979b2f9d4df42f03f688f2d9100e17067 GIT binary patch literal 3100 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 QQU9c_uVbQJ4Rwh57rwXXO8@`> literal 0 HcmV?d00001 diff --git a/resources/control/image/bg_title_left.png b/resources/control/image/bg_title_left.png new file mode 100644 index 0000000000000000000000000000000000000000..53dacab361ad5c8a2756b14d69e1365e5d3afee8 GIT binary patch literal 1428 zcmV;F1#9|=P)rd|cYvyjm$8iV6eNt(}lDD;I=}7z?@ORL-Ga3B2`*>rG zZv}df+8xNfTseVcG#aTGM{o2N$Ah)Se?c*~JClwzzCyy&&kJ-HrCB+FEWjviqYp$e zc+cjRG{jcHR?)bJL=A{Kk2h9_L`{g>sNJ5dL3U$iv1I{^IIf2sa)nPT@_r4^h~ZzN1_g(>5bJPQ469r>Tg5-TVxI~E&|)XX%fc~5*l(j4`t$(g592LAa?@g z29wL|xDDzaX{|`q1~)|4eq2g%%y9ex1ftN9B#HnzTbYYn(h#qNti3^tKcTr@5HF?C zq*(L@9iGlV$T?t~#&;irAVDz{{Q0^i4e{2I!fUkn^JH%Wi2SQl^g-$W?&$y4!o~4t z&h&L+Eshui0_qe`H?gMh-$%{~@z!AN4PpXx+$C%)K}(5-fP&Zv4MVU`-)m(Nd+91v zO&5m&F{~GM79CS6QNP0Q?Ip?0dte{7_u{+LA^x8WVLoh)mbz4-V!Z&>XNI_Y9K% zhP1UZ~}> zDNN8fN8<<{Ok;knMs904-2z|*vg?*Ggp2q1x2ovv3xUF`<#h{yt>lI6jJicH-jjMK-2yHZ`Z)b{NUM=U9*nLdZd+bKxV$o(34Z^8%sa7$S z<#r3)U6o}EjbpUYn641P94^0G;C6$l`pEN-1>r8 z=c#q8;uZj_s+sx)x>gIlxtS`Lav7;rGZpJB$(}GLr>XIn!PD$`aQ9j3UY zQbuaCOAN^(nQ}~Wa+2(EfB9t!$K#CB1|EIqYB838%w^ zy}WX`ZYg++ncb4pv($1qJXkrm09Z{z!Z7CVLBd(ruvf})u#u-|=O>U}UZLIIRJm-F zU~6kdg$ZsqaspA3@UA!FtUqRVJmG`hTR}05`!pcb3oD@AlvJhqcT*UL7@Hs z*X{B!%R-7pOnnDU%f46fa?q~)iva} z4ArNn4(Z8hx?5iEPyVU1%8vQ?X0Pb8U-W4XBPz`?82RjS@46%SbuYW zU^4b}aSW-L^Y-?}yxR@}t{2U<|NigaRhW6;nP1n9rpp!$jVB~O&goJKd1De4qZ8@x z?=K59N@7)9e0-}ekoAA>DzEbYg@6D2ne+AVYbFMUhW)En$s8}-{h#BG${{fz|9^aW z`r6Xn|9ox$WepBJzdm90t8Xz-&Wx{GMnF^eox%KB8(0|_5=;`g85j;^fHhxi0a>z` zGa5*`34^@Uqn5)6bbv2d!>z5W>Z*8wq91bokc6?Av+nNS%h^DM4f(}MVB=BLhff5V zdA1X5ndL^1E9RVU-vUwdQaK&$)x~!;bFAl14YfXLde?ndoqhcK@BJ^=6f+wfkNm!B z^EuuR8Fk;^$Q~+FkMu0#2Kpkg-LvL26 zubsO7)>pp7=#?eEZmjg4wD{82ODos>oi=ys)Kl)6_I*GT56Gn7U472V{D95f+V0!y zV^+VKub;Mjv)=R)tI(6H=HB(Zerl<{r|q+2h1Yg6&Un10`fB8Jwi(NI=NJB-y1OQM z_o_=%zt~MG_3WD(WxYE*?CW&*Q^|Lf__hq3Ls_9|(qquG81ox8KVL48R}T;%~T@MVqjhPXh87JYD@< J);T3K0RT!33IYHC literal 0 HcmV?d00001 diff --git a/resources/control/image/img_header_textcube.png b/resources/control/image/img_header_textcube.png new file mode 100644 index 0000000000000000000000000000000000000000..3c06d0f43dc597389118340883e255f21e89ff12 GIT binary patch literal 18740 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 JR%Jy7YXG2-O<4c{ literal 0 HcmV?d00001 diff --git a/resources/control/image/img_to_my_blog.gif b/resources/control/image/img_to_my_blog.gif new file mode 100644 index 0000000000000000000000000000000000000000..1440d6f4d63307cc00184b1e000cb77d959461ac GIT binary patch literal 207 zcmZ?wbhEHb6kyPMtY(=HkVRSFc{ZdGqGo zyLTTraNx|DGynhp2kRh#Q2fcl$-p4MpaaqavXg<;M?t0U!l5aroYr|?Uh>RJ%V+PM z<#UX_&pp*K&wpaT8UfALNgWw#Zby$AU0h?P*sgT>RHzC69fODzj&}Fd;;#*1>u=|= P%+@JCzwu)>2ZJ>L!<0l5 literal 0 HcmV?d00001 diff --git a/resources/control/plugin-config.css b/resources/control/plugin-config.css new file mode 100644 index 000000000..e896753e2 --- /dev/null +++ b/resources/control/plugin-config.css @@ -0,0 +1,284 @@ +@charset "utf-8"; + +/* Basic Tag */ + +* +{ + margin : 0; + padding : 0; +} + +abbr, acronym +{ + cursor : help; +} + +body +{ + background-color : #FFFFFF; + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + font-size : small; + margin : 0; +} + +em +{ + color : #FF0000; + font-style : normal; +} + +form +{ + font-size : 12px; +} + +kbd +{ + color : #FF0000; + font-family : "Courier New", Courier, monospace; +} + +label +{ + cursor : pointer; +} + +option +{ + padding-right : 0.5em; +} + +samp +{ + color : #ABABAB; + font-family : "Courier New", Courier, monospace; +} + +select +{ + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + font-size : 12px; +} + +/* Layout */ + +#layout-head +{ + background-image : url("./image/bg_plugin_setting_header.png"); + background-position : left top; + background-repeat : repeat-x; + padding : 13px 16px; +} + +#layout-body +{ + background-image : url("./image/bg_plugin_setting_body.png"); + background-position : left top; + background-repeat : repeat-x; + padding : 20px 10px 10px 10px; +} + +#layout-foot +{ + background-color : #F2F2F2; + margin-top : 10px; + padding : 12px; + text-align : center; +} + +/* Body */ + +h1 +{ + background-image : url("./image/img_textcube_icon.gif"); + background-position : left center; + background-repeat : no-repeat; + color : #FFFFFF; + font-size : 12px; + line-height : 2em; + margin : 0; + padding-left : 27px; +} + +/* @group Menu */ + +#menu +{ + background-image: url('./image/bg_tabbox.jpg'); + background-position: left bottom; + line-height: 2.3em; + list-style-type: none; + height: 2.55em; + overflow: hidden; + padding-left: 10px; +} + +#menu li +{ + background-color: #EFEFEF; + border: 1px solid #D9D9D9; + cursor: pointer; + display: block; + float: left; + list-style-type: none; + margin: 0 1px; + padding: 0 1em; +} + +#menu li.selected +{ + background-color: #FFFFFF; + border-bottom: 1px solid #FFFFFF; + cursor: default; +} + +#menu li.dimmed +{ + color: #bdbdbd; + cursor: default; +} + +/* @end */ + +/* @group About Tab */ + +#about-tab-body +{ + margin: 15px auto; + width: 450px; +} + +#iconBox +{ + float: left; + width : 170px; +} + +#iconBox img +{ + margin: 20px 10px; +} + +#information +{ + background-color: #EFEFEF; + float: right; + margin-left: 10px; + padding-top: 50px; + width: 265px; +} + +#information .title +{ + text-align: center; +} + +#information .title h2 +{ + font-size: 1.3em; + margin-bottom: 15px; +} + +#information .description +{ + margin-top: 40px; + min-height: 100px; + padding: 10px; +} + +#information .description .requirement +{ + background-color: #FFEAE7; + border: 1px solid #FFD2CC; + margin-bottom: 8px; + padding: 5px 10px; +} + +#information .description .temp-description +{ + height: 100px; +} + +#information .license, +#information .pluginDir +{ + background-color: #FFFFFF; + font-family: Dotum, 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; + font-size: 0.9em; + padding: 5px; + text-align: right; +} + +/* @end */ + +/* @group Setting Tab */ + +#config_data fieldset +{ + border : 1px solid #DDDDDD; + margin-top : 10px; + overflow : hidden; + padding : 0 10px 10px 10px; +} + +#config_data fieldset legend +{ + color : #000000; + font-weight : bold; +} + +#config_data fieldset .field +{ + border-top : 1px solid #DDDDDD; + margin-top : 5px; + padding : 5px 5px 0 5px; +} + +#config_data fieldset .fieldcaption +{ + background-color : #EEEEEE; + margin-top : 5px; + overflow: hidden; + padding : 10px; +} + +#config_data fieldset .fieldtitle +{ + padding : 0 5px; +} + +#config_data fieldset .textcontrol +{ + border : 1px solid #999999; + font-family : "Courier New", Courier, monospace; + font-size : 12px; +} + +/* @end */ + +.input-button +{ + background-color : #FFFFFF; + border : 1px solid #BBBBBB; + color : #000000; + cursor : pointer; + font-family : 'Lucida Grande', Arial, AppleGothic, '굴림', Gulim, Tahoma, Verdana, sans-serif; + font-size : 12px; + font-weight : bold; + height : auto; + line-height : normal; + padding : 8px 5px 6px 5px !important; + vertical-align : middle; +} + +.radiocontrol, .checkboxcontrol +{ + vertical-align : middle; +} + +/* Class */ + +.clear +{ + clear: both; +} diff --git a/resources/control/plugin.css b/resources/control/plugin.css new file mode 100644 index 000000000..612a1d87b --- /dev/null +++ b/resources/control/plugin.css @@ -0,0 +1,505 @@ +@charset "utf-8"; +/* Common ****************************************************************************************/ + +.part .caption +{ + margin-bottom : 10px; +} + +#sub-menu-plugin +{ + background-image : none !important; +} + +/* Setting ***************************************************************************************/ + +#part-plugin-list +{ + font-size: 1em; + padding-bottom : 50px; + position : relative; +} + +#part-plugin-list .main-explain-box p +{ + margin-bottom : 40px; +} + +#part-plugin-list fieldset +{ + background-image : none; + border : 0; + float: left; + padding-left : 10px; + width : 200px; +} + +#part-plugin-list fieldset dl +{ + position : static; +} + +#part-plugin-list fieldset dl dt +{ + background-color : #F9F9F9; + padding-left : 10px; + position : static; +} + +#part-plugin-list fieldset dl dd +{ + border : 1px solid #EFEFEF; + margin : 3px 0 10px 0; + padding : 5px 10px; + position : static; +} + +#part-plugin-list .line .checkbox, +#part-plugin-list .line .radio +{ + margin-left : 5px; +} + +#plugin-tabs-box +{ + margin-bottom : 20px; +} + +#none-scope-label +{ + border-right : none !important; +} + +#scope-line +{ + margin : 0 !important; +} + +#sorting-line, +#viewmode-line +{ + position : static; +} + +#sorting-line-status, #viewmode-line-status +{ + padding-left : 10px; +} + +#sorting-line-status label, +#viewmode-line-status label +{ + border : none !important; + display : block; + padding : 0; +} + +#sorting-line-align +{ + border : none !important; + right : 20px; + padding : 0 !important; + position : absolute !important; + text-align: right; + top : 11.8em; + width : 400px; +} + +#viewmode-line-align +{ + border : none !important; + right : 240px; + padding : 0 !important; + position : absolute !important; + text-align: right; + top : 5px; + width : 400px; +} + +#direct-link-line dt +{ + display: none; +} + +#direct-link-line dd +{ + border : 3px solid #47B5D3 !important; +} + +#direct-link-line dd .button +{ + background-image : url('./image/img_link_bullet2.jpg'); + background-position : left center; + background-repeat : no-repeat; + padding-left : 15px; +} + +/* plugin list - icon view ------------------------------------- */ +#iconview-box +{ + font-size: 1em; + margin-left : 225px; + min-height : 15em; + padding-top: 10px; + width : 730px; +} + +#part-plugin-list ol.data-inbox +{ + margin : 0; + width : 730px; +} + +#part-plugin-list #iconview-box ol.data-inbox li +{ + float : left; + margin : 2px !important; + width : 140px; +} + +#part-plugin-list #iconview-box ol.data-inbox li .plugin-box +{ + /*background-image: url('./image/bg_plugin_box.jpg');*/ + border : 1px solid #F4F4F4; + padding : 25px 0 0 0; + text-align : center; + vertical-align : middle; +} + +#part-plugin-list #iconview-box ol.data-inbox li.active-class .plugin-box +{ + background-color : #EFF6FF; + border : 1px solid #C6DFFF; +} + +#part-plugin-list #iconview-box ol.data-inbox li .plugin-box .plugin-icon +{ + background-position : center center; + cursor : pointer; + height : 90px; + margin : 0 auto 25px auto; + width : 90px; +} + +#part-plugin-list #iconview-box ol.data-inbox li .plugin-box .plugin-disabled-icon +{ + cursor : default; +} + +#part-plugin-list #iconview-box ol.data-inbox li .plugin-box .plugin-icon img +{ + display : none; +} + +#part-plugin-list #iconview-box ol.data-inbox li .summary +{ + height : 3em; + margin-bottom : 7px; + overflow : hidden; + padding-top : 0.5em; + text-align : center; +} + +#part-plugin-list #iconview-box ol.data-inbox li .summary .plugin-buttons +{ + font-family : 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; + font-size : 0.9em; + padding-right: 5px; +} + +#part-plugin-list #iconview-box ol.data-inbox li .summary .plugin-buttons .disabled, +#part-plugin-list #iconview-box ol.data-inbox li .summary .plugin-buttons .dimmed +{ + color : #BBBBBB; +} + +#part-plugin-list #iconview-box .plugin-description +{ + display : none; +} + +/* plugin list - list view ------------------------------------- */ +#listview-box +{ + font-size: 1em; + float: left; + margin: 10px 0 0 13px; + min-height : 5em; + width : 720px; +} + +#part-plugin-list #listview-box ol.data-inbox li +{ + clear: both; + margin : 2px !important; + min-height: 102px; +} + +#part-plugin-list #listview-box ol.data-inbox li .plugin-box +{ + border : 1px solid #F4F4F4; + float: left; + padding : 5px; + text-align : left; + width : 90px; +} + +#part-plugin-list #listview-box ol.data-inbox li.active-class +{ + background-color : #EFF6FF; + border : 1px solid #C6DFFF; +} + +#part-plugin-list #listview-box ol.data-inbox li.inactive-class +{ + border : 1px solid #fff; +} + +#part-plugin-list #listview-box ol.data-inbox li .plugin-box .plugin-icon +{ + background-position : center center; + cursor : pointer; + height : 90px; + margin : 0 auto; + vertical-align: top; + width : 90px; +} + +#part-plugin-list #listview-box ol.data-inbox li .plugin-box .plugin-disabled-icon +{ + cursor : default; +} + +#part-plugin-list #listview-box ol.data-inbox li .plugin-box .plugin-icon img +{ + display : none; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary +{ + + margin-left: 120px; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary .plugin-title +{ + font-weight: bold; + padding-top: 5px; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary ul li +{ + clear: none; + margin : 0 !important; + min-height: 0; + width : auto; + height : auto; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary ul li.description +{ + margin-top: 5px !important; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary ul li.description .label +{ + display: none; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary .plugin-buttons +{ + font-family : 'Lucida Grande', Tahoma, Verdana, Arial, sans-serif; + font-size : 0.9em; + padding-right: 5px; + text-align: right; +} + +#part-plugin-list #listview-box ol.data-inbox li .summary .plugin-buttons .disabled, +#part-plugin-list #listview-box ol.data-inbox li .summary .plugin-buttons .dimmed +{ + color : #BBBBBB; +} + +/* introduction of textcube plugin download page */ + +#part-plugin-more +{ + clear: both; + margin : 0 0 100px 0; + padding-top: 40px; +} + +/* Update notifier *******************************************************************************/ + +/* common ---------------------------------------------------------------------------------------*/ +#part-plugin-update-blog +{ + padding-bottom : 20px; + margin : 0; +} + +#plugin-update-main +{ + margin : 0 0 0 10px; +} + +#part-plugin-update-blog .data-inbox +{ + width : 700px !important; +} + +/* information box -----------------------------------------------------------------------------*/ +#plugin-update-info-inbox +{ + float : left; + background-color : #EFEFEF; + padding : 10px 10px 10px 10px; + width : 210px; +} + +#plugin-update-info-inbox .title +{ + background-color : #ddd; + margin-bottom : 8px; + padding : 7px 0 5px 0; + text-align : center; +} + +#plugin-update-info-inbox table +{ +} + +#plugin-update-info-inbox .tr +{ + height : 20px; +} + +#plugin-update-info-inbox th +{ + text-align : right; + font-weight : bold; +} + +#plugin-update-info-inbox #yearSelect +{ + width : 130px; +} + +#plugin-update-info-inbox #monthSelect +{ + width : 77px; +} + +#plugin-update-info-inbox .label +{ + display : block; + font-weight : bold; + text-align : center; +} + +#plugin-update-info-inbox .divider +{ + display : none; +} + +#plugin-update-info-inbox .button +{ + background-color : #FFFFFF; + border : 1px solid #999999; + display : block; + line-height : 2em; + margin : 0 auto; + padding : 3px 5px; + width : 36px; +} + +/* update list ----------------------------------------------------------------------------------*/ +#plugin-update-list +{ + float : left; +} + +#plugin-update-list table +{ + margin : 1px 0 15px 10px; +} + +#plugin-update-list td +{ + margin : 0; + padding : 0; +} +#plugin-update-list span.update +{ + color :#4444FF; +} + +#plugin-update-list table.data-inbox tbody tr.active-class td.status +{ + background-image : url("./image/icon_plugin_on.gif"); + background-position : left center; + background-repeat : no-repeat; + cursor : pointer; + margin : 0 auto; + color : #5A8FC9; +} + +#plugin-update-list table.data-inbox tbody tr.inactive-class td.status +{ + background-image : url("./image/icon_plugin_off.gif"); + background-position : left center; + background-repeat : no-repeat; + cursor : pointer; + margin : 0 auto; +} + +#plugin-search-form +{ + background-color : transparent; + border : none; + margin : 0; + position : absolute; + right : 25px; + text-align : right; + top : 10px; + width : 220px !important; + z-index : 1; +} + +#plugin-search-form .input-text +{ + width : 150px; +} + +#plugin-search-form label +{ + display : none; +} + +#body-plugin #search-form +{ + top : 1.5em; +} + +/* Data Management *******************************************************************************/ + +#part-plugin-table-list table thead tr th.delete span +{ + display : none; +} + +#part-plugin-table-list table tbody tr td.title +{ + background-position : right bottom; +} + +#part-plugin-table-list table tbody tr td.tablename +{ + font-family : "Courier New", "Courier", monospace; + text-align : left; +} + +#part-plugin-table-list table tbody tr td.delete +{ + width : 12px; +} diff --git a/resources/control/plugin.ie.css b/resources/control/plugin.ie.css new file mode 100644 index 000000000..744eff691 --- /dev/null +++ b/resources/control/plugin.ie.css @@ -0,0 +1,35 @@ +@charset "utf-8"; + +/* Plugin List */ + +#part-plugin-list #listview-box ol.data-inbox li .summary +{ + height: 101px; +} + +#part-plugin-list ol.data-inbox li .summary .plugin-buttons +{ + font-family: "돋움", Dotum, 'Lucida Grande', Tahoma, sans-serif !important; + letter-spacing: -1px; + margin-top: 3px; +} + +#plugin-search-form +{ + top : 18px; +} + +#plugin-search-form .input-text +{ + width : 150px !important; +} + +#viewmode-line-align +{ + top : 10px; +} + +#plugin-search-form .input-button +{ + line-height : 1.6em !important; +} diff --git a/resources/control/plugin.ie7.css b/resources/control/plugin.ie7.css new file mode 100644 index 000000000..387420282 --- /dev/null +++ b/resources/control/plugin.ie7.css @@ -0,0 +1,10 @@ +@charset "utf-8"; + +/* Plugin List */ + +#part-plugin-list ul.data-inbox li .summary .plugin-buttons +{ + font-family: Dotum, 'Lucida Grande', Tahoma, sans-serif; + letter-spacing: -1px; + margin-top: 3px; +} diff --git a/resources/locale/messages.php b/resources/locale/messages.php index 18eab9a9f..e1e48e879 100644 --- a/resources/locale/messages.php +++ b/resources/locale/messages.php @@ -6,7 +6,7 @@ } // TODO: generalize for multiple language support e.g. skin language -$setting = getBlogSettings($blogid); +$setting = Setting::getBlogSettingsGlobal($blogid); require 'owner/'.$setting['language'].'.php'; echo "__text = {\n"; diff --git a/setup.php b/setup.php index 8c6c71341..8c5be1295 100644 --- a/setup.php +++ b/setup.php @@ -1131,7 +1131,7 @@ function fail($msg) { $query = explode(';', trim($schema)); foreach ($query as $sub) { if (!empty($sub) && !POD::query($sub, false)) { - $tables = getTables('1.7',$_POST['dbPrefix']); + $tables = getTables('1.8',$_POST['dbPrefix']); foreach ($tables as $table) { if (POD::dbms()=='Cubrid') { @POD::query("DROP ".$table); @@ -1376,7 +1376,17 @@ function fail($msg) { $entriesMatched = preg_match('/Entries$/', $table); - if ($entriesMatched && checkTables('1.7', $prefix = substr($table, 0, strlen($table) - 7))) { + if ($entriesMatched && checkTables('1.8', $prefix = substr($table, 0, strlen($table) - 7))) { +?> + + + 1.8 + + /> + + @@ -1612,7 +1622,7 @@ function checkTables($version, $prefix) { function getTables($version, $prefix) { switch ($version) { case '1.8': - return array("{$prefix}Attachments", "{$prefix}BlogSettings", "{$prefix}BlogStatistics", "{$prefix}Categories", "{$prefix}Comments", "{$prefix}CommentsNotified", "{$prefix}CommentsNotifiedQueue", "{$prefix}CommentsNotifiedSiteInfo", "{$prefix}DailyStatistics", "{$prefix}Entries", "{$prefix}EntriesArchive", "{$prefix}FeedGroupRelations", "{$prefix}FeedGroups", "{$prefix}FeedItems", "{$prefix}FeedReads", "{$prefix}Feeds", "{$prefix}FeedSettings", "{$prefix}FeedStarred", "{$prefix}Filters", "{$prefix}Links", "{$prefix}LinkCategories", "{$prefix}OpenIDUsers", "{$prefix}Plugins", "{$prefix}RefererLogs", "{$prefix}RefererStatistics", "{$prefix}ReservedWords", "{$prefix}ServiceSettings", "{$prefix}Sessions", "{$prefix}SessionVisits", "{$prefix}SkinSettings", "{$prefix}TagRelations", "{$prefix}Tags", "{$prefix}TrackbackLogs", "{$prefix}Trackbacks", "{$prefix}Users", "{$prefix}UserSettings", "{$prefix}Widgets", "{$prefix}XMLRPCPingSettings", "{$prefix}Privileges", "{$prefix}PageCacheLog"); + return array("{$prefix}Attachments", "{$prefix}BlogSettings", "{$prefix}BlogStatistics", "{$prefix}Categories", "{$prefix}Comments", "{$prefix}CommentsNotified", "{$prefix}CommentsNotifiedQueue", "{$prefix}CommentsNotifiedSiteInfo", "{$prefix}DailyStatistics", "{$prefix}Entries", "{$prefix}EntriesArchive", "{$prefix}FeedGroupRelations", "{$prefix}FeedGroups", "{$prefix}FeedItems", "{$prefix}FeedReads", "{$prefix}Feeds", "{$prefix}FeedSettings", "{$prefix}FeedStarred", "{$prefix}Filters", "{$prefix}Lines", "{$prefix}Links", "{$prefix}LinkCategories", "{$prefix}OpenIDUsers", "{$prefix}Plugins", "{$prefix}RefererLogs", "{$prefix}RefererStatistics", "{$prefix}ReservedWords", "{$prefix}ServiceSettings", "{$prefix}Sessions", "{$prefix}SessionVisits", "{$prefix}SkinSettings", "{$prefix}TagRelations", "{$prefix}Tags", "{$prefix}TrackbackLogs", "{$prefix}Trackbacks", "{$prefix}Users", "{$prefix}UserSettings", "{$prefix}Widgets", "{$prefix}XMLRPCPingSettings", "{$prefix}Privileges", "{$prefix}PageCacheLog"); case '1.7': return array("{$prefix}Attachments", "{$prefix}BlogSettings", "{$prefix}BlogStatistics", "{$prefix}Categories", "{$prefix}Comments", "{$prefix}CommentsNotified", "{$prefix}CommentsNotifiedQueue", "{$prefix}CommentsNotifiedSiteInfo", "{$prefix}DailyStatistics", "{$prefix}Entries", "{$prefix}EntriesArchive", "{$prefix}FeedGroupRelations", "{$prefix}FeedGroups", "{$prefix}FeedItems", "{$prefix}FeedReads", "{$prefix}Feeds", "{$prefix}FeedSettings", "{$prefix}FeedStarred", "{$prefix}Filters", "{$prefix}Links", "{$prefix}LinkCategories", "{$prefix}OpenIDUsers", "{$prefix}Plugins", "{$prefix}RefererLogs", "{$prefix}RefererStatistics", "{$prefix}ReservedWords", "{$prefix}ServiceSettings", "{$prefix}Sessions", "{$prefix}SessionVisits", "{$prefix}SkinSettings", "{$prefix}TagRelations", "{$prefix}Tags", "{$prefix}TrackbackLogs", "{$prefix}Trackbacks", "{$prefix}Users", "{$prefix}UserSettings", "{$prefix}XMLRPCPingSettings", "{$prefix}Teamblog", "{$prefix}PageCacheLog"); case '1.6': diff --git a/skin/admin/canon/basic.css b/skin/admin/canon/basic.css index 42754baa4..eda16894e 100644 --- a/skin/admin/canon/basic.css +++ b/skin/admin/canon/basic.css @@ -263,6 +263,16 @@ textarea background-image : url("./image/img_helper_hover.gif"); } +#action-move-to-control-panel a +{ + background-image : url("./image/img_control.gif"); +} + +#action-move-to-control-panel a:hover +{ + background-image : url("./image/img_control_hover.gif"); +} + #action-logout a { background-image : url("./image/img_logout.gif"); @@ -385,11 +395,6 @@ textarea background-image : url("./image/img_menu_setting.png") !important; } -#main-menu #menu-control -{ - background-image : url("./image/img_menu_control.png") !important; -} - #main-menu a.menu-name { width : 40px; diff --git a/skin/admin/canon/center.css b/skin/admin/canon/center.css index 330c6282d..fbf86e95e 100644 --- a/skin/admin/canon/center.css +++ b/skin/admin/canon/center.css @@ -424,7 +424,7 @@ #independent-notice-line { - margin : 0 130px -35px 0; + margin : 0 150px -35px 0; } #independent-notice-line dd @@ -438,6 +438,23 @@ display : none; } +#widget-button-top +{ + position : absolute; + top : -15px; + left : 350px; +} +#widget-button-bottom +{ + display : none; +} +#widget-container-0, +#widget-container-1, +#widget-container-2 +{ + margin-top : 50px; + margin-bottom : 50px; +} #direct-link-line { margin : 25px 10px 20px 10px; diff --git a/skin/admin/canon/image/img_control.gif b/skin/admin/canon/image/img_control.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc21ca79be79864e8e4701a695b8e85736de9e07 GIT binary patch literal 323 zcmZ?wbhEHblw{CgIKseSY;0_6YwPUn?BnAT6ciL49i5VrlAD`bSXfwDS=rp&+}+(h zZQ8V1vt}(?v}oPBbz8P<*}i?pu3fthA3l8Y$bUy^&jV%__i_x~LvofjAW;E+f< zcA+^#PyB34`Go+M<}SB|!WsNbj84gtPei0T7?e0YOnC1+Xi{X+n(Cm~ta(RDiid$g zNT}JF-=MjhfkjfBshN+jnJJL9XC^~lbT%*x7g_y}`;!BRe#(`U}Qh%9B!X}xmw8r#yFw{G9Ld++{(hmRgVdHU@6 Pix*n2-@H{(WUvMRT+D;8 literal 0 HcmV?d00001 diff --git a/skin/admin/canon/image/img_control_hover.gif b/skin/admin/canon/image/img_control_hover.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3e42b577e8a5563afec1afd3bd5950a845c69ce GIT binary patch literal 434 zcmZ?wbhEHblw{CgxXQp_Y;0_1WoT({WbJBb3j`hpcHa8-4mJ)h)(-yqj=siD-WEBa%s#(~A!Ati<(Ra)WI22rirF`ZiR6Ezb0bQ7m& zCeKt)nW>q!KrM5zM)q>`oYiXi8&wOosBYiBgMoTL@h1x>7lS&34#-H5pBUKAJ4`O{ z(2?ptkuvc>j@A4ND@wf9My$w8ZN3T%D^BcwP=2q|Dsh4tjY?E zi^RnjF)FBVuHLz*UuYFC?<&Ev4Z9Zcs>(C1;^$w*D6J}Zlz~xB^}s4g$<^}}n2!pj zNHTM=F+YF7+`r(cc*^?^A5&zHGWRU`@$(nY<-h;_Gca?>cx+g3u$e4Aua{uyu0) literal 0 HcmV?d00001 diff --git a/skin/admin/whitedream/basic.css b/skin/admin/whitedream/basic.css index c16c3ce55..20146b46b 100644 --- a/skin/admin/whitedream/basic.css +++ b/skin/admin/whitedream/basic.css @@ -246,6 +246,15 @@ textarea padding : 0 16px !important; } +#action-move-to-control-panel a +{ + background-image : url("./image/img_to_control_panel.png"); + background-position : right center; + background-repeat : no-repeat; + color : #222; + padding : 4px 20px 0 10px; +} + #action-move-to-blog a { background-image : url("./image/img_to_my_blog.gif"); @@ -267,9 +276,9 @@ textarea /* main blog box */ #main-blog-box { - right : 200px; + right : 320px; position : absolute; - top : 13px; + top : 15px; } /* main menu */ diff --git a/skin/admin/whitedream/image/img_to_control_panel.png b/skin/admin/whitedream/image/img_to_control_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..611373d7a62f4f0254f975e7e5cb0ffdf82843f8 GIT binary patch literal 807 zcmV+?1K9kDP)!J zC3kU9L^8OEwzDF%gNTc!i^ai56^f&Z;-u9@7bWpob+E0VP^u=rZ4zvnk|w!N2W_pb zg8z07|Mzn^=XjW>rv6Lu7Visvt^7RE*D+W){jj}pk!%k%kLO0V?oM~k_j~3yLg(*J ztdpN<8{|is`f%>O7V*ZG3RPBr8E4hE?8@*VGc(sO{6Y7oqD4#7a&`lgPNdPX-57vk zS=3ajsE#>cT_L(4U{lvsJ#h4T7e+aWQRb7?Le6f$vRnXshKW`x;RzD;)G*{ez#Ts! z4**Cf_x5*uC{ACjHEl*5hb&+SVLnQ0Qc)wB0tl5Wx>hagLLCUT@cE99?4TDgkhT;{ zsYcn$imJ&n!{n)DGYW}!hdX-ueoxwCUE#Q}n8e%5e!kvQm`;l~Ve01+hqj+eT9TvZ z6@ixlb@<5D18wt{3-Cg(8Oo)UsEUh>dv-J5y9I!7QAR5$tjvq-{8G8~HyFT3d2cPj zrVfW%+|D;>Q7O0nLMKz`|AOYK8GCN20ZFM8FwZyw*n*2KI+$K3&TA5X3wVndS8?$I zA|T>k6sCe^*JQ}Z6tpVoI-A?ee68CLUS1I3J|H3MX6rXZ@(4`eiLRp1J^P6#_x2}W z`xX6ZD8Oha457&VJ)v`{Evv`al^KgSdGf8|3ix$};ce-OHUMcR;I0--j0DwG)*l3a zm?q^_tX>+60c689G^X=-e9*jq8ehaI(EF2{edQ;i09k(!d_iOdmP@0kautB0>Z72j zIFn?Y38>#uDa>%Q6O?@ZVPy3zvYKg-UJXaYPjN}|bOBUkZ>A6k=!^H2-~Z3GW_9ew lrsJm{w!7CJZ;buR^8>%}0-2#&^GE;y002ovPDHLkV1mRWa2x;t literal 0 HcmV?d00001 diff --git a/skin/blog/coolant/skin.html b/skin/blog/coolant/skin.html index 340810c2b..b5642e44f 100644 --- a/skin/blog/coolant/skin.html +++ b/skin/blog/coolant/skin.html @@ -51,7 +51,7 @@

    [##_title_##]

    -

    Search Results for '[##_list_conform_##]'


    +

    Search Results for '[##_list_conform_##]'

    >ATOM Icon

    [##_list_count_##] POSTS

      @@ -277,6 +277,7 @@

      [##_article_rep_title_##]

      [##_article_rep_title_##]