Example #1
0
File: Router.php Project: elgg/elgg
 /**
  * Routes the request to a registered page handler
  *
  * This function triggers a plugin hook `'route', $identifier` so that plugins can
  * modify the routing or handle a request.
  *
  * @param Request $request The request to handle.
  * @return boolean Whether the request was routed successfully.
  * @access private
  */
 public function route(Request $request)
 {
     $segments = $request->getUrlSegments();
     if ($segments) {
         $identifier = array_shift($segments);
     } else {
         $identifier = '';
     }
     // return false to stop processing the request (because you handled it)
     // return a new $result array if you want to route the request differently
     $old = array('identifier' => $identifier, 'handler' => $identifier, 'segments' => $segments);
     if ($this->timer) {
         $this->timer->begin(['build page']);
     }
     ob_start();
     $result = $this->hooks->trigger('route', $identifier, $old, $old);
     if ($result === false) {
         $output = ob_get_clean();
         $response = elgg_ok_response($output);
     } else {
         if ($result !== $old) {
             _elgg_services()->logger->warn('Use the route:rewrite hook to modify routes.');
         }
         if ($identifier != $result['identifier']) {
             $identifier = $result['identifier'];
         } else {
             if ($identifier != $result['handler']) {
                 $identifier = $result['handler'];
             }
         }
         $segments = $result['segments'];
         $response = false;
         if (isset($this->handlers[$identifier]) && is_callable($this->handlers[$identifier])) {
             $function = $this->handlers[$identifier];
             $response = call_user_func($function, $segments, $identifier);
         }
         $output = ob_get_clean();
         if ($response === false) {
             return headers_sent();
         }
         if (!$response instanceof ResponseBuilder) {
             $response = elgg_ok_response($output);
         }
     }
     if (_elgg_services()->responseFactory->getSentResponse()) {
         return true;
     }
     _elgg_services()->responseFactory->respond($response);
     return headers_sent();
 }
Example #2
0
File: start.php Project: 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));
}
Example #3
0
/**
 * Intercepts the index page when Walled Garden mode is enabled.
 *
 * @return ResponseBuilder
 * @access private
 */
function _elgg_walled_garden_index()
{
    return elgg_ok_response(elgg_view_resource('walled_garden'));
}
Example #4
0
File: add.php Project: elgg/elgg
$default_widgets = (int) get_input('default_widgets', 0);
elgg_set_page_owner_guid($page_owner_guid);
$page_owner = elgg_get_page_owner_entity();
if (!$page_owner) {
    return elgg_error_response(elgg_echo('widgets:add:failure'));
}
if (!elgg_can_edit_widget_layout($context)) {
    // logged in user must be able to edit the layout to add a widget
    return elgg_error_response(elgg_echo('widgets:add:failure'));
}
$guid = elgg_create_widget($page_owner->getGUID(), $handler, $context);
if (!$guid) {
    return elgg_error_response(elgg_echo('widgets:add:failure'));
}
$widget = get_entity($guid);
// position the widget
$widget->move($column, 0);
$context_stack = [];
if ($default_widgets) {
    $context_stack[] = 'default_widgets';
}
$context_stack[] = 'widgets';
if ($context) {
    $context_stack[] = $context;
}
foreach ($context_stack as $ctx) {
    elgg_push_context($ctx);
}
$result = elgg_view_entity($widget, ['show_access' => $show_access]);
return elgg_ok_response($result);
Example #5
0
File: login.php Project: elgg/elgg
        elgg_get_session()->set('forgotpassword:hash_missing', get_input('username'));
        $output = ['forward' => 'forgotpassword'];
        return elgg_ok_response($output, '', 'forgotpassword');
    }
    return elgg_error_response($result);
}
if (!$user) {
    return elgg_error_response(elgg_echo('login:baduser'));
}
try {
    login($user, $persistent);
    // re-register at least the core language file for users with language other than site default
    register_translations(dirname(dirname(__FILE__)) . "/languages/");
} catch (LoginException $e) {
    return elgg_error_response($e->getMessage());
}
// elgg_echo() caches the language and does not provide a way to change the language.
// @todo we need to use the config object to store this so that the current language
// can be changed. Refs #4171
if ($user->language) {
    $message = elgg_echo('loginok', array(), $user->language);
} else {
    $message = elgg_echo('loginok');
}
// clear after login in case login fails
$session->remove('last_forward_from');
$params = array('user' => $user, 'source' => $forward_source);
$forward_url = elgg_trigger_plugin_hook('login:forward', 'user', $params, $forward_url);
$output = ['forward' => $forward_url];
return elgg_ok_response($output, $message, $forward_url);
Example #6
0
 /**
  * Send an updated CSRF token, provided the page's current tokens were not fake.
  *
  * @return ResponseBuilder
  * @access private
  */
 public function handleTokenRefreshRequest()
 {
     if (!elgg_is_xhr()) {
         return false;
     }
     // the page's session_token might have expired (not matching __elgg_session in the session), but
     // we still allow it to be given to validate the tokens in the page.
     $session_token = get_input('session_token', null, false);
     $pairs = (array) get_input('pairs', array(), false);
     $valid_tokens = (object) array();
     foreach ($pairs as $pair) {
         list($ts, $token) = explode(',', $pair, 2);
         if ($this->validateTokenOwnership($token, $ts, $session_token)) {
             $valid_tokens->{$token} = true;
         }
     }
     $ts = $this->getCurrentTime()->getTimestamp();
     $token = $this->generateActionToken($ts);
     $data = array('token' => array('__elgg_ts' => $ts, '__elgg_token' => $token, 'logged_in' => $this->session->isLoggedIn()), 'valid_tokens' => $valid_tokens, 'session_token' => $this->session->get('__elgg_session'), 'user_guid' => $this->session->getLoggedInUserGuid());
     elgg_set_http_header("Content-Type: application/json;charset=utf-8");
     return elgg_ok_response($data);
 }
