示例#1
0
function jpatchwork_page_handler($page)
{
    if (!isset($page[0])) {
        $page[0] = 'sample';
    }
    elgg_set_context('jpatchwork');
    $page_type = $page[0];
    switch ($page_type) {
        case 'sample':
            $area2 = elgg_view_title(elgg_echo('jpatchwork:sample_title'));
            // Add the form to this section
            elgg_set_viewtype('xml');
            $area2 .= elgg_view('jpatchwork/sample');
            elgg_set_viewtype('default');
            break;
        case 'frozenbubble':
            $area2 = elgg_view_title(elgg_echo('jpatchwork:frozenbubble_title'));
            // Add the form to this section
            elgg_set_viewtype('xml');
            $area2 .= elgg_view('jpatchwork/frozenbubble');
            elgg_set_viewtype('default');
            break;
        default:
            return false;
    }
    // Format page
    $body = elgg_view('page/layouts/one_sidebar', array('content' => $area2));
    // Draw it
    echo elgg_view_page(elgg_echo('jpatchwork:title'), $body);
    return true;
}
示例#2
0
function mobilize_init()
{
    $action_path = dirname(__FILE__) . '/actions';
    elgg_register_action("mobilize/admin/settings", "{$action_path}/settings.php", 'admin');
    elgg_register_admin_menu_item('configure', 'mobilize', 'settings');
    elgg_extend_view('css/admin', 'mobilize/admin');
    elgg_register_page_handler('about', 'mobilize_expages_page_handler');
    elgg_register_page_handler('terms', 'mobilize_expages_page_handler');
    elgg_register_page_handler('privacy', 'mobilize_expages_page_handler');
    elgg_register_css('elgg.mobilize', '/css/mobilize.css');
    detectmobile();
    $mobile = detectmobile();
    $mobile = true;
    if ($mobile == true) {
        elgg_set_viewtype('mobile');
        elgg_register_plugin_hook_handler('index', 'system', 'index_handler');
        elgg_extend_view('js/elgg', 'js/mobilize');
        elgg_register_page_handler('dashboard', 'dashboard_page_handler');
        if (elgg_get_plugin_setting('use_friendspicker', 'mobilize') == 'yes') {
            elgg_unregister_js('elgg.friendspicker');
        }
        elgg_unregister_js('elgg.tinymce');
        elgg_extend_view('page/elements/head', 'mobilize/meta', 1);
        elgg_register_js('mobilize', 'mod/mobilize/vendors/js/mobilize.js', 'footer');
        elgg_load_js('mobilize');
        elgg_register_event_handler('pagesetup', 'system', 'mobilize_setup_handler', 1000);
    }
    elgg_register_viewtype_fallback('mobile');
    elgg_unregister_js("elgg.map");
    elgg_register_js('elgg.map', 'mod/mobilize/views/mobile/js/map.js', 'footer');
    elgg_load_js('elgg.map');
    elgg_unregister_js("elgg.touch");
    elgg_register_js('elgg.touch', 'mod/mobilize/views/mobile/js/jquery.ui.touch-punch.min.js', 'footer');
    elgg_load_js('elgg.touch');
}
示例#3
0
function check_mobile_mode()
{
    global $IS_FROM_APP;
    setcookie("51zhaohu_app", "true", time() + 3600);
    if ($_COOKIE['51zhaohu_app']) {
        $IS_FROM_APP = true;
    }
    if ($_COOKIE['51zh_desktop']) {
        elgg_set_viewtype('default');
        return;
    }
    if ($_COOKIE['51zh_mobile']) {
        elgg_set_viewtype('mobile');
        return;
    }
    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
    //detect if there is a mobile device
    if (preg_match('/phone|iphone|itouch|ipod|symbian|android|htc_|htc-|palmos|blackberry|opera mini|iemobile|windows ce|nokia|fennec|hiptop|kindle|mot |mot-|webos\\/|samsung|sonyericsson|^sie-|nintendo/', $useragent) || preg_match('/mobile|pda;|avantgo|eudoraweb|minimo|netfront|brew|teleca|lg;|lge |wap;| wap /', $useragent && !strstr($useragent, 'ipad'))) {
        //the hack to hide mobile view is below
        elgg_set_viewtype('mobile');
        //elgg_set_viewtype('default');
    } else {
        elgg_set_viewtype('default');
    }
}
示例#4
0
 /**
  * {@inheritdoc}
  */
 protected function handle()
 {
     $uri = '/' . ltrim($this->argument('uri'), '/');
     $method = $this->argument('method') ?: 'GET';
     $add_csrf_tokens = $this->option('tokens');
     $site_url = elgg_get_site_url();
     $uri = substr(elgg_normalize_url($uri), strlen($site_url));
     $path_key = Application::GET_PATH_KEY;
     $parameters = [];
     $query = trim((string) $this->option('query'), '?');
     parse_str($query, $parameters);
     if ($add_csrf_tokens) {
         $ts = time();
         $parameters['__elgg_ts'] = $ts;
         $parameters['__elgg_token'] = _elgg_services()->actions->generateActionToken($ts);
     }
     $request = Request::create("?{$path_key}=" . urlencode($uri), $method, $parameters);
     $cookie_name = _elgg_services()->config->getCookieConfig()['session']['name'];
     $session_id = _elgg_services()->session->getId();
     $request->cookies->set($cookie_name, $session_id);
     $request->headers->set('Referer', elgg_normalize_url());
     if ($this->option('export')) {
         elgg_set_viewtype('json');
         $request->headers->set('X-Elgg-Ajax-API', '2');
     }
     _elgg_services()->setValue('request', $request);
     Application::index();
 }
