You are here

function rules_upgrade_plugin_factory in Rules 7.2

Creates the right element.

3 calls to rules_upgrade_plugin_factory()
rules_upgrade_convert_element in includes/rules.upgrade.inc
Convert a single element.
rules_upgrade_convert_rule in includes/rules.upgrade.inc
Converts a single reaction rule.
rules_upgrade_convert_rule_set in includes/rules.upgrade.inc
Converts a single rule set, including all of its rules.

File

includes/rules.upgrade.inc, line 297
Contains code for upgrading rule configurations from 6.x-1.x to 7.x-2.x.

Code

function rules_upgrade_plugin_factory($element) {
  if ($element['#type'] == 'rule' && !empty($element['#set']) && strpos($element['#set'], 'event_') === 0) {
    return rules_plugin_factory('reaction rule');
  }
  switch ($element['#type']) {
    case 'OR':
      return rules_plugin_factory('or');
    case 'AND':
      return rules_plugin_factory('and');
    default:
      return rules_plugin_factory($element['#type']);
    case 'action':
    case 'condition':
      if (isset($element['#name'])) {

        // Try to come up with the right action/condition name ourself, then
        // invoke a hook.
        $cache = rules_get_cache();
        $items = $cache[$element['#type'] == 'action' ? 'action_info' : 'condition_info'];
        if (isset($items[$element['#name']])) {
          $element_name = $element['#name'];
        }
        elseif (($name = str_replace('rules_', '', $element['#name'])) && isset($items[$name])) {
          $element_name = $name;
        }
        elseif (($name = str_replace($element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
          $element_name = $name;
        }
        elseif (($name = str_replace('rules_' . $element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
          $element_name = $name;
        }
        elseif (isset($element['#info']['base']) && isset($items[$element['#info']['base']])) {
          $element_name = $name;
        }

        // Call the upgrade callback if one has been defined.
        if (function_exists($function = $element['#name'] . '_upgrade_map_name') || isset($element['#info']['base']) && function_exists($function = $element['#info']['base'] . '_upgrade_map_name')) {
          $element_name = $function($element);
        }
        if (!isset($element_name)) {
          throw new RulesIntegrityException(t("Cannot find @plugin %name. Maybe a required is missing or the module has not implemented the upgrade functionality.", array(
            '@plugin' => $element['#type'],
            '%name' => $element['#name'],
          )));
        }
        return rules_plugin_factory($element['#type'], $element_name);
      }
      break;
  }
}