? .simplenews.subscription.inc.swp
? simplenews_579202_language.patch
? simplenews_875672_6_count.patch
Index: simplenews.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews/simplenews.module,v
retrieving revision 1.220.2.45
diff -u -p -r1.220.2.45 simplenews.module
--- simplenews.module	17 Aug 2010 04:45:22 -0000	1.220.2.45
+++ simplenews.module	17 Aug 2010 11:50:20 -0000
@@ -1121,6 +1122,20 @@ function _simplenews_user_load($mail) {
 }
 
 /**
+ * Update subscriber data.
+ *
+ * @param $snid
+ *   Subscribers ID.
+ * @param $data
+ *   Array of data to be updated
+ *   'language'  Preferred newsletter language (default: '')
+ */
+function simplenews_subscriber_update($subscription, $data) {
+  $data['snid'] = $subscription->snid;
+  drupal_write_record('simplenews_subscriptions', $data, 'snid');
+}
+
+/**
  * Subscribe a user to a newsletter or send a confirmation mail.
  *
  * The $confirm parameter determines the action:
Index: simplenews.subscription.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/simplenews/simplenews.subscription.inc,v
retrieving revision 1.13.2.6
diff -u -p -r1.13.2.6 simplenews.subscription.inc
--- simplenews.subscription.inc	16 Aug 2010 11:32:02 -0000	1.13.2.6
+++ simplenews.subscription.inc	17 Aug 2010 11:50:21 -0000
@@ -297,10 +297,11 @@ function simplenews_subscriptions_page_f
   if (!$valid_email) {
     form_set_error('mail', t('The email address you supplied is not valid.'));
   }
+  $account = (object) array('mail' => $form_state['values']['mail']);
+  $subscription = simplenews_get_subscription($account);
+
   $checked_newsletters = array_filter($form_state['values']['newsletters']);
-  $account = new stdClass();
-  $account->mail = $form_state['values']['mail'];
-  if (!count($checked_newsletters) && !simplenews_get_subscription($account)) {
+  if (!count($checked_newsletters) && !$subscription) {
     form_set_error('newsletters', t('You must select at least one newsletter.'));
   }
 }
@@ -309,7 +310,6 @@ function simplenews_subscriptions_page_f
  * FAPI PAGE subscription form_submit.
  */
 function simplenews_subscriptions_page_form_submit($form, &$form_state) {
-  // Get current subscriptions if any.
   $account = (object) array('mail' => $form_state['values']['mail']);
   $subscription = simplenews_get_subscription($account);
 
@@ -587,8 +587,7 @@ function simplenews_confirm_removal_form
 function simplenews_subscriptions_admin_form(&$form_state, $snid) {
   global $user, $language;
 
-  $account = new stdClass();
-  $account->snid = $snid;
+  $account = (object) array('snid' => $snid);
   $subscription = simplenews_get_subscription($account);
 
   $form = array();
@@ -603,6 +602,7 @@ function simplenews_subscriptions_admin_
   }
 
   $form['subscriptions'] = array(
+    '#title' => t('Subscriptions for %mail', array('%mail' => $subscription->mail)),
     '#type' => 'fieldset',
     '#description' => t('Select the newsletter(s) to add/remove from subscription.'),
   );
@@ -612,9 +612,49 @@ function simplenews_subscriptions_admin_
     '#default_value' => array_merge($default_value, (array)$subscription->tids),
   );
 
-  // If current user is logged in, just display email.
-  // Anonymous users see an email box and will receive confirmations
-  $form['subscriptions']['#title'] = t('Subscriptions for %mail', array('%mail' => $subscription->mail));
+  $form['activated'] = array(
+    '#title' => t('Activation'),
+    '#type' => 'fieldset',
+    '#description' => t('Activate or inactivate account.'),
+  );
+  $form['activated']['activated'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Activated'),
+    '#default_value' => $subscription->activated,
+  );
+
+  if ((variable_get('language_count', 1) > 1)) {
+    // TODO we could allow to switch back to "default", but user_load
+    //$language_options[''] = t('Site default language');
+    $languages = language_list('enabled');
+    foreach ($languages[1] as $langcode => $item) {
+      $name = t($item->name);
+      $language_options[$langcode] = $name . ($item->native != $name ? ' ('. $item->native .')' : '');
+    }
+    // std users have language in profile. disable
+    $disabled = $subscription->uid ? TRUE : FALSE;
+    $form['language'] = array(
+      '#type' => 'fieldset',
+      '#title' => 'Preferred language',
+      '#description' => t('The emails will be localized in language chosen. Real users have their preference in account settings.'),
+      '#disabled' => FALSE,
+    );
+    if ($subscription->uid) {
+      // fapi error: disabled not supported for select type. workaround: output markup
+      $form['language']['language'] = array(
+        '#type' => 'markup',
+        '#value' => $language_options[$subscription->language->language],
+      );
+    }
+    else {
+      $form['language']['language'] = array(
+        '#type' => 'select',
+        '#default_value' => $subscription->language->language,
+        '#options' => $language_options,
+      );
+    }
+  }
+
   $form['subscriptions']['mail'] = array('#type' => 'value', '#value' => $subscription->mail);
   $form['update'] = array(
     '#type' => 'submit',
@@ -633,14 +673,15 @@ function simplenews_subscriptions_admin_
  * FAPI ADMIN subscription form_validate.
  */
 function simplenews_subscriptions_admin_form_validate($form, &$form_state) {
+  $account = (object) array('mail' => $form_state['values']['mail']);
+  $subscription = simplenews_get_subscription($account);
+  
   $valid_email = valid_email_address($form_state['values']['mail']);
   if (!$valid_email) {
     form_set_error('mail', t('The email address you supplied is not valid.'));
   }
   $checked_newsletters = array_filter($form_state['values']['newsletters']);
-  $account = new stdClass();
-  $account->mail = $form_state['values']['mail'];
-  if (!count($checked_newsletters) && !simplenews_get_subscription($account)) {
+  if (!count($checked_newsletters) && !$subscription) {
     form_set_error('newsletters', t('You must select at least one newsletter.'));
   }
 }
@@ -649,6 +690,9 @@ function simplenews_subscriptions_admin_
  * FAPI ADMIN subscription form_submit.
  */
 function simplenews_subscriptions_admin_form_submit($form, &$form_state) {
+  $account = (object) array('mail' => $form_state['values']['mail']);
+  $subscription = simplenews_get_subscription($account);
+
   arsort($form_state['values']['newsletters'], SORT_NUMERIC);
   foreach ($form_state['values']['newsletters'] as $tid => $checked) {
     if ($checked) {
@@ -658,6 +702,14 @@ function simplenews_subscriptions_admin_
       simplenews_unsubscribe_user($form_state['values']['mail'], $tid, FALSE, 'website');
     }
   }
+
+  $data = array();
+  $data['activated'] = $form_state['values']['activated'];
+  if (!$subscription->uid) {
+    $data['language'] = $form_state['values']['language'];
+  }
+  simplenews_subscriber_update($subscription, $data);
+  
   drupal_set_message(t('The newsletter subscriptions for %mail have been updated.', array('%mail' => $form_state['values']['mail'])));
 }
 
