+ $mmlist = new MMList(S::user());
+ $mmlist->kill($this->hruid, $clearAll);
+ }
+
+ // Merge all infos in other user and then clean this one
+ public function mergeIn(User $newuser) {
+ if ($this->profile()) {
+ // Don't disable user with profile in this way.
+ global $globals;
+ Platal::page()->trigError('Impossible de fusionner les comptes ' . $this->hruid . ' et ' . $newuser->hruid .
+ '. Contacte support@' . $globals->mail->domain . '.');
+ return false;
+ }
+
+ if ($this->forlifeEmail()) {
+ // If the new user is not registered and does not have already an email address,
+ // we need to give him the old user's email address if he has any.
+ if (!$newuser->perms) {
+ XDB::execute('UPDATE accounts
+ SET email = {?}
+ WHERE uid = {?} AND email IS NULL',
+ $this->forlifeEmail(), $newuser->id());
+
+ // Reftech new user so its forlifeEmail will be correct.
+ $newuser = getSilentWithUID($newuser->id());
+ }
+
+ // Change email used in mailing lists.
+ if ($this->forlifeEmail() != $newuser->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(), $newuser->forlifeEmail());
+ }
+ // main domain lists
+ $mmlist = new MMList($this);
+ $mmlist->replace_email_in_all($this->forlifeEmail(), $newuser->forlifeEmail());
+ }
+ }
+
+ // 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());
+ }
+
+ // Merges user in following tables, ie updates when possible, then deletes remaining occurences of the old user.
+ foreach (array('group_announces_read', 'group_event_participants', 'group_member_sub_requests', 'group_members', 'email_redirect_account') as $table) {
+ XDB::execute('UPDATE IGNORE ' . $table . '
+ SET uid = {?}
+ WHERE uid = {?}',
+ $newuser->id(), $this->id());
+ XDB::execute('DELETE FROM ' . $table . '
+ WHERE uid = {?}',
+ $this->id());
+ }
+
+ // Eventually updates last session id and deletes old user's accounts entry.
+ $lastSession = XDB::fetchOneCell('SELECT id
+ FROM log_sessions
+ WHERE uid = {?}
+ ORDER BY start DESC
+ LIMIT 1',
+ $newuser->id());
+ XDB::execute('UPDATE log_last_sessions
+ SET id = {?}
+ WHERE uid = {?}',
+ $lastSession, $newuser->id());
+ XDB::execute('DELETE FROM accounts
+ WHERE uid = {?}',
+ $this->id());
+
+ return true;