Ejemplo n.º 1
0
 /**
  * Automated version of self::isDispatchableModule()
  * @param eRequest $request 
  * @param boolean $checkReflection deep check - proper subclassing, action
  * @param boolean $checkOverride try override controller folder first
  * @return mixed class name OR false if not dispatchable
  */
 public function isDispatchable(eRequest $request, $checkReflection = false, $checkOverride = true)
 {
     $location = self::getDispatchLocation($request->getModuleName());
     $controllerName = $request->getControllerName();
     $moduleName = $request->getModuleName();
     $className = false;
     // dispatch based on url_config preference value, if config location is override and there is no
     // override controller, additional check against real controller location will be made
     if ($location) {
         $className = $this->isDispatchableModule($moduleName, $controllerName, $location, $checkOverride);
     }
     //else
     //{
     # Disable plugin check for routes with no config info - prevent calling of non-installed plugins
     # We may allow this for plugins which don't have plugin.xml in the future
     // $className = $this->isDispatchableModule($moduleName, $controllerName, 'plugin', $checkOverride);
     // if(!$className)
     //$className = $this->isDispatchableModule($moduleName, $controllerName, 'core', $checkOverride);
     //}
     if (empty($className)) {
         return false;
     } elseif (!$checkReflection) {
         return $className;
     }
     $rfl = new ReflectionClass($className);
     $method = $request->getActionMethodName();
     if ($rfl->isSubclassOf('eController') && $rfl->hasMethod($method) && $rfl->getMethod($method)->isPublic() && !$rfl->getMethod($method)->isStatic()) {
         return $className;
     }
     return false;
 }