- // main domain lists
- $mmlist = new MMList($this);
- $mmlist->replace_email_in_all($this->forlifeEmail(), $newmail);
- }
-
- // group_members (xnet group membership)
- XDB::execute("DELETE g1
- FROM group_members AS g1, group_members AS g2
- WHERE g1.uid = {?} AND g2.uid = {?} AND g1.asso_id = g2.asso_id",
- $this->id(), $newuser->id());
- XDB::execute("UPDATE group_members
- SET uid = {?}
- WHERE uid = {?}",
- $this->id(), $newuser->id());
+ $newemail = XDB::fetchOneCell('SELECT email
+ FROM accounts
+ WHERE uid = {?}',
+ $newuser->id());
+
+ // Change email used in aliases and mailing lists.
+ if ($this->forlifeEmail() != $newemail) {
+ // virtual_redirect (email aliases)
+ XDB::execute('DELETE v1
+ FROM virtual_redirect AS v1, virtual_redirect AS v2
+ WHERE v1.vid = v2.vid AND v1.redirect = {?} AND v2.redirect = {?}',
+ $this->forlifeEmail(), $newemail);
+ XDB::execute('UPDATE virtual_redirect
+ SET redirect = {?}
+ WHERE redirect = {?}',
+ $newemail, $this->forlifeEmail());
+
+ // group mailing lists
+ $group_domains = XDB::fetchColumn('SELECT g.mail_domain
+ FROM groups AS g
+ INNER JOIN group_members AS gm ON(g.id = gm.asso_id)
+ WHERE g.mail_domain != \'\' AND gm.uid = {?}',
+ $this->id());
+ foreach ($group_domains as $mail_domain) {
+ $mmlist = new MMList($this, $mail_domain);
+ $mmlist->replace_email_in_all($this->forlifeEmail(), $newemail);
+ }
+ // main domain lists
+ $mmlist = new MMList($this);
+ $mmlist->replace_email_in_all($this->forlifeEmail(), $newemail);
+ }
+ }
+
+ // Updates user in following tables.
+ foreach (array('group_announces', 'payment_transactions', 'log_sessions', 'group_events') as $table) {
+ XDB::execute('UPDATE ' . $table . '
+ SET uid = {?}
+ WHERE uid = {?}',
+ $newuser->id(), $this->id());
+ }