Index: wf_required_fields.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/wf_required_fields/wf_required_fields.inc,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 wf_required_fields.inc
--- wf_required_fields.inc	3 Jan 2008 18:24:38 -0000	1.1.2.2
+++ wf_required_fields.inc	10 Jul 2009 19:55:38 -0000
@@ -31,7 +31,7 @@
  */
 function wf_required_fields_get_types_configured() {
     $settings = variable_get(
-    	'wf_required_fields',
+      'wf_required_fields',
       array('types' => array('config' => array()))
     );
     return $settings['types']['config'];
@@ -130,7 +130,8 @@
     foreach (array_keys($info['columns']) as $column) {
       $field = $node->$field_name;
       if (wf_required_fields_is_required($type, $field_name, $sid)) {
-        $value = $field[0][$column];
+        $first_field_element = array_shift($field);
+        $value = $first_field_element[$column];
         if (!in_array($value, $non_empty, true) && empty($value)) {
           $missing[$field_name] = $all_fields[$field_name]['widget']['label'];
         }
@@ -146,13 +147,25 @@
  * @param array $array The Forms API element
  */
 function wf_required_fields_set_required(&$element) {
-  $element['#required'] = true;
+  foreach (element_children($element) as $key) {
+    if (isset($element[$key]) && $element[$key]) {
+
+      // Recurse through all children elements.
+      wf_required_fields_set_required($element[$key]);
+    }
+  }
+
+  $element['#required'] = '1';
   switch ($element['#type']) {
     case 'select':
       $index = array_search(t('<none>'), $element['#options']);
       if ($index !== false) {
         unset ($element['#options'][$index]);
       }
+      $index2 = array_search('---', $element['#options']);
+      if ($index2 !== false) {
+        unset ($element['#options'][$index2]);
+      }
       break;
 
     case 'radios':
Index: wf_required_fields.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/wf_required_fields/wf_required_fields.info,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 wf_required_fields.info
--- wf_required_fields.info	3 Jan 2008 16:35:27 -0000	1.1.2.1
+++ wf_required_fields.info	4 Jul 2009 00:19:42 -0000
@@ -2,4 +2,6 @@
 name = Workflow required fields
 description = Sets CCK fields to "required" depending on the workflow state of the node
 package = Workflow
-dependencies = content workflow
\ No newline at end of file
+dependencies[] = content
+dependencies[] = workflow
+core = 6.x
\ No newline at end of file
Index: wf_required_fields.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/wf_required_fields/wf_required_fields.module,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 wf_required_fields.module
--- wf_required_fields.module	3 Jan 2008 18:24:38 -0000	1.1.2.1
+++ wf_required_fields.module	10 Jul 2009 19:54:48 -0000
@@ -2,8 +2,7 @@
 
 // $Id: wf_required_fields.module,v 1.1.2.1 2008/01/03 18:24:38 traxer Exp $
 
-require_once(drupal_get_path('module', 'wf_required_fields') . '/wf_required_fields.inc');
-require_once(drupal_get_path('module', 'wf_required_fields') . '/wf_required_fields_table.inc');
+module_load_include('inc', 'wf_required_fields', 'wf_required_fields');
 
 /**
  * Implementation of hook_menu().
@@ -13,20 +12,16 @@
  * @param bool $may_cache Whether cachable menu items are requiested
  * @return array Array of menu items
  */
-function wf_required_fields_menu($may_cache) {
+function wf_required_fields_menu() {
   $items = array();
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'admin/build/wf-required-fields',
-      'title' => t('Workflow Required Fields'),
-      'description' => t('Choose the content types that you want to have state dependant required fields. For each such content type and each state, configure the fields that you want to be required.'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => 'wf_required_fields_settings_form',
-    );
-  }
-  else {
-    // No uncachable items at the moment
-  } 
+  $items['admin/build/wf-required-fields'] = array(
+    'title'              => 'Workflow Required Fields',
+    'description'        => 'Choose the content types that you want to have state dependant required fields. For each such content type and each state, configure the fields that you want to be required.',
+    'page callback'      => 'drupal_get_form',
+    'page arguments'     => array('wf_required_fields_settings_form'),
+    'access callback'    => 'user_access',
+    'access arguments'   => array('administer site configuration'),
+  );
   return $items;
 }
 
@@ -40,29 +35,39 @@
  * @todo Eliminate (or disable) fields that are required on the cck field
  *  configuration page
  */
-function wf_required_fields_form_alter($form_id, &$form) {
-  if ($form['#id'] !== 'node-form') {
+function wf_required_fields_form_alter(&$form, &$form_state, $form_id) {
+  if ($form['#id'] !== 'node-form' || !isset($form['type']) || !isset($form['#node'])) {
     return; // wrong form
   }
-
-  $node = $form['#node'];
-  $type = $node->type;
+  $type = $form['#node']->type;
   $types = wf_required_fields_get_types_configured();
-  if (! isset($types[$type])) {
-    return; // node type is not configured to be handled by this module
+  if (isset($types[$type])) {  
+    $form['#after_build'][] = '_wf_required_fields_after_build';
   }
+  
+}
+
 
+/**
+* Custom after_build callback handler.
+*/
+function _wf_required_fields_after_build($form, &$form_state) {
+  
   $sid = workflow_node_current_state($form['#node']);
+  $type = $form['#node']->type;
   $info = content_types($type);
   $fields_available = $info['fields'];
+  
   foreach (array_keys($fields_available) as $field) {
     if (wf_required_fields_is_required($type, $field, $sid)) {
       $array =& wf_required_fields_find_required($form, $field);
       if ($array !== null) {
+        // drupal_set_message("Setting field $field as required.");
         wf_required_fields_set_required($array);
       }
     }
   }
+  return $form;
 }
 
 /**
@@ -113,52 +118,38 @@
       '#collapsible' => true,
       '#collapsed' => false,
     );
-    $form['wf_required_fields']['settings'][$type]['table'] = array(
-      '#type' => 'wf_required_fields_table',
-      '#header' => array(
-        '#type' => 'wf_required_fields_header',
-        0 => array(
-          '#type' => 'wf_required_fields_cell',
-          0 => array(
-            '#value' => t('Field') . '\\' . t('State'),
-          )
-        ),
-      ),
-    );
-    $cols = array();
+    $table_header = '<thead><th>'. t('Field') . '\\' . t('State') . '</th>';
     foreach ($states as $sid => $sname) {
-      $form['wf_required_fields']['settings'][$type]['table']['#header'][$sid] = array(
-        '#type' => 'wf_required_fields_cell',
-        0 => array(
-          '#value' => $sname,
-        )
-      );
-      $cols[] = $sid;
+      $table_header .= "<th>$sname</th>";
     }
+    $table_header .= '</thead>';
+    drupal_add_js('misc/tableheader.js');
+    $form['wf_required_fields']['settings'][$type]['table'] = array(
+      '#prefix' => '<table class=sticky-enabled><tbody>',
+      '#value' => $table_header,
+      '#suffix' => '</tbody></table>'
+    );
     $info = content_types($type);
+    ksort($info['fields']);
+    $row = 0;
     foreach ($info['fields'] as $field => $field_info) {
       $form['wf_required_fields']['settings'][$type]['table'][$field] = array(
-        '#type' => 'wf_required_fields_row',
-        0 => array(
-          '#type' => 'wf_required_fields_cell',
-          '#head' => true,
-          0 => array(
-            '#value' => $field_info['widget']['label'],
-          ),
-        ),
+        '#prefix' => '<tr class="' . (($row = 1 - $row) ? 'even' : 'odd'). '">',
+        '#value' => '<td>' . $field_info['widget']['label'] . ($field_info['required'] ? '<br><em>' . t('Already marked required in its !link', array('!link' => l('global settings', "admin/content/node-type/$type/fields/". $field_info['field_name']))) : ''),
+        '#suffix' => '</tr>',
       );
-      foreach ($cols as $sid) {
-        $form['wf_required_fields']['settings'][$type]['table'][$field][$sid] = array(
-          '#type' => 'wf_required_fields_cell',
-          'required' => array(
-            '#type' => 'checkbox',
-            '#default_value' => wf_required_fields_is_required($type, $field, $sid),
-          ), 
+      foreach ($states as $sid => $sname) {
+        $form['wf_required_fields']['settings'][$type]['table'][$field][$sid]['required'] = array(
+          '#prefix' => '<td>',
+          '#suffix' => '</td>',
+          '#type' => 'checkbox',
+          '#title' => '',
+          '#default_value' => wf_required_fields_is_required($type, $field, $sid),
+          '#disabled' => $field_info['required'],
         );
       }      
     }
   }
-
   return system_settings_form($form);  
 }
 
@@ -186,7 +177,7 @@
         $state = workflow_get_state($new_sid);
         $list = '<ul>';
         foreach ($missing as $value) {
-          $list .= '<li>' . check_plain($value) . '</li>';
+          $list .= '<li>' . check_plain(t($value)) . '</li>';
         }
         $list .= '</ul>';
         drupal_set_message(

