Example #1
0
 /**
  * Get a document list from the trash
  * @param object $obj
  * @return object
  */
 function getDocumentTrashList($obj)
 {
     // check a list and its order
     if (!in_array($obj->sort_index, array('list_order', 'delete_date', 'title'))) {
         $obj->sort_index = 'list_order';
     }
     if (!in_array($obj->order_type, array('desc', 'asc'))) {
         $obj->order_type = 'asc';
     }
     // get a module_srl if mid is returned instead of modul_srl
     if ($obj->mid) {
         $oModuleModel = getModel('module');
         $obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
         unset($obj->mid);
     }
     // check if the module_srl is an array
     $args = new stdClass();
     if (is_array($obj->module_srl)) {
         $args->module_srl = implode(',', $obj->module_srl);
     } else {
         $args->module_srl = $obj->module_srl;
     }
     // Variable check
     $args->sort_index = $obj->sort_index;
     $args->order_type = $obj->order_type;
     $args->page = $obj->page ? $obj->page : 1;
     $args->list_count = $obj->list_count ? $obj->list_count : 20;
     $args->page_count = $obj->page_count ? $obj->page_count : 10;
     $args->member_srl = $obj->member_srl;
     // Specify query_id
     $query_id = 'document.getTrashList';
     // Execute a query
     $output = executeQueryArray($query_id, $args);
     // Return if no result or an error occurs
     if (!$output->toBool() || !count($output->data)) {
         return $output;
     }
     $idx = 0;
     $data = $output->data;
     unset($output->data);
     $keys = array_keys($data);
     $virtual_number = $keys[0];
     foreach ($data as $key => $attribute) {
         $oDocument = null;
         $oDocument = new documentItem();
         $oDocument->setAttribute($attribute, false);
         if ($is_admin) {
             $oDocument->setGrant();
         }
         $output->data[$virtual_number] = $oDocument;
         $virtual_number--;
     }
     return $output;
 }
 /**
  * @brief 휴지통에 존재하는 문서 목록을 가져옴
  **/
 function getDocumentTrashList($obj)
 {
     // 정렬 대상과 순서 체크
     if (!in_array($obj->sort_index, array('list_order', 'delete_date', 'title'))) {
         $obj->sort_index = 'list_order';
     }
     if (!in_array($obj->order_type, array('desc', 'asc'))) {
         $obj->order_type = 'asc';
     }
     // module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌
     if ($obj->mid) {
         $oModuleModel =& getModel('module');
         $obj->module_srl = $oModuleModel->getModuleSrlByMid($obj->mid);
         unset($obj->mid);
     }
     // 넘어온 module_srl은 array일 수도 있기에 array인지를 체크
     if (is_array($obj->module_srl)) {
         $args->module_srl = implode(',', $obj->module_srl);
     } else {
         $args->module_srl = $obj->module_srl;
     }
     // 변수 체크
     $args->sort_index = $obj->sort_index;
     $args->order_type = $obj->order_type;
     $args->page = $obj->page ? $obj->page : 1;
     $args->list_count = $obj->list_count ? $obj->list_count : 20;
     $args->page_count = $obj->page_count ? $obj->page_count : 10;
     $args->member_srl = $obj->member_srl;
     // query_id 지정
     $query_id = 'document.getTrashList';
     // query 실행
     $output = executeQueryArray($query_id, $args);
     // 결과가 없거나 오류 발생시 그냥 return
     if (!$output->toBool() || !count($output->data)) {
         return $output;
     }
     $idx = 0;
     $data = $output->data;
     unset($output->data);
     $keys = array_keys($data);
     $virtual_number = $keys[0];
     foreach ($data as $key => $attribute) {
         $oDocument = null;
         $oDocument = new documentItem();
         $oDocument->setAttribute($attribute, false);
         if ($is_admin) {
             $oDocument->setGrant();
         }
         $output->data[$virtual_number] = $oDocument;
         $virtual_number--;
     }
     return $output;
 }
 function getPostList()
 {
     $oDocumentList = array();
     $args->module_srl = join(',', array($this->module_srl, $this->module_srl * -1));
     $output = executeQueryArray('textyle.getExportDocumentList', $args);
     if ($output->data) {
         foreach ($output->data as $attribute) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $oDocument->category = $this->category_list[$oDocument->get('category_srl')]->title;
             $oDocumentList[] = $oDocument;
         }
     }
     return $oDocumentList;
 }
Example #4
0
 function getContent($add_popup_menu = false, $add_content_info = true, $resource_realpath = false, $add_xe_content_class = true)
 {
     if (!$this->document_srl) {
         return;
     }
     return parent::getContent($add_popup_menu, $add_content_info, $resource_realpath, $add_xe_content_class);
 }
