File: platform/classes/Q/WebController.php
<?php
/**
* @module Q
*/
/**
* Web controller - excecutes web request
* @class Q_WebController
*/
class Q_WebController
{
/**
* Excecute web request
* @method execute
* @static
*/
static function execute()
{
// Fixes for different platforms:
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { // ISAPI 3.0
$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
}
if (ob_get_level()) {
ob_end_clean();
}
// Get the base URL
$base_url = Q_Request::baseUrl();
if (Q::$controller === 'Q_ActionController') {
// we detected action.php in the URL, but
// a misconfigured web server executed index.php instead
return Q_ActionController::execute();
}
// Set the controller that is being used
if (!isset(Q::$controller)) {
Q::$controller = 'Q_WebController';
}
try {
$slots = Q_Request::slotNames(false);
$slots = $slots ? ' slots: ('.implode(',', $slots).') from' : '';
$method = Q_Request::method();
Q::log("$method$slots url: " . Q_Request::url(true),
null, null, array('maxLength' => 10000)
);
Q_Dispatcher::dispatch();
$dispatchResult = Q_Dispatcher::result();
if (!isset($dispatchResult)) {
$dispatchResult = 'Ran dispatcher';
}
$uri = Q_Request::uri();
$module = $uri->module;
$action = $uri->action;
if ($module and $action) {
$slotNames = Q_Request::slotNames();
$returned_slots = empty($slotNames)
? ''
: implode(',', $slotNames);
Q::log("~" . ceil(Q::milliseconds()) . 'ms+'
. ceil(memory_get_peak_usage()/1000) . 'kb.'
. " $dispatchResult for $module/$action"
. " ($returned_slots)",
null, null, array('maxLength' => 10000)
);
} else {
Q::log("~" . ceil(Q::milliseconds()) . 'ms+'
. ceil(memory_get_peak_usage()/1000) . 'kb.'
. " $dispatchResult No route for " . $_SERVER['REQUEST_URI'],
null, null, array('maxLength' => 10000)
);
}
} catch (Exception $exception) {
/**
* @event Q/exception
* @param {Exception} exception
*/
Q::event('Q/exception', compact('exception'));
}
}
}