? test.patch
? contrib/image_attach/test.patch
Index: image.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/image/image.install,v
retrieving revision 1.1.4.3
diff -u -r1.1.4.3 image.install
--- image.install	24 Jun 2007 20:42:10 -0000	1.1.4.3
+++ image.install	28 Jun 2007 23:40:59 -0000
@@ -1,40 +1,40 @@
-<?php
-// $Id: image.install,v 1.1.4.3 2007/06/24 20:42:10 drewish Exp $
-
-/**
- * Installing and updating image.module.
- */
-
-function image_install() {
-  //Nothing to do.
-}
-
-/**
- * Update 4.5 to 4.6 or later.
- */
-function image_update_1() {
-  if (db_table_exists('image')) {
-    if ($result = db_query("SELECT * FROM {image}")) {
-      $fields = array('thumb_path' => 'thumbnail',
-                      'preview_path' => 'preview',
-                      'image_path' => '_original');
-      
-      while ($old_image = db_fetch_object($result)) {
-        foreach ($fields as $old => $new) {
-          $old_file = '';
-          if (file_exists($old_image->$old)) {
-            $old_file = $old_image->$old;
-          } else {
-            $old_file = file_create_path($old_image->$old);
-          }
-          if ($old_file && $old_image->$old != '' && db_num_rows(db_query("SELECT fid FROM {files} WHERE nid=%d and filename='%s'", $old_image->nid, $new)) == 0) {
-            _image_insert($old_image, $new, $old_file);
-          }
-        }
-      }
-    }
-  }
-  return array();
+<?php
+// $Id: image.install,v 1.1.4.3 2007/06/24 20:42:10 drewish Exp $
+
+/**
+ * Installing and updating image.module.
+ */
+
+function image_install() {
+  //Nothing to do.
+}
+
+/**
+ * Update 4.5 to 4.6 or later.
+ */
+function image_update_1() {
+  if (db_table_exists('image')) {
+    if ($result = db_query("SELECT * FROM {image}")) {
+      $fields = array('thumb_path' => 'thumbnail',
+                      'preview_path' => 'preview',
+                      'image_path' => '_original');
+
+      while ($old_image = db_fetch_object($result)) {
+        foreach ($fields as $old => $new) {
+          $old_file = '';
+          if (file_exists($old_image->$old)) {
+            $old_file = $old_image->$old;
+          } else {
+            $old_file = file_create_path($old_image->$old);
+          }
+          if ($old_file && $old_image->$old != '' && db_num_rows(db_query("SELECT fid FROM {files} WHERE nid=%d and filename='%s'", $old_image->nid, $new)) == 0) {
+            _image_insert($old_image, $new, $old_file);
+          }
+        }
+      }
+    }
+  }
+  return array();
 }
 
 /**
@@ -53,3 +53,19 @@
   }
   return array();
 }
+
+/**
+ * Add the link field to each size.
+ */
+function image_update_3() {
+  $sizes = variable_get('image_sizes', FALSE);
+  if ($sizes) {
+    $new_sizes = array();
+    foreach ($sizes as $key => $size) {
+      $size['link'] = 1;
+      $new_sizes[$key] = $size;
+    }
+    variable_set('image_sizes', $new_sizes);
+  }
+  return array();
+}
Index: image.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/image/image.module,v
retrieving revision 1.209.2.29
diff -u -r1.209.2.29 image.module
--- image.module	27 Jun 2007 15:04:16 -0000	1.209.2.29
+++ image.module	29 Jun 2007 00:44:07 -0000
@@ -5,6 +5,10 @@
 define('IMAGE_PREVIEW', 'preview');
 define('IMAGE_THUMBNAIL', 'thumbnail');
 
+define('IMAGE_LINK_HIDDEN', 0);
+define('IMAGE_LINK_SHOWN', 1);
+define('IMAGE_LINK_NEW', 2);
+
 /**
  * Implementation of hook_help
  */
@@ -106,10 +110,22 @@
     '#validate' => array('image_settings_sizes_validate' => array()),
   );
 
-  // Add some empty rows for user defined sizes.
+  $link_options = array(
+    IMAGE_LINK_HIDDEN => t('Hidden'),
+    IMAGE_LINK_SHOWN => t('Same window'),
+    IMAGE_LINK_NEW => t('New window'),
+  );
+  
   $sizes = _image_get_sizes();
