You are here

dragndrop_upload_multi.module in Drag & Drop Upload 7

Provides a multiupload functionality for Drag & Drop Upload Widget.

File

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

/**
 * @file
 * Provides a multiupload functionality for Drag & Drop Upload Widget.
 */

/**
 * Custom process callback for the 'dragndrop_upload_widget' widget.
 */
function dragndrop_upload_multi_element_process($element, &$form_state, $form) {
  $element['upload']['#attributes'] = array(
    'multiple' => 'multiple',
  );
  $element['upload']['#name'] .= '[]';
  return $element;
}

/**
 * Implements hook_field_widget_form_alter().
 *
 * Adds necessary value_callback and process callbacks for the multiupload
 * functionality.
 */
function dragndrop_upload_multi_field_widget_form_alter(&$element, &$form_state, $context) {
  $widget =& $context['instance']['widget'];
  if (in_array($widget['type'], array(
    'dragndrop_upload_file',
    'dragndrop_upload_image',
  ))) {
    if ($widget['settings']['multiupload']) {
      if ($context['field']['cardinality'] != 1) {
        foreach (element_children($element) as $delta) {
          $element[$delta]['#value_callback'] = 'dragndrop_upload_multi_widget_value';
          $element[$delta]['#process'][] = 'dragndrop_upload_multi_element_process';
        }
        $element['#process'][] = 'mfw_field_widget_process_multiple';
      }
    }
  }
}

/**
 * The value callback for the widgets.
 *
 * Adds additional check for multiple fields: prevents showing several
 * widgets on validation errors.
 *
 * @param $element
 * @param bool $input
 * @param $form_state
 * @return array|bool
 * @see mfw_field_widget_value().
 */
function dragndrop_upload_multi_widget_value(&$element, $input = FALSE, &$form_state) {
  $return = mfw_field_widget_value($element, $input, $form_state);
  if ($input !== FALSE) {
    $added =& drupal_static(__FUNCTION__, array());
    $key = implode('-', array_slice($element['#array_parents'], 0, -1));
    if (!empty($added[$key])) {
      if (empty($return['fid'])) {
        $element['#access'] = FALSE;
      }
    }
    $added[$key] = TRUE;
  }
  return $return;
}

/**
 * Implements hook_dnd_upload_widget_settings_form_alter().
 */
function dragndrop_upload_multi_dnd_upload_widget_settings_form_alter(&$form) {
  $form['dragndrop_fieldset']['multiupload'] += array(
    '#description' => t('Allow multiple files to be uploaded at once.<br/>The setting is' . ' available when field cardinality (Number of values) is greater than 1'),
    '#states' => array(
      'disabled' => array(
        'select[name="field[cardinality]"]' => array(
          'value' => 1,
        ),
      ),
    ),
  );
}

Functions

Namesort descending Description
dragndrop_upload_multi_dnd_upload_widget_settings_form_alter Implements hook_dnd_upload_widget_settings_form_alter().
dragndrop_upload_multi_element_process Custom process callback for the 'dragndrop_upload_widget' widget.
dragndrop_upload_multi_field_widget_form_alter Implements hook_field_widget_form_alter().
dragndrop_upload_multi_widget_value The value callback for the widgets.