--- signup.orig 2006-08-23 14:54:28.000000000 -0400 +++ signup.module 2006-09-06 15:04:28.000000000 -0400 @@ -322,41 +322,43 @@ //if it's a signup enabled node, then insert a new row for this node if (variable_get('signup_form_' . $node->type, 0)) { db_query("INSERT INTO {signup} (nid, forwarding_email, send_confirmation, confirmation_email, - send_reminder, reminder_days_before, reminder_email) VALUES (%d, '%s', %d, '%s', %d, %d, '%s')", + send_reminder, reminder_days_before, reminder_email, max) VALUES (%d, '%s', %d, '%s', %d, %d, '%s', %d)", $node->nid, $form_values['signup_forwarding_email'], $form_values['signup_send_confirmation'], $form_values['signup_confirmation_email'], - $form_values['signup_send_reminder'], $form_values['signup_reminder_days_before'], $form_values['signup_reminder_email']); + $form_values['signup_send_reminder'], $form_values['signup_reminder_days_before'], $form_values['signup_reminder_email'], $form_values['signup_max']); } elseif ($form_values['signup_enable']) { $defaults = db_fetch_array(db_query('SELECT * FROM {signup} WHERE nid = 0')); db_query("INSERT INTO {signup} (nid, forwarding_email, send_confirmation, confirmation_email, - send_reminder, reminder_days_before, reminder_email) VALUES (%d, '%s', %d, '%s', %d, %d, '%s')", + send_reminder, reminder_days_before, reminder_email, max) VALUES (%d, '%s', %d, '%s', %d, %d, '%s', %d)", $node->nid, $defaults['forwarding_email'], $defaults['send_confirmation'], $defaults['confirmation_email'], - $defaults['send_reminder'], $defaults['reminder_days_before'], $defaults['reminder_email']); + $defaults['send_reminder'], $defaults['reminder_days_before'], $defaults['reminder_email'], $defaults['max']); } + break; case 'update': //if this is a signup enabled node, then update the signup info for the node + if (db_num_rows(db_query('SELECT * FROM {signup} WHERE nid = %d', $node->nid))) { db_query("UPDATE {signup} SET forwarding_email = '%s', send_confirmation = %d, confirmation_email = '%s', - send_reminder = %d, reminder_days_before = %d, reminder_email = '%s' + send_reminder = %d, reminder_days_before = %d, reminder_email = '%s', max = %d WHERE nid = %d", $node->signup_forwarding_email, $node->signup_send_confirmation, $node->signup_confirmation_email, $node->signup_send_reminder, $node->signup_reminder_days_before, - $node->signup_reminder_email, $node->nid); + $node->signup_reminder_email, $node->signup_max, $node->nid); } elseif ($form_values['signup_enable']) { $defaults = db_fetch_array(db_query('SELECT * FROM {signup} WHERE nid = 0')); db_query("INSERT INTO {signup} (nid, forwarding_email, send_confirmation, confirmation_email, - send_reminder, reminder_days_before, reminder_email) VALUES (%d, '%s', %d, '%s', %d, %d, '%s')", + send_reminder, reminder_days_before, reminder_email, max) VALUES (%d, '%s', %d, '%s', %d, %d, '%s', %d)", $node->nid, $defaults['forwarding_email'], $defaults['send_confirmation'], $defaults['confirmation_email'], - $defaults['send_reminder'], $defaults['reminder_days_before'], $defaults['reminder_email']); + $defaults['send_reminder'], $defaults['reminder_days_before'], $defaults['reminder_email'], $defaults['max']); } elseif (variable_get('signup_form_' . $node->type, 0)) { db_query("INSERT INTO {signup} (nid, forwarding_email, send_confirmation, confirmation_email, - send_reminder, reminder_days_before, reminder_email) VALUES (%d, '%s', %d, '%s', %d, %d, '%s')", + send_reminder, reminder_days_before, reminder_email, max) VALUES (%d, '%s', %d, '%s', %d, %d, '%s', %d)", $node->nid, $form_values['forwarding_email'], $form_values['send_confirmation'], $form_values['confirmation_email'], - $form_values['send_reminder'], $form_values['reminder_days_before'], $form_values['reminder_email']); + $form_values['send_reminder'], $form_values['reminder_days_before'], $form_values['reminder_email'], $form_values['max']); } break; @@ -382,6 +384,7 @@ $node->signup_reminder_days_before = $signup->reminder_days_before; $node->signup_reminder_email = $signup->reminder_email; $node->signup_completed = $signup->completed; + $node->signup_max = $signup->max; } break; @@ -396,6 +399,7 @@ global $user; //the node has been closed for signups, and the user has signup permissions. let them know it's closed + if ($node->signup_completed) { if (user_access('allow signups')) { $output = '

