묻고답하기

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

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 남기남
와다리 계정 복원시 아래와 같은 메세지가 출력 됩니다. DB에 연결이 안됩니다.  
이데아캐논 ie6 갤러리 정렬 문제 file  
롱코트ew 관리자는 포인트 차감 안되게....  
redclip 샵xe 에서 소수점으로 가격을 넣는 방법은?  
RainDrop+ html 폼디자인 하나만 여쭙겠습니다!! [1] 2010.12.02 by SMaker
안수완 Content 이미지 슬라이더 오류 [1] file 2010.12.02 by 배워서남준다
안수완 XE코어 버전 업그레이드 방법 문의 [1] 2010.12.02 by Gekkou
지오426 글과 코멘트가 너무 많다는데 방법이 없을까요?  
미친박군 TemplateHandler.class.php(220) 에러? [1] 2010.12.03 by SeklutZ
지우개님 최신 버전을 깔았는데요.. 최신 이미지 위젯에서 이미지 출력 안됨 [1] 2010.12.03 by SeklutZ
송용호 모든 게시판 에서 동일한 폰트 색을 사용하고 싶습니다. [1] 2010.12.03 by SeklutZ
에혀라X 좀 돠 주세요 ㅠㅠ. 미쿡 살함입니다.  
aZKaL 아이콘 샵 대표 아이콘 설정 해제 하는 방법 [1] 2010.12.03 by 하늘종
쌀콩 쉬운설치 xe 업데이트시 error [1] 2010.12.03 by 스타호스트
불패의초인 통합검색 쪽에 문제가 있네요.  
Prican files의 cache 폴더가 삭제되지 않습니다. [2] 2010.12.03 by 물비늘
luckyksy 게시판기능중에 자동 답변 해주는 기능이 있나요?? [1] 2010.12.03 by SeklutZ
류성용420 사용자가 회원 탈퇴를 할때 탈퇴신청을 하면 관리자가 확인후 승인처리하면  
지식창고★ 텍스타일 rss 질문 드립니다 [1] 2010.12.03 by SeklutZ
oldbell0503 게시판 ex 관리자 모드에서 최근 신고된 문서 내역 삭제 방법  
지우개님 아이피 주소 변경시 (게시판 클릭 하면 도메인으로 나타나야 되는데. 아이피로 떠서요 [1] file 2010.12.03 by Gekkou
hrum 같은 페이지의 같은 폰트인데 차이가 나는 이유가 뭔지요? file  
창섭 아;; 로그인이 안되는 이유가  
루미엘 IE8, 크롬, 사파리에서는 레이아웃이 잘나오는데 파폭만 안되요 [1] file 2010.12.03 by ForHanbi
pecannv 게시판 제목글씨색을 바꾸고싶습니다. [1] file 2010.12.03 by ForHanbi
아키노바 게시판EX에서 게시판 목록 보기 에러 [1] file 2010.12.03 by ForHanbi
뫼바위 XE에서 플레쉬로 작업한 버튼 링크 안되는이유좀 알려주세요..!!  
지식창고★ 토렌트 검색 사이트요  
루미엘 파폭에서만 메뉴 및 로고가 안나와요 file  
TT PIC XE홈페이지처럼 게시물 연속 작성 시 30초 시간 제한 주기 [1] 2010.12.03 by SeklutZ