묻고답하기

① 계정(호스팅-서버관리) 회사 이름 : 미리내
② php , mysql 버전 :  이거 어떻게 알아낼 수 있죠?잘 모르겠거든요,웹FTP가 지원되길래 들어가서 코드를 수정했습니다.
③ 제로보드 버젼(날짜 포함) : 1.1.5버젼 날짜는 어떻게 알 수 있죠?
④ 에러나는 주소와 에러 부분 소스(필수) : 아래 자세하게 설명해 놓았습니다.꼭 도와주세요!
⑤ 주로 쓰고 있는 스킨 이름이나 소스  : 이게 무슨뜻?그냥 제로보드 기본형 쓰는데요.
⑥ 질문 내용 : 읽을 때 마다 조회수 증가 하게 코드를 수정하고 싶은데요.안되요.(다음번에는 이거 관리자 모드에서 선택할 수 있도록 처리해주시면 안될까요?매우 중요한 기능인데 왜 이렇게 힘들게 수정을 해야 합니까?)아래 내용을 꼭 읽어 주시고 도와주세요!!!emoticon

http://www.xpressengine.com/?mid=zbxe_user_tip&search_target=title&search_keyword=%EC%A1%B0%ED%9A%8C%EC%88%98&document_srl=15972278
 여기 들어가보니까 코드를 수정하라고 하는데요.여기 있는 그대로 수정을 했는데 아래와 같은 에러가 뜨고 게시판이 정상적으로 열리지 않습니다.emoticon

'Parse error: syntax error, unexpected T_ELSE, expecting T_FUNCTION in /web/home/munsungjun/html/xe/modules/document/document.controller.php on line 566'가 나옵니다.

 

