? imagefield.js Index: imagefield.css =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/imagefield/imagefield.css,v retrieving revision 1.2.4.2 diff -u -p -r1.2.4.2 imagefield.css --- imagefield.css 18 Apr 2008 10:31:40 -0000 1.2.4.2 +++ imagefield.css 29 Apr 2008 19:56:01 -0000 @@ -1,9 +1,3 @@ -div.imagefield-edit-image-row { - border: 1px solid #e5e5e5; - padding: 5px; - margin-bottom: 10px; -} - div.imagefield-edit-preview img { border: 1px solid #e5e5e5; } @@ -29,3 +23,6 @@ div.imagefield-edit-image-flags div.form float: right; } +div.imagefield-element input.form-submit { + margin: 0 0.5em 0 0; +} Index: imagefield.info =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/imagefield/imagefield.info,v retrieving revision 1.4.4.2 diff -u -p -r1.4.4.2 imagefield.info --- imagefield.info 6 Dec 2007 09:25:39 -0000 1.4.4.2 +++ imagefield.info 29 Apr 2008 19:56:01 -0000 @@ -1,5 +1,6 @@ ; $Id: imagefield.info,v 1.4.4.2 2007/12/06 09:25:39 dopry Exp $ name = Image Field description = Defines an image field type. -dependencies = content +core = 6.x +dependencies[] = content package = CCK Index: imagefield.install =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/imagefield/imagefield.install,v retrieving revision 1.2.4.1 diff -u -p -r1.2.4.1 imagefield.install --- imagefield.install 18 Apr 2007 21:02:19 -0000 1.2.4.1 +++ imagefield.install 29 Apr 2008 19:56:01 -0000 @@ -5,8 +5,29 @@ * Implementation of hook_install(). */ function imagefield_install() { + content_notify('install', 'imagefield'); } +/** + * Implementation of hook_uninstall(). + */ +function imagefield_uninstall() { + content_notify('uninstall', 'imagefield'); +} + +/** + * Implementation of hook_enable(). + */ +function imagefield_enable() { + content_notify('enable', 'imagefield'); +} + +/** + * Implementation of hook_disable(). + */ +function imagefield_disable() { + content_notify('disable', 'imagefield'); +} /** * Data is now stored in per-field tables. @@ -73,6 +94,30 @@ function imagefield_update_2() { return $ret; } +/** + * Upgrade to CCK 2 and Drupal 6. + */ +function imagefield_update_6100() { + include_once('./'. drupal_get_path('module', 'content') .'/content_crud.inc'); + $fields = content_fields(); + foreach ($fields as $field) { + // Convert max_number_images to CCK's multiple limit. + if ($field['type'] == 'image' && isset($field['widget']['max_number_images'])) { + if ($field['widget']['max_number_images'] == 0) { + $field['multiple'] = 1; // 1 means "Unlimited" in CCK. + } + elseif ($field['widget']['max_number_images'] == 1) { + $field['multiple'] = 0; // 0 means "Not Multiple" in CCK. + } + else { + $field['multiple'] == $field['widget']['max_number_images']; + } + $field = array_merge($field, $field['widget']); + content_field_instance_update($field); + } + } + return array(); +} Index: imagefield.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/imagefield/imagefield.module,v retrieving revision 1.30.2.6.2.50 diff -u -p -r1.30.2.6.2.50 imagefield.module --- imagefield.module 18 Apr 2008 10:31:40 -0000 1.30.2.6.2.50 +++ imagefield.module 29 Apr 2008 19:56:01 -0000 @@ -1,5 +1,5 @@ 'imagefield/js', - 'callback' => 'imagefield_js', - //'access' => user_access(), - 'access' => TRUE, - 'type' => MENU_CALLBACK - ); - } - elseif ($_SESSION['imagefield']) { - // do this variable_get once.... - $download_method = variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC); - - // Iterate over each field stored in session imagefield looking - // for files in a preview state to add menu items for. This - // allows us to preview new uploads before a node is submitted. - foreach ($_SESSION['imagefield'] as $fieldname => $files) { - // move on to the next field if there is nothing to process in files. - if (empty($files)) continue; - - foreach ($files as $delta => $file) { - // If the file is not a preview do not display it. - if (empty($file['preview'])) continue; - - // filepath to pass into _imagefield_preview - $filepath = $file['preview']; - - // build url path for private files menu item. - if ($download_method == FILE_DOWNLOADS_PRIVATE) { - // strip out the file_directory_path. It shouldn't be a part - // of the URL with private downloads. - if (strpos($file['preview'], file_directory_path()) !== FALSE) { - $file['preview'] = trim(substr($file['preview'], strlen(file_directory_path())), '\\/'); - } - $file['preview'] = 'system/files/'. $file['preview']; - } - - $items[] = array( - 'path' => $file['preview'], - 'callback' => '_imagefield_preview', - 'callback arguments' => array($filepath), - 'access' => TRUE, - 'type' => MENU_CALLBACK, - ); - } - } - } + $items['imagefield/js'] = array( + 'page callback' => 'imagefield_js', + 'access callback' => 'user_access', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); return $items; } @@ -106,7 +65,10 @@ function imagefield_perm() { */ function imagefield_field_info() { return array( - 'image' => array('label' => 'Image'), + 'image' => array( + 'label' => t('Image'), + 'description' => t('Store an image file and text for alt and title tags.'), + ), ); } @@ -115,14 +77,12 @@ function imagefield_field_info() { */ function imagefield_field_settings($op, $field) { switch ($op) { - case 'callbacks': - return array('view' => CONTENT_CALLBACK_CUSTOM); - case 'form': $form = array(); $form['default'] = array( '#type' => 'fieldset', '#title' => t('Default image'), + '#element_validate' => array('_imagefield_field_settings_default_validate'), ); // Present a thumbnail of the current default image. $form['default']['use_default_image'] = array( @@ -134,7 +94,7 @@ function imagefield_field_settings($op, if (!empty($field['default_image'])) { $form['default']['default_image_thumbnail'] = array( '#type' => 'markup', - '#value' => theme('imagefield_image', $field['default_image'], '', '', array('width' => '150'), FALSE), + '#value' => theme('imagefield_image', $field['default_image'], '', '', array('width' => '150'), false), ); } $form['default']['default_image_upload'] = array( @@ -150,24 +110,14 @@ function imagefield_field_settings($op, ); return $form; - case 'validate': - // We save the upload here because we can't know the correct - // file path until we save the file. - if ($file = file_check_upload('default_image_upload')) { - if ($file = file_save_upload('default_image_upload', file_directory_path())) { - form_set_value(array('#parents' => array('default_image')), (array) $file); - } - } - - break; case 'save': return array('default_image', 'use_default_image'); case 'database columns': $columns = array( - 'fid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'), - 'title' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), - 'alt' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), + 'fid' => array('type' => 'int', 'not null' => true, 'default' => '0'), + 'title' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => '', 'sortable' => true), + 'alt' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => '', 'sortable' => true), ); return $columns; @@ -184,6 +134,54 @@ function imagefield_field_settings($op, } /** + * Element specific validation for imagefield default value. + * + * Validated in a separate function from imagefield_field() to get access + * to the $form_state variable. + */ +function _imagefield_field_settings_default_validate($element, &$form_state) { + // We save the upload here because we can't know the correct + // file path until we save the file. + if ($file = file_save_upload('default_image_upload', array(), file_directory_path())) { + $form_state['values']['default_image'] = (array)$file; + } + + return; + + // D6TODO: need to figure out where to put this code: + // We save the upload here because we can't know the correct + // file path until we save the file. + // Check of we got an new upload. + if (!$file = file_check_upload('default_image_upload')) { + break; + } + // figure steal the file extension and construct a filename for this + // fields default image. This is standardized for default image handling + // with private files. + $ext = array_pop(explode('.', $file->filename)); + $filename = $field['field_name'] .'.'. $ext; + // verify the destination exists and is writeable... + $dst = file_create_path('imagefield_default_images/'. $filename); + if (!file_check_directory(dirname($dst), FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) { + form_set_error('default_image', t("The default image could not be uploaded. The destination(%d) does not exist or is not writable by the webserver.", array('%d' => $dst))); + break; + } + // save the upload to it's resting place. + if (!$file = file_save_upload('default_image_upload', $dst)) { + form_set_error('default_image', t("The default image could not be uploaded. Failed saving to destination(%d).", array('%d' => $dst))); + break; + } + // remove the old one... + unlink($field['default_image']['filepath']); + // set the value of the form_item so we can store this in the settings + // from validate. + form_set_value(array('#parents' => array('default_image')), (array) $file); + break; + + +} + +/** * Custom filter for imagefield NOT NULL. */ function imagefield_views_handler_filter_is_not_null($op, $filter, $filterinfo, &$query) { @@ -191,25 +189,18 @@ function imagefield_views_handler_filter $query->ensure_table($filterinfo['table']); if ($filter['value']) { $qs = '%s.%s > 0'; + $query->add_where($qs, $filterinfo['table'], $filterinfo['field']); } else { $qs = '%s.%s = 0 OR %s.%s IS NULL'; + $query->add_where($qs, $filterinfo['table'], $filterinfo['field'], $filterinfo['table'], $filterinfo['field']); } - $query->add_where($qs, $filterinfo['table'], $filterinfo['field'], $filterinfo['table'], $filterinfo['field']); } } -function imagefield_default_item() { - return array( - 'fid' => 0, - 'title' => '', - 'alt' => '', - ); -} - /** - * Insert a file into the database. + * Make a temporary file permanent in the files table. * * @param $node * Node object this file is be associated with. @@ -217,32 +208,16 @@ function imagefield_default_item() { * File to be inserted, passed by reference since fid should be attached. */ function imagefield_file_insert($node, &$file, $field) { - $fieldname = $field['field_name']; - - // allow tokenized paths. - if (function_exists('token_replace')) { - global $user; - $widget_image_path = token_replace($field['widget']['image_path'], 'user', $user); - } - else { - $widget_image_path = $field['widget']['image_path']; + if ($file['flags']['delete'] == TRUE) { + if (_imagefield_file_delete($file, $field['field_name'])) { + return array(); + } } - - $filepath = file_create_path($widget_image_path) .'/'. $file['filename']; - - if (imagefield_check_directory($widget_image_path) && $file = file_save_upload((object)$file, $filepath)) { + elseif (isset($file['fid'])) { + $file = (object)$file; + file_set_status($file, FILE_STATUS_PERMANENT); $file = (array)$file; - $file['fid'] = db_next_id('{files}_fid'); - db_query("INSERT into {files} (fid, nid, filename, filepath, filemime, filesize) - VALUES (%d, %d, '%s','%s','%s',%d)", - $file['fid'], $node->nid, $file['filename'], $file['filepath'], $file['filemime'], $file['filesize']); - module_invoke_all('imagefield_file', 'save', $file); - return (array)$file; - } - else { - // Include file name in upload error. - form_set_error(NULL, t('Image upload was unsuccessful.')); - return FALSE; + return $file; } } @@ -257,20 +232,7 @@ function imagefield_file_insert($node, & * The field definition for this image field. */ function imagefield_file_update($node, &$file, $field) { - $file = (array)$file; - if ($file['flags']['delete'] == TRUE) { - if (_imagefield_file_delete($file, $field['field_name'])) { - return array(); - } - } - if ($file['fid'] == 'upload') { - return imagefield_file_insert($node, $file, $field); - } - else { - // if fid is not numeric here we should complain. - // else we update the file table. - } - return $file; + return imagefield_file_insert($node, $file, $field); } /** @@ -292,67 +254,82 @@ function imagefield_field($op, $node, $f $items[$delta] = array_merge($item, _imagefield_file_load($item['fid'])); } } - $items = array_values($items); // compact deltas + $items = array_values(array_filter($items)); // compact deltas return array($fieldname => $items); break; // called before content.module defaults. case 'insert': foreach ($items as $delta => $item) { - $items[$delta] = imagefield_file_insert($node, $item, $field); - // Remove non-existant images from items - if (empty($items[$delta])) { + if (!empty($item['flags']['delete'])) { unset($items[$delta]); } + else { + $items[$delta] = imagefield_file_insert($node, $item, $field); + } } - $items = array_values($items); // compact deltas - imagefield_clear_field_session($fieldname); + $items = array_values(array_filter($items)); // compact deltas break; // called before content.module defaults. case 'update': foreach ($items as $delta => $item) { - - // If we're dealing with a single value field, and we just received - // a new file item, we need to mark the existing (old) one for - // deletion. Otherwise, it will become orphaned. - if (!$field['multiple'] && (count($items) > 1) && ($delta === 0)) { - $item['flags']['hidden'] = TRUE; - $item['flags']['delete'] = TRUE; - } - // Update each file item. $items[$delta] = imagefield_file_update($node, $item, $field); + // D6TODO: not sure if this bit is still relevant it was added after quicksketch's patch: // If the file has been deleted, unset the file entry so that it's // actually deleted from the database, or at least set it to a // default item if CCK won't delete it. if (empty($items[$delta])) { - if ($field['multiple']) { + if ($field['multiple'] != 1) { unset($items[$delta]); } } } + $items = array_values(array_filter($items)); // compact deltas + break; + + // D6TODO: need to review this code + case 'delete revision': + $db_info = content_database_info($field); + foreach ($items as $delta => $item) { + $references = db_result(db_query("SELECT count(vid) FROM {%s} WHERE nid=%d AND %s=%d and vid!=%d", $db_info['table'], $node->nid, $db_info['columns']['fid']['column'], $item['fid'], $node->vid)); + if ($references || _imagefield_file_delete($item, $field['field_name'])) { + $items[$delta] = array(); + } + } $items = array_values($items); // compact deltas - imagefield_clear_field_session($fieldname); break; + case 'delete': foreach ($items as $delta => $item) { _imagefield_file_delete($item, $field['field_name']); } break; - case 'view': - $context = $teaser ? 'teaser' : 'full'; - $formatter = isset($field['display_settings'][$context]['format']) ? $field['display_settings'][$context]['format'] : 'default'; - if ($field['use_default_image'] && empty($items) ) { - $items[0] = $field['default_image']; - } + case 'sanitize': foreach ($items as $delta => $item) { - $items[$delta]['view'] = content_format($field, $item, $formatter, $node); + // Cleanup $items during node preview. + if (empty($item['fid']) || !empty($item['flags']['delete']) || !empty($item['flags']['hidden'])) { + unset($items[$delta]); + } + + // Load the complete file if a filepath is not available. + if (!empty($item['fid']) && empty($item['filepath'])) { + $items[$delta] = array_merge($item, _imagefield_file_load($item['fid'])); + } + + // Add nid so formatters can create a link to the node. + $items[$delta]['nid'] = $node->nid; + } + + // If completely empty, check for a default image. + if (empty($items) && $field['use_default_image'] && $field['default_image']['fid']) { + $items[$field['default_image']['fid']] = $field['default_image']; + $items[$field['default_image']['fid']] = $node->nid; } - return theme('field', $node, $field, $items, $teaser, $page); } } @@ -362,8 +339,10 @@ function imagefield_field($op, $node, $f function imagefield_widget_info() { return array( 'image' => array( - 'label' => 'Image', + 'label' => t('Image'), 'field types' => array('image'), + 'multiple values' => CONTENT_HANDLE_MODULE, + 'callbacks' => array('default value' => CONTENT_CALLBACK_CUSTOM), ), ); } @@ -373,9 +352,6 @@ function imagefield_widget_info() { */ function imagefield_widget_settings($op, $widget) { switch ($op) { - case 'callbacks': - return array('default value' => CONTENT_CALLBACK_CUSTOM); - case 'form': $form = array(); $form['max_resolution'] = array( @@ -394,13 +370,6 @@ function imagefield_widget_settings($op, '#size' => 6, '#description' => t('The maximum allowed image file size expressed in kilobytes. Set to 0 for no restriction.') ); - $form['max_number_images'] = array( - '#type' => 'textfield', - '#title' => t('Maximum number of images'), - '#default_value' => $widget['max_number_images'] ? $widget['max_number_images'] : 0, - '#size' => 4, - '#description' => t('The maximum number of images allowed. Set to 0 for no restriction. This only applies if multiple values are enabled.') - ); $form['image_path'] = array( '#type' => 'textfield', '#title' => t('Image path'), @@ -435,13 +404,13 @@ function imagefield_widget_settings($op, return $form; case 'validate': - // strip slashes from the beginning and end of $widget['image_path'] - $widget['image_path'] = trim($widget['image_path'], '\\/'); - form_set_value(array('#parents' => array('image_path')), $widget['image_path']); + if (substr($widget['image_path'], 0, 1) == '/' || substr($widget['image_path'], -1) == '/') { + form_set_error('image_path', t('Image paths should not start or end with slashes.')); + } break; case 'save': - return array('max_resolution', 'max_filesize', 'max_number_images', 'image_path', 'file_extensions', 'custom_alt', 'custom_title'); + return array('max_resolution', 'max_filesize', 'image_path', 'file_extensions', 'custom_alt', 'custom_title'); } } @@ -449,7 +418,7 @@ function imagefield_widget_settings($op, * Implementation of hook_form_alter(). Set the appropriate * attibutes to allow file uploads on the field settings form. */ -function imagefield_form_alter($form_id, &$form) { +function imagefield_form_alter(&$form, $form_state, $form_id) { if ($form_id == '_content_admin_field') { $form['#attributes'] = array('enctype' => 'multipart/form-data'); } @@ -464,57 +433,21 @@ function imagefield_form_alter($form_id, * @param $form_element * A form element to throw an error on if the directory is not writable */ -function imagefield_check_directory($directory, $form_element = array()) { +function imagefield_check_directory($directory, $fieldname = NULL) { foreach (explode('/', $directory) as $dir) { $dirs[] = $dir; - $path = file_create_path(implode($dirs, '/')); - file_check_directory($path, FILE_CREATE_DIRECTORY, $form_element['#parents'][0]); - } - return true; -} - -function _imagefield_scale_image($file, $resolution = 0) { - $info = image_get_info($file['filepath']); - if ($info) { - list($width, $height) = explode('x', $resolution); - if ($width && $height) { - $result = image_scale($file['filepath'], $file['filepath'], $width, $height); - if ($result) { - $file['filesize'] = filesize($file['filepath']); - drupal_set_message(t('The image %filename was resized to fit within the maximum allowed resolution of %resolution pixels', array('%resolution' => $resolution, '%filename' => $file['filename']))); - } - } - } - return $file; -} - -function imagefield_clear_session() { - if (is_array($_SESSION['imagefield']) && count($_SESSION['imagefield'])) { - foreach (array_keys($_SESSION['imagefield']) as $fieldname) { - imagefield_clear_field_session($fieldname); + $path = file_create_path(implode($dirs,'/')); + if (!file_check_directory($path, FILE_CREATE_DIRECTORY, $fieldname)) { + return FALSE; } - unset($_SESSION['imagefield']); - } -} - -function imagefield_clear_field_session($fieldname) { - if (is_array($_SESSION['imagefield'][$fieldname]) && count($_SESSION['imagefield'][$fieldname])) { - foreach ($_SESSION['imagefield'][$fieldname] as $delta => $file) { - if (is_file($file['filepath'])) { - file_delete($file['filepath']); - } - } - unset($_SESSION['imagefield'][$fieldname]); } + return TRUE; } function _imagefield_file_delete($file, $fieldname) { if (is_numeric($file['fid'])) { db_query('DELETE FROM {files} WHERE fid = %d', $file['fid']); } - else { - unset($_SESSION['imagefield'][$fieldname][$file['sessionid']]); - } module_invoke_all('imagefield_file', 'delete', $file); return file_delete($file['filepath']); } @@ -522,362 +455,270 @@ function _imagefield_file_delete($file, /** * Implementation of hook_widget(). */ -function imagefield_widget($op, &$node, $field, &$items) { - switch ($op) { - case 'default value': - return array(); - - case 'prepare form values': - _imagefield_widget_prepare_form_values($node, $field, $items); - return; - - case 'form': - return _imagefield_widget_form($node, $field, $items); +function imagefield_widget(&$form, &$form_state, $field, $items) { + $element = array( + '#type' => $field['widget']['type'], + '#title' => $field['widget']['label'], + '#weight' => $field['widget']['weight'], + '#default_value' => $items, + '#required' => $field['required'], + '#multiple' => $field['multiple'] == 0 ? FALSE : TRUE, + '#multiple_limit' => $field['multiple'] == 1 ? 0 : $field['multiple'], + '#element_validate' => array('_imagefield_widget_validate'), + '#field' => $field, + ); + return $element; +} - case 'validate': - _imagefield_widget_validate($node, $field, $items); - return; - } +/** + * Implementation of hook_elements(). + */ +function imagefield_elements() { + $elements = array(); + $elements['image'] = array( + '#input' => TRUE, + '#columns' => array('fid', 'title', 'alt'), + '#process' => array('imagefield_element_process'), + ); + return $elements; } -function _imagefield_widget_prepare_form_values(&$node, $field, &$items) { +/** + * Process the image type element before displaying the field. + */ +function imagefield_element_process($element, $edit, &$form_state, $form) { + $field = $element['#field']; $fieldname = $field['field_name']; - // clean up the session if we weren't posted. - if (!count($_POST)) { - imagefield_clear_session(); - } - - // Attach new files - if ($file = file_check_upload($fieldname .'_upload')) { - $file = (array)$file; - - // Validation must happen immediately after the image is uploaded so we - // can discard the file if it turns out not to be a valid mime type - $valid_image = _imagefield_widget_upload_validate($node, $field, $items, $file); - //$valid_image = TRUE; + drupal_add_css(drupal_get_path('module', 'imagefield') .'/imagefield.css'); - if ($valid_image) { - $file = _imagefield_scale_image($file, $field['widget']['max_resolution']); + // Pull in form state saved in storage. + form_get_cache($form_state['values']['form_build_id'], $form_state); + if (isset($form_state['storage'][$fieldname])) { + $form_state['values'][$fieldname] = $form_state['storage'][$fieldname]; + // Unset the storage to keep the form from unnecessarily rebuilding. + unset($form_state['storage'][$fieldname]); + } - // Allow tokenized paths if available - if (function_exists('token_replace')) { - global $user; - $widget_image_path = token_replace($field['widget']['image_path'], 'user', $user); - } - else { - $widget_image_path = $field['widget']['image_path']; - } - imagefield_check_directory($widget_image_path); - $filepath = file_create_filename($file['filename'], file_create_path($widget_image_path)); + // Change the type and theme to prevent FAPI from trying to output with the + // theme_image() function. + $element['#type'] = 'imagefield'; + $element['#theme'] = 'imagefield'; + $element['#tree'] = TRUE; - $file['fid'] = 'upload'; - $file['preview'] = $filepath; + // Set an internal flag for requiredness. Prevents FAPI from interfering. + $element['#image_required'] = $element['#required']; + $element['#required'] = FALSE; - // If a single field, mark any other images for deletion and delete files in session - if (!$field['multiple']) { - if (is_array($items)) { - foreach ($items as $delta => $session_file) { - $items[$delta]['flags']['hidden'] = TRUE; - $items[$delta]['flags']['delete'] = TRUE; - } - } - imagefield_clear_field_session($fieldname); - } - // Add the file to the session - $file_id = count($items) + count($_SESSION['imagefield'][$fieldname]); - $file['sessionid'] = $file_id; - $_SESSION['imagefield'][$fieldname][$file_id] = $file; + $files = array(); + if (isset($form_state['values'])) { + // Set a default value if available. + if (!isset($form_state[$fieldname]) && isset($element['#default_value'])) { + $form_state['values'][$fieldname] = $element['#default_value']; } - else { - // Delete the invalid file - file_delete($file['filepath']); - // If a single field and a valid file is in the session, mark existing image for deletion - if (!$field['multiple']) { - if (count($_SESSION['imagefield'][$fieldname]) && count($items)) { - foreach ($items as $delta => $session_file) { - $items[$delta]['flags']['hidden'] = TRUE; - $items[$delta]['flags']['delete'] = TRUE; - } - } + foreach ($form_state['values'][$fieldname] as $delta => $file) { + if (!empty($file['fid'])) { + $files[$file['fid']] = array_merge($file, _imagefield_file_load($file['fid'])); } } } - // Load files from preview state. before committing actions. - if (is_array($_SESSION['imagefield'][$fieldname]) && count($_SESSION['imagefield'][$fieldname])) { - foreach ($_SESSION['imagefield'][$fieldname] as $delta => $file) { - $items[] = $file; - } - } -} - -function _imagefield_widget_form($node, $field, &$items) { - drupal_add_js('misc/progress.js'); - drupal_add_js('misc/upload.js'); - - $fieldname = $field['field_name']; - drupal_add_css(drupal_get_path('module', 'imagefield') .'/imagefield.css'); - - $form = array(); + $form_state['values'][$fieldname] = $files; + $element['#files'] = $files; - $form[$fieldname] = array( - '#type' => 'fieldset', - '#title' => t($field['widget']['label']), - '#weight' => $field['widget']['weight'], - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#tree' => TRUE, - '#prefix' => '