Example #1
0
    require_once MO_APP_DIR . '/Error/Errors.php';
    require_once MO_APP_DIR . '/Util/ParameterHolder.php';
    require_once MO_APP_DIR . '/Config/ConfigCache.php';
    require_once MO_APP_DIR . '/Config/ConfigHandler.php';
    require_once MO_APP_DIR . '/Config/ParameterParser.php';
    require_once MO_APP_DIR . '/Config/IniConfigHandler.php';
    require_once MO_APP_DIR . '/Config/AutoloadConfigHandler.php';
    require_once MO_APP_DIR . '/Config/LoggingConfigHandler.php';
    require_once MO_APP_DIR . '/Config/RootConfigHandler.php';
    require_once MO_APP_DIR . '/Exception/MojaviException.php';
    require_once MO_APP_DIR . '/Exception/AutoloadException.php';
    require_once MO_APP_DIR . '/Exception/CacheException.php';
    require_once MO_APP_DIR . '/Exception/ConfigurationException.php';
    require_once MO_APP_DIR . '/Exception/ParseException.php';
    require_once MO_APP_DIR . '/Util/Toolkit.php';
    // clear our cache if the conditions are right
    if (MO_DEBUG) {
        error_log("================================ Clearing Cache ====================================");
        ConfigCache::clear();
    }
    // load base settings
    ConfigCache::import('config/settings.ini');
    // required classes for the framework
    ConfigCache::import('config/compile.conf');
} catch (MojaviException $e) {
    $e->printStackTrace();
} catch (Exception $e) {
    // unknown exception
    $e = new MojaviException($e->getMessage());
    $e->printStackTrace();
}
Example #2
0
 /**
  * Forward the request to another action.
  *
  * @param string A module name.
  * @param string An action name.
  *
  * @return void
  *
  * @throws <b>ConfigurationException</b> If an invalid configuration setting
  *									   has been found.
  * @throws <b>ForwardException</b> If an error occurs while forwarding the
  *								 request.
  * @throws <b>InitializationException</b> If the action could not be
  *										initialized.
  * @throws <b>SecurityException</b> If the action requires security but
  *								  the user implementation is not of type
  *								  SecurityUser.
  */
 public function forward($moduleName, $actionName)
 {
     // replace periods with slashes for action sub-directories
     $actionName = str_replace('.', '/', $actionName);
     // replace unwanted characters
     $moduleName = preg_replace('/[^a-z0-9\\-_]+/i', '', $moduleName);
     $actionName = preg_replace('/[^a-z0-9\\-_\\/]+/i', '', $actionName);
     // track the requested module so we have access to the data
     $this->request->setAttribute('requested_action', $actionName);
     $this->request->setAttribute('requested_module', $moduleName);
     if ($this->actionStack->getSize() >= $this->maxForwards) {
         // let's kill this party before it turns into cpu cycle hell
         $error = 'Too many forwards have been detected for this request';
         throw new ForwardException($error);
     }
     if (!MO_AVAILABLE) {
         // application is unavailable
         $moduleName = MO_UNAVAILABLE_MODULE;
         $actionName = MO_UNAVAILABLE_ACTION;
         if (!$this->actionExists($moduleName, $actionName)) {
             // cannot find unavailable module/action
             $error = 'Invalid configuration settings: ' . 'MO_UNAVAILABLE_MODULE "%s", ' . 'MO_UNAVAILABLE_ACTION "%s"';
             $error = sprintf($error, $moduleName, $actionName);
             throw new ConfigurationException($error);
         }
     } else {
         if (!$this->actionExists($moduleName, $actionName)) {
             // the requested action doesn't exist
             // switch to error 404 action
             $moduleName = MO_ERROR_404_MODULE;
             $actionName = MO_ERROR_404_ACTION;
             if (!$this->actionExists($moduleName, $actionName)) {
                 // cannot find unavailable module/action
                 $error = 'Invalid configuration settings: ' . 'MO_ERROR_404_MODULE "%s", ' . 'MO_ERROR_404_ACTION "%s"';
                 $error = sprintf($error, $moduleName, $actionName);
                 throw new ConfigurationException($error);
             }
         }
     }
     // create an instance of the action
     $actionInstance = $this->getAction($moduleName, $actionName);
     // add a new action stack entry
     $this->actionStack->addEntry($moduleName, $actionName, $actionInstance);
     // include the module configuration
     ConfigCache::import('modules/' . $moduleName . '/config/module.ini');
     if (constant('MOD_' . strtoupper($moduleName) . '_ENABLED')) {
         // module is enabled
         // check for a module config.php
         $moduleConfig = MO_MODULE_DIR . '/' . $moduleName . '/config.php';
         if (is_readable($moduleConfig)) {
             require_once $moduleConfig;
         }
         // initialize the action
         if ($actionInstance->initialize($this->context)) {
             // create a new filter chain
             $filterChain = new \Mojavi\Filter\FilterChain();
             if (MO_AVAILABLE) {
                 // the application is available so we'll register
                 // global and module filters, otherwise skip them
                 // does this action require security?
                 if (MO_USE_SECURITY && $actionInstance->isSecure()) {
                     if (!$this->user instanceof SecurityUser) {
                         // we've got security on but the user implementation
                         // isn't a sub-class of SecurityUser
                         $error = 'Security is enabled, but your User ' . 'implementation isn\'t a sub-class of ' . 'SecurityUser';
                         throw new SecurityException($error);
                     }
                     // register security filter
                     $filterChain->register($this->securityFilter);
                 }
                 // load filters
                 $this->loadGlobalFilters($filterChain);
                 $this->loadModuleFilters($filterChain);
             }
             // register the execution filter
             $execFilter = new ExecutionFilter();
             $execFilter->initialize($this->context);
             $filterChain->register($execFilter);
             // process the filter chain
             $filterChain->execute();
         } else {
             // action failed to initialize
             $error = 'Action initialization failed for module "%s", ' . 'action "%s"';
             $error = sprintf($error, $moduleName, $actionName);
             throw new \Mojavi\Exception\InitializationException($error);
         }
     } else {
         // module is disabled
         $moduleName = MO_MODULE_DISABLED_MODULE;
         $actionName = MO_MODULE_DISABLED_ACTION;
         if (!$this->actionExists($moduleName, $actionName)) {
             // cannot find mod disabled module/action
             $error = 'Invalid configuration settings: ' . 'MO_MODULE_DISABLED_MODULE "%s", ' . 'MO_MODULE_DISABLED_ACTION "%s"';
             $error = sprintf($error, $moduleName, $actionName);
             throw new \Mojavi\Exception\ConfigurationException($error);
         }
         $this->forward($moduleName, $actionName);
     }
 }