mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 08:56:36 +02:00
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()
This commit is contained in:
parent
9a6aa5c17d
commit
7e29340f7c
3 changed files with 116 additions and 86 deletions
|
@ -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
|
||||
|
|
|
@ -506,4 +506,110 @@ class core_course_renderer extends plugin_renderer_base {
|
|||
|
||||
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 @@ switch($targetstate) {
|
|||
}
|
||||
|
||||
// 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 @@ if ($fromajax) {
|
|||
} 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue