. /** * Completion external API * * @package core_completion * @category external * @copyright 2015 Juan Leyva * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since Moodle 2.9 */ defined('MOODLE_INTERNAL') || die; require_once("$CFG->libdir/externallib.php"); require_once("$CFG->libdir/completionlib.php"); /** * Completion external functions * * @package core_completion * @category external * @copyright 2015 Juan Leyva * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since Moodle 2.9 */ class core_completion_external extends external_api { /** * Describes the parameters for update_activity_completion_status_manually. * * @return external_external_function_parameters * @since Moodle 2.9 */ public static function update_activity_completion_status_manually_parameters() { return new external_function_parameters ( array( 'cmid' => new external_value(PARAM_INT, 'course module id'), 'completed' => new external_value(PARAM_BOOL, 'activity completed or not'), ) ); } /** * Update completion status for the current user in an activity, only for activities with manual tracking. * @param int $cmid Course module id * @param bool $completed Activity completed or not * @return array Result and possible warnings * @since Moodle 2.9 * @throws moodle_exception */ public static function update_activity_completion_status_manually($cmid, $completed) { // Validate and normalize parameters. $params = self::validate_parameters(self::update_activity_completion_status_manually_parameters(), array('cmid' => $cmid, 'completed' => $completed)); $cmid = $params['cmid']; $completed = $params['completed']; $warnings = array(); $context = context_module::instance($cmid); self::validate_context($context); list($course, $cm) = get_course_and_cm_from_cmid($cmid); // Set up completion object and check it is enabled. $completion = new completion_info($course); if (!$completion->is_enabled()) { throw new moodle_exception('completionnotenabled', 'completion'); } // Check completion state is manual. if ($cm->completion != COMPLETION_TRACKING_MANUAL) { throw new moodle_exception('cannotmanualctrack', 'error'); } $targetstate = ($completed) ? COMPLETION_COMPLETE : COMPLETION_INCOMPLETE; $completion->update_state($cm, $targetstate); $result = array(); $result['status'] = true; $result['warnings'] = $warnings; return $result; } /** * Describes the update_activity_completion_status_manually return value. * * @return external_single_structure * @since Moodle 2.9 */ public static function update_activity_completion_status_manually_returns() { return new external_single_structure( array( 'status' => new external_value(PARAM_BOOL, 'status, true if success'), 'warnings' => new external_warnings(), ) ); } }