Example #7
0
File: save.php Project: elgg/elgg
 * @uses int    $_REQUEST['default_widgets'] Flag for if these settings are for default wigets.
 * @uses string $_REQUEST['context']         An optional context of the widget. Used to return
 *                                           the correct output if widget content changes
 *                                           depending on context.
 */
$guid = (int) get_input('guid');
$params = get_input('params');
$default_widgets = (int) get_input('default_widgets', 0);
$context = get_input('context');
$widget = get_entity($guid);
if (!$widget instanceof \ElggWidget || !$widget->saveSettings($params)) {
    return elgg_error_response(elgg_echo('widgets:save:failure'));
}
$context_stack = [];
if ($default_widgets) {
    $context_stack[] = 'default_widgets';
}
$context_stack[] = 'widgets';
if ($context) {
    $context_stack[] = $context;
}
foreach ($context_stack as $ctx) {
    elgg_push_context($ctx);
}
elgg_set_page_owner_guid($widget->getContainerGUID());
$output = ['content' => elgg_view('object/widget/elements/content', ['entity' => $widget]), 'title' => $widget->getTitle(), 'href' => $widget->getURL()];
foreach ($context_stack as $ctx) {
    elgg_pop_context();
}
return elgg_ok_response($output);
Example #8
0
<?php

$output = get_input('output');
$forward_url = get_input('forward_url');
$forward_reason = (int) get_input('forward_reason', ELGG_HTTP_OK);
$system_message = get_input('system_message');
$error_message = get_input('error_message');
if ($forward_url == '-1') {
    $forward_url = REFERRER;
}
if ($forward_reason == ELGG_HTTP_OK && !$error_message) {
    return elgg_ok_response($output, $system_message, $forward_url, $forward_reason);
} else {
    if ($forward_reason == ELGG_HTTP_BAD_REQUEST || $error_message) {
        return elgg_error_response($error_message, $forward_url, $forward_reason);
    } else {
        if ($forward_reason == ELGG_HTTP_FOUND) {
            return elgg_redirect_response($forward_url);
        }
    }
}
Example #9
0
File: delete.php Project: elgg/elgg
<?php

/**
 * Elgg Message board: delete message action
 *
 * @package ElggMessageBoard
 */
$annotation_id = (int) get_input('annotation_id');
$message = elgg_get_annotation_from_id($annotation_id);
$ok_output = ['deleted' => $message->toObject()];
if ($message && $message->canEdit() && $message->delete()) {
    return elgg_ok_response($ok_output, elgg_echo('messageboard:deleted'));
}
return elgg_error_response(elgg_echo('messageboard:notdeleted'));
Example #10
0
        foreach ($ids as $id) {
            elgg_delete_admin_notice($id);
        }
    } else {
        $msg = $plugin->getError();
        $string = $msg ? 'admin:plugins:activate:no_with_msg' : 'admin:plugins:activate:no';
        register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
    }
}
// don't regenerate the simplecache because the plugin won't be
// loaded until next run.  Just invalidate and let it regenerate as needed
elgg_flush_caches();
if (count($activated_guids) === 1) {
    $url = 'admin/plugins';
    $query = (string) parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
    if ($query) {
        $url .= "?{$query}";
    }
    $plugin = get_entity($plugin_guids[0]);
    $id = $css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
    $url = "{$url}#id";
    $data = ['list' => elgg_view('admin/plugins', ['list_only' => true])];
    return elgg_ok_response($data, '', $url);
} else {
    // forward to top of page with a failure so remove any #foo
    $url = $_SERVER['HTTP_REFERER'];
    if (strpos($url, '#')) {
        $url = substr(0, strpos($url, '#'));
    }
    forward($url);
}
Example #11
0
File: add.php Project: elgg/elgg
<?php

