tbrehm
2008-04-14 430a0fa948cf485a7d0ae40d639c37fa3070aed5
Deletion of a mail domain deletes now all depending forwarders, aliases and mailboxes.
4 files modified
95 ■■■■■ changed files
interface/lib/classes/db_mysql.inc.php 45 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform.inc.php 3 ●●●● patch | view | raw | blame | history
interface/lib/classes/tform_actions.inc.php 6 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_del.php 41 ●●●●● patch | view | raw | blame | history
interface/lib/classes/db_mysql.inc.php
@@ -4,7 +4,7 @@
 * 
 * @author Till Brehm
 * @copyright  2005, Till Brehm, projektfarm Gmbh
 * @version 0.1
 * @version 0.2
 * @package ISPConfig
 */
/*
@@ -183,7 +183,8 @@
        return $out;
    }
       
    // deprecated
    /*
    public function insert($tablename, $form, $debug = 0)
    {
        if(is_array($form)){
@@ -201,6 +202,7 @@
        }
    }
       
    // Deprecated
    public function update($tablename, $form, $bedingung, $debug = 0)
    {
        if(is_array($form)){
@@ -214,6 +216,7 @@
            if($debug == 1){ echo 'mySQL Error Message: '.$this->errorMessage; }
        }
    }
    */
    
    //** Function to fill the datalog with a full differential record.
    public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new) {
@@ -231,7 +234,7 @@
        if(is_array($record_old) && count($record_old) > 0) {
            foreach($record_old as $key => $val) {
                if(isset($record_new[$key]) && $record_new[$key] != $val) {
                if(!isset($record_new[$key]) || $record_new[$key] != $val) {
                    // Record has changed
                    $diffrec_full['old'][$key] = $val;
                    $diffrec_full['new'][$key] = $record_new[$key];
@@ -259,6 +262,7 @@
        $server_id = (isset($record_old["server_id"]) && $record_old["server_id"] > 0)?$record_old["server_id"]:0;
        if(isset($record_new["server_id"])) $server_id = $record_new["server_id"];
        if($diff_num > 0) {
            $diffstr = $app->db->quote(serialize($diffrec_full));
            $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
@@ -274,7 +278,20 @@
        return true;
    }
    
    //** Updates a record and saves the cahnges into the datalog
    //** Updates a record and saves the changes into the datalog
    public function datalogInsert($tablename, $insert_data, $index_field) {
        global $app;
        $old_rec = array();
        $this->query("INSERT INTO $tablename $insert_data");
        $index_value = $this->insertID();
        $new_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
        $this->datalogSave($tablename, 'INSERT', $index_field, $index_value, $old_rec, $new_rec);
        return true;
    }
    //** Updates a record and saves the changes into the datalog
    public function datalogUpdate($tablename, $update_data, $index_field, $index_value) {
        global $app;
        
@@ -285,6 +302,20 @@
        
        return true;
    }
    //** Deletes a record and saves the changes into the datalog
    public function datalogDelete($tablename, $index_field, $index_value) {
        global $app;
        $old_rec = $this->queryOneRecord("SELECT * FROM $tablename WHERE $index_field = '$index_value'");
        $this->query("DELETE FROM $tablename WHERE $index_field = '$index_value'");
        $new_rec = array();
        $this->datalogSave($tablename, 'DELETE', $index_field, $index_value, $old_rec, $new_rec);
        return true;
    }
       
    public function closeConn()
    {
@@ -305,14 +336,18 @@
        }
    }
       
    /*
    public function delete()
    {
    }
    */
       
    /*
    public function Transaction($action)
    {
        //action = begin, commit oder rollback
    }
    */
    
    /** Creates a database table with the following format for the $columns array   
    * <code>
@@ -327,6 +362,8 @@
    *                  option =>   unique | primary | index)
    * </code>   
    */
    public function createTable($table_name, $columns)
    {
        $index = '';
interface/lib/classes/tform.inc.php
@@ -903,7 +903,8 @@
                if(is_array($record_old) && count($record_old) > 0) {
                        foreach($record_old as $key => $val) {
                                if(isset($record_new[$key]) && $record_new[$key] != $val) {
                                //if(isset($record_new[$key]) && $record_new[$key] != $val) {
                                if(!isset($record_new[$key]) || $record_new[$key] != $val) {
                                    // Record has changed
                                    $diffrec_full['old'][$key] = $val;
                                    $diffrec_full['new'][$key] = $record_new[$key];
interface/lib/classes/tform_actions.inc.php
@@ -301,6 +301,8 @@
                        //$this->dataRecord = $app->db->queryOneRecord("SELECT * FROM ".$liste["table"]." WHERE ".$liste["table_idx"]." = ".$this->id);
                        $this->dataRecord = $app->tform->getDataRecord($this->id);
                        $this->onBeforeDelete();
                        // Saving record to datalog when db_history enabled
                        if($app->tform->formDef["db_history"] == 'yes') {
                            //$old_data_record = $app->tform->getDataRecord($this->id);
@@ -337,6 +339,10 @@
        }
        
        function onBeforeDelete() {
            global $app, $conf;
        }
        function onAfterDelete() {
            global $app, $conf;
        }
interface/web/mail/mail_domain_del.php
@@ -48,7 +48,44 @@
    exit;
}
$app->uses("tform_actions");
$app->tform_actions->onDelete();
// Loading classes
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onBeforeDelete() {
        global $app; $conf;
        $domain = $this->dataRecord['domain'];
        // Before we delete the email domain,
        // we will delete all depending records.
        // Delete all forwardings where the osurce 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)."'");
        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']);
        }
    }
}
$page = new page_action;
$page->onDelete();
?>