You are here

function views_rss_yandex_realty_plugin_style_fields::options_form in Views RSS: Yandex Elements 7

Provide a form for setting options.

_state

Parameters

array $form:

Overrides views_rss_plugin_style_fields::options_form

File

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

Class

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

Code

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;
          }
        }
      }
    }
  }
}