From 222720e4d469d67a91f4ca9e9c677a9a35d22688 Mon Sep 17 00:00:00 2001 From: zero Date: Mon, 28 May 2007 06:41:26 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@1486 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/blogapi/blogapi.addon.php | 168 +++++++++++++++++++++++++++ addons/blogapi/blogapi.func.php | 51 ++++++++ addons/blogapi/conf/info.xml | 5 +- addons/blogapi/counter.addon.php | 20 ---- classes/object/Object.class.php | 2 +- modules/member/member.controller.php | 3 + 6 files changed, 225 insertions(+), 24 deletions(-) create mode 100644 addons/blogapi/blogapi.addon.php create mode 100644 addons/blogapi/blogapi.func.php delete mode 100644 addons/blogapi/counter.addon.php diff --git a/addons/blogapi/blogapi.addon.php b/addons/blogapi/blogapi.addon.php new file mode 100644 index 000000000..5f7795fb2 --- /dev/null +++ b/addons/blogapi/blogapi.addon.php @@ -0,0 +1,168 @@ +parse(); + + $method_name = $xmlDoc->methodcall->methodname->body; + $params = $xmlDoc->methodcall->params->param; + if($params && !is_array($params)) $params = array($params); + + // user_id, password를 구해서 로그인 시도 + $appkey = $params[0]->value->string->body; + $user_id = $params[1]->value->string->body; + $password = $params[2]->value->string->body; + + // member controller을 이용해서 로그인 시도 + $oMemberController = &getController('member'); + $output = $oMemberController->doLogin($user_id, $password); + + // 로그인 실패시 에러 메시지 출력 + if(!$output->toBool()) { + $content = getXmlRpcFailure(1, $output->getMessage()); + + // 로그인 성공시 method name에 따른 실행 + } else { + + // 카테고리의 정보를 구해옴 + $oDocumentModel = &getModel('document'); + $category_list = $oDocumentModel->getCategoryList($this->module_srl); + + // 임시 파일 저장 장소 지정 + $tmp_uploaded_path = sprintf('./files/cache/blogapi/%s/%s/', $this->mid, $user_id); + + switch($method_name) { + // 블로그 정보 + case 'blogger.getUsersBlogs' : + $obj->blogid = $this->mid; + $obj->url = Context::getRequestUri().$this->mid; + $obj->blogName = $this->module_info->browser_title; + $blog_list = array($obj); + + $content = getXmlRpcResponse($blog_list); + break; + + // 카테고리 목록 return + case 'metaWeblog.getCategories' : + $category_obj_list = array(); + if($category_list) { + foreach($category_list as $category_srl => $category_info) { + unset($obj); + $obj->description = $category_info->title; + //$obj->htmlUrl = Context::getRequestUri().$this->mid.'/1'; + //$obj->rssUrl= Context::getRequestUri().'rss/'.$this->mid.'/1'; + $obj->title = $category_info->title; + $obj->categoryid = $category_srl; + $category_obj_list[] = $obj; + } + } + + $content = getXmlRpcResponse($category_obj_list); + break; + + // 파일 업로드 + case 'metaWeblog.newMediaObject' : + $fileinfo = $params[3]; + $filedata = base64_decode($fileinfo->value->struct->member[0]->value->base64->body); + $filename = $fileinfo->value->struct->member[1]->value->string->body; + + if(!is_dir($tmp_uploaded_path)) FileHandler::makeDir($tmp_uploaded_path); + + $target_filename = sprintf('%s%s', $tmp_uploaded_path, $filename); + FileHandler::writeFile($target_filename, $filedata); + + $content = getXmlRpcResponse('{UPLOADED_PATH}'.$filename); + break; + + // 글작성 + case 'metaWeblog.newPost' : + unset($obj); + $info = $params[3]; + // 글, 제목, 카테고리 정보 구함 + for($i=0;$ivalue->struct->member);$i++) { + $val = $info->value->struct->member[$i]; + switch($val->name->body) { + case 'title' : + $obj->title = $val->value->string->body; + break; + case 'description' : + $obj->content = $val->value->string->body; + break; + case 'categories' : + $categories = $val->value->array->data->value; + if(!is_array($categories)) $categories = array($categories); + $category = $categories[0]->string->body; + if($category && $category_list) { + foreach($category_list as $category_srl => $category_info) { + if($category_info->title == $category) $obj->category_srl = $category_srl; + } + } + break; + case 'tagwords' : + $tags = $val->value->array->data->value; + if(!is_array($tags)) $tags = array($tags); + for($j=0;$jstring->body; + } + if(count($tag_list)) $obj->tags = implode(',',$tag_list); + break; + } + + } + + // 문서 번호 설정 + $document_srl = getNextSequence(); + $obj->document_srl = $document_srl; + $obj->module_srl = $this->module_srl; + + // 첨부파일 정리 + if(is_dir($tmp_uploaded_path)) { + $file_list = FileHandler::readDir($tmp_uploaded_path); + $file_count = count($file_list); + if($file_count) { + $oFileController = &getController('file'); + for($i=0;$i<$file_count;$i++) { + $file_info['tmp_name'] = sprintf('%s%s', $tmp_uploaded_path, $file_list[$i]); + $file_info['name'] = $file_list[$i]; + $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true); + } + $obj->uploaded_count = $file_count; + $obj->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'); + $output = $oDocumentController->insertDocument($obj); + + if(!$output->toBool()) { + $content = getXmlRpcFailure(1, $output->getMessage()); + } else { + $content = getXmlRpcResponse(Context::getRequestUri().$this->mid.'/'.$document_srl); + FileHandler::removeDir($tmp_uploaded_path); + } + break; + } + } + + header("Content-Type: text/xml; charset=UTF-8"); + print $content; + + exit(); +?> diff --git a/addons/blogapi/blogapi.func.php b/addons/blogapi/blogapi.func.php new file mode 100644 index 000000000..1230bfa5b --- /dev/null +++ b/addons/blogapi/blogapi.func.php @@ -0,0 +1,51 @@ +\n\n\nfaultCode\n%d\n\n\nfaultString\n%s\n\n\n\n", + $error, + htmlspecialchars($message) + ); + } + + function getXmlRpcResponse($params) { + $buff = ''."\n"; + $buff .= _getEncodedVal($params); + $buff .= "\n\n"; + + return $buff; + } + + function _getEncodedVal($val) { + if(is_int($val)) $buff = sprintf("%d\n", $val); + elseif(is_double($val)) $buff = sprintf("%f\n", $val); + elseif(is_bool($val)) $buff = sprintf("%d\n", $val?1:0); + elseif(is_object($val)) { + $values = get_object_vars($val); + $val_count = count($values); + $buff = ""; + foreach($values as $k => $v) { + $buff .= sprintf("\n%s\n%s\n\n", htmlspecialchars($k), _getEncodedVal($v)); + } + $buff .= "\n"; + } elseif(is_array($val)) { + $val_count = count($val); + $buff = "\n"; + for($i=0;$i<$val_count;$i++) { + $buff .= sprintf("%s\n", _getEncodedVal($val[$i])); + } + $buff .= "\n"; + } else { + $buff = sprintf("%s\n", $val); + } + return sprintf("\n%s\n", $buff); + } +?> diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index 73cc313cd..d4220dc69 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -1,11 +1,10 @@ - 기본 카운터 애드온 + BlogAPI 애드온 제로 - 제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다. - 이 애드온을 켜셔야 접속 정보 수집이 됩니다. + 외부 툴을 이용해서 글을 입력할 수 있는 BlogApi 애드온입니다. diff --git a/addons/blogapi/counter.addon.php b/addons/blogapi/counter.addon.php deleted file mode 100644 index fc2bed4ae..000000000 --- a/addons/blogapi/counter.addon.php +++ /dev/null @@ -1,20 +0,0 @@ -module != 'admin') Context::addJsFile('./modules/counter/tpl/js/counter.js'); - $GLOBALS['__counter_addon_called__'] = true; - } -?> diff --git a/classes/object/Object.class.php b/classes/object/Object.class.php index 0e100c077..f4e6f53d5 100644 --- a/classes/object/Object.class.php +++ b/classes/object/Object.class.php @@ -33,7 +33,7 @@ * @brief error 코드를 return **/ function getError() { - return $this->error; + return $this->error; } /** diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index e4ba01a4b..560626c88 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -913,6 +913,9 @@ $_SESSION['group_srls'] = $group_srl_list; $_SESSION['is_admin'] = $member_info->is_admin=='Y'?true:false; + Context::set('is_logged', true); + Context::set('logged_info', $member_info); + // 사용자 정보의 최근 로그인 시간을 기록 $args->member_srl = $member_info->member_srl; $output = executeQuery('member.updateLastLogin', $args);