You are here

function views_rss_plugin_style_fields::map_rows in Views RSS 7.2

Same name and namespace in other branches
  1. 6.2 views/views_rss_plugin_style_fields.inc \views_rss_plugin_style_fields::map_rows()

Map views row result to an RSS item.

File

views/views_rss_plugin_style_fields.inc, line 357
Extends the view_plugin_style class to provide new RSS view style.

Class

views_rss_plugin_style_fields
@file Extends the view_plugin_style class to provide new RSS view style.

Code

function map_rows($rows) {

  // Fields must be pre-rendered starting from version 2.3 of Views module.
  $rendered = $raw = array();
  $keys = array_keys($this->view->field);
  foreach ($rows as $count => $row) {
    $this->view->row_index = $count;
    foreach ($keys as $id) {
      $rendered[$count][$id] = $this->view->field[$id]
        ->theme($row);

      // Also let's keep raw value for further processing.
      $field_name = 'field_' . $id;
      if (!empty($row->{$field_name})) {
        $raw[$count][$id] = $row->{$field_name};
      }
    }
  }

  // Rewrite view rows to XML item rows.
  $items = $raw_items = array();
  $item_elements = views_rss_get('item_elements');
  foreach ($rendered as $id => $row) {
    $item = $raw_item = array();
    foreach ($item_elements as $module => $module_item_elements) {
      foreach (array_keys($module_item_elements) as $element) {
        list($namespace, $element_name) = views_rss_extract_element_names($element, 'core');

        // Assign values for all elements, not only those defined in view settings.
        // If element value is not defined in view settings, let's just assign NULL.
        // It will not be passed to final theme function anyway during processing
        // taking place in template_preprocess_views_view_views_rss().
        if (isset($this->options['item'][$namespace][$module][$element_name]) && isset($row[$this->options['item'][$namespace][$module][$element_name]])) {
          $item[$module][$element] = $row[$this->options['item'][$namespace][$module][$element_name]];
        }
        else {
          $item[$module][$element] = NULL;
        }

        // Keep raw values too.
        if (!empty($this->options['item'][$namespace][$module][$element_name]) && !empty($raw[$id][$this->options['item'][$namespace][$module][$element_name]])) {
          $raw_item[$module][$element] = $raw[$id][$this->options['item'][$namespace][$module][$element_name]];
        }
      }
    }
    $items[$id] = $item;
    $raw_items[$id] = $raw_item;
  }
  $this->view->views_rss['raw_items'] = $raw_items;
  return $items;
}