? node-gallery-manage-images-recursive-fields.patch
@@ -395,7 +395,7 @@ function node_gallery_cache_image_lists(
   if (isset($message)) {
     watchdog('node_gallery', $message);
     drupal_set_message($message, 'warning');
-    $sql = db_query("SELECT ngi.nid FROM {node_gallery_images} ngi JOIN {node} n on ngi.nid = n.nid WHERE n.status = 1 AND gid = %d ORDER BY weight ASC, created DESC", $gid);
+    $sql = "SELECT ngi.nid FROM {node_gallery_images} ngi JOIN {node} n on ngi.nid = n.nid WHERE n.status = 1 AND gid = %d ORDER BY weight ASC, created DESC";
   }
   // Fetch it
   $result = db_query($sql, $gid);
Index: node_gallery.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/node_gallery/node_gallery.pages.inc,v
retrieving revision 1.12.2.50
diff -u -p -r1.12.2.50 node_gallery.pages.inc
--- node_gallery.pages.inc	13 Nov 2010 19:39:38 -0000	1.12.2.50
+++ node_gallery.pages.inc	14 Nov 2010 12:11:57 -0000
@@ -115,16 +115,15 @@ function node_gallery_upload_image_form_
  */
 function node_gallery_manage_images_form($form_state, $gallery) {
   global $pager_page_array, $pager_total;
-  
+  $relationship = node_gallery_get_relationship($gallery->type);
+
+  // we must set these globals, because we do not call pager_query.
   $element = 0;
-  
   $pager_page_array = (isset($_GET['page']) ? explode(',', $_GET['page']) : array());
-  
   if (empty($pager_page_array[$element])) {
     $pager_page_array[$element] = 0;
   }
-  
-  $relationship = node_gallery_get_relationship($gallery->type);
+  $items_per_page = $relationship['settings']['manage_images_per_page'];
   
   drupal_set_breadcrumb(array(
     l(t('Home'), NULL),
@@ -147,7 +146,7 @@ function node_gallery_manage_images_form
     }
   }
   
-  $form['#description'] = t('Hello, world.');
+  $form['#description'] = t('Manage Images form.');
   $form['#thumb_imagecache'] = 'node-gallery-admin-thumbnail';
   $form['#gallery'] = $gallery;
    
@@ -158,7 +157,7 @@ function node_gallery_manage_images_form
   }
   else {
     $images = node_gallery_get_all_image_nids($gallery, TRUE);
-    $chunks = array_chunk($images, variable_get('node_gallery_manage_images_per_page', 20));
+    $chunks = array_chunk($images, $items_per_page);
     $images = $chunks[$pager_page_array[$element]];
   }
   $pager_total[$element] = count($chunks);
@@ -192,13 +191,11 @@ function node_gallery_manage_images_form
     '#default_value' => $cover_nid,
     '#options' => $options,
   );
-  
-  // @todo: Would using a pager here benefit anything?  If so, does it break the sort order still?
-  /* Using the pager appears to break the order of images
-  */
+
   $form['pager'] = array(
-    '#value' => theme('pager', NULL, variable_get('node_gallery_manage_images_per_page', 20), $element),
+    '#value' => theme('pager', NULL, $items_per_page, $element),
   );
+
   $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Save'),
@@ -210,11 +207,34 @@ function node_gallery_manage_images_form
   return $form;
 }
 
+/**
+ * Reduces a nested array to the key => value pairs deepest in the hierarchy.
+ *
+ * @param array $form_item 
+ * @param array $flattened
+ * @return Flattened array.
+ */
+function node_gallery_manage_images_flatten($form_item, &$flattened = array()) {
+  if (empty($form_item) || !is_array($form_item)) {
+    return $form_item;
+  }
+  foreach ($form_item as $key => $element) {
+    if (is_array($element)) {
+      node_gallery_manage_images_flatten($element, $flattened);
+    } else {
+      $flattened[$key] = $element;
+    }
+  }
+  return $flattened;
+}
+
 function node_gallery_manage_images_validate($form, &$form_state) {
   if (!empty($form_state['values']['images'])) {
+    $form_state['flattened_values'] = array();
     foreach ($form_state['values']['images'] as $nid => $image_form_state) {
-      node_validate($image_form_state['edit_form'], $form['images'][$nid]['edit_form']);
-    }    
+      $form_state['flattened_values'][$nid] = node_gallery_manage_images_flatten($image_form_state);
+      node_validate($form_state['flattened_values'][$nid], $form['images'][$nid]['edit_form']);
+    }
   }
 }
 
@@ -240,16 +260,8 @@ function node_gallery_manage_images_subm
     node_gallery_set_gallery_cover_image($image);
   }
   
-  if (!isset($form_state['values']['images'])) {
-    $form_state['values']['images'] = array();
-  }
-  foreach ($form_state['values']['images'] as $nid => $form_values) {
-    dpm($form_values['edit_form']);
-    
-    $image_node = $form_values['edit_form'];
-    unset($form_values['edit_form']);
-    $image_node = (object)array_merge($image_node, $form_values);
-    
+  foreach ($form_state['flattened_values'] as $nid => $form_values) {
+    $image_node = (object)$form_values;
     if ($form_values['remove']) {
       $op_images['delete'][] = $image_node->nid;
     }
@@ -259,7 +271,6 @@ function node_gallery_manage_images_subm
       }
     }
   }
-  
   while (!empty($op_images['update'])) {
     $node = array_shift($op_images['update']);
     $operations[] = array('node_gallery_batch_node_save', array($node));
