Index: imagecache_customactions.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/imagecache_actions/Attic/imagecache_customactions.module,v
retrieving revision 1.1.2.4.2.1
retrieving revision 1.1.2.4.2.2
diff -u -p -r1.1.2.4.2.1 -r1.1.2.4.2.2
--- imagecache_customactions.module	16 Apr 2010 16:19:19 -0000	1.1.2.4.2.1
+++ imagecache_customactions.module	26 Jul 2010 13:29:19 -0000	1.1.2.4.2.2
@@ -1,5 +1,5 @@
 <?php
-// $Id: imagecache_customactions.module,v 1.1.2.4.2.1 2010/04/16 16:19:19 dman Exp $
+// $Id: imagecache_customactions.module,v 1.1.2.4.2.2 2010/07/26 13:29:19 dman Exp $
 
 /**
  * @file Allow advanced users to code their own PHP image manipulation routines
@@ -54,13 +54,27 @@ function imagecache_customactions_imagec
       'name' => t('Custom action'),
       'description' => t('Runs custom PHP code'),
     ),
+    'imagecache_subroutine' => array(
+      'name' => 'Subroutine',
+      'description' => 'Runs another defined preset on the image.',
+    ),
   );
   return $actions;
 }
 
+/**
+ * Implementation of theme_hook() for imagecache_customactions.module
+ */
+function imagecache_customactions_theme() {
+  return array(
+    'imagecache_subroutine' => array(
+      'arguments' => array('element' => NULL),
+    ),
+  );
+}
+
 
 /**
- * 
  * Implementation of imagecache_hook_form()
  *
  * @param $action array of settings for this action
@@ -141,3 +155,74 @@ function theme_imagecache_customactions(
   $data = $element['#value'];
   return "<em><strong>". $data['text'] ."</strong></em>" ;
 }
+
+
+
+
+/**
+ * Subroutine - an imagecache action that just calls another one.
+ * 
+ * Contributed by Alan D
+ * http://drupal.org/node/618784
+ * 
+ * Reworked into customactions by dman 2010-07
+ */
+
+/**
+ * Config form for this preset.
+ * 
+ * Implementation of imagecache_hook_form()
+ *
+ * @param $action array of settings for this action
+ * @return a form definition
+ */
+function imagecache_subroutine_form($action) {
+  $action = (array)$action;
+  $form = array();
+
+  // List available presets
+  $presets = array();
+  foreach (imagecache_presets(TRUE) as $preset) {
+    $presets[$preset['presetid']] = $preset['presetname'];
+  }
+
+  $form['presetid'] = array(
+    '#type' => 'select',
+    '#title' => t('Preset to call'),
+    '#default_value' => $action['presetid'],
+    '#options' => $presets,
+  );
+
+  return $form;
+}
+
+
+/**
+ * Actually invoke the action - which means just handing off to the named real
+ * preset to do the job.
+ * 
+ * Implementation of hook_image()
+ *
+ * @param $image
+ * @param $action
+ */
+function imagecache_subroutine_image(&$image, $data) {
+  if ($preset = imagecache_preset($data['presetid'])) {
+    foreach ($preset['actions'] as $sub_action) {
+      _imagecache_apply_action($sub_action, $image);
+    }
+  }
+  return TRUE;
+}
+
+
+/**
+ * This lets the user see what parameters were selected for the action
+ */
+function theme_imagecache_subroutine($element) {
+  $data = $element['#value'];
+  if ($preset = imagecache_preset($data['presetid'])) {
+    return t('%name (pid: !presetid)', array('%name' => $preset['presetname'], '!presetid' => $preset['presetid']));
+  }
+  return t('<span class="error">Invalid reference. The referenced preset may have been deleted!</span>');
+}
