Skip to content

Commit

Permalink
MDL-44070 Conditional availability enhancements (8): display
Browse files Browse the repository at this point in the history
Includes theme and renderer changes required for the new feature.
There are two parts: style required for the display as part of the
course page (when showing the list of conditions for an activity),
and style required for the settings form.

This change supports both the bootstrapbase theme (which was the
main theme used during development) and the old base theme.
  • Loading branch information
sammarshallou committed Apr 7, 2014
1 parent 400c0fd commit 00c832d
Show file tree
Hide file tree
Showing 5 changed files with 343 additions and 39 deletions.
27 changes: 13 additions & 14 deletions course/format/renderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -428,20 +428,18 @@ protected function section_availability_message($section, $canviewhidden) {
global $CFG;
$o = '';
if (!$section->uservisible) {
$o .= html_writer::start_tag('div', array('class' => 'availabilityinfo'));
// Note: We only get to this function if availableinfo is non-empty,
// so there is definitely something to print.
$o .= $section->availableinfo;
$o .= html_writer::end_tag('div');
$formattedinfo = \core_availability\info::format_info(
$section->availableinfo, $section->course);
$o .= html_writer::div($formattedinfo, 'availabilityinfo');
} else if ($canviewhidden && !empty($CFG->enableavailability) && $section->visible) {
$ci = new condition_info_section($section);
$ci = new \core_availability\info_section($section);
$fullinfo = $ci->get_full_information();
if ($fullinfo) {
$o .= html_writer::start_tag('div', array('class' => 'availabilityinfo'));
$o .= get_string(
($section->showavailability ? 'userrestriction_visible' : 'userrestriction_hidden'),
'condition', $fullinfo);
$o .= html_writer::end_tag('div');
$formattedinfo = \core_availability\info::format_info(
$fullinfo, $section->course);
$o .= html_writer::div($formattedinfo, 'availabilityinfo');
}
}
return $o;
Expand Down Expand Up @@ -737,13 +735,14 @@ public function print_multiple_section_page($course, $sections, $mods, $modnames
continue;
}
// Show the section if the user is permitted to access it, OR if it's not available
// but showavailability is turned on (and there is some available info text).
// but there is some available info text which explains the reason & should display.
$showsection = $thissection->uservisible ||
($thissection->visible && !$thissection->available && $thissection->showavailability
&& !empty($thissection->availableinfo));
($thissection->visible && !$thissection->available &&
!empty($thissection->availableinfo));
if (!$showsection) {
// Hidden section message is overridden by 'unavailable' control
// (showavailability option).
// If the hiddensections option is set to 'show hidden sections in collapsed
// form', then display the hidden section message - UNLESS the section is
// hidden by the availability system, which is set to hide the reason.
if (!$course->hiddensections && $thissection->available) {
echo $this->section_hidden($section);
}
Expand Down
41 changes: 16 additions & 25 deletions course/renderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,7 @@ public function course_section_cm_completion($course, &$completioninfo, cm_info
// off the JS.
$extraclass = '';
if (!empty($CFG->enableavailability) &&
condition_info::completion_value_used_as_condition($course, $mod)) {
core_availability\info::completion_value_used($course, $mod->id)) {
$extraclass = ' preventjs';
}
$output .= html_writer::start_tag('form', array('method' => 'post',
Expand Down Expand Up @@ -711,11 +711,8 @@ protected function is_cm_conditionally_hidden(cm_info $mod) {
global $CFG;
$conditionalhidden = false;
if (!empty($CFG->enableavailability)) {
$conditionalhidden = $mod->availablefrom > time() ||
($mod->availableuntil && $mod->availableuntil < time()) ||
count($mod->conditionsgrade) > 0 ||
count($mod->conditionscompletion) > 0 ||
count($mod->conditionsfield);
$info = new \core_availability\info_module($mod);
$conditionalhidden = !$info->is_available_for_all();
}
return $conditionalhidden;
}
Expand All @@ -736,8 +733,7 @@ protected function is_cm_conditionally_hidden(cm_info $mod) {
public function course_section_cm_name(cm_info $mod, $displayoptions = array()) {
global $CFG;
$output = '';
if (!$mod->uservisible &&
(empty($mod->showavailability) || empty($mod->availableinfo))) {
if (!$mod->uservisible && empty($mod->availableinfo)) {
// nothing to be displayed to the user
return $output;
}
Expand Down Expand Up @@ -825,8 +821,7 @@ public function course_section_cm_name(cm_info $mod, $displayoptions = array())
*/
public function course_section_cm_text(cm_info $mod, $displayoptions = array()) {
$output = '';
if (!$mod->uservisible &&
(empty($mod->showavailability) || empty($mod->availableinfo))) {
if (!$mod->uservisible && empty($mod->availableinfo)) {
// nothing to be displayed to the user
return $output;
}
Expand Down Expand Up @@ -876,8 +871,10 @@ public function course_section_cm_availability(cm_info $mod, $displayoptions = a
if (!$mod->uservisible) {
// this is a student who is not allowed to see the module but might be allowed
// to see availability info (i.e. "Available from ...")
if (!empty($mod->showavailability) && !empty($mod->availableinfo)) {
$output = html_writer::tag('div', $mod->availableinfo, array('class' => 'availabilityinfo'));
if (!empty($mod->availableinfo)) {
$formattedinfo = \core_availability\info::format_info(
$mod->availableinfo, $mod->get_course());
$output = html_writer::tag('div', $formattedinfo, array('class' => 'availabilityinfo'));
}
return $output;
}
Expand All @@ -892,13 +889,12 @@ public function course_section_cm_availability(cm_info $mod, $displayoptions = a
if (!$mod->visible) {
$hidinfoclass = 'hide';
}
$ci = new condition_info($mod);
$ci = new \core_availability\info_module($mod);
$fullinfo = $ci->get_full_information();
if($fullinfo) {
return '<div class="availabilityinfo '.$hidinfoclass.'">'.get_string($mod->showavailability
? 'userrestriction_visible'
: 'userrestriction_hidden','condition',
$fullinfo).'</div>';
if ($fullinfo) {
$formattedinfo = \core_availability\info::format_info(
$fullinfo, $mod->get_course());
return html_writer::div($formattedinfo, 'availabilityinfo ' . $hidinfoclass);
}
}
}
Expand Down Expand Up @@ -954,15 +950,10 @@ public function course_section_cm($course, &$completioninfo, cm_info $mod, $sect
// if:
// 1) The activity is not visible to users
// and
// 2a) The 'showavailability' option is not set (if that is set,
// we need to display the activity so we can show
// availability info)
// or
// 2b) The 'availableinfo' is empty, i.e. the activity was
// 2) The 'availableinfo' is empty, i.e. the activity was
// hidden in a way that leaves no info, such as using the
// eye icon.
if (!$mod->uservisible &&
(empty($mod->showavailability) || empty($mod->availableinfo))) {
if (!$mod->uservisible && empty($mod->availableinfo)) {
return $output;
}

Expand Down
157 changes: 157 additions & 0 deletions theme/base/style/core.css
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,163 @@ body.tag .managelink {padding: 5px;}
.path-backup .backup_log h2 { font-size: 1em; }
.path-backup .backup_log_contents { border: 1px solid #ddd; padding: 10px; height: 300px; overflow-y: scroll; }

/*
* CSS for availability options on module and section. This is taken from the
* Bootstrap version and tweaked so it works on base.
*/
#fitem_id_availabilityconditionsjson .label {
background: #999;
padding: 2px 4px;
border-radius: 4px;
font-size: 0.8em;
font-weight: bold;
color: #fff;
}
#fitem_id_availabilityconditionsjson .label-warning {
background: #f89406;
position:relative;
top: -1px;
}
#fitem_id_availabilityconditionsjson .label:empty {
display: none;
}
#fitem_id_availabilityconditionsjson *[aria-hidden=true] {
display: none;
}
x#fitem_id_availabilityconditionsjson select,
x#fitem_id_availabilityconditionsjson input[type=text] {
position:relative;
top: 4px;
}
#fitem_id_availabilityconditionsjson label {
display: inline;
}
#fitem_id_availabilityconditionsjson .availability-group {
margin-right: 8px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-group {
margin-right: 0;
margin-left: 8px;
}
#fitem_id_availabilityconditionsjson .availability-item,
#fitem_id_availabilityconditionsjson .availability-header {
margin-bottom: 6px;
}
#fitem_id_availabilityconditionsjson .availability-none {
margin-left: 20px;
margin-bottom: 4px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-none {
margin-right: 20px;
margin-left: 0;
}
#fitem_id_availabilityconditionsjson .availability-plugincontrols {
padding: 4px 0px 4px 4px;
background: none repeat scroll 0% 0% #eee;
border: 1px solid #ddd;
border-radius: 4px;
display: inline-block;
margin-right: 8px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-plugincontrols {
padding-right: 4px;
padding-left: 0px;
margin-right: 0;
margin-left: 8px;
}
#fitem_id_availabilityconditionsjson .availability-eye,
#fitem_id_availabilityconditionsjson .availability-delete {
margin-right: 8px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-eye,
.dir-rtl #fitem_id_availabilityconditionsjson .availability-delete {
margin-left: 8px;
margin-right: 0;
}
#fitem_id_availabilityconditionsjson .availability-eye[aria-hidden=true] {
display: inline;
visibility: hidden;
}
#fitem_id_availabilityconditionsjson .availability-list > .availability-eye img {
vertical-align: top;
margin-top: 12px;
}
#fitem_id_availabilityconditionsjson .availability-button {
margin-left: 15px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-button {
margin-right: 15px;
margin-left: 0;
}
#fitem_id_availabilityconditionsjson .availability-childlist > .availability-inner {
display: inline-block;
background: #eee;
border: 1px solid #ddd;
border-radius: 4px;
padding: 6px;
margin-bottom: 6px;
}
#fitem_id_availabilityconditionsjson .availability-childlist .availability-childlist > .availability-inner {
background: white;
}
#fitem_id_availabilityconditionsjson .availability-connector {
margin-left: 20px;
margin-bottom: 6px;
}
.dir-rtl #fitem_id_availabilityconditionsjson .availability-connector {
margin-right: 20px;
margin-left: 0;
}

.mform .error .availability-field {
color: black;
}

.availability-dialogue.moodle-dialogue-base .moodle-dialogue .moodle-dialogue-bd {
padding-left: 0;
padding-right: 0;
padding-bottom: 2px;
}
.availability-dialogue ul {
display: block;
margin: 0;
}
.availability-dialogue li {
display: block;
list-style-type: none;
padding: 0 0 4px;
clear: both;
border-bottom: 1px solid #eee;
margin-bottom: 4px;
}
.availability-dialogue ul button {
float: left;
margin-left: 1em;
min-width: 140px;
margin-top: 4px;
}
.dir-rtl .availability-dialogue ul button {
float: right;
margin-right: 1em;
margin-left: 0;
}
.availability-dialogue label {
margin-left: 170px;
margin-right: 1em;
margin-bottom: 0;
display: block;
line-height: 1.5;
}
.dir-rtl .availability-dialogue label {
margin-right: 170px;
margin-left: 1em;
}
.availability-dialogue .availability-buttons button {
margin-left: 1em;
margin-right: 1em;
margin-top: 4px;
}

/**
* Web Service
*/
Expand Down
3 changes: 3 additions & 0 deletions theme/base/style/course.css
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,9 @@
.dir-rtl .sitetopic .section .activity .contentafterlink,
.dir-rtl .course-content .section .activity .availabilityinfo,
.dir-rtl .course-content .section .activity .contentafterlink { margin-left: 0; margin-right: 30px;}
.availabilityinfo > ul {
margin-top: 0;
}
.section .activity .contentafterlink p { margin:.5em 0; }
.sitetopic .section .activity:hover,
.course-content .section .activity:hover { background-color: #EEE; }
Expand Down
Loading

0 comments on commit 00c832d

Please sign in to comment.