You are here

function views_rules_update_clean_collect_action_variable_names in Views Rules 7

Cleans up variable names in collect actions.

Parameters

RulesContainerPlugin $container:

2 calls to views_rules_update_clean_collect_action_variable_names()
ViewsRulesUpdateTestCase::testCleanCollectActionVariableNames in tests/views_rules.test
Tests views_rules_update_clean_collect_action_variable_names().
views_rules_update_7000 in ./views_rules.install
Updates collect action settings.

File

./views_rules.install, line 25
Module installation file.

Code

function views_rules_update_clean_collect_action_variable_names($container) {
  $changed = FALSE;
  $iterator = new RecursiveIteratorIterator($container
    ->getIterator(), RecursiveIteratorIterator::SELF_FIRST);
  foreach ($iterator as $element) {

    /** @var RulesAction $element */
    if ($element instanceof RulesAction && $element
      ->getElementName() == 'views_rules_collect_rows') {
      $updated_settings = array();
      $parameter_info = array();
      $variable_info = array();
      if (!empty($element->settings['display']) && ($view = views_rules_get_view($element->settings['display']))) {

        /** @var $display views_rules_plugin_display_rules */
        $display = $view->display_handler;
        $parameter_info = $display
          ->get_rules_parameter_info();
        $variable_info = $display
          ->get_rules_variable_info();
      }
      foreach ($element->settings as $key => $value) {
        $updated_key = $key;
        $updated_value = $value;

        // Transform 'display' key.
        if ($key == 'display') {
          $updated_key = 'views_rules_display';
          $changed = TRUE;
        }
        elseif (preg_match('/^param_([^:]*)/', $key, $match) && isset($parameter_info[$match[1]])) {
          $updated_key = substr($key, 6);
          $changed = TRUE;
        }
        elseif (preg_match('/^list_([^:]*)/', $key, $match) && isset($variable_info[$match[1]])) {
          $updated_key = substr($key, 5);
          $changed = TRUE;
        }
        $updated_settings[$updated_key] = $updated_value;
      }
      $element->settings = $updated_settings;
    }
  }
  return $changed;
}