<?php

/**
 * @file
 * Features integration for 'context' module.
 *
 * The context module uses ctools to make contexts exportable. This is why no
 * function context_features_api() is found in this file.
 *
 * @todo Clarify if or why the other hooks in this file are still needed. See #3077097.
 */

/**
 * Implements hook_features_export().
 */
function context_features_export($data, &$export, $module_name = '') {
  $pipe = ctools_component_features_export('context', $data, $export, $module_name);

  $contexts = context_load();
  foreach ($data as $identifier) {
    if (isset($contexts[$identifier])) {
      $context = $contexts[$identifier];
      // Conditions.
      // Currently only node and views conditions are supported.
      // @TODO: Should this be delegated to a method on the plugin?
      foreach (array('node', 'views') as $key) {
        if (!empty($context->conditions[$key]['values'])) {
          foreach ($context->conditions[$key]['values'] as $item) {
            // Special pipe for views.
            if ($key === 'views') {
              $split = explode(':', $item);
              $view_name = array_shift($split);
              $pipe[$key][$view_name] = $view_name;
            }
            else {
              $pipe[$key][$item] = $item;
            }
          }
        }
      }
      // Reactions.
      if (!empty($context->reactions['block']['blocks'])) {
        foreach ($context->reactions['block']['blocks'] as $block) {
          $block = (array) $block;
          $bid = "{$block['module']}-{$block['delta']}";
          $pipe['block'][$bid] = $bid;
        }
      }
    }
  }
  return $pipe;
}

/**
 * Implements hook_features_revert().
 *
 * @param $module
 * name of module to revert content for
 */
function context_features_revert($module = NULL) {
  $return = ctools_component_features_revert('context', $module);
  context_invalidate_cache();
  return $return;
}
