Maildomains eine CLients

Rupertt

New Member
Hallo,

ich baue gerade ien plugin und habe eine Seite erstellt die mir alle Clients listet. wenn ich auf einen Client klicke komme ich in eine Übersicht in der ich mir schon einige Daten des Client anzeigen lassen kann, alle aus der Tabelle client.

Jetzt möchte ich mir noch alle Emaildomain dieses Clients an zeigen lassen, wie kann ich das realisieren?
Muss ich diese Anpassungen in der tform datei macchen?

So siht meine datenblatt.tform.php aus, das item "maildomain" war meine Idee wie es gehen könnte, leider ohne erfolg.

PHP:
<?php

// Title of the form.
$form['title']             = 'Datenblatt';
$form['description']     = '';
$form['name']             = 'Datenblatt';
$form['action']            = 'datenblatt_edit.php';
$form['db_table']        = 'client';
$form['db_table_idx']    = 'client_id';
$form['db_history']        = 'no'; 
$form['tab_default']    = 'Kunde';
$form['list_default']    = 'datenblatt_list.php';
$form['auth']            = 'no'; 


$form['auth_preset']['userid']  = 0;
$form['auth_preset']['groupid'] = 0;   
$form['auth_preset']['perm_user'] = 'riud';
$form['auth_preset']['perm_group'] = 'riud';
$form['auth_preset']['perm_other'] = ''; 

// The form definition of the first tab. The name of the tab is called 'message'. We refer
// to this name in the $form['tab_default'] setting above.
$form['tabs']['Kunde'] = array(
    'title'     => 'Kunde', // Title of the Tab
    'width'     => 100,       // Tab width
    'template'     => 'templates/datenblatt_edit.htm', // Template file name
    'fields'     => array(

        //*** BEGIN Datatable columns **********************************
         'client_id' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
                        'datasource' => array(
                    'type' => 'SQL',
                    'querystring' => 'SELECT client_id, company_name FROM client ORDER BY client_id;',
                    'keyfield'    => 'client_id',
                    'valuefield'  => 'company_name'
                                  ),
            'cols'        => ''
        ),
       'company_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'contact_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'customer_no' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'maildomain' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
           'datasource' => array(
                     'type' => 'SQL',
                       'querystring' => '      SELECT m.domain, u.client_id
                                    FROM mail_domain m, sys_user u, client c
                                    WHERE m.sys_groupid = u.default_group
                                    AND u.client_id = c.client_id
                                    AND c.client_id = f,
                        'keyfield'    => '',
                        'valuefield'  => ''
                                      ),
            'cols'        => ''
        )
    ##################################
    # END Datatable fields
    ##################################

        //*** END Datatable columns **********************************
    )
);
?>


danke
 

Till

Administrator
Du hast vergesen das keyfield uns das valuefield zu setzen, ohne diese Angaben können keine Werte angezeigt werden.
 

Rupertt

New Member
Hallo,


ich hatte bereits versucht dort m.domain oder nur domain einzutragen, leider ist das formular immer noch leer.
Ich würde die einzelnen maildomains dann in eine simple Tabelle packen wollen.
 
Zuletzt bearbeitet:

Till

Administrator
Funktioniert denn die Query:

SELECT m.domain, u.client_id
FROM mail_domain m, sys_user u, client c
WHERE m.sys_groupid = u.default_group
AND u.client_id = c.client_id
AND c.client_id = f

wenn Du sie in phpmyadmin ausführst? Was idet denn z.B. die Variable f, die scheint ja nirgends gesetzt zu werden.
 

Rupertt

New Member
ups sorry.

Das f war ein test um die client ID zu übergeben.
Ich frag mal so rum:

Wie würdest du es gestalten wenn du alle emaildomains von Client XY gelistet haben möchtest, ich habe ja schon die client_id.(im Sinne des ispconfig frameworks natürlich.)


danke
 

Till

Administrator
Jeder Client hat seine eigene Gruppe, Du kannst also einfach nach der sys_groupid eingrenzen.

SELECT domain_id, domain FROM mail_domain WHERE sys_groupid = $sys_groupid