/**
 * Elgg Message board: add message action
 *
 * @package ElggMessageBoard
 */
$message_content = get_input('message_content');
$owner_guid = (int) get_input('owner_guid');
$owner = get_user($owner_guid);
if (!$owner || empty($message_content)) {
    return elgg_error_response(elgg_echo('messageboard:blank'));
}
$result = messageboard_add(elgg_get_logged_in_user_entity(), $owner, $message_content, $owner->access_id);
if (!$result) {
    return elgg_error_response(elgg_echo('messageboard:failure'));
}
$output = elgg_list_annotations(['annotations_name' => 'messageboard', 'guid' => $owner->guid, 'pagination' => false, 'reverse_order_by' => true, 'limit' => 1]);
return elgg_ok_response($output, elgg_echo('messageboard:posted'));
Example #12
0
File: invite.php Project: elgg/elgg
    }
    if (get_user_by_email($email)) {
        $error = true;
        $already_members[] = $email;
        continue;
    }
    $link = elgg_get_registration_url(array('friend_guid' => $current_user->guid, 'invitecode' => generate_invite_code($current_user->username)));
    $message = elgg_echo('invitefriends:email', array($site->name, $current_user->name, $emailmessage, $link));
    $subject = elgg_echo('invitefriends:subject', array($site->getDisplayName()));
    // create the from address
    if ($site->email) {
        $from = $site->email;
    } else {
        $from = 'noreply@' . $site->getDomain();
    }
    elgg_send_email($from, $email, $subject, $message);
    $sent_total++;
}
if ($error) {
    register_error(elgg_echo('invitefriends:invitations_sent', array($sent_total)));
    if (count($bad_emails) > 0) {
        register_error(elgg_echo('invitefriends:email_error', array(implode(', ', $bad_emails))));
    }
    if (count($already_members) > 0) {
        register_error(elgg_echo('invitefriends:already_members', array(implode(', ', $already_members))));
    }
    return elgg_error_response();
}
elgg_clear_sticky_form('invitefriends');
return elgg_ok_response('', elgg_echo('invitefriends:success'));
Example #13
0
/**
 * Front page handler
 *
 * @return bool
 */
function elgg_front_page_handler()
{
    return elgg_ok_response(elgg_view_resource('index'));
}
Example #14
0
File: delete.php Project: elgg/elgg
<?php

/**
 * Elgg widget delete action
 *
 * @package Elgg.Core
 * @subpackage Widgets.Management
 */
$widget_guid = (int) get_input('widget_guid');
$widget = get_entity($widget_guid);
if (!$widget instanceof \ElggWidget) {
    return elgg_error_response(elgg_echo('widgets:remove:failure'));
}
elgg_set_page_owner_guid($widget->getContainerGUID());
if (!elgg_can_edit_widget_layout($widget->context)) {
    return elgg_error_response(elgg_echo('widgets:remove:failure'));
}
if (!$widget->delete()) {
    return elgg_error_response(elgg_echo('widgets:remove:failure'));
}
return elgg_ok_response();
Example #15
0
 public function testCanRespondToAjax2RequestForPageThatForwardsToErrorPage()
 {
     $this->request = $this->prepareHttpRequest('phpunit', 'GET', [], 2);
     $this->createService();
     elgg_register_page_handler('phpunit', function () {
         _elgg_services()->responseFactory->redirect('error', ELGG_HTTP_NOT_FOUND);
         return elgg_ok_response('foo');
     });
     $this->assertTrue($this->route());
     $response = _elgg_services()->responseFactory->getSentResponse();
     $this->assertInstanceOf(Response::class, $response);
     $this->assertEquals(ELGG_HTTP_NOT_FOUND, $response->getStatusCode());
     $this->assertContains('application/json', $response->headers->get('Content-Type'));
     $output = json_encode(['error' => ''], ELGG_JSON_ENCODING);
     $this->assertEquals($output, $response->getContent());
     // compensate for fact that ResponseFactory::redirect closes a buffer it didn't open
     ob_start();
 }