묻고답하기

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

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 남기남
검프 게시물 권한 표시 하는 함수가 뭔지 알수 없을까요?  
nothanku 글을 읽으면 위젯스타일이 적용 안되는 문제  
괴적인격 1개 항목을 읽고있습니다. file  
또별 포인트테이블에 아이디 추가방법 문의  
clov 구글애드센스와의 충돌 애러인가요? file  
혜곰돌이 쉬운설치에서 에러가 납니다 [2] file 2010.12.04 by 김건연
오동쌍피 이게 제로보드 스킨인가요? [1] 2010.12.06 by 오동쌍피
혜령 세팅을 잘못해서 관리자 페이지가 안열려요 [1] 2010.12.03 by fast
정명학629 XE 사용 시 겔러리관련 질문요~!  
희망은없다 댓글 알림 쪽지에서 링크 연결 안됩니다.  
유서영895 본문에 RSS로 읽어온 글이 그대로 보이게 할 수 없나요?  
실속제로 powered by XE 를 수정했는데도 적용이 안되네요.  
롱코트ew 관리자 포인트 차감 안되게하는거 소스 좀 봐주세요.  
TT PIC XE홈페이지처럼 게시물 연속 작성 시 30초 시간 제한 주기 [1] 2010.12.03 by SeklutZ
루미엘 파폭에서만 메뉴 및 로고가 안나와요 file  
지식창고★ 토렌트 검색 사이트요  
뫼바위 XE에서 플레쉬로 작업한 버튼 링크 안되는이유좀 알려주세요..!!  
아키노바 게시판EX에서 게시판 목록 보기 에러 [1] file 2010.12.03 by ForHanbi
pecannv 게시판 제목글씨색을 바꾸고싶습니다. [1] file 2010.12.03 by ForHanbi
루미엘 IE8, 크롬, 사파리에서는 레이아웃이 잘나오는데 파폭만 안되요 [1] file 2010.12.03 by ForHanbi
창섭 아;; 로그인이 안되는 이유가  
hrum 같은 페이지의 같은 폰트인데 차이가 나는 이유가 뭔지요? file  
지우개님 아이피 주소 변경시 (게시판 클릭 하면 도메인으로 나타나야 되는데. 아이피로 떠서요 [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 스타호스트