示例#5
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     $this->isAction = $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     register_translations(dirname(__FILE__) . '/languages/', TRUE);
 }
示例#6
0
文件: start.php 项目: elgg/opensearch
/**
 * Handles OpenSearch requests
 *
 * @param array $page An array of URL elements
 * @return bool
 */
function opensearch_handler($page)
{
    switch ($page[0]) {
        case 'osd.xml':
            elgg_set_viewtype('xml');
            echo elgg_view_page('', elgg_view('opensearch/description'));
            return true;
            break;
    }
    return false;
}
示例#7
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     $this->isAction = isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     _elgg_services()->setValue('session', new ElggSession(new Elgg\Http\MockSessionStorage()));
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     register_translations("{$this->getElggRoot()}/install/languages/", TRUE);
 }
示例#8
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     // load ElggRewriteTester as we depend on it
     require_once dirname(__FILE__) . "/ElggRewriteTester.php";
     $this->isAction = $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     register_translations(dirname(__FILE__) . '/languages/', TRUE);
 }
示例#9
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     // load ElggRewriteTester as we depend on it
     require_once dirname(__FILE__) . "/ElggRewriteTester.php";
     $this->isAction = isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     _elgg_services()->setValue('session', new ElggSession(new Elgg_Http_MockSessionStorage()));
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     register_translations(dirname(__FILE__) . '/languages/', TRUE);
 }
示例#10
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     global $CONFIG;
     if (!isset($CONFIG)) {
         $CONFIG = new stdClass();
     }
     $this->CONFIG = $CONFIG;
     $this->isAction = isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     _elgg_services()->setValue('session', \ElggSession::getMock());
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     _elgg_services()->translator->registerTranslations("{$this->getElggRoot()}/install/languages/", TRUE);
 }
示例#11
0
 /**
  * Handles scraper pages
  *
  * @param array $segments URL segments
  * @return bool
  */
 public static function serveScraperPages($segments)
 {
     $url = get_input('url');
     if (!elgg_is_logged_in()) {
         $m = get_input('m');
         if (!$m || !elgg_build_hmac($url)->matchesToken($m)) {
             return false;
         }
     }
     $viewtype = array_shift($segments);
     if (!$viewtype || !elgg_is_registered_viewtype($viewtype)) {
         $viewtype = 'default';
     }
     elgg_set_viewtype($viewtype);
     echo elgg_view_resource('scraper/card', ['href' => $url, 'iframe' => get_input('iframe', false)]);
     return true;
 }
示例#12
0
/**
 * Handles TinCan pages
 *
 * @param array  $segments   URL segments
 * @param string $identifier Page ID
 * @return boolean
 */
