/** * Unapprove a plan. * * This means making the plan draft. * * @param int|plan $planorid The plan, or its ID. * @return bool */ public static function unapprove_plan($planorid) { static::require_enabled(); $plan = $planorid; if (!is_object($plan)) { $plan = new plan($plan); } // We need to be able to view the plan at least. if (!$plan->can_read()) { throw new required_capability_exception($plan->get_context(), 'moodle/competency:planview', 'nopermissions', ''); } if ($plan->is_based_on_template()) { throw new coding_exception('Template plans are always approved.'); // This should never happen. } else { if ($plan->get_status() != plan::STATUS_ACTIVE) { throw new coding_exception('The plan cannot be sent back to draft at this stage.'); } else { if (!$plan->can_review()) { throw new required_capability_exception($plan->get_context(), 'moodle/competency:planmanage', 'nopermissions', ''); } } } $plan->set_status(plan::STATUS_DRAFT); $result = $plan->update(); // Trigger unapproved event. \core\event\competency_plan_unapproved::create_from_plan($plan)->trigger(); return $result; }