Maildomains eine CLients

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von Rupertt, 23. März 2011.

  1. Rupertt

    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
     
  2. Till

    Till Administrator

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

    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: 23. März 2011
  4. Till

    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.
     
  5. Rupertt

    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
     
  6. Till

    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.
     
  7. Rupertt

    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.
     
  8. Till

    Till Administrator

    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.

    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.
     
  9. Rupertt

    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
     
  10. Till

    Till Administrator

    Alle per post Request übergebenen Variablen stehen im Array $this->dataRecord zur Verfügung.
     
  11. Rupertt

    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?
     
  12. Till

    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.
     
  13. Rupertt

    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
     
  14. Till

    Till Administrator

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

    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">    
                    <
    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>
     
  16. Till

    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.
     
  17. Rupertt

    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'        => "");
    ?>
     
  18. Till

    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.
     

Diese Seite empfehlen