Example #1
0
 /**
  * Choose view depending on request type
  */
 public static final function start()
 {
     $controller = Controller::getInstance();
     if (Controller::hasUnusedParameters()) {
         $controller->putExpires(true);
         throw new HttpError(404);
     } elseif (!is_null(self::$output)) {
         $controller->putExpires();
         header('Content-Type: ' . self::$outputType . '; charset="utf-8"');
         echo self::$output;
         View::$rendered = true;
     } elseif (Debugger::isEnabled() and isset($_GET['xml']) and $_GET['xml']) {
         if ($_GET['xml'] == '2') {
             View\XML::fillXML();
         }
         header('Content-Type: text/xml; charset="utf-8"');
         $controller->xml->formatOutput = true;
         $controller->xml->encoding = 'utf-8';
         echo rawurldecode($controller->xml->saveXML());
         View::$rendered = true;
     } elseif (!View::$rendered and Request::isAjax()) {
         $controller->putExpires();
         // should be application/json, but opera doesn't understand it and offers to save file to disk
         header('Content-type: text/plain');
         echo Ajaxer::getResponse();
         View::$rendered = true;
     } elseif (!View::$rendered) {
         $controller->putExpires();
         try {
             View::render($controller->xml);
         } catch (HttpError $ex) {
             if (!Debugger::isConsoleEnabled()) {
                 throw new HttpError(500);
             } else {
                 echo Debugger::debugHTML(true);
                 die;
             }
         }
     }
 }
Example #2
0
 /**
  * Callback for fatal errors
  */
 public static function captureShutdown()
 {
     if (View::$rendered) {
         return;
     }
     // was there an error?
     if (!($error = error_get_last()) and !self::$handledByException) {
         return;
     }
     if ($error) {
         // add error to console log
         if (self::$handledByNormal != $error['message']) {
             $error['error'] = Libs\Debug\ErrorConstants::getInstance()->getVerbalError($error['type']);
             $error['class'] = 'errors';
             $error['traceback'] = debug_backtrace();
             array_shift($error['traceback']);
             self::addLineAsArray($error);
         }
     }
     self::$shutdown = true;
     // view was not rendered yet, render console standalone page
     if (!View::$rendered) {
         if (!Request::isAjax()) {
             echo self::debugHTML(true);
         } else {
             echo Ajaxer::getResponse();
         }
         View::$rendered = true;
     }
 }
Example #3
0
    /**
     * Construct
     * @param string $message
     * @param int $code
     * @param \Exception $previous
     */
    public function __construct($message, $code = 0, \Exception $previous = null)
    {
        //parent::__construct( $message, $code, $previous );
        if (isset(self::$errors[$message])) {
            $err = $message;
            $error = self::$errors[$err];
            $msg = '';
        } elseif (isset(self::$errors[$code])) {
            $err = $code;
            $error = self::$errors[$err];
            $msg = $message;
        } else {
            $err = self::E_INTERNAL_SERVER_ERROR;
            $error = self::$errors[$err];
            $msg = $message;
        }
        self::$error = $err;
        header("HTTP/1.1 {$err} {$error}");
        /*
        if( $ttl and is_numeric( $ttl ) and $ttl >= 0 ) {
            self::addExpires( $ttl );
        }
        */
        try {
            $xml = new \DOMDocument();
            /** @var $root \DOMElement */
            $root = $xml->appendChild($xml->createElement('error' . $err));
            $root->setAttribute('host', Envi::getSubsite());
            $root->setAttribute('hostname', $host = Envi::getHost());
            $root->setAttribute('mainhost', $mainHost = Envi::getHost(true));
            if ($host != $mainHost) {
                $root->setAttribute('urlprefix', 'http://' . $mainHost);
            }
            $root->setAttribute('build', Version::getBuild());
            $configNode = $root->appendChild($xml->createElement('config'));
            Envi::getStateXML($configNode);
            View::render($xml, 'error_' . $err);
        } catch (\Difra\Exception $ex) {
            echo <<<ErrorPage
<html>
\t<head>
\t\t<title>{$error}</title>
\t</head>
\t<body>
\t\t<center>
\t\t\t<h1 style="padding:350px 0 0 0">Error {$err}: {$error}</h1>
\t\t\t{$msg}
\t\t</center>
\t</body>
</html>
ErrorPage;
        }
        View::$rendered = true;
        die;
    }
Example #4
0
 /**
  * Resource (JS, CSS, etc.) request processor
  * @param string[] $parts
  * @throws \Difra\View\HttpError
  * @return bool
  */
 private static function getResource($parts)
 {
     if (sizeof($parts) != 2) {
         return false;
     }
     $resourcer = Resourcer::getInstance($parts[0], true);
     if ($resourcer and $resourcer->isPrintable()) {
         try {
             if (!$resourcer->view($parts[1])) {
                 throw new HttpError(404);
             }
             View::$rendered = true;
             die;
         } catch (Exception $ex) {
             throw new HttpError(404);
         }
     }
     return false;
 }