MDL-34476 - Course Completeion, Blocks - Allowing teachers to access the Full Course Report from the Course Completion Block -- Initial patch provided by Nadav Kavalerchik
This commit is contained in:
@@ -84,147 +84,146 @@ class block_completionstatus extends block_base {
|
||||
}
|
||||
|
||||
// Check this user is enroled
|
||||
if (!$info->is_tracked_user($USER->id)) {
|
||||
// If not enrolled, but are can view the report:
|
||||
if (has_capability('report/completion:view', $context)) {
|
||||
$report = new moodle_url('/report/completion/index.php', array('course' => $course->id));
|
||||
$this->content->text = '<a href="'.$report->out().'">'.get_string('viewcoursereport', 'completion').'</a>';
|
||||
return $this->content;
|
||||
if ($info->is_tracked_user($USER->id)) {
|
||||
|
||||
// Generate markup for criteria statuses
|
||||
$shtml = '';
|
||||
|
||||
// For aggregating activity completion
|
||||
$activities = array();
|
||||
$activities_complete = 0;
|
||||
|
||||
// For aggregating course prerequisites
|
||||
$prerequisites = array();
|
||||
$prerequisites_complete = 0;
|
||||
|
||||
// Flag to set if current completion data is inconsistent with
|
||||
// what is stored in the database
|
||||
$pending_update = false;
|
||||
|
||||
// Loop through course criteria
|
||||
foreach ($completions as $completion) {
|
||||
|
||||
$criteria = $completion->get_criteria();
|
||||
$complete = $completion->is_complete();
|
||||
|
||||
if (!$pending_update && $criteria->is_pending($completion)) {
|
||||
$pending_update = true;
|
||||
}
|
||||
|
||||
// Activities are a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_ACTIVITY) {
|
||||
$activities[$criteria->moduleinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$activities_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Prerequisites are also a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_COURSE) {
|
||||
$prerequisites[$criteria->courseinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$prerequisites_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$shtml .= '<tr><td>';
|
||||
$shtml .= $criteria->get_title();
|
||||
$shtml .= '</td><td style="text-align: right">';
|
||||
$shtml .= $completion->get_status();
|
||||
$shtml .= '</td></tr>';
|
||||
}
|
||||
|
||||
// Otherwise, show error
|
||||
// Aggregate activities
|
||||
if (!empty($activities)) {
|
||||
|
||||
$shtml .= '<tr><td>';
|
||||
$shtml .= get_string('activitiescompleted', 'completion');
|
||||
$shtml .= '</td><td style="text-align: right">';
|
||||
$a = new stdClass();
|
||||
$a->first = $activities_complete;
|
||||
$a->second = count($activities);
|
||||
$shtml .= get_string('firstofsecond', 'block_completionstatus', $a);
|
||||
$shtml .= '</td></tr>';
|
||||
}
|
||||
|
||||
// Aggregate prerequisites
|
||||
if (!empty($prerequisites)) {
|
||||
|
||||
$phtml = '<tr><td>';
|
||||
$phtml .= get_string('dependenciescompleted', 'completion');
|
||||
$phtml .= '</td><td style="text-align: right">';
|
||||
$a = new stdClass();
|
||||
$a->first = $prerequisites_complete;
|
||||
$a->second = count($prerequisites);
|
||||
$phtml .= get_string('firstofsecond', 'block_completionstatus', $a);
|
||||
$phtml .= '</td></tr>';
|
||||
|
||||
$shtml = $phtml . $shtml;
|
||||
}
|
||||
|
||||
// Display completion status
|
||||
$this->content->text = '<table width="100%" style="font-size: 90%;"><tbody>';
|
||||
$this->content->text .= '<tr><td colspan="2"><b>'.get_string('status').':</b> ';
|
||||
|
||||
// Is course complete?
|
||||
$coursecomplete = $info->is_course_complete($USER->id);
|
||||
|
||||
// Load course completion
|
||||
$params = array(
|
||||
'userid' => $USER->id,
|
||||
'course' => $course->id
|
||||
);
|
||||
$ccompletion = new completion_completion($params);
|
||||
|
||||
// Has this user completed any criteria?
|
||||
$criteriacomplete = $info->count_course_user_data($USER->id);
|
||||
|
||||
if ($pending_update) {
|
||||
$this->content->text .= '<i>'.get_string('pending', 'completion').'</i>';
|
||||
} else if ($coursecomplete) {
|
||||
$this->content->text .= get_string('complete');
|
||||
} else if (!$criteriacomplete && !$ccompletion->timestarted) {
|
||||
$this->content->text .= '<i>'.get_string('notyetstarted', 'completion').'</i>';
|
||||
} else {
|
||||
$this->content->text .= '<i>'.get_string('inprogress','completion').'</i>';
|
||||
}
|
||||
|
||||
$this->content->text .= '</td></tr>';
|
||||
$this->content->text .= '<tr><td colspan="2">';
|
||||
|
||||
// Get overall aggregation method
|
||||
$overall = $info->get_aggregation_method();
|
||||
|
||||
if ($overall == COMPLETION_AGGREGATION_ALL) {
|
||||
$this->content->text .= get_string('criteriarequiredall', 'completion');
|
||||
} else {
|
||||
$this->content->text .= get_string('criteriarequiredany', 'completion');
|
||||
}
|
||||
|
||||
$this->content->text .= ':</td></tr>';
|
||||
$this->content->text .= '<tr><td><b>'.get_string('requiredcriteria', 'completion').'</b></td><td style="text-align: right"><b>'.get_string('status').'</b></td></tr>';
|
||||
$this->content->text .= $shtml.'</tbody></table>';
|
||||
|
||||
// Display link to detailed view
|
||||
$details = new moodle_url('/blocks/completionstatus/details.php', array('course' => $course->id));
|
||||
$this->content->footer = '<br><a href="'.$details->out().'">'.get_string('moredetails', 'completion').'</a>';
|
||||
} else {
|
||||
// If user is not enrolled, show error
|
||||
$this->content->text = get_string('notenroled', 'completion');
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
// Generate markup for criteria statuses
|
||||
$shtml = '';
|
||||
|
||||
// For aggregating activity completion
|
||||
$activities = array();
|
||||
$activities_complete = 0;
|
||||
|
||||
// For aggregating course prerequisites
|
||||
$prerequisites = array();
|
||||
$prerequisites_complete = 0;
|
||||
|
||||
// Flag to set if current completion data is inconsistent with
|
||||
// what is stored in the database
|
||||
$pending_update = false;
|
||||
|
||||
// Loop through course criteria
|
||||
foreach ($completions as $completion) {
|
||||
|
||||
$criteria = $completion->get_criteria();
|
||||
$complete = $completion->is_complete();
|
||||
|
||||
if (!$pending_update && $criteria->is_pending($completion)) {
|
||||
$pending_update = true;
|
||||
}
|
||||
|
||||
// Activities are a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_ACTIVITY) {
|
||||
$activities[$criteria->moduleinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$activities_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Prerequisites are also a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_COURSE) {
|
||||
$prerequisites[$criteria->courseinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$prerequisites_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$shtml .= '<tr><td>';
|
||||
$shtml .= $criteria->get_title();
|
||||
$shtml .= '</td><td style="text-align: right">';
|
||||
$shtml .= $completion->get_status();
|
||||
$shtml .= '</td></tr>';
|
||||
if (has_capability('report/completion:view', $context)) {
|
||||
$report = new moodle_url('/report/completion/index.php', array('course' => $course->id));
|
||||
$this->content->footer .= '<br /><a href="'.$report->out().'">'.get_string('viewcoursereport', 'completion').'</a>';
|
||||
}
|
||||
|
||||
// Aggregate activities
|
||||
if (!empty($activities)) {
|
||||
|
||||
$shtml .= '<tr><td>';
|
||||
$shtml .= get_string('activitiescompleted', 'completion');
|
||||
$shtml .= '</td><td style="text-align: right">';
|
||||
$a = new stdClass();
|
||||
$a->first = $activities_complete;
|
||||
$a->second = count($activities);
|
||||
$shtml .= get_string('firstofsecond', 'block_completionstatus', $a);
|
||||
$shtml .= '</td></tr>';
|
||||
}
|
||||
|
||||
// Aggregate prerequisites
|
||||
if (!empty($prerequisites)) {
|
||||
|
||||
$phtml = '<tr><td>';
|
||||
$phtml .= get_string('dependenciescompleted', 'completion');
|
||||
$phtml .= '</td><td style="text-align: right">';
|
||||
$a = new stdClass();
|
||||
$a->first = $prerequisites_complete;
|
||||
$a->second = count($prerequisites);
|
||||
$phtml .= get_string('firstofsecond', 'block_completionstatus', $a);
|
||||
$phtml .= '</td></tr>';
|
||||
|
||||
$shtml = $phtml . $shtml;
|
||||
}
|
||||
|
||||
// Display completion status
|
||||
$this->content->text = '<table width="100%" style="font-size: 90%;"><tbody>';
|
||||
$this->content->text .= '<tr><td colspan="2"><b>'.get_string('status').':</b> ';
|
||||
|
||||
// Is course complete?
|
||||
$coursecomplete = $info->is_course_complete($USER->id);
|
||||
|
||||
// Load course completion
|
||||
$params = array(
|
||||
'userid' => $USER->id,
|
||||
'course' => $course->id
|
||||
);
|
||||
$ccompletion = new completion_completion($params);
|
||||
|
||||
// Has this user completed any criteria?
|
||||
$criteriacomplete = $info->count_course_user_data($USER->id);
|
||||
|
||||
if ($pending_update) {
|
||||
$this->content->text .= '<i>'.get_string('pending', 'completion').'</i>';
|
||||
} else if ($coursecomplete) {
|
||||
$this->content->text .= get_string('complete');
|
||||
} else if (!$criteriacomplete && !$ccompletion->timestarted) {
|
||||
$this->content->text .= '<i>'.get_string('notyetstarted', 'completion').'</i>';
|
||||
} else {
|
||||
$this->content->text .= '<i>'.get_string('inprogress','completion').'</i>';
|
||||
}
|
||||
|
||||
$this->content->text .= '</td></tr>';
|
||||
$this->content->text .= '<tr><td colspan="2">';
|
||||
|
||||
// Get overall aggregation method
|
||||
$overall = $info->get_aggregation_method();
|
||||
|
||||
if ($overall == COMPLETION_AGGREGATION_ALL) {
|
||||
$this->content->text .= get_string('criteriarequiredall', 'completion');
|
||||
} else {
|
||||
$this->content->text .= get_string('criteriarequiredany', 'completion');
|
||||
}
|
||||
|
||||
$this->content->text .= ':</td></tr>';
|
||||
$this->content->text .= '<tr><td><b>'.get_string('requiredcriteria', 'completion').'</b></td><td style="text-align: right"><b>'.get_string('status').'</b></td></tr>';
|
||||
$this->content->text .= $shtml.'</tbody></table>';
|
||||
|
||||
// Display link to detailed view
|
||||
$details = new moodle_url('/blocks/completionstatus/details.php', array('course' => $course->id));
|
||||
$this->content->footer = '<br><a href="'.$details->out().'">'.get_string('moredetails', 'completion').'</a>';
|
||||
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user