'radios', '#title' => t('Default list value'), '#options' => array(1 => t('Listed'), 0 => t('Hidden')), '#default_value' => isset($field['list_default']) ? $field['list_default'] : 1, '#required' => true, '#description' => t('The list option determines whether files are visible on node views. This will be used as the default value for the list option.'), ); $form['force_list_default'] = array( '#type' => 'radios', '#title' => t('How should the list value be handled?'), '#options' => array(0 => t('User Configurable. (Users will be able to set the list value per file.)'), 1 => t('Enforce Default. (The default list value will be used for all files, and the list checkbox will not be displayed to users.)')), '#default_value' => isset($field['force_list_default']) ? $field['force_list_default'] : 0, '#required' => true, ); return $form; } function filefield_field_settings_validate($field) { } function filefield_field_settings_save($field) { return array('force_list_default', 'list_default', 'file_formatters'); } function filefield_field_settings_database_columns($field) { return array( 'fid' => array('type' => 'int', 'not null' => FALSE), 'list' => array('type' => 'int', 'size' => 'tiny', 'not null' => FALSE), 'data' => array('type' => 'text', 'serialize' => true), ); } function filefield_field_settings_views_data($field) { $data = content_views_field_views_data($field); $db_info = content_database_info($field); $table_alias = content_views_tablename($field); // Set our own field handler so that we can hook the file formatter // configuration table into the options form. // By defining the relationship, we already have a "Has file" filter // plus all the filters that Views already provides for files. // No need for having a filter by ourselves. unset($data[$table_alias][$field['field_name'] .'_fid']['filter']); // Add a relationship for related file. $data[$table_alias][$field['field_name'] .'_fid']['relationship'] = array( 'base' => 'files', 'field' => $db_info['columns']['fid']['column'], 'handler' => 'views_handler_relationship', ); return $data; } /** * Implementation of CCK's hook_field(). */ function filefield_field_load($node, $field, &$items, $teaser, $page) { if (empty($items)) { return array(); } foreach ($items as $delta => $item) { // Despite hook_content_is_empty(), CCK still doesn't filter out // empty items from $op = 'load', so we need to do that ourselves. if (empty($item['fid']) || !($file = field_file_load($item['fid']))) { unset($items[$delta]); } else { $item['data'] = unserialize($item['data']); $items[$delta] = array_merge($item, $file); } } $items = array_values($items); // compact deltas return array($field['field_name'] => $items); } function filefield_field_insert($node, $field, &$items, $teaser, $page) { return filefield_field_update($node, $field, $items, $teaser, $page); } function filefield_field_update($node, $field, &$items, $teaser, $page) { foreach ($items as $delta => $item) { $items[$delta] = field_file_save($node, $item); // Remove items from the array if they have been deleted. if (empty($items[$delta])) unset($items[$delta]); } $items = array_values($items); // compact deltas } function filefield_field_delete_revision($node, $field, &$items, $teaser, $page) { foreach ($items as $delta => $item) { // For hook_file_references, remember that this is being deleted. $item['field_name'] = $field['field_name']; if (field_file_delete($item)) unset($items[$delta]); $items = array_values($items); // compact deltas } } function filefield_field_delete($node, $field, &$items, $teaser, $page) { foreach ($items as $delta => $item) { // For hook_file_references, remember that this is being deleted. $item['field_name'] = $field['field_name']; field_file_delete($item); } } function filefield_field_sanitize($node, $field, &$items, $teaser, $page) { foreach ($items as $delta => $item) { // Cleanup $items during node preview. if (empty($item['fid']) || !empty($item['delete'])) { unset($items[$delta]); continue; } // Load the complete file if a filepath is not available. if (!empty($item['fid']) && empty($item['filepath'])) { $items[$delta] = array_merge($item, field_file_load($item['fid'])); } // Add nid so formatters can create a link to the node. $items[$delta]['nid'] = $node->nid; } }