Du musst antürlich daran denken, dass Du nicht ohne weiteres auf die ID des anderen select Feldes zugreiufen kannst, denn Du weißt ja nicht ob es im Browser geändert wurde. Du müsstest also bei Änderungen der clientID ggf. das Formular neu laden oder aber die Feldinhalte per Ajax anpassen.
 

Rupertt

New Member
und wie genau würde ich das in ein ispconfig Modul einbauen,
ich versuche schon in dem template eine php tag zu machen und dort manuelle queries, aber dann lädt die seite nicht.
Die funktion "$MAILDOMAINS = $app->db->queryAllRecords($sql);" verstehe ich noch nicht ganz, ich könnte ka die DB connection nutzen die ispconfig eh schon offen hat.
 

Till

Administrator
ich versuche schon in dem template eine php tag zu machen und dort manuelle queries, aber dann lädt die seite nicht.

Nee, so geht das nicht. Niemals PHP code in ein Template einbauen! Schau Dir z.B. mal den Server selector des web_domain Formulares an, dort ist es per Ajax gelöst. Alternativ kannst Du natürlich auch das Formular beim onChange Event des Optionsfeldes neu laden.

Die funktion "$MAILDOMAINS = $app->db->queryAllRecords($sql);" verstehe ich noch nicht ganz, ich könnte ka die DB connection nutzen die ispconfig eh schon offen hat.

Du nutzt doch damit die offene DB connection von ISPConfig. $app->db ist ein Objekt der Datenbankverbindung und queryAllRecords ist die Funktion dieser bestehenden mysql Verbindung die Dir alle Einträge zu der übergebenen SQL Abfrage als Array zurück gibt.
 

Rupertt

New Member
danke für die Hinweise, ich komme schon etwas weiter.
Ich habe jetzt ein onshow function genbaut:

PHP:
function onShow()
    {
        global $app, $conf;

          $sql = "SELECT m.domain, u.client_id
                FROM mail_domain m, sys_user u, client c
                WHERE m.sys_groupid = u.default_group
                AND u.client_id = c.client_id
                AND u.client_id = $client_id";
        $maildomains = $app->db->queryAllRecords($sql);
        var_dump($maildomains);

        parent::onShow();
    }

Wie komme ich denn an die client_id die ich in der datei datenblatt.tform.php definiert habe?
In dem template kann ich die ja per {tmpl_var name='client_id'} ansprechen.

