Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
/**
 * 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;
}
Esempio n. 3
0
/**
 * 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;
}
Esempio n. 4
0
/**
 * 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;
}
Esempio n. 5
0
/**
 * 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;
    }
}
Esempio n. 6
0
/**
 * 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;
}
Esempio n. 7
0
/**
 * 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;
}
Esempio n. 8
0
/**
 * 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);
    }
}
Esempio n. 9
0
 /**
  * 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;
 }
Esempio n. 10
0
/**
 * 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;
}
Esempio n. 11
0
/**
 * 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;
}
Esempio n. 12
0
/**
 * 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;
}
Esempio n. 13
0
File: start.php Progetto: elgg/elgg
/**
 * 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;
}
Esempio n. 14
0
/**
 * 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;
}
Esempio n. 15
0
/**
 * 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;
}
Esempio n. 16
0
/**
 * 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;
}
Esempio n. 17
0
File: start.php Progetto: elgg/elgg
/**
 * 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));
}
Esempio n. 18
0
/**
 * 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);
}
Esempio n. 19
0
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;
}
Esempio n. 20
0
/**
 * 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;
}
Esempio n. 21
0
<?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()) {
Esempio n. 22
0
File: groups.php Progetto: n8b/VMN
/**
 * 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);
}
Esempio n. 23
0
function izap_gatekeeper()
{
    if (is_callable('elgg_gatekeeper')) {
        return elgg_gatekeeper();
    } else {
        return gatekeeper();
    }
}
Esempio n. 24
0
/**
 * 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);
}
Esempio n. 25
0
 /**
  * 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;
 }
Esempio n. 26
0
/**
 * 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');
        }
    }
}
Esempio n. 28
0
/**
 * 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;
}
Esempio n. 29
0
/**
 * 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;
}
Esempio n. 30
0
/**
 * 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;
}