Example #5
0
 /**
  * @brief content list
  **/
 function dispBoardContentList(&$oModule)
 {
     $api_type = Context::get('api_type');
     $document_list = $this->arrangeContentList(Context::get('document_list'));
     if ($api_type == 'summary') {
         $content_cut_size = Context::get('content_cut_size');
         $content_cut_size = $content_cut_size ? $content_cut_size : 50;
         foreach ($document_list as $k => $v) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($v, false);
             $document_list[$k]->content = $oDocument->getSummary($content_cut_size);
             unset($oDocument);
         }
     }
     $oModule->add('document_list', $document_list);
     $oModule->add('page_navigation', Context::get('page_navigation'));
 }
 /**
  * Remove all comments of the article
  * @param int $document_srl
  * @return object
  */
 function deleteComments($document_srl, $obj = NULL)
 {
     // create the document model object
     $oDocumentModel = getModel('document');
     $oCommentModel = getModel('comment');
     // check if permission is granted
     if (is_object($obj)) {
         $oDocument = new documentItem();
         $oDocument->setAttribute($obj);
     } else {
         $oDocument = $oDocumentModel->getDocument($document_srl);
     }
     if (!$oDocument->isExists() || !$oDocument->isGranted()) {
         return new Object(-1, 'msg_not_permitted');
     }
     // get a list of comments and then execute a trigger(way to reduce the processing cost for delete all)
     $args = new stdClass();
     $args->document_srl = $document_srl;
     $comments = executeQueryArray('comment.getAllComments', $args);
     if ($comments->data) {
         $commentSrlList = array();
         foreach ($comments->data as $comment) {
             $commentSrlList[] = $comment->comment_srl;
             // call a trigger (before)
             $output = ModuleHandler::triggerCall('comment.deleteComment', 'before', $comment);
             if (!$output->toBool()) {
                 continue;
             }
             // call a trigger (after)
             $output = ModuleHandler::triggerCall('comment.deleteComment', 'after', $comment);
             if (!$output->toBool()) {
                 continue;
             }
         }
     }
     // delete the comment
     $args->document_srl = $document_srl;
     $output = executeQuery('comment.deleteComments', $args);
     if (!$output->toBool()) {
         return $output;
     }
     // Delete a list of comments
     $output = executeQuery('comment.deleteCommentsList', $args);
     //delete declared, declared_log, voted_log
     if (is_array($commentSrlList) && count($commentSrlList) > 0) {
         $args = new stdClass();
         $args->comment_srl = join(',', $commentSrlList);
         $this->_deleteDeclaredComments($args);
         $this->_deleteVotedComments($args);
     }
     return $output;
 }
Example #7
0
 function _getDocumentItems($args)
 {
     // document 모듈의 model 객체를 받아서 결과를 객체화 시킴
     $oDocumentModel =& getModel('document');
     // 분류 구함
     $obj->module_srl = $args->module_srl;
     $output = executeQueryArray('widgets.content.getCategories', $obj);
     if ($output->toBool() && $output->data) {
         foreach ($output->data as $key => $val) {
             $category_lists[$val->module_srl][$val->category_srl] = $val;
         }
     }
     // 글 목록을 구함
     $obj->module_srl = $args->module_srl;
     $obj->sort_index = $args->order_target;
     $obj->order_type = $args->order_type == "desc" ? "asc" : "desc";
     $obj->list_count = $args->list_count * $args->page_count;
     $output = executeQueryArray('widgets.content.getNewestDocuments', $obj);
     if (!$output->toBool() || !$output->data) {
         return;
     }
     // 결과가 있으면 각 문서 객체화를 시킴
     $content_items = array();
     $first_thumbnail_idx = -1;
     if (count($output->data)) {
         foreach ($output->data as $key => $attribute) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument;
             $document_srls[] = $oDocument->document_srl;
         }
         $oDocumentModel->setToAllDocumentExtraVars();
         for ($i = 0, $c = count($document_srls); $i < $c; $i++) {
             $oDocument = $GLOBALS['XE_DOCUMENT_LIST'][$document_srls[$i]];
             $document_srl = $oDocument->document_srl;
             $module_srl = $oDocument->get('module_srl');
             $category_srl = $oDocument->get('category_srl');
             $thumbnail = $oDocument->getThumbnail($args->thumbnail_width, $args->thumbnail_height, $args->thumbnail_type);
             $content_item = new contentItem($args->module_srls_info[$module_srl]->browser_title);
             $content_item->adds($oDocument->getObjectVars());
             $content_item->setTitle($oDocument->getTitle());
             $content_item->setCategory($category_lists[$module_srl][$category_srl]->title);
             $content_item->setDomain($args->module_srls_info[$module_srl]->domain);
             $content_item->setContent($oDocument->getSummary($args->content_cut_size));
             $content_item->setLink(getSiteUrl($domain, '', 'document_srl', $document_srl));
             $content_item->setThumbnail($thumbnail);
             $content_item->setExtraImages($oDocument->printExtraImages($args->duration_new * 60 * 60));
             $content_item->add('mid', $args->mid_lists[$module_srl]);
             if ($first_thumbnail_idx == -1 && $thumbnail) {
                 $first_thumbnail_idx = $i;
             }
             $content_items[] = $content_item;
         }
         $content_items[0]->setFirstThumbnailIdx($first_thumbnail_idx);
     }
     return $content_items;
 }
 private function getDocumentItems($query, $args)
 {
     $documents = executeQuery($query, $args);
     if ($documents->data) {
         if (!is_array($documents->data)) {
             $documents->data = array($documents->data);
         }
         foreach ($documents->data as $key => &$attribute) {
             $document_srl = $attribute->document_srl;
             $oDocumentMostPopular = null;
             $oDocumentMostPopular = new documentItem();
             $oDocumentMostPopular->setAttribute($attribute, false);
             $attribute = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl];
         }
     }
     return $documents;
 }
