| 1 |
<?php
|
| 2 |
// $Id: filefield_imagecache.module,v 1.2 2008/06/30 21:28:29 jpetso Exp $
|
| 3 |
/**
|
| 4 |
* @file
|
| 5 |
* FileField ImageCache: ImageCache support for images in CCK file fields.
|
| 6 |
*/
|
| 7 |
|
| 8 |
/**
|
| 9 |
* Implementation of hook_theme().
|
| 10 |
*/
|
| 11 |
function filefield_imagecache_theme() {
|
| 12 |
return array(
|
| 13 |
'filefield_imagecache_file_formatter_default' => array(
|
| 14 |
'arguments' => array(
|
| 15 |
'file' => NULL, 'field' => NULL, 'file_formatter_settings' => NULL,
|
| 16 |
),
|
| 17 |
),
|
| 18 |
);
|
| 19 |
}
|
| 20 |
|
| 21 |
/**
|
| 22 |
* Implementation of filefield's hook_file_formatter_info().
|
| 23 |
*/
|
| 24 |
function filefield_imagecache_file_formatter_info() {
|
| 25 |
$module_path = drupal_get_path('module', 'filefield_imagecache');
|
| 26 |
|
| 27 |
return array(
|
| 28 |
'default' => array(
|
| 29 |
'suitability callback' => 'filefield_imagecache_formatter_handles_file',
|
| 30 |
'css' => array($module_path .'/filefield_image.css'),
|
| 31 |
'title' => t('Images (transformed with ImageCache)'),
|
| 32 |
'description' => t('Displays image files after piping them through ImageCache presets. Which means you can have scaled, cropped or otherwise transformed images with this formatter.'),
|
| 33 |
),
|
| 34 |
);
|
| 35 |
}
|
| 36 |
|
| 37 |
function filefield_imagecache_file_formatter_settings_default($op, $file_formatter_settings = NULL) {
|
| 38 |
switch ($op) {
|
| 39 |
case 'form':
|
| 40 |
$form = array();
|
| 41 |
$presets = imagecache_presets();
|
| 42 |
$preset_options = array();
|
| 43 |
|
| 44 |
$form['div_begin'] = array(
|
| 45 |
'#type' => 'markup',
|
| 46 |
'#value' => '<div class="filefield-imagecache-formatter-settings">',
|
| 47 |
);
|
| 48 |
|
| 49 |
foreach ($presets as $preset) {
|
| 50 |
$preset_options[$preset['presetname']] = $preset['presetname'];
|
| 51 |
}
|
| 52 |
$form['preset'] = array(
|
| 53 |
'#type' => 'select',
|
| 54 |
'#title' => t('Preset'),
|
| 55 |
'#description' => t('Choose the ImageCache preset that should be applied to images.'),
|
| 56 |
'#options' => $preset_options,
|
| 57 |
'#default_value' => isset($file_formatter_settings['preset'])
|
| 58 |
? $file_formatter_settings['preset']
|
| 59 |
: reset($preset_options), // first element
|
| 60 |
'#prefix' => '<div class="filefield-imagecache-formatter-preset">',
|
| 61 |
'#suffix' => '</div>',
|
| 62 |
);
|
| 63 |
|
| 64 |
$form['style'] = array(
|
| 65 |
'#type' => 'select',
|
| 66 |
'#title' => t('Display as'),
|
| 67 |
'#description' => t('How the transformed image should appear.'),
|
| 68 |
'#options' => array(
|
| 69 |
'default' => t('Transformed image'),
|
| 70 |
'linked' => t('Transformed image linked to node'),
|
| 71 |
'imagelink' => t('Transformed image linked to original image'),
|
| 72 |
'path' => t('File path of transformed image'),
|
| 73 |
'url' => t('URL of transformed image'),
|
| 74 |
),
|
| 75 |
'#default_value' => isset($file_formatter_settings['style'])
|
| 76 |
? $file_formatter_settings['style']
|
| 77 |
: 'default',
|
| 78 |
'#prefix' => '<div class="filefield-imagecache-formatter-style">',
|
| 79 |
'#suffix' => '</div>',
|
| 80 |
);
|
| 81 |
|
| 82 |
$form['div_end'] = array(
|
| 83 |
'#type' => 'markup',
|
| 84 |
'#value' => '</div>',
|
| 85 |
);
|
| 86 |
return $form;
|
| 87 |
}
|
| 88 |
}
|
| 89 |
|
| 90 |
/**
|
| 91 |
* Suitability callback the image widget and formatter.
|
| 92 |
* Handles the three web mimetypes: jpeg, png and gif.
|
| 93 |
*/
|
| 94 |
function filefield_imagecache_formatter_handles_file($file, $field) {
|
| 95 |
return in_array($file->filemime, array(
|
| 96 |
'image/jpeg', 'image/png', 'image/gif', // proper mimetypes
|
| 97 |
'image/jpg', 'image/pjpeg', // IE nonstandard mimetypes, wtf?
|
| 98 |
));
|
| 99 |
}
|
| 100 |
|
| 101 |
/**
|
| 102 |
* Theme function for the imagecached single image file formatter.
|
| 103 |
*/
|
| 104 |
function theme_filefield_imagecache_file_formatter_default($file, $field, $file_formatter_settings) {
|
| 105 |
$presetname = $file_formatter_settings['preset'];
|
| 106 |
$preset = imagecache_preset_by_name($presetname);
|
| 107 |
|
| 108 |
if (empty($preset)) {
|
| 109 |
return '<!-- imagecache formatter preset ('. $presetname .') not found! -->';
|
| 110 |
}
|
| 111 |
$style = $file_formatter_settings['style'];
|
| 112 |
$classes = implode(' ', array(
|
| 113 |
'filefield-imagecache',
|
| 114 |
'filefield-imagecache-'. $presetname,
|
| 115 |
'filefield-imagecache-'. $style,
|
| 116 |
'filefield-imagecache-'. $presetname .'-'. $style,
|
| 117 |
));
|
| 118 |
|
| 119 |
$description = empty($file->description) ? $file->filename : $file->description;
|
| 120 |
$title = empty($file->title) ? $description : $file->title;
|
| 121 |
|
| 122 |
switch ($style) {
|
| 123 |
case 'linked':
|
| 124 |
// We do have a node id because filefield merges $element['#item'].
|
| 125 |
$imagetag = theme('imagecache', $presetname, $file->filepath, $description, $title);
|
| 126 |
return l($imagetag, 'node/'. $file->nid,
|
| 127 |
array('attributes' => array('class' => $classes), 'html' => TRUE));
|
| 128 |
|
| 129 |
case 'imagelink':
|
| 130 |
$original_image_url = file_create_url($file->filepath);
|
| 131 |
$imagetag = theme('imagecache', $presetname, $file->filepath, $description, $title);
|
| 132 |
return l($imagetag, $original_image_url,
|
| 133 |
array('attributes' => array('class' => $classes), 'html' => TRUE));
|
| 134 |
|
| 135 |
case 'url':
|
| 136 |
return imagecache_create_url($presetname, $file->filepath);
|
| 137 |
|
| 138 |
case 'path':
|
| 139 |
return imagecache_create_path($presetname, $file->filepath);
|
| 140 |
|
| 141 |
default:
|
| 142 |
return theme('imagecache', $presetname, $file->filepath, $description, $title);
|
| 143 |
}
|
| 144 |
}
|