예제 #1
0
 /**
  * Update the details for a learning plan template.
  *
  * Requires moodle/competency:templatemanage capability.
  *
  * @param stdClass $record The new details for the template. Note - must contain an id that points to the template to update.
  * @return boolean
  */
 public static function update_template($record)
 {
     global $DB;
     static::require_enabled();
     $template = new template($record->id);
     // First we do a permissions check.
     if (!$template->can_manage()) {
         throw new required_capability_exception($template->get_context(), 'moodle/competency:templatemanage', 'nopermissions', '');
     } else {
         if (isset($record->contextid) && $record->contextid != $template->get_contextid()) {
             // We can never change the context of a template.
             throw new coding_exception('Changing the context of an existing tempalte is forbidden.');
         }
     }
     $updateplans = false;
     $before = $template->to_record();
     $template->from_record($record);
     $after = $template->to_record();
     // Should we update the related plans?
     if ($before->duedate != $after->duedate || $before->shortname != $after->shortname || $before->description != $after->description || $before->descriptionformat != $after->descriptionformat) {
         $updateplans = true;
     }
     $transaction = $DB->start_delegated_transaction();
     $success = $template->update();
     if (!$success) {
         $transaction->rollback(new moodle_exception('Error while updating the template.'));
         return $success;
     }
     // Trigger a template updated event.
     \core\event\competency_template_updated::create_from_template($template)->trigger();
     if ($updateplans) {
         plan::update_multiple_from_template($template);
     }
     $transaction->allow_commit();
     return $success;
 }