Example #9
0
 function _getDocumentItems($args)
 {
     // Get model object from the document module
     $oDocumentModel =& getModel('document');
     // Get categories
     $obj->module_srl = $args->module_srl;
     $output = executeQueryArray('widgets.content.getCategories', $obj);
     if ($output->toBool() && $output->data) {
         foreach ($output->data as $key => $val) {
             $category_lists[$val->module_srl][$val->category_srl] = $val;
         }
     }
     // Get a list of documents
     $obj->module_srl = $args->module_srl;
     $obj->category_srl = $args->category_srl;
     $obj->sort_index = $args->order_target;
     $obj->order_type = $args->order_type == "desc" ? "asc" : "desc";
     $obj->list_count = $args->list_count * $args->page_count;
     $obj->statusList = array('PUBLIC');
     $output = executeQueryArray('widgets.content.getNewestDocuments', $obj);
     if (!$output->toBool() || !$output->data) {
         return;
     }
     // If the result exists, make each document as an object
     $content_items = array();
     $first_thumbnail_idx = -1;
     if (count($output->data)) {
         foreach ($output->data as $key => $attribute) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument;
             $document_srls[] = $oDocument->document_srl;
         }
         $oDocumentModel->setToAllDocumentExtraVars();
         for ($i = 0, $c = count($document_srls); $i < $c; $i++) {
             $oDocument = $GLOBALS['XE_DOCUMENT_LIST'][$document_srls[$i]];
             $document_srl = $oDocument->document_srl;
             $module_srl = $oDocument->get('module_srl');
             $category_srl = $oDocument->get('category_srl');
             $thumbnail = $oDocument->getThumbnail($args->thumbnail_width, $args->thumbnail_height, $args->thumbnail_type);
             $content_item = new contentItem($args->module_srls_info[$module_srl]->browser_title);
             $content_item->adds($oDocument->getObjectVars());
             $content_item->add('original_content', $oDocument->get('content'));
             $content_item->setTitle($oDocument->getTitleText());
             $content_item->setCategory($category_lists[$module_srl][$category_srl]->title);
             $content_item->setDomain($args->module_srls_info[$module_srl]->domain);
             $content_item->setContent($oDocument->getSummary($args->content_cut_size));
             $content_item->setLink(getSiteUrl($domain, '', 'document_srl', $document_srl));
             $content_item->setThumbnail($thumbnail);
             $content_item->setExtraImages($oDocument->printExtraImages($args->duration_new * 60 * 60));
             $content_item->add('mid', $args->mid_lists[$module_srl]);
             if ($first_thumbnail_idx == -1 && $thumbnail) {
                 $first_thumbnail_idx = $i;
             }
             $content_items[] = $content_item;
         }
         $content_items[0]->setFirstThumbnailIdx($first_thumbnail_idx);
     }
     $oSecurity = new Security($content_items);
     $oSecurity->encodeHTML('..variables.content', '..variables.user_name', '..variables.nick_name');
     return $content_items;
 }
 /**
  * @brief 게시글 목록 반환
  * @description documentModel::getDocumentList 함수를 타임라인 모듈에 맞게 변환
  * @param object $obj
  * @param boolean $except_notice
  * @param boolean $load_extra_vars
  * @param array $column_list
  * @return object
  */
 function getDocumentList($obj, $except_notice = FALSE, $load_extra_vars = TRUE, $column_list = array())
 {
     $oDocumentModel = getModel('document');
     $sort_check = $oDocumentModel->_setSortIndex($obj, $load_extra_vars);
     $obj->sort_index = $sort_check->sort_index;
     $obj->isExtraVars = $sort_check->isExtraVars;
     $this->_setSearchOption($obj, $args, $query_id, $use_division);
     if ($sort_check->isExtraVars) {
         $output = executeQueryArray($query_id, $args);
     } else {
         $group_by_query = array('timeline.getDocumentListWithinComment', 'timeline.getDocumentListWithinTag', 'timeline.getDocumentListWithinExtraVars');
         if (in_array($query_id, $group_by_query)) {
             $group_args = clone $args;
             $group_args->sort_index = 'documents.' . $args->sort_index;
             $output = executeQueryArray($query_id, $group_args);
             if (!($output->toBool() && count($output->data))) {
                 return $output;
             }
             foreach ($output->data as $key => $val) {
                 if ($val->document_srl) {
                     $target_srls[] = $val->document_srl;
                 }
             }
             $page_navigation = $output->page_navigation;
             $keys = array_keys($output->data);
             $virtual_number = $keys[0];
             $target_args = new stdClass();
             $target_args->document_srls = implode(',', $target_srls);
             $target_args->list_order = $args->sort_index;
             $target_args->order_type = $args->order_type;
             $target_args->list_count = $args->list_count;
             $target_args->page = 1;
             $output = executeQueryArray('document.getDocuments', $target_args);
             $output->page_navigation = $page_navigation;
             $output->total_count = $page_navigation->total_count;
             $output->total_page = $page_navigation->total_page;
             $output->page = $page_navigation->cur_page;
         } else {
             $output = executeQueryArray($query_id, $args, $column_list);
         }
     }
     if (!($output->toBool() && count($output->data))) {
         return $output;
     }
     $idx = 0;
     $data = $output->data;
     unset($output->data);
     if (is_null($virtual_number)) {
         $keys = array_keys($data);
         $virtual_number = $keys[0];
     }
     if ($except_notice) {
         foreach ($data as $key => $attribute) {
             if ($attribute->is_notice == 'Y') {
                 $virtual_number--;
             }
         }
     }
     foreach ($data as $key => $attribute) {
         if ($except_notice && $attribute->is_notice == 'Y') {
             continue;
         }
         $document_srl = $attribute->document_srl;
         if (!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, FALSE);
             if ($is_admin) {
                 $oDocument->setGrant();
             }
             $GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
         }
         $output->data[$virtual_number] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl];
         $virtual_number--;
     }
     if ($load_extra_vars) {
         $oDocumentModel->setToAllDocumentExtraVars();
     }
     if (is_array($output->data) && count($output->data)) {
         foreach ($output->data as $number => $document) {
             $output->data[$number] = $GLOBALS['XE_DOCUMENT_LIST'][$document->document_srl];
         }
     } else {
         $output->data = array();
     }
     return $output;
 }
