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
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

kbahey - January 4, 2009 - 02:56
Version:5.x-1.0» 5.x-1.x-dev
Status:active» needs work

Please create a properly formatted and tested patch against 5.x.-1.x-dev as per here http://drupal.org/patch

 
 

Drupal is a registered trademark of Dries Buytaert.