<?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. * * 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 */ 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'); } const TERM_OTHER = 0; // our "term_code" for non-timetable classes /** * block contents * * @return object */ public function get_content() { global $USER, $CFG, $DB; if($this->content !== NULL) { return $this->content; } $config = get_config('block_course_overview_uwmoodle'); $this->content = new stdClass(); $this->content->text = ''; $this->content->footer = "<a href=\"$CFG->wwwroot/course/index.php\">".get_string("fulllistofcourses")."</a> ...";; $content = array();$this->content->text .= profile_load_custom_fields($USER); $courses = block_course_overview_uwmoodle_get_sorted_courses(); $terms = block_course_overview_uwmoodle_group_courses_by_term($courses); $currentterm = block_course_overview_uwmoodle_get_current_term(); $selectedterm = optional_param('term', $currentterm, PARAM_INT); if (!isset($terms[$currentterm])) { $terms[$currentterm] = array(); } if (!isset($terms[self::TERM_OTHER])) { $terms[self::TERM_OTHER] = array(); } if (!isset($terms[$selectedterm])) { $selectedterm = $currentterm; } $displayedcourses = $terms[self::TERM_OTHER] + $terms[$selectedterm]; $overviews = block_course_overview_uwmoodle_get_overviews($displayedcourses); $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); } $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; } /** * 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() { 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(); } /** * 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); } }