dragndrop_upload_media.media.inc in Drag & Drop Upload 7
Media module integration for the Drag & Drop Upload module.
Adds "Multiple upload" plugin to the Media browser. Alters "Upload" plugin to make it work with Drag & Drop Upload.
File
modules/dragndrop_upload_media/dragndrop_upload_media.media.incView source
<?php
/**
* @file
* Media module integration for the Drag & Drop Upload module.
*
* Adds "Multiple upload" plugin to the Media browser.
* Alters "Upload" plugin to make it work with Drag & Drop Upload.
*/
/**
* Implements hook_media_browser_plugin_info().
*/
function dragndrop_upload_media_media_browser_plugin_info() {
$plugins = array();
// Add multiupload plugin if "Multiupload Filefield Widget" exists.
if (module_exists('dragndrop_upload_multi')) {
if (user_access('administer media') || user_access('edit media')) {
$plugins['mfw_multiupload'] = array(
'#weight' => -10,
);
}
}
return $plugins;
}
/**
* Implements hook_media_browser_plugin_view().
*/
function dragndrop_upload_media_media_browser_plugin_view($plugin_name, $params) {
switch ($plugin_name) {
case 'mfw_multiupload':
$upload_form = drupal_get_form('dragndrop_upload_media_add_mfw_multiupload', $params);
return array(
'#title' => t('Multiple upload'),
'form' => array(
$upload_form,
),
);
break;
}
return array();
}
/**
* Form callback for adding media via an upload form.
*/
function dragndrop_upload_media_add_mfw_multiupload($form, &$form_state, $params = array()) {
module_load_include('pages.inc', 'media', 'includes/media');
$form += media_add_upload($form, $form_state, $params);
// Determine what URI scheme this file should use.
$scheme = !empty($params['uri_scheme']) && file_stream_wrapper_valid_scheme($params['uri_scheme']) ? $params['uri_scheme'] : file_default_scheme();
$scheme .= '://';
// Prepare the file's subdirectory path.
$directory = '';
if (!empty($params['file_directory'])) {
$directory = token_replace($params['file_directory']) . '/';
// If the directory isn't writable, or doesn't exist and can't be created,
// the upload will fail.
$prepare_directory = file_stream_wrapper_uri_normalize($scheme . $directory);
if (!file_prepare_directory($prepare_directory, FILE_CREATE_DIRECTORY)) {
drupal_set_message(t('The file directory @dir does not exist or is not writable. Please contact an administrator.', array(
'@dir' => $prepare_directory,
)), 'error');
return array();
}
}
// Compose the file's permanent destination.
$destination = file_stream_wrapper_uri_normalize($scheme . $directory);
$upload_element = $form['upload'];
$form['upload'] = array(
'#tree' => TRUE,
'#title' => t('Upload a new file'),
'#process' => array(
'mfw_field_widget_process_multiple',
),
'#file_upload_delta' => 0,
);
$form['upload'][0] = array(
'#type' => 'mfw_managed_file',
'#pre_render' => array(
'dragndrop_upload_media_multiupload_pre_render',
),
'#upload_location' => $destination,
) + $upload_element;
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
/**
* Submit callback for media upload form.
*
* Return uploaded files' fids to the Media browser.
*
* @see dragndrop_upload_media_add_multiupload()
*/
function dragndrop_upload_media_add_mfw_multiupload_submit($form, &$form_state) {
$form_state['redirect'] = array(
'media/browser',
array(
'query' => array(
'render' => 'media-popup',
'fid' => $form_state['values']['upload'],
),
),
);
}
/**
* Pre-render callback for mfw_managed_file element.
*
* Removes Upload and Remove buttons as they are not needed in Media browser.
*/
function dragndrop_upload_media_multiupload_pre_render($element) {
$element['upload_button']['#access'] = FALSE;
$element['remove_button']['#access'] = FALSE;
return $element;
}
/**
* Implements hook_form_FORM_ID_alter().
*
* Alter "media_add_upload" form to change default submit callback
* to a custom one.
*/
function dragndrop_upload_media_form_media_add_upload_alter(&$form, &$form_state) {
if (!empty($form_state['build_info']['args'][0]['dragndropUpload'])) {
$key = array_search('media_add_upload_submit', $form['#submit']);
$form['#submit'][$key] = 'dragndrop_upload_media_add_upload_submit';
}
}
/**
* Form submit callback for a "media_add_upload" form.
*
* Just a copy of media_add_upload_submit() excluding
* _media_save_file_permanently() function calling.
*
* @see media_add_upload_submit()
*/
function dragndrop_upload_media_add_upload_submit($form, &$form_state) {
$params = isset($form_state['build_info']['args'][0]) ? $form_state['build_info']['args'][0] : array();
$file = $form_state['values']['upload'];
// The media browser widget does not use the 'display' field.
$file->display = TRUE;
// Determine what URI scheme this file should use.
$scheme = !empty($params['uri_scheme']) && file_stream_wrapper_valid_scheme($params['uri_scheme']) ? $params['uri_scheme'] : file_default_scheme();
$scheme .= '://';
// Prepare the file's subdirectory path.
$directory = '';
if (!empty($params['file_directory'])) {
$directory = token_replace($params['file_directory']) . '/';
// If the directory isn't writable, or doesn't exist and can't be created,
// the upload will fail.
$prepare_directory = file_stream_wrapper_uri_normalize($scheme . $directory);
if (!file_prepare_directory($prepare_directory, FILE_CREATE_DIRECTORY)) {
drupal_set_message(t('The file directory @dir does not exist or is not writable. Please contact an administrator.', array(
'@dir' => $prepare_directory,
)), 'error');
return;
}
}
// Compose the file's permanent destination.
$destination = file_stream_wrapper_uri_normalize($scheme . $directory . $file->filename);
// Save the uploaded file to the permanent location.
$file = file_move($file, $destination, FILE_EXISTS_RENAME);
if ($file) {
drupal_set_message(t('The file @name was uploaded', array(
'@name' => $file->filename,
)));
}
else {
drupal_set_message(t('An error occurred and no file was uploaded.'), 'error');
return;
}
$form_state['redirect'] = array(
'media/browser',
array(
'query' => array(
'render' => 'media-popup',
'fid' => $file->fid,
),
),
);
}
/**
* Implements hook_media_browser_params_alter().
*
* Disable "Multiple upload" plugin if Media browser is opened not
* by Drag & Drop Upload module.
*/
function dragndrop_upload_media_media_browser_params_alter(&$params) {
if (empty($params['dragndropUpload'])) {
$params['disabledPlugins'][] = 'mfw_multiupload';
}
}
Functions
Name![]() |
Description |
---|---|
dragndrop_upload_media_add_mfw_multiupload | Form callback for adding media via an upload form. |
dragndrop_upload_media_add_mfw_multiupload_submit | Submit callback for media upload form. |
dragndrop_upload_media_add_upload_submit | Form submit callback for a "media_add_upload" form. |
dragndrop_upload_media_form_media_add_upload_alter | Implements hook_form_FORM_ID_alter(). |
dragndrop_upload_media_media_browser_params_alter | Implements hook_media_browser_params_alter(). |
dragndrop_upload_media_media_browser_plugin_info | Implements hook_media_browser_plugin_info(). |
dragndrop_upload_media_media_browser_plugin_view | Implements hook_media_browser_plugin_view(). |
dragndrop_upload_media_multiupload_pre_render | Pre-render callback for mfw_managed_file element. |