예제 #1
0
 /**
  * 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;
 }