View source
<?php
function image_fupload_image_menu() {
$items['admin/settings/image/image_fupload'] = array(
'title' => 'Image FUpload Settings',
'access arguments' => array(
'administer site configuration',
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'image_fupload_image_admin',
),
'description' => 'Configure FUpload Settings',
'type' => MENU_LOCAL_TASK,
'file path' => drupal_get_path('module', 'image_fupload'),
'file' => 'image_fupload.admin.inc',
);
$items['fupload/js'] = array(
'title' => 'Image FUpload',
'page callback' => 'fupload_node_create',
'access arguments' => array(
'create images',
),
'type' => MENU_CALLBACK,
'file' => 'node.pages.inc',
'file path' => drupal_get_path('module', 'node'),
);
$items['fupload/js/deletequeue'] = array(
'title' => 'Image FUpload',
'page callback' => 'fupload_empty_queue',
'access arguments' => array(
'create images',
),
'type' => MENU_CALLBACK,
);
$items['fupload/flash'] = array(
'title' => 'Image FUpload',
'page callback' => 'fupload_filetransfer',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
return $items;
}
function image_fupload_image_form_alter(&$form, $form_state, $form_id) {
global $user;
if ($form_id == "image_node_form" && !isset($form['#node']->nid) && arg(3) != "noflash") {
$module_path = drupal_get_path('module', 'image_fupload');
drupal_add_js($module_path . '/swfupload/swfupload.js', 'module');
drupal_add_js($module_path . '/swfupload/swfupload.queue.js', 'module');
drupal_add_js($module_path . '/swfupload/fileprogress.js', 'module');
drupal_add_js($module_path . '/swfupload/handlers.js', 'module');
drupal_add_js(theme('swfupload_settings', base_path() . $module_path, url('fupload/flash'), round(variable_get('image_max_upload_size', 800)), $user->sid, 100), 'inline');
drupal_add_css($module_path . '/image_fupload-style.css', 'module', 'all', FALSE);
unset($form['title'], $form['rebuild_images'], $form['buttons']['preview']);
isset($form['taxonomy']) ? $form['taxonomy']['#weight'] = -8 : "";
$form['message'] = array(
'#value' => '<div id="jsstatus"></div>',
'#weight' => -7,
);
$form['image'] = array(
'#type' => 'fieldset',
'#title' => t('Images'),
'#weight' => -6,
'#attributes' => array(
'class' => 'flash',
'id' => 'fsUploadProgress',
),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['upload_info'] = array(
'#value' => t('0 Files uploaded.'),
'#prefix' => '<div id="divStatus">',
'#suffix' => '</div>',
'#weight' => -5,
);
$form['upload_buttons'] = array(
'#prefix' => '<div>',
'#value' => '<input type="button" value="' . t('Select Images') . '" onclick="swfu.selectFiles()" /> <input id="btnCancel" type="button" value="' . t('Cancel All Uploads') . '" onclick="swfu.cancelQueue();" disabled="disabled" /> ',
'#suffix' => '</div>',
'#weight' => -4,
);
$form['upload_buttons']['node_create'] = array(
'#type' => 'submit',
'#value' => t('Process queued images'),
'#weight' => -3,
'#ahah' => array(
'path' => 'fupload/js',
'event' => 'click',
'method' => 'replace',
'wrapper' => 'jsstatus',
'progress' => array(
'type' => 'bar',
'message' => t('Images in queue are processed...'),
),
),
);
$form['upload_buttons']['delete_queue'] = array(
'#type' => 'submit',
'#value' => t('Delete queued images'),
'#weight' => -2,
'#ahah' => array(
'path' => 'fupload/js/deletequeue',
'event' => 'click',
'method' => 'append',
'wrapper' => 'jsstatus',
),
);
$form['buttons']['submit'] = array(
'#value' => '<input type="button" value="' . t('Upload Images') . '" id="startuploadbutton" onclick="startUploadProcess()" />',
'#weight' => 5,
'#submit' => array(
'node_form_submit',
),
);
$form['#redirect'] = FALSE;
$form['#submit'][0] = '_image_node_form_submit';
}
}
function fupload_node_create() {
global $user;
global $file_cache;
db_query("DELETE FROM {files} WHERE uid = %d AND status = %d AND filename = '%s' LIMIT 3", $user->uid, FILE_STATUS_TEMPORARY, IMAGE_HALFPROCESSED);
$form_build_id = $_POST['form_build_id'];
$form_id = $_POST['form_id'];
if (isset($form_build_id) && isset($form_id)) {
$form_error = 0;
$message = '';
$cache = cache_get('form_' . $form_build_id, 'cache_form');
$form = $cache->data;
$form['#post'] = $_POST;
$form['#post']['title'] = 'Image';
$form_state = array(
'rebuild' => TRUE,
);
$form['#post']['form_id'] = $cache->data['form_id']['#value'];
$form['title'] = array(
'#type' => 'textfield',
'#title' => 'Image',
'#default_value' => t('Image'),
);
drupal_process_form($form_id, $form, $form_state);
if (!form_get_errors()) {
$result = db_query("SELECT * FROM {files} WHERE uid = %d AND status = %d AND filename = '%s' LIMIT 0 , 3", $user->uid, FILE_STATUS_TEMPORARY, IMAGE_UNMACHINED);
while ($image = db_fetch_object($result)) {
$file_cache['image'] = $image;
db_query("UPDATE {files} SET filename = '%s' WHERE fid = %d LIMIT 1", IMAGE_HALFPROCESSED, $image->fid);
$form['title']['#value'] = check_plain(theme('fupload_create_filename', $image));
$form = form_builder($form_id, $form, $form_state);
node_form_submit($form, $form_state);
db_query("UPDATE {files} SET filename = '%s' WHERE fid = %d LIMIT 1", IMAGE_PROCESSED, $image->fid);
}
if (empty($file_cache['image'])) {
drupal_set_message(t('No images yet in queue.'));
}
$result = db_fetch_object(db_query("SELECT COUNT(*) AS img_count FROM {files} WHERE uid = %d AND status = %d AND filename = '%s'", $user->uid, FILE_STATUS_TEMPORARY, IMAGE_UNMACHINED));
$message .= '<input type="hidden" name="num_queued_images" id="num_queued_images" value="' . $result->img_count . '" />';
}
else {
$form_error = 1;
$message .= '<input type="hidden" name="num_queued_images" id="num_queued_images" value="0" />';
}
$message .= '<input type="hidden" name="form_errors" id="form_errors" value="' . $form_error . '" />';
$message .= theme('status_messages');
drupal_json(array(
'status' => TRUE,
'data' => $message,
));
}
else {
drupal_json(array(
'status' => TRUE,
'data' => t('Error: No or wrong POST Data'),
));
}
}
function _image_node_form_submit($form, &$form_state) {
global $file_cache;
$nid = 'new_node';
$file = $file_cache['image'];
$image_info = image_get_info($file->filepath);
$aspect_ratio = $image_info['height'] / $image_info['width'];
$original_size = image_get_sizes(IMAGE_ORIGINAL, $aspect_ratio);
if (!empty($original_size['width']) && !empty($original_size['height'])) {
$result = image_scale($file->filepath, $file->filepath, $original_size['width'], $original_size['height']);
if ($result) {
clearstatcache();
$file->filesize = filesize($file->filepath);
drupal_set_message(t('The original image was resized to fit within the maximum allowed resolution of %width x %height pixels.', array(
'%width' => $original_size['width'],
'%height' => $original_size['height'],
)));
}
}
$form_state['values']['images'][IMAGE_ORIGINAL] = $file->filepath;
$form_state['values']['rebuild_images'] = FALSE;
$form_state['values']['new_file'] = TRUE;
module_invoke_all('image_alter', $form_state['values'], $file->filepath, IMAGE_ORIGINAL);
$form_state['values']['images'] = _image_build_derivatives((object) $form_state['values'], TRUE);
$_SESSION['image_new_files'][$nid] = $form_state['values']['images'];
}