You are here

prettyphoto_formatters_youtube.module in prettyPhoto Formatters 7

prettyPhoto Youtube formatter hooks and callbacks.

File

modules/prettyphoto_formatters_youtube/prettyphoto_formatters_youtube.module
View source
<?php

/**
 * @file
 * prettyPhoto Youtube formatter hooks and callbacks.
 */

/**
 * Implements hook_field_formatter_info().
 */
function prettyphoto_formatters_youtube_field_formatter_info() {
  $formatters = array();
  $formatters = array(
    // This formatter displays your youtube video.
    'prettyphoto_youtube_video' => array(
      'label' => t('prettyphoto: YouTube video'),
      'field types' => array(
        'youtube',
      ),
      'settings' => array(
        'youtube_size' => '420x315',
        'youtube_tsize' => '420x315',
        'youtube_width' => NULL,
        'youtube_height' => NULL,
        'youtube_autoplay' => FALSE,
        'youtube_showinfo' => FALSE,
        'youtube_controls' => FALSE,
        'youtube_autohide' => FALSE,
        'youtube_iv_load_policy' => FALSE,
      ),
    ),
  );
  return $formatters;
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function prettyphoto_formatters_youtube_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  if ($display['type'] == 'prettyphoto_youtube_video') {
    $element['youtube_size'] = array(
      '#type' => 'select',
      '#title' => t('YouTube video size'),
      '#options' => youtube_size_options(),
      '#default_value' => $settings['youtube_size'],
    );
    $element['youtube_width'] = array(
      '#type' => 'textfield',
      '#title' => t('Width'),
      '#size' => 10,
      '#default_value' => $settings['youtube_width'],
      '#states' => array(
        'visible' => array(
          ':input[name="fields[' . $field['field_name'] . '][settings_edit_form][settings][youtube_size]"]' => array(
            'value' => 'custom',
          ),
        ),
      ),
    );
    $element['youtube_height'] = array(
      '#type' => 'textfield',
      '#title' => t('Height'),
      '#size' => 10,
      '#default_value' => $settings['youtube_height'],
      '#states' => array(
        'visible' => array(
          ':input[name="fields[' . $field['field_name'] . '][settings_edit_form][settings][youtube_size]"]' => array(
            'value' => 'custom',
          ),
        ),
      ),
    );
    $element['youtube_tsize'] = array(
      '#type' => 'select',
      '#title' => t('Thumbnail style'),
      '#options' => image_style_options(FALSE),
      '#default_value' => $settings['youtube_tsize'],
      '#empty_option' => t('None (original image)'),
    );
    $element['youtube_autoplay'] = array(
      '#type' => 'checkbox',
      '#title' => t('Play video automatically when loaded (autoplay).'),
      '#default_value' => $settings['youtube_autoplay'],
    );
    $element['youtube_showinfo'] = array(
      '#type' => 'checkbox',
      '#title' => t('Hide video title and uploader info (showinfo).'),
      '#default_value' => $settings['youtube_showinfo'],
    );
    $element['youtube_controls'] = array(
      '#type' => 'checkbox',
      '#title' => t('Always hide video controls (controls).'),
      '#default_value' => $settings['youtube_controls'],
    );
    $element['youtube_autohide'] = array(
      '#type' => 'checkbox',
      '#title' => t('Hide video controls after play begins (autohide).'),
      '#default_value' => $settings['youtube_autohide'],
    );
    $element['youtube_iv_load_policy'] = array(
      '#type' => 'checkbox',
      '#title' => t('Hide video annotations by default (iv_load_policy).'),
      '#default_value' => $settings['youtube_iv_load_policy'],
    );
  }
  return $element;
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function prettyphoto_formatters_youtube_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $parameters = array(
    $settings['youtube_autoplay'],
    $settings['youtube_showinfo'],
    $settings['youtube_controls'],
    $settings['youtube_autohide'],
    $settings['youtube_iv_load_policy'],
  );

  // Summary for the video style.
  if ($display['type'] == 'prettyphoto_youtube_video') {
    $video_sizes = youtube_size_options();
    if (isset($video_sizes[$settings['youtube_size']])) {
      $summary = t('YouTube video: @size', array(
        '@size' => $video_sizes[$settings['youtube_size']],
      ));
    }
    else {
      $summary = t('YouTube video: 450px by 315px');
    }
    foreach ($parameters as $parameter) {
      if ($parameter) {
        $summary .= t(', custom parameters');
        break;
      }
    }
    $image_styles = image_style_options(FALSE);

    // Unset possible 'No defined styles' option.
    unset($image_styles['']);
    if (isset($image_styles[$settings['youtube_tsize']])) {
      $summary .= t('Image style: @style', array(
        '@style' => $image_styles[$settings['youtube_tsize']],
      ));
    }
    else {
      $summary .= t('Original image');
    }
    return $summary;
  }
}