function page_handler($segments, $identifier)
{
    $page = elgg_extract(0, $segments);
    switch ($page) {
        case 'verbs':
            elgg_set_viewtype('json');
            set_input('verb', $segments[1]);
            echo elgg_view('resources/tincan/verbs');
            return true;
        case 'activities':
            elgg_set_viewtype('json');
            set_input('activity', $segments[1]);
            echo elgg_view('resources/tincan/activities');
            return true;
    }
    return false;
}
示例#13
0
function mobile_detect()
{
    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
    //detect if there is a mobile device
    if (preg_match('/phone|iphone|itouch|ipod|symbian|android|htc_|htc-|palmos|blackberry|opera mini|iemobile|windows ce|nokia|fennec|hiptop|kindle|mot |mot-|webos\\/|samsung|sonyericsson|^sie-|nintendo/', $useragent) || preg_match('/mobile|pda;|avantgo|eudoraweb|minimo|netfront|brew|teleca|lg;|lge |wap;| wap /', $useragent && !strstr($useragent, 'ipad'))) {
        $mobile = true;
    } else {
        $mobile = false;
    }
    //if there is a mobile device
    if ($mobile == true) {
        if ($_SESSION['view_desktop']) {
            elgg_extend_view('page/elements/head', 'mobile/desktop');
        } else {
            elgg_set_viewtype('mobile');
        }
    }
}
示例#14
0
function zhaohu_theme_init()
{
    // check mobile view
    check_mobile_mode();
    // include css files of this mod
    elgg_extend_view('css/elgg', 'zhaohu_theme/css');
    elgg_register_css('elgg.mobile', '/css/mobile.css');
    elgg_register_css('elgg.mobilize', '/css/mobilize.css');
    elgg_register_action("zhaohu/switch_view", dirname(__FILE__) . "/actions/zhaohu/switch_view.php", "public");
    if (elgg_get_viewtype() == "mobile") {
        zhaohu_mobile_theme_init();
    } else {
        // TODO: this needs to be changed to zhaohu_desktop_theme_init() after development is done.
        // 		zhaohu_mobile_theme_init();
        // 		elgg_set_viewtype('mobile');
        //      Real code
        zhaohu_desktop_theme_init();
        elgg_set_viewtype('default');
    }
}
示例#15
0
 /**
  * {@inheritdoc}
  */
 protected function handle()
 {
     $action = trim($this->argument('action_name'), '/');
     $path_key = Application::GET_PATH_KEY;
     $uri = "action/{$action}";
     $parameters = [];
     $query = trim((string) $this->option('query'), '?');
     parse_str($query, $parameters);
     $ts = time();
     $parameters['__elgg_ts'] = $ts;
     $parameters['__elgg_token'] = _elgg_services()->actions->generateActionToken($ts);
     $request = Request::create("?{$path_key}=" . urlencode($uri), 'POST', $parameters);
     $cookie_name = _elgg_services()->config->getCookieConfig()['session']['name'];
     $session_id = _elgg_services()->session->getId();
     $request->cookies->set($cookie_name, $session_id);
     $request->headers->set('Referer', elgg_normalize_url('cli'));
     $request->headers->set('X-Elgg-Ajax-API', 2);
     elgg_set_viewtype('json');
     _elgg_services()->setValue('request', $request);
     Application::index();
 }
示例#16
0
 /**
  * Constructor bootstraps the Elgg engine
  */
 public function __construct()
 {
     global $CONFIG;
     if (!isset($CONFIG)) {
         $CONFIG = new stdClass();
     }
     global $_ELGG;
     if (!isset($_ELGG)) {
         $_ELGG = new stdClass();
     }
     $this->CONFIG = $CONFIG;
     $this->isAction = isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST';
     $this->bootstrapConfig();
     $this->bootstrapEngine();
     _elgg_services()->setValue('session', \ElggSession::getMock());
     elgg_set_viewtype('installation');
     set_error_handler('_elgg_php_error_handler');
     set_exception_handler('_elgg_php_exception_handler');
     _elgg_services()->config->set('simplecache_enabled', false);
     _elgg_services()->translator->registerTranslations(\Elgg\Application::elggDir()->getPath("/install/languages/"), TRUE);
     _elgg_services()->views->registerPluginViews(\Elgg\Application::elggDir()->getPath("/"));
 }
示例#17
0
 /**
  * Categories page handler
  *
  * /categories/all/[<container_guid>]
  * /categories/manage/<container_guid>
  * /categories/view/<guid>
  * /categories/group/<group_guid>/<guid>
  *
  * @param array $page URL segments
  * @return bool
  */
 public function handlePages($page)
 {
     switch ($page[0]) {
         default:
         case 'all':
             if (isset($page[1])) {
                 set_input('container_guid', $page[1]);
             }
             echo elgg_view('resources/categories/all');
             return true;
         case 'manage':
             set_input('container_guid', $page[1]);
             echo elgg_view('resources/categories/manage');
             return true;
         case 'view':
             set_input('guid', $page[1]);
             echo elgg_view('resources/categories/view');
             return true;
         case 'group':
             if (isset($page[2])) {
                 forward($this->normalize(array('view', $page[2])));
             } else {
                 forward($this->normalize(array('all', $page[1])));
             }
             break;
         case 'json':
             elgg_set_viewtype('json');
             switch ($page[1]) {
                 case 'nodes':
                     echo elgg_view('resources/categories/nodes');
                     return true;
             }
             break;
     }
     return false;
 }
