### Eclipse Workspace Patch 1.0 #P mailman_manager Index: mailman_manager.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/mailman_manager/mailman_manager.module,v retrieving revision 1.2.2.16 diff -u -r1.2.2.16 mailman_manager.module --- mailman_manager.module 4 Feb 2008 07:21:14 -0000 1.2.2.16 +++ mailman_manager.module 5 Feb 2008 04:58:03 -0000 @@ -151,7 +151,7 @@ $subscrip = _mailman_manager_get_subscriptions($account->uid, $list['lid']); $form['mman']['list'. trim($list['lid'])]['options'. trim($list['lid'])] = array( '#type' => 'radios', - '#title' => t('Change your subscription:'), + '#title' => t('Change your subscription'), '#options' => $options, '#default_value' => $subscrip['lstatus'] ); @@ -209,11 +209,12 @@ * when he logs in. */ function mailman_manager_user($op, &$edit, &$account, $category = NULL) { + $lists = _mailman_manager_get_lists(); + if (user_access('access mailman_manager')) { switch ($op) { //Create menu option on user tab; case 'categories': - $lists = _mailman_manager_get_lists(); - if (count($lists) && user_access('access mailman_manager')) { + if (count($lists)) { $output_user[] = array('name' => 'mailman_manager', 'title' => t('Mailing Lists'), 'weight' => 9); } return $output_user; @@ -221,14 +222,13 @@ //List mailing lists with user subscriptions and options; case 'form': - if ($category == 'mailman_manager' && user_access('access mailman_manager')) { + if ($category == 'mailman_manager') { return _mailman_manager_user_form($account) ; } break; //Update and process list subscriptions; case 'update': if ($category == 'mailman_manager') { - $lists = _mailman_manager_get_lists(); foreach ($lists as $list) { $subscrip = _mailman_manager_get_subscriptions($account->uid, $list['lid']); $listno = 'options'. trim($list['lid']); @@ -241,15 +241,34 @@ else { $password = $edit['pass'. trim($list['lid'])]; } - $edit['pass'. trim($list['lid'])] = ''; // See http://api.drupal.org/api/4.7/function/hook_user + $edit['pass'. trim($list['lid'])] = ''; if ($subscrip[lstatus] != $edit[$listno]) { _mailman_manager_update_subscriptions($account->uid, $list[lid], $edit[$listno], $subscrip['lstatus'], $account->mail, $password); } } - return t('Your mailing list subscriptions have been updated'); + return t('Your mailing list subscriptions have been updated'); } + break; + //Update and process list subscriptions; + case 'after_update': + $message = ''; + foreach ($lists as $list) { + $subscrip = _mailman_manager_get_subscriptions ( $account->uid, $list['lid'] ); + //Reset subscriptions to unsubscribed if user has changed email; + if ($subscrip['lmail'] != $account->mail && $subscrip['lmail'] != '') { + $query = "UPDATE {mailman_users} SET lstatus = %d, lmail = '%s', lpass = '%s' WHERE uid = %d AND lid = %d"; + db_query ( $query, $lstatus, '', '', $account->uid, $list['lid'] ); + $command = "unsubscribe ".$subscrip['lpass']." address=".$subscrip['lmail']; + _mailman_manager_setdelivery ($account->uid, $list['lid'], $subscrip['lmail'], $command); + $watchdog = 'Subscriptions for user '.$account->uid.' reset due to email change. Unsubscribed from list '.$list[lid]; + watchdog ('mailman man', $watchdog, 'WATCHDOG_NOTICE', NULL); + $message .= t ('Your previous e-mail address has been unsubscribed from List Number ') . $list ['lid'] .'.'; + } + } + return $message; } + } } /**