/** * Updates a plan. * * @param stdClass $record * @return \core_competency\plan */ public static function update_plan(stdClass $record) { static::require_enabled(); $plan = new plan($record->id); // Validate that the plan as it is can be managed. if (!$plan->can_manage()) { throw new required_capability_exception($plan->get_context(), 'moodle/competency:planmanage', 'nopermissions', ''); } else { if ($plan->get_status() == plan::STATUS_COMPLETE) { // A completed plan cannot be edited. throw new coding_exception('Completed plan cannot be edited.'); } else { if ($plan->is_based_on_template()) { // Prevent a plan based on a template to be edited. throw new coding_exception('Cannot update a plan that is based on a template.'); } else { if (isset($record->templateid) && $plan->get_templateid() != $record->templateid) { // Prevent a plan to be based on a template. throw new coding_exception('Cannot base a plan on a template.'); } else { if (isset($record->userid) && $plan->get_userid() != $record->userid) { // Prevent change of ownership as the capabilities are checked against that. throw new coding_exception('A plan cannot be transfered to another user'); } else { if (isset($record->status) && $plan->get_status() != $record->status) { // Prevent change of status. throw new coding_exception('To change the status of a plan use the appropriate methods.'); } } } } } } $plan->from_record($record); $plan->update(); // Trigger updated event. \core\event\competency_plan_updated::create_from_plan($plan)->trigger(); return $plan; }