Search moodle.org's
Developer Documentation


/ -> 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   * Moodle frontpage.
  19   *
  20   * @package    core
  21   * @copyright  1999 onwards Martin Dougiamas (http://dougiamas.com)
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  if (!file_exists('./config.php')) {
  26      header('Location: install.php');
  27      die;
  28  }
  29  
  30  require_once('config.php');
  31  require_once($CFG->dirroot .'/course/lib.php');
  32  require_once($CFG->libdir .'/filelib.php');
  33  
  34  redirect_if_major_upgrade_required();
  35  
  36  $urlparams = array();
  37  if (!empty($CFG->defaulthomepage) && ($CFG->defaulthomepage == HOMEPAGE_MY) && optional_param('redirect', 1, PARAM_BOOL) === 0) {
  38      $urlparams['redirect'] = 0;
  39  }
  40  $PAGE->set_url('/', $urlparams);
  41  $PAGE->set_course($SITE);
  42  $PAGE->set_other_editing_capability('moodle/course:update');
  43  $PAGE->set_other_editing_capability('moodle/course:manageactivities');
  44  $PAGE->set_other_editing_capability('moodle/course:activityvisibility');
  45  
  46  // Prevent caching of this page to stop confusion when changing page after making AJAX changes.
  47  $PAGE->set_cacheable(false);
  48  
  49  if ($CFG->forcelogin) {
  50      require_login();
  51  } else {
  52      user_accesstime_log();
  53  }
  54  
  55  $hasmaintenanceaccess = has_capability('moodle/site:maintenanceaccess', context_system::instance());
  56  
  57  // If the site is currently under maintenance, then print a message.
  58  if (!empty($CFG->maintenance_enabled) and !$hasmaintenanceaccess) {
  59      print_maintenance_message();
  60  }
  61  
  62  $hassiteconfig = has_capability('moodle/site:config', context_system::instance());
  63  
  64  if ($hassiteconfig && moodle_needs_upgrading()) {
  65      redirect($CFG->wwwroot .'/'. $CFG->admin .'/index.php');
  66  }
  67  
  68  if (get_home_page() != HOMEPAGE_SITE) {
  69      // Redirect logged-in users to My Moodle overview if required.
  70      $redirect = optional_param('redirect', 1, PARAM_BOOL);
  71      if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
  72          set_user_preference('user_home_page_preference', HOMEPAGE_SITE);
  73      } else if (!empty($CFG->defaulthomepage) && ($CFG->defaulthomepage == HOMEPAGE_MY) && $redirect === 1) {
  74          redirect($CFG->wwwroot .'/my/');
  75      } else if (!empty($CFG->defaulthomepage) && ($CFG->defaulthomepage == HOMEPAGE_USER)) {
  76          $frontpagenode = $PAGE->settingsnav->find('frontpage', null);
  77          if ($frontpagenode) {
  78              $frontpagenode->add(
  79                  get_string('makethismyhome'),
  80                  new moodle_url('/', array('setdefaulthome' => true)),
  81                  navigation_node::TYPE_SETTING);
  82          } else {
  83              $frontpagenode = $PAGE->settingsnav->add(get_string('frontpagesettings'), null, navigation_node::TYPE_SETTING, null);
  84              $frontpagenode->force_open();
  85              $frontpagenode->add(get_string('makethismyhome'),
  86                  new moodle_url('/', array('setdefaulthome' => true)),
  87                  navigation_node::TYPE_SETTING);
  88          }
  89      }
  90  }
  91  
  92  // Trigger event.
  93  course_view(context_course::instance(SITEID));
  94  
  95  // If the hub plugin is installed then we let it take over the homepage here.
  96  if (file_exists($CFG->dirroot.'/local/hub/lib.php') and get_config('local_hub', 'hubenabled')) {
  97      require_once($CFG->dirroot.'/local/hub/lib.php');
  98      $hub = new local_hub();
  99      $continue = $hub->display_homepage();
 100      // Function display_homepage() returns true if the hub home page is not displayed
 101      // ...mostly when search form is not displayed for not logged users.
 102      if (empty($continue)) {
 103          exit;
 104      }
 105  }
 106  
 107  $PAGE->set_pagetype('site-index');
 108  $PAGE->set_docs_path('');
 109  $PAGE->set_pagelayout('frontpage');
 110  $editing = $PAGE->user_is_editing();
 111  $PAGE->set_title($SITE->fullname);
 112  $PAGE->set_heading($SITE->fullname);
 113  $courserenderer = $PAGE->get_renderer('core', 'course');
 114  echo $OUTPUT->header();
 115  
 116  // Print Section or custom info.
 117  $siteformatoptions = course_get_format($SITE)->get_format_options();
 118  $modinfo = get_fast_modinfo($SITE);
 119  $modnames = get_module_types_names();
 120  $modnamesplural = get_module_types_names(true);
 121  $modnamesused = $modinfo->get_used_module_names();
 122  $mods = $modinfo->get_cms();
 123  
 124  if (!empty($CFG->customfrontpageinclude)) {
 125      include($CFG->customfrontpageinclude);
 126  
 127  } else if ($siteformatoptions['numsections'] > 0) {
 128      if ($editing) {
 129          // Make sure section with number 1 exists.
 130          course_create_sections_if_missing($SITE, 1);
 131          // Re-request modinfo in case section was created.
 132          $modinfo = get_fast_modinfo($SITE);
 133      }
 134      $section = $modinfo->get_section_info(1);
 135      if (($section && (!empty($modinfo->sections[1]) or !empty($section->summary))) or $editing) {
 136          echo $OUTPUT->box_start('generalbox sitetopic');
 137  
 138          // If currently moving a file then show the current clipboard.
 139          if (ismoving($SITE->id)) {
 140              $stractivityclipboard = strip_tags(get_string('activityclipboard', '', $USER->activitycopyname));
 141              echo '<p><font size="2">';
 142              echo "$stractivityclipboard&nbsp;&nbsp;(<a href=\"course/mod.php?cancelcopy=true&amp;sesskey=".sesskey()."\">";
 143              echo get_string('cancel') . '</a>)';
 144              echo '</font></p>';
 145          }
 146  
 147          $context = context_course::instance(SITEID);
 148  
 149          // If the section name is set we show it.
 150          if (trim($section->name) !== '') {
 151              echo $OUTPUT->heading(
 152                  format_string($section->name, true, array('context' => $context)),
 153                  2,
 154                  'sectionname'
 155              );
 156          }
 157  
 158          $summarytext = file_rewrite_pluginfile_urls($section->summary,
 159              'pluginfile.php',
 160              $context->id,
 161              'course',
 162              'section',
 163              $section->id);
 164          $summaryformatoptions = new stdClass();
 165          $summaryformatoptions->noclean = true;
 166          $summaryformatoptions->overflowdiv = true;
 167  
 168          echo format_text($summarytext, $section->summaryformat, $summaryformatoptions);
 169  
 170          if ($editing && has_capability('moodle/course:update', $context)) {
 171              $streditsummary = get_string('editsummary');
 172              echo "<a title=\"$streditsummary\" ".
 173                   " href=\"course/editsection.php?id=$section->id\"><img src=\"" . $OUTPUT->pix_url('t/edit') . "\" ".
 174                   " class=\"iconsmall\" alt=\"$streditsummary\" /></a><br /><br />";
 175          }
 176  
 177          $courserenderer = $PAGE->get_renderer('core', 'course');
 178          echo $courserenderer->course_section_cm_list($SITE, $section);
 179  
 180          echo $courserenderer->course_section_add_cm_control($SITE, $section->section);
 181          echo $OUTPUT->box_end();
 182      }
 183  }
 184  // Include course AJAX.
 185  include_course_ajax($SITE, $modnamesused);
 186  
 187  if (isloggedin() and !isguestuser() and isset($CFG->frontpageloggedin)) {
 188      $frontpagelayout = $CFG->frontpageloggedin;
 189  } else {
 190      $frontpagelayout = $CFG->frontpage;
 191  }
 192  
 193  foreach (explode(',', $frontpagelayout) as $v) {
 194      switch ($v) {
 195          // Display the main part of the front page.
 196          case FRONTPAGENEWS:
 197              if ($SITE->newsitems) {
 198                  // Print forums only when needed.
 199                  require_once($CFG->dirroot .'/mod/forum/lib.php');
 200  
 201                  if (! $newsforum = forum_get_course_forum($SITE->id, 'news')) {
 202                      print_error('cannotfindorcreateforum', 'forum');
 203                  }
 204  
 205                  // Fetch news forum context for proper filtering to happen.
 206                  $newsforumcm = get_coursemodule_from_instance('forum', $newsforum->id, $SITE->id, false, MUST_EXIST);
 207                  $newsforumcontext = context_module::instance($newsforumcm->id, MUST_EXIST);
 208  
 209                  $forumname = format_string($newsforum->name, true, array('context' => $newsforumcontext));
 210                  echo html_writer::link('#skipsitenews',
 211                      get_string('skipa', 'access', core_text::strtolower(strip_tags($forumname))),
 212                      array('class' => 'skip-block skip'));
 213  
 214                  // Wraps site news forum in div container.
 215                  echo html_writer::start_tag('div', array('id' => 'site-news-forum'));
 216  
 217                  if (isloggedin()) {
 218                      $SESSION->fromdiscussion = $CFG->wwwroot;
 219                      $subtext = '';
 220                      if (\mod_forum\subscriptions::is_subscribed($USER->id, $newsforum)) {
 221                          if (!\mod_forum\subscriptions::is_forcesubscribed($newsforum)) {
 222                              $subtext = get_string('unsubscribe', 'forum');
 223                          }
 224                      } else {
 225                          $subtext = get_string('subscribe', 'forum');
 226                      }
 227                      echo $OUTPUT->heading($forumname);
 228                      $suburl = new moodle_url('/mod/forum/subscribe.php', array('id' => $newsforum->id, 'sesskey' => sesskey()));
 229                      echo html_writer::tag('div', html_writer::link($suburl, $subtext), array('class' => 'subscribelink'));
 230                  } else {
 231                      echo $OUTPUT->heading($forumname);
 232                  }
 233  
 234                  forum_print_latest_discussions($SITE, $newsforum, $SITE->newsitems, 'plain', 'p.modified DESC');
 235  
 236                  // End site news forum div container.
 237                  echo html_writer::end_tag('div');
 238  
 239                  echo html_writer::tag('span', '', array('class' => 'skip-block-to', 'id' => 'skipsitenews'));
 240              }
 241          break;
 242  
 243          case FRONTPAGEENROLLEDCOURSELIST:
 244              $mycourseshtml = $courserenderer->frontpage_my_courses();
 245              if (!empty($mycourseshtml)) {
 246                  echo html_writer::link('#skipmycourses',
 247                      get_string('skipa', 'access', core_text::strtolower(get_string('mycourses'))),
 248                      array('class' => 'skip skip-block'));
 249  
 250                  // Wrap frontpage course list in div container.
 251                  echo html_writer::start_tag('div', array('id' => 'frontpage-course-list'));
 252  
 253                  echo $OUTPUT->heading(get_string('mycourses'));
 254                  echo $mycourseshtml;
 255  
 256                  // End frontpage course list div container.
 257                  echo html_writer::end_tag('div');
 258  
 259                  echo html_writer::tag('span', '', array('class' => 'skip-block-to', 'id' => 'skipmycourses'));
 260                  break;
 261              }
 262              // No "break" here. If there are no enrolled courses - continue to 'Available courses'.
 263  
 264          case FRONTPAGEALLCOURSELIST:
 265              $availablecourseshtml = $courserenderer->frontpage_available_courses();
 266              if (!empty($availablecourseshtml)) {
 267                  echo html_writer::link('#skipavailablecourses',
 268                      get_string('skipa', 'access', core_text::strtolower(get_string('availablecourses'))),
 269                      array('class' => 'skip skip-block'));
 270  
 271                  // Wrap frontpage course list in div container.
 272                  echo html_writer::start_tag('div', array('id' => 'frontpage-course-list'));
 273  
 274                  echo $OUTPUT->heading(get_string('availablecourses'));
 275                  echo $availablecourseshtml;
 276  
 277                  // End frontpage course list div container.
 278                  echo html_writer::end_tag('div');
 279  
 280                  echo html_writer::tag('span', '', array('class' => 'skip-block-to', 'id' => 'skipavailablecourses'));
 281              }
 282          break;
 283  
 284          case FRONTPAGECATEGORYNAMES:
 285              echo html_writer::link('#skipcategories',
 286                  get_string('skipa', 'access', core_text::strtolower(get_string('categories'))),
 287                  array('class' => 'skip skip-block'));
 288  
 289              // Wrap frontpage category names in div container.
 290              echo html_writer::start_tag('div', array('id' => 'frontpage-category-names'));
 291  
 292              echo $OUTPUT->heading(get_string('categories'));
 293              echo $courserenderer->frontpage_categories_list();
 294  
 295              // End frontpage category names div container.
 296              echo html_writer::end_tag('div');
 297  
 298              echo html_writer::tag('span', '', array('class' => 'skip-block-to', 'id' => 'skipcategories'));
 299          break;
 300  
 301          case FRONTPAGECATEGORYCOMBO:
 302              echo html_writer::link('#skipcourses',
 303                  get_string('skipa', 'access', core_text::strtolower(get_string('courses'))),
 304                  array('class' => 'skip skip-block'));
 305  
 306              // Wrap frontpage category combo in div container.
 307              echo html_writer::start_tag('div', array('id' => 'frontpage-category-combo'));
 308  
 309              echo $OUTPUT->heading(get_string('courses'));
 310              echo $courserenderer->frontpage_combo_list();
 311  
 312              // End frontpage category combo div container.
 313              echo html_writer::end_tag('div');
 314  
 315              echo html_writer::tag('span', '', array('class' => 'skip-block-to', 'id' => 'skipcourses'));
 316          break;
 317  
 318          case FRONTPAGECOURSESEARCH:
 319              echo $OUTPUT->box($courserenderer->course_search_form('', 'short'), 'mdl-align');
 320          break;
 321  
 322      }
 323      echo '<br />';
 324  }
 325  if ($editing && has_capability('moodle/course:create', context_system::instance())) {
 326      echo $courserenderer->add_new_course_button();
 327  }
 328  echo $OUTPUT->footer();

Search This Site: