Remote - groupid von client auslesen

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von ranger, 20. März 2010.

  1. ranger

    ranger New Member

    Hallo!

    Erstmal muss ich nochmal ein Lob aussprechen...die neue ISPConfig3-Version ist echt fein, grad das mit dem Remoting.
    Aber dazu direkt mal eine Frage:
    Ich möchte nur Datensätze eines bestimmten clients ausgeben lassen. Da aber in den Tabellen immer nur die sys_groupid und nie die client_id steht frage ich mich, wie ich an die sys_groupid des jeweiligen clients rankomme!?
    Bei der Funktion client_get bekomme ich ja "nur" das was in der DB steht, aber keine dazugehörige sys_groupid.
    Also hier die Fragen:
    1. wie komme ich per remoting an die sys_groupid des clients ran
    2. oder wisst ihr einen anderen weg um immer nur die Daten (Domains, Email-Doamins, E-Mail-Alias etc) eines jeweiligen Cients über Remoting zu gelangen?!

    Bin für jeden Tipp dankbar.

    Grüße, Axel
     
  2. Till

    Till Administrator

    Im Moment kannst Du ja nur einzelne Datensätze abfragen, da das API ursprünglich dafür gedacht ware um von außen Datensätze in ISPConfig einzufügen. Suchfunktionen müssen in das remoting API noch integriert werden. Es werden übrigens noch Maintainer für das API gesucht, also Freiwillige vor ;)
     
  3. ranger

    ranger New Member

    Verstehe!
    Hatte es schon zB mit mail_user_get und als Parameter ein Array, was ein Subselect beinhaltet...ging natürlich nicht, weil die Values ja gequotet werden.
    Also ich würde jetzt die remoting.inc.php um die Funktionen erweitern, die ich benötige, wie zB Listen von Emails in Abhängigkeit vom Client bekommen etc.
    Bei Fragen würde ich hier ins Forum reinschreiben.
    An wen soll/kann/darf ich denn dann meine erweiterten Funktionen senden, damit Sie ggf. im nächsten Release enthalten sind?!

    Grüße, Axel
     
  4. Till

    Till Administrator

    Sende die geänderten datein bitte an dev [at] ispconfig [dot] org

    Es wäre gut wenn Du die neuen Funktionen und Parameter hier vorab kurz erläuterst und zur Diskussion stellst bevor Du sie implementierts. Dann können da noch die Anregungen von anderen usern mit einfließen und es gibt nicht nachher das problem, dass die Funktionen unter Umständen nicht so in das release übernommen werden.
     
  5. Till

    Till Administrator

    Ich fange hier gleich mal mit einem Vorschlag an. Ich denke wir könnten die bestehenden Funktionen:

    *_get
    *_add
    *_update
    *_delete

    um eine Funktion wie *_getall oder so ergänzen, bei derwie als Parameter zum einen die obligatorische session_id haben und dann als 2. Parameter ein Array bestehend aus angefragtem Parameter und dem Wert, also z.B.

    sites_web_domain_getall($session_id, array('domain => 'test.tld'));

    oder

    sites_shell_user_getall($session_id, array('domain_id' => 1, 'active' => 'y'));

    wobei die Parameter mit und verknüpft werden.
     
  6. ranger

    ranger New Member

    Ok, werde ich machen!

    Ich habe übrigens auch mal folgendes probiert, klappte aber nicht und frage mich warum...kannst Du mir ggf. verraten warum nicht:

    PHP:
    class remoting {
        
        
    //* remote session timeout in seconds
        
    private $session_timeout 600;
        
        private 
    $server;
        public 
    $oldDataRecord;
        public 
    $dataRecord;
        public 
    $id;
        public 
    $app;
        
        
    /*
        These variables shall stay global. 
        Please do not make them private variables.
        
        private $conf;
        */

        
    public function __construct()
        {
            global 
    $server;
            
    $this->server $server;

            
    $this->app $app;
            
    /*
            $this->conf = $conf;
            */
        
    }
    Also eigentlich nix anderes als die Variable $app verfügbar zu machen.

    Wenn ich über
    PHP:
    $this->soapClient->app->remoting_lib->loadUserProfile(1);
    die Client-Daten des Clients mit ID=1 auslesen möchte bekomm ich immer den Fehler
    Aber warum?!
     
  7. ranger

    ranger New Member

    Man doch über die *_get Funktion en schon ein array mitgeben, welches dann zu einem Query zusammengebaut werden und die jeweilige DB-Tabelle filtert. Nur tabellenübergreifende Queries sind zur Zeit nicht möglich....oder?!
     
  8. Till

    Till Administrator

    Müsstes es nicht lauten:

    $this->app->remoting_lib->loadUserProfile(1);

    Das macht meines Erachtens nach nicht viel Sinn, da die get Funktion nur ein eindimensionales Array zurück gibt (Du erhälts also immer exakt einen Datensatz) während die getall Funktion ein mehrdimensionales Array zurück geben würde, da es ja mahr als einen record geben kann, der auf die Abfrage passt.

    das würde ich über das API im Moment auch nicht realisieren, da Du dies ja auch über eine Kombination von get bzw getall Abfragen realisieren kannst.
     
  9. ranger

    ranger New Member

    ist aufruf von meiner lokalen PHP-Klasse.
    Mit
    rufe ich zB die Remote-Methode "mail_user_get" auf.
    Kann es sein, dass das deswegen die Methode "loadUserProfile" nicht funktioniert, weil keine Sessin an die Methode übergeben wird?!

    Verstehe was Du meinst. Das ist ein Ansatz. Werde da mal was für meine Bedürfnisse zusammenbauen und das dann hier zur Diskussion veröffentlichen.
     
  10. Till

    Till Administrator

    Bei mir funktioniert die einwandfrei in 3.0.2
     
  11. ranger

    ranger New Member

    Seltsam...dann werde ich mal zur ursachenforschung übergehen und das ergebnis hier mal posten, warum der aufruf bei mir nicht funzt.
    Danke schon mal!
     
  12. Till

    Till Administrator

    Die Funktion loadUserProfile ist keine remoting Funktion, sie ist nicht dafür gedacht von außen aufgerufen zu werden.
     
  13. ranger

    ranger New Member

    Also, nach einigen Nächten in denen ich mich mit dem Remote beschäftigt habe folgendes:
    in der Datei remoting.inc.php habe ich eine neue Funktion hinzugefügt:
    PHP:
        public function client_get_groupid($session_id$client_id)
        {
            global 
    $app;
            if(!
    $this->checkPerm($session_id'mail_domain_get')) {
                
    $this->server->fault('permission_denied''You do not have the permissions to access this function.');
                return 
    false;
            }
            
    $app->uses('remoting_lib');
            
    $app->remoting_lib->loadFormDef('../client/form/client.tform.php');
            
    $app->remoting_lib->formDef['db_table'] = 'sys_group';
            
    $sys_group $app->remoting_lib->getDataRecord($client_id);
            return 
    $sys_group['sys_groupid'];    
        }
    Der Permission-Check ist noch nicht ganz sauber, aber ansonsten hilft die Funktion die sys_groupid des Clients auszulesen, weil in den ganzen anderen Tabellen (zB mail_user) nicht die client_id sondern immer die sys_groupid des Clients steht und per client_get erhält man diese leider nicht.

    Nur so am Rande: Methoden wie zB get_mail_userAll brauch man doch gar nicht, da man ja anstatt einer ID als Parameter einfach ein Array mit Abfrage-Parameter übergeben kann.
    PHP:
    $this->soapClient->mail_user_get($this->soapSession, array("mailuser_id" => $uid"sys_groupid" => $sys_groupid))
    $this->soapCleint ist mein lokales Soap-Object um auf ispconfig zuzugreifen.
    Unde mit
    PHP:
    $this->soapClient->mail_user_get($this->soapSession, array("1" => "1"))
    liefert mir alle Datensätze aus der Tabelle.

    Ich häng jetzt aber noch an einem anderen Problem, mache dafür aber einen neuen Thread auf.

    Bis ierhin erst einmal vielen Dank für Eure Hilfe.

    grüße, Axel
     

Diese Seite empfehlen