You are here

function field_orbit_field_formatter_view in ZURB Orbit 7

Same name and namespace in other branches
  1. 7.2 field_orbit.module \field_orbit_field_formatter_view()

Implements hook_field_formatter_view().

File

./field_orbit.module, line 289
Implement a orbit formatter for fields.

Code

function field_orbit_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();

  // Media field support
  if ($field['type'] == 'media') {
    foreach ($items as $delta => $item) {
      $items[$delta] = (array) $item;
      $items[$delta]['uri'] = $item['file']->uri;
    }
  }
  elseif ($field['type'] == 'field_collection') {
    foreach ($items as $delta => $item) {
      $items[$delta] = (array) field_collection_field_get_entity($item);
      $items[$delta]['uri'] = $items[$delta][$settings['orbit_field_collection_image']][$langcode][0]['uri'];
    }
  }

  // Get correct caption
  if ($settings['orbit_caption'] != '') {
    foreach ($items as $delta => $item) {
      if ($field['type'] == 'media' || $field['type'] == 'field_collection') {
        if ($field['type'] == 'media') {
          $items[$delta]['caption'] = $items[$delta]['file']->{$settings}['orbit_caption'];
        }
        elseif ($field['type'] == 'field_collection') {
          $items[$delta]['caption'] = $items[$delta][$settings['orbit_caption']];
        }
        if (!empty($items[$delta]['caption']) && isset($items[$delta]['caption'][$langcode])) {
          $items[$delta]['caption'] = $items[$delta]['caption'][$langcode][0]['value'];
        }
        else {
          $items[$delta]['caption'] = '';
        }
      }
      else {
        $items[$delta]['caption'] = $item[$settings['orbit_caption']];
      }
    }
  }
  $links = array(
    'orbit_link' => 'path',
    'orbit_caption_link' => 'caption_path',
  );
  $content_uri = entity_uri($entity_type, $entity);

  // Get the correct field for identifying entity (used to get correct links)
  $entity_info = entity_get_info($entity_type);
  $entity_id_field = $entity_info['entity keys']['id'];

  // Loop through required links (because image and caption can have different links).
  foreach ($links as $setting => $path) {

    // Check if the formatter involves a link.
    $link_type = '';
    switch ($settings[$setting]) {
      case 'content':
        $link_type = 'content';
        break;
      case 'file':
        $link_type = 'file';
        break;
      default:
        if (($field['type'] == 'media' || $field['type'] == 'field_collection') && drupal_substr($settings[$setting], 0, 6) == 'field_') {
          $infos = field_info_field($settings[$setting]);
          $link_type = $infos['type'];
        }
        break;
    }

    // Generate special links (other than node)
    foreach ($items as $delta => $item) {
      $uri = array();
      switch ($link_type) {
        case 'content':
          $uri = $content_uri;
          break;
        case 'file':
          $uri = array(
            'path' => file_create_url($item['uri']),
            'options' => array(),
          );
          break;
        case 'link_field':
          if ($field['type'] == 'media') {
            $pathfield = $item['file']->{$settings}[$setting];
          }
          elseif ($field['type'] == 'field_collection') {
            $pathfield = $item[$settings[$setting]];
          }
          if (isset($pathfield[$langcode])) {
            $uri = array(
              'path' => $pathfield[$langcode][0]['url'],
              'options' => array(),
            );
          }
          break;
        case 'node_reference':
          if ($field['type'] == 'media') {
            $pathfield = $item['file']->{$settings}[$setting];
          }
          elseif ($field['type'] == 'field_collection') {
            $pathfield = $item[$settings[$setting]];
          }
          if (isset($pathfield[$langcode])) {
            $uri = array(
              'path' => drupal_get_path_alias('node/' . $pathfield[$langcode][0]['nid'], $langcode),
              'options' => array(),
            );
          }
          break;
      }
      $items[$delta][$path] = !empty($uri) ? $uri : '';
    }
  }
  if (count($items)) {
    $element[] = array(
      '#theme' => 'field_orbit',
      '#items' => $items,
      '#options' => array(
        'animation' => $settings['animation'],
        'animationSpeed' => $settings['animationSpeed'],
        'timer' => $settings['timer'],
        'resetTimerOnClick' => $settings['resetTimerOnClick'],
        'advanceSpeed' => $settings['advanceSpeed'],
        'pauseOnHover' => $settings['pauseOnHover'],
        'startClockOnMouseOut' => $settings['startClockOnMouseOut'],
        'startClockOnMouseOutAfter' => $settings['startClockOnMouseOutAfter'],
        'directionalNav' => $settings['directionalNav'],
        'captions' => $settings['captions'],
        'captionAnimation' => $settings['captionAnimation'],
        'captionAnimationSpeed' => $settings['captionAnimationSpeed'],
        'bullets' => $settings['bullets'],
        'bulletThumbs' => $settings['bulletThumbs'],
        'bulletThumbLocation' => $settings['bulletThumbLocation'],
        'fluid' => $settings['fluid'],
      ),
      '#entity' => $entity,
    );
  }
  return $element;
}