popsu-d7/sites/all/modules/swfupload/swfupload.admin.inc
Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

116 lines
3.8 KiB
PHP

<?php
// $Id: swfupload.admin.inc,v 1.2 2010/06/17 18:24:57 eugenmayer Exp $
/**
* @file
* Include file for all functions required while using the CCK widget (e.g.: in node-edit forms).
*/
/**
* Menu callback for menu item 'swfupload'.
* This function is executed when SFWUpload.swf requests a file upload
*/
function swfupload_js() {
$p = (object) $_POST;
$op = $p->op;
$file = (isset($p->file) ? json_decode($p->file) : NULL);
$instance = json_decode($p->instance);
$instance_settings = json_decode($p->instance_settings);
$file_path = $p->file_path;
unset($p);
switch ($op) {
case 'init':
// Add the default callback functions for the SWF Upload
$instance->type = 'table';
$instance->callbacks = array(
'swfupload_loaded_handler' => 'ref.swfUploadLoaded',
'file_queued_handler' => 'ref.fileQueued',
'queue_complete_handler' => 'ref.queueComplete',
'file_queue_error_handler' => 'ref.fileQueueError',
'file_dialog_complete_handler' => 'ref.dialogComplete',
'upload_success_handler' => 'ref.uploadSuccess',
'upload_progress_handler' => 'ref.uploadProgress',
'upload_error_handler' => 'ref.uploadError',
'upload_complete_handler' => 'ref.uploadComplete',
'init_complete_handler' => 'ref.initComplete',// This custom javascript callback function is used to place the markup inside the dom
);
$instance->elements = array(
'drag' => array(
'class' => 'drag first indentation',
'type' => 'drag',
'colspan' => 3,
'title' => t('Filename'),
'add_separator' => TRUE,
),
'icon' => array(
'type' => 'icon',
'class' => 'icon',
),
'filename' => array(
'type' => 'markup',
'value' => '[filename]',
'class' => 'text title',
),
);
break;
case 'move_uploaded_file':
$max_filesize = parse_size(file_upload_max_size());
if (!empty($instance_settings->max_filesize) && parse_size($instance_settings->max_filesize) < $max_filesize) {
$max_filesize = parse_size($instance_settings->max_filesize);
}
$file->validators = array(
'file_validate_extensions' => array($instance_settings->file_extensions),
// 'filefield_validate_image_resolution' => array($instance_settings->max_resolution, $instance_settings->min_resolution),
'file_validate_size' => array($max_filesize),
);
$file->file_path = $file_path;
// Allow other modules to change the file_path an validators
foreach (module_implements('swfupload') as $module) {
$function = $module . '_swfupload';
$function($file, $op, $instance, $instance_settings);
}
$op = 'upload_complete';
break;
}
// Allow other modules to change the returned data
foreach (module_implements('swfupload') as $module) {
$function = $module . '_swfupload';
$function($file, $op, $instance, $instance_settings);
// We want to make sure the last column of each tablerow contains the 'cancel' or 'delete' button.
if ($op == 'init') {
$instance->elements['cancel'] = array('class' => 'last', 'type' => 'cancel');
}
}
// Replace keys named 'class' to 'classname'
if (!empty($instance->elements)) {
array_walk($instance->elements, '_class_to_classname');
}
$p->op = $op;
$p->file = $file;
$p->file_path = $file_path;
$p->instance = $instance;
$p->instance_settings = $instance_settings;
$p->messages = drupal_get_messages();
echo json_encode($p);
exit(0);
}
/**
* Helper function to replace instance elements class keys to classname keys
* Safari hangs if you use 'class' in javascript
*/
function _class_to_classname(&$element) {
$element['classname'] = $element['class'];
unset($element['class']);
}