protected function generateResponseForException(RhubarbException $er)
 {
     $urlHandler = UrlHandler::getExecutingUrlHandler();
     if ($urlHandler) {
         return $urlHandler->generateResponseForException($er);
     } else {
         $response = new HtmlResponse();
         $response->setContent("<p>The application failed to start. Please consult the shutdown error log for more details");
         return $response;
     }
 }
 public function __construct($folderOrFilePath, $children = [])
 {
     parent::__construct($children);
     $this->folderOrFilePath = rtrim($folderOrFilePath, "/");
     if (!file_exists($this->folderOrFilePath)) {
         throw new StaticResourceNotFoundException($this->folderOrFilePath);
     }
     if (is_dir($this->folderOrFilePath)) {
         $this->isFolder = true;
     }
 }
 public function __construct($modelName, $children = [])
 {
     $this->modelName = $modelName;
     parent::__construct($children);
 }
Example #4
0
 /**
  * Return the response when appropriate or false if no response could be generated.
  *
  * If child handlers are present they are given priority.
  *
  * @param mixed $request
  * @param bool|string $currentUrlFragment
  * @return bool|Response
  */
 public function generateResponse($request = null, $currentUrlFragment = false)
 {
     if ($currentUrlFragment === false) {
         $currentUrlFragment = $request->urlPath;
     }
     if (!$this->matchesRequest($request, $currentUrlFragment)) {
         return false;
     }
     UrlHandler::setExecutingUrlHandler($this);
     Log::debug(function () {
         return "Handler " . get_class($this) . " selected to generate response";
     }, "ROUTER");
     Log::indent();
     $context = new PhpContext();
     $context->UrlHandler = $this;
     $this->matchingUrl = $this->getMatchingUrlFragment($request, $currentUrlFragment);
     if ($this->parentHandler) {
         $this->handledUrl = $this->parentHandler->handledUrl . $this->matchingUrl;
     } else {
         $this->handledUrl = $this->matchingUrl;
     }
     $childUrlFragment = substr($currentUrlFragment, strlen($this->matchingUrl));
     foreach ($this->childUrlHandlers as $childHandler) {
         $response = $childHandler->generateResponse($request, $childUrlFragment);
         if ($response !== false) {
             return $response;
         }
     }
     $response = $this->generateResponseForRequest($request, $currentUrlFragment);
     Log::debug(function () use($response) {
         if ($response !== false) {
             return "Response generated by handler";
         }
         return "Handler deferred generation";
     }, "ROUTER");
     Log::outdent();
     return $response;
 }
 public function __construct(LoginProvider $loginProvider, $loginUrl, $children = [])
 {
     $this->loginProvider = $loginProvider;
     $this->loginUrl = $loginUrl;
     parent::__construct($children);
 }
 protected function generateResponseForRequest($request = null, $currentUrlFragment = "")
 {
     if ($request !== null && $request->IsWebRequest) {
         $url = $currentUrlFragment;
     } else {
         $url = null;
     }
     if (stripos($url, $this->url) !== 0) {
         return false;
     }
     $relevantUrl = preg_replace("|^" . $this->url . "|", "", $url);
     // Make sure the url we consider ends in a slash. Later we'll redirect the user
     // to this URL if we find a target (to make sure relative urls work properly in all
     // cases).
     $redirectTo = false;
     if (strlen($relevantUrl) > 0) {
         if ($relevantUrl[strlen($relevantUrl) - 1] != "/") {
             $redirectTo = $url . "/";
             $relevantUrl .= "/";
         }
     }
     $urlParts = explode("/", $relevantUrl);
     $folderUrl = "/";
     foreach ($urlParts as $part) {
         // Sanitise the last part of the url to translate more URL like names to more class like names
         $classPart = $this->convertUrlToClassName($part);
         $objectUrl = $folderUrl . $classPart;
         $objectClass = "\\" . $this->namespace . str_replace("/", "\\", $objectUrl);
         if (class_exists($objectClass)) {
             if ($redirectTo !== false) {
                 UrlHandler::redirectToUrl($this->BuildCompleteChildUrl($redirectTo));
             }
             $object = new $objectClass();
             if (is_a($object, "\\Rhubarb\\Crown\\Response\\GeneratesResponse")) {
                 return $this->onTargetFound($object, $request);
             }
         }
         $folderUrl .= $part . "/";
     }
     return $this->onNoTargetFound($request, $currentUrlFragment);
 }
Example #7
0
 private function addUrlHandler($url, UrlHandler $handler, $children = [])
 {
     // If $url is numeric then most likely the $handler can report it's own URL
     if (!is_numeric($url)) {
         $handler->setUrl($url);
     }
     $name = $handler->getName();
     if ($name) {
         $this->urlHandlers[$name] = $handler;
     } else {
         $this->urlHandlers[] = $handler;
     }
 }
Example #8
0
 private function addUrlHandler($url, UrlHandler $handler, $children = [])
 {
     $handler->setUrl($url);
     $name = $handler->getName();
     if ($name) {
         $this->urlHandlers[$name] = $handler;
     } else {
         $this->urlHandlers[] = $handler;
     }
 }