묻고답하기

통합 검색을 하면 이렇게 떠요....

http://www.xeweb.co.kr/

Fatal error: Call to a member function setAct() on a non-object in /web/home/lamborghini/html/xe/classes/module/ModuleHandler.class.php on line 304
이렇게 뜨며 아래 문서를 Code Highlighter 으로 뛰우려고했는데 안뛰어지네요;;

 

 

<?php
    /**
    * @class ModuleHandler
    * @author NHN (developers@xpressengine.com)
    * @brief Handling modules
    *
    * @remarks This class is to excute actions of modules.
    *          Constructing an instance without any parameterconstructor, it finds the target module based on Context.
    *          If there is no act on the found module, excute an action referencing action_forward.
    **/

    class ModuleHandler extends Handler {

        var $oModule = NULL; ///< Module Instance

        var $module = NULL; ///< Module
        var $act = NULL; ///< action
        var $mid = NULL; ///< Module ID
        var $document_srl = NULL; ///< Document Number
        var $module_srl = NULL; ///< Module Number

        var $module_info = NULL; ///< Module Info. Object

        var $error = NULL; ///< an error code.

        /**
         * @brief constructor
         * @remarks it prepares variables to use in moduleHandler
         **/
        function ModuleHandler($module = '', $act = '', $mid = '', $document_srl = '', $module_srl = '') {
            // If XE has not installed yet, set module as install
            if(!Context::isInstalled()) {
                $this->module = 'install';
                $this->act = Context::get('act');
                return;
            }

            // Set variables from request arguments
            if(!$module) $this->module = Context::get('module');
            else $this->module = $module;

            if(!$act) $this->act = Context::get('act');
            else $this->act = $act;

            if(!$mid) $this->mid = Context::get('mid');
            else $this->mid = $mid;

            if(!$document_srl) $this->document_srl = (int)Context::get('document_srl');
            else $this->document_srl = (int)$document_srl;

            if(!$module_srl) $this->module_srl = (int)Context::get('module_srl');
            else $this->module_srl = (int)$module_srl;

            $this->entry = Context::convertEncodingStr(Context::get('entry'));

            // Validate variables to prevent XSS
            if($this->module && !preg_match("/^([a-z0-9\_\-]+)$/i",$this->module)) die(Context::getLang("msg_invalid_request"));
            if($this->mid && !preg_match("/^([a-z0-9\_\-]+)$/i",$this->mid)) die(Context::getLang("msg_invalid_request"));
            if($this->act && !preg_match("/^([a-z0-9\_\-]+)$/i",$this->act)) die(Context::getLang("msg_invalid_request"));

            // execute addon (before module initialization)
            $called_position = 'before_module_init';
            $oAddonController = &getController('addon');
            $addon_file = $oAddonController->getCacheFilePath(Mobile::isFromMobilePhone()?"mobile":"pc");
            @include($addon_file);
        }

        /**
         * @brief Initialization. It finds the target module based on module, mid, document_srl, and prepares to execute an action
         * @return true: OK, false: redirected
         **/
        function init() {
   $oModuleModel = &getModel('module');
            $site_module_info = Context::get('site_module_info');

            if(!$this->document_srl && $this->mid && $this->entry) {
                $oDocumentModel = &getModel('document');
                $this->document_srl = $oDocumentModel->getDocumentSrlByAlias($this->mid, $this->entry);
                if($this->document_srl) Context::set('document_srl', $this->document_srl);
            }

            // Get module's information based on document_srl, if it's specified
            if($this->document_srl && !$this->module) {
                $module_info = $oModuleModel->getModuleInfoByDocumentSrl($this->document_srl);

                // If the document does not exist, remove document_srl
                if(!$module_info) {
                    unset($this->document_srl);
                } else {
                    // If it exists, compare mid based on the module information
                    // if mids are not matching, set it as the document's mid
                    if($this->mid != $module_info->mid) {
                        $this->mid = $module_info->mid;
                        Context::set('mid', $module_info->mid, true);
                    }
                }
                // if requested module is different from one of the document, remove the module information retrieved based on the document number
                if($this->module && $module_info->module != $this->module) unset($module_info);
            }

            // If module_info is not set yet, and there exists mid information, get module information based on the mid
            if(!$module_info && $this->mid) {
                $module_info = $oModuleModel->getModuleInfoByMid($this->mid, $site_module_info->site_srl);
                //if($this->module && $module_info->module != $this->module) unset($module_info);
            }

            // redirect, if module_site_srl and site_srl are different
            if(!$this->module && !$module_info && $site_module_info->site_srl == 0 && $site_module_info->module_site_srl > 0) {
                $site_info = $oModuleModel->getSiteInfo($site_module_info->module_site_srl);
                header("location:".getNotEncodedSiteUrl("$site_info->domain,'mid',$site_module_info->mid));
                return false;
            }

            // If module_info is not set still, and $module does not exist, find the default module
            if(!$module_info && !$this->module) $module_info = $site_module_info;

            if(!$module_info && !$this->module && $site_module_info->module_site_srl) $module_info = $site_module_info;

            // redirect, if site_srl of module_info is different from one of site's module_info
            if($module_info && $module_info->site_srl != $site_module_info->site_srl && !isCrawler()) {
                // If the module is of virtual site
                if($module_info->site_srl) {
                    $site_info = $oModuleModel->getSiteInfo($module_info->site_srl);
                    $redirect_url = getNotEncodedSiteUrl("$site_info->domain, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
                // If it's called from a virtual site, though it's not a module of the virtual site
                } else {
                    $db_info = Context::getDBInfo();
                    if(!$db_info->default_url) return Context::getLang('msg_default_url_is_not_defined');
                    else $redirect_url = getNotEncodedSiteUrl("$db_info->default_url, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
                }
                header("location:".$redirect_url);
                return false;
            }

            // If module info was set, retrieve variables from the module information
            if($module_info) {
                $this->module = $module_info->module;
                $this->mid = $module_info->mid;
                $this->module_info = $module_info;
                Context::setBrowserTitle($module_info->browser_title);
                $part_config= $oModuleModel->getModulePartConfig('layout',$module_info->layout_srl);
                Context::addHtmlHeader($part_config->header_script);
            }

            // Set module and mid into module_info
            $this->module_info->module = $this->module;
            $this->module_info->mid = $this->mid;

            // Still no module? it's an error
            if(!$this->module) $this->error = 'msg_module_is_not_exists';

            // If mid exists, set mid into context
            if($this->mid) Context::set('mid', $this->mid, true);
               
            // Call a trigger after moduleHandler init
            $output = ModuleHandler::triggerCall('moduleHandler.init', 'after', $this->module_info);
            if(!$output->toBool()) {
                $this->error = $output->getMessage();
                return false;
            }

            // Set current module info into context
            Context::set('current_module_info', $this->module_info);

            return true;
        }

        /**
         * @brief get a module instance and execute an action
         * @return executed module instance
         **/
        function procModule() {
            // If error occurred while preparation, return a message instance
            if($this->error) {
    $type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
                $oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
                $oMessageObject->setError(-1);
                $oMessageObject->setMessage($this->error);
                $oMessageObject->dispMessage();
                return $oMessageObject;
            }

            $oModuleModel = &getModel('module');

            // Get action information with conf/action.xml
            $xml_info = $oModuleModel->getModuleActionXml($this->module);

            // If not installed yet, modify act
            if($this->module=="install") {
                if(!$this->act || !$xml_info->action->{$this->act}) $this->act = $xml_info->default_index_act;
            }

            // if act exists, find type of the action, if not use default index act
            if(!$this->act) $this->act = $xml_info->default_index_act;

            // still no act means error
            if(!$this->act) {
                $this->error = 'msg_module_is_not_exists';
                return;
            }

            // get type, kind
            $type = $xml_info->action->{$this->act}->type;
            $kind = strpos(strtolower($this->act),'admin')!==false?'admin':'';
            if(!$kind && $this->module == 'admin') $kind = 'admin';
   if($this->module_info->use_mobile != "Y") Mobile::setMobile(false);

   // if(type == view, and case for using mobilephone)
   if($type == "view" && Mobile::isFromMobilePhone() && Context::isInstalled())
   {
    $orig_type = "view";
    $type = "mobile";
    // create a module instance
    $oModule = &$this->getModuleInstance($this->module, $type, $kind);
    if(!is_object($oModule) || !method_exists($oModule, $this->act)) {
     $type = $orig_type;
     Mobile::setMobile(false);
     $oModule = &$this->getModuleInstance($this->module, $type, $kind);
    }
   }
   else
   {
    // create a module instance
    $oModule = &$this->getModuleInstance($this->module, $type, $kind);
   }

   if(!is_object($oModule)) {
    $this->error = 'msg_module_is_not_exists';
    return;
   }

   // If there is no such action in the module object
   if(!isset($xml_info->action->{$this->act}) || !method_exists($oModule, $this->act))
   {
    if(!Context::isInstalled())
    {
     $this->error = 'msg_invalid_request';
     return;
    }

                $forward = null;
    // 1. Look for the module with action name
                if(preg_match('/^([a-z]+)([A-Z])([a-z0-9\_]+)(.*)$/', $this->act, $matches)) {
                    $module = strtolower($matches[2].$matches[3]);
                    $xml_info = $oModuleModel->getModuleActionXml($module);
                    if($xml_info->action->{$this->act}) {
                        $forward->module = $module;
                        $forward->type = $xml_info->action->{$this->act}->type;
                        $forward->act = $this->act;
                    }
                }

    if(!$forward)
    {
     $forward = $oModuleModel->getActionForward($this->act);
    }

                if($forward->module && $forward->type && $forward->act && $forward->act == $this->act) {
                    $kind = strpos(strtolower($forward->act),'admin')!==false?'admin':'';
     $type = $forward->type;
     $tpl_path = $oModule->getTemplatePath();
     $orig_module = $oModule;

     if($type == "view" && Mobile::isFromMobilePhone())
     {
      $orig_type = "view";
      $type = "mobile";
      // create a module instance
      $oModule = &$this->getModuleInstance($forward->module, $type, $kind);
      if(!is_object($oModule) || !method_exists($oModule, $this->act)) {
       $type = $orig_type;
       Mobile::setMobile(false);
       $oModule = &$this->getModuleInstance($forward->module, $type, $kind);
      }
     }
     else
     {
      $oModule = &$this->getModuleInstance($forward->module, $type, $kind);
     }
                    $xml_info = $oModuleModel->getModuleActionXml($forward->module);
     if($this->module == "admin" && $type == "view")
     {
      $oMemberModel = &getModel('member');

      $logged_info = $oMemberModel->getLoggedInfo();
      if($logged_info->is_admin=='Y') {
       $orig_module->loadSideBar();
       $oModule->setLayoutPath("./modules/admin/tpl");
       $oModule->setLayoutFile("layout.html");
      }
     }
    }
    else if($xml_info->default_index_act && method_exists($oModule, $xml_info->default_index_act))
    {
     $this->act = $xml_info->default_index_act;
    }
    else
    {
     $this->error = 'msg_invalid_request';
     return;
    }
   }

            $oModule->setAct($this->act);

            $this->module_info->module_type = $type;
            $oModule->setModuleInfo($this->module_info, $xml_info);

            // execute the action, and if failed, set error
            if(!$oModule->proc()) $this->error = $oModule->getMessage();

            return $oModule;
        }

        /**
         * @brief display contents from executed module
         * @param[in] $oModule module instance
         * @return none
         **/
        function displayContent($oModule = NULL) {
            // If the module is not set or not an object, set error
            if(!$oModule || !is_object($oModule)) {
                $this->error = 'msg_module_is_not_exists';
            }

            // If connection to DB has a problem even though it's not install module, set error
            if($this->module != 'install' && $GLOBALS['__DB__'][Context::getDBType()]->is_connected == false) {
                $this->error = 'msg_dbconnect_failed';
            }

            // Call trigger after moduleHandler proc
            $output = ModuleHandler::triggerCall('moduleHandler.proc', 'after', $oModule);
            if(!$output->toBool()) $this->error = $output->getMessage();

            // Use message view object, if HTML call
            if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) {
                // If error occurred, handle it
                if($this->error) {
                    // display content with message module instance
     $type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
     $oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
     $oMessageObject->setError(-1);
     $oMessageObject->setMessage($this->error);
     $oMessageObject->dispMessage();

                    // If module was called normally, change the templates of the module into ones of the message view module
                    if($oModule) {
                        $oModule->setTemplatePath($oMessageObject->getTemplatePath());
                        $oModule->setTemplateFile($oMessageObject->getTemplateFile());

                    // Otherwise, set message instance as the target module
                    } else {
                        $oModule = $oMessageObject;
                    }
                }

                // Check if layout_srl exists for the module
    if(Mobile::isFromMobilePhone())
    {
     $layout_srl = $oModule->module_info->mlayout_srl;
    }
    else
    {
     $layout_srl = $oModule->module_info->layout_srl;
    }

                if($layout_srl && !$oModule->getLayoutFile()) {

                    // If layout_srl exists, get information of the layout, and set the location of layout_path/ layout_file
                    $oLayoutModel = &getModel('layout');
                    $layout_info = $oLayoutModel->getLayout($layout_srl);
                    if($layout_info) {

                        // Input extra_vars into $layout_info
                        if($layout_info->extra_var_count) {

                            foreach($layout_info->extra_var as $var_id => $val) {
                                if($val->type == 'image') {
                                    if(preg_match('/^\.\/files\/attach\/images\/(.+)/i',$val->value)) $val->value = Context::getRequestUri().substr($val->value,2);
                                }
                                $layout_info->{$var_id} = $val->value;
                            }
                        }
                        // Set menus into context
                        if($layout_info->menu_count) {
                            foreach($layout_info->menu as $menu_id => $menu) {
                                if(file_exists($menu->php_file)) @include($menu->php_file);
                                Context::set($menu_id, $menu);
                            }
                        }

                        // Set layout information into context
                        Context::set('layout_info', $layout_info);

                        $oModule->setLayoutPath($layout_info->path);
                        $oModule->setLayoutFile('layout');

                        // If layout was modified, use the modified version
                        $edited_layout = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl);
                        if(file_exists($edited_layout)) $oModule->setEditedLayoutFile($edited_layout);
                    }
                }
            }

            // Display contents
            $oDisplayHandler = new DisplayHandler();
            $oDisplayHandler->printContent($oModule);
        }

        /**
         * @brief returns module's path
         * @param[in] $module module name
         * @return path of the module
         **/
        function getModulePath($module) {
            return sprintf('./modules/%s/', $module);
        }

        /**
         * @brief It creates a module instance
         * @param[in] $module module name
         * @param[in] $type instance type, (e.g., view, controller, model)
         * @param[in] $kind admin or svc
         * @return module instance (if failed it returns null)
         * @remarks if there exists a module instance created before, returns it.
         **/
        function &getModuleInstance($module, $type = 'view', $kind = '') {

   $parent_module = $module;
            if(__DEBUG__==3) $start_time = getMicroTime();

   $key = $module.'.'.($kind!='admin'?'':'admin').'.'.$type;
   if(is_array($GLOBALS['__MODULE_EXTEND__']) && array_key_exists($key, $GLOBALS['__MODULE_EXTEND__'])) {
    $module = $extend_module = $GLOBALS['__MODULE_EXTEND__'][$key];
   }else{
    unset($parent_module);
   }

            $class_path = ModuleHandler::getModulePath($module);
            if(!is_dir(FileHandler::getRealPath($class_path))) return NULL;

            // if there is no instance of the module in global variable, create a new one
            if(!$GLOBALS['_loaded_module'][$module][$type][$kind]) {
                // Get base class name and load the file contains it
                if(!class_exists($module)) {
                    $high_class_file = sprintf('%s%s%s.class.php', _XE_PATH_,$class_path, $module);
                    if(!file_exists($high_class_file)) return NULL;
                    require_once($high_class_file);
                }

                // Get the object's name
                switch($type) {
                    case 'controller' :
                            if($kind == 'admin') {
                                $instance_name = sprintf("%sAdmin%s",$module,"Controller");
                                $class_file = sprintf('%s%s.admin.%s.php', $class_path, $module, $type);
                            } else {
                                $instance_name = sprintf("%s%s",$module,"Controller");
                                $class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
                            }
                        break;
                    case 'model' :
                            if($kind == 'admin') {
                                $instance_name = sprintf("%sAdmin%s",$module,"Model");
                                $class_file = sprintf('%s%s.admin.%s.php', $class_path, $module, $type);
                            } else {
                                $instance_name = sprintf("%s%s",$module,"Model");
                                $class_file = sprintf('%s%s.%s.php', $class_path, $module, $type);
                            }
                        break;
                    case 'api' :
                            $instance_name = sprintf("%s%s",$module,"API");
                            $class_file = sprintf('%s%s.api.php', $class_path, $module);
                        break;
                    case 'wap' :
                            $instance_name = sprintf("%s%s",$module,"WAP");
                            $class_file = sprintf('%s%s.wap.php', $class_path, $module);
                        break;
     case 'mobile' :
       $instance_name = sprintf("%s%s",$module,"Mobile");
       $class_file = sprintf("%s%s.mobile.php", $class_path, $module);
      break;
                    case 'class' :
                            $instance_name = $module;
                            $class_file = sprintf('%s%s.class.php', $class_path, $module);
                        break;
                    default :
                            $type = 'view';
                            if($kind == 'admin') {
                                $instance_name = sprintf("%sAdmin%s",$module,"View");
                                $class_file = sprintf('%s%s.admin.view.php', $class_path, $module, $type);
                            } else {
                                $instance_name = sprintf("%s%s",$module,"View");
                                $class_file = sprintf('+ '%s%s.view.php', $class_path, $module, $type);
                            }
                        break;
                }

    $class_file = FileHandler::getRealPath($class_file);

                // Get the name of the class file
                if(!file_exists($class_file)) return NULL;

                // Create an instance with eval function
                require_once($class_file);
                if(!class_exists($instance_name)) return NULL;
                $eval_str = sprintf('$oModule = new %s();', $instance_name);
                @eval($eval_str);
                if(!is_object($oModule)) return NULL;

                // Load language files for the class
                Context::loadLang($class_path.'lang');
    if($extend_module) {
     Context::loadLang(ModuleHandler::getModulePath($parent_module).'lang');
    }

                // Set variables to the instance
                $oModule->setModule($module);
                $oModule->setModulePath($class_path);

                // If the module has a constructor, run it.
                if(!isset($GLOBALS['_called_constructor'][$instance_name])) {
                    $GLOBALS['_called_constructor'][$instance_name] = true;
                    if(@method_exists($oModule, $instance_name)) $oModule->{$instance_name}();
                }

                // Store the created instance into GLOBALS variable
                $GLOBALS['_loaded_module'][$module][$type][$kind] = $oModule;
            }

            if(__DEBUG__==3) $GLOBALS['__elapsed_class_load__'] += getMicroTime() - $start_time;

            // return the instance
            return $GLOBALS['_loaded_module'][$module][$type][$kind];
        }

        /**
         * @brief call a trigger
         * @param[in] $trigger_name trigger's name to call
         * @param[in] $called_position called position
         * @param[in] $obj an object as a parameter to trigger
         * @return Object
         **/
        function triggerCall($trigger_name, $called_position, &$obj) {
            // skip if not installed
            if(!Context::isInstalled()) return new Object();

            $oModuleModel = &getModel('module');
            $triggers = $oModuleModel->getTriggers($trigger_name, $called_position);
            if(!$triggers || !count($triggers)) return new Object();

            foreach($triggers as $item) {
                $module = $item->module;
                $type = $item->type;
                $called_method = $item->called_method;

                $oModule = null;
                $oModule = &getModule($module, $type);
                if(!$oModule || !method_exists($oModule, $called_method)) continue;

                $output = $oModule->{$called_method}($obj);
                if(is_object($output) && method_exists($output, 'toBool') && !$output->toBool()) return $output;
                unset($oModule);
            }

            return new Object();
        }
    }
?>

 

 

태그 연관 글
  1. [2015/10/16] 묻고답하기 검색이 안됩니다. by sports21
  2. [2015/07/03] 묻고답하기 확장변수 검색 불가 by Xe재미나게
  3. [2014/11/18] Learn XECon 2014 - ElasticSearch를 이용한 통합검색 구축방법 by XE
  4. [2014/06/17] 묻고답하기 XE문제 일까요? 카페24 호스팅 문제 일까요? 통합검색이 안되요 by joel74 *3
  5. [2014/03/31] 묻고답하기 검색결과 화면에 추가 하고 싶은게 있는데요.. by cromy *1
글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
지우개님 아이피 주소 변경시 (게시판 클릭 하면 도메인으로 나타나야 되는데. 아이피로 떠서요 [1] file 2010.12.03 by Gekkou
oldbell0503 게시판 ex 관리자 모드에서 최근 신고된 문서 내역 삭제 방법  
지식창고★ 텍스타일 rss 질문 드립니다 [1] 2010.12.03 by SeklutZ
류성용420 사용자가 회원 탈퇴를 할때 탈퇴신청을 하면 관리자가 확인후 승인처리하면  
luckyksy 게시판기능중에 자동 답변 해주는 기능이 있나요?? [1] 2010.12.03 by SeklutZ
Prican files의 cache 폴더가 삭제되지 않습니다. [2] 2010.12.03 by 물비늘
불패의초인 통합검색 쪽에 문제가 있네요.  
쌀콩 쉬운설치 xe 업데이트시 error [1] 2010.12.03 by 스타호스트
aZKaL 아이콘 샵 대표 아이콘 설정 해제 하는 방법 [1] 2010.12.03 by 하늘종
에혀라X 좀 돠 주세요 ㅠㅠ. 미쿡 살함입니다.  
송용호 모든 게시판 에서 동일한 폰트 색을 사용하고 싶습니다. [1] 2010.12.03 by SeklutZ
지우개님 최신 버전을 깔았는데요.. 최신 이미지 위젯에서 이미지 출력 안됨 [1] 2010.12.03 by SeklutZ
미친박군 TemplateHandler.class.php(220) 에러? [1] 2010.12.03 by SeklutZ
지오426 글과 코멘트가 너무 많다는데 방법이 없을까요?  
안수완 XE코어 버전 업그레이드 방법 문의 [1] 2010.12.02 by Gekkou
안수완 Content 이미지 슬라이더 오류 [1] file 2010.12.02 by 배워서남준다
RainDrop+ html 폼디자인 하나만 여쭙겠습니다!! [1] 2010.12.02 by SMaker
redclip 샵xe 에서 소수점으로 가격을 넣는 방법은?  
롱코트ew 관리자는 포인트 차감 안되게....  
이데아캐논 ie6 갤러리 정렬 문제 file  
와다리 계정 복원시 아래와 같은 메세지가 출력 됩니다. DB에 연결이 안됩니다.  
김유진545 게시판 리스트에서 비밀글 출력이 안되게 하려면 어떻게 해야하나요?  
상해남 플래닛 사진 추가기능..  
kjsta2r 메뉴에서 새창 뛰울때 사이즈 조절 하는 방법을 모르겠습니다 ㅠ  
소나무 열매 권한 설정 후 하얀 화면만  
Hodoll 업데이트 버튼 눌러도 왜 안 없어지죠? (스샷 포함) [1] file 2010.12.02 by Hodoll
휴휴 board id는 어디에서 확인하나요  
feiwang 제어판 스팸문서 관련 질문드립니다. file  
얼쑤좋구나 업데이트 후 로그인 불가 문제  
붕어짱 1.4.3.1 에서 1.4.4로 업그레이드시 에러메시지 file