Example #1
0
 function testClassFromFile()
 {
     $this->assertEquals("Bang", FileUtils::classFromFile("/this/is/a/path/to/a/class/named/Bang.php"));
 }
Example #2
0
 /**
  * Construct the action definition from the contents of the ubar.xml file.
  *
  * NOTE: If no path is defined for the action, a dummy action that always
  * returns GlobalConstants::SUCCESS will be used.
  *
  * @param class $actionXML - XML representation of an action definition.
  *
  * @see ActionMapper::getAction()
  */
 public function __construct($actionXML)
 {
     $path = (string) $actionXML['path'];
     // use dummy action if no action defined
     if ($path != '') {
         $this->actionLocation = FileUtils::dotToPath($path);
         $this->actionClassName = FileUtils::classFromFile($this->actionLocation);
     } else {
         $this->actionClassName = GlobalConstants::DUMMY_ACTION;
     }
     if (!is_null($actionXML['template'])) {
         $this->templateName = (string) $actionXML['template'];
     }
     if (!is_null($actionXML['view'])) {
         $this->viewLocation = FileUtils::dotToPath((string) $actionXML['view']);
     }
     $this->results = $actionXML->results->result;
     $this->permissionGroup = $actionXML->permissionGroup;
     $this->permissions = $actionXML->permissions;
     $this->name = (string) $actionXML['name'];
     // add params
     foreach ($actionXML->param as $param) {
         $attribs = $param->attributes();
         $name = (string) $attribs->name;
         $value = (string) $attribs->value;
         $this->addParam($name, $value);
     }
     // display values
     $this->title = (string) $actionXML['title'];
     $this->titleKey = (string) $actionXML['titleKey'];
     // TODO: page mostly makes sense as action name, consider decoupling however
     $this->page = (string) $actionXML['name'];
     $this->section = (string) $actionXML['section'];
     $this->subSection = (string) $actionXML['subSection'];
 }
Example #3
0
 /**
  * Get action definition and instance using the requested URL or using an
  * overriding action name. The override is typically only used for testing
  * purposes and it is not recommended that it be used elsewhere.
  *
  * NOTE: This is a public method so that it may be called from tests. It is
  * not recommended that you call it directly elsewhere.
  *
  * @param string $actionString Overriding action string. Use not
  * recommended outside of testing.
  *
  * @returns class The action instance.
  *
  * @throws ActionNotFoundException If the action file was not found.
  * @throws Exception if the action def was not found and no default was
  * found.
  */
 public function getAction($actionString = null)
 {
     global $UBAR_GLOB;
     // no override to action name, get from url
     if (is_null($actionString)) {
         // match action part of the URI
         preg_match(self::ACTION_REGEX, $_SERVER['REQUEST_URI'], $matches);
         // get action string from url
         if (isset($matches[1])) {
             $actionString = $matches[1];
         } else {
             // didn't match format despite .htaccess rule, assume empty and get default
             $this->actionDef = $this->actionMapper->getDefaultAction();
         }
     }
     // get action from action name if not already set to default
     if (is_null($this->actionDef)) {
         try {
             $this->actionDef = $this->actionMapper->getAction($actionString);
         } catch (Exception $e) {
             // TODO: look for error def, render that after setting error in session
             throw new Exception($e->getMessage());
         }
     }
     // if still null die saying can't do action mapping
     if (is_null($this->actionDef)) {
         throw new Exception("Unable to find a default action");
     }
     // verify that action exists
     $actionRealPath = null;
     // if no action name was provided, use a dummy to always return success
     if ($this->actionDef->getActionLocation() == '') {
         // see if overriding dummy provided, used to expose common methods
         // to tempates and similar
         $dummyOverride = $this->actionMapper->getDummyActionPath();
         if (is_null($dummyOverride)) {
             $actionRealPath = $UBAR_GLOB['UBAR_ROOT'] . '/core/' . GlobalConstants::DUMMY_ACTION . '.php';
         } else {
             // mostly set for debugging purposes
             $this->actionDef->setActionLocation($dummyOverride);
             $actionRealPath = $UBAR_GLOB['BASE_ACTION_PATH'] . $dummyOverride;
             $actionClassName = FileUtils::classFromFile($dummyOverride);
             $this->actionDef->setClassName($actionClassName);
         }
     } else {
         $actionRealPath = $UBAR_GLOB['BASE_ACTION_PATH'] . $this->actionDef->getActionLocation();
     }
     if (!file_exists($actionRealPath)) {
         throw new ActionNotFoundException($this->actionDef);
     } else {
         require_once $actionRealPath;
     }
     // instantiate specific action - class name may have been overridden
     $actionClassName = $this->actionDef->getClassName();
     $this->action = new $actionClassName($this->actionDef);
     return $this->action;
 }