? 45248_signup_seats_4.patch
Index: signup.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.install,v
retrieving revision 1.24.2.2
diff -u -p -r1.24.2.2 signup.install
--- signup.install	19 Dec 2008 01:00:35 -0000	1.24.2.2
+++ signup.install	21 Dec 2008 15:55:39 -0000
@@ -109,6 +109,13 @@ function signup_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
+      'seats' => array(
+        'description' => t('Total number of seats to reserve.'),
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+      ),
       'signup_time' => array(
         'description' => t('Integer timestamp of when the user signed up for the node.'),
         'type' => 'int',
@@ -125,7 +132,9 @@ function signup_schema() {
       'attended' => array(
         'description' => t('Did this user actually attend the node they signed up for?'),
         'type' => 'int',
-        'size' => 'tiny',
+        'unsigned' => TRUE,
+        'not null' => FALSE,
+        'default' => NULL,
       ),
     ),
     'primary key' => array('sid'),
Index: signup.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.module,v
retrieving revision 1.205.2.6
diff -u -p -r1.205.2.6 signup.module
--- signup.module	20 Dec 2008 06:31:27 -0000	1.205.2.6
+++ signup.module	21 Dec 2008 15:55:40 -0000
@@ -696,7 +696,7 @@ function signup_nodeapi(&$node, $op, $te
         $node->signup_close_signup_limit = $signup->close_signup_limit;
         $node->signup_status = $signup->status;
         if ($node->nid) {
-          $node->signup_total = db_result(db_query("SELECT COUNT(*) FROM {signup_log} WHERE nid = %d", $node->nid));
+          $node->signup_total = db_result(db_query("SELECT SUM(seats) FROM {signup_log} WHERE nid = %d", $node->nid));
         }
       }
       else {
@@ -786,7 +786,7 @@ function signup_cancel_signup($signup) {
   }
 
   $node = node_load($signup->nid);
-  $node->signup_total--;
+  $node->signup_total -= $signup->seats;
 
   // Invoke hook_signup_cancel().
   module_invoke_all('signup_cancel', $signup, $node);
@@ -927,6 +927,10 @@ function signup_sign_up_user($signup_for
       $signup_info = array_merge($signup_info, $extra);
     }
     $signup_form_data = serialize($signup_info);
+    $signup_seats = '1';
+    if (!empty($signup_form['signup_seats'])) {
+      $signup_seats = $signup_form['signup_seats'];
+    }
 
     // Figure out if confirmation or reminder emails will be sent and
     // inform the user.
@@ -934,7 +938,7 @@ function signup_sign_up_user($signup_for
     $reminder_email = $node->signup_send_reminder ? '  '. t('You will receive a reminder email !number !days before the %node_type.', array('!number' => $node->signup_reminder_days_before, '!days' => format_plural($node->signup_reminder_days_before, 'day', 'days'), '%node_type' => node_get_types('name', $node->type))) : '';
 
     // Insert the user into the signup_log.
-    db_query("INSERT INTO {signup_log} (uid, nid, anon_mail, signup_time, form_data) VALUES (%d, %d, '%s', %d, '%s')", $signup_form['uid'], $signup_form['nid'], $signup_anon_mail, $curtime, $signup_form_data);
+    db_query("INSERT INTO {signup_log} (uid, nid, anon_mail, seats, signup_time, form_data) VALUES (%d, %d, '%s', %d, %d, '%s')", $signup_form['uid'], $signup_form['nid'], $signup_anon_mail, $signup_seats, $curtime, $signup_form_data);
     $sid = db_last_insert_id('signup_log', 'sid');
 
     $from = variable_get('site_mail', ini_get('sendmail_from'));
@@ -1000,9 +1004,11 @@ function signup_sign_up_user($signup_for
       drupal_mail('signup', 'signup_forwarding_mail', $node->signup_forwarding_email, $language, $params, $from);
     }
 
-    drupal_set_message(t('Signup to !title confirmed.', array('!title' => l($node->title, "node/$node->nid"))) . $confirmation_email . $reminder_email);
+    drupal_set_message(format_plural($signup_seats, 
+      'Signup to !title confirmed. 1 seat has been reserved.', 
+      'Signup to !title confirmed. @count seats have been reserved.', array('!title' => l($node->title, "node/$node->nid"))) . $confirmation_email . $reminder_email);
 
-    $node->signup_total++;
+    $node->signup_total += $signup_seats;
     if ($node->signup_close_signup_limit) {
       _signup_check_limit($node, 'total');
     }
Index: includes/node_admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/node_admin.inc,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 node_admin.inc
--- includes/node_admin.inc	20 Dec 2008 06:31:27 -0000	1.1.2.3
+++ includes/node_admin.inc	21 Dec 2008 15:55:40 -0000
@@ -31,6 +31,7 @@ function signup_node_admin_details_form(
   $header = array(
     theme('table_select_header_cell'),
     array('data' => t('Name'), 'field' => 'u.name', 'sort' => 'asc'),
+    array('data' => t('Seats'), 'field' => 's.seats'),
     array('data' => t('Signup time'), 'field' => 's.signup_time'),
     array('data' => t('Extra information')),
     array('data' => t('Attendance'), 'field' => 's.attended'),
@@ -54,6 +55,7 @@ function signup_node_admin_details_form(
     $key = $signed_up_user->sid;
     $users[$key] = '';
     $form['username'][$key] = array('#value' => $username);
+    $form['signup_seats'][$key] = array('#value' => $signed_up_user->seats);
     $form['signup_date'][$key] = array('#value' => format_date($signed_up_user->signup_time, variable_get('signup_date_format', 'small')));
     $form['signup_form_data'][$key] = array('#value' => theme('signup_custom_data', unserialize($signed_up_user->form_data)));
     $form['attended'][$key] = array('#value' => theme('signup_attended_text', $signed_up_user->attended));
@@ -67,12 +69,10 @@ function signup_node_admin_details_form(
       '#value' => $node->nid,
     );
     $form['users'] = array('#type' => 'checkboxes', '#options' => $users);
+    $attend_options = array('1' => t('Mark as 1 Attended'), '2' => t('Mark as 2 Attended'), '3' => t('Mark as 3 Attended'), '4' => t('Mark as 4 Attended'), '5' => t('Mark as 5 Attended'), '6' => t('Mark as 6 Attended'), '7' => t('Mark as 7 Attended'), '8' => t('Mark as 8 Attended'), '9' => t('Mark as 9 Attended'), '10' => t('Mark as 10 Attended'), '0' => t('Mark as did not attend'), 'cancel' => t('Cancel signup'));
     $form['operation'] = array(
       '#type' => 'select',
-      '#options' => array(
-        'attend_yes' => t('Mark as attended'),
-        'attend_no' => t('Mark as did not attend'),
-      ),
+      '#options' => $attend_options,
     );
     if (user_access('cancel signups')) {
       $form['operation']['#options']['cancel'] = t('Cancel signup');
@@ -121,11 +121,47 @@ function signup_node_admin_multiple_subm
         return;
       }
 
-    case 'attend_yes':
-      $attend = 1;
+    case '1':
+       $attend = 1;
+       break;
+
+    case '2':
+      $attend = 2;
+      break;
+
+    case '3':
+      $attend = 3;
+      break;
+
+    case '4':
+      $attend = 4;
+      break;
+
+    case '5':
+      $attend = 5;
+      break;
+
+    case '6':
+      $attend = 6;
+      break;
+
+    case '7':
+      $attend = 7;
+      break;
+
+    case '8':
+      $attend = 8;
+      break;
+
+    case '9':
+      $attend = 9;
+      break;
+
+    case '10':
+      $attend = 10;
       break;
 
-    case 'attend_no':
+    case '0':
       $attend = 0;
       break;
 
Index: includes/signup_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/signup_form.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 signup_form.inc
--- includes/signup_form.inc	20 Dec 2008 06:31:27 -0000	1.1.2.1
+++ includes/signup_form.inc	21 Dec 2008 15:55:40 -0000
@@ -85,6 +85,14 @@ function signup_form(&$form_state, $node
       unset($signup_themed_form['signup_form_data']['Name']['#default_value']);
     }
   }
+  // Add to to signup_form_data
+  $seat_options = array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10');
+  $form['signup_seats'] = array(
+    '#type' => 'select',
+    '#title' => t('Number of seats to reserve'),
+    '#default_value' => '1',
+    '#options' => $seat_options,
+  );
   $signup_form += $signup_themed_form;
 
   $form['collapse']['signup_user_form'] = $signup_form;
Index: theme/node.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/theme/node.admin.inc,v
retrieving revision 1.4.2.2
diff -u -p -r1.4.2.2 node.admin.inc
--- theme/node.admin.inc	20 Dec 2008 06:31:27 -0000	1.4.2.2
+++ theme/node.admin.inc	21 Dec 2008 15:55:40 -0000
@@ -76,6 +76,7 @@ function theme_signup_node_admin_details
       $rows[] = array(
         'cancel_checkbox' => drupal_render($form['users'][$key]),
         'username' => drupal_render($form['username'][$key]),
+        'signup_seats' => drupal_render($form['signup_seats'][$key]),
         'signup_date' => drupal_render($form['signup_date'][$key]),
         'signup_form_data' => drupal_render($form['signup_form_data'][$key]),
         'attended' => drupal_render($form['attended'][$key]),
@@ -130,11 +131,6 @@ function theme_signup_attended_text($att
   if ($attended === NULL) {
     return '';
   }
-  if ($attended == 0) {
-    return t('Did not attend');
-  }
-  else {
-    return t('Attended');
-  }
+  return t('@number Attended', array('@number' => $attended));
 }
 
Index: views/signup.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/views/signup.views.inc,v
retrieving revision 1.4.2.3
diff -u -p -r1.4.2.3 signup.views.inc
--- views/signup.views.inc	20 Dec 2008 08:44:02 -0000	1.4.2.3
+++ views/signup.views.inc	21 Dec 2008 15:55:40 -0000
@@ -185,7 +185,16 @@ function signup_views_data() {
     ),
   );
 
-  $data['signup_log']['signup_time'] = array(
+  $data['signup_log']['seats'] = array(
+    'title' => t('Number of seats for this signup.'),
+    'click sortable' => TRUE,
+    'field' => array(
+      'handler' => 'signup_handler_field_signup_seats',
+      'help' => t('Number of seats for this signup.') .' <strong>'. t('NOTE: users may now select multiple seats per signup.') .'</strong>',
+    ),
+  );
+
+   $data['signup_log']['signup_time'] = array(
     'title' => t('User: Signup Time'),
     'help' => t('Time when user signed up.'),
     'field' => array(
@@ -205,7 +214,7 @@ function signup_views_data() {
 
   $data['signup_log']['attended'] = array(
     'title' => t('User: Attended'),
-    'help' => t('Did the user attend or not?'),
+    'help' => t('Number of seats attended?'),
     'field' => array(
       'handler' => 'signup_handler_field_signup_user_attended',
       'click sortable' => TRUE,
@@ -282,6 +291,9 @@ function signup_views_handlers() {
       'signup_handler_field_signup_user_email' => array(
         'parent' => 'views_handler_field',
       ),
+      'signup_handler_field_signup_seats' => array(
+        'parent' => 'views_handler_field',
+      ),
       'signup_handler_field_signup_user_form_data' => array(
         'parent' => 'views_handler_field_prerender_list',
       ),
Index: views/handlers/signup_handler_field_signup_seats.inc
===================================================================
RCS file: views/handlers/signup_handler_field_signup_seats.inc
diff -N views/handlers/signup_handler_field_signup_seats.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ views/handlers/signup_handler_field_signup_seats.inc	21 Dec 2008 15:55:40 -0000
@@ -0,0 +1,24 @@
+<?php
+// $Id$
+
+/**
+ * Field handler to display the number of seats for each signup
+ * because users can now specify a number of seats per signup.
+ */
+class signup_handler_field_signup_seats extends views_handler_field {
+  var $table_alias = '';
+
+  function ensure_my_table() {
+    $this->table_alias = $this->query->ensure_table('signup_log', $this->relationship);
+  }
+
+  function query() {
+    $this->ensure_my_table();
+    $this->aliases['signup_seats'] = $this->query->add_field($this->table_alias, 'seats');
+  }
+
+  function render($values) {
+    return check_plain($values->{$this->aliases['signup_seats']});
+  }
+}
+
Index: views/handlers/signup_handler_filter_signup_user_attended.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/views/handlers/signup_handler_filter_signup_user_attended.inc,v
retrieving revision 1.2.2.2
diff -u -p -r1.2.2.2 signup_handler_filter_signup_user_attended.inc
--- views/handlers/signup_handler_filter_signup_user_attended.inc	19 Dec 2008 01:00:36 -0000	1.2.2.2
+++ views/handlers/signup_handler_filter_signup_user_attended.inc	21 Dec 2008 15:55:40 -0000
@@ -6,7 +6,7 @@
  */
 class signup_handler_filter_signup_user_attended extends views_handler_filter_boolean_operator {
   function get_value_options() {
-    $this->value_options = array(1 => t('Attended'), 0 => t('Did not attend'));
+    $this->value_options = array(0 => t('Did not attend'), 1 => t('1 Attended'), 2 => t('2 Attended'), 3 => t('3 Attended'), 4 => t('4 Attended'), 5 => t('5 Attended'), 6 => t('6 Attended'), 7 => t('7 Attended'), 8 => t('8 Attended'), 9 => t('9 Attended'), 10 => t('10 Attended'));
   }
 }
 
