You are here

videoftp.module in Video 6.5

Same filename and directory in other branches
  1. 6.4 types/videoftp/videoftp.module

File

types/videoftp/videoftp.module
View source
<?php

/**
 * @file
 * video ftp core hooks and menu callbacks.
 */
module_load_include('inc', 'videoftp', 'videoftp_widget');

/*
 * Implementation of hook_menu().
 */
function videoftp_menu() {
  $items = array();
  $items['videoftp/ahah/%/%/%'] = array(
    'page callback' => 'videoftp_js',
    'page arguments' => array(
      2,
      3,
      4,
    ),
    'access arguments' => array(
      'access content',
    ),
    'type' => MENU_CALLBACK,
  );
  $items['videoftp/progress'] = array(
    'page callback' => 'videoftp_progress',
    'access arguments' => array(
      'access content',
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implementation of hook_theme().
 */
function videoftp_theme() {
  $theme = array();
  $theme['videoftp_widget'] = array(
    'arguments' => array(
      'element' => NULL,
    ),
    'file' => 'videoftp.theme.inc',
  );
  $theme['videoftp_widget_item'] = array(
    'arguments' => array(
      'element' => NULL,
    ),
    'file' => 'videoftp.theme.inc',
  );
  $theme['videoftp_widget_file'] = array(
    'arguments' => array(
      'element' => NULL,
    ),
    'file' => 'videoftp.theme.inc',
  );
  return $theme;
}

/**
 * Implementation of CCK's hook_widget_info().
 */
function videoftp_widget_info() {
  return array(
    'videoftp_widget' => array(
      'label' => t('Video FTP'),
      'field types' => array(
        'filefield',
      ),
      'multiple values' => CONTENT_HANDLE_CORE,
      'callbacks' => array(
        'default value' => CONTENT_CALLBACK_CUSTOM,
      ),
      'description' => t('Widget allows you to select video files uploaded through FTP to be attached to the node.'),
    ),
  );
}

/**
 * Implementation of hook_elements().
 */
function videoftp_elements() {
  $elements = array();
  $filefield_elements = module_invoke('filefield', 'elements');
  $elements['videoftp_widget'] = $filefield_elements['filefield_widget'];
  $elements['videoftp_widget']['#columns'][] = 'filepath';
  $elements['videoftp_widget']['#process'] = array(
    'videoftp_widget_process',
  );
  $elements['videoftp_widget']['#value_callback'] = 'videoftp_widget_value';

  // Support for the imagefield_extended module
  if (module_exists('imagefield_extended')) {
    $elements['uploadfield_widget']['#process'][] = 'imagefield_extended_widget_process';
  }
  return $elements;
  $elements = array(
    'videoftp_widget' => array(
      '#input' => TRUE,
      //
      '#columns' => array(
        'fid',
        'list',
        'data',
        'filepath',
      ),
      //
      '#process' => array(
        'videoftp_widget_process',
      ),
      //
      '#value_callback' => 'videoftp_widget_value',
    ),
  );

  // Support for the imagefield_extended module
  if (module_exists('imagefield_extended')) {
    $elements['videoftp_widget']['#process'][] = 'imagefield_extended_widget_process';
  }
  return $elements;
}

/**
 * Implementation of CCK's hook_widget_settings().
 */
function videoftp_widget_settings($op, $widget) {

  // Load up our include file for the widget
  module_load_include('inc', 'videoftp', 'videoftp_widget');
  switch ($op) {
    case 'form':
      return videoftp_widget_settings_form($widget);
    case 'validate':
      return videoftp_widget_settings_validate($widget);
    case 'save':
      return videoftp_widget_settings_save($widget);
  }
}

/**
 * Implementation of hook_widget().
 */
function videoftp_widget(&$form, &$form_state, $field, $items, $delta = NULL) {
  if (empty($form['#validate']) || !in_array('filefield_node_form_validate', $form['#validate'])) {
    $form['#validate'][] = 'filefield_node_form_validate';
  }
  $item = array(
    'fid' => 0,
    'list' => $field['list_default'],
  );
  $data = array(
    'description' => '',
    'video_thumb' => '',
    'bypass_autoconversion' => variable_get('video_bypass_conversion', FALSE),
  );
  if (isset($items[$delta])) {
    if (isset($items[$delta]['data'])) {
      $data = array_merge($data, $items[$delta]['data']);
    }
    $item = array_merge($item, $items[$delta]);
  }
  $item['data'] = $data;
  return array(
    '#title' => $field['widget']['label'],
    '#type' => $field['widget']['type'],
    '#default_value' => $item,
  );
}

/**
 * Menu callback; Shared AHAH callback for ftp file attachment and deletions.
 *
 * This rebuilds the form element for a particular field item. As long as the
 * form processing is properly encapsulated in the widget element the form
 * should rebuild correctly using FAPI without the need for additional callbacks
 * or processing.
 */
function videoftp_js($type_name, $field_name, $delta) {
  module_load_include('inc', 'videoftp', 'videoftp_widget');
  $field = content_fields($field_name, $type_name);
  if (empty($field) || empty($_POST['form_build_id'])) {

    // Invalid request.
    drupal_set_message(t('An unrecoverable error occurred.'), 'error');
    print drupal_to_js(array(
      'data' => theme('status_messages'),
    ));
    exit;
  }

  // Build the new form.
  $form_state = array(
    'submitted' => FALSE,
  );
  $form_build_id = $_POST['form_build_id'];
  $form = form_get_cache($form_build_id, $form_state);
  if (!$form) {

    // Invalid form_build_id.
    drupal_set_message(t('An unrecoverable error occurred. This form was missing from the server cache. Try reloading the page and submitting again.'), 'error');
    print drupal_to_js(array(
      'data' => theme('status_messages'),
    ));
    exit;
  }

  // Build the form. This calls the file field's #value_callback function and
  // saves the uploaded file. Since this form is already marked as cached
  // (the #cache property is TRUE), the cache is updated automatically and we
  // don't need to call form_set_cache().
  $args = $form['#parameters'];
  $form_id = array_shift($args);
  $form['#post'] = $_POST;
  $form = form_builder($form_id, $form, $form_state);

  // Update the cached form with the new element at the right place in the form.
  if (module_exists('fieldgroup') && ($group_name = _fieldgroup_field_get_group($type_name, $field_name))) {
    if (isset($form['#multigroups']) && isset($form['#multigroups'][$group_name][$field_name])) {
      $form_element = $form[$group_name][$delta][$field_name];
    }
    else {
      $form_element = $form[$group_name][$field_name][$delta];
    }
  }
  else {
    $form_element = $form[$field_name][$delta];
  }
  if (isset($form_element['_weight'])) {
    unset($form_element['_weight']);
  }
  $output = drupal_render($form_element);

  // AHAH is not being nice to us and doesn't know the "other" button (that is,
  // either "Attach" or "Delete") yet. Which in turn causes it not to attach
  // AHAH behaviours after replacing the element. So we need to tell it first.
  // Loop through the JS settings and find the settings needed for our buttons.
  $javascript = drupal_add_js(NULL, NULL);
  $videoftp_ahah_settings = array();
  if (isset($javascript['setting'])) {
    foreach ($javascript['setting'] as $settings) {
      if (isset($settings['ahah'])) {
        foreach ($settings['ahah'] as $id => $ahah_settings) {
          if (strpos($id, 'videoftp-attach') || strpos($id, 'videoftp-remove')) {
            $videoftp_ahah_settings[$id] = $ahah_settings;
          }
        }
      }
    }
  }

  // Add the AHAH settings needed for our new buttons.
  if (!empty($videoftp_ahah_settings)) {
    $output .= '<script type="text/javascript">jQuery.extend(Drupal.settings.ahah, ' . drupal_to_js($videoftp_ahah_settings) . ');</script>';
  }
  $output = theme('status_messages') . $output;

  // For some reason, file uploads don't like drupal_json() with its manual
  // setting of the text/javascript HTTP header. So use this one instead.
  $GLOBALS['devel_shutdown'] = FALSE;
  print drupal_to_js(array(
    'status' => TRUE,
    'data' => $output,
  ));
  exit;
}

Functions

Namesort descending Description
videoftp_elements Implementation of hook_elements().
videoftp_js Menu callback; Shared AHAH callback for ftp file attachment and deletions.
videoftp_menu
videoftp_theme Implementation of hook_theme().
videoftp_widget Implementation of hook_widget().
videoftp_widget_info Implementation of CCK's hook_widget_info().
videoftp_widget_settings Implementation of CCK's hook_widget_settings().