Example #11
0
 /**
  * Update read counts of the document
  * @param documentItem $oDocument
  * @return bool|void
  */
 function updateReadedCount(&$oDocument)
 {
     $document_srl = $oDocument->document_srl;
     $member_srl = $oDocument->get('member_srl');
     $logged_info = Context::get('logged_info');
     // Call a trigger when the read count is updated (before)
     $trigger_output = ModuleHandler::triggerCall('document.updateReadedCount', 'before', $oDocument);
     if (!$trigger_output->toBool()) {
         return $trigger_output;
     }
     // Pass if read count is increaded on the session information
     if ($_SESSION['readed_document'][$document_srl]) {
         return false;
     }
     // Pass if the author's IP address is as same as visitor's.
     if ($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR']) {
         $_SESSION['readed_document'][$document_srl] = true;
         return false;
     }
     // Pass ater registering sesscion if the author is a member and has same information as the currently logged-in user.
     if ($member_srl && $logged_info->member_srl == $member_srl) {
         $_SESSION['readed_document'][$document_srl] = true;
         return false;
     }
     $oDB = DB::getInstance();
     $oDB->begin();
     // Update read counts
     $args = new stdClass();
     $args->document_srl = $document_srl;
     $output = executeQuery('document.updateReadedCount', $args);
     // Call a trigger when the read count is updated (after)
     $outptrigger_outputut = ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
     if (!$trigger_output->toBool()) {
         $oDB->rollback();
         return $trigger_output;
     }
     $oDB->commit();
     $oCacheHandler = CacheHandler::getInstance('object');
     if ($oCacheHandler->isSupport()) {
         //remove document item from cache
         $cache_key = 'document_item:' . getNumberingPath($document_srl) . $document_srl;
         $oCacheHandler->delete($cache_key);
     }
     // Register session
     $_SESSION['readed_document'][$document_srl] = true;
     return TRUE;
 }
 function dispTextylehubUpdated()
 {
     $oTextyleModel =& getModel('textyle');
     $oDocumentModel =& getModel('document');
     $page = (int) Context::get('page');
     if (!$page) {
         $page = 1;
     }
     Context::set('page', $page);
     $hub = $this->getTextyleSubContent();
     $args->page = $page;
     $args->page_count = 10;
     $args->list_count = $this->module_info->newest_textyles_count;
     $output = executeQueryArray('textylehub.getTextyles', $args);
     Context::set('page_navigation', $output->page_navigation);
     if (count($output->data)) {
         foreach ($output->data as $key => $val) {
             $val->photo_src = $oTextyleModel->getTextylePhotoSrc($val->member_srl);
             $hub->textyles[$val->module_srl] = $val;
         }
         $module_srls = array_keys($hub->textyles);
         if (count($module_srls)) {
             unset($args);
             $args->module_srls = implode(',', $module_srls);
             // 게시글 수 구하기
             $output = executeQueryArray('textylehub.getTextyleDocumentCount', $args);
             if ($output->data) {
                 foreach ($output->data as $key => $val) {
                     $hub->textyles[$val->module_srl]->document_count = $val->count;
                 }
             }
             // 댓글 수 구하기
             $output = executeQueryArray('textylehub.getTextyleCommentCount', $args);
             if ($output->data) {
                 foreach ($output->data as $key => $val) {
                     $hub->textyles[$val->module_srl]->comment_count = $val->count;
                 }
             }
             // 엮인글 수 구하기
             $output = executeQueryArray('textylehub.getTextyleTrackbackCount', $args);
             if ($output->data) {
                 foreach ($output->data as $key => $val) {
                     $hub->textyles[$val->module_srl]->trackback_count = $val->count;
                 }
             }
         }
     }
     // 최근글 구함
     unset($args);
     $args->list_count = $this->module_info->sub_newest_textyles_count;
     $output = executeQueryArray('textylehub.getNewestPost', $args);
     if ($output->data) {
         foreach ($output->data as $key => $attribute) {
             $document_srl = $attribute->document_srl;
             if (!$GLOBALS['XE_DOCUMENT_LIST'][$document_srl]) {
                 $oDocument = null;
                 $oDocument = new documentItem();
                 $oDocument->setAttribute($attribute, false);
                 if ($is_admin) {
                     $oDocument->setGrant();
                 }
                 $GLOBALS['XE_DOCUMENT_LIST'][$document_srl] = $oDocument;
             }
             $output->data[$key] = $GLOBALS['XE_DOCUMENT_LIST'][$document_srl];
         }
     }
     $oDocumentModel->setToAllDocumentExtraVars();
     $hub->newest_posts = $output->data;
     Context::set('hub', $hub);
     $this->setTemplateFile('textyle_list');
 }
 /**
  * @brief 위젯의 실행 부분
  *
  * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다
  * 결과를 만든후 print가 아니라 return 해주어야 한다
  **/
 function proc($args)
 {
     // 대상 모듈 (mid_list는 기존 위젯의 호환을 위해서 처리하는 루틴을 유지. module_srls로 위젯에서 변경)
     $oModuleModel =& getModel('module');
     if ($args->mid_list) {
         $mid_list = explode(",", $args->mid_list);
         if (count($mid_list)) {
             $module_srls = $oModuleModel->getModuleSrlByMid($mid_list);
             if (count($module_srls)) {
                 $args->module_srls = implode(',', $module_srls);
             } else {
                 $args->module_srls = null;
             }
         }
     }
     // 제목
     $title = $args->title;
     // 정렬 대상
     $order_target = $args->order_target;
     if (!in_array($order_target, array('list_order', 'update_order'))) {
         $order_target = 'list_order';
     }
     // 정렬 순서
     $order_type = $args->order_type;
     if (!in_array($order_type, array('asc', 'desc'))) {
         $order_type = 'asc';
     }
     // 출력된 목록 수
     $list_count = (int) $args->list_count;
     if (!$list_count) {
         $list_count = 5;
     }
     // 제목 길이 자르기
     $subject_cut_size = $args->subject_cut_size;
     if (!$subject_cut_size) {
         $subject_cut_size = 0;
     }
     // 최근 글 표시 시간
     $duration_new = $args->duration_new;
     if (!$duration_new) {
         $duration_new = 12;
     }
     // 대상 모듈이 선택되어 있지 않으면 해당 사이트의 전체 모듈을 대상으로 함
     $site_module_info = Context::get('site_module_info');
     if ($args->module_srls) {
         $obj->module_srl = $args->module_srls;
     } else {
         if ($site_module_info) {
             $obj->site_srl = (int) $site_module_info->site_srl;
         }
     }
     // newest_document 위젯에서 정의한 query문을 직접 사용
     $obj->sort_index = 'documents.' . $order_target;
     $obj->order_type = $order_type == "desc" ? "asc" : "desc";
     $obj->list_count = $list_count;
     $output = executeQueryArray('widgets.newest_document.getNewestDocuments', $obj);
     // document 모듈의 model 객체를 받아서 결과를 객체화 시킴
     $oDocumentModel =& getModel('document');
     // 오류가 생기면 그냥 무시
     if (!$output->toBool()) {
         return;
     }
     // 결과가 있으면 각 문서 객체화를 시킴
     $modules = array();
     if (count($output->data)) {
         foreach ($output->data as $key => $attribute) {
             $modules[$attribute->module_srl]->mid = $attribute->mid;
             $modules[$attribute->module_srl]->site_srl = $attribute->site_srl;
             $document_srl = $attribute->document_srl;
             $oDocument = null;
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument;
             $document_list[$key] = $oDocument;
         }
         $oDocumentModel->setToAllDocumentExtraVars();
     } else {
         $document_list = array();
     }
     // 모듈이 하나만 선택되었을 경우 대상 모듈 이름과 링크를 생성
     if (count($modules) == 1) {
         $info = array_shift($modules);
         if ($info) {
             $widget_info->mid = $info->mid;
             if ($info->site_srl) {
                 $site_info = $oModuleModel->getSiteInfo($info->site_srl);
                 if ($site_info->domain) {
                     $widget_info->more_link = getSiteUrl('http://' . $site_info->domain, '', 'mid', $widget_info->mid);
                 }
             } else {
                 $widget_info->more_link = getUrl('', 'mid', $info->mid);
                 $widget_info->module_name = $info->mid;
             }
         }
     }
     $widget_info->title = $title;
     $widget_info->document_list = $document_list;
     $widget_info->subject_cut_size = $subject_cut_size;
     $widget_info->duration_new = $duration_new * 60 * 60;
     $widget_info->display_regdate = $args->display_regdate == 'N' ? 'N' : 'Y';
     Context::set('widget_info', $widget_info);
     // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
     $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
     Context::set('colorset', $args->colorset);
     // 템플릿 파일을 지정
     $tpl_file = 'list';
     // 템플릿 컴파일
     $oTemplate =& TemplateHandler::getInstance();
     $output = $oTemplate->compile($tpl_path, $tpl_file);
     return $output;
 }