示例#18
0
/**
 * Services handler - turns request over to the registered handler
 * If no handler is found, this returns a 404 error
 *
 * @param string $handler Handler name
 * @param array  $request Request string
 *
 * @return void
 * @access private
 */
function service_handler($handler, $request)
{
    global $CONFIG;
    elgg_set_context('api');
    $request = explode('/', $request);
    // after the handler, the first identifier is response format
    // ex) http://example.org/services/api/rest/json/?method=test
    $response_format = array_shift($request);
    if (!$response_format) {
        $response_format = 'json';
    }
    if (!ctype_alpha($response_format)) {
        header("HTTP/1.0 400 Bad Request");
        header("Content-type: text/plain");
        echo "Invalid format.";
        exit;
    }
    elgg_set_viewtype($response_format);
    if (!isset($CONFIG->servicehandler) || empty($handler)) {
        // no handlers set or bad url
        header("HTTP/1.0 404 Not Found");
        exit;
    } else {
        if (isset($CONFIG->servicehandler[$handler]) && is_callable($CONFIG->servicehandler[$handler])) {
            $function = $CONFIG->servicehandler[$handler];
            call_user_func($function, $request, $handler);
        } else {
            // no handler for this web service
            header("HTTP/1.0 404 Not Found");
            exit;
        }
    }
}
示例#19
0
/**
 * Exports attributes generated on the fly (volatile) about an entity.
 *
 * @param string $hook        volatile
 * @param string $entity_type metadata
 * @param string $returnvalue Return value from previous hook
 * @param array  $params      The parameters, passed 'guid' and 'varname'
 *
 * @return void
 * @elgg_plugin_hook_handler volatile metadata
 * @todo investigate more.
 * @access private
 * @todo document
 */
function volatile_data_export_plugin_hook($hook, $entity_type, $returnvalue, $params)
{
    $guid = (int) $params['guid'];
    $variable_name = sanitise_string($params['varname']);
    if ($hook == 'volatile' && $entity_type == 'metadata') {
        if ($guid && $variable_name) {
            switch ($variable_name) {
                case 'renderedentity':
                    elgg_set_viewtype('default');
                    $view = elgg_view_entity(get_entity($guid));
                    elgg_set_viewtype();
                    $tmp = new ElggMetadata();
                    $tmp->type = 'volatile';
                    $tmp->name = 'renderedentity';
                    $tmp->value = $view;
                    $tmp->entity_guid = $guid;
                    return $tmp;
                    break;
            }
        }
    }
}
示例#20
0
$type = $matches[1];
$viewtype = $matches[2];
$view = $matches[3];
switch ($type) {
    case 'css':
        header("Content-type: text/css", true);
        header('Expires: ' . date('r', strtotime("+6 months")), true);
        header("Pragma: public", true);
        header("Cache-Control: public", true);
        $view = "css/{$view}";
        break;
    case 'js':
        header('Content-type: text/javascript', true);
        header('Expires: ' . date('r', strtotime("+6 months")), true);
        header("Pragma: public", true);
        header("Cache-Control: public", true);
        $view = "js/{$view}";
        break;
}
$filename = $dataroot . 'views_simplecache/' . md5($viewtype . $view);
if (file_exists($filename)) {
    $contents = file_get_contents($filename);
} else {
    // someone trying to access a non-cached file or a race condition with cache flushing
    mysql_close($mysql_dblink);
    require_once dirname(dirname(__FILE__)) . "/start.php";
    elgg_regenerate_simplecache();
    elgg_set_viewtype($viewtype);
    $contents = elgg_view($view);
}
echo $contents;
 public function testElggSetViewtype()
 {
     $this->assertTrue(elgg_set_viewtype('test'));
     $this->assertEquals('test', elgg_get_viewtype());
 }
示例#22
0
文件: CacheHandler.php 项目: n8b/VMN
 /**
  * Render a view for caching
  *
  * @param string $view     The view name
  * @param string $viewtype The viewtype
  * @return string
  */
 protected function renderView($view, $viewtype)
 {
     elgg_set_viewtype($viewtype);
     if (!elgg_view_exists($view)) {
         $this->send403();
     }
     // disable error reporting so we don't cache problems
     _elgg_services()->config->set('debug', null);
     // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and
     // triggers an event if it's not. Calling elgg_view() here breaks submenus
     // (at least) because the page setup hook is called before any
     // contexts can be correctly set (since this is called before page_handler()).
     // To avoid this, lie about $CONFIG->pagehandlerdone to force
     // the trigger correctly when the first view is actually being output.
     _elgg_services()->config->set('pagesetupdone', true);
     return elgg_view($view);
 }
示例#23
0
        $msg = "Could not load {$file}";
        throw new InstallationException($msg);
    }
}
// include subsite manager
require_once dirname(dirname(__FILE__)) . "/mod/subsite_manager/system.php";
// Connect to database, load language files, load configuration, init session
// Plugins can't use this event because they haven't been loaded yet.
elgg_trigger_event('boot', 'system');
// needs to be set for links in html head
$viewtype = get_input('view', 'default');
$site_guid = elgg_get_site_entity()->getGUID();
// Subsite Manager - simple cache prefix
$lastcached = datalist_get("sc_lastcached_" . $viewtype . "_" . $site_guid);
$CONFIG->lastcache = $lastcached;
// Load the plugins that are active
elgg_load_plugins();
// @todo move loading plugins into a single boot function that replaces 'boot', 'system' event
// and then move this code in there.
// This validates the view type - first opportunity to do it is after plugins load.
$view_type = elgg_get_viewtype();
if (!elgg_is_valid_view_type($view_type)) {
    elgg_set_viewtype('default');
}
// @todo deprecate as plugins can use 'init', 'system' event
elgg_trigger_event('plugins_boot', 'system');
// Complete the boot process for both engine and plugins
elgg_trigger_event('init', 'system');
$CONFIG->boot_complete = true;
// System loaded and ready
elgg_trigger_event('ready', 'system');
示例#24
0
/**
 * Handles calendar pages
 * /calendar/view[/<guid>]       View a calendar (if guid is a user or group, displays their public calendar)
 * /calendar/owner/<username>    List all user calendars
 * /calendar/friends/<username>  List all friend calendars
 * /calendar/group/<guid>        List all group calendars
 * /calendar/feed/<guid>         View an events feed for a given calendar
 *                               Query elements:
 *                                 ?start=<start_timestamp>
 *                                 &end=<end_timestamp>
 *                                 [&view=<json|ical>]
 * /calendar/ical/<guid>[/<filename>] Calendar's iCal feed
 *                               Query elements:
 *                                 ?start=<start_timestamp>
 *                                 &end=<end_timestamp>
 * /calendar/events				 Reroute to {@see event_page_handler()}
 *
 * @param array $page URL segments
 * @return boolean
 */