/**
 * Implements hook_field_formatter_view().
 */
function prettyphoto_formatters_youtube_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  // Get YouTube (field) settings.
  $size = array_key_exists('youtube_size', $display['settings']) ? $display['settings']['youtube_size'] : NULL;
  $tsize = array_key_exists('youtube_tsize', $display['settings']) ? $display['settings']['youtube_tsize'] : NULL;
  $width = array_key_exists('youtube_width', $display['settings']) ? $display['settings']['youtube_width'] : NULL;
  $height = array_key_exists('youtube_height', $display['settings']) ? $display['settings']['youtube_height'] : NULL;
  $autoplay = array_key_exists('youtube_autoplay', $display['settings']) ? $display['settings']['youtube_autoplay'] : FALSE;
  $showinfo = array_key_exists('youtube_showinfo', $display['settings']) ? $display['settings']['youtube_showinfo'] : FALSE;
  $controls = array_key_exists('youtube_controls', $display['settings']) ? $display['settings']['youtube_controls'] : FALSE;
  $autohide = array_key_exists('youtube_autohide', $display['settings']) ? $display['settings']['youtube_autohide'] : FALSE;
  $iv_load_policy = array_key_exists('youtube_iv_load_policy', $display['settings']) ? $display['settings']['youtube_iv_load_policy'] : FALSE;
  $field_settings = array(
    'size' => check_plain($size),
    'tsize' => check_plain($tsize),
    'width' => check_plain($width),
    'height' => check_plain($height),
    'autoplay' => (bool) $autoplay,
    'showinfo' => (bool) $showinfo,
    'controls' => (bool) $controls,
    'autohide' => (bool) $autohide,
    'iv_load_policy' => (bool) $iv_load_policy,
  );

  // Get YouTube (module) settings.
  $suggest = variable_get('youtube_suggest', TRUE);
  $privacy = variable_get('youtube_privacy', FALSE);
  $modest_branding = variable_get('youtube_modestbranding', FALSE);
  $theme = variable_get('youtube_theme', FALSE);
  $color = variable_get('youtube_color', FALSE);
  $enable_js_api = variable_get('youtube_enablejsapi', FALSE);
  $wmode = variable_get('youtube_wmode', TRUE);
  $dimensions = youtube_get_dimensions($field_settings['size'], $field_settings['width'], $field_settings['height']);
  $thumb_dir = variable_get('youtube_thumb_dir', 'youtube');
  $module_settings = array(
    'suggest' => (bool) $suggest,
    'privacy' => (bool) $privacy,
    'modest_branding' => (bool) $modest_branding,
    'theme' => (bool) $theme,
    'color' => (bool) $color,
    'enable_js_api' => (bool) $enable_js_api,
    'wmode' => (bool) $wmode,
    'dimensions' => $dimensions,
    'protocol' => isset($_SERVER['HTTPS']) ? 'https' : 'http',
    'thumb_dir' => check_plain($thumb_dir),
  );
  foreach ($items as $delta => $item) {
    $element[$delta] = array(
      '#theme' => 'prettyphoto_formatters_youtube',
      '#field' => $instance,
      '#video_id' => check_plain($item['video_id']),
      '#settings' => array(
        'field' => $field_settings,
        'module' => $module_settings,
      ),
    );
  }
  return $element;
}

/**
 * Implements hook_theme().
 */
function prettyphoto_formatters_youtube_theme($existing, $type, $theme, $path) {
  $theme = array();
  $theme['prettyphoto_formatters_youtube'] = array(
    'variables' => array(
      'field' => NULL,
      'video_id' => NULL,
      'settings' => NULL,
    ),
  );
  foreach ($theme as &$array) {
    $array['file'] = 'prettyphoto_formatters_youtube.formatter.inc';
  }
  return $theme;
}