diff --git a/modules/imagefield/imagefield.css b/modules/imagefield/imagefield.css
new file mode 100644
index 0000000..8ae2c39
--- /dev/null
+++ b/modules/imagefield/imagefield.css
@@ -0,0 +1,9 @@
+
+.filefield-element .imagefield-preview {
+ min-width: 100px;
+ min-height: 100px;
+}
+
+.filefield-element .imagefield-text {
+ max-width: 40em; /* Reflect the maxlength of the ALT attribute (80 characters). */
+}
diff --git a/modules/imagefield/imagefield.info b/modules/imagefield/imagefield.info
new file mode 100644
index 0000000..eebb726
--- /dev/null
+++ b/modules/imagefield/imagefield.info
@@ -0,0 +1,11 @@
+name = ImageField
+description = Defines an image field type.
+dependencies[] = content
+dependencies[] = filefield
+package = CCK
+core = 6.x
+; Information added by drupal.org packaging script on 2013-04-14
+version = "6.x-3.11"
+core = "6.x"
+project = "imagefield"
+datestamp = "1365969012"
diff --git a/modules/imagefield/imagefield.install b/modules/imagefield/imagefield.install
new file mode 100644
index 0000000..06a6ed7
--- /dev/null
+++ b/modules/imagefield/imagefield.install
@@ -0,0 +1,353 @@
+ FALSE, 'query' => t('Content module must be enabled before ImageField can be updated.'));
+ return $ret;
+ }
+
+ if (drupal_get_installed_schema_version('filefield', TRUE) < 6001) {
+ $ret['#abort'] = array('success' => FALSE, 'query' => t('FileField must be updated to Drupal 6 before ImageField can be updated.'));
+ return $ret;
+ }
+
+ $ret[] = update_sql("UPDATE {" . content_field_tablename() . "} SET type = 'filefield', module = 'filefield', active = 1 WHERE module = 'imagefield' OR type = 'image'");
+ $ret[] = update_sql("UPDATE {" . content_instance_tablename() . "} SET widget_type = 'imagefield_widget', widget_module = 'imagefield', widget_active = 1 WHERE widget_type = 'image' OR widget_type = 'imagefield_widget'");
+ content_clear_type_cache();
+
+ return $ret;
+}
+
+/**
+ * Migrate fields to the new structure.
+ */
+function imagefield_update_6004(&$context) {
+ drupal_load('module', 'content');
+ module_load_install('content');
+ module_load_include('inc', 'imagefield', 'imagefield_file');
+ module_load_include('inc', 'content', 'includes/content.admin');
+ module_load_include('inc', 'content', 'includes/content.crud');
+
+ $ret = array();
+
+ if (!isset($context['sandbox']['progress'])) {
+ // Get the latest cache values and schema.
+ content_clear_type_cache(TRUE);
+
+ // Grab the list of fields to update.
+ $context['sandbox']['fields'] = array();
+ foreach (content_types_install() as $type_name => $fields) {
+ foreach ($fields as $field) {
+ if ($field['type'] == 'filefield' && $field['widget']['type'] == 'imagefield_widget') {
+ // We only process a given field once.
+ $context['sandbox']['fields'][$field['field_name']] = $field;
+ // Widgets are each updated individually.
+ $context['sandbox']['widgets'][] = $field;
+ }
+ }
+ }
+
+ if (empty($context['sandbox']['fields'])) {
+ return $ret;
+ }
+
+ // Add/update the database fields.
+ foreach ($context['sandbox']['fields'] as $field) {
+ $db_info = content_database_info($field);
+
+ // Convert the default value for the FID field to NULL.
+ db_change_field($ret, $db_info['table'], $field['field_name'] . '_fid', $field['field_name'] . '_fid', array('type' => 'int'));
+ $ret[] = update_sql("UPDATE {" . $db_info['table'] . "} SET " . $field['field_name'] . "_fid = NULL WHERE " . $field['field_name'] . "_fid = 0");
+
+ // Set any entries that were abandoned by poor housekeeping to NULL.
+ $ret[] = update_sql("UPDATE {" . $db_info['table'] . "} SET " . $field['field_name'] . "_fid = NULL WHERE " . $field['field_name'] . "_fid NOT IN (SELECT fid FROM {files})");
+
+ // Add the "data" and "list" columns to the field if not there already.
+ if (!db_column_exists($db_info['table'], $field['field_name'] . '_list')) {
+ db_add_field($ret, $db_info['table'], $field['field_name'] . '_list', array('type' => 'int', 'size' => 'tiny'));
+ }
+ if (!db_column_exists($db_info['table'], $field['field_name'] . '_data')) {
+ db_add_field($ret, $db_info['table'], $field['field_name'] . '_data', array('type' => 'text'));
+ }
+
+ // Set the default state of the global settings.
+ $field['list_field'] = '0';
+ $field['list_default'] = '1';
+ $field['description_field'] = '0';
+
+ // Map 'max_number_images' parameter to CCK 'multiple'.
+ if (!empty($field['widget']['multiple']) && 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'];
+ }
+ }
+
+ // Update format names.
+ $display_settings = array('teaser', 'full');
+ foreach ($display_settings as $display_context) {
+ if (isset($field['display_settings'][$display_context])) {
+ switch ($field['display_settings'][$display_context]['format']) {
+ case 'imagefield_nodelink':
+ $field['display_settings'][$display_context]['format'] = 'image_nodelink';
+ break;
+ case 'imagefield_imagelink':
+ $field['display_settings'][$display_context]['format'] = 'image_imagelink';
+ break;
+ case 'imagefield_path':
+ $field['display_settings'][$display_context]['format'] = 'path_plain';
+ break;
+ case 'imagefield_url':
+ $field['display_settings'][$display_context]['format'] = 'url_plain';
+ break;
+ case 'imagefield_default':
+ case 'default':
+ $field['display_settings'][$display_context]['format'] = 'image_plain';
+ break;
+ }
+ }
+ }
+
+ // Move the default_image options to the widget level.
+ $field['widget']['default_image'] = isset($field['default_image']) ? $field['default_image'] : NULL;
+ $field['widget']['use_default_image'] = isset($field['use_default_image']) ? $field['use_default_image'] : 0;
+
+ // The default image needs to be saved in the files table.
+ if (isset($field['widget']['default_image']['filepath'])) {
+ $file = (object) $field['widget']['default_image'];
+ // Check if it's already in the files table.
+ if ($fid = db_result(db_query("SELECT fid FROM {files} WHERE filepath = '%s'", $file->filepath))) {
+ $field['widget']['default_image']['fid'] = $fid;
+ }
+ // Otherwise add it.
+ else {
+ $file->uid = 1;
+ $file->status = 1;
+ drupal_write_record('files', $file);
+ $field['widget']['default_image']['fid'] = $file->fid;
+ }
+
+ // Unset the field-level definition, or it will take precedence.
+ unset($field['default_image']);
+ }
+
+ content_field_instance_update($field);
+ }
+
+ // Update each widget instance.
+ foreach ($context['sandbox']['widgets'] as $field) {
+ // Change file_path to image_path.
+ if (isset($field['widget']['image_path'])) {
+ $field['widget']['file_path'] = $field['widget']['image_path'];
+ }
+
+ // Update the formatters.
+ foreach ($field['display_settings'] as $key => $display) {
+ switch ($display['format']) {
+ case 'default':
+ $field['display_settings'][$key]['format'] = 'image_plain';
+ break;
+ case 'imagefield_nodelink':
+ $field['display_settings'][$key]['format'] = 'image_nodelink';
+ break;
+ case 'imagefield_imagelink':
+ $field['display_settings'][$key]['format'] = 'image_imagelink';
+ break;
+ case 'imagefield_path':
+ $field['display_settings'][$key]['format'] = 'path_plain';
+ break;
+ case 'imagefield_url':
+ $field['display_settings'][$key]['format'] = 'url_plain';
+ break;
+ }
+ }
+
+ content_field_instance_update($field);
+ }
+
+ $context['sandbox']['progress'] = 0;
+ $context['sandbox']['total'] = count($context['sandbox']['fields']);
+ $context['sandbox']['current_node'] = 0;
+ }
+
+ $field = array_shift($context['sandbox']['fields']);
+ $db_info = content_database_info($field);
+ $table = $db_info['table'];
+ $col_fid = $field['field_name'] .'_fid';
+ $col_alt = $field['field_name'] .'_alt';
+ $col_title = $field['field_name'] .'_title';
+ $col_data = $field['field_name'] .'_data';
+ $col_list = $field['field_name'] .'_list';
+
+ $limit = 100;
+ $result = db_query_range("SELECT * FROM {". $table ."} WHERE vid > %d ORDER BY vid ASC", $context['sandbox']['current_node'], 0, $limit);
+ $has_processed = FALSE;
+
+ // Loop through each ImageField row and convert its alt and title columns.
+ while ($row = db_fetch_array($result)) {
+ // Try to unserialize the data column.
+ if (!empty($row[$col_data])) {
+ $data = unserialize($row[$col_data]);
+ }
+ if (empty($data)) {
+ $data = array();
+ }
+
+ // Copy the values into the data array.
+ if (isset($row[$col_alt])) {
+ $data['alt'] = $row[$col_alt];
+ }
+ if (isset($row[$col_title])) {
+ $data['title'] = $row[$col_title];
+ }
+ $list = isset($row[$col_list]) ? $row[$col_list] : 1;
+
+ // Depending on if this is multivalue or not, update based on delta.
+ if ($field['multiple'] > 0) {
+ $query = "UPDATE {". $table ."} SET $col_data = '%s', $col_list = %d WHERE vid = %d AND delta = %d";
+ }
+ else {
+ $query = "UPDATE {". $table ."} SET $col_data = '%s', $col_list = %d WHERE vid = %d";
+ $row['delta'] = 0;
+ }
+
+ // Serialize it and store it back to the db.
+ db_query($query, serialize($data), $list, $row['vid'], $row['delta']);
+
+ // Update our progress information.
+ $context['sandbox']['current_node'] = $row['vid'];
+ $has_processed = TRUE;
+ }
+
+ if ($has_processed) {
+ // Not finished, put back the field in the array.
+ array_unshift($context['sandbox']['fields'], $field);
+ }
+ else {
+ // Cleanup the old columns.
+ if (db_column_exists($table, $col_alt)) {
+ db_drop_field($ret, $table, $col_alt);
+ }
+ if (db_column_exists($table, $col_title)) {
+ db_drop_field($ret, $table, $col_title);
+ }
+
+ // Process to next field.
+ $context['sandbox']['progress']++;
+ $context['sandbox']['current_node'] = 0;
+ }
+
+ if (!empty($context['sandbox']['fields'])) {
+ $ret['#finished'] = $context['sandbox']['progress'] / $context['sandbox']['total'];
+ }
+
+ return $ret;
+}
+
+/**
+ * Delete thumbnails spread throughout the files directory.
+ */
+function imagefield_update_6005() {
+ $ret = array();
+
+ $result = db_query("SELECT * FROM {files} WHERE filemime LIKE 'image/%'");
+
+ while ($file = db_fetch_object($result)) {
+ // ImageField 6002 thumbnail path.
+ $thumb_path_a = $file->filepath . '.thumb.jpg';
+
+ // ImageField 6004 thumbnail path.
+ $extension_dot = strrpos($file->filepath, '.');
+ $extension = substr($file->filepath, $extension_dot + 1);
+ $basepath = substr($file->filepath, 0, $extension_dot);
+ $thumb_path_b = $basepath .'.thumb.'. $extension;
+
+ file_delete($thumb_path_a);
+ file_delete($thumb_path_b);
+ }
+
+ $ret[] = array('success' => TRUE, 'query' => t('Deleted admin thumbnails distributed throughout files directory. All thumbnails are now stored in the "imagefield_thumbs" directory.'));
+
+ return $ret;
+}
+
+/**
+ * Add default values to all ImageFields.
+ */
+function imagefield_update_6006() {
+ $ret = array();
+ module_load_install('content');
+ foreach (content_types_install() as $type_name => $fields) {
+ foreach ($fields as $field) {
+ if ($field['type'] == 'filefield' && $field['widget']['type'] == 'imagefield_widget') {
+ $field['widget']['file_extensions'] = isset($field['widget']['file_extensions']) ? $field['widget']['file_extensions'] : NULL;
+ $field['widget']['max_filesize_per_file'] = isset($field['widget']['max_filesize_per_file']) ? $field['widget']['max_filesize_per_file'] : NULL;
+ $field['widget']['max_filesize_per_node'] = isset($field['widget']['max_filesize_per_node']) ? $field['widget']['max_filesize_per_node'] : NULL;
+ content_field_instance_update($field);
+ }
+ }
+ }
+
+ return $ret;
+}
diff --git a/modules/imagefield/imagefield.module b/modules/imagefield/imagefield.module
new file mode 100644
index 0000000..6fd0aa2
--- /dev/null
+++ b/modules/imagefield/imagefield.module
@@ -0,0 +1,388 @@
+ array(
+ 'arguments' => array('file' => NULL, 'alt' => '', 'title' => '', 'attributes' => NULL, 'getsize' => TRUE),
+ ),
+ // Theme an ImageField field item. It calls imagefied_image with the proper
+ // item properties as arguments.
+ 'imagefield_item' => array(
+ 'arguments' => array('item' => NULL),
+ ),
+ // imagefield_widget form element type theme function.
+ 'imagefield_widget' => array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'imagefield_widget.inc',
+ ),
+ // Use to generate a preview (admin view) of an imagefield item for use in
+ // field item forms and filefield widgets. Invoked by filefield_widget_process.
+ 'imagefield_widget_preview' => array(
+ 'arguments' => array('item' => NULL),
+ ),
+ // Theme function for the field item elements. allows you to place children
+ // within the context of the parent.
+ 'imagefield_widget_item' => array(
+ 'arguments' => array('element' => NULL),
+ ),
+ // Generates and img tag to the admin thumbnail of an ImageField upload.
+ 'imagefield_admin_thumbnail' => array(
+ 'arguments' => array('item' => NULL),
+ ),
+ // ImageField formatter theme functions.
+ 'imagefield_formatter_image_plain' => array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'imagefield_formatter.inc',
+ ),
+ 'imagefield_formatter_image_nodelink' => array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'imagefield_formatter.inc',
+ ),
+ 'imagefield_formatter_image_imagelink' => array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'imagefield_formatter.inc',
+ ),
+ );
+}
+
+/**
+ * Implementation of hook_elements().
+ */
+function imagefield_elements() {
+ $elements = array();
+
+ // Catch problems when this is called too early during installation or update.
+ if (!module_exists('filefield')) {
+ return $elements;
+ }
+
+ // An ImageField is really just a FileField with extra processing.
+ $filefield_elements = module_invoke('filefield', 'elements');
+ $elements['imagefield_widget'] = $filefield_elements['filefield_widget'];
+ $elements['imagefield_widget']['#process'][] = 'imagefield_widget_process';
+
+ // ImageField needs a separate value callback to save its alt and title texts.
+ $elements['imagefield_widget']['#value_callback'] = 'imagefield_widget_value';
+
+ return $elements;
+}
+
+/**
+ * Implementation of hook_file_download.
+ */
+function imagefield_file_download($filepath) {
+ // Return headers for admin thumbnails if private files are enabled.
+ if (strpos($filepath, 'imagefield_thumbs') !== FALSE) {
+ $original_path = str_replace('imagefield_thumbs/', '', $filepath);
+ $original_full_path = file_create_path($original_path);
+ $thumb_full_path = file_create_path($filepath);
+
+ // Allow access to temporary thumbnails, since they're not yet associated
+ // with a node. If not temporary, check access on the original file.
+ $status = db_result(db_query("SELECT status FROM {files} WHERE filepath = '%s'", $original_full_path));
+ $access = ($status == 0 || !in_array(-1, module_invoke_all('file_download', $original_path)));
+ if ($access && $info = getimagesize($thumb_full_path)) {
+ return array(
+ 'Content-Type: ' . $info['mime'],
+ 'Content-Length: ' . filesize($thumb_full_path)
+ );
+ }
+ }
+
+ // Return headers for default images.
+ if (strpos($filepath, 'imagefield_default_images') !== FALSE) {
+ $full_path = file_create_path($filepath);
+ if ($info = getimagesize($full_path)) {
+ return array(
+ 'Content-Type: ' . $info['mime'],
+ 'Content-Length: ' . filesize($full_path)
+ );
+ }
+ }
+}
+
+/**
+ * Implementation of hook_nodeapi().
+ *
+ * Add ALT and title texts to the search index.
+ */
+function imagefield_nodeapi($node, $op) {
+ if ($op == 'update index') {
+ static $fields;
+ if (!isset($fields)) {
+ $fields = filefield_get_field_list();
+ }
+
+ $texts = array();
+ foreach ($fields as $field) {
+ $name = $field['field_name'];
+ // Check this node for ImageField alt and title data.
+ if (isset($node->$name) && is_array($node->$name)) {
+ foreach ($node->$name as $item) {
+ $texts[] = isset($item['data']['alt']) ? $item['data']['alt'] : '';
+ $texts[] = isset($item['data']['title']) ? $item['data']['title'] : '';
+ }
+ }
+ }
+ return implode(' ', $texts);
+ }
+}
+
+/**
+ * Implementation of CCK's hook_widget_info().
+ */
+function imagefield_widget_info() {
+ $module_path = drupal_get_path('module', 'imagefield');
+ return array(
+ 'imagefield_widget' => array(
+ 'label' => t('Image'),
+ 'field types' => array('filefield'),
+ 'multiple values' => CONTENT_HANDLE_CORE,
+ 'callbacks' => array('default value' => CONTENT_CALLBACK_CUSTOM),
+ 'description' => t('An edit widget for image files, including a preview of the image.'),
+ ),
+ );
+}
+
+/**
+ * Implementation of CCK's hook_widget_settings().
+ */
+function imagefield_widget_settings($op, $widget) {
+ switch ($op) {
+ case 'form':
+ return imagefield_widget_settings_form($widget);
+ case 'validate':
+ return imagefield_widget_settings_validate($widget);
+ case 'save':
+ return imagefield_widget_settings_save($widget);
+ }
+}
+
+/**
+ * Implementation of CCK's hook_widget().
+ *
+ * Assign default properties to item and delegate to FileField.
+ */
+function imagefield_widget(&$form, &$form_state, $field, $items, $delta = 0) {
+ // Add default values to items.
+ // TODO: use CCK's default value callback.
+ if (empty($items[$delta])) {
+ $items[$delta] = array('alt' => '', 'title' => '');
+ }
+
+ // Start with the FileField widget as a basic start.
+ // Note that FileField needs to modify $form by reference.
+ $element = filefield_widget($form, $form_state, $field, $items, $delta);
+
+ // Add ImageField specific validators.
+ $element['#upload_validators'] = array_merge($element['#upload_validators'], imagefield_widget_upload_validators($field));
+
+ return $element;
+}
+
+/**
+ * Get the additional upload validators for an image field.
+ *
+ * @param $field
+ * The CCK field array.
+ * @return
+ * An array suitable for passing to file_save_upload() or the file field
+ * element's '#upload_validators' property.
+ */
+function imagefield_widget_upload_validators($field) {
+ $validators = array();
+
+ // Match the default value if no file extensions have been saved at all.
+ if (!isset($field['widget']['file_extensions'])) {
+ $field['widget']['file_extensions'] = 'png gif jpg jpeg';
+ }
+
+ // Ensure that only web images are supported.
+ $web_extensions = array('png', 'gif', 'jpg', 'jpeg');
+ $extensions = array_filter(explode(' ', $field['widget']['file_extensions']));
+ if (empty($extensions)) {
+ $extensions = $web_extensions;
+ }
+ $validators['filefield_validate_extensions'][0] = implode(' ', array_intersect($extensions, $web_extensions));
+
+ // Add the image validator as a basic safety check.
+ $validators['filefield_validate_is_image'] = array();
+
+ // Add validators for resolutions.
+ if (!empty($field['widget']['max_resolution']) || !empty($field['widget']['min_resolution'])) {
+ $validators['filefield_validate_image_resolution'] = array(
+ $field['widget']['max_resolution'],
+ $field['widget']['min_resolution'],
+ );
+ }
+
+ return $validators;
+}
+
+/**
+ * Implementation of CCK's hook_field_formatter_info().
+ */
+function imagefield_field_formatter_info() {
+ $module_path = drupal_get_path('module', 'imagefield');
+ $formatters = array(
+ 'image_plain' => array(
+ 'label' => t('Image'),
+ 'field types' => array('filefield'),
+ 'description' => t('Displays image files in their original size.'),
+ ),
+ 'image_nodelink' => array(
+ 'label' => t('Image linked to node'),
+ 'field types' => array('filefield'),
+ 'description' => t('Displays image files in their original size.'),
+ ),
+ 'image_imagelink' => array(
+ 'label' => t('Image linked to file'),
+ 'field types' => array('filefield'),
+ 'description' => t('Displays image files in their original size.'),
+ ),
+ );
+ return $formatters;
+}
+
+/**
+ * Implementation of CCK's hook_default_value().
+ */
+function imagefield_default_value(&$form, &$form_state, $field, $delta) {
+ return filefield_default_value($form, $form_state, $field, $delta);
+}
+
+/**
+ * Implementation of hook_form_[form_id]_alter().
+ *
+ * Modify the add new field form to make "Image" the default formatter.
+ */
+function imagefield_form_content_field_overview_form_alter(&$form, &$form_state) {
+ $form['#submit'][] = 'imagefield_form_content_field_overview_submit';
+}
+
+/**
+ * Submit handler to set a new field's formatter to "image_plain".
+ */
+function imagefield_form_content_field_overview_submit(&$form, &$form_state) {
+ if (isset($form_state['fields_added']['_add_new_field']) && isset($form['#type_name'])) {
+ $new_field = $form_state['fields_added']['_add_new_field'];
+ $node_type = $form['#type_name'];
+ $field = content_fields($new_field, $node_type);
+ if ($field['widget']['module'] == 'imagefield') {
+ foreach ($field['display_settings'] as $display_type => $display_settings) {
+ if ($field['display_settings'][$display_type]['format'] == 'default') {
+ $field['display_settings'][$display_type]['format'] = 'image_plain';
+ }
+ }
+ content_field_instance_update($field);
+ }
+ }
+}
+
+/**
+ * Implementation of hook_filefield_data_info().
+ */
+function imagefield_filefield_data_info() {
+ return array(
+ 'alt' => array(
+ 'title' => t('Alt text'),
+ 'callback' => 'check_plain',
+ ),
+ 'title' => array(
+ 'title' => t('Title'),
+ 'callback' => 'check_plain',
+ ),
+ );
+}
+
+/**
+ * @defgroup "Theme Callbacks"
+ * @{
+ * @see imagefield_theme().
+ */
+function theme_imagefield_image($file, $alt = '', $title = '', $attributes = NULL, $getsize = TRUE) {
+ $file = (array) $file;
+
+ if ($getsize) {
+ // Use cached width and height if available.
+ if (!empty($file['data']['width']) && !empty($file['data']['height'])) {
+ $attributes['width'] = $file['data']['width'];
+ $attributes['height'] = $file['data']['height'];
+ }
+ // Otherwise pull the width and height from the file.
+ elseif (list($width, $height, $type, $image_attributes) = @getimagesize($file['filepath'])) {
+ $attributes['width'] = $width;
+ $attributes['height'] = $height;
+ }
+ }
+
+ if (!empty($title)) {
+ $attributes['title'] = $title;
+ }
+
+ // Alt text should be added even if it is an empty string.
+ $attributes['alt'] = $alt;
+
+ // Add a timestamp to the URL to ensure it is immediately updated after editing.
+ $query_string = '';
+ if (isset($file['timestamp'])) {
+ $query_character = (variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC) == FILE_DOWNLOADS_PRIVATE && variable_get('clean_url', '0') == '0') ? '&' : '?';
+ $query_string = $query_character . $file['timestamp'];
+ }
+
+ // Encode the path so that unusual characters are printed correctly.
+ $path = field_file_urlencode_path($file['filepath']);
+
+ // Construct the URL.
+ $url = file_create_url($path) . $query_string;
+ $attributes['src'] = $url;
+ $attributes = drupal_attributes($attributes);
+ return '';
+}
+
+function theme_imagefield_item($item) {
+ return theme('imagefield_image', $item, $item['alt'], $item['title']);
+}
+
+function theme_imagefield_widget_preview($item = NULL) {
+ return '