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:
Martin Dougiamas
2010-04-30 03:06:22 +00:00
parent 2589eb89f0
commit 2be4d090c0
46 changed files with 5879 additions and 42 deletions
+73 -2
View File
@@ -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);