course completion MDL-2631 Course completion feature - Thanks to Aaron Barnes and Catalyst IT for this significant contribution. It is now officially possible to finish a course!
Even though I've tweaked this and done some polishing, there is still plenty to do on it now in HEAD, mostly to do with UI, usability and strings, so we'll keep working on it. Aaron already has a number of improvements to add to it.
This commit is contained in:
@@ -16,7 +16,8 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Toggles the manual completion flag for a particular activity and the current user.
|
||||
* Toggles the manual completion flag for a particular activity or course completion
|
||||
* and the current user.
|
||||
*
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package course
|
||||
@@ -26,7 +27,77 @@ require_once('../config.php');
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
// Parameters
|
||||
$cmid = required_param('id', PARAM_INT);
|
||||
$cmid = optional_param('id', 0, PARAM_INT);
|
||||
$courseid = optional_param('course', 0, PARAM_INT);
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
|
||||
if (!$cmid && !$courseid) {
|
||||
print_error('invalidarguments');
|
||||
}
|
||||
|
||||
// Process self completion
|
||||
if ($courseid) {
|
||||
|
||||
// Check user is logged in
|
||||
$course = $DB->get_record('course', array('id' => $courseid));
|
||||
require_login($course);
|
||||
|
||||
$completion = new completion_info($course);
|
||||
|
||||
// Check if we are marking a user complete via the completion report
|
||||
$user = optional_param('user', 0, PARAM_INT);
|
||||
$rolec = optional_param('rolec', 0, PARAM_INT);
|
||||
|
||||
if ($user && $rolec) {
|
||||
|
||||
$criteria = completion_criteria::factory((object) array('id'=>$rolec, 'criteriatype'=>COMPLETION_CRITERIA_TYPE_ROLE));
|
||||
$criteria_completions = $completion->get_completions($user, COMPLETION_CRITERIA_TYPE_ROLE);
|
||||
|
||||
foreach ($criteria_completions as $criteria_completion) {
|
||||
if ($criteria_completion->criteriaid == $rolec) {
|
||||
$criteria->complete($criteria_completion);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Return to previous page
|
||||
if (!empty($_SERVER['HTTP_REFERER'])) {
|
||||
redirect($_SERVER['HTTP_REFERER']);
|
||||
} else {
|
||||
redirect('view.php?id='.$course->id);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// Confirm with user
|
||||
if ($confirm) {
|
||||
$completion = $completion->get_completion($USER->id, COMPLETION_CRITERIA_TYPE_SELF);
|
||||
|
||||
if (!$completion) {
|
||||
print_error('noselfcompletioncriteria', 'completion');
|
||||
}
|
||||
|
||||
// Check if the user has already marked themselves as complete
|
||||
if ($completion->is_complete()) {
|
||||
print_error('useralreadymarkedcomplete', 'completion');
|
||||
}
|
||||
|
||||
$completion->mark_complete();
|
||||
|
||||
redirect($CFG->wwwroot.'/course/view.php?id='.$courseid);
|
||||
return;
|
||||
}
|
||||
|
||||
$strconfirm = get_string('confirmselfcompletion', 'completion');
|
||||
print_header_simple($strconfirm, '', build_navigation(array(array('name' => $strconfirm, 'link' => '', 'type' => 'misc'))));
|
||||
notice_yesno($strconfirm, $CFG->wwwroot.'/course/togglecompletion.php?course='.$courseid.'&confirm=1', $CFG->wwwroot.'/course/view.php?id='.$courseid);
|
||||
print_simple_box_end();
|
||||
print_footer($course);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$targetstate = required_param('completionstate', PARAM_INT);
|
||||
$fromajax = optional_param('fromajax', 0, PARAM_INT);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user