$context = context_course::instance($course->id); require_login($course); $completion = new completion_info($course); $trackeduser = $user ? $user : $USER->id; if (!$completion->is_enabled()) { throw new moodle_exception('completionnotenabled', 'completion'); } else { if (!$completion->is_tracked_user($trackeduser)) { throw new moodle_exception('nottracked', 'completion'); } } if ($user && $rolec) { require_sesskey(); completion_criteria::factory(array('id' => $rolec, 'criteriatype' => COMPLETION_CRITERIA_TYPE_ROLE)); //TODO: this is dumb, because it does not fetch the data?!?! $criteria = completion_criteria_role::fetch(array('id' => $rolec)); if ($criteria and user_has_role_assignment($USER->id, $criteria->role, $context->id)) { $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 $referer = clean_param($_SERVER['HTTP_REFERER'], PARAM_LOCALURL); if (!empty($referer)) { redirect($referer); } else { redirect('view.php?id=' . $course->id);