API - Client löschen inkl. Sites, FTP, Mail, ..

Germanius

Member
Soweit ich gesehen habe gibt es bislang keine Funktion mit der man über die API auf einmal einen Client inkl. aller zugehörigen Dinge wie FTP, Mail, Sites etc. löschen kann oder?
Ich hab mir jetzt folgendes gebastelt:

/usr/local/ispconfig/interface/lib/classes/remoting.inc.php
PHP:
public function client_delete_everything($session_id, $client_id)
    {
        global $app, $conf;
        if(!$this->checkPerm($session_id, 'client_delete_everything')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $client_id = intval($client_id);
    $client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");

    $tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
        $tables_array = explode(',',$tables);
        $client_group_id = intval($client_group['groupid']);
        
        $table_list = array();
        if($client_group_id > 1) {
            foreach($tables_array as $table) {
                if($table != '') {
                    $records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
                    $number = count($records);
                    if($number > 0) $table_list[] = array('table' => $table."(".$number.")");
                }
            }
        }


    if($client_id > 0) {            
            // remove the group of the client from the resellers group
            $parent_client_id = intval($this->dataRecord['parent_client_id']);
            $parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = $parent_client_id");
            $client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
            $app->auth->remove_group_from_user($parent_user['userid'],$client_group['groupid']);
            
            // delete the group of the client
            $app->db->query("DELETE FROM sys_group WHERE client_id = $client_id");
            
            // delete the sys user(s) of the client
            $app->db->query("DELETE FROM sys_user WHERE client_id = $client_id");
            
            // Delete all records (sub-clients, mail, web, etc....)  of this client.
            $tables = 'client,dns_rr,dns_soa,dns_slave,ftp_user,mail_access,mail_content_filter,mail_domain,mail_forwarding,mail_get,mail_user,mail_user_filter,shell_user,spamfilter_users,support_message,web_database,web_domain,web_traffic';
            $tables_array = explode(',',$tables);
            $client_group_id = intval($client_group['groupid']);
            if($client_group_id > 1) {
                foreach($tables_array as $table) {
                    if($table != '') {
                        $records = $app->db->queryAllRecords("SELECT * FROM $table WHERE sys_groupid = ".$client_group_id);
                        // find the primary ID of the table
                        $table_info = $app->db->tableInfo($table);
                        $index_field = '';
                        foreach($table_info as $tmp) {
                            if($tmp['option'] == 'primary') $index_field = $tmp['name'];
                        }
                        // Delete the records
                        if($index_field != '') {
                            if(is_array($records)) {
                                foreach($records as $rec) {
                                    $app->db->datalogDelete($table, $index_field, $rec[$index_field]);
                                }
                           }
                        }
                        
                    }
                }
            }
            
            
            
        }
        
        return false;
}

Es werden auch alle Dinge gelöscht wie FTPAccs, Mailboxen, Sysuser etc. Das einzige was er nicht löscht ist der Client ansich, der bleibt.
Fehlt noch irgendwas? Ist irgendwas falsch?
Oder muss ich den Client nochmal extra über die client_delete Funktion löschen?
 

Germanius

Member
Die Funktion hab ich größtenteils aus der /usr/local/ispconfig/interface/web/client/client_del.php rauskopiert.
Da wird der Client ansich doch auch über die Weboberfläche mit gelöscht. Ich seh da nirgends, dass dort der Client nochmal extra gelöscht wird, müsste doch dann eigentlich ohne gehen.
 

Werbung

Top