+  // Add some empty rows for user defined sizes.
   for ($i = count($sizes); $i < 6; $i++) {
-    $sizes['new'. $i] = array('label' => '', 'width' => '', 'height' => '', 'new' => TRUE);
+    $sizes['new'. $i] = array(
+      'label' => '',
+      'width' => '', 
+      'height' => '', 
+      'link' => IMAGE_LINK_SHOWN, 
+      'new' => TRUE,
+    );
   }
 
   foreach ($sizes as $key => $size) {
@@ -134,6 +150,11 @@
       '#size' => 5,
       '#maxlength' => 5,
     );
+    $form['image_sizes'][$key]['link'] = array(
+      '#type' => 'select',
+      '#default_value' => $size['link'],
+      '#options' => $link_options,
+    );
     $form['image_sizes'][$key]['new'] = array(
       '#type' => 'value',
       '#value' => isset($size['new']) ? $size['new'] : FALSE,
@@ -175,12 +196,13 @@
 }
 
 function theme_image_settings_sizes_form(&$form) {
-  $header = array(t('Label'), t('Width'), t('Height'));
+  $header = array(t('Label'), t('Width'), t('Height'), t('Link'));
   foreach (element_children($form) as $key) {
     $row = array();
     $row[] = drupal_render($form[$key]['label']);
     $row[] = drupal_render($form[$key]['width']);
     $row[] = drupal_render($form[$key]['height']);
+    $row[] = drupal_render($form[$key]['link']);
     $rows[] = $row;
   }
   $output .= theme('table', $header, $rows);
@@ -326,11 +348,27 @@
   if ($type == 'node' && $node->type == 'image' && !$main) {
     $request = ($_GET['size']) ? $_GET['size'] : IMAGE_PREVIEW;
     foreach (_image_get_sizes() as $key => $size) {
-      // For smaller images some derivative images may not have been created.
-      // The thumbnail and preview images will be equal to the original images
-      // but other sizes will not be set.
-      if (isset($node->images[$key]) && $node->images[$key] != $node->images[$request]) {
-        $links['image_size_'. $key] = array('title' => $size['label'], 'href' => 'node/'. $node->nid, 'query' => 'size='. urlencode($key));
+      if ($size['link']) {
+        // For smaller images some derivative images may not have been created.
+        // The thumbnail and preview images will be equal to the original images
+        // but other sizes will not be set.
+        if (isset($node->images[$key]) && $node->images[$key] != $node->images[$request]) {
+          if ($size['link'] == IMAGE_LINK_NEW) {
+            $links['image_size_'. $key] = array(
+              'title' => $size['label'],
+              'href' => 'image/view/'. $node->nid,
+              'attributes' => array('target' => '_blank'),
+              'query' => 'size='. urlencode($key),
+            );
+          }
+          else {            
+            $links['image_size_'. $key] = array(
+              'title' => $size['label'],
+              'href' => 'node/'. $node->nid, 
+              'query' => 'size='. urlencode($key)
+            );
+          }
+        }
       }
     }
     if (!user_access('view original images')) {
@@ -555,8 +593,12 @@
   // regenerate images?
   if ($node->images[$label] != $node->images[IMAGE_ORIGINAL] &&
       (!file_exists(file_create_path($node->images[$label])) ||
-       filemtime(file_create_path($node->images[$label])) < variable_get('image_updated', 0))) {
+       filemtime(file_create_path($node->images[$label])) < variable_get('image_updated', 0))) 
+  {
+    _image_remove_derivatives($node);
     _image_build_derivatives($node);
+    node_save($node);
+    drupal_set_message('The image %title had missing derivative images. The have been regenerated.', array('%title' => $node->title));
   }
 
   if (empty($node->images[$label])) {
@@ -799,9 +841,9 @@
  */
 function _image_get_sizes($size = NULL) {
   $defaults = array(
-    IMAGE_ORIGINAL => array('width' => '', 'height' => '', 'label' => t('Original')),
-    IMAGE_THUMBNAIL => array('width' => 100, 'height' => 100, 'label' => t('Thumbnail')),
-    IMAGE_PREVIEW   => array('width' => 640, 'height' => 640, 'label' => t('Preview')),
+    IMAGE_ORIGINAL => array('width' => '', 'height' => '', 'label' => t('Original'), 'link' => IMAGE_LINK_SHOWN),
+    IMAGE_THUMBNAIL => array('width' => 100, 'height' => 100, 'label' => t('Thumbnail'), 'link' => IMAGE_LINK_SHOWN),
+    IMAGE_PREVIEW   => array('width' => 640, 'height' => 640, 'label' => t('Preview'), 'link' => IMAGE_LINK_SHOWN),
   );
 
   $sizes = array();
