Merge branch 'MDL-26577_groups_api_refactor_take2' of git://github.com/nebgor/moodle
[moodle.git] / index.php
blobe943f435ec34ccced7c78c5e57495e620cd900d7
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 /**
19 * Moodle frontpage.
21 * @package core
22 * @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 if (!file_exists('./config.php')) {
27 header('Location: install.php');
28 die;
31 require_once('config.php');
32 require_once($CFG->dirroot .'/course/lib.php');
33 require_once($CFG->libdir .'/filelib.php');
35 redirect_if_major_upgrade_required();
37 if ($CFG->forcelogin) {
38 require_login();
39 } else {
40 user_accesstime_log();
43 $PAGE->set_url('/');
44 $PAGE->set_course($SITE);
46 /// If the site is currently under maintenance, then print a message
47 if (!empty($CFG->maintenance_enabled) and !has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
48 print_maintenance_message();
51 if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
52 if (moodle_needs_upgrading()) {
53 redirect($CFG->wwwroot .'/'. $CFG->admin .'/index.php');
55 } else if (get_home_page() != HOMEPAGE_SITE) {
56 // Redirect logged-in users to My Moodle overview if required
57 if (optional_param('setdefaulthome', false, PARAM_BOOL)) {
58 set_user_preference('user_home_page_preference', HOMEPAGE_SITE);
59 } else if ($CFG->defaulthomepage == HOMEPAGE_MY && optional_param('redirect', true, PARAM_BOOL)) {
60 redirect($CFG->wwwroot .'/my/');
61 } else if (!empty($CFG->defaulthomepage) && $CFG->defaulthomepage == HOMEPAGE_USER) {
62 $PAGE->settingsnav->get('usercurrentsettings')->add(get_string('makethismyhome'), new moodle_url('/', array('setdefaulthome'=>true)), navigation_node::TYPE_SETTING);
66 if (isloggedin()) {
67 add_to_log(SITEID, 'course', 'view', 'view.php?id='.SITEID, SITEID);
70 /// If the hub plugin is installed then we let it take over the homepage here
71 if (get_config('local_hub', 'hubenabled') && file_exists($CFG->dirroot.'/local/hub/lib.php')) {
72 require_once($CFG->dirroot.'/local/hub/lib.php');
73 $hub = new local_hub();
74 $continue = $hub->display_homepage();
75 //display_homepage() return true if the hub home page is not displayed
76 //mostly when search form is not displayed for not logged users
77 if (empty($continue)) {
78 exit;
82 $PAGE->set_pagetype('site-index');
83 $PAGE->set_other_editing_capability('moodle/course:manageactivities');
84 $PAGE->set_docs_path('');
85 $PAGE->set_pagelayout('frontpage');
86 $editing = $PAGE->user_is_editing();
87 $PAGE->set_title($SITE->fullname);
88 $PAGE->set_heading($SITE->fullname);
89 echo $OUTPUT->header();
91 //TODO: remove this notice once admins know they need to switch CVS and git branches, the reason is once we start changing DB there will not be any way back!
92 echo $OUTPUT->box('WARNING: this site is using 2.1dev codebase, please make sure this is is not a production server!!!', 'errorbox');
94 /// Print Section
95 if ($SITE->numsections > 0) {
97 if (!$section = $DB->get_record('course_sections', array('course'=>$SITE->id, 'section'=>1))) {
98 $DB->delete_records('course_sections', array('course'=>$SITE->id, 'section'=>1)); // Just in case
99 $section->course = $SITE->id;
100 $section->section = 1;
101 $section->summary = '';
102 $section->summaryformat = FORMAT_HTML;
103 $section->sequence = '';
104 $section->visible = 1;
105 $section->id = $DB->insert_record('course_sections', $section);
108 if (!empty($section->sequence) or !empty($section->summary) or $editing) {
109 echo $OUTPUT->box_start('generalbox sitetopic');
111 /// If currently moving a file then show the current clipboard
112 if (ismoving($SITE->id)) {
113 $stractivityclipboard = strip_tags(get_string('activityclipboard', '', $USER->activitycopyname));
114 echo '<p><font size="2">';
115 echo "$stractivityclipboard&nbsp;&nbsp;(<a href=\"course/mod.php?cancelcopy=true&amp;sesskey=".sesskey()."\">". get_string('cancel') .'</a>)';
116 echo '</font></p>';
119 $context = get_context_instance(CONTEXT_COURSE, SITEID);
120 $summarytext = file_rewrite_pluginfile_urls($section->summary, 'pluginfile.php', $context->id, 'course', 'section', $section->id);
121 $summaryformatoptions = new stdClass();
122 $summaryformatoptions->noclean = true;
123 $summaryformatoptions->overflowdiv = true;
125 echo format_text($summarytext, $section->summaryformat, $summaryformatoptions);
127 if ($editing) {
128 $streditsummary = get_string('editsummary');
129 echo "<a title=\"$streditsummary\" ".
130 " href=\"course/editsection.php?id=$section->id\"><img src=\"" . $OUTPUT->pix_url('t/edit') . "\" ".
131 " class=\"iconsmall\" alt=\"$streditsummary\" /></a><br /><br />";
134 get_all_mods($SITE->id, $mods, $modnames, $modnamesplural, $modnamesused);
135 print_section($SITE, $section, $mods, $modnamesused, true);
137 if ($editing) {
138 print_section_add_menus($SITE, $section->section, $modnames);
140 echo $OUTPUT->box_end();
144 if (isloggedin() and !isguestuser() and isset($CFG->frontpageloggedin)) {
145 $frontpagelayout = $CFG->frontpageloggedin;
146 } else {
147 $frontpagelayout = $CFG->frontpage;
150 foreach (explode(',',$frontpagelayout) as $v) {
151 switch ($v) { /// Display the main part of the front page.
152 case FRONTPAGENEWS:
153 if ($SITE->newsitems) { // Print forums only when needed
154 require_once($CFG->dirroot .'/mod/forum/lib.php');
156 if (! $newsforum = forum_get_course_forum($SITE->id, 'news')) {
157 print_error('cannotfindorcreateforum', 'forum');
159 echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower($newsforum->name)), array('href'=>'#skipsitenews', 'class'=>'skip-block'));
161 if (isloggedin()) {
162 $SESSION->fromdiscussion = $CFG->wwwroot;
163 $subtext = '';
164 if (forum_is_subscribed($USER->id, $newsforum)) {
165 if (!forum_is_forcesubscribed($newsforum)) {
166 $subtext = get_string('unsubscribe', 'forum');
168 } else {
169 $subtext = get_string('subscribe', 'forum');
171 echo $OUTPUT->heading($newsforum->name, 2, 'headingblock header');
172 $suburl = new moodle_url('/mod/forum/subscribe.php', array('id' => $newsforum->id, 'sesskey' => sesskey()));
173 echo html_writer::tag('div', html_writer::link($suburl, $subtext), array('class' => 'subscribelink'));
174 } else {
175 echo $OUTPUT->heading($newsforum->name, 2, 'headingblock header');
178 forum_print_latest_discussions($SITE, $newsforum, $SITE->newsitems, 'plain', 'p.modified DESC');
179 echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipsitenews'));
181 break;
183 case FRONTPAGECOURSELIST:
184 if (isloggedin() and !has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)) and !isguestuser() and empty($CFG->disablemycourses)) {
185 echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('mycourses'))), array('href'=>'#skipmycourses', 'class'=>'skip-block'));
186 echo $OUTPUT->heading(get_string('mycourses'), 2, 'headingblock header');
187 print_my_moodle();
188 echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipmycourses'));
189 } else if ((!has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)) and !isguestuser()) or ($DB->count_records('course') <= FRONTPAGECOURSELIMIT)) {
190 // admin should not see list of courses when there are too many of them
191 echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('availablecourses'))), array('href'=>'#skipavailablecourses', 'class'=>'skip-block'));
192 echo $OUTPUT->heading(get_string('availablecourses'), 2, 'headingblock header');
193 print_courses(0);
194 echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipavailablecourses'));
196 break;
198 case FRONTPAGECATEGORYNAMES:
199 echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('categories'))), array('href'=>'#skipcategories', 'class'=>'skip-block'));
200 echo $OUTPUT->heading(get_string('categories'), 2, 'headingblock header');
201 echo $OUTPUT->box_start('generalbox categorybox');
202 print_whole_category_list(NULL, NULL, NULL, -1, false);
203 echo $OUTPUT->box_end();
204 print_course_search('', false, 'short');
205 echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipcategories'));
206 break;
208 case FRONTPAGECATEGORYCOMBO:
209 echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('courses'))), array('href'=>'#skipcourses', 'class'=>'skip-block'));
210 echo $OUTPUT->heading(get_string('courses'), 2, 'headingblock header');
211 $renderer = $PAGE->get_renderer('core','course');
212 // if there are too many courses, budiling course category tree could be slow,
213 // users should go to course index page to see the whole list.
214 $coursecount = $DB->count_records('course');
215 if (empty($CFG->numcoursesincombo)) {
216 // if $CFG->numcoursesincombo hasn't been set, use default value 500
217 $CFG->numcoursesincombo = 500;
219 if ($coursecount > $CFG->numcoursesincombo) {
220 $link = new moodle_url('/course/');
221 echo $OUTPUT->notification(get_string('maxnumcoursesincombo', 'moodle', array('link'=>$link->out(), 'maxnumofcourses'=>$CFG->numcoursesincombo, 'numberofcourses'=>$coursecount)));
222 } else {
223 echo $renderer->course_category_tree(get_course_category_tree());
225 print_course_search('', false, 'short');
226 echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipcourses'));
227 break;
229 case FRONTPAGETOPICONLY: // Do nothing!! :-)
230 break;
233 echo '<br />';
236 echo $OUTPUT->footer();