function page_handler($page)
{
    elgg_load_css('events-ui');
    elgg_load_css('jquery-ui');
    elgg_load_css('fullcalendar');
    elgg_load_js('fullcalendar');
    elgg_load_js('events-ui');
    elgg_load_js('events/timezone');
    elgg_load_js('jquery.form');
    elgg_load_js('moment.js');
    elgg_load_css('lightbox');
    elgg_load_js('lightbox');
    switch ($page[0]) {
        case 'site':
            $site_calendar = elgg_get_plugin_setting('sitecalendar', 'events_ui');
            if (!$site_calendar) {
                return false;
            }
            set_input('guid', elgg_get_site_entity()->guid);
            $page_view = elgg_view('resources/calendar/view');
            break;
        case 'all':
            $page_view = elgg_view('resources/calendar/all');
            break;
        default:
        case 'view':
            set_input('guid', $page[1]);
            $page_view = elgg_view('resources/calendar/view');
            break;
        case 'owner':
            set_input('username', $page[1]);
            $page_view = elgg_view('resources/calendar/owner');
            break;
        case 'friends':
            set_input('username', $page[1]);
            $page_view = elgg_view('resources/calendar/friends');
            break;
        case 'group':
            set_input('container_guid', $page[1]);
            $page_view = elgg_view('resources/calendar/group');
            break;
        case 'add':
            set_input('container_guid', $page[1]);
            $page_view = elgg_view('resources/calendar/add');
            break;
        case 'edit':
            set_input('guid', $page[1]);
            $page_view = elgg_view('resources/calendar/edit');
            break;
        case 'feed':
            set_input('guid', $page[1]);
            $page_view = elgg_view('resources/calendar/feed');
            break;
        case 'ical':
            set_input('guid', $page[1]);
            set_input('filename', $page[2]);
            elgg_set_viewtype('ical');
            $page_view = elgg_view('resources/calendar/feed');
            break;
        case 'timezones':
            set_input('country', $page[1]);
            elgg_set_viewtype('json');
            $page_view = elgg_view('resources/calendar/timezones');
            break;
        case 'settings':
            elgg_set_context('settings');
            set_input('username', $page[1]);
            $page_view = elgg_view('resources/calendar/settings');
            break;
        case 'events':
            return event_pagehandler(array_slice($page, 1));
    }
    if (isset($page_view)) {
        echo $page_view;
        return true;
    }
    return false;
}
示例#25
0
 /**
  * Bootstrap the Elgg engine, loads plugins, and calls initial system events
  *
  * This method loads the full Elgg engine, checks the installation
  * state, and triggers a series of events to finish booting Elgg:
  * 	- {@elgg_event boot system}
  * 	- {@elgg_event init system}
  * 	- {@elgg_event ready system}
  *
  * If Elgg is not fully installed, the browser will be redirected to an installation page.
  *
  * @return void
  */
 public function bootCore()
 {
     $config = $this->services->config;
     if ($config->getVolatile('boot_complete')) {
         return;
     }
     $this->loadSettings();
     $config->set('boot_complete', false);
     // This will be overridden by the DB value but may be needed before the upgrade script can be run.
     $config->set('default_limit', 10);
     // in case not loaded already
     $this->loadCore();
     $events = $this->services->events;
     // Connect to database, load language files, load configuration, init session
     // Plugins can't use this event because they haven't been loaded yet.
     $events->trigger('boot', 'system');
     // Load the plugins that are active
     $this->services->plugins->load();
     if (Directory\Local::root()->getPath() != self::elggDir()->getPath()) {
         // Elgg is installed as a composer dep, so try to treat the root directory
         // as a custom plugin that is always loaded last and can't be disabled...
         if (!elgg_get_config('system_cache_loaded')) {
             $viewsFile = Directory\Local::root()->getFile('views.php');
             if ($viewsFile->exists()) {
                 $viewsSpec = $viewsFile->includeFile();
                 if (is_array($viewsSpec)) {
                     _elgg_services()->views->mergeViewsSpec($viewsSpec);
                 }
             }
             _elgg_services()->views->registerPluginViews(Directory\Local::root()->getPath());
         }
         if (!elgg_get_config('i18n_loaded_from_cache')) {
             _elgg_services()->translator->registerPluginTranslations(Directory\Local::root()->getPath());
         }
         // This is root directory start.php, not elgg/engine/start.php
         @(include_once Directory\Local::root()->getPath("start.php"));
     }
     // @todo move loading plugins into a single boot function that replaces 'boot', 'system' event
     // and then move this code in there.
     // This validates the view type - first opportunity to do it is after plugins load.
     $viewtype = elgg_get_viewtype();
     if (!elgg_is_registered_viewtype($viewtype)) {
         elgg_set_viewtype('default');
     }
     // @todo deprecate as plugins can use 'init', 'system' event
     $events->trigger('plugins_boot', 'system');
     // Complete the boot process for both engine and plugins
     $events->trigger('init', 'system');
     $config->set('boot_complete', true);
     // System loaded and ready
     $events->trigger('ready', 'system');
 }
示例#26
0
/**
 * Services handler - turns request over to the registered handler
 * If no handler is found, this returns a 404 error
 *
 * @param string $handler Handler name
 * @param array  $request Request string
 *
 * @return void
 * @access private
 */
function service_handler($handler, $request)
{
    global $CONFIG;
    elgg_set_context('api');
    $request = explode('/', $request);
    // after the handler, the first identifier is response format
    // ex) http://example.org/services/api/rest/json/?method=test
    $response_format = array_shift($request);
    // Which view - xml, json, ...
    if ($response_format && elgg_is_valid_view_type($response_format)) {
        elgg_set_viewtype($response_format);
    } else {
        // default to json
        elgg_set_viewtype("json");
    }
    if (!isset($CONFIG->servicehandler) || empty($handler)) {
        // no handlers set or bad url
        header("HTTP/1.0 404 Not Found");
        exit;
    } else {
        if (isset($CONFIG->servicehandler[$handler]) && is_callable($CONFIG->servicehandler[$handler])) {
            $function = $CONFIG->servicehandler[$handler];
            call_user_func($function, $request, $handler);
        } else {
            // no handler for this web service
            header("HTTP/1.0 404 Not Found");
            exit;
        }
    }
}
示例#27
0
文件: elgglib.php 项目: n8b/VMN
/**
 * Intercepts, logs, and displays uncaught exceptions.
 *
 * To use a viewtype other than failsafe, create the views:
 *  <viewtype>/messages/exceptions/admin_exception
 *  <viewtype>/messages/exceptions/exception
 * See the json viewtype for an example.
 *
 * @warning This function should never be called directly.
 *
 * @see http://www.php.net/set-exception-handler
 *
 * @param Exception $exception The exception being handled
 *
 * @return void
 * @access private
 */
