Index: patterns.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/patterns/patterns.module,v
retrieving revision 1.1.2.2.2.89
diff -u -r1.1.2.2.2.89 patterns.module
--- patterns.module	21 Apr 2010 15:12:08 -0000	1.1.2.2.2.89
+++ patterns.module	4 May 2010 20:53:57 -0000
@@ -2095,28 +2095,23 @@
 }
 
 function patterns_form_helper($form, $form_state) {
-  static $form_id;
-
-  if (!$form_id && $form_state['submitted'] && !form_get_errors()) {
-    $form_id = $form_state['values']['form_id'];
-    $_SESSION['patterns_form_helper'] = array('form_id' => $form_id, 'form_values' => $form_state['values']);
-  }
-
+  $form_id = $form_state['values']['form_id'];
+  require_once('form_helper.inc');
+  //dpm($form);
+ // dpm($form_state);
+  //if ($form_state['submitted'] && !form_get_errors()) {
+    $_SESSION['patterns_form_helper'][$form_id]['form_state'] = $form_state;
+    $_SESSION['patterns_form_helper'][$form_id]['form'] = $form;
+    $_SESSION['patterns_form_helper'][$form_id]['pattern'] =
+      _patterns_generate_form_pattern_template($form, $form_state, $form_id);
+ // }
   return $form;
 }
 
-function patterns_exit($destination = null) {
-  $batch =& batch_get();
-  if (variable_get('patterns_form_helper', FALSE) && $_SESSION['patterns_form_helper'] && !$destination && empty($batch)) {
-    if (module_exists('devel')) {
-      //dpm($_SESSION['patterns_form_helper']);
-      kprint_r($_SESSION['patterns_form_helper']);
-    }
-    else {
-      print theme('patterns_form_helper', $_SESSION['patterns_form_helper']['form_id'], $_SESSION['patterns_form_helper']['form_values']);
-    }
 
-  }
+function patterns_exit($destination = null) {
+  require_once('form_helper.inc');
+  patterns_exit_form_helper($destination);
 }
 
 /**
--- form_helper.inc
+++ form_helper.inc
@@ -0,0 +1,127 @@
+<?php
+
+
+/**
+ * output data in form helper buffer
+ *
+ **/
+
+
+function patterns_exit_form_helper($destination = null) {
+  $batch =& batch_get();
+  if ($destination  || !is_array($_SESSION['patterns_form_helper']) ) return;
+   foreach( $_SESSION['patterns_form_helper'] as $form_id => $form_data) {
+    if (is_array($_SESSION['patterns_form_helper']) && variable_get('patterns_form_helper', FALSE) && !$destination && empty($batch)) {
+     if ($form_data['pattern']) {
+       $pattern = $form_data['pattern'];
+       unset($form_data['pattern']);
+     }
+      print "<h2>Patterns Form Helper  (form_id = $form_id)</h2>";
+      if (module_exists('devel')) {
+        kprint_r($form_data);
+      }
+      else {
+        print theme('patterns_form_helper', $form_id , $form_data);
+      }
+      
+     print '<form><textarea cols="50" rows="10" name="google_cse_results_prefix" id="edit-google-cse-results-prefix"  class="form-textarea resizable">' .
+       $pattern . '</textarea></form>';
+       
+    }
+  }
+  
+  unset($_SESSION['patterns_form_helper']);
+
+}
+  
+function _patterns_generate_form_pattern_template(&$form, &$form_state, $form_id) {
+
+  $form_action = "<form>\n<form_id>$form_id</form_id>\n";
+  foreach ($form as $field_name => $field) {
+    
+    if (!is_array($field)) {continue;}
+    if ($field['#type'] == 'fieldset') {
+      foreach ($field as $sub_field_name => $sub_field) {
+         $form_action .= _patterns_block_form_parse_field($sub_field_name, $sub_field); 
+      }
+    } else {
+      $form_action .= _patterns_block_form_parse_field($field_name, $field); 
+    }
+    
+  }
+  $form_action .= "</form>";
+  
+  return patterns_generate_template(array($form_action), array());
+   
+
+}
+
+function _patterns_block_form_parse_field($field_name, $field) {
+  $form_action = "";
+  $ignore_fields = array("advanced","buttons","form_build_id","form_token","form_id");
+  if (substr($field_name, 0, 1) != '#' && !in_array($field_name, $ignore_fields)) {
+ 
+      $form_action .= '<!-- ' . $field['#title'] . "\n" .
+       $field['#description'];
+      
+      if (is_array($field['#options'])) {
+        $form_action .= "\nOPTIONS:";
+        foreach ($field['#options'] as $value => $name) {
+         // dpm($item);
+          $form_action .= "$value ( $name ), ";
+        }
+        $form_action .= "-->\n";
+        
+      }
+      $form_action .= "-->\n";
+      $show_value = "";
+      if (is_array($field['#default_value']) ) {
+        foreach ($field['#default_value'] as $key => $value) {
+          $show_value .= "<$key>$value</$key>\n";
+        }
+      } else {
+        $show_value = $field['#default_value'];
+      }
+      $form_action .= "<$field_name>$show_value</$field_name>\n\n";
+      
+    }
+  return $form_action;
+  
+}
+
+function patterns_generate_template($actions, $required_modules) {
+
+  foreach ($required_modules as $name => $use) {
+    if ($use) {
+      $modules[] = $name;
+      }
+  }
+  
+  if (count($modules) > 0) {
+    $modules_xml = "\n  <modules>\n    <module>". join("</module>\n    <module>", $modules) ."</module>\n  </modules>\n";
+  }
+  $actions_xml = join("\n", $actions);
+    return   <<<EOF
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<pattern>
+  <info>
+    <title></title>
+    <description></description>
+    <author></author>
+    <author_email></author_email>
+    <version></version>
+    <category></category>
+    <core>6.x</core>    
+  </info>
+$modules_xml 
+  <actions>
+
+$actions_xml
+  </actions>
+</pattern>
+EOF;
+
+}
+
+
+


