Index: simplenews_register.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews_register/simplenews_register.module,v
retrieving revision 1.1.2.4.2.6
diff -u -r1.1.2.4.2.6 simplenews_register.module
--- simplenews_register.module	23 Feb 2009 19:48:56 -0000	1.1.2.4.2.6
+++ simplenews_register.module	27 Feb 2009 01:09:45 -0000
@@ -38,6 +38,13 @@
       '#theme' => 'simplenews_register_admin_settings',
       '#weight' => 1,
     );
+
+    $form['simplenews_register_options']['simplenews_register_single'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Only allow users to sign up for one newsletter during registration'),
+      '#default_value' => variable_get('simplenews_register_single', FALSE),
+      '#description' => t('Enable this setting to change the list of newsletters to a dropdown menu instead of a list of checkboxes. If this is selected, the opt-out setting will be ignored.'),
+    );
     
     $form['simplenews_register_options']['simplenews_register_weight'] = array(
       '#type' => 'weight',
@@ -102,6 +109,8 @@
   
   $output  = drupal_render($form['simplenews_register_weight']);
   $output .= theme('table', $header, $rows);
+  // Render any additional form elements not explicitly rendered above.
+  $output .= drupal_render($form);
   return $output;
 }
 
@@ -145,12 +154,22 @@
             // Untranslated.
             $title = $term->name;
           }
-          $form['simplenews']['simplenews-'. $term->tid] = array(
-            '#type' => 'checkbox',
-            '#title' => t('!newsletter', array('!newsletter' => $title)),
-            '#description' => variable_get('simplenews_register_'. $term->tid .'_desc', TRUE) ? $term->description : '',
-            '#default_value' => isset($edit['simplenews-'. $term->tid]) ? $edit['simplenews-'. $term->tid] : variable_get('simplenews_register_'. $term->tid .'_optout', FALSE),
-          );
+          // If only one option is allowed to be selected, build an array
+          // of options to be used later. Otherwise, build checkboxes for each newsletter.
+          if (variable_get('simplenews_register_single', FALSE)) {
+            if (!isset($options)) {
+              $options = array('none' => t("Don't subscribe to a newsletter"));
+            }
+            $options[$term->tid] = $title;
+          }
+          else {
+            $form['simplenews']['simplenews-'. $term->tid] = array(
+              '#type' => 'checkbox',
+              '#title' => t('!newsletter', array('!newsletter' => $title)),
+              '#description' => variable_get('simplenews_register_'. $term->tid .'_desc', TRUE) ? $term->description : '',
+              '#default_value' => isset($edit['simplenews-'. $term->tid]) ? $edit['simplenews-'. $term->tid] : variable_get('simplenews_register_'. $term->tid .'_optout', FALSE),
+            );
+          }
           $hidden = FALSE;
         }
         elseif (variable_get('simplenews_register_'. $term->tid .'_optout', TRUE)) {
@@ -162,6 +181,15 @@
           );
         }
       }
+      // If only one newsletter is allowed to be chosen, render the dropdown.
+      if (variable_get('simplenews_register_single', FALSE)) {
+        $form['simplenews']['simplenews_dropdown'] = array(
+          '#type' => 'select',
+          '#title' => t('Subscribe to a newsletter'),
+          '#multiple' => FALSE,
+          '#options' => $options,
+        );
+      }
       
       if ($hidden) {
         unset($form['simplenews']['#type']);
@@ -174,12 +202,22 @@
     case 'insert':
     case 'update':
       $signing_up = FALSE;
-      foreach (taxonomy_get_tree(_simplenews_get_vid()) as $term) {
-        if (variable_get('simplenews_register_'. $term->tid .'_show', TRUE) && !empty($edit['simplenews-'. $term->tid])) {
-          $signing_up = TRUE;
-          simplenews_subscribe_user($edit['mail'], $term->tid, variable_get('simplenews_register_'. $term->tid .'_confirm', FALSE));
+      if (variable_get('simplenews_register_single', FALSE)) {
+        foreach (taxonomy_get_tree(_simplenews_get_vid()) as $term) {
+          if (variable_get('simplenews_register_'. $term->tid .'_show', TRUE) && $edit['simplenews_dropdown'] == $term->tid) {
+            $signing_up = TRUE;
+            simplenews_subscribe_user($edit['mail'], $term->tid, variable_get('simplenews_register_'. $term->tid .'_confirm', FALSE));
+          }
         }
       }
+      else {
+        foreach (taxonomy_get_tree(_simplenews_get_vid()) as $term) {
+          if (variable_get('simplenews_register_'. $term->tid .'_show', TRUE) && !empty($edit['simplenews-'. $term->tid])) {
+            $signing_up = TRUE;
+            simplenews_subscribe_user($edit['mail'], $term->tid, variable_get('simplenews_register_'. $term->tid .'_confirm', FALSE));
+          }
+         }
+       }
       if ($signing_up) {
         drupal_set_message(t('Signing up for newsletter(s).'));
       }