function _elgg_php_exception_handler($exception)
{
    $timestamp = time();
    error_log("Exception #{$timestamp}: {$exception}");
    // Wipe any existing output buffer
    ob_end_clean();
    // make sure the error isn't cached
    header("Cache-Control: no-cache, must-revalidate", true);
    header('Expires: Fri, 05 Feb 1982 00:00:00 -0500', true);
    // we don't want the 'pagesetup', 'system' event to fire
    global $CONFIG;
    $CONFIG->pagesetupdone = true;
    try {
        // allow custom scripts to trigger on exception
        // $CONFIG->exception_include can be set locally in settings.php
        // value should be a system path to a file to include
        if (!empty($CONFIG->exception_include) && is_file($CONFIG->exception_include)) {
            ob_start();
            include $CONFIG->exception_include;
            $exception_output = ob_get_clean();
            // if content is returned from the custom handler we will output
            // that instead of our default failsafe view
            if (!empty($exception_output)) {
                echo $exception_output;
                exit;
            }
        }
        if (elgg_is_xhr()) {
            elgg_set_viewtype('json');
            $response = new \Symfony\Component\HttpFoundation\JsonResponse(null, 500);
        } else {
            elgg_set_viewtype('failsafe');
            $response = new \Symfony\Component\HttpFoundation\Response('', 500);
        }
        if (elgg_is_admin_logged_in()) {
            $body = elgg_view("messages/exceptions/admin_exception", array('object' => $exception, 'ts' => $timestamp));
        } else {
            $body = elgg_view("messages/exceptions/exception", array('object' => $exception, 'ts' => $timestamp));
        }
        $response->setContent(elgg_view_page(elgg_echo('exception:title'), $body));
        $response->send();
    } catch (Exception $e) {
        $timestamp = time();
        $message = $e->getMessage();
        echo "Fatal error in exception handler. Check log for Exception #{$timestamp}";
        error_log("Exception #{$timestamp} : fatal error in exception handler : {$message}");
    }
}
示例#28
0
/**
 * Regenerates the simple cache.
 *
 * @warning This does not invalidate the cache, but actively resets it.
 *
 * @param string $viewtype Optional viewtype to regenerate
 *
 * @return void
 * @see elgg_register_simplecache_view()
 * @since 1.8.0
 */
function elgg_regenerate_simplecache($viewtype = NULL)
{
    global $CONFIG;
    if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) {
        return;
    }
    $lastcached = time();
    // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and
    // triggers an event if it's not. Calling elgg_view() here breaks submenus
    // (at least) because the page setup hook is called before any
    // contexts can be correctly set (since this is called before page_handler()).
    // To avoid this, lie about $CONFIG->pagehandlerdone to force
    // the trigger correctly when the first view is actually being output.
    $CONFIG->pagesetupdone = TRUE;
    if (!file_exists($CONFIG->dataroot . 'views_simplecache')) {
        mkdir($CONFIG->dataroot . 'views_simplecache');
    }
    if (isset($viewtype)) {
        $viewtypes = array($viewtype);
    } else {
        $viewtypes = $CONFIG->view_types;
    }
    $original_viewtype = elgg_get_viewtype();
    // disable error reporting so we don't cache problems
    $old_debug = elgg_get_config('debug');
    elgg_set_config('debug', null);
    foreach ($viewtypes as $viewtype) {
        elgg_set_viewtype($viewtype);
        foreach ($CONFIG->views->simplecache as $view) {
            $viewcontents = elgg_view($view);
            $viewname = md5(elgg_get_viewtype() . $view);
            if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) {
                fwrite($handle, $viewcontents);
                fclose($handle);
            }
        }
        datalist_set("simplecache_lastupdate_{$viewtype}", $lastcached);
        datalist_set("simplecache_lastcached_{$viewtype}", $lastcached);
    }
    elgg_set_config('debug', $old_debug);
    elgg_set_viewtype($original_viewtype);
    // needs to be set for links in html head
    $CONFIG->lastcache = $lastcached;
    unset($CONFIG->pagesetupdone);
}
示例#29
0
文件: elgglib.php 项目: nhunaro/Elgg
/**
 * Intercepts, logs, and displays uncaught exceptions.
 *
 * @warning This function should never be called directly.
 *
 * @see http://www.php.net/set-exception-handler
 *
 * @param Exception $exception The exception being handled
 *
 * @return void
 * @access private
 */
