묻고답하기

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

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 남기남
sports21 검색이 안됩니다.  
Xe재미나게 확장변수 검색 불가  
joel74 XE문제 일까요? 카페24 호스팅 문제 일까요? 통합검색이 안되요 [3] 2014.06.19 by joel74
cromy 검색결과 화면에 추가 하고 싶은게 있는데요.. [1] 2014.03.31 by W.O
햄슈터 통합검색이 잘 안되는데 어떻게 해야 할지모르겠습니다 [1] file 2012.03.30 by sejin7940
민지2 가입폼과 통합검색에 관해 여쭙니다 [2] file 2011.12.20 by 송동우
피레느 제로보드xe 통합검색 검색이 안됩니다.  
충서엉 통합검색에 관한 질문입니다..글쓴이가 않나오게 하는법이요... [2] 2011.04.30 by 충서엉
노마드 comment 테이블에서 document->title 불러오는 방법 좀 알려주세요.  
달콤한인삼 통합검색이 안됩니다. [2] 2011.01.29 by 달콤한인삼
불패의초인 통합검색 쪽에 문제가 있네요.  
상오기 통합검색에 확장변수를 추가하려면? [2] 2009.08.18 by 상오기
유학com 통합검색에 대해서요 ~ ㅠ0ㅠ 제발좀 부탁드려요 [2] 2009.06.19 by 행호
왕초보408 그룹(회원)을 기반으로한 검색기능에 관한 질문입니다  
미믹스 기본 사이트와 Cafe의 통합검색 스킨을 별도로 설정이 가능한가요? [2] 2009.02.25 by 미믹스
다방짱 통합검색에서 검색어에 따라 다운되거나 화면이 안나옵니다ㅠ.ㅠ [1] file 2009.02.18 by 지연아빠
jwmx 통합검색이 검색어에 따라 되다가 안 되다가 합니다. [2] file 2009.02.18 by 다방짱
Jiyoung540 통합검색 관련, 디폴트를 바꾸는 문제와 옵션 더 주는 것에대해...