' . t('Signups closed for this event') . '

'; @@ -661,15 +665,15 @@ variable_set('signup_close_early', is_numeric($form_values['signup_close_early']) ? $form_values['signup_close_early'] : 1); if (db_num_rows(db_query('SELECT nid FROM {signup} WHERE nid = 0'))) { db_query("UPDATE {signup} SET forwarding_email = '%s', send_confirmation = %d, confirmation_email = '%s', - send_reminder = %d, reminder_days_before = %d, reminder_email = '%s' + send_reminder = %d, reminder_days_before = %d, reminder_email = '%s', max = %d WHERE nid = 0", $form_values['signup_forwarding_email'], $form_values['signup_send_confirmation'], $form_values['signup_confirmation_email'], $form_values['signup_send_reminder'], $form_values['signup_reminder_days_before'], - $form_values['signup_reminder_email']); + $form_values['signup_reminder_email'], $form_values['signup_max']); } else { - db_query("INSERT INTO {signup} VALUES(0, '%s', %d, '%s', %d, %d, '%s', 0, 0, 0)", $form_values['signup_forwarding_email'], + db_query("INSERT INTO {signup} VALUES(0, '%s', %d, '%s', %d, %d, '%s', %d, 0, 0, 0)", $form_values['signup_forwarding_email'], $form_values['signup_send_confirmation'], $form_values['signup_confirmation_email'], $form_values['signup_send_reminder'], - $form_values['signup_reminder_days_before'], $form_values['signup_reminder_email']); + $form_values['signup_reminder_days_before'], $form_values['signup_reminder_email'], $form_values['signup_max']); } drupal_set_message(t('Signup settings updated')); @@ -725,10 +729,10 @@ if (db_num_rows(db_query("SELECT * FROM {signup} WHERE nid = %d", $signup_form['nid'])) == 0) { $defaults = db_fetch_object(db_query("SELECT * FROM {signup} WHERE nid = 0")); db_query("INSERT INTO {signup} (nid, forwarding_email, send_confirmation, confirmation_email, - send_reminder, reminder_days_before, reminder_email) VALUES (%d, '%s', %d, '%s', %d, %d, '%s')", + send_reminder, reminder_days_before, reminder_email, max) VALUES (%d, '%s', %d, '%s', %d, %d, '%s', %d)", $signup_form['nid'], $defaults->signup_forwarding_email, $defaults->signup_send_confirmation, $defaults->signup_confirmation_email, $defaults->signup_send_reminder, $defaults->signup_reminder_days_before, - $defaults->signup_reminder_email); + $defaults->signup_reminder_email, $defaults->signup_max); } //get current time. @@ -791,6 +795,13 @@ user_mail($event->forwarding_email, $subject, $message, $header); } drupal_set_message(t('Signup to %title confirmed.', array('%title' => l($node->title, "node/$node->nid"))) . $confirmation_email . $reminder_email); + + // check max signups + $result = db_query("select count(*) as num from {signup_log} where nid = %d", $node->nid); + $signups = db_fetch_object($result); + if ($node->signup_max && $signups->num >= $node->signup_max) { + signup_close_signup($node->nid, 'yes'); + } } else { drupal_access_denied(); } @@ -926,6 +937,7 @@ $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_max = $result->max; } //compose the form fields @@ -942,8 +954,10 @@ $form['end_div'] = array('#type' => 'markup', '#value' => t('day(s) before event').''); $form['signup_reminder_email'] = array('#type' => 'textarea', '#title' => t('Reminder email'), '#default_value' => $node->signup_reminder_email, '#cols' => 40, '#rows' => 6, '#description' => t('Email sent to user as an event reminder. Supported string substitutions: %event, %time, %username, %useremail')); - $form['signup'] = array('#type' => 'hidden', '#value' => 1); + $form['signup_max'] = array('#type' => 'textfield', '#title' => t('Maximum number of signups'), '#default_value' => $node->signup_max, '#size' => 2, '#maxlength' => 3, '#description' => t('Maximum number of people that can signup for this event. Leave blank for unlimited')); + + $form['signup'] = array('#type' => 'hidden', '#value' => 1); return $form; }