function _elgg_php_exception_handler($exception)
{
    $timestamp = time();
    error_log("Exception #{$timestamp}: {$exception}");
    // Wipe any existing output buffer
    ob_end_clean();
    // make sure the error isn't cached
    header("Cache-Control: no-cache, must-revalidate", true);
    header('Expires: Fri, 05 Feb 1982 00:00:00 -0500', true);
    // @note Do not send a 500 header because it is not a server error
    try {
        // we don't want the 'pagesetup', 'system' event to fire
        global $CONFIG;
        $CONFIG->pagesetupdone = true;
        elgg_set_viewtype('failsafe');
        if (elgg_is_admin_logged_in()) {
            $body = elgg_view("messages/exceptions/admin_exception", array('object' => $exception, 'ts' => $timestamp));
        } else {
            $body = elgg_view("messages/exceptions/exception", array('object' => $exception, 'ts' => $timestamp));
        }
        echo elgg_view_page(elgg_echo('exception:title'), $body);
    } catch (Exception $e) {
        $timestamp = time();
        $message = $e->getMessage();
        echo "Fatal error in exception handler. Check log for Exception #{$timestamp}";
        error_log("Exception #{$timestamp} : fatal error in exception handler : {$message}");
    }
}
示例#30
0
 /**
  * Export this class into an array of ODD Elements containing all necessary fields.
  * Override if you wish to return more information than can be found in
  * $this->attributes (shouldn't happen)
  *
  * @return array
  * @deprecated 1.9
  */
 public function export()
 {
     elgg_deprecated_notice(__METHOD__ . ' has been deprecated', 1.9);
     $tmp = array();
     // Generate uuid
     $uuid = guid_to_uuid($this->getGUID());
     // Create entity
     $odd = new ODDEntity($uuid, $this->attributes['type'], get_subtype_from_id($this->attributes['subtype']));
     $tmp[] = $odd;
     $exportable_values = $this->getExportableValues();
     // Now add its attributes
     foreach ($this->attributes as $k => $v) {
         $meta = null;
         if (in_array($k, $exportable_values)) {
             switch ($k) {
                 case 'guid':
                     // Dont use guid in OpenDD
                 // Dont use guid in OpenDD
                 case 'type':
                     // Type and subtype already taken care of
                 // Type and subtype already taken care of
                 case 'subtype':
                     break;
                 case 'time_created':
                     // Created = published
                     $odd->setAttribute('published', date("r", $v));
                     break;
                 case 'site_guid':
                     // Container
                     $k = 'site_uuid';
                     $v = guid_to_uuid($v);
                     $meta = new ODDMetaData($uuid . "attr/{$k}/", $uuid, $k, $v);
                     break;
                 case 'container_guid':
                     // Container
                     $k = 'container_uuid';
                     $v = guid_to_uuid($v);
                     $meta = new ODDMetaData($uuid . "attr/{$k}/", $uuid, $k, $v);
                     break;
                 case 'owner_guid':
                     // Convert owner guid to uuid, this will be stored in metadata
                     $k = 'owner_uuid';
                     $v = guid_to_uuid($v);
                     $meta = new ODDMetaData($uuid . "attr/{$k}/", $uuid, $k, $v);
                     break;
                 default:
                     $meta = new ODDMetaData($uuid . "attr/{$k}/", $uuid, $k, $v);
             }
             // set the time of any metadata created
             if ($meta) {
                 $meta->setAttribute('published', date("r", $this->time_created));
                 $tmp[] = $meta;
             }
         }
     }
     // Now we do something a bit special.
     /*
      * This provides a rendered view of the entity to foreign sites.
      */
     elgg_set_viewtype('default');
     $view = elgg_view_entity($this, array('full_view' => true));
     elgg_set_viewtype();
     $tmp[] = new ODDMetaData($uuid . "volatile/renderedentity/", $uuid, 'renderedentity', $view, 'volatile');
     return $tmp;
 }