? .DS_Store
? signup_374086_multiple_reminders_0.patch
Index: signup.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.install,v
retrieving revision 1.24.2.3
diff -u -p -r1.24.2.3 signup.install
--- signup.install	27 Dec 2008 00:40:30 -0000	1.24.2.3
+++ signup.install	20 Feb 2009 22:31:04 -0000
@@ -37,16 +37,15 @@ function signup_schema() {
       ),
       'send_reminder' => array(
         'description' => t('Boolean indicating whether reminder emails should be sent. This is set to 0 once the reminders are sent.'),
-        'type' => 'int',
+        'type' => 'text',
+        'size' => 'big',
         'not null' => TRUE,
-        'default' => 0,
       ),
       'reminder_days_before' => array(
         'description' => t('Number of days before the start of a time-based node when the reminder emails should be sent.'),
-        'type' => 'int',
-        'unsigned' => TRUE,
+        'type' => 'text',
+        'size' => 'big',
         'not null' => TRUE,
-        'default' => 0,
       ),
       'reminder_email' => array(
         'description' => t('Email template to send to users to remind them about a signup.'),
Index: signup.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/signup.module,v
retrieving revision 1.205.2.15
diff -u -p -r1.205.2.15 signup.module
--- signup.module	25 Jan 2009 03:10:58 -0000	1.205.2.15
+++ signup.module	20 Feb 2009 22:31:05 -0000
@@ -733,9 +733,12 @@ function signup_nodeapi(&$node, $op, $te
         $node->signup_forwarding_email = $signup->forwarding_email;
         $node->signup_send_confirmation = $signup->send_confirmation;
         $node->signup_confirmation_email = $signup->confirmation_email;
-        $node->signup_send_reminder  = $signup->send_reminder ;
-        $node->signup_reminder_days_before = $signup->reminder_days_before;
-        $node->signup_reminder_email = $signup->reminder_email;
+        $node->signup_send_reminder = array();
+        $node->signup_send_reminder = unserialize($signup->send_reminder);
+        $node->signup_reminder_days_before = array();
+        $node->signup_reminder_days_before = unserialize($signup->reminder_days_before);
+        $node->signup_reminder_email = array();
+        $node->signup_reminder_email = unserialize($signup->reminder_email);
         $node->signup_close_signup_limit = $signup->close_signup_limit;
         $node->signup_status = $signup->status;
         if ($node->nid) {
Index: includes/admin.settings.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/admin.settings.inc,v
retrieving revision 1.2.2.5
diff -u -p -r1.2.2.5 admin.settings.inc
--- includes/admin.settings.inc	24 Jan 2009 08:52:46 -0000	1.2.2.5
+++ includes/admin.settings.inc	20 Feb 2009 22:31:06 -0000
@@ -21,6 +21,14 @@ function signup_settings_form() {
       '#description' => t('The number of hours before the event which signups will no longer be allowed. Use negative numbers to close signups after the event start (example: -12).'),
     );
   };
+  // Set number of reminders.
+  $form['signup_reminder_number'] = array(
+    '#title' => t('Number of allowed reminders'),
+    '#type' => 'textfield',
+      '#default_value' => variable_get('signup_reminder_number', 1),
+      '#size' => 5, '#maxlength' => 10,
+      '#description' => t('The number of allowed email reminders, which will appear below (for filling defaults) and on the signup-enabled node edit form. Use 0 to disable this feature.'),
+  );
   $form['node_defaults'] = array(
     '#type' => 'fieldset',
     '#title' => t('Default signup information'),
@@ -205,9 +213,18 @@ function signup_settings_form_submit($fo
       $form_state['values']['signup_confirmation_email'],
       $form_state['values']['signup_close_signup_limit'],
     );
-    $values[] = isset($form_state['values']['signup_send_reminder']) ? $form_state['values']['signup_send_reminder'] : 0;
-    $values[] = isset($form_state['values']['signup_reminder_days_before']) ? $form_state['values']['signup_reminder_days_before'] : 0;
-    $values[] = isset($form_state['values']['signup_reminder_email']) ? $form_state['values']['signup_reminder_email'] : '';
+    // Add number of reminders from the configs above.
+    $reminder_number = variable_get('signup_reminder_number', 1);
+    // Now add data from multiple reminder form elements as an array.
+    for ($r = 1; $r <= $reminder_number; $r++) {
+      $signup_send_reminder_values[] = isset($form_state['values']['signup_send_reminder' . $r]) ? $form_state['values']['signup_send_reminder' . $r] : 0;
+      $signup_reminder_days_before_values[] = isset($form_state['values']['signup_reminder_days_before' . $r]) ? $form_state['values']['signup_reminder_days_before' . $r] : 0;
+      $signup_reminder_email_values[] = isset($form_state['values']['signup_reminder_email' . $r]) ? $form_state['values']['signup_reminder_email' . $r] : '';
+    }
+    // Serialize reminder data.
+    $values[] = serialize($signup_send_reminder_values);
+    $values[] = serialize($signup_reminder_days_before_values);
+    $values[] = serialize($signup_reminder_email_values);
     $values[] = 0;  // "nid" of the row in {signup} for the global settings.
     db_query("UPDATE {signup} SET forwarding_email = '%s', send_confirmation = %d, confirmation_email = '%s', close_signup_limit = %d, send_reminder = %d, reminder_days_before = %d, reminder_email = '%s' WHERE nid = %d", $values);
   }
Index: includes/node_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/node_form.inc,v
retrieving revision 1.4.2.1
diff -u -p -r1.4.2.1 node_form.inc
--- includes/node_form.inc	8 Jan 2009 19:36:27 -0000	1.4.2.1
+++ includes/node_form.inc	20 Feb 2009 22:31:06 -0000
@@ -45,9 +45,18 @@ function signup_save_node($node, $op) {
       // If we're dealing with a node that doesn't have a start time, these
       // fields are missing from the signup settings form, so we can't assume
       // they're defined.
-      $values[] = isset($node->signup_send_reminder) ? $node->signup_send_reminder : 0;
-      $values[] = isset($node->signup_reminder_days_before) ? $node->signup_reminder_days_before : 0;
-      $values[] = isset($node->signup_reminder_email) ? $node->signup_reminder_email : '';
+      // Add number of reminders from configs.
+      $reminder_number = variable_get('signup_reminder_number', 1);
+      // Now add data from multiple reminder form elements as an array.
+      for ($r = 1; $r <= $reminder_number; $r++) {
+        eval('$signup_send_reminder_values[] = isset($node->signup_send_reminder' . $r . ') ? $node->signup_send_reminder' . $r . ' : 0;');
+        eval('$signup_reminder_days_before_values[] = isset($node->signup_reminder_days_before' . $r . ') ? $node->signup_reminder_days_before' . $r . ' : 0;');
+        eval('$signup_reminder_email_values[] = isset($node->signup_reminder_email' . $r . ') ? $node->signup_reminder_email' . $r . ' : 0;');
+      }
+      // Serialize reminder data.
+      $values[] = serialize($signup_send_reminder_values);
+      $values[] = serialize($signup_reminder_days_before_values);
+      $values[] = serialize($signup_reminder_email_values);
     }
   }
   elseif ($op == 'insert' && variable_get('signup_node_default_state_'. $node->type, 'disabled') == 'enabled_on') {
@@ -95,10 +104,10 @@ function signup_save_node($node, $op) {
     // clause for the UPDATE.
     $values[] = $node->nid;
     if ($has_signup_record) {
-      db_query("UPDATE {signup} SET forwarding_email = '%s', send_confirmation = %d, confirmation_email = '%s', close_signup_limit = %d, send_reminder = %d, reminder_days_before = %d, reminder_email = '%s' WHERE nid = %d", $values);
+      db_query("UPDATE {signup} SET forwarding_email = '%s', send_confirmation = %d, confirmation_email = '%s', close_signup_limit = %d, send_reminder = '%s', reminder_days_before = '%s', reminder_email = '%s' WHERE nid = %d", $values);
     }
     else {
-      db_query("INSERT INTO {signup} (forwarding_email, send_confirmation, confirmation_email, close_signup_limit, send_reminder, reminder_days_before, reminder_email, nid) VALUES ('%s', %d, '%s', %d, %d, %d, '%s', %d)", $values);
+      db_query("INSERT INTO {signup} (forwarding_email, send_confirmation, confirmation_email, close_signup_limit, send_reminder, reminder_days_before, reminder_email, nid) VALUES ('%s', %d, '%s', %d, '%s', '%s', '%s', %d)", $values);
     }
     if (_signup_node_completed($node) && !empty($node->signup_status)) {
       // If this is an time-based node, and it's already past the close in
Index: includes/node_settings.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/includes/node_settings.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 node_settings.inc
--- includes/node_settings.inc	20 Dec 2008 04:28:56 -0000	1.1.2.1
+++ includes/node_settings.inc	20 Feb 2009 22:31:06 -0000
@@ -40,11 +40,18 @@ function signup_node_settings_form($form
     $node->signup_forwarding_email = $result->forwarding_email;
     $node->signup_send_confirmation = $result->send_confirmation;
     $node->signup_confirmation_email = $result->confirmation_email;
-    $node->signup_send_reminder = $result->send_reminder;
-    $node->signup_reminder_days_before = $result->reminder_days_before;
-    $node->signup_reminder_email = $result->reminder_email;
+    $node->signup_send_reminder = array();
+    $node->signup_send_reminder = unserialize($result->send_reminder);
+    $node->signup_reminder_days_before = array();
+    $node->signup_reminder_days_before = unserialize($result->reminder_days_before);
+    $node->signup_reminder_email = array();
+    $node->signup_reminder_email = unserialize($result->reminder_email);
     $node->signup_close_signup_limit = $result->close_signup_limit;
   }
+  // Debug
+  #drupal_set_message('<pre>' . print_r($node->signup_send_reminder, TRUE) . ' </pre>');
+  #drupal_set_message('<pre>' . print_r($node->signup_reminder_days_before, TRUE) . ' </pre>');
+  #drupal_set_message('<pre>' . print_r($node->signup_reminder_email, TRUE) . ' </pre>');
 
   $form['signup_forwarding_email'] = array(
     '#type' => 'textfield',
@@ -71,35 +78,46 @@ function signup_node_settings_form($form
   }
 
   if ($has_date) {
-    // Define a sub-tree to wrap the next 2 form elements together in an
-    // inline div for better display.
-    $form['signup_reminder'] = array(
-      '#prefix' => '<div class="container-inline">',
-      '#suffix' => '</div>',
-    );
-    $form['signup_reminder']['signup_send_reminder'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Send reminder'),
-      '#default_value' => $node->signup_send_reminder,
-    );
-    $options = array();
-    for ($i = 1; $i <= 60; $i++) {
-      $options[$i] = $i;
+    // Allow multiple.
+    $reminder_number = variable_get('signup_reminder_number', 1);
+    for ($r = 1; $r <= $reminder_number; $r++) {
+      // Define a sub-tree to wrap the next 2 form elements together in an
+      // inline div for better display.
+      $form['signup_reminder' . $r] = array(
+        '#prefix' => '<div class="container-inline">',
+        '#suffix' => '</div>',
+      );
+      $form['signup_reminder' . $r]['signup_send_reminder' . $r] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Send reminder'),
+        '#default_value' => $node->signup_send_reminder[$r -1],
+      );
+      $options = array();
+      for ($i = 1; $i <= 180; $i++) {
+        $options[$i] = $i;
+      }
+      $node_type_name = isset($node_type) ? node_get_types('name', $node_type) : '';
+      $form['signup_reminder' . $r]['signup_reminder_days_before' . $r] = array(
+        '#type' => 'select',
+        '#default_value' => $node->signup_reminder_days_before[$r -1],
+        '#options' => $options,
+        '#suffix' => t('day(s)'),
+      );
+      // Add before or after option here (later use this to set 'days' to a positive or negative number).
+      $form['signup_reminder' . $r]['signup_reminder_before_or_after' . $r] = array(
+        '#type' => 'radios',
+        '#default_value' => 'before',
+        '#options' => array('before' => 'before', 'after' => 'after'),
+        '#suffix' => !empty($node_type_name) ? t('this %node_type', array('%node_type' => $node_type_name)) : t('start time'),
+      );
+      $form['signup_reminder_email' . $r] = array(
+        '#type' => 'textarea',
+        '#title' => t('Reminder email @number', array('@number' => $r)),
+        '#default_value' => $node->signup_reminder_email[$r -1],
+        '#cols' => 40, '#rows' => 6,
+        '#description' =>  !empty($node_type_name) ? t('Email sent to user as a reminder before the %node_type starts. !token_description', array('%node_type' => $node_type_name, '!token_description' => $signup_token_description)) : t('Email sent to user as a reminder before the start time. !token_description', array('!token_description' => $signup_token_description)),
+      );
     }
-    $node_type_name = isset($node_type) ? node_get_types('name', $node_type) : '';
-    $form['signup_reminder']['signup_reminder_days_before'] = array(
-      '#type' => 'select',
-      '#default_value' => $node->signup_reminder_days_before,
-      '#options' => $options,
-      '#suffix' => !empty($node_type_name) ? t('day(s) before this %node_type', array('%node_type' => $node_type_name)) : t('day(s) before start time'),
-    );
-    $form['signup_reminder_email'] = array(
-      '#type' => 'textarea',
-      '#title' => t('Reminder email'),
-      '#default_value' => $node->signup_reminder_email,
-      '#cols' => 40, '#rows' => 6,
-      '#description' =>  !empty($node_type_name) ? t('Email sent to user as a reminder before the %node_type starts. !token_description', array('%node_type' => $node_type_name, '!token_description' => $signup_token_description)) : t('Email sent to user as a reminder before the start time. !token_description', array('!token_description' => $signup_token_description)),
-    );
     if (module_exists('token')) {
       module_load_include('inc', 'signup', 'includes/token_help');
       _signup_token_help($form, 'signup_reminder_token_fieldset');
