Newer
Older
Darrel O'Pry
committed
<?php
/**
* @file
* FileField field hooks and callbacks.
*/
function filefield_field_settings_form($field) {
Darrel O'Pry
committed
$form = array();
$form['list_default'] = array(
'#type' => '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) {
Darrel O'Pry
committed
return array('force_list_default', 'list_default', 'file_formatters');
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
}
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;
}
Darrel O'Pry
committed
/**
* 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 {
Darrel O'Pry
committed
$item['data'] = unserialize($item['data']);
Darrel O'Pry
committed
$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) {
Darrel O'Pry
committed
// For hook_file_references, remember that this is being deleted.
Darrel O'Pry
committed
$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) {
Darrel O'Pry
committed
// For hook_file_references, remember that this is being deleted.
Darrel O'Pry
committed
$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;
}
}