You are here

function themekey_features_save_rule_childs in ThemeKey 7.3

Same name and namespace in other branches
  1. 6.4 themekey_features.module \themekey_features_save_rule_childs()
  2. 6.3 themekey_features.module \themekey_features_save_rule_childs()
  3. 7 themekey_features.module \themekey_features_save_rule_childs()
  4. 7.2 themekey_features.module \themekey_features_save_rule_childs()

Takes a serialized ThemeKey Rule Chain as created by themekey_features_load_rule_childs() and adds it to the current one in the database with it. Conflicting rules will be stored as well, but disabled.

Parameters

string $module: The name of the feature module whose components should be reverted.

$childs: serialized ThemeKey Rule Chain as array

$parent: internal use in recursion

2 calls to themekey_features_save_rule_childs()
themekey_features_rule_chain_features_enable_feature in ./themekey_features.module
Implements hook_features_enable_feature().
themekey_features_rule_chain_features_revert in ./themekey_features.module
Implements hook_features_revert().

File

./themekey_features.module, line 210

Code

function themekey_features_save_rule_childs($module, $childs, $force = FALSE, $parent = 0, $enabled = 1) {
  module_load_include('inc', 'themekey', 'themekey_build');
  foreach ($childs as $child) {
    $child['rule']['parent'] = $parent;
    $id = db_select('themekey_properties', 'tp')
      ->fields('tp', array(
      'id',
    ))
      ->condition('property', $child['rule']['property'])
      ->condition('operator', $child['rule']['operator'])
      ->condition('value', $child['rule']['value'])
      ->condition('parent', $child['rule']['parent'])
      ->condition('module', $module)
      ->condition('enabled', 0)
      ->execute()
      ->fetchField();
    if ($id) {

      // re-enable a disabled rule
      $child['rule']['id'] = $id;
    }
    try {
      themekey_rule_set($child['rule'], $module);
    } catch (ThemeKeyRuleConflictException $e) {

      // disable a conflicting rule
      if ($force) {
        themekey_rule_disable($e
          ->getCode());
      }
      else {
        $child['rule']['enabled'] = 0;
      }
      themekey_rule_set($child['rule'], $module);
      drupal_set_message(t('ThemeKey rule %rule has been disabled because it conflicts with an existing one.', array(
        '%rule' => $child['string'],
      )), 'warning');
    }
    themekey_features_save_rule_childs($module, $child['childs'], $force, $child['rule']['id'], $child['rule']['enabled']);
  }
}