Newer
Older
<?php
// $Id$
/**
* @file
* FileField: Defines a CCK file field type.
*
* Uses content.module to store the fid and field specific metadata,
* and Drupal's {files} table to store the actual file data.
*
* This file contains CCK formatter related functionality.
*/
/**
* Theme function for the 'default' filefield formatter.
*/
function theme_filefield_formatter_default($element) {
$file = $element['#item'];
$field = content_fields($element['#field_name']);
$output = theme('filefield_item', $file, $field);
Nate Lampton
committed
23
24
25
26
27
28
29
30
31
32
33
34
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
/**
* Theme function for the 'path_plain' formatter.
*/
function theme_filefield_formatter_path_plain($element) {
// Inside a View this function may be called with null data. In that case,
// just return.
if (empty($element['#item'])) {
return '';
}
$field = content_fields($element['#field_name']);
$item = $element['#item'];
// If there is no image on the database, use default.
if (empty($item['fid']) && $field['use_default_file']) {
$item = $field['default_file'];
}
if (empty($item['filepath']) && !empty($item['fid'])) {
$item = array_merge($item, field_file_load($item['fid']));
}
return empty($item['filepath']) ? '' : file_create_path($item['filepath']);
}
/**
* Theme function for the 'url_plain' formatter.
*/
function theme_filefield_formatter_url_plain($element) {
// Inside a View this function may be called with null data. In that case,
// just return.
if (empty($element['#item'])) {
return '';
}
$field = content_fields($element['#field_name']);
$item = $element['#item'];
// If there is no image on the database, use default.
if (empty($item['fid']) && $field['use_default_file']) {
$item = $field['default_file'];
}
if (empty($item['filepath']) && !empty($item['fid'])) {
$item = array_merge($item, field_file_load($item['fid']));
}
return empty($item['filepath']) ? '' : file_create_url($item['filepath']);
}
* Theme function for any file that is managed by FileField.
*
* It doesn't really format stuff by itself but rather redirects to other
* formatters that are telling us they want to handle the concerned file.
*
* This function checks if the file may be shown and returns an empty string
* if viewing the file is not allowed for any reason. If you need to display it
* in any case, please use theme('filefield') instead.
*/
function theme_filefield_item($file, $field) {
if (filefield_view_access($field['field_name']) && filefield_file_listed($file, $field)) {
return theme('filefield_file', $file);
Darrel O'Pry
committed
/**
* Return whether a file should be listed when viewing the node.
Darrel O'Pry
committed
*
* @param $file
* A populated FileField item.
* @param $field
* A CCK field instance array.
Darrel O'Pry
committed
*/
function filefield_file_listed($file, $field) {
if ($field['list_field']) {
return (bool)$file['list'];
}
return TRUE;
Darrel O'Pry
committed
}
/**
* Theme function for the 'generic' single file formatter.
*/
// Views may call this function with a NULL value, return an empty string.
if (empty($file['fid'])) {
return '';
}
$url = file_create_url($path);
$icon = theme('filefield_icon', $file);
// Set options as per anchor format described at
// http://microformats.org/wiki/file-format-examples
// TODO: Possibly move to until I move to the more complex format described
// at http://darrelopry.com/story/microformats-and-media-rfc-if-you-js-or-css
$options = array(
'attributes' => array(
Nate Lampton
committed
'type' => $file['filemime'] . '; length=' . $file['filesize'],
),
);
// Use the description as the link text if available.
if (empty($file['data']['description'])) {
$link_text = $file['filename'];
}
else {
$link_text = $file['data']['description'];
$options['attributes']['title'] = $file['filename'];
}
return '<div class="filefield-file clear-block">'. $icon . l($link_text, $url, $options) .'</div>';