/** * Serves pages for twitter. * * @param array $page * @return bool */ function twitter_api_pagehandler($page) { if (!isset($page[0])) { return false; } switch ($page[0]) { case 'authorize': twitter_api_authorize(); break; case 'revoke': twitter_api_revoke(); break; case 'forward': twitter_api_forward(); break; case 'login': twitter_api_login(); break; case 'interstitial': elgg_gatekeeper(); // only let twitter users do this. $guid = elgg_get_logged_in_user_guid(); $twitter_name = elgg_get_plugin_user_setting('twitter_name', $guid, 'twitter_api'); if (!$twitter_name) { register_error(elgg_echo('twitter_api:invalid_page')); forward(); } echo elgg_view_resource('twitter_api/interstitial'); break; default: return false; } return true; }
/** * Profile page handler * * @param array $page Array of URL segments passed by the page handling mechanism * @return bool */ function profile_page_handler($page) { if (isset($page[0])) { $username = $page[0]; $user = get_user_by_username($username); elgg_set_page_owner_guid($user->guid); } elseif (elgg_is_logged_in()) { forward(elgg_get_logged_in_user_entity()->getURL()); } // short circuit if invalid or banned username if (!$user || $user->isBanned() && !elgg_is_admin_logged_in()) { register_error(elgg_echo('profile:notfound')); forward(); } $action = NULL; if (isset($page[1])) { $action = $page[1]; } if ($action == 'edit') { // use the core profile edit page echo elgg_view_resource('profile/edit'); return true; } echo elgg_view_resource('profile/view', ['username' => $page[0]]); return true; }
/** * Messageboard dispatcher for flat message board. * Profile (and eventually group) widgets handle their own. * * URLs take the form of * User's messageboard: messageboard/owner/<username> * Y's history of posts on X's board: messageboard/owner/<X>/history/<Y> * New post: messageboard/add/<guid> (container: user or group) * Group messageboard: messageboard/group/<guid>/all (not implemented) * * @param array $page Array of page elements * @return bool */ function messageboard_page_handler($page) { $vars = []; switch ($page[0]) { case 'owner': //@todo if they have the widget disabled, don't allow this. $owner_name = elgg_extract(1, $page); $owner = get_user_by_username($owner_name); $vars['page_owner_guid'] = $owner->guid; $history = elgg_extract(2, $page); $username = elgg_extract(3, $page); if ($history && $username) { $vars['history_username'] = $username; } echo elgg_view_resource('messageboard/owner', $vars); break; case 'group': elgg_group_gatekeeper(); $owner_guid = elgg_extract(1, $page); $vars['page_owner_guid'] = $owner_guid; echo elgg_view_resource('messageboard/owner', $vars); break; default: return false; } return true; }
/** * Route page requests * * @param array $page Array of url parameters * @return bool */ function notifications_page_handler($page) { elgg_gatekeeper(); $current_user = elgg_get_logged_in_user_entity(); // default to personal notifications if (!isset($page[0])) { $page[0] = 'personal'; } if (!isset($page[1])) { forward("notifications/{$page[0]}/{$current_user->username}"); } set_input('username', $page[1]); // note: $user passed in switch ($page[0]) { case 'group': echo elgg_view_resource('notifications/groups'); break; case 'personal': echo elgg_view_resource('notifications/index'); break; default: return false; } return true; }
/** * Messageboard dispatcher for flat message board. * Profile (and eventually group) widgets handle their own. * * URLs take the form of * User's messageboard: messageboard/owner/<username> * Y's history of posts on X's board: messageboard/owner/<X>/history/<Y> * New post: messageboard/add/<guid> (container: user or group) * Group messageboard: messageboard/group/<guid>/all (not implemented) * * @param array $page Array of page elements * @return bool */ function messageboard_page_handler($page) { switch ($page[0]) { case 'owner': //@todo if they have the widget disabled, don't allow this. $owner_name = elgg_extract(1, $page); $owner = get_user_by_username($owner_name); set_input('page_owner_guid', $owner->guid); $history = elgg_extract(2, $page); $username = elgg_extract(3, $page); if ($history && $username) { set_input('history_username', $username); } echo elgg_view_resource('messageboard/owner'); break; case 'add': $container_guid = elgg_extract(1, $page); set_input('container_guid', $container_guid); echo elgg_view_resource('messageboard/add'); break; case 'group': elgg_group_gatekeeper(); $owner_guid = elgg_extract(1, $page); set_input('page_owner_guid', $owner_guid); echo elgg_view_resource('messageboard/owner'); break; default: return false; } return true; }
/** * User settings page handler * * @param array $segments URL segments * @return bool */ function user_settings_page_handler($segments) { elgg_gatekeeper(); $page = array_shift($segments); $username = array_shift($segments); if (!$page) { $page = 'user'; } if (!$username) { $user = elgg_get_logged_in_user_entity(); } else { $user = get_user_by_username($username); } if (!$user) { forward('', '404'); } if (!$user->canEdit()) { forward('', '403'); } elgg_set_page_owner_guid($user->guid); $resource = elgg_view_resource("settings/{$page}", array('username' => $user->username, 'entity' => $user, 'segments' => $segments)); if ($resource) { echo $resource; return true; } return false; }
/** * Listen to the blog page handler, to takeover some pages * * @param string $hook 'route' * @param string $type 'blog' * @param array $return_value the current page_handler params * @param null $params null * * @return void|false */ public static function blog($hook, $type, $return_value, $params) { $page = elgg_extract('segments', $return_value); if (empty($page)) { return; } $include_file = false; $resouce_loaded = false; $pages_path = elgg_get_plugins_path() . 'blog_tools/pages/'; switch ($page[0]) { case 'read': // Elgg 1.7 compatibility // Elgg 1.7 compatibility case 'view': set_input('guid', $page[1]); // to be used in the blog_tools/full/related view break; case 'featured': $resouce_loaded = true; echo elgg_view_resource('blog_tools/blog/featured'); break; } if (!empty($resouce_loaded)) { return false; } elseif (!empty($include_file)) { include $include_file; return false; } }
/** * Handle /file_tools URLs * * @param array $page URL segments * * @return bool */ public static function fileTools($page) { switch (elgg_extract(0, $page)) { case 'list': elgg_ajax_gatekeeper(); $params = []; elgg_set_page_owner_guid(elgg_extract(1, $page)); $folder_guid = get_input('folder_guid', false); if ($folder_guid !== false) { $params['folder_guid'] = (int) $folder_guid; $params['draw_page'] = false; } if (isset($page[2])) { $params['folder_guid'] = (int) $page[2]; } echo elgg_view_resource('file_tools/file/list', $params); return true; break; case 'folder': switch (elgg_extract(1, $page)) { case 'new': elgg_set_page_owner_guid(elgg_extract(2, $page)); echo elgg_view_resource('file_tools/folder/new'); return true; break; case 'edit': $params = ['folder_guid' => (int) elgg_extract(2, $page)]; echo elgg_view_resource('file_tools/folder/edit', $params); return true; break; } break; } return false; }
/** * Route editor pages * * @param string $hook "route" * @param string $type "notifications" * @param array $return Segments and identifier * @param array $params Hook params * @return array|false */ function notifications_editor_router($hook, $type, $return, $params) { $identifier = elgg_extract('identifier', $return); $segments = elgg_extract('segments', $return); if ($identifier == 'notifications' && $segments[0] == 'editor') { echo elgg_view_resource('notifications/editor', $return); return false; } }
/** * SEO page handler * /seo/edit * * @param array $segments URL segments * @return bool */ function seo_page_handler($segments) { $page = array_shift($segments); switch ($page) { case 'edit': echo elgg_view_resource('seo/edit'); return true; } return false; }
function page_handler(array $segments, $base) { switch ($segments[0]) { case 'hello': echo elgg_view_resource('react/hello'); return true; default: return false; } }
/** * Inits the plugin * * @return void */ function target_blank_init() { elgg_require_js('target_blank/target_blank'); // this cached view uses PHP to provide settings from database to javascript elgg_register_simplecache_view('js/target_blank/settings.js'); elgg_register_action('target_blank/settings/save', dirname(__FILE__) . '/actions/settings/save.php', 'admin'); elgg_register_page_handler('target_blank', function () { echo elgg_view_resource('target_blank/test'); }); }
/** * Entity tools page handler * * @param array $page url parts * * @return true|void */ function entity_tools_page_handler($page) { $supported = array_keys(entity_tools_get_supported_entity_types()); $subtype = elgg_extract(2, $page, $supported[0]); switch ($page[0]) { case 'owner': case 'group': echo elgg_view_resource('entity_tools/list', ['subtype' => $subtype]); return true; } }
/** * Reported content page handler * * Serves the add report page * * @param array $page Array of page routing elements * @return bool */ function reportedcontent_page_handler($page) { // only logged in users can report things elgg_gatekeeper(); if (elgg_extract(0, $page) === 'add' && elgg_is_xhr()) { echo elgg_view_resource('reportedcontent/add_form'); return true; } echo elgg_view_resource('reportedcontent/add'); return true; }
/** * Page handler for search * * @param array $page Page elements from core page handler * @return bool */ function search_page_handler($page) { // if there is no q set, we're being called from a legacy installation // it expects a search by tags. // actually it doesn't, but maybe it should. // maintain backward compatibility if (!get_input('q', get_input('tag', NULL))) { set_input('q', $page[0]); //set_input('search_type', 'tags'); } echo elgg_view_resource('search/index'); return true; }
/** * Feedback page handler * /feedback/all * /feedback/submit * * @param array $segments URL segments * @return bool */ function feedback_page_handler($segments) { $page = array_shift($segments); switch ($page) { case 'all': echo elgg_view_resource('feedback/all'); return true; case 'submit': echo elgg_view_resource('feedback/submit'); return true; } return false; }
/** * Entity media page handler * * @param array $segments URL segments * @param string $identifier Page identifier * @return bool */ function elgg_media_page_handler($segments, $identifier) { $guid = array_shift($segments); $section = array_shift($segments); switch ($section) { case 'edit': case 'upload': case 'crop': $type = array_shift($segments) ?: 'icon'; echo elgg_view_resource('media/edit', ['entity' => get_entity($guid), 'type' => $type]); break; } return false; }
/** * Handle /friend_request pages * * @param array $page the url segments * * @return bool */ public static function friendRequest($page) { if (isset($page[0])) { $username = $page[0]; } else { $user = elgg_get_logged_in_user_entity(); $username = $user->username; } if (!$username) { return false; } echo elgg_view_resource('friend_request', array('username' => $username)); return true; }
/** * Page handler * * /site_notifications/view/<username> * * @param array $segments URL segments * @return boolean */ function site_notifications_page_handler($segments) { elgg_gatekeeper(); if (!isset($segments[1])) { $segments[1] = elgg_get_logged_in_user_entity()->username; } $user = get_user_by_username($segments[1]); if (!$user) { return false; } elgg_set_page_owner_guid($user->guid); echo elgg_view_resource('site_notifications/view'); return true; }
/** * */ function h5p_page_handler($page) { switch ($page[0]) { case 'add': echo elgg_view_resource('h5p/save', array('guid' => $page[1], 'action' => $page[0])); break; case 'view': echo elgg_view_resource('h5p/view', array('guid' => $page[1])); break; default: echo elgg_view_resource('h5p/all'); break; } }
/** * Handle all /answers URLs * * @param array $page URL segments * * @return bool */ public static function answers($page) { elgg_push_breadcrumb(elgg_echo('questions'), 'questions/all'); $params = []; switch (elgg_extract(0, $page)) { case 'edit': $params['guid'] = (int) elgg_extract(1, $page); echo elgg_view_resource('answers/edit', $params); break; default: forward('questions/all'); return false; } return true; }
/** * Serves registration URLs as created by the registration_randomizer_login_menu() callback * * /register/:ts/:token Where :token is the token and :ts is the current timestamp. * * @param array $page */ function registration_randomizer_page_handler($page) { // tarpit if the wrong token + ts combo $ts = elgg_extract(0, $page); $token = elgg_extract(1, $page); if (!registration_randomizer_is_valid_token($token, $ts)) { registration_randomizer_log("Invalid token for registration page"); forward('/', 404); } else { echo elgg_view_resource('account/register'); return true; } registration_randomizer_log("No token for registration page"); forward('/', 404); }
/** * Extends thewire pagehandler with some extra pages * * @param string $hook_name 'route' * @param string $entity_type 'thewire' * @param bool $return the default return value * @param array $params supplied params * * @return bool */ public static function thewire($hook_name, $entity_type, $return, $params) { $page = elgg_extract('segments', $return); if (!isset($page[0])) { $page = ['all']; } switch ($page[0]) { case 'all': case 'owner': set_input('limit', get_input('limit', elgg_get_config('default_limit'))); return; case 'group': if (!empty($page[1])) { set_input('group_guid', $page[1]); // @todo is this still needed or replace with page_owner in page if (!empty($page[2])) { set_input('wire_username', $page[2]); // @todo is this still needed? } echo elgg_view_resource('thewire/group'); return false; } case 'tag': case 'search': if (isset($page[1])) { if ($page[0] == 'tag') { set_input('query', '#' . $page[1]); } else { set_input('query', $page[1]); } } echo elgg_view_resource('thewire/search'); return false; case 'autocomplete': echo elgg_view_resource('thewire/autocomplete'); return false; case 'thread': elgg_push_context('thewire_thread'); case 'reply': if (!empty($page[1])) { $entity = get_entity($page[1]); if (!empty($entity) && elgg_instanceof($entity->getContainerEntity(), 'group')) { elgg_set_page_owner_guid($entity->getContainerGUID()); } } break; } }
/** * Handles the ckeditor pages * * @param array $page requested page * * @return boolean */ function ckeditor_extended_page_handler($page) { switch ($page[0]) { case 'upload': echo elgg_view_resource('ckeditor_extended/upload', ['CKEditorFuncNum' => get_input('CKEditorFuncNum')]); return true; case 'browse': echo elgg_view_resource('ckeditor_extended/browse', ['CKEditorFuncNum' => get_input('CKEditorFuncNum')]); return true; case 'download': set_input('user_guid', $page[1]); set_input('file_name', $page[2]); include dirname(__FILE__) . '/pages/download.php'; return true; } }
/** * Page handler for generic comments manipulation. * * @param array $segments * @return bool * @access private */ function _elgg_comments_page_handler($segments) { $page = elgg_extract(0, $segments); switch ($page) { case 'edit': echo elgg_view_resource('comments/edit', ['guid' => elgg_extract(1, $segments)]); return true; break; case 'view': _elgg_comment_redirect(elgg_extract(1, $segments), elgg_extract(2, $segments)); break; default: return false; break; } }
/** * 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; }
function celebrations_page_handler($page) { if (!isset($page[0])) { return false; } $resource_vars = array(); switch ($page[0]) { case "celebrations": $resource_vars['month'] = elgg_extract(1, $page, date("n")); $resource_vars['filterid'] = elgg_extract(2, $page, 0); echo elgg_view_resource('celebrations/celebrations', $resource_vars); break; default: return false; } return true; }
/** * Page handler for activity * * @param array $segments URL segments * @return \Elgg\Http\ResponseBuilder * @access private */ function elgg_activity_page_handler($segments) { elgg_set_page_owner_guid(elgg_get_logged_in_user_guid()); // make a URL segment available in page handler script $page_type = elgg_extract(0, $segments, 'all'); $page_type = preg_replace('[\\W]', '', $page_type); if ($page_type == 'owner') { elgg_gatekeeper(); $page_username = elgg_extract(1, $segments, ''); if ($page_username == elgg_get_logged_in_user_entity()->username) { $page_type = 'mine'; } else { $vars['subject_username'] = $page_username; } } $vars['page_type'] = $page_type; return elgg_ok_response(elgg_view_resource("river", $vars)); }
/** * Messages page handler * * @param array $page Array of URL components for routing * @return bool */ function messages_page_handler($page) { $current_user = elgg_get_logged_in_user_entity(); if (!$current_user) { register_error(elgg_echo('noaccess')); elgg_get_session()->set('last_forward_from', current_page_url()); forward(''); } elgg_load_library('elgg:messages'); elgg_push_breadcrumb(elgg_echo('messages'), 'messages/inbox/' . $current_user->username); if (!isset($page[0])) { $page[0] = 'inbox'; } // Support the old inbox url /messages/<username>, but only if it matches the logged in user. // Otherwise having a username like "read" on the system could confuse this function. if ($current_user->username === $page[0]) { $page[1] = $page[0]; $page[0] = 'inbox'; } if (!isset($page[1])) { $page[1] = $current_user->username; } switch ($page[0]) { case 'inbox': set_input('username', $page[1]); echo elgg_view_resource('messages/inbox'); break; case 'sent': set_input('username', $page[1]); echo elgg_view_resource('messages/sent'); break; case 'read': set_input('guid', $page[1]); echo elgg_view_resource('messages/read'); break; case 'compose': case 'add': echo elgg_view_resource('messages/send'); break; default: return false; } return true; }
/** * Handle /wizard_step * * @param array $page url elements * * @return bool */ public static function wizardStep($page) { $resource_loaded = false; switch ($page[0]) { case 'add': if (!empty($page[1]) && is_numeric($page[1])) { echo elgg_view_resource('wizard_step/add', ['container_guid' => $page[1]]); $resource_loaded = true; } break; case 'edit': if (!empty($page[1]) && is_numeric($page[1])) { echo elgg_view_resource('wizard_step/edit', ['guid' => $page[1]]); $resource_loaded = true; } break; } return $resource_loaded; }