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; }
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'); }
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'); } }
/** * {@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(); }
/** * 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); }
/** * 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; }
/** * 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); }
/** * 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); }
/** * 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); }
/** * 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); }
/** * 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; }
/** * 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; }
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'); } } }
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'); } }
/** * {@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(); }
/** * 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("/")); }
/** * 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; }
/** * 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; } } }
/** * 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; } } } }
$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()); }
/** * 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); }
$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');
/** * 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; }
/** * 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'); }
/** * 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; } } }
/** * 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}"); } }
/** * 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); }
/** * 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}"); } }
/** * 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; }