You are here

class views_rss_yandex_realty_plugin_style_fields in Views RSS: Yandex Elements 7

@file Extends the views_rss_plugin_style_fields class to provide RSS for Yandex.Realty.

Hierarchy

Expanded class hierarchy of views_rss_yandex_realty_plugin_style_fields

1 string reference to 'views_rss_yandex_realty_plugin_style_fields'
views_rss_yandex_realty_views_plugins in views_rss_yandex_realty/views/views_rss_yandex_realty.views.inc
Implements hook_views_plugins().

File

views_rss_yandex_realty/views/views_rss_yandex_realty_plugin_style_fields.inc, line 8
Extends the views_rss_plugin_style_fields class to provide RSS for Yandex.Realty.

View source
class views_rss_yandex_realty_plugin_style_fields extends views_rss_plugin_style_fields {
  function option_definition() {
    $options = parent::option_definition();

    // Unset not needed options.
    foreach (array(
      'namespaces',
      'channel',
      'item',
      'feed_settings',
    ) as $key) {
      unset($options[$key]);
    }

    // Offer element defaults.
    $offer_elements = views_rss_get('yandex_realty_offer_elements');
    if (count($offer_elements)) {
      foreach ($offer_elements as $module => $module_offer_elements) {
        foreach (array_keys($module_offer_elements) as $element) {
          list($namespace, $element_name) = views_rss_extract_element_names($element, 'yandex_realty_offer');
          $options['offer'][$namespace][$module][$element_name] = array(
            'default' => NULL,
          );
        }
      }
    }
    return $options;
  }
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);

    // Unset not needed form elements.
    foreach (array(
      'namespaces',
      'channel',
      'item',
      'feed_settings',
    ) as $key) {
      unset($form[$key]);
    }
    $handlers = $this->display->handler
      ->get_handlers('field');

    // Field chooser.
    $field_names = array(
      '' => '--',
    );
    foreach ($handlers as $field => $handler) {
      if ($label = $handler
        ->label()) {
        $field_names[$field] = $label;
      }
      else {
        $field_names[$field] = $handler
          ->ui_name();
      }
    }
    $element_groups = views_rss_get('element_groups');

    // Offer elements settings.
    $offer_elements = views_rss_get('yandex_realty_offer_elements');
    if (count($offer_elements)) {
      foreach ($offer_elements as $module => $module_offer_elements) {
        foreach ($module_offer_elements as $element => $definition) {
          if (!isset($definition['configurable']) || $definition['configurable']) {
            list($namespace, $element_name) = views_rss_extract_element_names($element, 'yandex_realty_offer');

            // Add fieldset for namespace if not yet added.
            if (!isset($form['offer'][$namespace])) {
              $form['offer'][$namespace] = array(
                '#type' => 'fieldset',
                '#title' => t('Yandex.Realty offer elements : @namespace', array(
                  '@namespace' => $namespace,
                )),
                '#description' => t('Select fields containing relevant values for &lt;offer&gt; elements in "@namespace" namespace. See <a href="@guide_url">Views RSS documentation</a> for more information.', array(
                  '@namespace' => $namespace,
                  '@guide_url' => url('http://drupal.org/node/1344136'),
                )),
                '#collapsible' => TRUE,
                '#collapsed' => FALSE,
              );
            }

            // Prepare form element.
            $default_value = NULL;
            if (!empty($this->options['offer'][$namespace][$module][$element_name])) {
              $default_value = $this->options['offer'][$namespace][$module][$element_name];
            }
            $form_item = array(
              '#type' => 'select',
              '#title' => filter_xss(isset($definition['title']) ? $definition['title'] : $element_name),
              '#description' => filter_xss(isset($definition['description']) ? $definition['description'] : NULL),
              '#options' => $field_names,
              '#default_value' => $default_value,
            );

            // Allow to overwrite default form element.
            if (!empty($definition['settings form'])) {
              $form_item = array_merge($form_item, $definition['settings form']);

              // Make sure that #options is an associative array.
              if (!empty($definition['settings form']['#options'])) {
                $form_item['#options'] = views_rss_map_assoc($definition['settings form']['#options']);
              }
            }

            // Allow to add into possible options.
            if (!empty($definition['settings form options']) && is_array($definition['settings form options'])) {
              $form_item['#options'] = array_merge($definition['settings form options'], $field_names);
            }

            // Add help link if provided.
            if (isset($definition['help']) && $definition['help']) {
              $form_item['#description'] .= ' ' . l('[?]', $definition['help'], array(
                'attributes' => array(
                  'title' => t('Need more information?'),
                ),
              ));
            }

            // Check if element should be displayed in a subgroup.
            if (isset($definition['group']) && $definition['group']) {

              // Add a subgroup to the form if it not yet added.
              if (!isset($form['offer'][$namespace][$module][$definition['group']])) {

                // Does module provide the group definition?
                $group_title = !empty($element_groups[$module][$definition['group']]['title']) ? $element_groups[$module][$definition['group']]['title'] : $definition['group'];
                $group_description = !empty($element_groups[$module][$definition['group']]['description']) ? $element_groups[$module][$definition['group']]['description'] : NULL;
                $form['offer'][$namespace][$module][$definition['group']] = array(
                  '#type' => 'fieldset',
                  '#title' => filter_xss($group_title),
                  '#description' => filter_xss($group_description),
                  '#collapsible' => TRUE,
                  '#collapsed' => TRUE,
                  // Do not include group into form element parents.
                  '#parents' => array(
                    'style_options',
                    'offer',
                    $namespace,
                    $module,
                  ),
                );
              }
              $form['offer'][$namespace][$module][$definition['group']][$element_name] = $form_item;
            }
            else {
              $form['offer'][$namespace][$module][$element_name] = $form_item;
            }
          }
        }
      }
    }
  }

  /**
   * Map views row result to an RSS item.
   */
  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();
    $offer_elements = views_rss_get('yandex_realty_offer_elements');
    foreach ($rendered as $id => $row) {
      $item = $raw_item = array();
      foreach ($offer_elements as $module => $module_item_elements) {
        foreach (array_keys($module_item_elements) as $element) {
          list($namespace, $element_name) = views_rss_extract_element_names($element, 'yandex_realty_offer');

          // 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_yandex_realty().
          if (isset($this->options['offer'][$namespace][$module][$element_name]) && isset($row[$this->options['offer'][$namespace][$module][$element_name]])) {
            $item[$module][$element] = $row[$this->options['offer'][$namespace][$module][$element_name]];
          }
          elseif (isset($this->options['offer'][$namespace][$module][$element_name]) && substr($this->options['offer'][$namespace][$module][$element_name], 0, 24) == 'views_rss_yandex_realty_') {
            $item[$module][$element] = $this->options['offer'][$namespace][$module][$element_name];
          }
          else {
            $item[$module][$element] = NULL;
          }

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

}

Members

Namesort descending Modifiers Type Description Overrides
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::$view public property The top object of a view. Overrides views_object::$view 1
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin_style::$row_plugin public property The row plugin, if it's initialized and the style itself supports it.
views_plugin_style::$row_tokens public property Store all available tokens row rows.
views_plugin_style::build_sort public function Called by the view builder to see if this style handler wants to interfere with the sorts. If so it should build; if it returns any non-TRUE value, normal sorting will NOT be added to the query. 1
views_plugin_style::build_sort_post public function Called by the view builder to let the style build a second set of sorts that will come after any other sorts in the view. 1
views_plugin_style::destroy public function Destructor. Overrides views_object::destroy
views_plugin_style::even_empty public function Should the output of the style plugin be rendered even if it's empty. 1
views_plugin_style::get_field public function Get a rendered field.
views_plugin_style::get_field_value public function Get the raw field value.
views_plugin_style::get_row_class public function Return the token replaced row class for the specified row.
views_plugin_style::init public function Initialize a style plugin.
views_plugin_style::pre_render public function Allow the style to do stuff before each row is rendered.
views_plugin_style::query public function Add anything to the query that we might need to. Overrides views_plugin::query 2
views_plugin_style::render public function Render the display in this style. 5
views_plugin_style::render_fields public function Render all of the fields for a given style and store them on the object.
views_plugin_style::render_grouping public function Group records as needed for rendering.
views_plugin_style::render_grouping_sets public function Render the grouping sets.
views_plugin_style::tokenize_value public function Take a value and apply token replacement logic to it.
views_plugin_style::uses_fields public function Return TRUE if this style also uses fields.
views_plugin_style::uses_row_class public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_row_plugin public function Return TRUE if this style also uses a row plugin.
views_plugin_style::uses_tokens public function Return TRUE if this style uses tokens.
views_rss_plugin_style_fields::attach_to function Attach this view to another display as a feed.
views_rss_plugin_style_fields::options_submit function Allow other modules to perform any necessary changes to options form values prior to storage. Overrides views_plugin::options_submit
views_rss_plugin_style_fields::options_validate function Allow other modules to validate options form values prior to submit. Overrides views_plugin_style::options_validate
views_rss_plugin_style_fields::validate function Make sure the display and all associated handlers are valid. Overrides views_plugin_style::validate
views_rss_yandex_realty_plugin_style_fields::map_rows function Map views row result to an RSS item. Overrides views_rss_plugin_style_fields::map_rows
views_rss_yandex_realty_plugin_style_fields::options_form function Provide a form for setting options. Overrides views_rss_plugin_style_fields::options_form
views_rss_yandex_realty_plugin_style_fields::option_definition function Information about options for all kinds of purposes will be held here. Overrides views_rss_plugin_style_fields::option_definition