아래 코드는 제가 document.controller.php 파일을 열어서 314 번째 라인 부터 361 라인까지 조회수 증가 코드로 바꿔본 것입니다. 
무엇이 잘못되었습니까?제발 도와주세요!!!emoticon
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?php
    /**
     * @class  documentController
     * @author zero (zero@nzeo.com)
     * @brief  document 紐⑤뱢??controller ?대옒??     **/

    class documentController extends document {

        /**
         * @brief 珥덇린??         **/
        function init() {
        }

        /**
         * @breif 寃뚯떆湲€??異붿쿇??泥섎━?섎뒗 action (Up)
         **/
        function procDocumentVoteUp() {
            if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');

            $document_srl = Context::get('target_srl');
            if(!$document_srl) return new Object(-1, 'msg_invalid_request');

            $point = 1;
            return $this->updateVotedCount($document_srl, $point);
        }

        /**
         * @breif 寃뚯떆湲€??異붿쿇??泥섎━?섎뒗 action (Down)
         **/
        function procDocumentVoteDown() {
            if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');

            $document_srl = Context::get('target_srl');
            if(!$document_srl) return new Object(-1, 'msg_invalid_request');

            $point = -1;
            return $this->updateVotedCount($document_srl, $point);
        }

        /**
         * @brief 寃뚯떆湲€???좉퀬??寃쎌슦 ?몄텧?섎뒗 action
         **/
        function procDocumentDeclare() {
            if(!Context::get('is_logged')) return new Object(-1, 'msg_invalid_request');

            $document_srl = Context::get('target_srl');
            if(!$document_srl) return new Object(-1, 'msg_invalid_request');

            return $this->declaredDocument($document_srl);
        }

        /**
         * @brief 紐⑤뱢????젣?좊븣 ?깅줉??紐⑤뱺 湲€????젣?섎뒗 trigger
         **/
        function triggerDeleteModuleDocuments(&$obj) {
            $module_srl = $obj->module_srl;
            if(!$module_srl) return new Object();

            // document ??젣
            $oDocumentAdminController = &getAdminController('document');
            $output = $oDocumentAdminController->deleteModuleDocument($module_srl);
            if(!$output->toBool()) return $output;

            // category ??젣
            $oDocumentController = &getController('document');
            $output = $oDocumentController->deleteModuleCategory($module_srl);
            if(!$output->toBool()) return $output;

            return new Object();
        }

        /**
         * @brief 臾몄꽌??沅뚰븳 遺€??         * ?몄뀡媛믪쑝濡????묒냽?곹깭?먯꽌留??ъ슜 媛€??         **/
        function addGrant($document_srl) {
            $_SESSION['own_document'][$document_srl] = true;
        }

        /**
         * @brief 臾몄꽌 ?낅젰
         **/
        function insertDocument($obj, $manual_inserted = false) {
            // trigger ?몄텧 (before)
            $output = ModuleHandler::triggerCall('document.insertDocument', 'before', $obj);
            if(!$output->toBool()) return $output;

            // begin transaction
            $oDB = &DB::getInstance();
            $oDB->begin();

            // 湲곕낯 蹂€?섎뱾 ?뺣━
            if($obj->is_secret!='Y') $obj->is_secret = 'N';
            if($obj->allow_comment!='Y') $obj->allow_comment = 'N';
            if($obj->lock_comment!='Y') $obj->lock_comment = 'N';
            if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
            if($obj->homepage &&  !preg_match('/^http:\/\//i',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
            if($obj->notify_message != 'Y') $obj->notify_message = 'N';

            // $extra_vars瑜?serialize
            $obj->extra_vars = serialize($obj->extra_vars);

            // ?먮룞?€?μ슜 ?꾨뱶 ?쒓굅
            unset($obj->_saved_doc_srl);
            unset($obj->_saved_doc_title);
            unset($obj->_saved_doc_content);
            unset($obj->_saved_doc_message);

            // 二쇱뼱吏?臾몄꽌 踰덊샇媛€ ?놁쑝硫?臾몄꽌 踰덊샇 ?깅줉
            if(!$obj->document_srl) $obj->document_srl = getNextSequence();

            // 移댄뀒怨좊━媛€ ?덈굹 寃€?ы븯???녿뒗 移댄뀒怨좊━硫?0?쇰줈 ?명똿
            if($obj->category_srl) {
                $oDocumentModel = &getModel('document');
                $category_list = $oDocumentModel->getCategoryList($obj->module_srl);
                if(!$category_list[$obj->category_srl]) $obj->category_srl = 0;
            }

            // 議고쉶?? ?깅줉?쒖꽌 ?ㅼ젙
            if(!$obj->readed_count) $obj->readed_count = 0;
            $obj->update_order = $obj->list_order = getNextSequence() * -1;

            // ?섎룞?낅젰???€鍮꾪빐??鍮꾨?踰덊샇??hash?곹깭瑜??먭?, ?섎룞?낅젰???꾨땲硫?臾댁“嫄?md5 hash
            if($obj->password && !$obj->password_is_hashed) $obj->password = md5($obj->password);

            // ?섎룞 ?깅줉???꾨땲怨?濡쒓렇?????뚯썝??寃쎌슦 ?뚯썝???뺣낫瑜??낅젰
            if(Context::get('is_logged')&&!$manual_inserted) {
                $logged_info = Context::get('logged_info');
                $obj->member_srl = $logged_info->member_srl;
                $obj->user_id = $logged_info->user_id;
                $obj->user_name = $logged_info->user_name;
                $obj->nick_name = $logged_info->nick_name;
                $obj->email_address = $logged_info->email_address;
                $obj->homepage = $logged_info->homepage;
            }

            // ?쒕ぉ???놁쑝硫??댁슜?먯꽌 異붿텧
            settype($obj->title, "string");
            if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');

            // ?댁슜?먯꽌 XE留뚯쓽 ?쒓렇瑜???젣
            $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content);

            // ?몄뀡?먯꽌 理쒓퀬 愿€由ъ옄媛€ ?꾨땲硫?iframe, script ?쒓굅
            if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);

            // DB???낅젰
            $output = executeQuery('document.insertDocument', $obj);
            if(!$output->toBool()) {
                $oDB->rollback();
                return $output;
            }

            // ?깃났?섏???寃쎌슦 category_srl???덉쑝硫?移댄뀒怨좊━ update
            if($obj->category_srl) $this->updateCategoryCount($obj->module_srl, $obj->category_srl);

            // trigger ?몄텧 (after)
            if($output->toBool()) {
              $trigger_output = ModuleHandler::triggerCall('document.insertDocument', 'after', $obj);
                if(!$trigger_output->toBool()) {
                    $oDB->rollback();
                    return $trigger_output;
                }
            }

            // commit
            $oDB->commit();

            // return
            $this->addGrant($obj->document_srl);
            $output->add('document_srl',$obj->document_srl);
            $output->add('category_srl',$obj->category_srl);
            return $output;
        }

        /**
         * @brief 臾몄꽌 ?섏젙
         **/
        function updateDocument($source_obj, $obj) {
            // trigger ?몄텧 (before)
            $output = ModuleHandler::triggerCall('document.updateDocument'+ '+ ', 'before', $obj);
            if(!$output->toBool()) return $output;

            // begin transaction
            $oDB = &DB::getInstance();
            $oDB->begin();

            // 湲곕낯 蹂€?섎뱾 ?뺣━
            if($obj->is_secret!='Y') $obj->is_secret = 'N';
            if($obj->allow_comment!='Y') $obj->allow_comment = 'N';
            if($obj->lock_comment!='Y') $obj->lock_comment = 'N';
            if($obj->allow_trackback!='Y') $obj->allow_trackback = 'N';
            if($obj->homepage &&  !preg_match('/^http:\/\//i'+ ',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage;
            if($obj->notify_message != 'Y') $obj->notify_message = 'N';

            // $extra_vars瑜?serialize
            $obj->extra_vars = serialize($obj->extra_vars);

            // ?먮룞?€?μ슜 ?꾨뱶 ?쒓굅
            unset($obj->_saved_doc_srl);
            unset($obj->_saved_doc_title);
            unset($obj->_saved_doc_content);
            unset($obj->_saved_doc_message);

            // 移댄뀒怨좊━媛€ 蹂€寃쎈릺?덉쑝硫?寃€?ы썑 ?녿뒗 移댄뀒怨좊━硫?0?쇰줈 ?명똿
            if($source_obj->get('+ 'category_srl')!=$obj->category_srl) {
                $oDocumentModel = &getModel('document');
                $category_list = $oDocumentModel->getCategoryList($obj->module_srl);
                if(!$category_list[$obj->category_srl]) $obj->category_srl = 0;
            }

            // ?섏젙 ?쒖꽌瑜?議곗젅
            $obj->update_order = getNextSequence() * -1;

            // 鍮꾨?踰덊샇媛€ ?덉쑝硫?md5 hash
            if($obj->password) $obj->password = md5($obj->password);

            // ?먮낯 ?묒꽦?멸낵 ?섏젙?섎젮???섏젙?몄씠 ?숈씪???쒖뿉 濡쒓렇???뚯썝???뺣낫瑜??낅젰
            if(Context::get('is_logged'+ ')) {
                $logged_info = Context::get('logged_info');
                if($source_obj->get('member_srl')==$logged_info->member_srl) {
                    $obj->member_srl = $logged_info->member_srl;
                    $obj->user_name = $logged_info->user_name;
                    $obj->nick_name = $logged_info->nick_name;
                    $obj->email_address = $logged_info->email_address;
                    $obj->homepage = $logged_info->homepage;
                }
            }

            // 濡쒓렇?명븳 ?좎?媛€ ?묒꽦??湲€?몃뜲 nick_name???놁쓣 寃쎌슦
            if($source_obj->get('member_srl')&& !$obj->nick_name) {
                $obj->member_srl = $source_obj->get('member_srl');
                $obj->user_name = $source_obj->get('user_name');
                $obj->nick_name = $source_obj->get('nick_name');
                $obj->email_address = $source_obj->get('email_address');
                $obj->homepage = $source_obj->get('homepage');
            }

            // ?쒕ぉ???놁쑝硫??댁슜?먯꽌 異붿텧
            settype($obj->title, "string");
            if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');

            // ?댁슜?먯꽌 XE留뚯쓽 ?쒓렇瑜???젣
            $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', ''+ ', $obj->content);

            // ?몄뀡?먯꽌 理쒓퀬 愿€由ъ옄媛€ ?꾨땲硫?iframe, script ?쒓굅
            if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content);

            // DB???낅젰
            $output = executeQuery('document.updateDocument', $obj);
            if(!$output->toBool()) {
                $oDB->rollback();
                return $output;
            }

            // ?깃났?섏???寃쎌슦 category_srl???덉쑝硫?移댄뀒怨좊━ update
            if($source_obj->get('category_srl')!=$obj->category_srl) {
                if($source_obj->get('category_srl')) $this->updateCategoryCount($obj->module_srl, $source_obj->get('category_srl'));
                if($obj->category_srl) $this->updateCategoryCount($obj->module_srl, $obj->category_srl);
            }

            // trigger ?몄텧 (after)
            if($output->toBool()) {
                $trigger_output = ModuleHandler::triggerCall('document.updateDocument', 'after', $obj);
                if(!$trigger_output->toBool()) {
                    $oDB->rollback();
                    return $trigger_output;
                }
            }

            // commit
            $oDB->commit();

            // ?몃꽕???뚯씪 ?쒓굅
            FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($obj->document_srl, 3)));

            $output->add('document_srl',$obj->document_srl);
            return $output;
        }

        /**
         * @brief 臾몄꽌 ??젣
         **/
        function deleteDocument($document_srl, $is_admin = false) {
            // trigger ?몄텧 (before)
            $trigger_obj->document_srl = $document_srl;
            $output = ModuleHandler::triggerCall('document.deleteDocument', 'before', $trigger_obj);
            if(!$output->toBool()) return $output;

            // begin transaction
            $oDB = &DB::getInstance();
            $oDB->begin();

            // document??model 媛앹껜 ?앹꽦
            $oDocumentModel = &getModel('document');

            // 湲곗〈 臾몄꽌媛€ ?덈뒗吏€ ?뺤씤
            $oDocument = $oDocumentModel->getDocument($document_srl, $is_admin);
            if(!$oDocument->isExists() || $oDocument->document_srl != $document_srl) return new Object(-1, 'msg_invalid_document');

            // 沅뚰븳???덈뒗吏€ ?뺤씤
            if(!$oDocument->isGranted()) return new Object(-1, 'msg_not_permitted');

            // 湲€ ??젣
            $args->document_srl = $document_srl;
            $output = executeQuery('document.deleteDocument', $args);
            if(!$output->toBool()) {
                $oDB->rollback();
                return $output;
            }

            // 移댄뀒怨좊━媛€ ?덉쑝硫?移댄뀒怨좊━ ?뺣낫 蹂€寃?            if($oDocument->get('category_srl')) $this->updateCategoryCount($oDocument->get('module_srl'),$oDocument->get('category_srl'));

            // ?좉퀬 ??젣
            executeQuery('document.deleteDeclared', $args);

            // trigger ?몄텧 (after)
            if($output->toBool()) {
                $trigger_obj = $oDocument->getObjectVars();
                $trigger_output = ModuleHandler::triggerCall('document.deleteDocument', 'after', $trigger_obj);
                if(!$trigger_output->toBool()) {
                    $oDB->rollback();
                    return $trigger_output;
                }
            }

            // ?몃꽕???뚯씪 ?쒓굅
            FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($document_srl, 3)));

            // commit
            $oDB->commit();

            return $output;
        }

        /**
         * @brief 해당 document의 조회수 증가
         **/
        function updateReadedCount($oDocument) {
            $document_srl = $oDocument->document_srl;
            $member_srl = $oDocument->get('member_srl');
            $logged_info = Context::get('logged_info');

         // session에 정보로 조회수를 증가하였다고 생각하면 패스
            /*if($_SESSION['readed_document'][$document_srl]) return false;

            // 글의 작성 ip와 현재 접속자의 ip가 동일하면 패스
            if($document->ipaddress == $_SERVER['REMOTE_ADDR']) {
                $_SESSION['readed_document'][$document_srl] = true;
                return false;
            } */

            // document의 작성자가 회원일때 조사
            if($member_srl) {} /*

                // 글쓴이와 현재 로그인 사용자의 정보가 일치하면 읽었다고 생각하고 세션 등록후 패스
                if($member_srl && $logged_info->member_srl == $member_srl) {
                    $_SESSION['readed_document'][$document_srl] = true;
                    return false;
                }
            }*/

            // 로그인 사용자이면 member_srl, 비회원이면 ipaddress로 판단
            if($logged_info->member_srl) {
                $args->member_srl = $logged_info->member_srl;
            } else {
                $args->ipaddress = $_SERVER['REMOTE_ADDR'];
            }
            $args->document_srl = $document_srl;
            $output = executeQuery('document.getDocumentReadedLogInfo', $args);
  
            // 로그 정보에 조회 로그가 있으면 세션 등록후 패스
           /* if($output->data->count) return $_SESSION['readed_document'][$document_srl] = true; */

            // 조회수 업데이트
            $output = executeQuery('document.updateReadedCount', $args);

            // 로그 남기기
            $output = executeQuery('document.insertDocumentReadedLog', $args);

            // 세션 정보에 남김
            return $_SESSION['readed_document'][$document_srl] = true;
        }

 

        /**
         * @brief ?대떦 document??異붿쿇??利앷?
         **/
        function updateVotedCount($document_srl, $point = 1) {
            if($point > 0) $failed_voted = 'failed_voted';
            else $failed_voted = 'failed_blamed';

            // ?몄뀡 ?뺣낫??異붿쿇 ?뺣낫媛€ ?덉쑝硫?以묐떒
            if($_SESSION['voted_document'][$document_srl]) return new Object(-1, $failed_voted);

            // 臾몄꽌 ?먮낯??媛€?몄샂
            $oDocumentModel = &getModel('document');
            $oDocument = $oDocumentModel->getDocument($document_srl, false, false);

            // 湲€???묒꽦 ip?€ ?꾩옱 ?묒냽?먯쓽 ip媛€ ?숈씪?섎㈃ ?⑥뒪
            if($oDocument->get('ipaddress') == $_SERVER['+ 'REMOTE_ADDR']) {
                $_SESSION['voted_document'+ '][$document_srl] = true;
                return new Object(-1, $failed_voted);
            }

            // document???묒꽦?먭? ?뚯썝?쇰븣 議곗궗
            if($oDocument->get('member_srl')) {
                // member model 媛앹껜 ?앹꽦
                $oMemberModel = &getModel('member');
                $member_srl = $oMemberModel->getLoggedMemberSrl();

                // 湲€?댁씠?€ ?꾩옱 濡쒓렇???ъ슜?먯쓽 ?뺣낫媛€ ?쇱튂?섎㈃ ?쎌뿀?ㅺ퀬 ?앷컖?섍퀬 ?몄뀡 ?깅줉???⑥뒪
                if($member_srl && $member_srl == $oDocument->get('member_srl')) {
                    $_SESSION['voted_document'][$document_srl] = true;
                    return new Object(-1, $failed_voted);
                }
            }

            // 濡쒓렇???ъ슜?먯씠硫?member_srl, 鍮꾪쉶?먯씠硫?ipaddress濡??먮떒
            if($member_srl) {
                $args->member_srl = $member_srl;
            } else {
                $args->ipaddress = $_SERVER['REMOTE_ADDR'];
            }
            $args->document_srl = $document_srl;
            $output = executeQuery('document.getDocumentVotedLogInfo', $args);

            // 濡쒓렇 ?뺣낫??異붿쿇 濡쒓렇媛€ ?덉쑝硫??몄뀡 ?깅줉???⑥뒪
            if($output->data->count) {
                $_SESSION['voted_document'][$document_srl] = true;
                return new Object(-1, $failed_voted);
            }

            // 異붿쿇???낅뜲?댄듃
            if($point < 0)
            {
                $args->blamed_count = $oDocument->get('blamed_count') + $point;
                $output = executeQuery('document.updateBlamedCount', $args);
            }
            else
            {
                $args->voted_count = $oDocument->get('+ 'voted_count') + $point;
                $output = executeQuery('document.updateVotedCount', $args);
            }
            if(!$output->toBool()) return $output;

            // 濡쒓렇 ?④린湲?            $args->point = $point;
            $output = executeQuery('document.insertDocumentVotedLog', $args);
            if(!$output->toBool()) return $output;

            // ?몄뀡 ?뺣낫???④?
            $_SESSION['voted_document'][$document_srl] = true;

            $obj->member_srl = $oDocument->get('member_srl');
            $obj->module_srl = $oDocument->get('module_srl');
            $obj->point = $point;
            $output = ModuleHandler::triggerCall('document.updateVotedCount', 'after', $obj);
            if(!$output->toBool()) return $output;

            // 寃곌낵 由ы꽩
            if($point > 0)
                return new Object(0, 'success_voted');
            else
                return new Object(0, 'success_blamed');
        }

        /**
         * @brief 寃뚯떆湲€ ?좉퀬
         **/
        function declaredDocument($document_srl) {
            // ?몄뀡 ?뺣낫???좉퀬 ?뺣낫媛€ ?덉쑝硫?以묐떒
            if($_SESSION['declared_document'][$document_srl]) return new Object(-1, 'failed_declared');

            // ?대? ?좉퀬?섏뿀?붿? 寃€??            $args->document_srl = $document_srl;
            $output = executeQuery('document.getDeclaredDocument', $args);
            if(!$output->toBool()) return $output;
            $declared_count = $output->data->declared_count;

            // 臾몄꽌 ?먮낯??媛€?몄샂
            $oDocumentModel = &getModel('document');
            $oDocument = $oDocumentModel->getDocument($document_srl, false, false);

            // 湲€???묒꽦 ip?€ ?꾩옱 ?묒냽?먯쓽 ip媛€ ?숈씪?섎㈃ ?⑥뒪
            if($oDocument->get('ipaddress') == $_SERVER['REMOTE_ADDR']) {
                $_SESSION['declared_document'][$document_srl] = true;
                return new Object(-1, 'failed_declared');
            }

            // document???묒꽦?먭? ?뚯썝?쇰븣 議곗궗
            if($oDocument->get('member_srl')) {
                // member model 媛앹껜 ?앹꽦
                $oMemberModel = &getModel('member');
                $member_srl = $oMemberModel->getLoggedMemberSrl();

                // 湲€?댁씠?€ ?꾩옱 濡쒓렇???ъ슜?먯쓽 ?뺣낫媛€ ?쇱튂?섎㈃ ?쎌뿀?ㅺ퀬 ?앷컖?섍퀬 ?몄뀡 ?깅줉???⑥뒪
                if($member_srl && $member_srl == $oDocument->get('member_srl')) {
                    $_SESSION['+ 'declared_document'][$document_srl] = true;
                    return new Object(-1, 'failed_declared');
                }
            }

            // 濡쒓렇???ъ슜?먯씠硫?member_srl, 鍮꾪쉶?먯씠硫?ipaddress濡??먮떒
            if($member_srl) {
                $args->member_srl = $member_srl;
            } else {
                $args->ipaddress = $_SERVER['REMOTE_ADDR'];
            }
            $args->document_srl = $document_srl;
            $output = executeQuery('document.getDocumentDeclaredLogInfo', $args);

            // 濡쒓렇 ?뺣낫???좉퀬 濡쒓렇媛€ ?덉쑝硫??몄뀡 ?깅줉???⑥뒪
            if($output->data->count) {
                $_SESSION['declared_document'][$document_srl] = true;
                return new Object(-1, '+ 'failed_declared');
            }

            // ?좉퀬湲€ 異붽?
            if($declared_count > 0) $output = executeQuery('document.updateDeclaredDocument', $args);
            else $output = executeQuery('document.insertDeclaredDocument', $args);
            if(!$output->toBool()) return $output;

            // 濡쒓렇 ?④린湲?            $output = executeQuery('document.insertDocumentDeclaredLog', $args);

            // ?몄뀡 ?뺣낫???④?
            $_SESSION['declared_document'][$document_srl] = true;

            $this->setMessage('success_declared');
        }

        /**
         * @brief ?대떦 document???볤? ??利앷?
         * ?볤??섎? 利앷??쒗궎硫댁꽌 ?섏젙 ?쒖꽌?€ ?섏젙?? ?섏젙?먮? ?깅줉
         **/
        function updateCommentCount($document_srl, $comment_count, $last_updater, $comment_inserted = false) {
            $args->document_srl = $document_srl;
            $args->comment_count = $comment_count;

            if($comment_inserted) {
                $args->update_order = -1*getNextSequence();
                $args->last_updater = $last_updater;
            }

            return executeQuery('document.updateCommentCount', $args);
        }

        /**
         * @brief ?대떦 document????씤湲€ ?섏쬆媛€
         **/
        function updateTrackbackCount($document_srl, $trackback_count) {
            $args->document_srl = $document_srl;
            $args->trackback_count = $trackback_count;

            return executeQuery('document.updateTrackbackCount', $args);
        }

        /**
         * @brief 移댄뀒怨좊━ 異붽?
         **/
        function insertCategory($obj) {
            // ?뱀젙 移댄뀒怨좊━???섎떒?쇰줈 異붽????뺣젹?쒖꽌 ?ъ젙??            if($obj->parent_srl) {
                // 遺€紐?移댄뀒怨좊━ 援ы븿
                $oDocumentModel = &getModel('document');
                $parent_category = $oDocumentModel->getCategory($obj->parent_srl);
                $obj->list_order = $parent_category->list_order;
                $this->updateCategoryListOrder($parent_category->module_srl, $parent_category->list_order+1);
                if(!$obj->category_srl) $obj->category_srl = getNextSequence();
            } else {
                $obj->list_order = $obj->category_srl = getNextSequence();
            }

            $output = executeQuery('document.insertCategory', $obj);
            if($output->toBool()) {
                $output->add('category_srl', $obj->category_srl);
                $this->makeCategoryFile($obj->module_srl);
            }

            return $output;
        }

        /**
         * @brief ?뱀젙 移댄뀒怨좊━ 遺€??list_count 利앷?
         **/
        function updateCategoryListOrder($module_srl, $list_order) {
            $args->module_srl = $module_srl;
            $args->list_order = $list_order;
            return executeQuery('document.updateCategoryOrder', $args);
        }

        /**
         * @brief 移댄뀒怨좊━??臾몄꽌???レ옄瑜?蹂€寃?         **/
        function updateCategoryCount($module_srl, $category_srl, $document_count = 0) {
            // document model 媛앹껜 ?앹꽦
            $oDocumentModel = &getModel('document');
            if(!$document_count) $document_count = $oDocumentModel->getCategoryDocumentCount($category_srl);

            $args->category_srl = $category_srl;
            $args->document_count = $document_count;
            $output = executeQuery('document.updateCategoryCount'+ ', $args);
            if($output->toBool()) $this->makeCategoryFile($module_srl);

            return $output;
        }

        /**
         * @brief 移댄뀒怨좊━???뺣낫瑜??섏젙
         **/
        function updateCategory($obj) {
            $output = executeQuery('document.updateCategory', $obj);
            if($output->toBool()) $this->makeCategoryFile($obj->module_srl);
            return $output;
        }

        /**
        /**
         * @brief 移댄뀒怨좊━ ??젣
         **/
        function deleteCategory($category_srl) {
            $args->category_srl = $category_srl;
            $oDocumentModel = &getModel('document');
            $category_info = $oDocumentModel->getCategory($category_srl);

            // ?먯떇 移댄뀒怨좊━媛€ ?덈뒗吏€ 泥댄겕?섏뿬 ?덉쑝硫???젣 紐삵븳?ㅻ뒗 ?먮윭 異쒕젰
            $output = executeQuery('document.getChildCategoryCount', $args);
            if(!$output->toBool()) return $output;
            if($output->data->count>0) return new Object(-1, 'msg_cannot_delete_for_child');

            // 移댄뀒怨좊━ ?뺣낫瑜???젣
            $output = executeQuery('document.deleteCategory', $args);
            if(!$output->toBool()) return $output;

            $this->makeCategoryFile($category_info->module_srl);

            // ??移댄뀒怨좊━ 媛믪쓣 媛€吏€??臾몄꽌?ㅼ쓽 category_srl??0 ?쇰줈 ?명똿
            unset($args);

            $args->target_category_srl = 0;
            $args->source_category_srl = $category_srl;
            $output = executeQuery('document.updateDocumentCategory', $args);

            return $output;
        }

        /**
         * @brief ?뱀젙 紐⑤뱢??移댄뀒怨좊━瑜?紐⑤몢 ??젣
         **/
        function deleteModuleCategory($module_srl) {
            $args->module_srl = $module_srl;
            $output = executeQuery('document.deleteModuleCategory', $args);
            return $output;
        }

        /**
         * @brief 移댄뀒怨좊━瑜??곷떒?쇰줈 ?대룞
         **/
        function moveCategoryUp($category_srl) {
            $oDocumentModel = &getModel('document');

            // ?좏깮??移댄뀒怨좊━???뺣낫瑜?援ы븳??            $args->category_srl = $category_srl;
            $output = executeQuery('document.getCategory', $args);

            $category = $output->data;
            $list_order = $category->list_order;
            $module_srl = $category->module_srl;

            // ?꾩껜 移댄뀒怨좊━ 紐⑸줉??援ы븳??            $category_list = $oDocumentModel->getCategoryList($module_srl);
            $category_srl_list = array_keys($category_list);
            if(count($category_srl_list)<2) return new Object();

            $prev_category = NULL;
            foreach($category_list as $key => $val) {
                if($key==$category_srl) break;
                $prev_category = $val;
            }

            // ?댁쟾 移댄뀒怨좊━媛€ ?놁쑝硫?洹몃깷 return
            if(!$prev_category) return new Object(-1,Context::getLang('msg_category_not_moved'));

            // ?좏깮??移댄뀒怨좊━媛€ 媛€???꾩쓽 移댄뀒怨좊━?대㈃ 洹몃깷 return
            if($category_srl_list[0]==$category_srl) return new Object(-1,Context::getLang('msg_category_not_moved'));

            // ?좏깮??移댄뀒怨좊━???뺣낫
            $cur_args->category_srl = $category_srl;
            $cur_args->list_order = $prev_category->list_order;
            $cur_args->title = $category->title;
            $this->updateCategory($cur_args);

            // ?€??移댄뀒怨좊━???뺣낫
            $prev_args->category_srl = $prev_category->category_srl;
            $prev_args->list_order = $list_order;
            $prev_args->title = $prev_category->title;
            $this->updateCategory($prev_args);

            return new Object();
        }

        /**
         * @brief 移댄뀒怨좊━瑜??꾨옒濡??대룞
         **/
        function moveCategoryDown($category_srl) {
            $oDocumentModel = &getModel('document');

            // ?좏깮??移댄뀒怨좊━???뺣낫瑜?援ы븳??            $args->category_srl = $category_srl;
            $output = executeQuery('document.getCategory', $args);

            $category = $output->data;
            $list_order = $category->list_order;
            $module_srl = $category->module_srl;

            // ?꾩껜 移댄뀒怨좊━ 紐⑸줉??援ы븳??            $category_list = $oDocumentModel->getCategoryList($module_srl);
            $category_srl_list = array_keys($category_list);
            if(count($category_srl_list)<2) return new Object();

            for($i=0;$i<count($category_srl_list);$i++) {
                if($category_srl_list[$i]==$category_srl) break;
            }

            $next_category_srl = $category_srl_list[$i+1];
            if(!$category_list[$next_category_srl]) return new Object(-1,Context::getLang('msg_category_not_moved'));
            $next_category = $category_list[$next_category_srl];

            // ?좏깮??移댄뀒怨좊━???뺣낫
            $cur_args->category_srl = $category_srl;
            $cur_args->list_order = $next_category->list_order;
            $cur_args->title = $category->title;
            $this->updateCategory($cur_args);

            // ?€??移댄뀒怨좊━???뺣낫
            $next_args->category_srl = $next_category->category_srl;
            $next_args->list_order = $list_order;
            $next_args->title = $next_category->title;
            $this->updateCategory($next_args);

            return new Object();
        }

        /**
         * @brief document??20媛??뺤옣蹂€?섎? xml js filter ?곸슜???꾪빐 吏곸젒 ?곸슜
         * 紐⑤뱢?뺣낫瑜?諛쏆븘??20媛쒖쓽 ?뺤옣蹂€?섎? 泥댄겕?섏뿬 type, required?깆쓽 媛믪쓣 泥댄겕?섏뿬 header??javascript 肄붾뱶 異붽?
         **/
        function addXmlJsFilter($module_info) {
            $extra_vars = $module_info->extra_vars;
            if(!$extra_vars) return;

            $js_code = "";

            foreach($extra_vars as $key => $val) {
                $js_code .= sprintf('alertMsg["extra_vars%d"] = "%s";', $key, $val->name);
                $js_code .= sprintf('extra_vars[extra_vars.length] = "extra_vars%d";', $key);
                $js_code .= sprintf('target_type_list["extra_vars%d"] = "%s";', $key, $val->type);
                if($val->is_required == 'Y') $js_code .= sprintf('notnull_list[notnull_list.length] = "extra_vars%s";',$key);
            }

            $js_code = "<script type=\"text/javascript\">//<![CDATA[\n".$js_code."\n//]]></script>";
            Context::addHtmlHeader($js_code);
        }

        /**
         * @brief 移댄뀒怨좊━瑜?罹먯떆 ?뚯씪濡??€??         **/
        function makeCategoryFile($module_srl) {
            // 罹먯떆 ?뚯씪 ?앹꽦???꾩슂???뺣낫媛€ ?놁쑝硫?洹몃깷 return
            if(!$module_srl) return false;

            // 紐⑤뱢 ?뺣낫瑜?媛€?몄샂 (mid瑜?援ы븯湲??꾪빐)
            $oModuleModel = &getModel('module');
            $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
            $mid = $module_info->mid;

            if(!is_dir('./files/cache/document_category')) FileHandler::makeDir('./files/cache/document_category');

            // 罹먯떆 ?뚯씪???대쫫??吏€??            $xml_file = sprintf("./files/cache/document_category/%s.xml.php", $module_srl);
            $php_file = sprintf("./files/cache/document_category/%s.php", $module_srl);

            // 移댄뀒怨좊━ 紐⑸줉??援ы븿
            $args->module_srl = $module_srl;
            $args->sort_index = 'list_order';
            $output = executeQuery('document.getCategoryList', $args);

            $category_list = $output->data;

            if(!$category_list) {
                FileHandler::removeFile($xml_file);
                FileHandler::removeFile($php_file);
                return false;
            }
            if(!is_array($category_list)) $category_list = array($category_list);

            $category_count = count($category_list);
            for($i=0;$i<$category_count;$i++) {
                $category_srl = $category_list[$i]->category_srl;
                if(!preg_match('/^[0-9,]+$/', $category_list[$i]->group_srls)) $category_list[$i]->group_srls = '';
                $list[$category_srl] = $category_list[$i];
            }

            // 援ы빐???곗씠?곌? ?녿떎硫??몃뱶?곗씠?곌? ?녿뒗 xml ?뚯씪留??앹꽦
            if(!$list) {
                $xml_buff = "<root />";
                FileHandler::writeFile($xml_file, $xml_buff);
                FileHandler::writeFile($php_file, '<?php if(!defined("__ZBXE__")) exit(); ?>');
                return $xml_file;
            }

            // 援ы빐???곗씠?곌? ?섎굹?쇰㈃ array濡?諛붽씀?댁쨲
            if(!is_array($list)) $list = array($list);

            // 猷⑦봽瑜??뚮㈃??tree 援ъ꽦
            foreach($list as $category_srl => $node) {
                $node->mid = $mid;
                $parent_srl = (int)$node->parent_srl;
                $tree[$parent_srl][$category_srl] = $node;
            }

            // 罹먯떆 ?뚯씪??沅뚰븳怨?洹몃9 ?ㅼ젙???꾪븳 怨듯넻 ?ㅻ뜑
            $header_script =
                '$lang_type = Context::getLangType(); '.
                '$is_logged = Context::get(\'is_logged\'); '.
                '$logged_info = Context::get(\'logged_info\'); '.
                'if($is_logged) {'.
                    'if($logged_info->is_admin=="Y") $is_admin = true; '.
                    'else $is_admin = false; '.
                    '$group_srls = array_keys($logged_info->group_list); '.
                '} else { '.
                    '$is_admin = false; '.
                    '$group_srsl = array(); '.
                '} ';

            // xml 罹먯떆 ?뚯씪 ?앹꽦 (xml罹먯떆???곕줈 ?숈옉?섍린??session 吏€?뺤쓣 ?댁<?댁빞 ??
            $xml_buff = sprintf(
                '<?php '.
                'define(\'__ZBXE__\', true); '.
                'require_once(\'../../../config/config.inc.php\'); '.
                '$oContext = &Context::getInstance(); '.
                '$oContext->init(); '.
                '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"); '.
                '%s'.
                '?>'.
                '<root>%s</root>',
                $header_script,
                $this->getXmlTree($tree[0], $tree)
            );

            // php 罹먯떆 ?뚯씪 ?앹꽦
            $php_output = $this->getPhpCacheCode($tree[0], $tree, 0);
            $php_buff = sprintf(
                '<?php '.
                'if(!defined("__ZBXE__")) exit(); '.
                '%s; '.
                '%s; '.
                '$menu->list = array(%s); '.
                '?>',
                $header_script,
                $php_output['category_title_str'],
                $php_output['buff']
            );

            // ?뚯씪 ?€??            FileHandler::writeFile($xml_file, $xml_buff);
            FileHandler::writeFile($php_file, $php_buff);
            return $xml_file;
        }

        /**
         * @brief array濡??뺣젹???몃뱶?ㅼ쓣 parent_srl??李몄“?섎㈃??recursive?섍쾶 ?뚮㈃??xml ?곗씠???앹꽦
         * 硫붾돱 xml?뚯씪?€ node?쇰뒗 tag媛€ 以묒꺽?쇰줈 ?ъ슜?섎ʼn ??xml doc?쇰줈 愿€由ъ옄 ?섏씠吏€?먯꽌 硫붾돱瑜?援ъ꽦?댁쨲\n
         * (tree_menu.js ?먯꽌 xml?뚯씪??諛붾줈 ?쎄퀬 tree menu瑜?援ы쁽)
         **/
        function getXmlTree($source_node, $tree) {
            if(!$source_node) return;

            foreach($source_node as $category_srl => $node) {
                $child_buff = "";

                // ?먯떇 ?몃뱶???곗씠??媛€?몄샂
                if($category_srl && $tree[$category_srl]) $child_buff = $this->getXmlTree($tree[$category_srl], $tree);

                // 蹂€???뺣━
                $title = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->title);
                $expand = $node->expand;
                $group_srls = $node->group_srls;
                $mid = $node->mid;
                $module_srl = $node->module_srl;
                $parent_srl = $node->parent_srl;
                $color = $node->color;
                // node->group_srls媛믪씠 ?덉쑝硫?                if($group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$group_srls);
                else $group_check_code = "true";

                $attribute = sprintf(
                        'mid="%s" module_srl="%d" node_srl="%d" parent_srl="%d" category_srl="%d" text="<?php echo (%s?"%s":"")?>" url="%s" expand="%s" color="%s" document_count="%d" ',
                        $mid,
                        $module_srl,
                        $category_srl,
                        $parent_srl,
                        $category_srl,
                        $group_check_code,
                        $title,
                        getUrl('','mid',$node->mid,'category',$category_srl),
                        $expand,
                        $color,
                        $node->document_count
                );

                if($child_buff) $buff .= sprintf('<node %s>%s</node>', $attribute, $child_buff);
                else $buff .=  sprintf('<node %s />', $attribute);
            }
            return $buff;
        }

        /**
         * @brief array濡??뺣젹???몃뱶?ㅼ쓣 php code濡?蹂€寃쏀븯??return
         * 硫붾돱?먯꽌 硫붾돱瑜?tpl???ъ슜??xml?곗씠?곕? ?ъ슜???섎룄 ?덉?留?蹂꾨룄??javascript ?ъ슜???꾩슂?섍린??         * php濡???罹먯떆?뚯씪??留뚮뱾?댁꽌 db?댁슜?놁씠 諛붾줈 硫붾돱 ?뺣낫瑜?援ы븷 ???덈룄濡??쒕떎
         * ??罹먯떆??ModuleHandler::displayContent() ?먯꽌 include?섏뿬 Context::set() ?쒕떎
         **/
        function getPhpCacheCode($source_node, $tree) {
            $output = array("buff"=>"", "category_srl_list"=>array());
            if(!$source_node) return $output;

            // 猷⑦봽瑜??뚮㈃??1李?諛곗뿴濡??뺣━?섍퀬 include?????덈뒗 php script 肄붾뱶瑜??앹꽦
            foreach($source_node as $category_srl => $node) {

                // ?먯떇 ?몃뱶媛€ ?덉쑝硫??먯떇 ?몃뱶???곗씠?곕? 癒쇱? ?살뼱??
                if($category_srl&&$tree[$category_srl]) $child_output = $this->getPhpCacheCode($tree[$category_srl], $tree);
                else $child_output = array("buff"=>"", "category_srl_list"=>array());

                // 蹂€???뺣━
                $category_title_str = sprintf('$_category_title[%d] = "%s"; %s', $node->category_srl, $node->title, $child_output['category_title_str']);

                // ?꾩옱 ?몃뱶??url媛믪씠 怨듬????꾨땲?쇰㈃ category_srl_list 諛곗뿴媛믪뿉 ?낅젰
                $child_output['category_srl_list'][] = $node->category_srl;
                $output['category_srl_list'] = array_merge($output['category_srl_list'], $child_output['category_srl_list']);

                // node->group_srls媛믪씠 ?덉쑝硫?
                if($node->group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$node->group_srls);
                else $group_check_code = "true";

                // 蹂€???뺣━
                $selected = '"'.implode('","',$child_output['category_srl_list']).'"';
                $child_buff = $child_output['buff'];
                $expand = $node->expand;

                // ?띿꽦???앹꽦?쒕떎 ( category_srl_list瑜??댁슜?댁꽌 ?좏깮??硫붾돱???몃뱶???랁븯?붿?瑜?寃€?ы븳?? 苑곸닔吏€留?鍮좊Ⅴ怨?媛뺣젰?섎떎怨??앷컖;;)
                $attribute = sprintf(
                    '"mid" => "%s", "module_srl" => "%d","node_srl"=>"%s","category_srl"=>"%s","parent_srl"=>"%s","text"=>$_category_title[%d],"selected"=>(in_array(Context::get("category"),array(%s))?1:0),"expand"=>"%s","color"=>"%s", "list"=>array(%s),"document_count"=>"%d","grant"=>%s?true:false',
                    $node->mid,
                    $node->module_srl,
                    $node->category_srl,
                    $node->category_srl,
                    $node->parent_srl,
                    $node->category_srl,
                    $selected,
                    $expand,
                    $node->color,
                    $child_buff,
                    $node->document_count,
                    $group_check_code
                );
               
                // buff ?곗씠?곕? ?앹꽦?쒕떎
                $output['buff'] .=  sprintf('%s=>array(%s),', $node->category_srl, $attribute);
                $output['category_title_str'] .= $category_title_str;
            }
            return $output;
        }

        /**
         * @brief 寃뚯떆臾쇱쓽 ??寃뚯떆臾쇱쓣.. ?대┃???섑??섎뒗 ?앹뾽 硫붾돱瑜?異붽??섎뒗 method
         **/
        function addDocumentPopupMenu($url, $str, $icon = '', $target = 'self') {
            $document_popup_menu_list = Context::get('document_popup_menu_list');
            if(!is_array($document_popup_menu_list)) $document_popup_menu_list = array();

            $obj->url = $url;
            $obj->str = $str;
            $obj->icon = $icon;
            $obj->target = $target;
            $document_popup_menu_list[] = $obj;

            Context::set('+ 'document_popup_menu_list', $document_popup_menu_list);
        }


    }
?>

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
taijui 쪽지함에서 닉네임에 마우스 오버 시 손모양 나오게 하는 방법..  
Netsko 회원가입시나 수정시 닉네임/ID /E-mail 은 중복체크를 하자나요 . 이름도 가능할까요? [2] 2009.04.01 by sss
슬픈동화 플래너 모듈 0.3pl7 가지고 계신분? [1] 2009.04.01 by 백성찬
전산실왕고 회원가입을 받을때 email주소를 받지 않아도 되게 수정하는 방법 [6] 2009.04.01 by 전산실왕고
만쓰별(정만) visualArea 가 뭔가요? [1] 2009.04.01 by 만쓰별(정만)
쿼바디스 최근 게시글에 재목이 안떠요^^ [2] 2009.04.01 by 쿼바디스
박상범473 관리자메일 사용시 네이버메일만 오네요?? [2] 2009.04.01 by 박상범473
이대우404 메인 페이지 최근게시물 다는 법  
버섯도리 도와주시면 감사합니다...메인페이지를 꾸밀려구 하는데 넘 어려워서요 [6] 2009.04.01 by 버섯도리
youngmook 똑같은 게시판을 하나를 더 복사할 수 없나요?  
인생은낭만 웹진형 최신글 출력 위젯  
만쓰별(정만) 조회수 높은 인기 게시글들만 모아주는 위젯 없나여? [2] 2009.04.01 by 만쓰별(정만)
김정균239 게시판에서 파일 첨부시 Error 발생 file  
질문 고수님들! 웹페이지 제작관련 질문드려요. 에휴~ 한숨만 나옵니다.ㅠㅠ [4] 2009.04.01 by 레드카라스
elca view_document에서 글 작성자 정보 [2] 2009.04.01 by elca
바이뮤빙 특정 회원 차단 [2] 2009.04.01 by 느까끼
심재인 게시판이 나떠요...ㅡ.ㅜ [1] 2009.04.01 by 느까끼
KRB 이상한데요.. [1] file 2009.04.01 by 백성찬
심재인 1.2로 업뎃하니 게시판 접속이 안됩니다. [1] 2009.04.01 by [_)s
부푸러 카페에서 밑에있는 게시글 랭킹, 댓글랭킹 뜨시나요? [1] 2009.04.01 by 부푸러
도와주세요 가입 레벨문제..ㅠㅠ도와주세요 [1] 2009.04.01 by 『june™』
부푸러 Cafe 에서 몇몇 버튼 이미지 표시 않되는 [3] 2009.04.01 by 부푸러
홍정환873 어떻게 하면 읽을 때 마다 조회수가 증가되게 할 수 있습니까?운영자님! 답변 부탁드립니다. [1] file 2009.04.01 by 경천애인
일인자 메뉴부분 수정이 궁금합니다. file  
thejeon 부탁드립니다. 짧은 힌트만이라도.. [5] 2009.04.01 by thejeon
홍정환873 읽을 때 마다 게시판 조회수 증가하게 코드 수정했는데 안되요!꼭 도와주세요!! [1] 2009.04.01 by 경천애인
blue lotus 최근 문서출력 작성자 표시 [1] 2009.04.01 by 백성찬
유팔복 ID 비밀번호찾기..... [2] 2009.03.31 by 유팔복
푸른하늘98 1일 글쓰기 횟수 제한하는 방법은 없나요???  
아리모니카 질문이요