### Eclipse Workspace Patch 1.0
#P uc_donation
Index: uc_donate/uc_donate.install
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_donation/uc_donate/uc_donate.install,v
retrieving revision 1.1
diff -u -r1.1 uc_donate.install
--- uc_donate/uc_donate.install	2 May 2008 00:36:05 -0000	1.1
+++ uc_donate/uc_donate.install	3 Jan 2009 03:42:18 -0000
@@ -2,31 +2,72 @@
 // $Id: uc_donate.install,v 1.1 2008/05/02 00:36:05 greenskin Exp $
 
 /**
+ * @file
+ * Database installation, uninstallation, and updates for the donate module.
+ */
+
+/**
+ * Implementation of hook_schema().
+ */
+function uc_donate_schema() {
+  $schema['uc_donate'] = array(
+    'description' => t('TODO'),
+    'fields' => array(
+      'id' => array(
+        'description' => t('TODO'),
+        'type' => 'serial',
+        'unsigned' => 1,
+        'not null' => TRUE,
+      ),
+      'nid' => array(
+        'description' => t('TODO'),
+        'type' => 'int',
+        'unsigned' => 1,
+        'not null' => TRUE,
+      ),
+      'group' => array(
+        'description' => t('TODO'),
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => FALSE,
+      ),
+      'weight' => array(
+        'description' => t('TODO'),
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'type' => array(
+        'description' => t('TODO'),
+        'type' => 'varchar', // 'enum(\'donation\', \'group\', \'queue\')', // enum not supported by schema api
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => 'donation',
+      ),
+    ),
+    'primary key' => array('id'),
+  );
+
+  return $schema;
+}
+
+/**
  * Implementation of hook_install
  */
 function uc_donate_install() {
-  switch ($GLOBALS['db_type']) {
-    case 'mysqli':
-    case 'mysql':
-      db_query("CREATE TABLE IF NOT EXISTS {uc_donate} (
-        `id` int(10) unsigned NOT NULL auto_increment,
-        `nid` int(10) unsigned NOT NULL,
-        `group` varchar(128) NULL,
-        `weight` int(10) NULL default '0',
-        `type` enum('donation', 'group', 'queue') NOT NULL default 'donation',
-        PRIMARY KEY (id)
-      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
-    break;
-  }
+  // Create tables.
+  drupal_install_schema('uc_donate');
 }
 
 /**
  * Implementation of hook_uninstall
  */
 function uc_donate_uninstall() {
-  db_query("DROP TABLE {uc_donate}");
+  // Remove tables.
+  drupal_uninstall_schema('uc_donate');
+
   $variables = db_query("SELECT name FROM {variable} WHERE name LIKE 'uc_donate%%'");
   while ($variable = db_fetch_object($variables)) {
     variable_del($variable->name);
   }
-}
\ No newline at end of file
+}
Index: uc_donate/uc_donate.info
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_donation/uc_donate/uc_donate.info,v
retrieving revision 1.1
diff -u -r1.1 uc_donate.info
--- uc_donate/uc_donate.info	2 May 2008 00:36:05 -0000	1.1
+++ uc_donate/uc_donate.info	3 Jan 2009 03:42:18 -0000
@@ -1,5 +1,14 @@
 ; $Id: uc_donate.info,v 1.1 2008/05/02 00:36:05 greenskin Exp $
 name = "Donate"
 description = "Provides a page with donation products."
-dependencies = uc_store uc_donation
-package = Ubercart - extra
\ No newline at end of file
+dependencies[] = uc_store
+dependencies[] = uc_donation
+package = Ubercart - extra
+core = 6.x
+
Index: uc_donate/uc_donate.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_donation/uc_donate/uc_donate.module,v
retrieving revision 1.2
diff -u -r1.2 uc_donate.module
--- uc_donate/uc_donate.module	2 May 2008 00:56:39 -0000	1.2
+++ uc_donate/uc_donate.module	3 Jan 2009 03:42:18 -0000
@@ -2,6 +2,7 @@
 // $Id: uc_donate.module,v 1.2 2008/05/02 00:56:39 greenskin Exp $
 
 /**
+ * @file
  * @uc_donate.module
  * Provides a page with donation products.
  *
@@ -22,9 +23,28 @@
 /*******************************************************************************
  * Hook Functions (Drupal)
  ******************************************************************************/
+/**
+ * Implementation of hook_theme().
+ */
+function uc_donate_theme() {
+  return array(
+    'uc_donate_form' => array(
+      'file' => 'uc_donate.module',
+      'arguments' => array(
+        'form' => NULL,
+      ),
+    ),
+    'uc_donate_featured_desc' => array(
+      'file' => 'uc_donate.module',
+      'arguments' => array(
+        'form' => NULL,
+      ),
+    ),
+  );
+}
 
-function uc_donate_help($section) {
-  switch ($section) {
+function uc_donate_help($path, $arg) {
+  switch ($path) {
     case 'admin/help#uc_donate':
       return '<p>'. t('Add donation products to a single page where users can add amounts for several different donations at once and then add them all to the cart.') .'</p>';
     case 'admin/store/settings/donate/manage/queue':
@@ -32,77 +52,76 @@
   }
 }
 
-function uc_donate_menu($may_cache) {
+function uc_donate_menu() {
   $items = array();
-  if ($may_cache) {
-    $items[] = array(
-      'path' => 'give/donate',
-      'title' => variable_get('uc_donate_title', t('Make a Gift')),
-      'callback' => 'uc_donate',
-      'access' => user_access('access content')
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate',
-      'title' => t('Donate Page'),
-      'callback' => 'uc_donate_general',
-      'type' => MENU_NORMAL_ITEM
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate/general',
-      'title' => t('General'),
-      'description' => t('Set general settings for the donate page.'),
-      'type' => MENU_DEFAULT_LOCAL_TASK
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate/manage',
-      'title' => t('Manage Donate Products'),
-      'description' => t('Add, remove, and arrange donation products to the donate page.'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => 'uc_donate_manage',
-      'type' => MENU_LOCAL_TASK
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate/manage/overview',
-      'title' => t('Manage'),
-      'type' => MENU_DEFAULT_LOCAL_TASK,
-      'weight' => -10
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate/manage/add',
-      'title' => t('Add Donation'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => 'uc_donate_add',
-      'type' => MENU_LOCAL_TASK,
-      'weight' => -5
-    );
-    $items[] = array(
-      'path' => 'admin/store/settings/donate/manage/group',
-      'title' => t('Add Group'),
-      'callback' => 'drupal_get_form',
-      'callback arguments' => 'uc_donate_add_group',
+
+  $items['give/donate'] = array(
+    'title' => variable_get('uc_donate_title', 'Make a Gift'),
+    'page callback' => 'uc_donate',
+    'access arguments' => array('access content'),
+  );
+  $items['admin/store/settings/donate'] = array(
+    'title' => 'Donate Page',
+    'page callback' => 'uc_donate_general',
+    'access arguments' => array('administer store'),
+    'type' => MENU_NORMAL_ITEM,
+  );
+  $items['admin/store/settings/donate/general'] = array(
+    'title' => 'General',
+    'description' => 'Set general settings for the donate page.',
+    'access arguments' => array('administer store'),
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+  );
+  $items['admin/store/settings/donate/manage'] = array(
+    'title' => 'Manage Donate Products',
+    'description' => 'Add, remove, and arrange donation products to the donate page.',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('uc_donate_manage'),
+    'access arguments' => array('administer store'),
+    'type' => MENU_LOCAL_TASK,
+  );
+  $items['admin/store/settings/donate/manage/overview'] = array(
+    'title' => 'Manage',
+    'access arguments' => array('administer store'),
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10,
+  );
+  $items['admin/store/settings/donate/manage/add'] = array(
+    'title' => 'Add Donation',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('uc_donate_add'),
+    'access arguments' => array('administer store'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => -5,
+  );
+  $items['admin/store/settings/donate/manage/group'] = array(
+    'title' => 'Add Group',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('uc_donate_add_group'),
+    'access arguments' => array('administer store'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => -5,
+  );
+  if (module_exists('nodequeue')) {
+    $items['admin/store/settings/donate/manage/queue'] = array(
+      'title' => 'Add Node Queue',
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('uc_donate_add_queue'),
+      'access arguments' => array('administer store'),
       'type' => MENU_LOCAL_TASK,
-      'weight' => -5
+      'weight' => -5,
     );
-    if (module_exists('nodequeue')) {
-      $items[] = array(
-        'path' => 'admin/store/settings/donate/manage/queue',
-        'title' => t('Add Node Queue'),
-        'callback' => 'drupal_get_form',
-        'callback arguments' => 'uc_donate_add_queue',
-        'type' => MENU_LOCAL_TASK,
-        'weight' => -5
-      );
-    }
   }
+
   return $items;
 }
 
 /**
  * Implementation of hook_form_alter().
  */
-function uc_donate_form_alter($form_id, &$form) {
+function uc_donate_form_alter(&$form, &$form_state, $form_id) {
   if ($form_id == 'uc_cart_checkout_form' && module_exists('nodequeue')) {
-    $form['#validate']['uc_donate_cart_checkout_form_validate'] = array();
+    $form['#validate'][] = 'uc_donate_cart_checkout_form_validate';
   }
 }
 
@@ -215,7 +234,7 @@
   return drupal_get_form('uc_donate_settings');
 }
 
-function uc_donate_settings() {
+function uc_donate_settings(&$form_state) {
   $form['uc_donate_title'] = array(
     '#type' => 'textfield',
     '#title' => t('Title'),
@@ -398,8 +417,8 @@
   return $form;
 }
 
-function uc_donate_manage_submit($form_id, $form_values) {
-  foreach ($form_values as $element => $value) {
+function uc_donate_manage_submit($form, &$form_state) {
+  foreach ($form_state['values'] as $element => $value) {
     if ($element != 'op' && $element != 'save' && $element != 'form_token' && $element != 'form_id') {
       list($type, $id) = split('\|', $element);
       $id = str_replace('_', ' ', $id);
@@ -431,12 +450,12 @@
     }
   }
   
-  $op = $form_values['op'];
-  if ($op != $form_values['save']) {
+  $op = $form_state['values']['op'];
+  if ($op != $form_state['values']['save']) {
     if (preg_match('/^Delete /', $op)) {
       $group = str_replace('Delete ', '', $op);
       db_query("DELETE FROM {uc_donate} WHERE `group` = '%s' AND type = '%s'", $group, 'group');
-      db_query("UPDATE {uc_donate} SET `group` = NULL WHERE `group` = '%s' AND type != '%s'", $group, 'group');
+      db_query("UPDATE {uc_donate} SET `group` = NULL WHERE `group` = '%s' AND type <> '%s'", $group, 'group');
     } else if (preg_match('/^Remove /', $op)) {
       if (preg_match('/ \(Node Queue\)$/', $op)) {
         $title = str_replace('Remove ', '', $op);
@@ -486,13 +505,13 @@
   return $form;
 }
 
-function uc_donate_add_submit($form_id, $form_values) {
-  if (db_query("INSERT INTO {uc_donate} (nid,type) VALUES (%d,'%s')", $form_values['donation'], 'donation')) {
+function uc_donate_add_submit($form, &$form_state) {
+  if (db_query("INSERT INTO {uc_donate} (nid,type) VALUES (%d,'%s')", $form_state['values']['donation'], 'donation')) {
     drupal_set_message(t('Donation successfully added to donate page.'));
   } else {
     drupal_set_message(t('There was a problem adding the donation product to the donate page.'), 'error');
   }
-  return 'admin/store/settings/donate/manage';
+  $form_state['redirect'] = 'admin/store/settings/donate/manage';
 }
 
 function uc_donate_add_group() {
@@ -508,9 +527,9 @@
   return $form;
 }
 
-function uc_donate_add_group_submit($form_id, $form_values) {
-  db_query("INSERT INTO {uc_donate} (`group`, type) VALUES ('%s', '%s')", $form_values['title'], 'group');
-  return 'admin/store/settings/donate/manage';
+function uc_donate_add_group_submit($form, &$form_state) {
+  db_query("INSERT INTO {uc_donate} (`group`, type) VALUES ('%s', '%s')", $form_state['values']['title'], 'group');
+  $form_state['redirect'] = 'admin/store/settings/donate/manage';
 }
 
 function uc_donate_add_queue() {
@@ -537,15 +556,15 @@
   return $form;
 }
 
-function uc_donate_add_queue_submit($form_id, $form_values) {
-  if (isset($form_values['queues'])) {
-    db_query("DELETE FROM {uc_donate} WHERE `group` = '%s'", $form_values['queues']);
-    db_query("INSERT INTO {uc_donate} (nid, type) VALUES ('%s', '%s')", $form_values['queues'], 'queue');
+function uc_donate_add_queue_submit($form, &$form_state) {
+  if (isset($form_state['values']['queues'])) {
+    db_query("DELETE FROM {uc_donate} WHERE `group` = '%s'", $form_state['values']['queues']);
+    db_query("INSERT INTO {uc_donate} (nid, type) VALUES ('%s', '%s')", $form_state['values']['queues'], 'queue');
   }
-  return 'admin/store/settings/donate/manage';
+  $form_state['redirect'] = 'admin/store/settings/donate/manage';
 }
 
-function uc_donate_form($items) {
+function uc_donate_form(&$form_state, $items) {
   foreach ($items as $group) {
     if (is_array($group)) {
       foreach ($group as $item) {
@@ -632,9 +651,9 @@
   }
 }
 
-function uc_donate_form_validate($form_id, $form_values) {
+function uc_donate_form_validate($form, &$form_state) {
   $cid = uc_cart_get_id();
-  foreach ($form_values as $k => $v) {
+  foreach ($form_state['values'] as $k => $v) {
     if (preg_match('/^donate[0-9]*$/', $k)) {
       if (!is_numeric($v) && !empty($v)) {
         form_set_error($k, t('Amount value has to be a number.'));
@@ -643,30 +662,33 @@
   }
 }
 
-function uc_donate_form_submit($form_id, $form_values) {
-  foreach ($form_values as $k => $v) {
+function uc_donate_form_submit($form, &$form_state) {
+  foreach ($form_state['values'] as $k => $v) {
     if (preg_match('/^donate[0-9]*$/', $k)) {
       if (!empty($v) && intval($v) > 0) {
         $nid = str_replace('donate', '', $k);
-        $form_values['nid'] = $nid;
-        uc_cart_add_item($nid, 1, module_invoke_all('add_to_cart_data', $form_values, $k));
+        $form_state['values']['nid'] = $nid;
+        uc_cart_add_item($nid, 1, module_invoke_all('add_to_cart_data', $form_state['values'], $k));
       }
     }
   }
-  if ($form_values['op'] == $form_values['add']) {
-    return 'cart';
-  } else {
+  if ($form_state['values']['op'] == $form_state['values']['add']) {
+    $form_state['redirect'] = 'cart';
+  }
+  else {
     if (!variable_get('uc_checkout_enabled', TRUE)) {
-      return 'cart';
+      $form_state['redirect'] = 'cart';
     }
     if (module_exists('uc_jscheck')) {
-      if ($form_values['checker'] == '1') {
-        return 'cart/checkout';
-      } else {
-        return 'cart/checker';
+      if ($form_state['values']['checker'] == '1') {
+        $form_state['redirect'] = 'cart/checkout';
       }
-    } else {
-      return 'cart/checkout';
+      else {
+        $form_state['redirect'] = 'cart/checker';
+      }
+    }
+    else {
+      $form_state['redirect'] = 'cart/checkout';
     }
   }
 }
@@ -717,7 +739,7 @@
   return $donate;
 }
 
-function uc_checkout_pane_donate($op, &$arg1, $arg2) {
+function uc_checkout_pane_donate(&$form_state, $op, &$arg1, $arg2) {
   switch ($op) {
     case 'view':
       $cid = uc_cart_get_id();
@@ -761,23 +783,23 @@
   }
 }
 
-function uc_donate_cart_checkout_form_validate($form_id, $form_values) {
-  if (!empty($form_values['panes']['donate']) && is_array($form_values['panes']['donate'])) {
+function uc_donate_cart_checkout_form_validate($form, &$form_state) {
+  if (!empty($form_state['values']['panes']['donate']) && is_array($form_state['values']['panes']['donate'])) {
     $order_id = $_SESSION['cart_order'];
     $order = uc_order_load($order_id);
-    foreach ($form_values['panes']['donate'] as $k => $amount) {
+    foreach ($form_state['values']['panes']['donate'] as $k => $amount) {
       if ($amount > 0) {
         $cid = uc_cart_get_id();
         $nid = str_replace('uc_donate_featured_amount', '', $k);
         $node = node_load($nid);
-        $form = drupal_retrieve_form('uc_donation_add_to_cart_form_'.$nid, $node);
-        $form_values = array();
+        $form = drupal_retrieve_form('uc_product_add_to_cart_form_'. $nid, $node, $form_state);
+        $form_state['values'] = array();
         foreach ($form as $key => $value) {
           if (!preg_match('/^#/', $key)) {
-            $form_values[$key] = isset($value['#value']) ? $value['#value'] : $value['#default_value'];
+            $form_state['values'][$key] = isset($value['#value']) ? $value['#value'] : $value['#default_value'];
           }
         }
-        $node->data = module_invoke_all('add_to_cart_data', $form_values);
+        $node->data = module_invoke_all('add_to_cart_data', $form_state['values']);
         $node->data['amount'] = $amount;
         $node->price = $amount;
         $node->qty = 1;
Index: uc_donation.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/uc_donation/uc_donation.module,v
retrieving revision 1.2.4.6
diff -u -r1.2.4.6 uc_donation.module
--- uc_donation.module	19 Dec 2008 18:59:15 -0000	1.2.4.6
+++ uc_donation.module	3 Jan 2009 03:42:18 -0000
@@ -103,7 +103,11 @@
         '#weight' => 10
       );
       $form['#validate'][] = 'uc_donation_add_to_cart_form_validate';
-      $form['#submit'][] = 'uc_donation_add_to_cart_form_submit';
+      // This submit handler does the default ubercart action.
+      // When both handlers are called the donation quantity is doubled.
+      // Either omit this or override the default one from ubercart by using the second line below.
+//      $form['#submit'][] = 'uc_donation_add_to_cart_form_submit'; 
+//      $form['#submit'] = array('uc_donation_add_to_cart_form_submit'); 
     }
   }
   if ($form_id == 'uc_cart_view_form') {
@@ -125,11 +129,14 @@
   }
 }
 
-function uc_donation_forms(){
-  $donations = db_query("SELECT DISTINCT nid FROM {node} WHERE type = '%s'",'donation');
+function uc_donation_forms($form_id, $args){
+  $forms = array();
+  if (substr($form_id, 0, 27) == 'uc_product_add_to_cart_form') {
+    $donations = db_query("SELECT DISTINCT nid FROM {node} WHERE type = '%s'", 'donation');
 
-  while ($donation = db_fetch_object($donations)) {
-    $forms['uc_donation_add_to_cart_form_'. $donation->nid] = array('callback' => 'uc_product_add_to_cart_form');
+    while ($donation = db_fetch_object($donations)) {
+      $forms['uc_product_add_to_cart_form_'. $donation->nid] = array('callback' => 'uc_product_add_to_cart_form');
+    }
   }
 
   return $forms;
@@ -308,7 +315,7 @@
     '#weight' => 30
   );
   
-  $form['#validate']['uc_product_validate'] = array();
+  $form['#validate'][] = 'uc_product_validate';
   
   return $form;
 }
@@ -463,7 +470,7 @@
 }
 
 function uc_donation_add_to_cart_form_submit($form, &$form_state){
-  return uc_cart_add_item($form_state['values']['nid'], 1,  module_invoke_all('add_to_cart_data', $form_state['values']));
+  $form_state['redirect'] = uc_cart_add_item($form_state['values']['nid'], 1,  module_invoke_all('add_to_cart_data', $form_state['values']));
 }
 
 function uc_donation_cart_view_validate($form, &$form_state) {
@@ -687,7 +694,7 @@
     $rows[] = array(array('data' => t('No products found'), 'colspan' => count($header)));
   }
   $output .= theme('table', $header, $rows, array('width' => '100%', 'class' => 'uc-sales-table'));
-  $output .= "<small>*".t('Make sure %setting_name is set to %state in the ',array('%setting_name' => 'count content views', '%state' => 'enabled')).l(t('access log settings page'),'admin/logs/settings').t(' to enable views column.')."</small>";
+  $output .= "<small>*".t('Make sure %setting_name is set to %state in the ',array('%setting_name' => 'count content views', '%state' => 'enabled')).l(t('access log settings page'),'admin/reports/settings').t(' to enable views column.')."</small>";
   $output .= theme_pager(NULL, variable_get('uc_reports_table_size',30));
   
   return $output;
