You are here

videojs.admin.inc in Video.js (HTML5 Video Player) 6

Administrative pages for the Video.js module.

File

includes/videojs.admin.inc
View source
<?php

/**
 * @file
 * Administrative pages for the Video.js module.
 */

/**
 * Menu callback; Provides the Video.js settings form.
 */
function videojs_settings_form() {
  $form = array();
  $form['videojs_directory'] = array(
    '#type' => 'textfield',
    '#title' => t('Video.js file directory'),
    '#default_value' => variable_get('videojs_directory', 'sites/all/libraries/video-js'),
    '#description' => t('Specify the path that contains the Video.js library. The video.js file should be in the root of this directory.'),
  );
  $form['options'] = array(
    '#type' => 'fieldset',
    '#title' => t('Video.js options'),
    '#collapsible' => FALSE,
  );
  $form['options']['videojs_autoplay'] = array(
    '#type' => 'checkbox',
    '#title' => t('Auto-play files on page load'),
    '#description' => t('Use caution when combining this option with multiple players on the same page.'),
    '#default_value' => variable_get('videojs_autoplay', FALSE),
  );
  $form['options']['videojs_width'] = array(
    '#type' => 'textfield',
    '#title' => t('Player width'),
    '#default_value' => variable_get('videojs_width', 640),
  );
  $form['options']['videojs_height'] = array(
    '#type' => 'textfield',
    '#title' => t('Player height'),
    '#default_value' => variable_get('videojs_height', 264),
  );
  $options = array(
    0 => 'Default',
    'tube-css' => 'Youtube',
    'vim-css' => 'Vimeo',
    'hu-css' => 'Hulu',
  );
  $form['options']['videojs_skin'] = array(
    '#type' => 'select',
    '#title' => t('Player skin'),
    '#options' => $options,
    '#default_value' => variable_get('videojs_skin', 'default'),
  );
  $form['thumbnails'] = array(
    '#type' => 'fieldset',
    '#title' => t('Video.js thumbnails'),
    '#collapsible' => FALSE,
    '#description' => t('Thumbnail settings for Video.js widget'),
  );
  foreach (_videojs_settings_thumbnail_fields() as $node_type => $value) {
    $form['thumbnails']['videojs_' . $node_type] = array(
      '#type' => 'select',
      '#title' => t('@fieldname in @contenttype', array(
        '@fieldname' => $value['video_js_field'],
        '@contenttype' => $value['description'],
      )),
      '#default_value' => variable_get('videojs_' . $node_type, module_exists('video') ? 'video_module' : $value['filefields'][0]),
      '#options' => module_exists('video') ? array(
        'video_module' => t('Video module'),
      ) + $value['filefields'] : $value['filefields'],
    );
  }
  $form['flash'] = array(
    '#type' => 'fieldset',
    '#title' => t('Flowplayer fallback'),
    '#collapsible' => FALSE,
  );
  $form['flash']['videojs_flowplayer_extraplayerheight'] = array(
    '#type' => 'textfield',
    '#title' => t('Add vertical space to accommodate the Flowplayer control bar'),
    '#field_suffix' => 'pixels',
    '#default_value' => variable_get('videojs_flowplayer_extraplayerheight', 24),
    '#description' => t('The control bar in Flowplayer 3.2 and up uses an overlay on top of the video, so the player size is equal to the video size. For custom control bars or older Flowplayer versions you can use this field to add vertical space to the player height.'),
    '#size' => 5,
    '#maxlength' => 3,
  );
  $form['flash']['videojs_wmode'] = array(
    '#type' => 'select',
    '#title' => t('Flash wmode'),
    '#description' => t('Allows you to enable and select wmode.'),
    '#default_value' => variable_get('videojs_wmode', ''),
    '#options' => array(
      '' => t('None'),
      'window' => 'Window',
      'transparent' => 'Transparent',
      'opaque' => 'Opaque',
    ),
  );
  $form = system_settings_form($form);
  $form['#validate'][] = 'videojs_settings_form_validate';
  $form['#submit'][] = 'videojs_settings_form_submit';
  return $form;
}

/**
 * Validation function to validate the videojs_settings_form() form.
 */
function videojs_settings_form_validate($form, &$form_state) {
  $form_state['videojs_version'] = videojs_get_version($form_state['values']['videojs_directory']);
  if (!$form_state['videojs_version']) {
    form_error($form['videojs_directory'], t('The directory specified does not seem to contain the Video.js library. Check to make sure that the video.js file is located within this directory.'));
  }
}

/**
 * Submit handler for the videojs_settings_form() form.
 */
function videojs_settings_form_submit($form, &$form_state) {
  drupal_set_message(t('The Video.js library (version @version) successfully found in the %directory directory.', array(
    '@version' => $form_state['videojs_version'],
    '%directory' => $form_state['values']['videojs_directory'],
  )));
}

/**
 * Generate list of content types with filefield widget set to 'videojs'
 *
 * @return
 *   Returns array in format [node_type]=>array(
 *     'description',
 *     'video_js_field',
 *     filefields=>array('filefield'=>'filefield description'))
 */
function _videojs_settings_thumbnail_fields() {
  $video_js_node_types = array();

  // Iterate through all node_types
  foreach (array_map('check_plain', node_get_types('names')) as $node_type => $description) {

    // Iterate through all filefield field types in the current node type
    foreach (filefield_get_field_list($node_type) as $field) {

      // If widget format of the field is 'videojs' - generate structure containing node_type, videojs field name and list of possible options for thumbnails
      if ($field['display_settings']['full']['format'] == 'videojs') {
        $video_js_node_types[$node_type] = array(
          'node_type' => $field['type_name'],
          'description' => $description,
          'video_js_field' => $field['field_name'],
          'filefields' => array(),
        );

        // Get all filefield type fields except 'videojs' field (should we check only compatible extentions allowed in some widgets?)
        foreach (filefield_get_field_list($node_type) as $thumbnail_field) {
          if ($thumbnail_field['display_settings']['full']['format'] != 'videojs') {
            $video_js_node_types[$node_type]['filefields'][$thumbnail_field['field_name']] = t($thumbnail_field['field_name']);
          }
        }
      }
    }
  }
  return $video_js_node_types;
}

Functions

Namesort descending Description
videojs_settings_form Menu callback; Provides the Video.js settings form.
videojs_settings_form_submit Submit handler for the videojs_settings_form() form.
videojs_settings_form_validate Validation function to validate the videojs_settings_form() form.
_videojs_settings_thumbnail_fields Generate list of content types with filefield widget set to 'videojs'