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

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von Germanius, 10. Jan. 2011.

  1. Germanius

    Germanius New 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?
     
  2. Till

    Till Administrator

    Ich denke den Client musst Du nochmal am Ende mittels client_delete löschen.
     
  3. Germanius

    Germanius New 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.
     
  4. Till

    Till Administrator

    Nein, denn den Code denn Du in der Datei client_del.php siehst ist ja nur der code, der vom normalen Löschvorgang abweicht bzw. diesem hinzugefügt wurde. Schau Dir mal die tform actions Klasse an, die die Basis der in client_del.php definierten Klasse ist.
     
  5. Germanius

    Germanius New Member

    Aha! Jetzt ergibt das auch Sinn. Habs erweitert und nun funktioniert auch alles so wie es soll!
    Danke :)
     

Diese Seite empfehlen