function RulesEntityController::delete
Overridden to also delete tags and events.
See also
EntityAPIControllerExportable::delete()
File
-
includes/
rules.core.inc, line 265
Class
- RulesEntityController
- Make sure loaded rule configs are instantiated right.
Code
public function delete($ids, DatabaseTransaction $transaction = NULL) {
$transaction = isset($transaction) ? $transaction : db_transaction();
// Use entity-load as ids may be the names as well as the ids.
$configs = $ids ? entity_load('rules_config', $ids) : array();
if ($configs) {
foreach ($configs as $config) {
db_delete('rules_trigger')->condition('id', $config->id)
->execute();
db_delete('rules_tags')->condition('id', $config->id)
->execute();
db_delete('rules_dependencies')->condition('id', $config->id)
->execute();
}
}
$return = parent::delete($ids, $transaction);
// Stop event dispatchers when deleting the last rule of an event set.
$processed = array();
foreach ($configs as $config) {
if ($config->getPluginName() != 'reaction rule') {
continue;
}
foreach ($config->events() as $event_name) {
// Only process each event once.
if (!empty($processed[$event_name])) {
continue;
}
$processed[$event_name] = TRUE;
// Check if the event handler implements the event dispatcher interface.
$handler = rules_get_event_handler($event_name, $config->getEventSettings($event_name));
if (!$handler instanceof RulesEventDispatcherInterface) {
continue;
}
// Only stop an event dispatcher if there are no rules for it left.
if ($handler->isWatching() && !rules_config_load_multiple(FALSE, array(
'event' => $event_name,
'plugin' => 'reaction rule',
'active' => TRUE,
))) {
$handler->stopWatching();
}
}
}
return $return;
}