imce_uploader_plupload.module in IMCE Uploader 7
IMCE Uploader - Plupload
File
plugins/plupload/imce_uploader_plupload.moduleView source
<?php
/**
* @file
* IMCE Uploader - Plupload
*/
/**
* Implements hook_imce_uploader().
*/
function imce_uploader_plupload_imce_uploader() {
$uploaders = array();
$uploaders['plupload'] = array(
'title' => t('Plupload'),
'description' => t('Allows you to upload multiple files using HTML5, Gears, Silverlight, Flash, BrowserPlus or normal forms.'),
'callback' => 'imce_uploader_plupload',
);
return $uploaders;
}
/**
* Callback to override the upload form.
*
* @param array $form
* Form element.
*
* @param array $form_state
* Form state
*
* @param array $imce
* IMCE profile
*
* @see imce_uploader_plupload_process()
* @see imce_uploader_plupload_value()
* @see imce_uploader_plupload_submit()
*/
function imce_uploader_plupload(&$form, &$form_state, &$imce) {
$module_path = drupal_get_path('module', 'imce_uploader_plupload');
$uploader =& $form['fset_upload']['imce'];
$uploader['#title_display'] = 'invisible';
$uploader['#type'] = 'plupload';
// Find validators.
if ($imce['extensions'] === '*') {
$plupload_info = element_info('plupload');
$value_callback = empty($plupload_info['#value_callback']) ? 'plupload_element_value' : $plupload_info['#value_callback'];
$uploader['#process'][] = 'imce_uploader_plupload_process';
$uploader['#value_callback'] = 'imce_uploader_plupload_value';
$uploader['#default_value_callback'] = $value_callback;
}
else {
$validators['file_validate_extensions'] = array(
$imce['extensions'],
);
}
$validators['imce_validate_all'] = array(
&$imce,
);
// Element validators.
$uploader['#upload_validators'] = $validators;
// Change submit.
foreach ($form['fset_upload']['upload']['#submit'] as $i => $handler) {
if ($handler == 'imce_upload_submit') {
$form['fset_upload']['upload']['#submit'][$i] = 'imce_uploader_plupload_submit';
break;
}
}
$form['#attached']['js'][] = $module_path . '/js/plupload.min.js';
$form['#attached']['css'][] = $module_path . '/css/plupload.css';
unset($form['fset_upload']['imce']['#size']);
}
/**
* Process callback (#process) for plupload form element.
*
* @see imce_uploader_plupload()
* @see imce_uploader_plupload_value()
*/
function imce_uploader_plupload_process($element) {
unset($element['#upload_validators']['file_validate_extensions']);
return $element;
}
/**
* Validate callback for plupload form element.
*
* @see imce_uploader_plupload()
* @see imce_uploader_plupload_process()
*/
function imce_uploader_plupload_value(&$element, $input = FALSE, $form_state = NULL) {
// Fool the default element value callback.
$extensions = array();
$id = $element['#id'];
$files = array();
foreach ($form_state['input'] as $key => $value) {
if (preg_match('/' . $id . '_([0-9]+)_(.*)/', $key, $reg)) {
$i = $reg[1];
$key = $reg[2];
if (in_array($key, array(
'tmpname',
'name',
))) {
$info = pathinfo($value);
if (!empty($info['extension'])) {
$ext = strtolower($info['extension']);
$extensions[$ext] = $ext;
}
}
}
}
$element['#upload_validators']['file_validate_extensions'] = array_values($extensions);
$callback = $element['#default_value_callback'];
$files = $callback($element, $input, $form_state);
unset($element['#upload_validators']['file_validate_extensions']);
return $files;
}
/**
* Submit handler.
*
* @param array $form
* Form element.
*
* @param array $form_state
* Form state
*
* @see imce_uploader_plupload()
*/
function imce_uploader_plupload_submit($form, &$form_state) {
$form_state['redirect'] = FALSE;
$imce =& $form_state['build_info']['args'][0]['imce'];
$diruri = imce_dir_uri($imce);
$replace = variable_get('imce_settings_replace', FILE_EXISTS_RENAME);
$validators = empty($form['fset_upload']['imce']['#upload_validators']) ? array() : $form['fset_upload']['imce']['#upload_validators'];
foreach ($form_state['values']['imce'] as $uploaded_file) {
$tmp = plupload_file_uri_to_object($uploaded_file['tmppath']);
$tmp->filename = $uploaded_file['name'];
$errors = file_validate($tmp, $validators);
if (!empty($errors)) {
$message = t('The specified file %name could not be uploaded.', array(
'%name' => $uploaded_file['name'],
));
if (count($errors) > 1) {
$message .= theme('item_list', array(
'items' => $errors,
));
}
else {
$message .= ' ' . array_pop($errors);
}
drupal_set_message($message, 'error');
}
elseif ($file = file_move($tmp, $diruri . $uploaded_file['name'], $replace)) {
// Core bug #54223.
if ($replace == FILE_EXISTS_RENAME) {
$name = basename($file->uri);
if ($name != $tmp->filename) {
$file->filename = $name;
drupal_set_message(t('The file has been renamed to %filename.', array(
'%filename' => $file->filename,
)));
}
}
// Global user may not be the owner.
$file->uid = $imce['uid'];
$file->status = FILE_STATUS_PERMANENT;
$file->filemime = file_get_mimetype($file->uri);
drupal_chmod($file->uri);
file_save($file);
imce_file_register($file);
drupal_set_message(t('%filename has been uploaded.', array(
'%filename' => $file->filename,
)));
// Update file list.
$img = imce_image_info($file->uri);
$file->width = $img ? $img['width'] : 0;
$file->height = $img ? $img['height'] : 0;
imce_add_file($file, $imce);
// Create thumbnails.
if (isset($form_state['values']['thumbnails']) && $img) {
imce_create_thumbnails($file->filename, $imce, $form_state['values']['thumbnails']);
}
}
else {
$message = t('The specified file %name could not be uploaded.', array(
'%name' => $uploaded_file['name'],
));
drupal_set_message($message, 'error');
}
}
}
Functions
Name![]() |
Description |
---|---|
imce_uploader_plupload | Callback to override the upload form. |
imce_uploader_plupload_imce_uploader | Implements hook_imce_uploader(). |
imce_uploader_plupload_process | Process callback (#process) for plupload form element. |
imce_uploader_plupload_submit | Submit handler. |
imce_uploader_plupload_value | Validate callback for plupload form element. |