Size labels need strtolower()
JeniferTucker - January 3, 2009 - 22:52
| Project: | Image watermark |
| Version: | 5.x-1.x-dev |
| Component: | Code |
| Category: | bug report |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | needs work |
Jump to:
Description
The image size labels in the admin form are display labels (with upper case 1st letter).
watermark_admin_settings() {
....
// This gets 'Original', 'Thumbnail', 'Medium' etc from _image_get_sizes()
foreach (_image_get_sizes() as $size) {
$label_list[] = $size['label'];
}
// This sets the variables in the database, using the (display) label to create the variable name.
// 'watermark_Original', 'watermark_Thumbnail', 'watermark_Medium' etc
foreach ($label_list as $label) {
$label_var = WATERMARK . $label;
$form['watermark']['labels'][$label_var] = array(
'#type' => 'checkbox',
'#title' => $label,
'#default_value' => variable_get($label_var, false),
);
....
}
The variables stored in the database are based on the display labels (with upper case 1st letters).
select * from variable where name like 'water%' ;
name | value
------------------------+--------
watermark_Original | i:1;
watermark_Thumbnail | i:1;
watermark_Preview | i:1;
watermark_Node | i:1;
watermark_Watermarked | i:1;
watermark_Medium | i:1;
....
When an image node is being processed, watermark_apply checks for lower case variable names
because the labels returned by $node->images are all lower case.
function _watermark_apply($node) {
....
// The labels from $node->images are all lower case.
// 'original', 'thumbnail', 'medium' etc
foreach ($node->images as $label => $filepath) {
//
// This test always fails because it is checking for
// 'watermark_original', 'watermark_thumbnail', 'watermark_medium' etc
if (variable_get(WATERMARK . $label, false)) {
....
}
}
....
}
Fix is to convert the size labels to lower case in the admin form with strtolower().
watermark_admin_settings() {
....
//
// Convert label name to lower case before using.
foreach ($label_list as $label) {
- $label_var = WATERMARK . $label;
+ $label_var = WATERMARK . strtolower($label);
$form['watermark']['labels'][$label_var] = array(
'#type' => 'checkbox',
'#title' => $label,
'#default_value' => variable_get($label_var, false),
);
....
}
Variables stored in the database now match the names checked by watermark_apply().
select * from variable where name like 'water%' ;
name | value
------------------------+--------
watermark_original | i:1;
watermark_thumbnail | i:1;
watermark_preview | i:1;
watermark_node | i:1;
watermark_watermarked | i:1;
watermark_medium | i:1;
#1
Please create a properly formatted and tested patch against 5.x.-1.x-dev as per here http://drupal.org/patch