PHP:
$form['tabs']['Kunde'] = array(
    'title'     => 'Kunde', // Title of the Tab
    'width'     => 100,       // Tab width
    'template'     => 'templates/datenblatt_edit.htm', // Template file name
    'fields'     => array(

        //*** BEGIN Datatable columns **********************************
         'client_id' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
                        'datasource' => array(
                    'type' => 'SQL',
                    'querystring' => 'SELECT client_id, company_name FROM client ORDER BY client_id;',
                    'keyfield'    => 'client_id',
                    'valuefield'  => 'company_name'
                                  ),
            'cols'        => ''
        ),
....


danke
 

Rupertt

New Member
cool, ich habe das jetzt so:

PHP:
 function onShow()
    {
        global $app, $conf;

          $sql = "SELECT m.domain, u.client_id
                FROM mail_domain m, sys_user u, client c
                WHERE m.sys_groupid = u.default_group
                AND u.client_id = c.client_id
                AND u.client_id = $this->id";
        $maildomains = $app->db->queryAllRecords($sql);
        //var_dump($maildomains);
        foreach( $maildomains as $maildomain) {
            //echo $maildomain['domain'];
                    
            
        }
        parent::onShow();
    }


muss ich nun mit dem foreach eine Tabelle machen um die maildomains zu listen oder kann ich das im template machen und wie würde ich im template "$maildomain['domain']" ausgeben?
 

Till

Administrator
Das forach brauchst Du nicht, das geht im template einfacher, indem Du das $maildomains array mit $app->tpl->setLoop('maildomains',$maildomains); dem template zuweist und dann mit:

<tmpl_loop name="maildomains">

</tmpl_loop>

durch die Einträge gehst.
 

Rupertt

New Member
Hallo,

ich habe das Plugin jetzt fast fertig.
mir fehlt noch das ich als eingelogter Client die eigene ClientID im *list Fenster zur verfügung brauche.

Als Admin listet er brav alle Clients und ich kann mein Datenblatt für jeden Client generieren.
Muss der query für den Client evtl. anders lauten?

danke
 

Till

Administrator
Lass Dir doch einfach die query mit echo ausgeben und sieh was sich ändert, wenn Du als client eingeloggt bist.
 

Rupertt

New Member
mmh, ich versteh di list seite noch nicht, bei den _edit seiten ging das ja irgentwann:

PHP:
<?php

require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');

// Path to the list definition file
$list_def_file = 'list/datenblatt.list.php';


// Check the module permissions
if(!stristr($_SESSION['s']['user']['modules'],'service')) {
    header('Location: ../index.php');
    die();
}

// Loading the class
$app->uses('listform_actions');

// Optional limit
//$app->listform_actions->SQLExtWhere = "type = 'id'";

// Start the form rendering and action ahndling
$app->listform_actions->onLoad();

?>

in diesem template werden ja als admin die passenden Daten übertragen:


PHP:
<h2><tmpl_var name="list_head_txt"></h2>
CLIENTID: {tmpl_var name="client_id"}
<div class="panel panel_list_Datenblatt">


  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
            <th class="tbl_col_company_name" scope="col"><tmpl_var name="company_name_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_client_id"><select name="search_client_id" onChange="submitForm('pageForm','service/datenblatt_list.php');">{tmpl_var name='search_client_id'}</select></td>
            <td class="tbl_col_company_name"><input type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','service/datenblatt_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_client_id"><a href="#" onClick="loadContent('service/datenblatt_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
            <td class="tbl_col_company_name"><a href="#" onClick="loadContent('service/datenblatt_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="company_name"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">    
                <a class="icons16 icoDelete" href="javascript: del_record('service/?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="3"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>

</div>
 

Till

Administrator
Ist denn der User mit dem Du Dich eingeloggt hast ein Reseller und hat dieser Reseller auch clients die aufgelistet werden können? Wenn nicht ist die Client Liste leer, denn ein client kann nicht auf andere Clients zugreifen. das ist ja der Sinn des Berechtigungssystems.

Was wo angezeigt wirst hast Du ja in der Datei datenblatt.list.php definiert.
 

Rupertt

New Member
in der liste sollten nur die eigenen Daten (id, name) auftauchen.
Ich möchte das selbe file für beide Fällte (admin, client) nutzen.
Reseller habe ich im momen noch nicht.

PHP:
<?php

// Name of the list
$liste['name'] = 'Datenblatt';
$liste['table'] = 'client';
$liste['table_idx'] = 'client_id';
$liste['search_prefix'] = 'search_';
$liste['records_per_page']= 15;
$liste['file'] = 'datenblatt_list.php';
$liste['edit_file'] = 'datenblatt_edit.php';
$liste['paging_tpl'] = 'templates/paging.tpl.htm';

$liste['auth'] = 'yes';

//****** Search fields

$liste['item'][] = array(
            'field'      => 'client_id',
            'datatype'   => 'VARCHAR',
            'formtype'   => 'SELECT',
            'op'         => '=',
            'prefix'     => '',
            'suffix'     => '',
            'width'      => '',
            'datasource' => array(
                    'type' => 'SQL',
                    'querystring' => 'SELECT client_id FROM client ORDER BY client_id;',
                    'keyfield'    => 'client_id',
                    'valuefield'  => 'client_id'
                                  ),
            'value'      => ''
        );
/*
$liste["item"][] = array(    'field'        => "client_id",
                            'datatype'    => "INTEGER",
                            'formtype'    => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'        => "",
                            'value'        => "");
*/
$liste["item"][] = array(    'field'        => "company_name",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
?>
 

Till

Administrator
Ein Client hat keinen Zugriff auf sich selbst, sonst könnte er ja seine Limits ändern. Du kannst höchstens versuchen das ISPConfig Berechtigungssystem zu deaktivieren indem Du

$liste['auth'] = 'yes';

auf

$liste['auth'] = 'false';

setzt. Dann wird aber jedem der die Datei aufruft alles angezeigt.
 

Werbung

Top