Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
/my/ -> index.php (source)

Differences Between: [Versions 39 and 400] [Versions 39 and 401] [Versions 39 and 402] [Versions 39 and 403]

   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      $strguest = get_string('guest');
  66      $header = "$SITE->shortname: $strmymoodle ($strguest)";
  67      $pagetitle = $header;
  68  
  69  } else {        // We are trying to view or edit our own My Moodle page
  70      $userid = $USER->id;  // Owner of the page
  71      $context = context_user::instance($USER->id);
  72      $PAGE->set_blocks_editing_capability('moodle/my:manageblocks');
  73      $header = "$SITE->shortname: $strmymoodle";
  74      $pagetitle = $strmymoodle;
  75  }
  76  
  77  // Get the My Moodle page info.  Should always return something unless the database is broken.
  78  if (!$currentpage = my_get_page($userid, MY_PAGE_PRIVATE)) {
  79      print_error('mymoodlesetup');
  80  }
  81  
  82  // Start setting up the page
  83  $params = array();
  84  $PAGE->set_context($context);
  85  $PAGE->set_url('/my/index.php', $params);
  86  $PAGE->set_pagelayout('mydashboard');
  87  $PAGE->set_pagetype('my-index');
  88  $PAGE->blocks->add_region('content');
  89  $PAGE->set_subpage($currentpage->id);
  90  $PAGE->set_title($pagetitle);
  91  $PAGE->set_heading($header);
  92  
  93  if (!isguestuser()) {   // Skip default home page for guests
  94      if (get_home_page() != HOMEPAGE_MY) {
  95          if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
  96              set_user_preference('user_home_page_preference', HOMEPAGE_MY);
  97          } else if (!empty($CFG->defaulthomepage) && $CFG->defaulthomepage == HOMEPAGE_USER) {
  98              $frontpagenode = $PAGE->settingsnav->add(get_string('frontpagesettings'), null, navigation_node::TYPE_SETTING, null);
  99              $frontpagenode->force_open();
 100              $frontpagenode->add(get_string('makethismyhome'), new moodle_url('/my/', array('setdefaulthome' => true)),
 101                      navigation_node::TYPE_SETTING);
 102          }
 103      }
 104  }
 105  
 106  // Toggle the editing state and switches
 107  if (empty($CFG->forcedefaultmymoodle) && $PAGE->user_allowed_editing()) {
 108      if ($reset !== null) {
 109          if (!is_null($userid)) {
 110              require_sesskey();
 111              if (!$currentpage = my_reset_page($userid, MY_PAGE_PRIVATE)) {
 112                  print_error('reseterror', 'my');
 113              }
 114              redirect(new moodle_url('/my'));
 115          }
 116      } else if ($edit !== null) {             // Editing state was specified
 117          $USER->editing = $edit;       // Change editing state
 118      } else {                          // Editing state is in session
 119          if ($currentpage->userid) {   // It's a page we can edit, so load from session
 120              if (!empty($USER->editing)) {
 121                  $edit = 1;
 122              } else {
 123                  $edit = 0;
 124              }
 125          } else {
 126              // For the page to display properly with the user context header the page blocks need to
 127              // be copied over to the user context.
 128              if (!$currentpage = my_copy_page($USER->id, MY_PAGE_PRIVATE)) {
 129                  print_error('mymoodlesetup');
 130              }
 131              $context = context_user::instance($USER->id);
 132              $PAGE->set_context($context);
 133              $PAGE->set_subpage($currentpage->id);
 134              // It's a system page and they are not allowed to edit system pages
 135              $USER->editing = $edit = 0;          // Disable editing completely, just to be safe
 136          }
 137      }
 138  
 139      // Add button for editing page
 140      $params = array('edit' => !$edit);
 141  
 142      $resetbutton = '';
 143      $resetstring = get_string('resetpage', 'my');
 144      $reseturl = new moodle_url("$CFG->wwwroot/my/index.php", array('edit' => 1, 'reset' => 1));
 145  
 146      if (!$currentpage->userid) {
 147          // viewing a system page -- let the user customise it
 148          $editstring = get_string('updatemymoodleon');
 149          $params['edit'] = 1;
 150      } else if (empty($edit)) {
 151          $editstring = get_string('updatemymoodleon');
 152      } else {
 153          $editstring = get_string('updatemymoodleoff');
 154          $resetbutton = $OUTPUT->single_button($reseturl, $resetstring);
 155      }
 156  
 157      $url = new moodle_url("$CFG->wwwroot/my/index.php", $params);
 158      $button = $OUTPUT->single_button($url, $editstring);
 159      $PAGE->set_button($resetbutton . $button);
 160  
 161  } else {
 162      $USER->editing = $edit = 0;
 163  }
 164  
 165  echo $OUTPUT->header();
 166  
 167  if (core_userfeedback::should_display_reminder()) {
 168      core_userfeedback::print_reminder_block();
 169  }
 170  
 171  echo $OUTPUT->custom_block_region('content');
 172  
 173  echo $OUTPUT->footer();
 174  
 175  // Trigger dashboard has been viewed event.
 176  $eventparams = array('context' => $context);
 177  $event = \core\event\dashboard_viewed::create($eventparams);
 178  $event->trigger();