Example #1
0
_sanitise_environment();
try {
    // load base files
    ctx_log_start("Opening files");
    $files = array_merge(zglob("core/*.php"), zglob("ext/{" . ENABLED_EXTS . "}/main.php"));
    foreach ($files as $filename) {
        require_once $filename;
    }
    ctx_log_endok();
    ctx_log_start("Connecting to DB");
    // connect to the database
    $database = new Database();
    $config = new DatabaseConfig($database);
    ctx_log_endok();
    // load the theme parts
    ctx_log_start("Loading themelets");
    foreach (_get_themelet_files(get_theme()) as $themelet) {
        require_once $themelet;
    }
    ctx_log_endok();
    _load_extensions();
    // start the page generation waterfall
    $page = class_exists("CustomPage") ? new CustomPage() : new Page();
    $user = _get_user();
    send_event(new InitExtEvent());
    if (!is_cli()) {
        // web request
        send_event(new PageRequestEvent(@$_GET["q"]));
        $page->display();
    } else {
        // command line request
Example #2
0
function _load_extensions()
{
    global $_event_listeners;
    ctx_log_start("Loading extensions");
    if (COMPILE_ELS && file_exists("data/cache/event_listeners.php")) {
        require_once "data/cache/event_listeners.php";
    } else {
        _set_event_listeners(get_declared_classes());
        if (COMPILE_ELS) {
            _dump_event_listeners($_event_listeners, data_path("cache/event_listeners.php"));
        }
    }
    ctx_log_endok();
}
Example #3
0
            if (preg_match("/themes\\/{$_theme}\\/(.*)\\.theme\\.php/", $filename, $m) && in_array("ext/{$m[1]}/theme.php", $themelets)) {
                require_once $filename;
            }
        }
    }
    ctx_log_endok();
    // initialise the extensions
    foreach (get_declared_classes() as $class) {
        if (is_subclass_of($class, "SimpleExtension")) {
            $c = new $class();
            $c->i_am($c);
            add_event_listener($c, $c->get_priority());
        }
    }
    ctx_log_endok("Initialisation");
    ctx_log_start("Page generation");
    // start the page generation waterfall
    $page = class_exists("CustomPage") ? new CustomPage() : new Page();
    $user = _get_user($config, $database);
    send_event(new InitExtEvent());
    send_event(_get_page_request());
    $page->display();
    ctx_log_endok("Page generation");
    $database->db->commit();
    _end_cache();
    ctx_log_endok();
} catch (Exception $e) {
    $version = VERSION;
    $message = $e->getMessage();
    //$trace = var_dump($e->getTrace());
    header("HTTP/1.0 500 Internal Error");
Example #4
0
 * There are four global variables which are pretty essential to most extensions:
 *
 * \li $config -- some variety of Config subclass
 * \li $database -- a Database object used to get raw SQL access
 * \li $page -- a Page to holds all the loose bits of extension output
 * \li $user -- the currently logged in User
 *
 * Each of these can be imported at the start of a function with eg "global $page, $user;"
 */
if (!file_exists("data/config/shimmie.conf.php")) {
    header("Location: install.php");
    exit;
}
try {
    require_once "core/_bootstrap.inc.php";
    ctx_log_start(@$_SERVER["REQUEST_URI"], true, true);
    // start the page generation waterfall
    $user = _get_user();
    if (PHP_SAPI === 'cli') {
        send_event(new CommandEvent($argv));
    } else {
        send_event(new PageRequestEvent(_get_query()));
        $page->display();
    }
    // saving cache data and profiling data to disk can happen later
    if (function_exists("fastcgi_finish_request")) {
        fastcgi_finish_request();
    }
    $database->commit();
    ctx_log_endok();
} catch (Exception $e) {
Example #5
0
/**
 * Send an event to all registered Extensions
 */
function send_event(Event $event)
{
    global $_event_listeners, $_event_count;
    ctx_log_start(get_class($event));
    $my_event_listeners = $_event_listeners;
    // http://bugs.php.net/bug.php?id=35106
    ksort($my_event_listeners);
    foreach ($my_event_listeners as $listener) {
        ctx_log_start(get_class($listener));
        $listener->receive_event($event);
        ctx_log_endok();
    }
    $_event_count++;
    ctx_log_endok();
}
Example #6
0
/**
 * Send an event to all registered Extensions.
 *
 * @param Event $event
 */
function send_event(Event $event)
{
    global $_shm_event_listeners, $_shm_event_count;
    if (!isset($_shm_event_listeners[get_class($event)])) {
        return;
    }
    $method_name = "on" . str_replace("Event", "", get_class($event));
    // send_event() is performance sensitive, and with the number
    // of times context gets called the time starts to add up
    $ctx = constant('CONTEXT');
    if ($ctx) {
        ctx_log_start(get_class($event));
    }
    // SHIT: http://bugs.php.net/bug.php?id=35106
    $my_event_listeners = $_shm_event_listeners[get_class($event)];
    ksort($my_event_listeners);
    foreach ($my_event_listeners as $listener) {
        if ($ctx) {
            ctx_log_start(get_class($listener));
        }
        if (method_exists($listener, $method_name)) {
            $listener->{$method_name}($event);
        }
        if ($ctx) {
            ctx_log_endok();
        }
    }
    $_shm_event_count++;
    if ($ctx) {
        ctx_log_endok();
    }
}