Example #14
0
 /**
  * Trackbacks sent to
  * After sending the results are not sticky and handling
  * @param documentItem $oDocument
  * @param string $trackback_url
  * @param string $charset
  * @return Object
  */
 function sendTrackback($oDocument, $trackback_url, $charset)
 {
     $oModuleController =& getController('module');
     // Information sent by
     $http = parse_url($trackback_url);
     $obj->blog_name = str_replace(array('&lt;', '&gt;', '&amp;', '&quot;'), array('<', '>', '&', '"'), Context::getBrowserTitle());
     $oModuleController->replaceDefinedLangCode($obj->blog_name);
     $obj->title = $oDocument->getTitleText();
     $obj->excerpt = $oDocument->getSummary(200);
     $obj->url = getFullUrl('', 'document_srl', $oDocument->document_srl);
     // blog_name, title, excerpt, url charset of the string to the requested change
     if ($charset && function_exists('iconv')) {
         foreach ($obj as $key => $val) {
             $obj->{$key} = iconv('UTF-8', $charset, $val);
         }
     }
     // written information sent to socket
     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 by
     $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 new Object(-1, 'msg_trackback_url_is_invalid');
     }
     // Opens a socket on the target server you want to send
     $fp = @fsockopen($http['host'], $http['port'], $errno, $errstr, 5);
     if (!$fp) {
         return new Object(-1, 'msg_trackback_url_is_invalid');
     }
     // Header information sent by
     fputs($fp, $header);
     // Waiting for the results (in particular the server may not be falling EOF
     while (!feof($fp)) {
         $line = trim(fgets($fp, 4096));
         if (preg_match("/^<error>/i", $line)) {
             $error = preg_replace('/[^0-9]/', '', $line);
             break;
         }
     }
     // Close socket
     fclose($fp);
     if ($error == "0") {
         return new Object(0, 'msg_trackback_send_success');
     }
     return new Object(-1, 'msg_trackback_send_failed');
 }
