Permalink
Browse files

MDL-37085 Moved completion info box rendering code to renderer

Was part of function print_section(), now it is
new function core_course_renderer::course_section_cm_completion()
  • Loading branch information...
marinaglancy committed Dec 14, 2012
1 parent 9a6aa5c commit 7e29340f7c73de5fcb717895e2834d40c6d7464a
Showing with 116 additions and 86 deletions.
  1. +3 −83 course/lib.php
  2. +106 −0 course/renderer.php
  3. +7 −3 course/togglecompletion.php
View
@@ -1328,7 +1328,7 @@ function get_print_section_cm_text(cm_info $cm, $course) {
* @param stdClass|section_info $section The section object containing properties id and section
* @param array $mods (argument not used)
* @param array $modnamesused (argument not used)
- * @param bool $absolute All links are absolute
+ * @param bool $absolute (argument not used)
* @param string $width (argument not used)
* @param bool $hidecompletion Hide completion status
* @param int $sectionreturn The section to return to
@@ -1542,88 +1542,8 @@ function print_section($course, $section, $mods, $modnamesused, $absolute=false,
echo $mod->get_after_edit_icons();
}
- // Completion
- $completion = $hidecompletion
- ? COMPLETION_TRACKING_NONE
- : $completioninfo->is_enabled($mod);
- if ($completion!=COMPLETION_TRACKING_NONE && isloggedin() &&
- !isguestuser() && $mod->uservisible) {
- $completiondata = $completioninfo->get_data($mod,true);
- $completionicon = '';
- if ($isediting) {
- switch ($completion) {
- case COMPLETION_TRACKING_MANUAL :
- $completionicon = 'manual-enabled'; break;
- case COMPLETION_TRACKING_AUTOMATIC :
- $completionicon = 'auto-enabled'; break;
- default: // wtf
- }
- } else if ($completion==COMPLETION_TRACKING_MANUAL) {
- switch($completiondata->completionstate) {
- case COMPLETION_INCOMPLETE:
- $completionicon = 'manual-n'; break;
- case COMPLETION_COMPLETE:
- $completionicon = 'manual-y'; break;
- }
- } else { // Automatic
- switch($completiondata->completionstate) {
- case COMPLETION_INCOMPLETE:
- $completionicon = 'auto-n'; break;
- case COMPLETION_COMPLETE:
- $completionicon = 'auto-y'; break;
- case COMPLETION_COMPLETE_PASS:
- $completionicon = 'auto-pass'; break;
- case COMPLETION_COMPLETE_FAIL:
- $completionicon = 'auto-fail'; break;
- }
- }
- if ($completionicon) {
- $imgsrc = $OUTPUT->pix_url('i/completion-'.$completionicon);
- $formattedname = format_string($mod->name, true, array('context' => $modcontext));
- $imgalt = get_string('completion-alt-' . $completionicon, 'completion', $formattedname);
- if ($completion == COMPLETION_TRACKING_MANUAL && !$isediting) {
- $imgtitle = get_string('completion-title-' . $completionicon, 'completion', $formattedname);
- $newstate =
- $completiondata->completionstate==COMPLETION_COMPLETE
- ? COMPLETION_INCOMPLETE
- : COMPLETION_COMPLETE;
- // In manual mode the icon is a toggle form...
-
- // If this completion state is used by the
- // conditional activities system, we need to turn
- // off the JS.
- if (!empty($CFG->enableavailability) &&
- condition_info::completion_value_used_as_condition($course, $mod)) {
- $extraclass = ' preventjs';
- } else {
- $extraclass = '';
- }
- echo html_writer::start_tag('form', array(
- 'class' => 'togglecompletion' . $extraclass,
- 'method' => 'post',
- 'action' => $CFG->wwwroot . '/course/togglecompletion.php'));
- echo html_writer::start_tag('div');
- echo html_writer::empty_tag('input', array(
- 'type' => 'hidden', 'name' => 'id', 'value' => $mod->id));
- echo html_writer::empty_tag('input', array(
- 'type' => 'hidden', 'name' => 'modulename',
- 'value' => $mod->name));
- echo html_writer::empty_tag('input', array(
- 'type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey()));
- echo html_writer::empty_tag('input', array(
- 'type' => 'hidden', 'name' => 'completionstate',
- 'value' => $newstate));
- echo html_writer::empty_tag('input', array(
- 'type' => 'image', 'src' => $imgsrc, 'alt' => $imgalt, 'title' => $imgtitle));
- echo html_writer::end_tag('div');
- echo html_writer::end_tag('form');
- } else {
- // In auto mode, or when editing, the icon is just an image
- echo "<span class='autocompletion'>";
- echo "<img src='$imgsrc' alt='$imgalt' title='$imgalt' /></span>";
- }
- }
- }
+ echo $courserenderer->course_section_cm_completion($course, $completioninfo, $mod,
+ array('hidecompletion' => $hidecompletion));
// If there is content AND a link, then display the content here
// (AFTER any icons). Otherwise it was displayed before
View
@@ -506,4 +506,110 @@ function course_section_add_cm_control($course, $section, $sectionreturn = null,
return $output;
}
+
+ /**
+ * Renders html for completion box on course page
+ *
+ * If completion is disabled, returns empty string
+ * If completion is automatic, returns an icon of the current completion state
+ * If completion is manual, returns a form (with an icon inside) that allows user to
+ * toggle completion
+ *
+ * @param stdClass $course course object
+ * @param completion_info $completioninfo completion info for the course, it is recommended
+ * to fetch once for all modules in course/section for performance
+ * @param cm_info $mod module to show completion for
+ * @param array $displayoptions display options, not used in core
+ * @return string
+ */
+ public function course_section_cm_completion($course, &$completioninfo, cm_info $mod, $displayoptions = array()) {
+ global $CFG;
+ $output = '';
+ if (!empty($displayoptions['hidecompletion']) || !isloggedin() || isguestuser() || !$mod->uservisible) {
+ return $output;
+ }
+ if ($completioninfo === null) {
+ $completioninfo = new completion_info($course);
+ }
+ $completion = $completioninfo->is_enabled($mod);
+ if ($completion == COMPLETION_TRACKING_NONE) {
+ return $output;
+ }
+
+ $completiondata = $completioninfo->get_data($mod, true);
+ $completionicon = '';
+
+ if ($this->page->user_is_editing()) {
+ switch ($completion) {
+ case COMPLETION_TRACKING_MANUAL :
+ $completionicon = 'manual-enabled'; break;
+ case COMPLETION_TRACKING_AUTOMATIC :
+ $completionicon = 'auto-enabled'; break;
+ }
+ } else if ($completion == COMPLETION_TRACKING_MANUAL) {
+ switch($completiondata->completionstate) {
+ case COMPLETION_INCOMPLETE:
+ $completionicon = 'manual-n'; break;
+ case COMPLETION_COMPLETE:
+ $completionicon = 'manual-y'; break;
+ }
+ } else { // Automatic
+ switch($completiondata->completionstate) {
+ case COMPLETION_INCOMPLETE:
+ $completionicon = 'auto-n'; break;
+ case COMPLETION_COMPLETE:
+ $completionicon = 'auto-y'; break;
+ case COMPLETION_COMPLETE_PASS:
+ $completionicon = 'auto-pass'; break;
+ case COMPLETION_COMPLETE_FAIL:
+ $completionicon = 'auto-fail'; break;
+ }
+ }
+ if ($completionicon) {
+ $formattedname = $mod->get_formatted_name();
+ $imgalt = get_string('completion-alt-' . $completionicon, 'completion', $formattedname);
+ if ($completion == COMPLETION_TRACKING_MANUAL && !$this->page->user_is_editing()) {
+ $imgtitle = get_string('completion-title-' . $completionicon, 'completion', $formattedname);
+ $newstate =
+ $completiondata->completionstate == COMPLETION_COMPLETE
+ ? COMPLETION_INCOMPLETE
+ : COMPLETION_COMPLETE;
+ // In manual mode the icon is a toggle form...
+
+ // If this completion state is used by the
+ // conditional activities system, we need to turn
+ // off the JS.
+ $extraclass = '';
+ if (!empty($CFG->enableavailability) &&
+ condition_info::completion_value_used_as_condition($course, $mod)) {
+ $extraclass = ' preventjs';
+ }
+ $output .= html_writer::start_tag('form', array('method' => 'post',
+ 'action' => new moodle_url('/course/togglecompletion.php'),
+ 'class' => 'togglecompletion'. $extraclass));
+ $output .= html_writer::start_tag('div');
+ $output .= html_writer::empty_tag('input', array(
+ 'type' => 'hidden', 'name' => 'id', 'value' => $mod->id));
+ $output .= html_writer::empty_tag('input', array(
+ 'type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey()));
+ $output .= html_writer::empty_tag('input', array(
+ 'type' => 'hidden', 'name' => 'modulename', 'value' => $mod->name));
+ $output .= html_writer::empty_tag('input', array(
+ 'type' => 'hidden', 'name' => 'completionstate', 'value' => $newstate));
+ $output .= html_writer::empty_tag('input', array(
+ 'type' => 'image',
+ 'src' => $this->output->pix_url('i/completion-'.$completionicon),
+ 'alt' => $imgalt, 'title' => $imgtitle));
+ $output .= html_writer::end_tag('div');
+ $output .= html_writer::end_tag('form');
+ } else {
+ // In auto mode, or when editing, the icon is just an image
+ $completionpixicon = new pix_icon('i/completion-'.$completionicon, $imgalt, '',
+ array('title' => $imgalt));
+ $output .= html_writer::tag('span', $this->output->render($completionpixicon),
+ array('class' => 'autocompletion'));
+ }
+ }
+ return $output;
+ }
}
@@ -123,7 +123,7 @@
}
// Get course-modules entry
-$cm = get_coursemodule_from_id(null, $cmid, null, false, MUST_EXIST);
+$cm = get_coursemodule_from_id(null, $cmid, null, true, MUST_EXIST);
$course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
// Check user is logged in
@@ -152,8 +152,12 @@
} else {
// In case of use in other areas of code we allow a 'backto' parameter,
// otherwise go back to course page
- $backto = optional_param('backto', 'view.php?id='.$course->id, PARAM_URL);
- redirect($backto);
+
+ if ($backto = optional_param('backto', null, PARAM_URL)) {
+ redirect($backto);
+ } else {
+ redirect(course_get_url($course, $cm->sectionnum));
+ }
}
// utility functions

0 comments on commit 7e29340

Please sign in to comment.