+ XDB::execute('INSERT IGNORE INTO email_virtual (email, domain, redirect, type)
+ SELECT {?}, id, {?}, {?}
+ FROM email_virtual_domains
+ WHERE name = {?}',
+ $local_part, $user->forlifeEmail(), $type, $domain);
+}
+
+function delete_from_list_alias(User $user, $local_part, $domain, $type = 'alias')
+{
+ Platal::assert($user !== null);
+
+ XDB::execute('DELETE v
+ FROM email_virtual AS v
+ INNER JOIN email_virtual_domains AS m ON (v.domain = m.id)
+ INNER JOIN email_virtual_domains AS d ON (d.aliasing = m.id)
+ WHERE v.email = {?} AND d.name = {?} AND v.redirect = {?} AND type = {?}',
+ $local_part, $domain, $user->forlifeEmail(), $type);
+}
+
+function update_list_alias(User $user, $former_email, $local_part, $domain, $type = 'alias')
+{
+ Platal::assert($user !== null);
+
+ XDB::execute('UPDATE email_virtual AS v
+ INNER JOIN email_virtual_domains AS d ON (v.domain = d.id)
+ SET v.redirect = {?}
+ WHERE v.redirect = {?} AND d.name = {?} AND v.email = {?} AND v.type = {?}',
+ $user->forlifeEmail(), $former_email, $domain, $local_part, $type);
+}
+
+function list_alias_members($local_part, $domain)
+{
+ $emails = XDB::fetchColumn('SELECT DISTINCT(redirect)
+ FROM email_virtual AS v
+ INNER JOIN email_virtual_domains AS m ON (v.domain = m.id)
+ INNER JOIN email_virtual_domains AS d ON (d.aliasing = m.id)
+ WHERE v.email = {?} AND d.name = {?} AND type = \'alias\'',
+ $local_part, $domain);
+
+ $members = array();
+ foreach ($emails as $email) {
+ $members[] = User::getSilent($email);
+ }
+
+ return $members;
+}
+
+function delete_list_alias($local_part, $domain)
+{
+ XDB::execute('DELETE v
+ FROM email_virtual AS v
+ INNER JOIN email_virtual_domains AS m ON (v.domain = m.id)
+ INNER JOIN email_virtual_domains AS d ON (d.aliasing = m.id)
+ WHERE v.email = {?} AND d.name = {?} AND type = \'alias\'',
+ $local_part, $domain);
+}
+
+function iterate_list_alias($domain)
+{
+ return XDB::fetchColumn('SELECT CONCAT(v.email, \'@\', m.name)
+ FROM email_virtual AS v
+ INNER JOIN email_virtual_domains AS m ON (v.domain = m.id)
+ WHERE m.name = {?} AND v.type = \'alias\'
+ GROUP BY v.email',
+ $domain);
+}