Commit | Line | Data |
---|---|---|
474f6bfe | 1 | <?php |
0cfb6a52 | 2 | |
af9f5430 PS |
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. | |
14 | // | |
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/>. | |
17 | ||
18 | /** | |
19 | * Moodle frontpage. | |
20 | * | |
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 | |
24 | */ | |
0cfb6a52 | 25 | |
8b5b1028 | 26 | if (!file_exists('./config.php')) { |
27 | header('Location: install.php'); | |
28 | die; | |
29 | } | |
30 | ||
d41746c9 | 31 | require_once('config.php'); |
32 | require_once($CFG->dirroot .'/course/lib.php'); | |
644d506a | 33 | require_once($CFG->libdir .'/filelib.php'); |
364fffda | 34 | |
5e39d7aa | 35 | redirect_if_major_upgrade_required(); |
89d1efe4 | 36 | |
0a45ffe3 | 37 | if ($CFG->forcelogin) { |
38 | require_login(); | |
341b5ed2 | 39 | } else { |
40 | user_accesstime_log(); | |
0a45ffe3 | 41 | } |
42 | ||
32b9e80b SH |
43 | $hassiteconfig = has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)); |
44 | ||
4766a50c SH |
45 | $PAGE->set_url('/'); |
46 | $PAGE->set_course($SITE); | |
47 | ||
4fe2250a | 48 | /// If the site is currently under maintenance, then print a message |
32b9e80b | 49 | if (!empty($CFG->maintenance_enabled) and !$hassiteconfig) { |
4fe2250a | 50 | print_maintenance_message(); |
51 | } | |
52 | ||
32b9e80b SH |
53 | if ($hassiteconfig && moodle_needs_upgrading()) { |
54 | redirect($CFG->wwwroot .'/'. $CFG->admin .'/index.php'); | |
55 | } | |
56 | ||
57 | if (get_home_page() != HOMEPAGE_SITE) { | |
4766a50c SH |
58 | // Redirect logged-in users to My Moodle overview if required |
59 | if (optional_param('setdefaulthome', false, PARAM_BOOL)) { | |
60 | set_user_preference('user_home_page_preference', HOMEPAGE_SITE); | |
ecb731cb | 61 | } else if ($CFG->defaulthomepage == HOMEPAGE_MY && optional_param('redirect', 1, PARAM_BOOL) === 1) { |
4766a50c SH |
62 | redirect($CFG->wwwroot .'/my/'); |
63 | } else if (!empty($CFG->defaulthomepage) && $CFG->defaulthomepage == HOMEPAGE_USER) { | |
64 | $PAGE->settingsnav->get('usercurrentsettings')->add(get_string('makethismyhome'), new moodle_url('/', array('setdefaulthome'=>true)), navigation_node::TYPE_SETTING); | |
18818abf | 65 | } |
3565715c | 66 | } |
67 | ||
4f0c2d00 | 68 | if (isloggedin()) { |
34dd5900 | 69 | add_to_log(SITEID, 'course', 'view', 'view.php?id='.SITEID, SITEID); |
a325bd2b | 70 | } |
a5e3644b | 71 | |
825b6fdb | 72 | /// If the hub plugin is installed then we let it take over the homepage here |
abf63f98 | 73 | if (get_config('local_hub', 'hubenabled') && file_exists($CFG->dirroot.'/local/hub/lib.php')) { |
74 | require_once($CFG->dirroot.'/local/hub/lib.php'); | |
75 | $hub = new local_hub(); | |
a4e56bf3 | 76 | $continue = $hub->display_homepage(); |
77 | //display_homepage() return true if the hub home page is not displayed | |
78 | //mostly when search form is not displayed for not logged users | |
79 | if (empty($continue)) { | |
80 | exit; | |
81 | } | |
abf63f98 | 82 | } |
83 | ||
f8065dd2 | 84 | $PAGE->set_pagetype('site-index'); |
cfcfb9f3 | 85 | $PAGE->set_other_editing_capability('moodle/course:manageactivities'); |
82611d8d | 86 | $PAGE->set_docs_path(''); |
191b267b | 87 | $PAGE->set_pagelayout('frontpage'); |
ad52c04f | 88 | $editing = $PAGE->user_is_editing(); |
d4a03c00 | 89 | $PAGE->set_title($SITE->fullname); |
90 | $PAGE->set_heading($SITE->fullname); | |
244a32c6 | 91 | echo $OUTPUT->header(); |
8c336db1 | 92 | |
8275eab8 PS |
93 | /// Print Section or custom info |
94 | if (!empty($CFG->customfrontpageinclude)) { | |
95 | include($CFG->customfrontpageinclude); | |
96 | ||
97 | } else if ($SITE->numsections > 0) { | |
5fc2f2fd | 98 | |
f33e1ed4 | 99 | if (!$section = $DB->get_record('course_sections', array('course'=>$SITE->id, 'section'=>1))) { |
8618fd2a | 100 | $DB->delete_records('course_sections', array('course'=>$SITE->id, 'section'=>1)); // Just in case |
78ba4d06 | 101 | $section->course = $SITE->id; |
45a6b40d | 102 | $section->section = 1; |
103 | $section->summary = ''; | |
09eb2151 | 104 | $section->summaryformat = FORMAT_HTML; |
a2b82263 | 105 | $section->sequence = ''; |
45a6b40d | 106 | $section->visible = 1; |
f33e1ed4 | 107 | $section->id = $DB->insert_record('course_sections', $section); |
45a6b40d | 108 | } |
5fc2f2fd | 109 | |
64f93798 | 110 | if (!empty($section->sequence) or !empty($section->summary) or $editing) { |
20486a5a | 111 | echo $OUTPUT->box_start('generalbox sitetopic'); |
5fc2f2fd | 112 | |
a2b82263 | 113 | /// If currently moving a file then show the current clipboard |
114 | if (ismoving($SITE->id)) { | |
294ce987 | 115 | $stractivityclipboard = strip_tags(get_string('activityclipboard', '', $USER->activitycopyname)); |
a2b82263 | 116 | echo '<p><font size="2">'; |
973d2660 | 117 | echo "$stractivityclipboard (<a href=\"course/mod.php?cancelcopy=true&sesskey=".sesskey()."\">". get_string('cancel') .'</a>)'; |
a2b82263 | 118 | echo '</font></p>'; |
119 | } | |
5fc2f2fd | 120 | |
644d506a | 121 | $context = get_context_instance(CONTEXT_COURSE, SITEID); |
64f93798 | 122 | $summarytext = file_rewrite_pluginfile_urls($section->summary, 'pluginfile.php', $context->id, 'course', 'section', $section->id); |
a226a972 | 123 | $summaryformatoptions = new stdClass(); |
644d506a | 124 | $summaryformatoptions->noclean = true; |
367a75fa | 125 | $summaryformatoptions->overflowdiv = true; |
644d506a | 126 | |
e34a326f | 127 | echo format_text($summarytext, $section->summaryformat, $summaryformatoptions); |
5fc2f2fd | 128 | |
a2b82263 | 129 | if ($editing) { |
130 | $streditsummary = get_string('editsummary'); | |
131 | echo "<a title=\"$streditsummary\" ". | |
b5d0cafc | 132 | " href=\"course/editsection.php?id=$section->id\"><img src=\"" . $OUTPUT->pix_url('t/edit') . "\" ". |
0d905d9f | 133 | " class=\"iconsmall\" alt=\"$streditsummary\" /></a><br /><br />"; |
a2b82263 | 134 | } |
135 | ||
136 | get_all_mods($SITE->id, $mods, $modnames, $modnamesplural, $modnamesused); | |
137 | print_section($SITE, $section, $mods, $modnamesused, true); | |
364fffda | 138 | |
a2b82263 | 139 | if ($editing) { |
140 | print_section_add_menus($SITE, $section->section, $modnames); | |
141 | } | |
20486a5a | 142 | echo $OUTPUT->box_end(); |
5fc2f2fd | 143 | } |
5fc2f2fd | 144 | } |
145 | ||
64f93798 | 146 | if (isloggedin() and !isguestuser() and isset($CFG->frontpageloggedin)) { |
6f24e48e | 147 | $frontpagelayout = $CFG->frontpageloggedin; |
148 | } else { | |
149 | $frontpagelayout = $CFG->frontpage; | |
150 | } | |
151 | ||
64f93798 | 152 | foreach (explode(',',$frontpagelayout) as $v) { |
e1638d61 | 153 | switch ($v) { /// Display the main part of the front page. |
220a90c5 | 154 | case FRONTPAGENEWS: |
e1638d61 | 155 | if ($SITE->newsitems) { // Print forums only when needed |
156 | require_once($CFG->dirroot .'/mod/forum/lib.php'); | |
157 | ||
158 | if (! $newsforum = forum_get_course_forum($SITE->id, 'news')) { | |
33aa5723 | 159 | print_error('cannotfindorcreateforum', 'forum'); |
e1638d61 | 160 | } |
c3b825e1 EL |
161 | |
162 | // fetch news forum context for proper filtering to happen | |
163 | $newsforumcm = get_coursemodule_from_instance('forum', $newsforum->id, $SITE->id, false, MUST_EXIST); | |
164 | $newsforumcontext = get_context_instance(CONTEXT_MODULE, $newsforumcm->id, MUST_EXIST); | |
165 | ||
166 | $forumname = format_string($newsforum->name, true, array('context' => $newsforumcontext)); | |
167 | echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(strip_tags($forumname))), array('href'=>'#skipsitenews', 'class'=>'skip-block')); | |
e1638d61 | 168 | |
4f0c2d00 | 169 | if (isloggedin()) { |
e1638d61 | 170 | $SESSION->fromdiscussion = $CFG->wwwroot; |
6e5e0c93 | 171 | $subtext = ''; |
90f4745c | 172 | if (forum_is_subscribed($USER->id, $newsforum)) { |
730535cb | 173 | if (!forum_is_forcesubscribed($newsforum)) { |
174 | $subtext = get_string('unsubscribe', 'forum'); | |
175 | } | |
e1638d61 | 176 | } else { |
177 | $subtext = get_string('subscribe', 'forum'); | |
178 | } | |
c3b825e1 | 179 | echo $OUTPUT->heading($forumname, 2, 'headingblock header'); |
6f7d65c7 DM |
180 | $suburl = new moodle_url('/mod/forum/subscribe.php', array('id' => $newsforum->id, 'sesskey' => sesskey())); |
181 | echo html_writer::tag('div', html_writer::link($suburl, $subtext), array('class' => 'subscribelink')); | |
af328e4b | 182 | } else { |
c3b825e1 | 183 | echo $OUTPUT->heading($forumname, 2, 'headingblock header'); |
af328e4b | 184 | } |
e1638d61 | 185 | |
a5a9cd99 | 186 | forum_print_latest_discussions($SITE, $newsforum, $SITE->newsitems, 'plain', 'p.modified DESC'); |
fd2aa40b | 187 | echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipsitenews')); |
89adb174 | 188 | } |
e1638d61 | 189 | break; |
89adb174 | 190 | |
64f93798 | 191 | case FRONTPAGECOURSELIST: |
32b9e80b | 192 | if (isloggedin() and !$hassiteconfig and !isguestuser() and empty($CFG->disablemycourses)) { |
fd2aa40b | 193 | echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('mycourses'))), array('href'=>'#skipmycourses', 'class'=>'skip-block')); |
706b82da | 194 | echo $OUTPUT->heading(get_string('mycourses'), 2, 'headingblock header'); |
e1638d61 | 195 | print_my_moodle(); |
fd2aa40b | 196 | echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipmycourses')); |
32b9e80b | 197 | } else if ((!$hassiteconfig and !isguestuser()) or ($DB->count_records('course') <= FRONTPAGECOURSELIMIT)) { |
fe2920ad | 198 | // admin should not see list of courses when there are too many of them |
fd2aa40b | 199 | echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('availablecourses'))), array('href'=>'#skipavailablecourses', 'class'=>'skip-block')); |
706b82da | 200 | echo $OUTPUT->heading(get_string('availablecourses'), 2, 'headingblock header'); |
5f6b9c09 | 201 | print_courses(0); |
fd2aa40b | 202 | echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipavailablecourses')); |
64f93798 | 203 | } |
e1638d61 | 204 | break; |
89adb174 | 205 | |
e0140f24 | 206 | case FRONTPAGECATEGORYNAMES: |
fd2aa40b | 207 | echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('categories'))), array('href'=>'#skipcategories', 'class'=>'skip-block')); |
706b82da | 208 | echo $OUTPUT->heading(get_string('categories'), 2, 'headingblock header'); |
20486a5a | 209 | echo $OUTPUT->box_start('generalbox categorybox'); |
d157bd5b | 210 | print_whole_category_list(NULL, NULL, NULL, -1, false); |
20486a5a | 211 | echo $OUTPUT->box_end(); |
e0140f24 | 212 | print_course_search('', false, 'short'); |
fd2aa40b | 213 | echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipcategories')); |
e0140f24 | 214 | break; |
215 | ||
6f24e48e | 216 | case FRONTPAGECATEGORYCOMBO: |
fd2aa40b RW |
217 | echo html_writer::tag('a', get_string('skipa', 'access', moodle_strtolower(get_string('courses'))), array('href'=>'#skipcourses', 'class'=>'skip-block')); |
218 | echo $OUTPUT->heading(get_string('courses'), 2, 'headingblock header'); | |
24e27ac0 | 219 | $renderer = $PAGE->get_renderer('core','course'); |
2848b979 DC |
220 | // if there are too many courses, budiling course category tree could be slow, |
221 | // users should go to course index page to see the whole list. | |
222 | $coursecount = $DB->count_records('course'); | |
223 | if (empty($CFG->numcoursesincombo)) { | |
224 | // if $CFG->numcoursesincombo hasn't been set, use default value 500 | |
225 | $CFG->numcoursesincombo = 500; | |
226 | } | |
227 | if ($coursecount > $CFG->numcoursesincombo) { | |
228 | $link = new moodle_url('/course/'); | |
229 | echo $OUTPUT->notification(get_string('maxnumcoursesincombo', 'moodle', array('link'=>$link->out(), 'maxnumofcourses'=>$CFG->numcoursesincombo, 'numberofcourses'=>$coursecount))); | |
230 | } else { | |
231 | echo $renderer->course_category_tree(get_course_category_tree()); | |
232 | } | |
6f24e48e | 233 | print_course_search('', false, 'short'); |
fd2aa40b | 234 | echo html_writer::tag('span', '', array('class'=>'skip-block-to', 'id'=>'skipcourses')); |
6f24e48e | 235 | break; |
236 | ||
e1638d61 | 237 | case FRONTPAGETOPICONLY: // Do nothing!! :-) |
238 | break; | |
5eafd948 | 239 | |
e1638d61 | 240 | } |
241 | echo '<br />'; | |
89adb174 | 242 | } |
243 | ||
d4a03c00 | 244 | echo $OUTPUT->footer(); |