<?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 default course_summary block by filtering courses by term. * * 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 2013 Matt Petro */ defined('MOODLE_INTERNAL') || die; require_once($CFG->dirroot.'/blocks/course_overview_uwmoodle/locallib.php'); require_once($CFG->dirroot.'/user/profile/lib.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 = ''; profile_load_custom_fields($USER); // Get user's courses and sort by term $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 selectedterm is not valid, select currentterm if (!isset($terms[$selectedterm])) { $selectedterm = $currentterm; } // Get course overviews $overviews = block_course_overview_uwmoodle_get_overviews($courses); $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); } // Sort the terms with newest first block_course_overview_uwmoodle_sort_term_array($terms); $displayedterms = $terms; $othercourses = false; if (empty($this->config->combineongoing)) { unset($displayedterms[self::TERM_OTHER]); if (!empty($terms[self::TERM_OTHER])) { $othercourses = $terms[self::TERM_OTHER]; } } // Render the block $this->content->text .= $renderer->course_block($displayedterms, $overviews, $selectedterm); if (!empty($othercourses)) { $this->content->text .= $renderer->other_course_block($othercourses, $overviews); } $this->content->footer = $renderer->footer(); 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 && $currentterm != $oldcurrentterm) { // store new term mtrace('new current 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); } }