[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/my/ -> index.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * My Moodle -- a user's personal dashboard
  19   *
  20   * - each user can currently have their own page (cloned from system and then customised)
  21   * - only the user can see their own dashboard
  22   * - users can add any blocks they want
  23   * - the administrators can define a default site dashboard for users who have
  24   *   not created their own dashboard
  25   *
  26   * This script implements the user's view of the dashboard, and allows editing
  27   * of the dashboard.
  28   *
  29   * @package    moodlecore
  30   * @subpackage my
  31   * @copyright  2010 Remote-Learner.net
  32   * @author     Hubert Chathi <hubert@remote-learner.net>
  33   * @author     Olav Jordan <olav.jordan@remote-learner.net>
  34   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  35   */
  36  
  37  require_once(__DIR__ . '/../config.php');
  38  require_once($CFG->dirroot . '/my/lib.php');
  39  
  40  redirect_if_major_upgrade_required();
  41  
  42  // TODO Add sesskey check to edit
  43  $edit   = optional_param('edit', null, PARAM_BOOL);    // Turn editing on and off
  44  $reset  = optional_param('reset', null, PARAM_BOOL);
  45  
  46  require_login();
  47  
  48  $hassiteconfig = has_capability('moodle/site:config', context_system::instance());
  49  if ($hassiteconfig && moodle_needs_upgrading()) {
  50      redirect(new moodle_url('/admin/index.php'));
  51  }
  52  
  53  $strmymoodle = get_string('myhome');
  54  
  55  if (isguestuser()) {  // Force them to see system default, no editing allowed
  56      // If guests are not allowed my moodle, send them to front page.
  57      if (empty($CFG->allowguestmymoodle)) {
  58          redirect(new moodle_url('/', array('redirect' => 0)));
  59      }
  60  
  61      $userid = null;
  62      $USER->editing = $edit = 0;  // Just in case
  63      $context = context_system::instance();
  64      $PAGE->set_blocks_editing_capability('moodle/my:configsyspages');  // unlikely :)
  65      $header = "$SITE->shortname: $strmymoodle (GUEST)";
  66      $pagetitle = $header;
  67  
  68  } else {        // We are trying to view or edit our own My Moodle page
  69      $userid = $USER->id;  // Owner of the page
  70      $context = context_user::instance($USER->id);
  71      $PAGE->set_blocks_editing_capability('moodle/my:manageblocks');
  72      $header = fullname($USER);
  73      $pagetitle = $strmymoodle;
  74  }
  75  
  76  // Get the My Moodle page info.  Should always return something unless the database is broken.
  77  if (!$currentpage = my_get_page($userid, MY_PAGE_PRIVATE)) {
  78      print_error('mymoodlesetup');
  79  }
  80  
  81  // Start setting up the page
  82  $params = array();
  83  $PAGE->set_context($context);
  84  $PAGE->set_url('/my/index.php', $params);
  85  $PAGE->set_pagelayout('mydashboard');
  86  $PAGE->set_pagetype('my-index');
  87  $PAGE->blocks->add_region('content');
  88  $PAGE->set_subpage($currentpage->id);
  89  $PAGE->set_title($pagetitle);
  90  $PAGE->set_heading($header);
  91  
  92  if (!isguestuser()) {   // Skip default home page for guests
  93      if (get_home_page() != HOMEPAGE_MY) {
  94          if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
  95              set_user_preference('user_home_page_preference', HOMEPAGE_MY);
  96          } else if (!empty($CFG->defaulthomepage) && $CFG->defaulthomepage == HOMEPAGE_USER) {
  97              $frontpagenode = $PAGE->settingsnav->add(get_string('frontpagesettings'), null, navigation_node::TYPE_SETTING, null);
  98              $frontpagenode->force_open();
  99              $frontpagenode->add(get_string('makethismyhome'), new moodle_url('/my/', array('setdefaulthome' => true)),
 100                      navigation_node::TYPE_SETTING);
 101          }
 102      }
 103  }
 104  
 105  // Toggle the editing state and switches
 106  if (empty($CFG->forcedefaultmymoodle) && $PAGE->user_allowed_editing()) {
 107      if ($reset !== null) {
 108          if (!is_null($userid)) {
 109              require_sesskey();
 110              if (!$currentpage = my_reset_page($userid, MY_PAGE_PRIVATE)) {
 111                  print_error('reseterror', 'my');
 112              }
 113              redirect(new moodle_url('/my'));
 114          }
 115      } else if ($edit !== null) {             // Editing state was specified
 116          $USER->editing = $edit;       // Change editing state
 117      } else {                          // Editing state is in session
 118          if ($currentpage->userid) {   // It's a page we can edit, so load from session
 119              if (!empty($USER->editing)) {
 120                  $edit = 1;
 121              } else {
 122                  $edit = 0;
 123              }
 124          } else {
 125              // For the page to display properly with the user context header the page blocks need to
 126              // be copied over to the user context.
 127              if (!$currentpage = my_copy_page($USER->id, MY_PAGE_PRIVATE)) {
 128                  print_error('mymoodlesetup');
 129              }
 130              $context = context_user::instance($USER->id);
 131              $PAGE->set_context($context);
 132              $PAGE->set_subpage($currentpage->id);
 133              // It's a system page and they are not allowed to edit system pages
 134              $USER->editing = $edit = 0;          // Disable editing completely, just to be safe
 135          }
 136      }
 137  
 138      // Add button for editing page
 139      $params = array('edit' => !$edit);
 140  
 141      $resetbutton = '';
 142      $resetstring = get_string('resetpage', 'my');
 143      $reseturl = new moodle_url("$CFG->wwwroot/my/index.php", array('edit' => 1, 'reset' => 1));
 144  
 145      if (!$currentpage->userid) {
 146          // viewing a system page -- let the user customise it
 147          $editstring = get_string('updatemymoodleon');
 148          $params['edit'] = 1;
 149      } else if (empty($edit)) {
 150          $editstring = get_string('updatemymoodleon');
 151      } else {
 152          $editstring = get_string('updatemymoodleoff');
 153          $resetbutton = $OUTPUT->single_button($reseturl, $resetstring);
 154      }
 155  
 156      $url = new moodle_url("$CFG->wwwroot/my/index.php", $params);
 157      $button = $OUTPUT->single_button($url, $editstring);
 158      $PAGE->set_button($resetbutton . $button);
 159  
 160  } else {
 161      $USER->editing = $edit = 0;
 162  }
 163  
 164  echo $OUTPUT->header();
 165  
 166  echo $OUTPUT->custom_block_region('content');
 167  
 168  echo $OUTPUT->footer();
 169  
 170  // Trigger dashboard has been viewed event.
 171  $eventparams = array('context' => $context);
 172  $event = \core\event\dashboard_viewed::create($eventparams);
 173  $event->trigger();


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1