Example #15
0
 /**
  * Update read counts of the document
  * @param documentItem $oDocument
  * @return bool|void
  */
 function updateReadedCount(&$oDocument)
 {
     $document_srl = $oDocument->document_srl;
     $member_srl = $oDocument->get('member_srl');
     $logged_info = Context::get('logged_info');
     // Call a trigger when the read count is updated (after)
     $output = ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
     if (!$output->toBool()) {
         return $output;
     }
     // Pass if read count is increaded on the session information
     if ($_SESSION['readed_document'][$document_srl]) {
         return false;
     }
     // Pass if the author's IP address is as same as visitor's.
     if ($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR']) {
         $_SESSION['readed_document'][$document_srl] = true;
         return false;
     }
     // Pass ater registering sesscion if the author is a member and has same information as the currently logged-in user.
     if ($member_srl && $logged_info->member_srl == $member_srl) {
         $_SESSION['readed_document'][$document_srl] = true;
         return false;
     }
     // Update read counts
     $args->document_srl = $document_srl;
     $output = executeQuery('document.updateReadedCount', $args);
     // Register session
     $_SESSION['readed_document'][$document_srl] = true;
     //remove from cache
     $oCacheHandler =& CacheHandler::getInstance('object');
     if ($oCacheHandler->isSupport()) {
         $cache_key = 'object:' . $document_srl;
         $oCacheHandler->delete($cache_key);
         $oCacheHandler->invalidateGroupKey('documentList');
         //remove document item from cache
         $cache_key = 'object_document_item:' . $document_srl;
         $oCacheHandler->delete($cache_key);
     }
 }
Example #16
0
 /**
  * Module_srl value, bringing the list of documents
  * @param object $obj
  * @return object
  */
 function getTrashList($obj)
 {
     // Variable check
     $args = new stdClass();
     $args->category_srl = $obj->category_srl ? $obj->category_srl : null;
     $args->sort_index = $obj->sort_index;
     $args->order_type = $obj->order_type ? $obj->order_type : 'desc';
     $args->page = $obj->page ? $obj->page : 1;
     $args->list_count = $obj->list_count ? $obj->list_count : 20;
     $args->page_count = $obj->page_count ? $obj->page_count : 10;
     // Search options
     $search_target = $obj->search_target;
     $search_keyword = $obj->search_keyword;
     if ($search_target && $search_keyword) {
         switch ($search_target) {
             case 'title':
             case 'content':
                 if ($search_keyword) {
                     $search_keyword = str_replace(' ', '%', $search_keyword);
                 }
                 $args->{"s_" . $search_target} = $search_keyword;
                 $use_division = true;
                 break;
             case 'title_content':
                 if ($search_keyword) {
                     $search_keyword = str_replace(' ', '%', $search_keyword);
                 }
                 $args->s_title = $search_keyword;
                 $args->s_content = $search_keyword;
                 break;
             case 'user_id':
                 if ($search_keyword) {
                     $search_keyword = str_replace(' ', '%', $search_keyword);
                 }
                 $args->s_user_id = $search_keyword;
                 $args->sort_index = 'documents.' . $args->sort_index;
                 break;
             case 'user_name':
             case 'nick_name':
             case 'email_address':
             case 'homepage':
                 if ($search_keyword) {
                     $search_keyword = str_replace(' ', '%', $search_keyword);
                 }
                 $args->{"s_" . $search_target} = $search_keyword;
                 break;
             case 'is_notice':
             case 'is_secret':
                 if ($search_keyword == 'N') {
                     $args->statusList = array($this->getConfigStatus('public'));
                 } elseif ($search_keyword == 'Y') {
                     $args->statusList = array($this->getConfigStatus('secret'));
                 }
                 break;
             case 'member_srl':
             case 'readed_count':
             case 'voted_count':
             case 'blamed_count':
             case 'comment_count':
             case 'trackback_count':
             case 'uploaded_count':
                 $args->{"s_" . $search_target} = (int) $search_keyword;
                 break;
             case 'regdate':
             case 'last_update':
             case 'ipaddress':
             case 'tag':
                 $args->{"s_" . $search_target} = $search_keyword;
                 break;
         }
     }
     $output = executeQueryArray('document.getTrashList', $args);
     if ($output->data) {
         foreach ($output->data as $key => $attribute) {
             $oDocument = null;
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $attribute = $oDocument;
         }
     }
     return $output;
 }
 function _getDocumentItems($args)
 {
     // document 모듈의 model 객체를 받아서 결과를 객체화 시킴
     $oDocumentModel =& getModel('document');
     // 분류 구함
     $obj->module_srl = $args->module_srl;
     $output = executeQueryArray('widgets.cameronSlider.getCategories', $obj);
     if ($output->toBool() && $output->data) {
         foreach ($output->data as $key => $val) {
             // 최상위 여부 파악
             if ($args->category_range == 'first' && $val->parent_srl) {
                 continue;
             }
             // 특정 분류만 출력 여부 파악
             if ($args->specific_category && !in_array($val->category_srl, $args->specific_category_srl_list)) {
                 continue;
             }
             $category_lists[$val->module_srl][$val->category_srl] = $val;
         }
     }
     // 글 목록을 구함 (+권한 확인)
     $obj->module_srl = $args->module_srl;
     $obj->sort_index = $args->order_target;
     $obj->order_type = $args->order_type == "desc" ? "asc" : "desc";
     $obj->list_count = 100;
     // 한번에 가져올 글 목록 개수
     if ($args->category_srl) {
         $obj->category_srl = $args->category_srl;
     }
     $pagecount = 0;
     $needcount = $args->list_count;
     // 가져와야 하는 글 개수
     $obj->statusList = array('PUBLIC', 'SECRET');
     $getcount = 0;
     // 가져온 글 개수
     $content_items = array();
     $first_thumbnail_idx = -1;
     while (true) {
         $pagecount = $pagecount + 1;
         $obj->page = $pagecount;
         $output = executeQueryArray('widgets.cameronSlider.getNewestDocuments', $obj);
         // 더이상 결과가 없으면 break
         if (!$output->toBool() || !$output->data || !count($output->data)) {
             break;
         }
         // 권한 확인해서 문서 목록 생성하기
         foreach ($output->data as $key => $attribute) {
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             if ($getcount >= $needcount) {
                 break;
             }
             // 해당 문서가 비밀글일 경우 권한이 있는지 확인, 없으면 continue
             if ($args->view_secret_document == 'use_permission' && $oDocument->isSecret() && !$oDocument->isGranted()) {
                 continue;
             } else {
                 if ($args->view_secret_document == 'not_show' && $oDocument->isSecret()) {
                     continue;
                 }
             }
             // 권한이 있다면 객체화 준비
             $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument;
             $document_srls[] = $oDocument->document_srl;
             $getcount = $getcount + 1;
             if ($getcount >= $needcount) {
                 break;
             }
         }
         if ($getcount >= $needcount) {
             break;
         }
         if ($pagecount >= $output->total_page) {
             break;
         }
     }
     // 결과가 있으면 각 문서 객체화를 시킴
     if ($getcount > 0) {
         $oDocumentModel->setToAllDocumentExtraVars();
         for ($i = 0, $c = count($document_srls); $i < $c; $i++) {
             $oDocument = $GLOBALS['XE_DOCUMENT_LIST'][$document_srls[$i]];
             $document_srl = $oDocument->document_srl;
             $module_srl = $oDocument->get('module_srl');
             $category_srl = $oDocument->get('category_srl');
             $thumbnail = $oDocument->getThumbnail($args->thumbnail_width, $args->thumbnail_height, $args->thumbnail_type);
             $content_item = new cameronSliderItem($args->module_srls_info[$module_srl]->browser_title);
             $content_item->adds($oDocument->getObjectVars());
             $content_item->setTitle($oDocument->getTitle());
             $content_item->setNickName($oDocument->get('nick_name'));
             $content_item->setCategory($category_lists[$module_srl][$category_srl]->title);
             $content_item->setDomain($args->module_srls_info[$module_srl]->domain);
             $content_item->setContent($oDocument->getSummary($args->content_cut_size));
             // 링크 방식 변경
             if ($args->hyperlink == 'N') {
                 $content_item->setLink("#");
             } else {
                 if ($args->hyperlink_src == 'article') {
                     $content_item->setLink(getSiteUrl($domain, '', 'document_srl', $document_srl));
                 } else {
                     if ($args->hyperlink_src == 'extravar') {
                         $content_item->setLink($oDocument->getExtraEidValue($args->hyperlink_extravar));
                     } else {
                         $content_item->setLink(getSiteUrl($domain, '', 'document_srl', $document_srl));
                     }
                 }
             }
             $content_item->setThumbnail($thumbnail);
             if ($args->extravar_name) {
                 $content_item->setExtraVar($oDocument->getExtraEidValueHTML($args->extravar_name));
             }
             $content_item->add('mid', $args->mid_lists[$module_srl]);
             if ($first_thumbnail_idx == -1 && $thumbnail) {
                 $first_thumbnail_idx = $i;
             }
             $content_items[] = $content_item;
         }
         $content_items[0]->setFirstThumbnailIdx($first_thumbnail_idx);
     }
     return $content_items;
 }
