public function RulesEntityController::save in Rules 7.2
Overridden to care exportables that are overridden.
Overrides EntityAPIControllerExportable::save
File
- includes/rules.core.inc, line 147 
- Rules base classes and interfaces needed for any rule evaluation.
Class
- RulesEntityController
- Make sure loaded rule configs are instantiated right.
Code
public function save($rules_config, DatabaseTransaction $transaction = NULL) {
  $transaction = isset($transaction) ? $transaction : db_transaction();
  // Load the stored entity, if any.
  if (!isset($rules_config->original) && $rules_config->{$this->idKey}) {
    $rules_config->original = entity_load_unchanged($this->entityType, $rules_config->{$this->idKey});
  }
  $original = isset($rules_config->original) ? $rules_config->original : NULL;
  $return = parent::save($rules_config, $transaction);
  $this
    ->storeTags($rules_config);
  if ($rules_config instanceof RulesTriggerableInterface) {
    $this
      ->storeEvents($rules_config);
  }
  $this
    ->storeDependencies($rules_config);
  // See if there are any events that have been removed.
  if ($original && $rules_config->plugin == 'reaction rule') {
    foreach (array_diff($original
      ->events(), $rules_config
      ->events()) as $event_name) {
      // Check if the event handler implements the event dispatcher interface.
      $handler = rules_get_event_handler($event_name, $rules_config
        ->getEventSettings($event_name));
      if (!$handler instanceof RulesEventDispatcherInterface) {
        continue;
      }
      // Only stop an event dispatcher if there are no rules for it left.
      if (!rules_config_load_multiple(FALSE, array(
        'event' => $event_name,
        'plugin' => 'reaction rule',
        'active' => TRUE,
      )) && $handler
        ->isWatching()) {
        $handler
          ->stopWatching();
      }
    }
  }
  return $return;
}