diff --git a/calendar/lib.php b/calendar/lib.php
index 8812c6310bc..53c2bbc3d32 100644
--- a/calendar/lib.php
+++ b/calendar/lib.php
@@ -871,6 +871,49 @@ function calendar_top_controls($type, $data) {
return $content;
}
+/**
+ * Formats a filter control element.
+ *
+ * @param moodle_url $url of the filter
+ * @param int $type constant defining the type filter
+ * @return string html content of the element
+ */
+function calendar_filter_controls_element(moodle_url $url, $type) {
+ global $OUTPUT;
+ switch ($type) {
+ case CALENDAR_EVENT_GLOBAL:
+ $typeforhumans = 'global';
+ $class = 'calendar_event_global';
+ break;
+ case CALENDAR_EVENT_COURSE:
+ $typeforhumans = 'course';
+ $class = 'calendar_event_course';
+ break;
+ case CALENDAR_EVENT_GROUP:
+ $typeforhumans = 'groups';
+ $class = 'calendar_event_group';
+ break;
+ case CALENDAR_EVENT_USER:
+ $typeforhumans = 'user';
+ $class = 'calendar_event_user';
+ break;
+ }
+ if (calendar_show_event_type($type)) {
+ $icon = $OUTPUT->pix_icon('t/hide', get_string('hide'));
+ $str = get_string('hide'.$typeforhumans.'events', 'calendar');
+ } else {
+ $icon = $OUTPUT->pix_icon('t/show', get_string('show'));
+ $str = get_string('show'.$typeforhumans.'events', 'calendar');
+ }
+ $content = html_writer::start_tag('li', array('class' => 'calendar_event'));
+ $content .= html_writer::start_tag('a', array('href' => $url));
+ $content .= html_writer::tag('span', $icon, array('class' => $class));
+ $content .= html_writer::tag('span', $str, array('class' => 'eventname'));
+ $content .= html_writer::end_tag('a');
+ $content .= html_writer::end_tag('li');
+ return $content;
+}
+
/**
* Get the controls filter for calendar.
*
@@ -883,60 +926,28 @@ function calendar_filter_controls(moodle_url $returnurl) {
global $CFG, $USER, $OUTPUT;
$groupevents = true;
-
$id = optional_param( 'id',0,PARAM_INT );
-
$seturl = new moodle_url('/calendar/set.php', array('return' => base64_encode($returnurl->out(false)), 'sesskey'=>sesskey()));
-
- $content = '
';
- $content .= '';
+ $content = html_writer::start_tag('ul');
$seturl->param('var', 'showglobal');
- if (calendar_show_event_type(CALENDAR_EVENT_GLOBAL)) {
- $content .= ' . ') | ';
- $content .= ''.get_string('global', 'calendar').' | '."\n";
- } else {
- $content .= ' . ') | ';
- $content .= ''.get_string('global', 'calendar').' | '."\n";
- }
+ $content .= calendar_filter_controls_element($seturl, CALENDAR_EVENT_GLOBAL);
$seturl->param('var', 'showcourses');
- if (calendar_show_event_type(CALENDAR_EVENT_COURSE)) {
- $content .= ' . ') | ';
- $content .= ''.get_string('course', 'calendar').' | '."\n";
- } else {
- $content .= ' . ') | ';
- $content .= ''.get_string('course', 'calendar').' | '."\n";
- }
+ $content .= calendar_filter_controls_element($seturl, CALENDAR_EVENT_COURSE);
if (isloggedin() && !isguestuser()) {
- $content .= "
\n";
-
if ($groupevents) {
// This course MIGHT have group events defined, so show the filter
$seturl->param('var', 'showgroups');
- if (calendar_show_event_type(CALENDAR_EVENT_GROUP)) {
- $content .= ' . ') | ';
- $content .= ''.get_string('group', 'calendar').' | '."\n";
- } else {
- $content .= ' . ') | ';
- $content .= ''.get_string('group', 'calendar').' | '."\n";
- }
+ $content .= calendar_filter_controls_element($seturl, CALENDAR_EVENT_GROUP);
} else {
// This course CANNOT have group events, so lose the filter
- $content .= ' | | '."\n";
}
-
$seturl->param('var', 'showuser');
- if (calendar_show_event_type(CALENDAR_EVENT_USER)) {
- $content .= ' . ') | ';
- $content .= ''.get_string('user', 'calendar').' | '."\n";
- } else {
- $content .= ' . ') | ';
- $content .= ''.get_string('user', 'calendar').' | '."\n";
- }
+ $content .= calendar_filter_controls_element($seturl, CALENDAR_EVENT_USER);
}
- $content .= "
\n
\n";
+ $content .= html_writer::end_tag('ul');
return $content;
}
diff --git a/calendar/renderer.php b/calendar/renderer.php
index 45a6404a242..51ea81c41d6 100644
--- a/calendar/renderer.php
+++ b/calendar/renderer.php
@@ -559,8 +559,6 @@ class core_calendar_renderer extends plugin_renderer_base {
$table->data[] = $row;
$output .= html_writer::table($table);
- // OK, now for the filtering display
- $output .= $this->filter_selection_table($calendar);
return $output;
}
@@ -569,9 +567,13 @@ class core_calendar_renderer extends plugin_renderer_base {
*
* @param calendar_information $calendar
* @return string
+ * @deprecated since Moodle 2.4 MDL-32309
+ * @see calendar_filter_controls()
*/
protected function filter_selection_table(calendar_information $calendar, moodle_url $returnurl = null) {
global $SESSION;
+ debugging('Method core_calendar_renderer::filter_selection_table() is deprecated, please use '.
+ 'calendar_filter_controls() instead', DEBUG_DEVELOPER);
if ($returnurl === null) {
$returnurl = $this->page->url;
diff --git a/lang/en/calendar.php b/lang/en/calendar.php
index 3f1cc5fa9a3..5e69b266210 100644
--- a/lang/en/calendar.php
+++ b/lang/en/calendar.php
@@ -86,6 +86,10 @@ $string['group'] = 'Group';
$string['groupevent'] = 'Group event';
$string['groupevents'] = 'Group events';
$string['hidden'] = 'hidden';
+$string['hidecourseevents'] = 'Hide course events';
+$string['hideglobalevents'] = 'Hide global events';
+$string['hidegroupsevents'] = 'Hide group events';
+$string['hideuserevents'] = 'Hide user events';
$string['ical'] = 'iCal';
$string['invalidtimedurationminutes'] = 'The duration in minutes you have entered is invalid. Please enter the duration in minutes greater than 0 or select no duration.';
$string['invalidtimedurationuntil'] = 'The date and time you selected for duration until is before the start time of the event. Please correct this before proceeding.';
@@ -122,6 +126,10 @@ $string['repeatweeksl'] = 'Repeat weekly, creating altogether';
$string['repeatweeksr'] = 'events';
$string['sat'] = 'Sat';
$string['saturday'] = 'Saturday';
+$string['showcourseevents'] = 'Show course events';
+$string['showglobalevents'] = 'Show global events';
+$string['showgroupsevents'] = 'Show group events';
+$string['showuserevents'] = 'Show user events';
$string['shown'] = 'shown';
$string['spanningevents'] = 'Events underway';
$string['sun'] = 'Sun';
diff --git a/theme/base/style/calendar.css b/theme/base/style/calendar.css
index 831e052d37d..5f7a6c85a6b 100644
--- a/theme/base/style/calendar.css
+++ b/theme/base/style/calendar.css
@@ -44,5 +44,8 @@
.block .calendar-controls .previous {text-align: left;display: block;float: left;width: 12%;}
.block .calendar-controls .current {float:left;text-align: center;display: block;width:76%;}
.block .calendar-controls .next {text-align: right;display: block;float: left;width: 12%;}
-.block .filters table {border-collapse:separate;border-spacing: 2px;padding: 2px;width: 100%;}
+.block .calendar_filters ul {list-style: none; margin: 0;}
+.block .calendar_filters li { margin-bottom: .2em;}
+.block .calendar_filters li span img { padding: 0 .2em;}
+.block .calendar_filters .eventname { padding-left: .2em;}
.block .content h3.eventskey {margin-top:0.5em;margin-bottom:0;margin-left:0.5em;}
\ No newline at end of file
diff --git a/theme/standard/style/calendar.css b/theme/standard/style/calendar.css
index 2ea84e886fc..638347db1c6 100644
--- a/theme/standard/style/calendar.css
+++ b/theme/standard/style/calendar.css
@@ -51,8 +51,6 @@
.block .minicalendar {font-size:0.85em;border:1px solid #DDDDDD;margin: 10px 0;border-collapse:separate;border-spacing:1px;}
.block .minicalendar .duration {border-width:1px 0;}
-.block .calendar_filters.filters {background-color: #EEEEEE;}
-.block .calendar_filters.filters table {width:100%;}
.calendar_event_global {border-color: #D6F8CD; background-color:#D6F8CD;}
.calendar_event_course {border-color: #FFD3BD; background-color:#FFD3BD;}