Example #18
0
 /**
  * Update read counts of the document
  * @param documentItem $oDocument
  * @return bool|void
  */
 function updateReadedCount(&$oDocument)
 {
     // Pass if Crawler access
     if (\Rhymix\Framework\UA::isRobot()) {
         return false;
     }
     $oDocumentModel = getModel('document');
     $config = $oDocumentModel->getDocumentConfig();
     if ($config->view_count_option == 'none') {
         return false;
     }
     $document_srl = $oDocument->document_srl;
     $member_srl = $oDocument->get('member_srl');
     $logged_info = Context::get('logged_info');
     // Call a trigger when the read count is updated (before)
     $trigger_output = ModuleHandler::triggerCall('document.updateReadedCount', 'before', $oDocument);
     if (!$trigger_output->toBool()) {
         return $trigger_output;
     }
     // Pass if read count is increaded on the session information
     if ($_SESSION['readed_document'][$document_srl] && $config->view_count_option == 'once') {
         return false;
     } else {
         if ($config->view_count_option == 'some') {
             if ($_SESSION['readed_document'][$document_srl]) {
                 return false;
             }
         }
     }
     if ($config->view_count_option == 'once') {
         // Pass if the author's IP address is as same as visitor's.
         if ($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR'] && Context::getSessionStatus()) {
             $_SESSION['readed_document'][$document_srl] = true;
             return false;
         }
         // Pass ater registering sesscion if the author is a member and has same information as the currently logged-in user.
         if ($member_srl && $logged_info->member_srl == $member_srl) {
             $_SESSION['readed_document'][$document_srl] = true;
             return false;
         }
     }
     $oDB = DB::getInstance();
     $oDB->begin();
     // Update read counts
     $args = new stdClass();
     $args->document_srl = $document_srl;
     executeQuery('document.updateReadedCount', $args);
     // Call a trigger when the read count is updated (after)
     ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
     $oDB->commit();
     //remove document item from cache
     Rhymix\Framework\Cache::delete('document_item:' . getNumberingPath($document_srl) . $document_srl);
     // Register session
     if (!$_SESSION['banned_document'][$document_srl] && Context::getSessionStatus()) {
         $_SESSION['readed_document'][$document_srl] = true;
     }
     return TRUE;
 }
Example #19
0
 /**
  * @brief 위젯의 실행 부분
  *
  * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다
  * 결과를 만든후 print가 아니라 return 해주어야 한다
  **/
 function proc($args)
 {
     // 글자 제목 길이
     $widget_info->subject_cut_size = (int) $args->subject_cut_size;
     if (!$widget_info->subject_cut_size) {
         $widget_info->subject_cut_size = 15;
     }
     // 내용 길이
     $widget_info->content_cut_size = (int) $args->content_cut_size;
     if (!$widget_info->content_cut_size) {
         $widget_info->content_cut_size = 50;
     }
     // 썸네일 생성 방법
     $widget_info->thumbnail_type = $args->thumbnail_type;
     if (!$widget_info->thumbnail_type) {
         $widget_info->thumbnail_type = 'crop';
     }
     // 썸네일 가로 크기
     $widget_info->thumbnail_width = (int) $args->thumbnail_width;
     if (!$widget_info->thumbnail_width) {
         $widget_info->thumbnail_width = 300;
     }
     // 썸네일 세로 크기
     $widget_info->thumbnail_height = (int) $args->thumbnail_height;
     if (!$widget_info->thumbnail_height) {
         $widget_info->thumbnail_height = 300;
     }
     // 이미지 수
     $widget_info->list_count = (int) $args->list_count;
     if (!$widget_info->list_count) {
         $widget_info->list_count = 6;
     }
     // 정렬 대상
     $widget_info->order_target = $args->order_target;
     if (!in_array($widget_info->order_target, array('list_order', 'update_order'))) {
         $widget_info->order_target = 'list_order';
     }
     // 정렬 순서
     $widget_info->order_type = $args->order_type;
     if (!in_array($widget_info->order_type, array('asc', 'desc'))) {
         $widget_info->order_type = 'asc';
     }
     // 노출 여부 체크
     if ($args->display_author != 'Y') {
         $widget_info->display_author = 'N';
     } else {
         $widget_info->display_author = 'Y';
     }
     if ($args->display_regdate != 'Y') {
         $widget_info->display_regdate = 'N';
     } else {
         $widget_info->display_regdate = 'Y';
     }
     if ($args->display_readed_count != 'Y') {
         $widget_info->display_readed_count = 'N';
     } else {
         $widget_info->display_readed_count = 'Y';
     }
     if ($args->display_voted_count != 'Y') {
         $widget_info->display_voted_count = 'N';
     } else {
         $widget_info->display_voted_count = 'Y';
     }
     // 제목
     $widget_info->title = $args->title;
     // 소제목
     $widget_info->subtitle = $args->subtitle;
     // 대상 모듈 (mid_list는 기존 위젯의 호환을 위해서 처리하는 루틴을 유지. module_srl로 위젯에서 변경)
     if ($args->mid_list) {
         $mid_list = explode(",", $args->mid_list);
         $oModuleModel =& getModel('module');
         if (count($mid_list)) {
             $module_srl = $oModuleModel->getModuleSrlByMid($mid_list);
         } else {
             $site_module_info = Context::get('site_module_info');
             if ($site_module_info) {
                 $margs->site_srl = $site_module_info->site_srl;
                 $oModuleModel =& getModel('module');
                 $output = $oModuleModel->getMidList($margs);
                 if (count($output)) {
                     $mid_list = array_keys($output);
                 }
                 $module_srl = $oModuleModel->getModuleSrlByMid($mid_list);
             }
         }
     } else {
         $module_srl = explode(',', $args->module_srls);
     }
     $obj->module_srl = implode(",", $module_srl);
     $obj->sort_index = $widget_info->order_target;
     $obj->order_type = $widget_info->order_type == "desc" ? "asc" : "desc";
     $obj->list_count = $widget_info->list_count;
     $output = executeQueryArray('widgets.webzine.getNewestDocuments', $obj);
     // document 모듈의 model 객체를 받아서 결과를 객체화 시킴
     $oDocumentModel =& getModel('document');
     // 오류가 생기면 그냥 무시
     if (!$output->toBool()) {
         return;
     }
     // 결과가 있으면 각 문서 객체화를 시킴
     if (count($output->data)) {
         foreach ($output->data as $key => $attribute) {
             $document_srl = $attribute->document_srl;
             $oDocument = null;
             $oDocument = new documentItem();
             $oDocument->setAttribute($attribute, false);
             $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument;
             $document_list[$key] = $oDocument;
         }
         $oDocumentModel->setToAllDocumentExtraVars();
     } else {
         $document_list = array();
     }
     $document_count = count($document_list);
     $total_count = $widget_info->list_count;
     for ($i = $document_count; $i < $total_count; $i++) {
         $document_list[] = new DocumentItem();
     }
     $widget_info->document_list = $document_list;
     Context::set('widget_info', $widget_info);
     // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
     $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
     Context::set('colorset', $args->colorset);
     // 템플릿 파일을 지정
     $tpl_file = 'list';
     // 템플릿 컴파일
     $oTemplate =& TemplateHandler::getInstance();
     $output = $oTemplate->compile($tpl_path, $tpl_file);
     return $output;
 }
 /**
  * Empty document in trash, called by trash module
  * This method is passived
  * @param string $originObject string is serialized object
  * @return object
  */
 function emptyTrash($originObject)
 {
     $originObject = unserialize($originObject);
     if (is_array($originObject)) {
         $originObject = (object) $originObject;
     }
     $oDocument = new documentItem();
     $oDocument->setAttribute($originObject);
     $oDocumentController = getController('document');
     $output = $oDocumentController->deleteDocument($oDocument->get('document_srl'), true, true, $oDocument);
     return $output;
 }
 function isAccessible()
 {
     $grant = Context::get('grant');
     if ($grant->commiter) {
         return true;
     } else {
         return parent::isAccessible() || $this->isGranted();
     }
 }