You are here

image_link_to_file.module in Image link to file 7

Image link to file

File

image_link_to_file.module
View source
<?php

/**
 * @file
 * Image link to file
 */

/**
 * Implements hook_field_formatter_info().
 */
function image_link_to_file_field_formatter_info() {
  return array(
    'image_link_to_file' => array(
      'label' => t('Image linked to file'),
      'field types' => array(
        'image',
      ),
      'settings' => array(
        'img_style' => NULL,
        'img_link' => NULL,
        'new_tab' => FALSE,
      ),
      'description' => t('Displays an image linked to a file field.'),
    ),
  );
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function image_link_to_file_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary = '';
  $styles = image_style_options();
  if (isset($settings['img_link'])) {
    $file_field = field_info_instance($instance['entity_type'], $settings['img_link'], $instance['bundle']);
    $file_field_label = $file_field['label'];
  }
  else {
    $file_field_label = '';
  }
  if ($display['type'] == 'image_link_to_file') {
    $summary = t('Image style: @style<br />Image linked to: @doc @newtab', array(
      '@style' => isset($settings['img_style']) ? $styles[$settings['img_style']] : '',
      '@doc' => $file_field_label ? $file_field_label : t('<nothing>'),
      '@newtab' => $settings['new_tab'] ? t('(in a new win or tab)') : '',
    ));
  }
  return $summary;
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function image_link_to_file_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $all_fields = field_info_instances($instance['entity_type'], $instance['bundle']);
  $file_fields = array();
  foreach ($all_fields as $fld) {
    $fld_info = field_info_field($fld['field_name']);
    if ($fld_info['type'] == 'file') {
      $file_fields[$fld['field_name']] = $fld['label'];
    }
  }
  $element = array();
  if ($display['type'] == 'image_link_to_file') {
    $element['img_style'] = array(
      '#title' => t('Image style'),
      '#type' => 'select',
      '#options' => image_style_options(),
      '#default_value' => $settings['img_style'],
      '#empty_option' => t('None (original image)'),
      '#required' => FALSE,
    );
    $element['img_link'] = array(
      '#title' => t('Image link'),
      '#type' => 'select',
      '#options' => $file_fields,
      '#default_value' => $settings['img_link'],
      '#empty_option' => t('No link'),
      '#required' => FALSE,
    );
    $element['new_tab'] = array(
      '#title' => t('Open image in a new window or tab'),
      '#type' => 'checkbox',
      '#default_value' => $settings['new_tab'],
    );
  }
  return $element;
}

/**
 * Implements hook_field_formatter_view().
 */
function image_link_to_file_field_formatter_view($obj_type, $object, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $file_field_name = $settings['img_link'];
  if ($file_field_name) {
    $file_items = field_get_items($obj_type, $object, $file_field_name);

    // Select only the first field.
    $file_item = $file_items[0];
    $file_uri = file_create_url($file_item['uri']);
  }
  $element = array();
  if ($display['type'] == 'image_link_to_file') {
    foreach ($items as $delta => $item) {
      $element[$delta] = array(
        '#theme' => 'image_formatter',
        '#item' => $item,
        '#image_style' => $settings['img_style'],
        '#path' => isset($file_item) && $file_item ? array(
          'path' => $file_uri,
          'options' => array(
            'html' => TRUE,
            'attributes' => array(
              'target' => $settings['new_tab'] ? '_blank' : '_self',
            ),
          ),
        ) : NULL,
      );
    }
  }
  return $element;
}

/**
 * Implements hook_help().
 */
function image_link_to_file_help($path, $arg) {
  switch ($path) {
    case 'admin/help#image_link_to_file':

      // Return a line-break version of the module README.txt.
      return check_markup(file_get_contents(dirname(__FILE__) . "/README.txt"));
  }
}