From 0cb22ccd99c6aaff77ecb07deb257da4c95793b2 Mon Sep 17 00:00:00 2001
From: Thomas Hansen <thomas@thomas-desktop.(none)>
Date: Mon, 7 Mar 2011 15:25:55 -0700
Subject: [PATCH] Issue #1065458: Fixed required fields issue - third attempt.

---
 multistep.module |   49 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 49 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 multistep.module

diff --git a/multistep.module b/multistep.module
old mode 100644
new mode 100755
index 4b9e707..03ec3e5
--- a/multistep.module
+++ b/multistep.module
@@ -236,6 +236,52 @@ function multistep_block_view($type = '') {
 }
 
 /**
+ * Implements hook_form_alter.
+ */
+function multistep_form_alter(&$form, &$form_state, $form_id) {
+  multistep_fix_required($form);
+}
+
+function multistep_fix_required(&$form) {
+  $multistep_form = false;
+
+  if(isset($form['#fieldgroups'])) {
+    foreach ($form['#fieldgroups'] as $fieldgroup) {
+      if ($fieldgroup->format_type == 'multistep')
+        $multistep_form = TRUE;
+    }
+  }
+
+  if (isset($form['#multistep']['current']) && $multistep_form) {
+    $step = $form['#multistep']['current'];
+
+    foreach ($form['#group_children'] as $field => $group) {
+      while(isset($form['#group_children'][$group])) {
+        $group = $form['#group_children'][$group];
+      }
+
+      if ($group != $step) {
+        if (isset($form[$field]))
+          $form[$field] = _multistep_make_unrequired($form[$field]);
+      }
+    }
+  }
+}
+
+function _multistep_make_unrequired($element) {
+  foreach ($element as $key => $value) {
+    if (is_array($value))
+      $element[$key] = _multistep_make_unrequired($value);
+  }
+
+  if (isset($element['#required'])) {
+    $element['#required'] = 0;
+  }
+
+  return $element;
+}
+
+/**
  * Implements hook_field_group_formatter_info().
  */
 function multistep_field_group_formatter_info() {
@@ -268,6 +314,9 @@ function multistep_field_group_format_summary($group) {
  * Implements hook_field_group_pre_render().
  */
 function multistep_field_group_pre_render(&$element, $group, &$form) {
+  if(!isset($form['#multistep']))
+    return;
+
   $step = $form['#multistep']['current'];
   $access = $group->group_name == $step;
   // Verify if user wants to see all steps at once
-- 
1.7.4.1

