Newer
Older
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Course overview block for UW Moodle
*
* This block improves on the course_summary block by presenting courses sorted by term.
* It also allows showing/hiding of terms and course news summaries.
*
Matt Petro
committed
* The block is dependent on the UW enrollment plugins and is largely coped from the existing course_overview block.
* I've left copyright statements for the original authors on most files.
*
* @author Matt Petro
*/
Matt Petro
committed
require_once($CFG->dirroot.'/blocks/course_overview_uwmoodle/locallib.php');
class block_course_overview_uwmoodle extends block_base {
/**
* block initializations
*/
public function init() {
$this->title = get_string('pluginname', 'block_course_overview_uwmoodle');
}
Matt Petro
committed
const TERM_OTHER = 0; // our "term_code" for non-timetable classes
/**
* block contents
*
* @return object
*/
public function get_content() {
Matt Petro
committed
global $USER, $CFG, $DB;
if($this->content !== NULL) {
return $this->content;
}
Matt Petro
committed
$config = get_config('block_course_overview_uwmoodle');
Matt Petro
committed
$this->content = new stdClass();
$this->content->text = '';
$this->content->footer = "<a href=\"$CFG->wwwroot/course/index.php\">".get_string("fulllistofcourses")."</a> ...";;
Matt Petro
committed
$content = array();$this->content->text .=
Matt Petro
committed
profile_load_custom_fields($USER);
$courses = block_course_overview_uwmoodle_get_sorted_courses();
Matt Petro
committed
$terms = block_course_overview_uwmoodle_group_courses_by_term($courses);
Matt Petro
committed
$currentterm = block_course_overview_uwmoodle_get_current_term();
$selectedterm = optional_param('term', $currentterm, PARAM_INT);
Matt Petro
committed
if (!isset($terms[$currentterm])) {
$terms[$currentterm] = array();
Matt Petro
committed
if (!isset($terms[self::TERM_OTHER])) {
$terms[self::TERM_OTHER] = array();
Matt Petro
committed
if (!isset($terms[$selectedterm])) {
$selectedterm = $currentterm;
Matt Petro
committed
$displayedcourses = $terms[self::TERM_OTHER] + $terms[$selectedterm];
$overviews = block_course_overview_uwmoodle_get_overviews($displayedcourses);
Matt Petro
committed
$renderer = $this->page->get_renderer('block_course_overview_uwmoodle');
if (!empty($config->showwelcomearea)) {
require_once($CFG->dirroot.'/message/lib.php');
$msgcount = message_count_unread_messages();
$this->content->text = $renderer->welcome_area($msgcount);
Matt Petro
committed
$this->content->text .= $renderer->course_header($terms, $selectedterm);
$this->content->text .= $renderer->course_overview($terms[$selectedterm], $overviews);
if (!empty($terms[self::TERM_OTHER])) {
$this->content->text .= $renderer->other_header();
$this->content->text .= $renderer->course_overview($terms[self::TERM_OTHER], $overviews);
}
return $this->content;
}
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/**
* Get the current term from the datastore, and update user show/hide preferences when it changes.
*
* @return boolean true on success
*/
public function update_current_term() {
global $CFG, $DB;
$oldcurrentterm = get_config('block_course_overview_uwmoodle', 'currentterm');
try {
$currentterm = $this->get_current_term();
} catch (Exception $e) {
mtrace("Error fetching current term: ".$e->getMessage());
return false;
}
if ($currentterm === false) {
mtrace("No current term found");
return false;
}
if ($currentterm === $oldcurrentterm) {
// no change, so return
return true;
}
mtrace('new current term: '.$currentterm);
// New term, so clear user preferences for both current and previous term
if ($oldcurrentterm) {
$DB->delete_records('user_preferences', array('name'=> 'block_course_overview_uwmoodle-show-term-'.$oldcurrentterm));
}
$DB->delete_records('user_preferences', array('name'=> 'block_course_overview_uwmoodle-show-term-'.$currentterm));
set_config('currentterm', $currentterm, 'block_course_overview_uwmoodle');
return true;
}
/**
* Fetch current term from CHUB. Throw exception on CHUB error.
*
* @return string|false term_code or false if none found.
*/
public function get_current_term() {
global $CFG;
require_once($CFG->dirroot.'/enrol/wisc/lib/datastore.php');
$datastore = wisc_timetable_datastore::get_timetable_datastore();
$terms = $datastore->getAvailableTerms();
$now = time();
$futureterms = array();
foreach ($terms as $term) {
// check that term hasn't ended and doesn't have an odd termCode
// odd term codes (e.g. Winter) are never considered the current term
if ($term->endDate > $now && ($term->termCode % 2 != 1)) {
$futureterms[] = $term->termCode;
}
}
if (!empty($futureterms)) {
$currentterm = min($futureterms);
} else {
$currentterm = false;
}
return $currentterm;
}
/**
* allow the block to have a configuration page
*
* @return boolean
*/
public function has_config() {
Matt Petro
committed
return true;
}
/**
* locations where block can be displayed
*
* @return array
*/
public function applicable_formats() {
return array('my-index'=>true);
}
/**
* Block cron to update currentterm
*
* @return boolean true on success
*/
public function cron() {
return $this->update_current_term();
}
Matt Petro
committed
/**
* Sets block header to be hidden or visible
*
* @return bool if true then header will be visible.
*/
public function hide_header() {
// Hide header if welcome area is show.
$config = get_config('block_course_overview_uwmoodle');
return !empty($config->showwelcomearea);
}