You are here

function file_shadowbox_field_formatter_view in Shadowbox 7.4

Implements hook_field_formatter_view().

File

file_shadowbox/file_shadowbox.module, line 196
File Shadowbox, a JavaScript media viewer application for displaying content in a modal dialogue for file field.

Code

function file_shadowbox_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  // check if shadowbox is enabled on current node
  $shadowbox_enabled_path = _shadowbox_activation() && variable_get('shadowbox_enabled', TRUE);
  switch ($display['settings']['gallery']) {
    case 'page':
      $gallery_id = 'gallery';
      break;
    case 'field':
      $gallery_id = $field['field_name'];
      break;
    case 'nid':
      $info = entity_get_info($entity_type);
      $id = $info['entity keys']['id'];
      $gallery_id = "{$entity_type}-{$entity->{$id}}";
      break;
    case 'field_nid':
      $info = entity_get_info($entity_type);
      $id = $info['entity keys']['id'];
      $gallery_id = "{$entity_type}-{$entity->{$id}}-{$field['field_name']}";
      break;
    default:
      $gallery_id = "";
      break;
  }
  $rel_gallery = $gallery_id != '' ? "shadowbox[{$gallery_id}]" : 'shadowbox';
  $width = $display['settings']['video_width'];
  $height = $display['settings']['video_height'];
  $compact = isset($display['settings']['compact']) && $display['settings']['compact'];
  $node_title = '';
  if (isset($entity->title)) {
    $node_title = $entity->title;
  }
  else {
    if ($entity_type == 'node' && is_numeric(arg(1))) {
      $node = node_load(arg(1));
      $node_title = $node->title;
    }
  }
  foreach ($items as $delta => $item) {
    if ($display['settings']['title'] == 'node') {
      $title = $node_title;
    }
    else {
      if ($display['settings']['title'] == 'description') {
        $title = isset($item['description']) && $item['description'] ? $item['description'] : '';
      }
      else {
        $title = '';
      }
    }
    $autoplay = variable_get('shadowbox_autoplay_movies', 1);
    switch ($item['filemime']) {
      case 'video/youtube':
        $youtube_id = substr($item['uri'], strrpos($item['uri'], "/") + 1);
        $url = 'http://www.youtube.com/embed/' . $youtube_id;
        $querystring = array();
        if ($autoplay) {
          $querystring['autoplay'] = 1;
        }
        $youtube_quality = variable_get('shadowbox_youtube_quality', 'auto');
        if ($youtube_quality != 'auto') {
          $querystring['vq'] = $youtube_quality;
        }
        $url = !empty($querystring) ? $url . '?' . http_build_query($querystring) : $url;
        $ico = 'youtube.png';
        if (module_exists('media_youtube')) {
          $path = file_stream_wrapper_get_instance_by_uri($item['uri'])
            ->getLocalThumbnailPath();
          $image_style = $display['settings']['image_style'];
        }
        else {
          $path = 'http://img.youtube.com/vi/' . $youtube_id . '/0.jpg';
          $image_style = '';
        }
        $attributes = array(
          'width' => $display['settings']['video_thumb'] . 'px',
        );
        $rel = $rel_gallery . '; width=' . $width . '; height=' . $height;
        break;
      case 'video/vimeo':
        if (module_exists('media_vimeo')) {
          $parts = file_stream_wrapper_get_instance_by_uri($item['uri'])
            ->get_parameters();
          $vimeo_id = intval($parts['v']);
          $url = 'http://player.vimeo.com/video/' . $vimeo_id;
          $path = file_stream_wrapper_get_instance_by_uri($item['uri'])
            ->getLocalThumbnailPath();
          $image_style = $display['settings']['image_style'];
        }
        else {
          $url = 'http://player.vimeo.com/video/' . $item['filename'];
          $path = _get_vimeo_thumbnail($item['filename']);
          $image_style = '';
        }
        $url = $autoplay ? $url . '?autoplay=1' : $url;
        $ico = 'vimeo.png';
        $attributes = array(
          'width' => $display['settings']['video_thumb'] . 'px',
        );
        $rel = $rel_gallery . '; width=' . $width . '; height=' . $height;
        break;
      case 'video/quicktime':
        $url = file_create_url($item['uri']);
        $ico = 'mov.png';
        $path = FILE_SHADOWBOX_ICOPATH . $ico;
        $image_style = '';
        $rel = $rel_gallery . '; width=' . $width . '; height=' . $height;
        break;
      case 'video/x-ms-wmv':
        $url = file_create_url($item['uri']);
        $ico = 'wmv.png';
        $path = FILE_SHADOWBOX_ICOPATH . $ico;
        $image_style = '';
        $rel = $rel_gallery . '; width=' . $width . '; height=' . $height;
        break;
      case 'video/x-flv':
        $url = file_create_url($item['uri']);
        $ico = 'flv.png';
        $path = FILE_SHADOWBOX_ICOPATH . $ico;
        $image_style = '';
        $rel = $rel_gallery . '; width=' . $width . '; height=' . $height;
        break;
      case 'application/x-shockwave-flash':
        $url = file_create_url($item['uri']);
        $ico = 'swf.png';
        $path = FILE_SHADOWBOX_ICOPATH . $ico;
        $image_style = '';
        $rel = $rel_gallery . '; player=swf; width=' . $width . '; height=' . $height;
        break;
      case 'application/pdf':
        $url = file_create_url($item['uri']);
        $ico = 'pdf.png';
        $path = FILE_SHADOWBOX_ICOPATH . $ico;
        $image_style = '';
        $rel = '';
        break;
      default:
        if (strstr($item['filemime'], 'image/')) {
          $linked_style = $display['settings']['image_link'];
          if ($linked_style) {
            $uri = image_style_path($linked_style, $item['uri']);
            if (!file_exists($uri)) {
              $uri = image_style_url($linked_style, $item['uri']);
            }
          }
          else {
            $uri = $item['uri'];
          }
          $url = file_create_url($uri);
          $ico = 'image.png';
          $path = $item['uri'];
          $image_style = $display['settings']['image_style'];
          $rel = $rel_gallery;
        }
        else {
          $url = file_create_url($item['uri']);
          $ico = 'generic.png';
          $path = FILE_SHADOWBOX_ICOPATH . $ico;
          $image_style = '';
          $rel = '';
        }
        break;
    }
    $thumb = array(
      'image_style' => $image_style,
      'title' => $title,
      'alt' => $title,
      'attributes' => isset($attributes) ? $attributes : NULL,
    );
    if ($display['settings']['icon'] === 'ico') {
      $thumb['path'] = FILE_SHADOWBOX_ICOPATH . $ico;
    }
    else {
      $thumb['path'] = $path;
    }
    $element[$delta] = array(
      '#theme' => 'shadowbox_formatter',
      '#innerHTML' => $delta == 0 || !$compact ? theme('shadowbox_thumbnail', $thumb) : '',
      '#title' => $title,
      '#url' => $url,
      '#rel' => $rel,
      '#class' => $gallery_id != '' ? "sb-image sb-gallery sb-gallery-{$gallery_id}" : 'sb-image sb-individual',
    );
    if ($shadowbox_enabled_path) {
      $element[$delta]['#attached']['library'][] = array(
        'shadowbox',
        'shadowbox',
      );
    }
  }
  return $element;
}