You are here

paragraphs_jquery_ui_accordion.module in Paragraphs jQuery UI Accordion 7

Same filename and directory in other branches
  1. 8 paragraphs_jquery_ui_accordion.module

Paragraphs jQuery UI Accordion hooks and common functions.

File

paragraphs_jquery_ui_accordion.module
View source
<?php

/**
 * @file
 * Paragraphs jQuery UI Accordion hooks and common functions.
 */

/**
 * Implements hook_field_formatter_info().
 */
function paragraphs_jquery_ui_accordion_field_formatter_info() {
  return array(
    'paragraphs_jquery_ui_accordion_formatter' => array(
      'label' => t('Paragraphs jQuery UI Accordion'),
      'field types' => array(
        'paragraphs',
      ),
      'settings' => array(
        'bundle' => NULL,
        'title' => NULL,
        'content' => NULL,
        'autoscroll' => NULL,
      ),
    ),
  );
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function paragraphs_jquery_ui_accordion_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary = t('Use fields <strong>@title</strong> and <strong>@content</strong> with paragraphs bundle <strong>@bundle</strong> and autoscroll <strong>@autoscroll</strong>', array(
    '@bundle' => $settings['bundle'],
    '@title' => $settings['title'],
    '@content' => $settings['content'],
    '@autoscroll' => $settings['autoscroll'] ? t('enabled') : t('disabled'),
  ));
  return $summary;
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function paragraphs_jquery_ui_accordion_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $element = array();
  $bundles = paragraphs_bundle_load();
  $paragraphs_fields = $bundles_options = array();
  foreach ($bundles as $bundle) {
    $instances = field_info_instances('paragraphs_item', $bundle->bundle);
    $bundles_options[$bundle->bundle] = $bundle->name;
    foreach ($instances as $paragraphs_instance) {
      $paragraphs_fields[$paragraphs_instance['field_name']] = $paragraphs_instance['label'];
    }
  }
  $element['bundle'] = array(
    '#type' => 'select',
    '#title' => t('Paragraph bundle'),
    '#default_value' => $settings['bundle'],
    '#options' => $bundles_options,
  );
  $element['title'] = array(
    '#type' => 'select',
    '#title' => t('Paragraph title'),
    '#default_value' => $settings['title'],
    '#options' => $paragraphs_fields,
  );
  $element['content'] = array(
    '#type' => 'select',
    '#title' => t('Paragraph content'),
    '#default_value' => $settings['content'],
    '#options' => $paragraphs_fields,
  );
  $element['autoscroll'] = array(
    '#type' => 'checkbox',
    '#title' => t('AutoScroll'),
    '#default_value' => isset($settings['autoscroll']) ? $settings['autoscroll'] : 0,
  );
  return $element;
}

/**
 * Implements hook_field_formatter_view().
 */
function paragraphs_jquery_ui_accordion_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();
  $settings = $display['settings'];
  $entity_ids = entity_extract_ids($entity_type, $entity);
  $entity_id = $entity_ids[0];
  $accordion_id = 'accordion-' . $entity_id;
  $element[0]['#attached'] = array(
    'library' => array(
      array(
        'system',
        'ui.accordion',
      ),
    ),
    'js' => array(
      array(
        'data' => drupal_get_path('module', 'paragraphs_jquery_ui_accordion') . '/js/paragraphs_jquery_ui_accordion.js',
        'type' => 'file',
      ),
      array(
        'data' => array(
          'paragraphs_jquery_ui_accordion' => array(
            'ids' => array(
              $entity_id => $accordion_id,
            ),
            'autoscroll' => $settings['autoscroll'],
          ),
        ),
        'type' => 'setting',
      ),
    ),
  );
  $element[0]['accordion'] = array(
    '#type' => 'container',
    '#attributes' => array(
      'id' => $accordion_id,
    ),
  );
  $paragraphs_ids = array();
  foreach ($items as $id => $item) {
    $paragraphs_ids[$id] = $item['value'];
  }
  $paragraphs_items = entity_load('paragraphs_item', $paragraphs_ids);
  foreach ($paragraphs_items as $paragraphs_item) {
    $display = array(
      'label' => 'hidden',
    );
    $paragraph_field = field_view_field('paragraphs_item', $paragraphs_item, $settings['content'], $display, $langcode = NULL);
    $render_paragraph_field = drupal_render($paragraph_field);
    $title = field_get_items('paragraphs_item', $paragraphs_item, $settings['title']);
    $paragraphs_unique_id = drupal_html_id(strtolower($title[0]['value']));
    $element[0]['accordion'][] = array(
      'title' => array(
        '#markup' => '<h3><a id="' . $paragraphs_unique_id . '" href="#' . $paragraphs_unique_id . '">' . $title[0]['value'] . '</a></h3>',
      ),
      'content' => array(
        '#markup' => '<div>' . $render_paragraph_field . '</div>',
      ),
    );
  }
  return $element;
}