Skip to content
Snippets Groups Projects
Commit 913b5378 authored by Matt Petro's avatar Matt Petro
Browse files

Changed term ordering, and defaults behavior

parent 779bccef
No related branches found
No related tags found
No related merge requests found
......@@ -69,6 +69,11 @@ class block_course_overview_uwmoodle extends block_base {
set_user_preference('block_course_overview_uwmoodle-show-coursenews-'.$uwmcourse, $uwmshow);
}
$currentterm = get_config('block_course_overview_uwmoodle', 'currentterm');
if (!$currentterm) {
$currentterm = self::TERM_OTHER;
}
// Find the termcode for each course
if (!empty($courses)) {
$courseids = array();
......@@ -97,8 +102,14 @@ class block_course_overview_uwmoodle extends block_base {
}
}
// Sort terms, descending
ksort($terms);
$terms = array_reverse($terms, true);
// TERM_OTHER courses get ordered right after current term
$sortfcn = function($a,$b) use ($currentterm) {
if ($a == self::TERM_OTHER) { $a = $currentterm - 0.5; }
if ($b == self::TERM_OTHER) { $b = $currentterm - 0.5; }
if ($a == $b) {return 0;}
return ($a > $b)? -1 : 1;
};
uksort($terms, $sortfcn);
// Update lastaccess for news summary
foreach ($courses as $c) {
......@@ -133,7 +144,8 @@ class block_course_overview_uwmoodle extends block_base {
$yuiitems[] = "term-$termcode";
$termname = $this->get_term_name($termcode);
$showterm = get_user_preferences("block_course_overview_uwmoodle-show-term-$termcode", 1);
$defaultshowterm = ($termcode == $currentterm || $termcode == self::TERM_OTHER)? 1 : 0;
$showterm = get_user_preferences("block_course_overview_uwmoodle-show-term-$termcode", $defaultshowterm);
if (!$showterm) {
$class = 'collapsed';
$ariaexpanded = "aria-expanded='false'";
......@@ -141,13 +153,20 @@ class block_course_overview_uwmoodle extends block_base {
$class = '';
$ariaexpanded = "aria-expanded='true'";
}
if ($termcode == $currentterm) {
$termclass = 'currentterm';
} else if ($termcode == self::TERM_OTHER) {
$termclass = 'miscterm';
} else {
$termclass = 'noncurrentterm';
}
$aria = "$ariaexpanded aria-controls='uwm-{$this->instance->id}-term-$termcode-list' role='button'";
$showhidetermurl = $PAGE->url->out_as_local_url(true, array('uwmterm' => $termcode, 'uwmshow' => ($showterm)? 0 : 1 ));
echo "<li class='$class'>";
echo "<h3 class='term treeitem'>";
echo "<h3 class='$termclass'>";
// The data-ajax attribute prevents the Moodle mobile theme from overriding the AJAX behavior
echo "<a class='showhide' data-ajax='false' $aria href='$showhidetermurl' id='uwm-{$this->instance->id}-term-$termcode'><span>$termname</span></a>";
echo "<a class='showhide' data-ajax='false' $aria href='$showhidetermurl' id='uwm-{$this->instance->id}-term-$termcode'><span class='term treeitem'>$termname</span></a>";
echo "</h3>";
echo "<ul class='treelist' id='uwm-{$this->instance->id}-term-$termcode-list' role='region'>";
foreach ($termcourses as $course) {
......@@ -161,6 +180,7 @@ class block_course_overview_uwmoodle extends block_base {
$newsclass = '';
$showhidehtml = '';
if ($hasnews) {
$defaultshownews = ($termcode == $currentterm || $termcode == self::TERM_OTHER)? 1 : 0;
$shownews = get_user_preferences('block_course_overview_uwmoodle-show-coursenews-'.$course->id, 1);
$yuiitems[] = "coursenews-$course->id";
$showhidenewsurl = $PAGE->url->out_as_local_url(true, array('uwmcourse' => $course->id, 'uwmshow' => ($shownews)? 0 : 1));
......@@ -176,7 +196,7 @@ class block_course_overview_uwmoodle extends block_base {
$aria = "$ariaexpanded aria-controls='uwm-{$this->instance->id}-coursenews-{$course->id}-list' role='button'";
// The data-ajax attribute prevents the Moodle mobile theme from overriding the AJAX behavior
$showhidehtml = "<div class='shownews'><a data-ajax='false' $aria href='$showhidenewsurl' id='uwm-{$this->instance->id}-coursenews-$course->id' >";
$showhidehtml .= "<span class='treeitem'><span class='showhidetext'>$showhidetext</span> news";
$showhidehtml .= "<span class='coursenews treeitem'><span class='showhidetext'>$showhidetext</span> news";
$showhidehtml .= "</span></a></div>";
}
......@@ -259,11 +279,75 @@ class block_course_overview_uwmoodle extends block_base {
$name = sprintf("Summer %d courses", $year);
break;
default:
$name = "Other courses";
$name = "Miscellaneous courses";
}
return $name;
}
/**
* 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
......@@ -282,4 +366,13 @@ class block_course_overview_uwmoodle extends block_base {
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();
}
}
\ No newline at end of file
.block_course_overview_uwmoodle .treeitem span {
background-image: url([[pix:t/expanded]]);
.block_course_overview_uwmoodle .treeitem {
background-position: 0 40%;
background-repeat: no-repeat;
padding-left: 18px;
text-align: left;
}
.block_course_overview_uwmoodle .showhidespacer {padding-left: 18px;}
.block_course_overview_uwmoodle li.collapsed .treeitem span {background-image: url([[pix:t/collapsed]]);}
.block_course_overview_uwmoodle .treeitem.term {background-image: url([[pix:t/expanded]]);}
.block_course_overview_uwmoodle li.collapsed .treeitem.term {background-image: url([[pix:t/collapsed]]);}
.block_course_overview_uwmoodle .treeitem.coursenews {background-image: url([[pix:t/switch_minus]]);}
.block_course_overview_uwmoodle li.collapsed .treeitem.coursenews {background-image: url([[pix:t/switch_plus]]);}
.block_course_overview_uwmoodle li.collapsed ul {display: none;}
.block_course_overview_uwmoodle li ul {margin: 0;padding-left:16px;}
.block_course_overview_uwmoodle .coursebox h3 {margin-left:10px;}
.block_course_overview_uwmoodle h3.term a {color:#000;}
.block_course_overview_uwmoodle h3.term {font-size:1.1em;}
.block_course_overview_uwmoodle h3 {font-size:1.1em;}
.block_course_overview_uwmoodle .noncurrentterm .term {color:#AAAAAA;}
.block_course_overview_uwmoodle .term {color:#000;}
.block_course_overview_uwmoodle .shownews {float:right;color:#333;font-weight:normal;margin-right:1em;font-size:91%;}
.block_course_overview_uwmoodle a:focus,
.block_course_overview_uwmoodle a:hover,
......
......@@ -18,10 +18,11 @@
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'block_course_overview_uwmoodle';
$plugin->version = 2013031300;
$plugin->release = '1.0)';
$plugin->requires = 2012062500;
$plugin->maturity = MATURITY_RC;
$plugin->version = 2013031500;
$plugin->release = '1.0';
$plugin->requires = 2012062500;
$plugin->maturity = MATURITY_RC;
$plugin->cron = 43200; // Set min time between cron executions to 12 hours
$plugin->dependencies = array(
'enrol_wisc' => 2013030400,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment