Remote - groupid von client auslesen

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
 

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 ;)
 

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
 

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.
 

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.
 

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
Call to a member function loadUserProfile() on a non-object
Aber warum?!
 

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?!
 

Till

Administrator
Müsstes es nicht lauten:

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

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?!

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.

Nur tabellenübergreifende Queries sind zur Zeit nicht möglich....oder?!

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.
 

ranger

New Member
$this->soapClient->app->remoting_lib->loadUserProfile(1);
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?!

sites_shell_user_getall($session_id, array('domain_id' => 1, 'active' => 'y'));
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.
 

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!
 

Till

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

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
 

Werbung

Top