moodle/my/index.php
Martin Dougiamas 03d9401e7d My Moodle MDL-19124 New version of My Moodle, User profiles and Course profiles, all with block support
Thanks very much to Remote Learner Canada, especially Hubert Chathi and Olav Jordan, for their work on the bulk of this code, and also Mike Churchward for supporting them.  I worked on it after that (actually simplified it by removing a feature temporarily: multiple pages) to bring it more to what I was imagining, and to provide a base to build on and get all the navigation perfect.

There's still work to do.  Some blocks don't quite work as expected, and some of the code still needs upgrading to bring it fully into line with 2.0.  We also could use a much better course overview block and better CSS styling of the profile pages.  But it's definitely more usable this it was, I think.
2010-05-04 13:04:35 +00:00

143 lines
5.0 KiB
PHP

<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* My Moodle -- a user's personal dashboard
*
* - each user can currently have their own page (cloned from system and then customised)
* - only the user can see their own dashboard
* - users can add any blocks they want
* - the administrators can define a default site dashboard for users who have
* not created their own dashboard
*
* This script implements the user's view of the dashboard, and allows editing
* of the dashboard.
*
* @package moodlecore
* @subpackage my
* @copyright 2010 Remote-Learner.net
* @author Hubert Chathi <hubert@remote-learner.net>
* @author Olav Jordan <olav.jordan@remote-learner.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once(dirname(__FILE__) . '/../config.php');
require_once($CFG->dirroot . '/my/lib.php');
redirect_if_major_upgrade_required();
// TODO Add sesskey check to edit
$edit = optional_param('edit', null, PARAM_BOOL); // Turn editing on and off
require_login();
$strmymoodle = get_string('myhome');
if (isguestuser()) { // Force them to see system default, no editing allowed
$userid = NULL;
$USER->editing = $edit = 0; // Just in case
$context = get_context_instance(CONTEXT_SYSTEM);
$PAGE->set_blocks_editing_capability('moodle/my:configsyspages'); // unlikely :)
$header = "$SITE->shortname: $strmymoodle (GUEST)";
} else { // We are trying to view or edit our own My Moodle page
$userid = $USER->id; // Owner of the page
$context = get_context_instance(CONTEXT_USER, $USER->id);
$PAGE->set_blocks_editing_capability('moodle/my:manageblocks');
$header = "$SITE->shortname: $strmymoodle";
}
// Get the My Moodle page info. Should always return something unless the database is broken.
if (!$currentpage = my_get_page($userid, MY_PAGE_PRIVATE)) {
print_error('mymoodlesetup');
}
if (!$currentpage->userid) {
$context = get_context_instance(CONTEXT_SYSTEM); // So we even see non-sticky blocks
}
// Start setting up the page
$params = array();
$PAGE->set_context($context);
$PAGE->set_url('/my/index.php', $params);
$PAGE->set_pagelayout('mydashboard');
$PAGE->set_pagetype('my-index');
$PAGE->blocks->add_region('content');
$PAGE->set_subpage($currentpage->id);
$PAGE->set_title($header);
$PAGE->set_heading($header);
// Toggle the editing state and switches
if ($PAGE->user_allowed_editing()) {
if ($edit !== null) { // Editing state was specified
$USER->editing = $edit; // Change editing state
if (!$currentpage->userid && $edit) {
// If we are viewing a system page as ordinary user, and the user turns
// editing on, copy the system pages as new user pages, and get the
// new page record
if (!$currentpage = my_copy_page($USER->id, MY_PAGE_PRIVATE)) {
print_error('mymoodlesetup');
}
$context = get_context_instance(CONTEXT_USER, $USER->id);
$PAGE->set_context($context);
$PAGE->set_subpage($currentpage->id);
}
} else { // Editing state is in session
if ($currentpage->userid) { // It's a page we can edit, so load from session
if (!empty($USER->editing)) {
$edit = 1;
} else {
$edit = 0;
}
} else { // It's a system page and they are not allowed to edit system pages
$USER->editing = $edit = 0; // Disable editing completely, just to be safe
}
}
// Add button for editing page
$params = array('edit' => !$edit);
if (!$currentpage->userid) {
// viewing a system page -- let the user customise it
$editstring = get_string('updatemymoodleon');
$params['edit'] = 1;
} else if (empty($edit)) {
$editstring = get_string('updatemymoodleon');
} else {
$editstring = get_string('updatemymoodleoff');
}
$url = new moodle_url("$CFG->wwwroot/my/index.php", $params);
$button = $OUTPUT->single_button($url, $editstring);
$PAGE->set_button($button);
} else {
$USER->editing = $edit = 0;
}
// HACK WARNING! This loads up all this page's blocks in the system context
if ($currentpage->userid == 0) {
$CFG->blockmanagerclass = 'my_syspage_block_manager';
}
echo $OUTPUT->header();
echo $OUTPUT->blocks_for_region('content');
echo $OUTPUT->footer();