diff --git a/modules/trackback/trackback.controller.php b/modules/trackback/trackback.controller.php
index 0969e5fae..80e661070 100644
--- a/modules/trackback/trackback.controller.php
+++ b/modules/trackback/trackback.controller.php
@@ -1,251 +1,182 @@
- * @desc : 기본 모듈중의 하나인 trackback module
- * Module class에서 상속을 받아서 사용
- * action 의 경우 disp/proc 2가지만 존재하며 이는 action명세서에
- * 미리 기록을 하여야 함
+ * @class trackbackController
+ * @author zero (zero@nzeo.com)
+ * @desc trackback모듈의 Controller class
**/
- class trackback extends Module {
+ class trackbackController extends Module {
/**
- * 모듈의 정보
+ * @brief 초기화
**/
- var $cur_version = "20070130_0.01";
-
- /**
- * 기본 action 지정
- * $act값이 없거나 잘못된 값이 들어올 경우 $default_act 값으로 진행
- **/
- var $default_act = '';
-
- /**
- * 현재 모듈의 초기화를 위한 작업을 지정해 놓은 method
- * css/js파일의 load라든지 lang파일 load등을 미리 선언
- *
- * Init() => 공통
- * dispInit() => disp시에
- * procInit() => proc시에
- *
- * $this->module_path는 현재 이 모듈파일의 위치를 나타낸다
- * (ex: $this->module_path = "./modules/install/";
- **/
-
- // 초기화
function init() {
}
- // disp 초기화
- function dispInit() {
- }
-
- // proc 초기화
- function procInit() {
- }
-
/**
- * 여기서부터는 action의 구현
- * request parameter의 경우 각 method의 첫번째 인자로 넘어온다
- *
- * dispXXXX : 출력을 위한 method, output에 tpl file이 지정되어야 한다
- * procXXXX : 처리를 위한 method, output에는 trackback, trackback가 지정되어야 한다
+ * @brief 엮인글 입력
**/
-
- /**
- * 여기부터는 이 모듈과 관련된 라이브러리 개념의 method들
- **/
-
- // public boolean insertTrackback($obj)
- // 엮인글 입력
function insertTrackback($obj) {
- // document_srl에 해당하는 글이 있는지 확인
- $document_srl = $obj->document_srl;
- if(!$document_srl) $this->dispMessage(-1, 'fail');
+ $document_srl = $obj->document_srl;
+ if(!$document_srl) $this->dispMessage(-1, 'fail');
- $oDocument = getModule('document');
- $document = $oDocument->getDocument($document_srl);
+ // document model 객체 생성후 원본글을 가져옴
+ $oDocumentModel = getModel('document');
+ $document = $oDocumentModel->getDocument($document_srl);
- if(!$document_srl) $this->dispMessage(-1,'fail');
- if($document->allow_trackback=='N') $this->dispMessage(-1,'fail');
+ // 원본글이 없거나 트랙백 허용을 하지 않으면 오류 표시
+ if(!$document_srl) $this->dispMessage(-1,'fail');
+ if($document->allow_trackback=='N') $this->dispMessage(-1,'fail');
- // 엮인글 정리
- $obj = Context::convertEncoding($obj);
- if(!$obj->blog_name) $obj->blog_name = $obj->title;
- $obj->excerpt = strip_tags($obj->excerpt);
+ // 엮인글 정리
+ $obj = Context::convertEncoding($obj);
+ if(!$obj->blog_name) $obj->blog_name = $obj->title;
+ $obj->excerpt = strip_tags($obj->excerpt);
- // 엮인글를 입력
- $oDB = &DB::getInstance();
- $obj->list_order = $obj->trackback_srl = $oDB->getNextSequence();
- $obj->module_srl = $document->module_srl;
- $output = $oDB->executeQuery('trackback.insertTrackback', $obj);
+ // 엮인글를 입력
+ $oDB = &DB::getInstance();
+ $obj->list_order = $obj->trackback_srl = $oDB->getNextSequence();
+ $obj->module_srl = $document->module_srl;
+ $output = $oDB->executeQuery('trackback.insertTrackback', $obj);
- // 입력에 이상이 없으면 해당 글의 엮인글 수를 올림
- if(!$output->toBool()) $this->dispMessage(-1, 'fail');
+ // 입력에 이상이 없으면 해당 글의 엮인글 수를 올림
+ if(!$output->toBool()) $this->dispMessage(-1, 'fail');
- // 해당 글의 전체 엮인글 수를 구해옴
- $trackback_count = $this->getTrackbackCount($document_srl);
+ // trackback model 객체 생성
+ $oTrackbackModel = getModel('trackback');
- // 해당글의 엮인글 수를 업데이트
- $output = $oDocument->updateTrackbackCount($document_srl, $trackback_count);
+ // 해당 글의 전체 엮인글 수를 구해옴
+ $trackback_count = $oTrackbackModel->getTrackbackCount($document_srl);
- if(!$output->toBool()) $this->dispMessage(-1,'fail');
- else $this->dispMessage(0,'success');
+ // document controller 객체 생성
+ $oDocumentController = getController('document');
+
+ // 해당글의 엮인글 수를 업데이트
+ $output = $oDocumentController->updateTrackbackCount($document_srl, $trackback_count);
+
+ if(!$output->toBool()) $this->dispMessage(-1,'fail');
+ else $this->dispMessage(0,'success');
}
- function dispMessage($error, $message) {
- // 헤더 출력
- header("Content-Type: text/xml; charset=UTF-8");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-store, no-cache, must-revalidate");
- header("Cache-Control: post-check=0, pre-check=0", false);
- header("Pragma: no-cache");
- print ''."\n";
- print "\n{$error}{$message}";
- exit();
- }
-
- // public boolean getTrackback($trackback_srl)
- // 엮인글 삭제
- function getTrackback($trackback_srl) {
- $oDB = &DB::getInstance();
- $args->trackback_srl = $trackback_srl;
- return $oDB->executeQuery('trackback.getTrackback', $args);
- }
-
- // public boolean deleteTrackback($trackback_srl)
- // 엮인글 삭제
+ /**
+ * @brief 단일 엮인글 삭제
+ **/
function deleteTrackback($trackback_srl) {
- // 삭제하려는 엮인글이 있는지 확인
- $trackback = $this->getTrackback($trackback_srl);
- if($trackback->data->trackback_srl != $trackback_srl) return new Output(-1, 'msg_invalid_request');
- $document_srl = $trackback->data->document_srl;
+ // trackback model 객체 생성
+ $oTrackbackModel = getModel('trackback');
- // 권한이 있는지 확인
- $oDocument = getModule('document');
- if(!$oDocument->isGranted($document_srl)) return new Output(-1, 'msg_not_permitted');
+ // 삭제하려는 엮인글이 있는지 확인
+ $trackback = $oTrackbackModel->getTrackback($trackback_srl);
+ if($trackback->data->trackback_srl != $trackback_srl) return new Object(-1, 'msg_invalid_request');
+ $document_srl = $trackback->data->document_srl;
- // 삭제
- $oDB = &DB::getInstance();
- $args->trackback_srl = $trackback_srl;
- $output = $oDB->executeQuery('trackback.deleteTrackback', $args);
- if(!$output->toBool()) return new Output(-1, 'msg_error_occured');
+ // document model 객체 생성
+ $oDocumentModel = getModel('document');
- // 엮인글 수를 구해서 업데이트
- $trackback_count = $this->getTrackbackCount($document_srl);
+ // 권한이 있는지 확인
+ if(!$oDocumentModel->isGranted($document_srl)) return new Object(-1, 'msg_not_permitted');
- // 해당글의 엮인글 수를 업데이트
- $oDocument = getModule('document');
- $output = $oDocument->updateTrackbackCount($document_srl, $trackback_count);
- $output->add('document_srl', $document_srl);
- return $output;
+ // 삭제
+ $oDB = &DB::getInstance();
+ $args->trackback_srl = $trackback_srl;
+ $output = $oDB->executeQuery('trackback.deleteTrackback', $args);
+ if(!$output->toBool()) return new Object(-1, 'msg_error_occured');
+
+ // 엮인글 수를 구해서 업데이트
+ $trackback_count = $oTrackbackModel->getTrackbackCount($document_srl);
+
+ // document controller 객체 생성
+ $oDocumentController = getController('document','controller');
+
+ // 해당글의 엮인글 수를 업데이트
+ $output = $oDocumentController->updateTrackbackCount($document_srl, $trackback_count);
+ $output->add('document_srl', $document_srl);
+ return $output;
}
- // public boolean deleteTrackbacks($document_srl)
- // 엮인글 삭제
+ /**
+ * @brief 글에 속한 모든 트랙백 삭제
+ **/
function deleteTrackbacks($document_srl) {
- // 삭제
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $output = $oDB->executeQuery('trackback.deleteTrackbacks', $args);
- return $output;
+ $oDB = &DB::getInstance();
+ $args->document_srl = $document_srl;
+ $output = $oDB->executeQuery('trackback.deleteTrackbacks', $args);
+ return $output;
}
- // public boolean deleteModuleTrackbacks($module_srl)
- // 엮인글 삭제
+ /**
+ * @brief 모듈에 속한 모든 트랙백 삭제
+ **/
function deleteModuleTrackbacks($module_srl) {
- // 삭제
- $oDB = &DB::getInstance();
- $args->module_srl = $module_srl;
- $output = $oDB->executeQuery('trackback.deleteModuleTrackbacks', $args);
- return $output;
+ // 삭제
+ $oDB = &DB::getInstance();
+ $args->module_srl = $module_srl;
+ $output = $oDB->executeQuery('trackback.deleteModuleTrackbacks', $args);
+ return $output;
}
- // public number getTrackbackCount($module_srl, $search_obj = NULL)
- // document_srl 에 해당하는 엮인글의 전체 갯수를 가져옴
- function getTrackbackCount($document_srl) {
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $output = $oDB->executeQuery('trackback.getTrackbackCount', $args);
- $total_count = $output->data->count;
- return (int)$total_count;
- }
-
- // public boolean getTrackbackList($document_srl)
- // module_srl값을 가지는 엮인글의 목록을 가져옴
- function getTrackbackList($document_srl) {
- // 엮인글 목록을 가져옴
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $args->list_order = 'list_order';
- $output = $oDB->executeQuery('trackback.getTrackbackList', $args);
- if(!$output->toBool()) return $output;
- $trackback_list = $output->data;
- if(!is_array($trackback_list)) $trackback_list = array($trackback_list);
- return $trackback_list;
- }
-
- // public boolean sendTrackback($document)
- // 엮인글을 발송
+ /**
+ * @brief 엮인글을 발송
+ **/
function sendTrackback($document, $trackback_url, $charset) {
- // 발송할 정보를 정리
- $http = parse_url($trackback_url);
- $obj->blog_name = Context::getBrowserTitle();
- $obj->title = $document->title;
- $obj->excerpt = cut_str($document->content, 240);
- $obj->url = sprintf("%s?document_srl=%d", Context::getRequestUri(), $document->document_srl);
+ // 발송할 정보를 정리
+ $http = parse_url($trackback_url);
+ $obj->blog_name = Context::getBrowserTitle();
+ $obj->title = $document->title;
+ $obj->excerpt = cut_str($document->content, 240);
+ $obj->url = sprintf("%s?document_srl=%d", Context::getRequestUri(), $document->document_srl);
- if($charset && function_exists('iconv')) {
- foreach($obj as $key=>$val) {
- $obj->{$key} = iconv('UTF-8',$charset,$val);
- }
- }
+ // blog_name, title, excerpt, url의 문자열을 요청된 charset으로 변경
+ if($charset && function_exists('iconv')) {
+ foreach($obj as $key=>$val) {
+ $obj->{$key} = iconv('UTF-8',$charset,$val);
+ }
+ }
- if($http['query']) $http['query'].="&";
- if(!$http['port']) $http['port'] = 80;
- $content =
- sprintf(
- "title=%s&".
- "url=%s&".
- "blog_name=%s&".
- "excerpt=%s",
- urlencode($obj->title),
- urlencode($obj->url),
- urlencode($obj->blog_name),
- urlencode($obj->excerpt)
- );
- if($http['query']) $content .= '&'.$http['query'];
+ // socket으로 발송할 내용 작성
+ if($http['query']) $http['query'].="&";
+ if(!$http['port']) $http['port'] = 80;
- $content_length = strlen($content);
+ $content =
+ sprintf(
+ "title=%s&".
+ "url=%s&".
+ "blog_name=%s&".
+ "excerpt=%s",
+ urlencode($obj->title),
+ urlencode($obj->url),
+ urlencode($obj->blog_name),
+ urlencode($obj->excerpt)
+ );
+ if($http['query']) $content .= '&'.$http['query'];
+ $content_length = strlen($content);
- $header =
- sprintf(
- "POST %s HTTP/1.1\r\n".
- "Host: %s\r\n".
- "Content-Type: %s\r\n".
- "Content-Length: %s\r\n\r\n".
- "%s\r\n",
- $http['path'],
- $http['host'],
- "application/x-www-form-urlencoded",
- $content_length,
- $content
- );
- if(!$http['host']||!$http['port']) return;
+ $header =
+ sprintf(
+ "POST %s HTTP/1.1\r\n".
+ "Host: %s\r\n".
+ "Content-Type: %s\r\n".
+ "Content-Length: %s\r\n\r\n".
+ "%s\r\n",
+ $http['path'],
+ $http['host'],
+ "application/x-www-form-urlencoded",
+ $content_length,
+ $content
+ );
+ if(!$http['host']||!$http['port']) return;
- $fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
- if(!$fp) return;
+ $fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
+ if(!$fp) return;
- fputs($fp, $header);
+ fputs($fp, $header);
- while(!feof($fp)) {
- $line = trim(fgets($fp, 4096));
- if(eregi("^",$line)) break;
- }
+ while(!feof($fp)) {
+ $line = trim(fgets($fp, 4096));
+ if(eregi("^",$line)) break;
+ }
- fclose($fp);
+ fclose($fp);
}
}
?>
diff --git a/modules/trackback/trackback.model.php b/modules/trackback/trackback.model.php
index 0969e5fae..731712c8e 100644
--- a/modules/trackback/trackback.model.php
+++ b/modules/trackback/trackback.model.php
@@ -1,251 +1,56 @@
- * @desc : 기본 모듈중의 하나인 trackback module
- * Module class에서 상속을 받아서 사용
- * action 의 경우 disp/proc 2가지만 존재하며 이는 action명세서에
- * 미리 기록을 하여야 함
+ * @class trackbackModel
+ * @author zero (zero@nzeo.com)
+ * @brief trackback 모듈의 model class
**/
- class trackback extends Module {
+ class trackbackModel extends Module {
/**
- * 모듈의 정보
+ * @brief 초기화
**/
- var $cur_version = "20070130_0.01";
-
- /**
- * 기본 action 지정
- * $act값이 없거나 잘못된 값이 들어올 경우 $default_act 값으로 진행
- **/
- var $default_act = '';
-
- /**
- * 현재 모듈의 초기화를 위한 작업을 지정해 놓은 method
- * css/js파일의 load라든지 lang파일 load등을 미리 선언
- *
- * Init() => 공통
- * dispInit() => disp시에
- * procInit() => proc시에
- *
- * $this->module_path는 현재 이 모듈파일의 위치를 나타낸다
- * (ex: $this->module_path = "./modules/install/";
- **/
-
- // 초기화
function init() {
}
- // disp 초기화
- function dispInit() {
- }
-
- // proc 초기화
- function procInit() {
- }
-
/**
- * 여기서부터는 action의 구현
- * request parameter의 경우 각 method의 첫번째 인자로 넘어온다
- *
- * dispXXXX : 출력을 위한 method, output에 tpl file이 지정되어야 한다
- * procXXXX : 처리를 위한 method, output에는 trackback, trackback가 지정되어야 한다
+ * @brief 하나의 트랙백 정보를 구함
**/
-
- /**
- * 여기부터는 이 모듈과 관련된 라이브러리 개념의 method들
- **/
-
- // public boolean insertTrackback($obj)
- // 엮인글 입력
- function insertTrackback($obj) {
- // document_srl에 해당하는 글이 있는지 확인
- $document_srl = $obj->document_srl;
- if(!$document_srl) $this->dispMessage(-1, 'fail');
-
- $oDocument = getModule('document');
- $document = $oDocument->getDocument($document_srl);
-
- if(!$document_srl) $this->dispMessage(-1,'fail');
- if($document->allow_trackback=='N') $this->dispMessage(-1,'fail');
-
- // 엮인글 정리
- $obj = Context::convertEncoding($obj);
- if(!$obj->blog_name) $obj->blog_name = $obj->title;
- $obj->excerpt = strip_tags($obj->excerpt);
-
- // 엮인글를 입력
- $oDB = &DB::getInstance();
- $obj->list_order = $obj->trackback_srl = $oDB->getNextSequence();
- $obj->module_srl = $document->module_srl;
- $output = $oDB->executeQuery('trackback.insertTrackback', $obj);
-
- // 입력에 이상이 없으면 해당 글의 엮인글 수를 올림
- if(!$output->toBool()) $this->dispMessage(-1, 'fail');
-
- // 해당 글의 전체 엮인글 수를 구해옴
- $trackback_count = $this->getTrackbackCount($document_srl);
-
- // 해당글의 엮인글 수를 업데이트
- $output = $oDocument->updateTrackbackCount($document_srl, $trackback_count);
-
- if(!$output->toBool()) $this->dispMessage(-1,'fail');
- else $this->dispMessage(0,'success');
- }
-
- function dispMessage($error, $message) {
- // 헤더 출력
- header("Content-Type: text/xml; charset=UTF-8");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-store, no-cache, must-revalidate");
- header("Cache-Control: post-check=0, pre-check=0", false);
- header("Pragma: no-cache");
- print ''."\n";
- print "\n{$error}{$message}";
- exit();
- }
-
- // public boolean getTrackback($trackback_srl)
- // 엮인글 삭제
function getTrackback($trackback_srl) {
- $oDB = &DB::getInstance();
- $args->trackback_srl = $trackback_srl;
- return $oDB->executeQuery('trackback.getTrackback', $args);
+ $oDB = &DB::getInstance();
+ $args->trackback_srl = $trackback_srl;
+ return $oDB->executeQuery('trackback.getTrackback', $args);
}
- // public boolean deleteTrackback($trackback_srl)
- // 엮인글 삭제
- function deleteTrackback($trackback_srl) {
- // 삭제하려는 엮인글이 있는지 확인
- $trackback = $this->getTrackback($trackback_srl);
- if($trackback->data->trackback_srl != $trackback_srl) return new Output(-1, 'msg_invalid_request');
- $document_srl = $trackback->data->document_srl;
-
- // 권한이 있는지 확인
- $oDocument = getModule('document');
- if(!$oDocument->isGranted($document_srl)) return new Output(-1, 'msg_not_permitted');
-
- // 삭제
- $oDB = &DB::getInstance();
- $args->trackback_srl = $trackback_srl;
- $output = $oDB->executeQuery('trackback.deleteTrackback', $args);
- if(!$output->toBool()) return new Output(-1, 'msg_error_occured');
-
- // 엮인글 수를 구해서 업데이트
- $trackback_count = $this->getTrackbackCount($document_srl);
-
- // 해당글의 엮인글 수를 업데이트
- $oDocument = getModule('document');
- $output = $oDocument->updateTrackbackCount($document_srl, $trackback_count);
- $output->add('document_srl', $document_srl);
- return $output;
- }
-
- // public boolean deleteTrackbacks($document_srl)
- // 엮인글 삭제
- function deleteTrackbacks($document_srl) {
- // 삭제
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $output = $oDB->executeQuery('trackback.deleteTrackbacks', $args);
- return $output;
- }
-
- // public boolean deleteModuleTrackbacks($module_srl)
- // 엮인글 삭제
- function deleteModuleTrackbacks($module_srl) {
- // 삭제
- $oDB = &DB::getInstance();
- $args->module_srl = $module_srl;
- $output = $oDB->executeQuery('trackback.deleteModuleTrackbacks', $args);
- return $output;
- }
-
- // public number getTrackbackCount($module_srl, $search_obj = NULL)
- // document_srl 에 해당하는 엮인글의 전체 갯수를 가져옴
+ /**
+ * @brief document_srl 에 해당하는 엮인글의 전체 갯수를 가져옴
+ **/
function getTrackbackCount($document_srl) {
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $output = $oDB->executeQuery('trackback.getTrackbackCount', $args);
- $total_count = $output->data->count;
- return (int)$total_count;
+ $oDB = &DB::getInstance();
+ $args->document_srl = $document_srl;
+ $output = $oDB->executeQuery('trackback.getTrackbackCount', $args);
+ $total_count = $output->data->count;
+ return (int)$total_count;
}
- // public boolean getTrackbackList($document_srl)
- // module_srl값을 가지는 엮인글의 목록을 가져옴
+ /**
+ * @brief 특정 문서에 속한 엮인글의 목록을 가져옴
+ **/
function getTrackbackList($document_srl) {
- // 엮인글 목록을 가져옴
- $oDB = &DB::getInstance();
- $args->document_srl = $document_srl;
- $args->list_order = 'list_order';
- $output = $oDB->executeQuery('trackback.getTrackbackList', $args);
- if(!$output->toBool()) return $output;
- $trackback_list = $output->data;
- if(!is_array($trackback_list)) $trackback_list = array($trackback_list);
- return $trackback_list;
+ $oDB = &DB::getInstance();
+
+ $args->document_srl = $document_srl;
+ $args->list_order = 'list_order';
+ $output = $oDB->executeQuery('trackback.getTrackbackList', $args);
+
+ if(!$output->toBool()) return $output;
+
+ $trackback_list = $output->data;
+
+ if(!is_array($trackback_list)) $trackback_list = array($trackback_list);
+
+ return $trackback_list;
}
- // public boolean sendTrackback($document)
- // 엮인글을 발송
- function sendTrackback($document, $trackback_url, $charset) {
- // 발송할 정보를 정리
- $http = parse_url($trackback_url);
- $obj->blog_name = Context::getBrowserTitle();
- $obj->title = $document->title;
- $obj->excerpt = cut_str($document->content, 240);
- $obj->url = sprintf("%s?document_srl=%d", Context::getRequestUri(), $document->document_srl);
-
- if($charset && function_exists('iconv')) {
- foreach($obj as $key=>$val) {
- $obj->{$key} = iconv('UTF-8',$charset,$val);
- }
- }
-
- if($http['query']) $http['query'].="&";
- if(!$http['port']) $http['port'] = 80;
- $content =
- sprintf(
- "title=%s&".
- "url=%s&".
- "blog_name=%s&".
- "excerpt=%s",
- urlencode($obj->title),
- urlencode($obj->url),
- urlencode($obj->blog_name),
- urlencode($obj->excerpt)
- );
- if($http['query']) $content .= '&'.$http['query'];
-
- $content_length = strlen($content);
-
- $header =
- sprintf(
- "POST %s HTTP/1.1\r\n".
- "Host: %s\r\n".
- "Content-Type: %s\r\n".
- "Content-Length: %s\r\n\r\n".
- "%s\r\n",
- $http['path'],
- $http['host'],
- "application/x-www-form-urlencoded",
- $content_length,
- $content
- );
- if(!$http['host']||!$http['port']) return;
-
- $fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
- if(!$fp) return;
-
- fputs($fp, $header);
-
- while(!feof($fp)) {
- $line = trim(fgets($fp, 4096));
- if(eregi("^",$line)) break;
- }
-
- fclose($fp);
- }
}
?>