/**
  * Convenience method to instantiate the event.
  *
  * @param competency_framework $framework The framework.
  * @return self
  */
 public static final function create_from_framework(competency_framework $framework)
 {
     if (!$framework->get_id()) {
         throw new \coding_exception('The competency framework ID must be set.');
     }
     $event = static::create(array('contextid' => $framework->get_contextid(), 'objectid' => $framework->get_id()));
     $event->add_record_snapshot(competency_framework::TABLE, $framework->to_record());
     return $event;
 }
예제 #2
0
 /**
  * Delete a competency framework by id.
  *
  * Requires moodle/competency:competencymanage capability at the system context.
  *
  * @param int $id The record to delete. This will delete alot of related data - you better be sure.
  * @return boolean
  */
 public static function delete_framework($id)
 {
     global $DB;
     static::require_enabled();
     $framework = new competency_framework($id);
     require_capability('moodle/competency:competencymanage', $framework->get_context());
     $events = array();
     $competenciesid = competency::get_ids_by_frameworkid($id);
     $contextid = $framework->get_contextid();
     if (!competency::can_all_be_deleted($competenciesid)) {
         return false;
     }
     $transaction = $DB->start_delegated_transaction();
     try {
         if (!empty($competenciesid)) {
             // Delete competencies.
             competency::delete_by_frameworkid($id);
             // Delete the related competencies.
             related_competency::delete_multiple_relations($competenciesid);
             // Delete the evidences for competencies.
             user_evidence_competency::delete_by_competencyids($competenciesid);
         }
         // Create a competency framework deleted event.
         $event = \core\event\competency_framework_deleted::create_from_framework($framework);
         $result = $framework->delete();
         // Register the deleted events competencies.
         $events = \core\event\competency_deleted::create_multiple_from_competencyids($competenciesid, $contextid);
     } catch (\Exception $e) {
         $transaction->rollback($e);
     }
     // Commit the transaction.
     $transaction->allow_commit();
     // If all operations are successfull then trigger the delete event.
     $event->trigger();
     // Trigger deleted event competencies.
     foreach ($events as $event) {
         $event->trigger();
     }
     return $result;
 }