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).')); }