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

UWMOODLE-306 block course_overview_uwmoodle: Rewrote the interface to...

UWMOODLE-306 block course_overview_uwmoodle: Rewrote the interface to hopefully be cleaner and more user-friendly.
parent 47b6cd31
No related branches found
No related tags found
No related merge requests found
......@@ -23,7 +23,7 @@
* 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
* @author 2013 Matt Petro
*/
require_once($CFG->dirroot.'/blocks/course_overview_uwmoodle/locallib.php');
......@@ -68,19 +68,13 @@ class block_course_overview_uwmoodle extends block_base {
if (!isset($terms[$currentterm])) {
$terms[$currentterm] = array();
}
if (!isset($terms[self::TERM_OTHER])) {
$terms[self::TERM_OTHER] = array();
}
// If selectedterm is not valid, select currentterm
if (!isset($terms[$selectedterm])) {
$selectedterm = $currentterm;
}
// Always display non-term courses in addition to selected term.
$displayedcourses = $terms[self::TERM_OTHER] + $terms[$selectedterm];
// Get course overviews
$overviews = block_course_overview_uwmoodle_get_overviews($displayedcourses);
$overviews = block_course_overview_uwmoodle_get_overviews($courses);
$renderer = $this->page->get_renderer('block_course_overview_uwmoodle');
if (!empty($config->showwelcomearea)) {
......@@ -89,11 +83,23 @@ class block_course_overview_uwmoodle extends block_base {
$this->content->text = $renderer->welcome_area($msgcount);
}
$this->content->text .= $renderer->course_header($terms, $selectedterm);
$this->content->text .= $renderer->course_block($selectedterm, $terms[$selectedterm], $overviews);
// 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($terms[self::TERM_OTHER])) {
$this->content->text .= $renderer->other_course_block($terms[self::TERM_OTHER], $overviews);
if (!empty($othercourses)) {
$this->content->text .= $renderer->other_course_block($othercourses, $overviews);
}
$this->content->footer = $renderer->footer();
return $this->content;
......
<?php
class block_course_overview_uwmoodle_edit_form extends block_edit_form {
protected function specific_definition($mform) {
// Section header title according to language file.
$mform->addElement('header', 'configheader', get_string('blocksettings', 'block'));
$mform->addElement('advcheckbox', 'config_combineongoing', get_string('combineongoing', 'block_course_overview_uwmoodle'), null, null, array(0, 1));
$mform->setDefault('config_nontermseparate', 0);
}
}
\ No newline at end of file
......@@ -18,9 +18,12 @@
defined('MOODLE_INTERNAL') || die();
$string['pluginname'] = 'UW Moodle course overview';
$string['courses'] = 'My courses';
$string['mycoursesinterm'] = '{$a} courses';
$string['nocourses'] = 'You are not enrolled in any courses for this term';
$string['ongoingcourses'] = 'Ongoing courses';
$string['combineongoing'] = 'Show ongoing classes in term menu';
$string['ongoingcourses'] = 'My ongoing courses';
$string['ongoingcourses_help'] = 'This section lists courses which are not tied to a specific UW term.';
$string['selectterm'] = 'Select a term: ';
......
......@@ -145,6 +145,20 @@ function block_course_overview_uwmoodle_group_courses_by_term($courses) {
return $terms;
}
function block_course_overview_uwmoodle_sort_term_array(&$terms) {
// Sort the terms with ongoing (code = 0) first, then in decreasing order
$cmp = function ($a, $b) {
if ($a == 0 || $b == 0) {
return $a-$b;
} else {
return $b-$a;
}
};
return uksort($terms, $cmp);
}
/**
* Get the current term from our settings
*
......@@ -174,19 +188,19 @@ function block_course_overview_uwmoodle_get_term_name($termCode) {
$semester = substr($termCode,3,1);
switch($semester) {
case 2:
$name = sprintf("Fall %d", $year-1);
$name = sprintf("<span class='semester'>Fall</span> <span class='year'>%d</span>", $year-1);
break;
case 3:
$name = sprintf("Winter %d", $year);
$name = sprintf("<span class='semester'>Winter</span> <span class='year'>%d</span>", $year);
break;
case 4:
$name = sprintf("Spring %d", $year);
$name = sprintf("<span class='semester'>Spring</span> <span class='year'>%d</span>", $year);
break;
case 6:
$name = sprintf("Summer %d", $year);
$name = sprintf("<span class='semester'>Summer</span> <span class='year'>%d</span>", $year);
break;
default:
$name = "Other";
$name = "Ongoing";
}
return $name;
}
\ No newline at end of file
......@@ -108,3 +108,34 @@ M.block_course_overview_uwmoodle.CollapsibleRegion.prototype.div = null;
*/
M.block_course_overview_uwmoodle.CollapsibleRegion.prototype.icon = null;
M.block_course_overview_uwmoodle.TermSelector = function(Y) {
// Find the selector div in the document.
var selector = Y.one('#uwmm_terms');
// Find all the content nodes.
var contentnodes = Y.all('#uwmm_terms_content div.courselist');
var onClick = function(e) {
var content = Y.one('#'+e.currentTarget.get('id')+'_courses');
if (content) {
selector.all('.active').each(function(e) {e.removeClass('active');});
e.currentTarget.addClass('active'); // e.currentTarget === li
contentnodes.each(function(e) {e.addClass('hidden');});
content.removeClass('hidden');
// Stop the event's default behavior
e.preventDefault();
// Stop the event from bubbling up the DOM tree
e.stopPropagation();
}
};
selector.delegate('click', onClick, 'li');
};
M.block_course_overview_uwmoodle.termselector = function(Y) {
new M.block_course_overview_uwmoodle.TermSelector(Y);
};
pix/menu.gif

1.28 KiB

......@@ -31,6 +31,7 @@ defined('MOODLE_INTERNAL') || die;
*/
class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
/**
* Construct contents of course_overview block
*
......@@ -38,18 +39,43 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
* @param array $overviews list of course overviews
* @return string html to be displayed in course_overview block
*/
public function course_overview($courses, $overviews) {
public function course_overview_allterms($terms, $overviews, $selectedterm) {
$html = '';
$config = get_config('block_course_overview_uwmoodle');
$html .= html_writer::start_tag('div', array('id' => 'course_list_uwmoodle'));
$html .= html_writer::start_tag('div', array('class' => 'courselistcontainer', 'id' => 'uwmm_terms_content'));
foreach ($terms as $termcode => $courses) {
if ($termcode != $selectedterm) {
$hidden = 'hidden';
} else {
$hidden = '';
}
$html .= html_writer::start_tag('div', array('class' => 'courselist '.$hidden, 'id' => 'uwmm_term_'.$termcode.'_courses'));
$termstr = block_course_overview_uwmoodle_get_term_name($termcode);
$title = get_string('mycoursesinterm', 'block_course_overview_uwmoodle', $termstr);
$html .= html_writer::start_tag('div', array('class' => 'title'));
$html .= $this->output->heading($title, 2, 'termname');
$html .= html_writer::end_tag('div');
$html .= $this->course_overview($courses, $overviews, $termcode);
$html .= html_writer::end_tag('div');
}
$html .= html_writer::end_tag('div');
$this->page->requires->js_init_call('M.block_course_overview_uwmoodle.termselector');
return $html;
}
public function course_overview($courses, $overviews, $termcode) {
$html = '';
$html .= html_writer::start_tag('div', array('class' => 'courselistcontainer'));
if (empty($courses)) {
$html .= $this->output->box_start('coursebox');
$html .= '<h2>'.get_string('nocourses','block_course_overview_uwmoodle').'</h2>';
$html .= $this->output->heading(get_string('nocourses','block_course_overview_uwmoodle'), 3);
$html .= $this->output->box_end();
} else {
foreach ($courses as $key => $course) {
$html .= $this->output->box_start('coursebox', "course-{$course->id}");
$html .= $this->output->box_start('coursebox');
$html .= html_writer::start_tag('div', array('class' => 'course_title'));
// No need to pass title through s() here as it will be done automatically by html_writer.
......@@ -60,15 +86,15 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
$courseurl = new moodle_url('/course/view.php', array('id' => $course->id));
$coursefullname = format_string($course->fullname, true, $course->id);
$link = html_writer::link($courseurl, $coursefullname, $attributes);
$html .= $this->output->heading($link, 2, 'title');
$html .= $this->output->box('', 'flush');
$html .= $this->output->heading($link, 3, 'title');
//$html .= $this->output->box('', 'flush');
$html .= html_writer::end_tag('div');
if (isset($overviews[$course->id])) {
$html .= $this->activity_display($course->id, $overviews[$course->id]);
$html .= $this->activity_display($course->id, $overviews[$course->id], $termcode);
}
$html .= $this->output->box('', 'flush');
//$html .= $this->output->box('', 'flush');
$html .= $this->output->box_end();
}
}
......@@ -76,37 +102,69 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
return $html;
}
public function begin_course_block($title) {
$html = $this->output->box_start('block');
$html .= $this->output->box_start('header');
$html .= $this->output->box_start('title');
$html .= $this->output->heading($title, 2, 'sectiontitle');
$html .= $this->output->box_end();
$html .= $this->output->box_end();
$html .= $this->output->box_start('content');
public function term_list($termcodes, $selectedterm) {
$thisurl = $this->page->url;
$html = '';
$html .= html_writer::start_tag('div', array('class' => 'termscontainer'));
$html .= html_writer::start_tag('ul', array('class' => 'terms', 'id' => 'uwmm_terms'));
foreach ($termcodes as $termcode) {
$termname = block_course_overview_uwmoodle_get_term_name($termcode);
$attributes = array('id'=>'uwmm_term_'.$termcode);
if ($termcode == $selectedterm) {
$attributes['class'] = 'active';
}
$html .= html_writer::start_tag('li', $attributes);
$html .= html_writer::tag('a', $termname, array('href' => $thisurl->out(false, array('term'=>$termcode))));
$html .= html_writer::end_tag('li');
}
$html .= html_writer::end_tag('ul');
$html .= html_writer::end_tag('div');
return $html;
}
public function end_course_block() {
public function begin_course_block($title, $id='', $helpidentifier='') {
$html = '';
$html .= $this->output->box_end();
$html .= $this->output->box_end();
$attributes = array('class' => 'courseblock clearfix');
if (!empty($id)) {
$attributes['id'] = $id;
}
$html .= html_writer::start_tag('div', $attributes);
$html .= html_writer::start_tag('div', array('class' => 'cbheader'));
$help = '';
if ($helpidentifier) {
$help = $this->output->help_icon($helpidentifier, 'block_course_overview_uwmoodle');
}
$html .= $this->output->heading($title.$help, 2, 'sectiontitle help');
$html .= html_writer::end_tag('div');
$html .= html_writer::start_tag('div', array('class' => 'cbcontent'));
return $html;
}
public function course_block($selectedterm, $courses, $overviews) {
$termstr = block_course_overview_uwmoodle_get_term_name($selectedterm);
$title = get_string('mycoursesinterm', 'block_course_overview_uwmoodle', $termstr);
public function end_course_block() {
$html = '';
$html .= html_writer::end_tag('div');
$html .= html_writer::end_tag('div');
return $html;
}
$html = $this->begin_course_block($title);
$html .= $this->course_overview($courses, $overviews);
public function course_block($terms, $overviews, $selectedterm) {
$html = '';
$html .= $this->begin_course_block(get_string('courses', 'block_course_overview_uwmoodle'), 'uwmm_mycourses_block');
$termcodes = array_keys($terms);
$html .= html_writer::start_tag('div', array('class' => 'lhs'));
$html .= $this->term_list($termcodes, $selectedterm);
$html .= html_writer::end_tag('div');
$html .= html_writer::start_tag('div', array('class' => 'rhs'));
$html .= $this->course_overview_allterms($terms, $overviews, $selectedterm);
$html .= html_writer::end_tag('div');
$html .= $this->end_course_block();
return $html;
}
public function other_course_block($courses, $overviews) {
$html = $this->begin_course_block(get_string('ongoingcourses', 'block_course_overview_uwmoodle'));
$html .= $this->course_overview($courses, $overviews);
$html = '';
$html .= $this->begin_course_block(get_string('ongoingcourses', 'block_course_overview_uwmoodle'), 'uwmm_othercourses_block', 'ongoingcourses');
$html .= $this->course_overview($courses, $overviews, block_course_overview_uwmoodle::TERM_OTHER);
$html .= $this->end_course_block();
return $html;
}
......@@ -190,7 +248,7 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
* @param array $overview overview of activities in course
* @return string html of activities overview
*/
protected function activity_display($cid, $overview) {
protected function activity_display($cid, $overview, $id) {
$output = html_writer::start_tag('div', array('class' => 'activity_info'));
foreach (array_keys($overview) as $module) {
$output .= html_writer::start_tag('div', array('class' => 'activity_overview'));
......@@ -204,7 +262,7 @@ class block_course_overview_uwmoodle_renderer extends plugin_renderer_base {
}
// Add collapsible region with overview text in it.
$output .= $this->collapsible_region($overview[$module], '', 'uwmm_region_'.$cid.'_'.$module, $icontext, '', true);
$output .= $this->collapsible_region($overview[$module], '', 'uwmm_region_'.$id.'_'.$cid.'_'.$module, $icontext, '', true);
$output .= html_writer::end_tag('div');
}
......
.block_course_overview_uwmoodle .coursechildren {
font-weight: normal;
font-style: italic;
}
.block_course_overview_uwmoodle .content {
margin: 0 20px;
}
......@@ -10,44 +5,145 @@
margin: 5px 0;
}
.block_course_overview_uwmoodle .block {
.block_course_overview_uwmoodle .courseblock {
margin-bottom: 10px;
border: 1px solid #666666;
width: 100%;
clear: both;
position: relative;
}
.block_course_overview_uwmoodle .coursebox {
padding: 5px 15px 5px 15px;
width: auto;
margin: 15px 0;
.block_course_overview_uwmoodle .cbheader {
/*border-bottom: 1px solid #666666;*/
/*padding: 5px;*/
background-color: #E3E3E3;
/*background-image: url("/theme/image.php?theme=big_red&component=theme&image=gradient_h");*/
/*background-repeat: repeat-x;*/
border-bottom: 1px solid #666666;
clear: both;
}
.block_course_overview_uwmoodle .cbheader h2 {
margin: 0;
padding: 0.2em 0 0 0.3em;
}
.block_course_overview_uwmoodle .termlist {
list-style-type:none;
margin:20px 0 0 0;
padding:0;
font-size:120%;
.block_course_overview_uwmoodle .cbheader h2.help img {
vertical-align: middle;
}
.block_course_overview_uwmoodle .termlist li {
display:inline;
.block_course_overview_uwmoodle .termscontainer {
width: 100%;
margin: 0;
padding: 0;
}
.block_course_overview_uwmoodle .termlist .selectedterm {
/*color: #0000aa;*/
font-weight: bold;
font-size:100%;
/*border: 1px solid #000000;*/
padding: 5px;
.block_course_overview_uwmoodle a {
-moz-outline: none 0;
outline: none 0;
}
.block_course_overview_uwmoodle .profilepicture {
.block_course_overview_uwmoodle .courselistcontainer {
}
.block_course_overview_uwmoodle .rhs .courselist {
}
.block_course_overview_uwmoodle .rhs {
padding: 5px 0 10px 0;
}
.block_course_overview_uwmoodle .lhs {
float: left;
left:0;
top:0;
position:relative;
width: 10em;
background: #E3DFD4;
z-index: 1;
}
.block_course_overview_uwmoodle .rhs {
border-left: 10em solid #E3DFD4;
}
.block_course_overview_uwmoodle .courselistcontainer {
padding: 0 1em;
}
.block_course_overview_uwmoodle ul.terms {
list-style: none inside none;
margin: 0;
padding: 0;
border-top: 1px solid #ffffff;
}
.block_course_overview_uwmoodle .terms li {
margin: 0;
padding: 0;
text-align: right;
}
.block_course_overview_uwmoodle .terms .semester {
position: relative;
right: 4px;
}
.block_course_overview_uwmoodle .terms .year {
}
.block_course_overview_uwmoodle .terms li a {
font: bold 12px Verdana, Arial, Helvetica, sans-serif;
display: block;
background: #dddddd url([[pix:block_course_overview_uwmoodle|menu]]) 100% 0;
height: 22px; /*Set to height of bg image- padding within link (ie: 32px - 4px - 4px)*/
padding: 4px 0 4px 10px;
line-height: 24px; /*Set line-height of bg image- padding within link (ie: 32px - 4px - 4px)*/
text-decoration: none;
color: #000000;
padding-right: 2em;
}
.block_course_overview_uwmoodle .terms li.active a {
color: #ffffff;
background-color: #A00000;
background-position: 100% -60px;
}
.block_course_overview_uwmoodle .terms li:not(.active) a:hover {
color: #000000;
background-position: 100% -30px;
}
.block_course_overview_uwmoodle .hidden {
/*display: none;*/
visibility:hidden;
position: absolute;
left: -9999px;
}
#uwmm_mycourses_block .courselistcontainer {
min-height: 14.56em;
}
#uwmm_othercourses_block .courselistcontainer {
padding-bottom: 10px;
}
.block_course_overview_uwmoodle .coursebox {
padding: 5px 15px 5px 15px;
width: auto;
margin: 15px 0 0 0;
}
.block_course_overview_uwmoodle .profilepicture {
/*float: left;*/
}
.dir-rtl.block_course_overview_uwmoodle .profilepicture {
float:right;
}
.block_course_overview_uwmoodle .welcome_area {
width: 100%;
padding-bottom: 5px;
padding-bottom: 10px;
}
.block_course_overview_uwmoodle .welcome_message {
......@@ -62,9 +158,8 @@
}
.block_course_overview_uwmoodle .content h2.title {
float: left;
margin: 0;
position: relative;
text-align: left;
}
.block_course_overview_uwmoodle .activity_info {
margin: 0.5em 0 0 1em;
......@@ -79,9 +174,6 @@
.collapsibleregioncaption {
cursor: pointer;
}
.dir-rtl .block_course_overview_uwmoodle .content h2.title {
float:right;
}
.block_course_overview_uwmoodle .course_title {
position: relative;
......@@ -139,7 +231,6 @@
}
.block_course_overview_uwmoodle .activity_info {
clear: both;
}
.dir-rtl .block_course_overview_uwmoodle .activity_info {
margin-right: 25px;
......
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