/** * 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}"); } $user = get_user_by_username($page[1]); if ($user->guid != $current_user->guid && !$current_user->isAdmin()) { forward(); } $base = elgg_get_plugins_path() . 'notifications'; // note: $user passed in switch ($page[0]) { case 'group': require "{$base}/groups.php"; break; case 'personal': require "{$base}/index.php"; 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; }
/** * 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; }
/** * Serves pages for gnusocial. * * @param array $page * @return bool */ function gnusocial_api_pagehandler($page) { if (!isset($page[0])) { return false; } switch ($page[0]) { case 'authorize': gnusocial_api_authorize(); break; case 'revoke': gnusocial_api_revoke(); break; case 'forward': gnusocial_api_forward(); break; case 'login': gnusocial_api_login(); break; case 'interstitial': elgg_gatekeeper(); // only let gnusocial users do this. $guid = elgg_get_logged_in_user_guid(); $gnusocial_name = elgg_get_plugin_user_setting('gnusocial_name', $guid, 'gnusocial_api'); if (!$gnusocial_name) { register_error(elgg_echo('gnusocial_api:invalid_page')); forward(); } $pages = dirname(__FILE__) . '/pages/gnusocial_api'; include "{$pages}/interstitial.php"; break; default: return false; } return true; }
/** * Page handler for generic comments manipulation. * * @param array $page * @return bool * @access private */ function _elgg_comments_page_handler($page) { switch ($page[0]) { case 'edit': elgg_gatekeeper(); if (empty($page[1])) { register_error(elgg_echo('generic_comment:notfound')); forward(REFERER); } $comment = get_entity($page[1]); if (!$comment instanceof \ElggComment || !$comment->canEdit()) { register_error(elgg_echo('generic_comment:notfound')); forward(REFERER); } $target = $comment->getContainerEntity(); if (!$target instanceof \ElggEntity) { register_error(elgg_echo('generic_comment:notfound')); forward(REFERER); } $title = elgg_echo('generic_comments:edit'); elgg_push_breadcrumb($target->getDisplayName(), $target->getURL()); elgg_push_breadcrumb($title); $params = array('entity' => $target, 'comment' => $comment, 'is_edit_page' => true); $content = elgg_view_form('comment/save', null, $params); $params = array('content' => $content, 'title' => $title, 'filter' => ''); $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); return true; break; default: return false; break; } }
/** * Gestor de páginas * * @param array $page Array of page routing elements * @return bool */ function trip_companions_page_handler($page) { //system_message("page handler " . elgg_extract(0, $page)); // only logged in users can do things elgg_gatekeeper(); if (elgg_extract(0, $page) === 'add' && elgg_is_xhr()) { echo elgg_view('resources/evaluationcontent/add_form'); return true; } if (elgg_extract(0, $page) === 'import') { echo elgg_view('resources/trip_companions/add_form'); return true; } $friends = $groups = 0; switch ($page[0]) { case 'groups': $groups = 10; break; default: $friends = $groups = 10; break; } $page_owner = elgg_get_logged_in_user_entity(); elgg_set_page_owner_guid($page_owner->guid); elgg_set_context("trip_companions"); $content = elgg_view('resources/trip_companions/list', array('owner' => $page_owner, 'friends' => $friends, 'groups' => $groups)); if ($content) { echo $content; return true; } return false; }
/** * 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('resources/twitter_api/interstitial'); break; default: return false; } return true; }
/** * Only site announcement editors can access this part * * @return void */ function site_announcements_editor_gatekeeper() { elgg_gatekeeper(); if (!site_announcements_is_editor()) { register_error(elgg_echo('limited_access')); forward(REFERER); } }
/** * 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 array|bool */ public static function blog($hook, $type, $return_value, $params) { if (empty($return_value) || !is_array($return_value)) { // someone else had a route hook return $return_value; } $page = elgg_extract("segments", $return_value); if (empty($page)) { return $return_value; } $pages_path = elgg_get_plugins_path() . "blog_tools/pages/"; switch ($page[0]) { case "owner": $user = get_user_by_username($page[1]); if (!empty($user)) { $return_value = false; // push all blogs breadcrumb elgg_push_breadcrumb(elgg_echo("blog:blogs"), "blog/all"); set_input("owner_guid", $user->guid); include $pages_path . "owner.php"; } break; case "read": // Elgg 1.7 compatibility // Elgg 1.7 compatibility case "view": if (!elgg_is_logged_in()) { $setting = elgg_get_plugin_setting("advanced_gatekeeper", "blog_tools"); if ($setting != "no") { if (isset($page[1]) && !get_entity($page[1])) { elgg_gatekeeper(); } } } set_input("guid", $page[1]); // to be used in the blog_tools/full/related view break; case "add": case "edit": $return_value = false; // push all blogs breadcrumb elgg_push_breadcrumb(elgg_echo("blog:blogs"), "blog/all"); set_input("page_type", $page[0]); if (isset($page[1])) { set_input("guid", $page[1]); } if (isset($page[2])) { set_input("revision", $page[2]); } include $pages_path . "edit.php"; break; case "featured": $return_value = false; include $pages_path . "featured.php"; break; } return $return_value; }
/** * 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('resources/reportedcontent/add_form'); return true; } echo elgg_view('resources/reportedcontent/add'); return true; }
/** * Page handler function * * @param array $page Page URL segments * @return bool */ function invitefriends_page_handler($page) { elgg_gatekeeper(); elgg_set_context('friends'); elgg_set_page_owner_guid(elgg_get_logged_in_user_guid()); $title = elgg_echo('friends:invite'); $body = elgg_view('invitefriends/form'); $params = array('content' => $body, 'title' => $title); $body = elgg_view_layout('one_sidebar', $params); echo elgg_view_page($title, $body); 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(); $title = elgg_echo('reportedcontent:this'); $content = elgg_view_form('reportedcontent/add'); $sidebar = elgg_echo('reportedcontent:instructions'); $params = array('title' => $title, 'content' => $content, 'sidebar' => $sidebar); $body = elgg_view_layout('one_sidebar', $params); echo elgg_view_page($title, $body); 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; }
/** * Dashboard page handler * @return bool */ function dashboard_page_handler() { // Ensure that only logged-in users can see this page elgg_gatekeeper(); // Set context and title elgg_set_context('dashboard'); elgg_set_page_owner_guid(elgg_get_logged_in_user_guid()); $title = elgg_echo('dashboard'); // wrap intro message in a div $intro_message = elgg_view('dashboard/blurb'); $params = array('content' => $intro_message, 'num_columns' => 3, 'show_access' => false); $widgets = elgg_view_layout('widgets', $params); $body = elgg_view_layout('one_column', array('title' => false, 'content' => $widgets)); echo elgg_view_page($title, $body); return true; }
/** * Handles all answer pages * * @param array $segments * * @return bool */ function answers_page_handler($segments) { elgg_push_breadcrumb(elgg_echo('questions'), 'questions/all'); $pages = dirname(dirname(__FILE__)) . '/pages/answers'; switch ($segments[0]) { case 'edit': elgg_gatekeeper(); set_input('guid', $segments[1]); include "{$pages}/edit.php"; break; default: forward('questions/all'); return false; } return true; }
/** * Page handler * * /site_notifications/view/<username> * * @param array $segments URL segments * @return boolean */ function site_notifications_page_handler($segments) { $base = elgg_get_plugins_path() . 'site_notifications/pages/site_notifications'; 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); elgg_load_js('elgg.site_notifications'); require "{$base}/view.php"; 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)); }
/** * Edit or add a discussion topic * * @param string $type 'add' or 'edit' * @param int $guid GUID of group or topic */ function discussion_handle_edit_page($type, $guid) { elgg_gatekeeper(); if ($type == 'add') { $group = get_entity($guid); if (!elgg_instanceof($group, 'group')) { register_error(elgg_echo('group:notfound')); forward(); } // make sure user has permissions to add a topic to container if (!$group->canWriteToContainer(0, 'object', 'groupforumtopic')) { register_error(elgg_echo('groups:permissions:error')); forward($group->getURL()); } $title = elgg_echo('groups:addtopic'); elgg_push_breadcrumb($group->name, "discussion/owner/{$group->guid}"); elgg_push_breadcrumb($title); $body_vars = discussion_prepare_form_vars(); $content = elgg_view_form('discussion/save', array(), $body_vars); } else { $topic = get_entity($guid); if (!elgg_instanceof($topic, 'object', 'groupforumtopic') || !$topic->canEdit()) { register_error(elgg_echo('discussion:topic:notfound')); forward(); } $group = $topic->getContainerEntity(); if (!elgg_instanceof($group, 'group')) { register_error(elgg_echo('group:notfound')); forward(); } $title = elgg_echo('groups:edittopic'); elgg_push_breadcrumb($group->name, "discussion/owner/{$group->guid}"); elgg_push_breadcrumb($topic->title, $topic->getURL()); elgg_push_breadcrumb($title); $body_vars = discussion_prepare_form_vars($topic); $content = elgg_view_form('discussion/save', array(), $body_vars); } $params = array('content' => $content, 'title' => $title, 'filter' => ''); $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); }
function river_addon_river_page_handler($page) { global $CONFIG; $param = 'friends'; 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, $page, $param); $page_type = preg_replace('[\\W]', '', $page_type); if ($page_type == 'owner') { elgg_gatekeeper(); $page_username = elgg_extract(1, $page, ''); if ($page_username == elgg_get_logged_in_user_entity()->username) { $page_type = 'mine'; } else { elgg_admin_gatekeeper(); set_input('subject_username', $page_username); } } set_input('page_type', $page_type); require_once "{$CONFIG->path}pages/river.php"; return true; }
/** * server our pages through resource views * * @param type $page * @return boolean */ function suggested_friends_page_handler($page) { elgg_gatekeeper(); $friends = $groups = 0; switch ($page[0]) { case 'friends': $friends = 10; break; case 'groups': $groups = 10; break; default: $friends = $groups = 10; break; } $page_owner = elgg_get_logged_in_user_entity(); elgg_set_page_owner_guid($page_owner->guid); $content = elgg_view('resources/suggested_friends/list', array('owner' => $page_owner, 'friends' => $friends, 'groups' => $groups)); if ($content) { echo $content; return true; } return false; }
<?php /** * Album sort page * * This displays a listing of all the photos so that they can be sorted */ elgg_gatekeeper(); elgg_group_gatekeeper(); // get the album entity $album_guid = elgg_extract('guid', $vars); $album = get_entity($album_guid); // panic if we can't get it if (!$album) { forward(); } // container should always be set, but just in case $owner = $album->getContainerEntity(); elgg_set_page_owner_guid($owner->getGUID()); $title = elgg_echo('tidypics:sort', array($album->getTitle())); // set up breadcrumbs elgg_push_breadcrumb(elgg_echo('photos'), 'photos/siteimagesall'); elgg_push_breadcrumb(elgg_echo('tidypics:albums'), 'photos/all'); if (elgg_instanceof($owner, 'group')) { elgg_push_breadcrumb($owner->name, "photos/group/{$owner->guid}/all"); } else { elgg_push_breadcrumb($owner->name, "photos/owner/{$owner->username}"); } elgg_push_breadcrumb($album->getTitle(), $album->getURL()); elgg_push_breadcrumb(elgg_echo('album:sort')); if ($album->getSize()) {
/** * Manage requests to join a group * * @param int $guid Group entity GUID */ function groups_handle_requests_page($guid) { elgg_gatekeeper(); elgg_set_page_owner_guid($guid); $group = get_entity($guid); if (!elgg_instanceof($group, 'group') || !$group->canEdit()) { register_error(elgg_echo('groups:noaccess')); forward(REFERER); } $title = elgg_echo('groups:membershiprequests'); elgg_push_breadcrumb($group->name, $group->getURL()); elgg_push_breadcrumb($title); $requests = elgg_get_entities_from_relationship(array('type' => 'user', 'relationship' => 'membership_request', 'relationship_guid' => $guid, 'inverse_relationship' => true, 'limit' => 0)); $content = elgg_view('groups/membershiprequests', array('requests' => $requests, 'entity' => $group)); $params = array('content' => $content, 'title' => $title, 'filter' => ''); $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); }
function izap_gatekeeper() { if (is_callable('elgg_gatekeeper')) { return elgg_gatekeeper(); } else { return gatekeeper(); } }
/** * Edit discussion reply * * @param string $type 'edit' * @param int $guid GUID of group or topic */ function discussion_handle_reply_edit_page($type, $guid) { elgg_gatekeeper(); if ($type == 'edit') { $reply = get_entity($guid); if (!elgg_instanceof($reply, 'object', 'discussion_reply', 'ElggDiscussionReply') || !$reply->canEdit()) { register_error(elgg_echo('discussion:reply:error:notfound')); forward(); } $topic = $reply->getContainerEntity(); if (!elgg_instanceof($topic, 'object', 'groupforumtopic')) { register_error(elgg_echo('discussion:topic:notfound')); forward(); } $group = $topic->getContainerEntity(); if (!elgg_instanceof($group, 'group')) { register_error(elgg_echo('group:notfound')); forward(); } $title = elgg_echo('discussion:reply:edit'); elgg_push_breadcrumb($group->name, "discussion/owner/{$group->guid}"); elgg_push_breadcrumb($topic->title, $topic->getURL()); elgg_push_breadcrumb($title); $params = array('guid' => $reply->guid, 'hidden' => false); $content = elgg_view('ajax/discussion/reply/edit', $params); } $params = array('content' => $content, 'title' => $title, 'sidebar' => elgg_view('discussion/sidebar/edit'), 'filter' => ''); $body = elgg_view_layout('content', $params); echo elgg_view_page($title, $body); }
/** * Handles graph requests * * /graph/<node>[/<edge>] * * @param array $segments URL segments * @return bool */ public function pageHandler($segments) { elgg_register_plugin_hook_handler('debug', 'log', array($this->logger, 'debugLogHandler')); error_reporting(E_ALL); set_error_handler(array($this->logger, 'errorHandler')); set_exception_handler(array($this->logger, 'exceptionHandler')); try { if ($this->request->getUrlSegments()[0] == 'services') { elgg_trigger_plugin_hook('auth', 'graph'); } else { // graph page handler is being accessed directly, and not routed to from services // check csrf tokens action_gatekeeper(''); if ($this->request->getMethod() != HttpRequest::METHOD_GET) { elgg_gatekeeper(); } } elgg_set_context('services'); elgg_push_context('api'); elgg_push_context('graph'); $viewtype = $this->mapViewtype(); $endpoint = implode('/', $segments); if (!elgg_is_registered_viewtype($viewtype)) { $viewtype = 'json'; } elgg_set_viewtype($viewtype); $result = $this->route($endpoint); } catch (Exception $ex) { $result = new ErrorResult($ex->getMessage(), $ex->getCode(), $ex); } $this->send($result); return true; }
/** * Dispatches blog pages. * URLs take the form of * All blogs: blog/all * User's blogs: blog/owner/<username> * Friends' blog: blog/friends/<username> * User's archives: blog/archives/<username>/<time_start>/<time_stop> * Blog post: blog/view/<guid>/<title> * New post: blog/add/<guid> * Edit post: blog/edit/<guid>/<revision> * Preview post: blog/preview/<guid> * Group blog: blog/group/<guid>/all * * Title is ignored * * @todo no archives for all blogs or friends * * @param array $page * @return bool */ function blog_page_handler($page) { elgg_load_library('elgg:blog'); // push all blogs breadcrumb elgg_push_breadcrumb(elgg_echo('blog:blogs'), "blog/all"); if (!isset($page[0])) { $page[0] = 'all'; } $page_type = $page[0]; switch ($page_type) { case 'owner': $user = get_user_by_username($page[1]); if (!$user) { forward('', '404'); } $params = blog_get_page_content_list($user->guid); break; case 'friends': $user = get_user_by_username($page[1]); if (!$user) { forward('', '404'); } $params = blog_get_page_content_friends($user->guid); break; case 'archive': $user = get_user_by_username($page[1]); if (!$user) { forward('', '404'); } $params = blog_get_page_content_archive($user->guid, $page[2], $page[3]); break; case 'view': $params = blog_get_page_content_read($page[1]); break; case 'add': elgg_gatekeeper(); $params = blog_get_page_content_edit($page_type, $page[1]); break; case 'edit': elgg_gatekeeper(); $params = blog_get_page_content_edit($page_type, $page[1], $page[2]); break; case 'group': $group = get_entity($page[1]); if (!elgg_instanceof($group, 'group')) { forward('', '404'); } if ($page[2] == 'all') { $params = blog_get_page_content_list($page[1]); } else { $params = blog_get_page_content_archive($page[1], $page[3], $page[4]); } break; case 'all': $params = blog_get_page_content_list(); break; default: return false; } if (isset($params['sidebar'])) { $params['sidebar'] .= elgg_view('blog/sidebar', array('page' => $page_type)); } else { $params['sidebar'] = elgg_view('blog/sidebar', array('page' => $page_type)); } $body = elgg_view_layout('content', $params); echo elgg_view_page($params['title'], $body); return true; }
/** * Can the viewer see this entity? * * Tests if the entity exists and whether the viewer has access to the entity * if it does. If the viewer cannot view this entity, it forwards to an * appropriate page. * * @param int $guid Entity GUID * @param string $type Optional required entity type * @param string $subtype Optional required entity subtype * @return void * @since 1.9.0 */ function elgg_entity_gatekeeper($guid, $type = null, $subtype = null) { $entity = get_entity($guid); if (!$entity) { if (!elgg_entity_exists($guid)) { // entity doesn't exist forward('', '404'); } elseif (!elgg_is_logged_in()) { // entity requires at least a logged in user elgg_gatekeeper(); } else { // user is logged in but still does not have access to it register_error(elgg_echo('limited_access')); forward(); } } if ($type) { if (!elgg_instanceof($entity, $type, $subtype)) { // entity is of wrong type/subtype forward('', '404'); } } }
/** * The socialink page handler * * @param array $page page elements * * @return bool */ function socialink_page_handler($page) { $result = false; switch ($page[0]) { case "authorize": elgg_gatekeeper(); $user = elgg_get_logged_in_user_entity(); switch ($page[1]) { case "twitter": case "linkedin": case "facebook": case "wordpress": if (call_user_func("socialink_" . $page[1] . "_authorize")) { system_message(elgg_echo("socialink:authorize:success", array(elgg_echo("socialink:network:" . $page[1])))); } else { register_error(elgg_echo("socialink:authorize:failed", array(elgg_echo("socialink:network:" . $page[1])))); } break; } if (!empty($page[1]) && socialink_is_available_network($page[1])) { elgg_trigger_plugin_hook("socialink:sync", "user", array("user" => $user, "network" => $page[1])); } forward("settings/plugins/" . $user->username . "/socialink"); break; case "login": if (elgg_is_logged_in() || !isset($page[1])) { // invalid input forward(); } $network = $page[1]; $network_name = elgg_echo("socialink:network:" . $network); $error_msg_no_user = elgg_echo("socialink:login:error:no_user", array($network_name, $network_name)); if (!socialink_is_available_network($network)) { // unavailable network forward(); } // find hidden users (just created) $access_status = access_get_show_hidden_status(); access_show_hidden_entities(true); switch ($network) { case "twitter": $token = socialink_twitter_get_access_token(get_input("oauth_verifier")); if (!isset($token["oauth_token"]) || !isset($token["oauth_token_secret"])) { register_error($error_msg_no_user); break; } $params = array("type" => "user", "limit" => 1, "site_guids" => false, "plugin_id" => "socialink", "plugin_user_setting_name_value_pairs" => array("twitter_oauth_token" => $token["oauth_token"], "twitter_oauth_secret" => $token["oauth_token_secret"])); $users = elgg_get_entities_from_plugin_user_settings($params); if (!empty($users)) { $user = $users[0]; } else { $_SESSION["socialink_token"] = $token; forward("socialink/no_linked_account/twitter"); } break; case "linkedin": $token = socialink_linkedin_get_access_token(get_input("oauth_verifier")); if (!isset($token["oauth_token"]) || !isset($token["oauth_token_secret"])) { register_error($error_msg_no_user); break; } $params = array("type" => "user", "limit" => 1, "site_guids" => false, "plugin_id" => "socialink", "plugin_user_setting_name_value_pairs" => array("linkedin_oauth_token" => $token["oauth_token"], "linkedin_oauth_secret" => $token["oauth_token_secret"])); $users = elgg_get_entities_from_plugin_user_settings($params); if (!empty($users)) { $user = $users[0]; } else { $_SESSION["socialink_token"] = $token; forward("socialink/no_linked_account/linkedin"); } break; case "facebook": $token = socialink_facebook_get_access_token(); if (empty($token)) { register_error($error_msg_no_user); break; } $user_id = socialink_facebook_get_user_id_from_access_token($token); if (empty($user_id)) { register_error($error_msg_no_user); break; } $params = array("type" => "user", "limit" => 1, "site_guids" => false, "plugin_id" => "socialink", "plugin_user_setting_name_value_pairs" => array("facebook_user_id" => $user_id)); $users = elgg_get_entities_from_plugin_user_settings($params); if (!empty($users)) { $user = $users[0]; } else { $_SESSION["socialink_token"] = $token; forward("socialink/no_linked_account/facebook"); } break; case "wordpress": $token = socialink_wordpress_get_access_token(get_input("oauth_token")); if (isset($token['oauth_token']) && isset($token['oauth_token_secret'])) { if ($userdata = socialink_wordpress_get_user_data_from_token($token)) { $params = array("type" => "user", "limit" => 1, "site_guids" => false, "plugin_id" => "socialink", "plugin_user_setting_name_value_pairs" => array("wordpress_userid" => $userdata->ID)); if ($users = elgg_get_entities_from_plugin_user_settings($params)) { $user = $users[0]; socialink_wordpress_update_connection($token, $user->getGUID()); } else { $_SESSION["socialink_token"] = $token; forward("socialink/no_linked_account/wordpress"); } } } else { register_error($error_msg_no_user); } break; } if (!empty($user) && elgg_instanceof($user, "user")) { try { // permanent login login($user, true); // log last network elgg_set_plugin_user_setting("last_login_network", $network, $user->getGUID(), "socialink"); // sync network data elgg_trigger_plugin_hook("socialink:sync", "user", array("user" => $user, "network" => $network)); // set message and forward to correct page system_message(elgg_echo("loginok")); if (isset($_SESSION["last_forward_from"]) && $_SESSION["last_forward_from"]) { $forward_url = $_SESSION["last_forward_from"]; unset($_SESSION["last_forward_from"]); forward($forward_url); } elseif (get_input("returntoreferer")) { forward(REFERER); } else { forward(); } } catch (LoginException $e) { // validation mechanisme should report that you are not authenticated. Currently uservalidation by email doesn't do that //register_error($e->getMessage()); forward(); } } // restore hidden status access_show_hidden_entities($access_status); forward(); break; case "no_linked_account": if (elgg_is_logged_in()) { forward(); } switch ($page[1]) { case "linkedin": case "facebook": case "twitter": case "wordpress": $result = true; set_input("network", $page[1]); include dirname(dirname(__FILE__)) . "/pages/no_linked_account.php"; break; } break; case "share": elgg_gatekeeper(); $result = true; include dirname(dirname(__FILE__)) . "/pages/share.php"; break; case "forward": if (!isset($page[1]) && !isset($page[2])) { // invalid input break; } $network = $page[1]; $action = $page[2]; $allowed_actions = array("login", "authorize"); if (!socialink_is_available_network($network) || !in_array($action, $allowed_actions)) { // unavailable network or unsupported action break; } if ($action == "login") { socialink_prepare_login(); } $callback_url = elgg_get_site_url() . "socialink/" . $action . "/" . $network; $forward_url = ""; switch ($network) { case "linkedin": $forward_url = socialink_linkedin_get_authorize_url($callback_url); break; case "facebook": $forward_url = socialink_facebook_get_authorize_url($callback_url); break; case "twitter": $forward_url = socialink_twitter_get_authorize_url($callback_url); break; case "wordpress": $forward_url = socialink_wordpress_get_authorize_url($callback_url); break; } forward($forward_url); break; } return $result; }
/** * Dispatcher for bookmarks. * * URLs take the form of * All bookmarks: bookmarks/all * User's bookmarks: bookmarks/owner/<username> * Friends' bookmarks: bookmarks/friends/<username> * View bookmark: bookmarks/view/<guid>/<title> * New bookmark: bookmarks/add/<guid> (container: user, group, parent) * Edit bookmark: bookmarks/edit/<guid> * Group bookmarks: bookmarks/group/<guid>/all * Bookmarklet: bookmarks/bookmarklet/<guid> (user) * * Title is ignored * * @param array $page * @return bool */ function bookmarks_page_handler($page) { elgg_load_library('elgg:bookmarks'); if (!isset($page[0])) { $page[0] = 'all'; } elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all'); $pages = dirname(__FILE__) . '/pages/bookmarks'; switch ($page[0]) { case "all": include "{$pages}/all.php"; break; case "owner": include "{$pages}/owner.php"; break; case "friends": include "{$pages}/friends.php"; break; case "view": set_input('guid', $page[1]); include "{$pages}/view.php"; break; case "add": elgg_gatekeeper(); include "{$pages}/add.php"; break; case "edit": elgg_gatekeeper(); set_input('guid', $page[1]); include "{$pages}/edit.php"; break; case 'group': elgg_group_gatekeeper(); include "{$pages}/owner.php"; break; case "bookmarklet": set_input('container_guid', $page[1]); include "{$pages}/bookmarklet.php"; break; default: return false; } elgg_pop_context(); return true; }
/** * Dispatches news pages. * URLs take the form of * All news: news/all * User's news: news/owner/<username> * User's archives: news/archives/<username>/<time_start>/<time_stop> * A news post: news/view/<guid>/<title> * New news post: news/add/<guid> * Edit news post: news/edit/<guid>/<revision> * Preview news post: news/preview/<guid> * Group news: news/group/<guid>/all * * Title is ignored * * @param array $page * @return bool */ function news_page_handler($page) { elgg_load_library('elgg:news'); // forward to correct URL for news pages pre-1.8 news_url_forwarder($page); // push all news breadcrumb elgg_push_breadcrumb(elgg_echo('news:news'), "news/all"); $page_type = elgg_extract(0, $page, 'all'); $resource_vars = ['page_type' => $page_type]; switch ($page_type) { case 'owner': $resource_vars['username'] = elgg_extract(1, $page); echo elgg_view_resource('news/owner', $resource_vars); break; case 'archive': $resource_vars['username'] = elgg_extract(1, $page); $resource_vars['lower'] = elgg_extract(2, $page); $resource_vars['upper'] = elgg_extract(3, $page); echo elgg_view_resource('news/archive', $resource_vars); break; case 'view': $resource_vars['guid'] = elgg_extract(1, $page); echo elgg_view_resource('news/view', $resource_vars); break; case 'read': // Elgg 1.7 compatibility register_error(elgg_echo("changebookmark")); forward("news/view/{$page[1]}"); break; case 'add': elgg_gatekeeper(); $current_user_guid = elgg_get_logged_in_user_guid(); $container = get_entity($page[1]); if (elgg_instanceof($container, 'group') && ($current_user_guid == $container->owner_guid || check_entity_relationship($current_user_guid, "group_admin", $container->guid)) || elgg_is_admin_logged_in()) { $resource_vars['guid'] = elgg_extract(1, $page); echo elgg_view_resource('news/add', $resource_vars); } else { forward(REFERER); } break; case 'edit': elgg_gatekeeper(); $current_user = elgg_get_logged_in_user_entity(); $news = get_entity($page[1]); if (elgg_instanceof($news, 'object', 'news') && $current_user->canEdit() || elgg_is_admin_logged_in()) { $resource_vars['guid'] = elgg_extract(1, $page); $resource_vars['revision'] = elgg_extract(2, $page); echo elgg_view_resource('news/edit', $resource_vars); } else { forward(REFERER); } break; case 'group': $resource_vars['group_guid'] = elgg_extract(1, $page); $resource_vars['subpage'] = elgg_extract(2, $page); $resource_vars['lower'] = elgg_extract(3, $page); $resource_vars['upper'] = elgg_extract(4, $page); echo elgg_view_resource('news/group', $resource_vars); break; case 'all': echo elgg_view_resource('news/all', $resource_vars); break; default: return false; } return true; }