From a7d8045759881eeb18d3c6304169f3d8b5ea0235 Mon Sep 17 00:00:00 2001 From: Michael Fürmann <michael@spicyweb.de> Date: Thu, 05 Mar 2015 13:00:23 -0500 Subject: [PATCH] Review 0.1 --- interface/web/mail/xmpp_domain_del.php | 61 +++++++++++++----------------- 1 files changed, 26 insertions(+), 35 deletions(-) diff --git a/interface/web/mail/xmpp_domain_del.php b/interface/web/mail/xmpp_domain_del.php index 3dcc859..da481c8 100644 --- a/interface/web/mail/xmpp_domain_del.php +++ b/interface/web/mail/xmpp_domain_del.php @@ -52,48 +52,39 @@ class page_action extends tform_actions { function onBeforeDelete() { - global $app; $conf; + global $app, $conf; $domain = $this->dataRecord['domain']; // Before we delete the email domain, // we will delete all depending records. - // TODO: Delete xmpp accounts in filesystem - // TODO: Delete xmpp accounts in isp - // TODO: Delete DNS Records -/* - // Delete all forwardings where the source or destination belongs to this domain - $records = $app->db->queryAllRecords("SELECT forwarding_id as id FROM mail_forwarding WHERE source like '%@".$app->db->quote($domain)."' OR (destination like '%@".$app->db->quote($domain)."' AND type != 'forward')"); - foreach($records as $rec) { - $app->db->datalogDelete('mail_forwarding', 'forwarding_id', $rec['id']); - } - - // Delete all fetchmail accounts where destination belongs to this domain - $records = $app->db->queryAllRecords("SELECT mailget_id as id FROM mail_get WHERE destination like '%@".$app->db->quote($domain)."'"); - foreach($records as $rec) { - $app->db->datalogDelete('mail_get', 'mailget_id', $rec['id']); - } - - // Delete all mailboxes where destination belongs to this domain - $records = $app->db->queryAllRecords("SELECT mailuser_id as id FROM mail_user WHERE email like '%@".$app->db->quote($domain)."'"); - foreach($records as $rec) { - $app->db->datalogDelete('mail_user', 'mailuser_id', $rec['id']); - } - - // Delete all spamfilters that belong to this domain - $records = $app->db->queryAllRecords("SELECT id FROM spamfilter_users WHERE email = '%@".$app->db->quote($domain)."'"); - foreach($records as $rec) { - $app->db->datalogDelete('spamfilter_users', 'id', $rec['id']); - } - - // Delete all mailinglists that belong to this domain - $records = $app->db->queryAllRecords("SELECT mailinglist_id FROM mail_mailinglist WHERE domain = '".$app->db->quote($domain)."'"); - foreach($records as $rec) { - $app->db->datalogDelete('mail_mailinglist', 'mailinglist_id', $rec['id']); - } -*/ + $this->delete_accounts($domain); + // and DNS entries + $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other, server_id, ttl, serial FROM dns_soa WHERE active = 'Y' AND origin = ?", $domain.'.'); + if ( isset($soa) && !empty($soa) ) $this->remove_dns($soa); } + private function delete_accounts($domain){ + global $app; + // get all accounts + $sql = "SELECT * FROM xmpp_user WHERE jid LIKE ? AND ?"; + $users = $app->db->queryAllRecords($sql, '%@'.$domain, $app->tform->getAuthSQL('d')); + foreach($users AS $u) + $app->db->datalogDelete('xmpp_user', 'xmppuser_id', $u['xmppuser_id']); + } + + private function remove_dns($new_rr) { + global $app; + + // purge all xmpp related rr-record + $sql = "SELECT * FROM dns_rr WHERE zone = ? AND (name IN ? AND type = 'CNAME' OR name LIKE ? AND type = 'SRV') AND ? ORDER BY serial DESC"; + $rec = $app->db->queryAllRecords($sql, $new_rr['zone'], array('xmpp', 'pubsub', 'proxy', 'anon', 'vjud', 'muc'), '_xmpp-%', $app->tform->getAuthSQL('r')); + if (is_array($rec[1])) { + for ($i=0; $i < count($rec); ++$i) + $app->db->datalogDelete('dns_rr', 'id', $rec[$i]['id']); + } + } + } $page = new page_action; -- Gitblit v1.9.1