diff --git a/commerce_discount.module b/commerce_discount.module index 70f3c12..1e9031f 100644 --- a/commerce_discount.module +++ b/commerce_discount.module @@ -381,9 +381,15 @@ function commerce_discount_commerce_discount_update($entity) { /** * Actually rebuild the defaults of a given entity. + * + * @param CommerceDiscount $commerce_discount_entity + * Fully loaded Commerce Discount entity to rebuild rules_config for. */ -function _commerce_discount_rebuild_rules_config($entity = NULL) { +function _commerce_discount_rebuild_rules_config(CommerceDiscount $commerce_discount_entity) { if (lock_acquire('entity_rebuild_rules_config')) { + $existing_rules_config = FALSE; + $rules_config_name = 'commerce_discount_rule_' . $commerce_discount_entity->name; + $info = entity_get_info('rules_config'); $hook = isset($info['export']['default hook']) ? $info['export']['default hook'] : 'default_rules_config'; $keys = $info['entity keys'] + array('module' => 'module', 'status' => 'status', 'name' => $info['entity keys']['id']); @@ -397,28 +403,34 @@ function _commerce_discount_rebuild_rules_config($entity = NULL) { // Invoke the hook and collect default entities. $entities = array(); foreach (module_implements($hook) as $module) { + /** @var RulesReactionRule $entity */ foreach ((array) module_invoke($module, $hook) as $name => $entity) { - $entity->{$keys['name']} = $name; - $entity->{$keys['module']} = $module; - $entities[$name] = $entity; + if ($name == $rules_config_name) { + $entity->{$keys['name']} = $name; + $entity->{$keys['module']} = $module; + $entities[$name] = $entity; + $existing_rules_config = TRUE; + } } } drupal_alter($hook, $entities); - // Check for defaults that disappeared. - $existing_defaults = entity_load_multiple_by_name('rules_config', FALSE, array($keys['status'] => array(ENTITY_OVERRIDDEN, ENTITY_IN_CODE, ENTITY_FIXED))); + // Check for defaults that disappeared or overridden? + if (!$existing_rules_config) { + $existing_defaults = entity_load_multiple_by_name('rules_config', FALSE, array($keys['status'] => array(ENTITY_OVERRIDDEN, ENTITY_IN_CODE, ENTITY_FIXED))); - foreach ($existing_defaults as $name => $entity) { - if (empty($entities[$name])) { - $entity->is_rebuild = TRUE; - if (entity_has_status('rules_config', $entity, ENTITY_OVERRIDDEN)) { - $entity->{$keys['status']} = ENTITY_CUSTOM; - entity_save('rules_config', $entity); - } - else { - entity_delete('rules_config', $name); + foreach ($existing_defaults as $name => $entity) { + if (empty($entities[$name]) && $name == $rules_config_name) { + $entity->is_rebuild = TRUE; + if (entity_has_status('rules_config', $entity, ENTITY_OVERRIDDEN)) { + $entity->{$keys['status']} = ENTITY_CUSTOM; + entity_save('rules_config', $entity); + } + else { + entity_delete('rules_config', $name); + } + unset($entity->is_rebuild); } - unset($entity->is_rebuild); } } diff --git a/includes/commerce_discount.controller.inc b/includes/commerce_discount.controller.inc index 995a9ff..f341022 100644 --- a/includes/commerce_discount.controller.inc +++ b/includes/commerce_discount.controller.inc @@ -77,8 +77,9 @@ class CommerceDiscountControllerExportable extends EntityAPIControllerExportable */ public function delete($ids, DatabaseTransaction $transaction = NULL) { parent::delete($ids, $transaction); - // Rebuild entities. - _commerce_discount_rebuild_rules_config(); + + // Rebuild rules config. + entity_defaults_rebuild(array('rules_config')); } }