From 6221f0a444dcfe0b8d4d913ad39d861742332af2 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 29 May 2007 04:14:06 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@1491 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- .htaccess | 18 +++--- addons/blogapi/blogapi.addon.php | 5 +- classes/context/Context.class.php | 58 +++++++++++-------- classes/module/ModuleObject.class.php | 2 + config/config.inc.php | 2 +- modules/blog/blog.view.php | 2 +- modules/blog/skins/default/list.html | 2 +- modules/board/board.view.php | 2 +- modules/board/skins/default/list.html | 8 ++- .../board/skins/default/view_document.html | 4 +- modules/rss/conf/module.xml | 2 +- modules/rss/rss.view.php | 2 +- modules/trackback/conf/module.xml | 2 +- modules/trackback/trackback.controller.php | 5 +- 14 files changed, 68 insertions(+), 46 deletions(-) diff --git a/.htaccess b/.htaccess index f91fa7797..0bbe9e976 100644 --- a/.htaccess +++ b/.htaccess @@ -1,13 +1,7 @@ RewriteEngine On -# rss -RewriteRule ^([a-zA-Z0-9_]+)/rss$ ./index.php?mid=$1&act=dispRss [L] - -# trackback -RewriteRule ^([[:digit:]]+)/trackback$ ./index.php?module=trackback&act=procTrackbackReceive&document_srl=$1 [L] - -# blog api permanent link -RewriteRule ^([a-zA-Z0-9_]+)/api$ ./index.php?act=blogapi&mid=$1 [L] +# page +RewriteRule ^([a-zA-Z0-9_]+)/([[:digit:]]+)page$ ./index.php?mid=$1&page=$2 [L] # administrator page RewriteRule ^admin$ ./index.php?module=admin [L] @@ -15,8 +9,14 @@ RewriteRule ^admin$ ./index.php?module=admin [L] # document permanent link RewriteRule ^([[:digit:]]+)$ ./index.php?document_srl=$1 [L] -# module + document permanent link +# document + act permanent link +RewriteRule ^([[:digit:]]+)/([a-zA-Z0-9_]+)$ ./index.php?document_srl=$1&act=$2 [L] + +# mid + document permanent link RewriteRule ^([a-zA-Z0-9_]+)/([[:digit:]]+)$ ./index.php?mid=$1&document_srl=$2 [L] +# mid + act permanent link +RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ ./index.php?mid=$1&act=$2 [L] + # module permanent link RewriteRule ^([a-zA-Z0-9_]+)(/){0,1}$ ./index.php?mid=$1 [L] diff --git a/addons/blogapi/blogapi.addon.php b/addons/blogapi/blogapi.addon.php index 275f6e700..ef1a92406 100644 --- a/addons/blogapi/blogapi.addon.php +++ b/addons/blogapi/blogapi.addon.php @@ -1,6 +1,5 @@ content = str_replace($this->mid.'/{UPLOADED_PATH}',sprintf('./files/attach/images/%s/%s/%s', $this->module_srl, $document_srl, $filename), $obj->content); $oDocumentController = &getController('document'); + $obj->allow_comment = 'Y'; + $obj->allow_trackback = 'Y'; $output = $oDocumentController->insertDocument($obj); if(!$output->toBool()) { diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index fe72dc88b..a1e09de46 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -26,7 +26,8 @@ var $html_header = NULL; ///< @brief display시에 사용하게 되는 ..내의 스크립트. 거의 사용할 일은 없음 var $html_footer = NULL; ///< @brief display시에 사용하게 되는 바로 앞에 추가될 코드 - var $rewrite = false; + var $allow_rewrite = false; + var $path = ''; /** * @brief 언어 정보 @@ -89,6 +90,12 @@ $this->_set('is_logged', false); $this->_set('logged_info', NULL); } + + // rewrite 모듈사용 상태 체크 + if(in_array('mod_rewrite',apache_get_modules())) $this->allow_rewrite = true; + + // 상대 경로 설정 + $this->path = $this->getRequestUri(); } /** @@ -353,19 +360,6 @@ if($this->_getRequestMethod() == 'XMLRPC') return; if(!count($_REQUEST)) return; - if($_SERVER['REDIRECT_QUERY_STRING']) { - $this->rewrite = true; - $tmp_str = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'],'?')+1); - if($tmp_str) { - $tmp_arr = explode('&',$tmp_str); - $tmp_cnt = count($tmp_arr); - for($i=0;$i<$tmp_cnt;$i++) { - list($key, $val) = explode('=', $tmp_arr[$i]); - if($key && $val) $this->_set($key, $val); - } - } - } - foreach($_REQUEST as $key => $val) { if(is_array($val)) { for($i=0;$iget_vars) || $args_list[0]=='') { + if(!$this->get_vars || $args_list[0]=='') { $get_vars = null; if($args_list[0]=='') { array_shift($args_list); $num_args = count($args_list); } } else { - $get_vars = clone($this->get_vars); + $get_vars = get_object_vars($this->get_vars); } for($i=0;$i<$num_args;$i=$i+2) { $key = $args_list[$i]; - $val = $args_list[$i+1]; - $get_vars->{$key} = trim($val); + $val = trim($args_list[$i+1]); + if(!$val) unset($get_vars[$key]); + else $get_vars[$key] = $val; } - $var_count = count(get_object_vars($get_vars)); - if(!$var_count) return; + $var_count = count($get_vars); + if(!$var_count) return ''; + // rewrite모듈을 사용하고 인자의 값이 2개 이하일 경우 + if($this->allow_rewrite && $var_count < 3) { + $var_keys = array_keys($get_vars); + + if($var_count == 1) { + if($var_keys[0]=='mid') return $this->path.$get_vars['mid']; + elseif($var_keys[0]=='document_srl') return $this->path.$get_vars['document_srl']; + } elseif($var_count == 2) { + asort($var_keys); + $target = implode('.',$var_keys); + if($target=='act.mid' && !ereg('([A-Z]+)',$get_vars['act'])) return sprintf('%s%s/%s',$this->path,$get_vars['mid'],$get_vars['act']); + elseif($target=='document_srl.mid') return sprintf('%s%s/%s',$this->path,$get_vars['mid'],$get_vars['document_srl']); + elseif($target=='act.document_srl') return sprintf('%s%s/%s',$this->path,$get_vars['document_srl'],$get_vars['act']); + } + } + + // rewrite 모듈을 사용하지 않고 인자의 값이 2개 이상이거나 rewrite모듈을 위한 인자로 적당하지 않을 경우 foreach($get_vars as $key => $val) { if(!$val) continue; - $url_list[] = sprintf("%s=%s",$key, $val); + $url .= ($url?'&':'').$key.'='.$val; } - $path = str_replace('index.php','',$_SERVER['SCRIPT_NAME']); - return sprintf('%s?%s', $path, htmlspecialchars(implode('&',$url_list))); + return $this->path.'?'.$url; + } /** diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index ce806c4f3..4f358343c 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -178,6 +178,8 @@ $this->setTemplatePath($oMessageView->getTemplatePath()); $this->setTemplateFile($oMessageView->getTemplateFile()); + + return $this; } /** diff --git a/config/config.inc.php b/config/config.inc.php index 97b6b78d0..acdf94a60 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -24,7 +24,7 @@ * 2 : 1 + DB 쿼리 * 3 : 모든 로그 **/ - define('__DEBUG__', 3); + define('__DEBUG__', 0); /** * @brief 간단하게 사용하기 위한 함수 정의한 파일 require diff --git a/modules/blog/blog.view.php b/modules/blog/blog.view.php index 64b03b6fd..df45a2d83 100644 --- a/modules/blog/blog.view.php +++ b/modules/blog/blog.view.php @@ -79,7 +79,7 @@ $this->setTemplatePath($template_path); // rss url - if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','dispRss')); + if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','rss')); // 레이아웃의 정보를 속이기 위해서 layout_srl을 현 블로그의 module_srl로 입력 $this->module_info->layout_srl = $this->module_info->module_srl; diff --git a/modules/blog/skins/default/list.html b/modules/blog/skins/default/list.html index 3255a8e7e..df79f7023 100644 --- a/modules/blog/skins/default/list.html +++ b/modules/blog/skins/default/list.html @@ -11,7 +11,7 @@
- [{zdate($document->regdate, "Y-m-d")}] {$document->title} + [{zdate($document->regdate, "Y-m-d")}] {$document->title} ({number_format($document->comment_count)}) diff --git a/modules/board/board.view.php b/modules/board/board.view.php index 14bcd1200..f054ac65f 100644 --- a/modules/board/board.view.php +++ b/modules/board/board.view.php @@ -77,7 +77,7 @@ $this->setTemplatePath($template_path); // rss url - if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','dispRss')); + if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','rss')); } /** diff --git a/modules/board/skins/default/list.html b/modules/board/skins/default/list.html index c50889130..6ff83d9ea 100644 --- a/modules/board/skins/default/list.html +++ b/modules/board/skins/default/list.html @@ -46,7 +46,13 @@ - {htmlspecialchars($val->title)} + + + {htmlspecialchars($val->title)} + + + {htmlspecialchars($val->title)} + {htmlspecialchars($val->title)} diff --git a/modules/board/skins/default/view_document.html b/modules/board/skins/default/view_document.html index cde866795..a4bfe96b4 100644 --- a/modules/board/skins/default/view_document.html +++ b/modules/board/skins/default/view_document.html @@ -51,13 +51,13 @@ {$lang->document_url} - {getUrl()}{$document->document_srl} + {getUrl('','document_srl',$document->document_srl)} {$lang->trackback_url} - {getUrl()}trackback/{$document->document_srl} + {getUrl('','document_srl',$document->document_srl,'act','trackback')} diff --git a/modules/rss/conf/module.xml b/modules/rss/conf/module.xml index 5ab21a6aa..0d07688f9 100644 --- a/modules/rss/conf/module.xml +++ b/modules/rss/conf/module.xml @@ -2,6 +2,6 @@ - + diff --git a/modules/rss/rss.view.php b/modules/rss/rss.view.php index 3affe25cc..713464523 100644 --- a/modules/rss/rss.view.php +++ b/modules/rss/rss.view.php @@ -19,7 +19,7 @@ /** * @brief RSS 출력 **/ - function dispRss() { + function rss() { // RSS를 출력하고자 하는 mid를 구함 (없으면 오류) $mid = Context::get('mid'); if(!$mid) return $this->dispError(); diff --git a/modules/trackback/conf/module.xml b/modules/trackback/conf/module.xml index 50ed7c141..fa74a9de7 100644 --- a/modules/trackback/conf/module.xml +++ b/modules/trackback/conf/module.xml @@ -4,6 +4,6 @@ - + diff --git a/modules/trackback/trackback.controller.php b/modules/trackback/trackback.controller.php index 59d7562fb..cca2c985d 100644 --- a/modules/trackback/trackback.controller.php +++ b/modules/trackback/trackback.controller.php @@ -38,11 +38,12 @@ /** * @brief 엮인글 입력 **/ - function procTrackbackReceive() { + function trackback() { Context::setRequestMethod("XMLRPC"); $obj = Context::gets('document_srl','url','title','excerpt'); - if(!$obj->document_srl) return $this->stop('fail'); + + if(!$obj->document_srl || !$obj->url || !$obj->title || !$obj->excerpt) return $this->stop('fail'); return $this->insertTrackback($obj); }