Back to top

Autore Topic: componente gestionale per wisp freeradius  (Letto 2989 volte)

Offline dragoalato1988

  • Nuovo arrivato
  • *
  • Post: 12
  • Sesso: Maschio
    • Mostra profilo
componente gestionale per wisp freeradius
« il: 11 Giu 2011, 13:20:30 »
salve ragazzi sto cercando di scrivere un componente per joomla 1.5 e poi 1.6 che vada ad assecondare i bisogni della nostra realta. noi siamo un Wisp, per gestire i nostri utenti utiliziamo un server radius, basato su linux o meglio su freeradius.

La gestione viene tutta effettuata tramite un mini portale web interno che ci permette di creare profili, utenze, gestire fatturazione e quant'altro.

la mia idea è di creare un componente che abbia le stesse caratteristiche che vada quindi ad interaggire con il DB del server radius.

Circa 2 settimane fa ho iniziato la lavorazione del componente, ma qui i primi problemi con il recuperare giustamente i dati, o meglio cerco di spiegare un po meglio

area utenti:

ho creato un model che mi recupera i dati di tutti gli utenti dalla tabella user
Codice: [Seleziona]
     function RecuperoUserLista()
     {
       $dbxo = new externaldatabase ( 'radius' ); 
       $db = $dbxo->getDB ();

       $query = "SELECT * FROM rm_users WHERE rm_users.groupid > 0 ORDER BY rm_users.username ASC ";
       $db->setQuery($query);
       $rows = $db->loadAssocList();
       if ($db->getErrorNum()) {
       echo $db->stderr();
       return false;
           } 
       return $rows; 
      }

poi li passo alla view.html.php dove con le seguenti informazioni
Codice: [Seleziona]
        $model = &$this->getModel();

//richiama i metodi 
        $rows = $model->RecuperoUserLista();
//marca le array per mandarle in template
        $this->assignRef( 'rows', $rows );


mando al template i dati per poi con un "for" vado a creare il listato degli utenti recuperati
fino qui tutto ok.

ora arriva il problema vorrei far colorare lo sfondo della cella username dell'utente se esso sta navigando on-line.

nel php procedurale questo gia lo avevo risolto al momento della select di recupero degli utenti ma qui mi trovo un po cosi cosi.
in pratica nel database del freeradius ho una tabella chiamata "radacct". questa tabella contiene in linea di massima la registrazione delle sessioni eseguite, ha un numero id ma non è legato alla tabella username.
essendo che questa tabella contiene ad oggi quasi 4000 righe  non è semplice fare eseguire una query.

in codice procedurale facevo una select * FROM radacct LIKE = username

perche l'unico modo per provare il risultato è quello di filtrare per username.

ho dato il comando LIKE perche se un utente è registrato come pinco.pallino nella tabella user ma quando va a fare il login per la rete internet mette PINCO.PALLINO, nella tabella viene registrato quest'ultimo, quindi una eventuale query SELECT * FROM radacct WHERE username = "pinco.pallino" non produrrebbe alcun risultato.

ora la mia domanda è come posso fare per risolvere questo mio dilemma? come posso portare in una view contemporaneamente 2 risultati legati tra loro da una username?
Credetimi non è semplice da spiegare XD
spero che possiate aiutarmi

Maurizio




Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:componente gestionale per wisp freeradius
« Risposta #1 il: 16 Giu 2011, 12:40:27 »
Riepilogando il problema:
tu vuoi verificare dalla tabella rm_users se l'utente è online (tabella radacct) ??

se così è, fammi capire... nella tabella radacct per l'utente pinco.pallino cosa trovo? trovo PINCO.PALLINO oppure pallino? oppure pinco?

il problema potrebbe essere nella gestione dei maiuscoli o nella substr. Nel primo caso usa nella query sql la funzione upper (ossia in where avrai una condizione di questo tipo upper(username) = upper('pinco.pallino')  )

nell'altro caso devi costruirti una funzioncina in mysql dove fai uno split sul '.' dell'username e poi ti vai a prendere con l'analisi dell'array la giusta porzione del nome.... altrimenti non puoi aggiungere una colonna nella tabella rm_users, dove gli vai a scrivere il nome che puoi trovare nella radacct?

ciao
B.

Offline dragoalato1988

  • Nuovo arrivato
  • *
  • Post: 12
  • Sesso: Maschio
    • Mostra profilo
Re:componente gestionale per wisp freeradius
« Risposta #2 il: 16 Giu 2011, 20:27:36 »
aspetta per farti capire, ogni volta che un utente accede ad internet nella tabella radacct viene creato un record con tutti i dati di inzio
connessione, e nella colonna radacctstop fino a che la connessione è aperta c'è il valore NULL quando il cliente si disconnette viene inserito la data di disconnessione
l'unico valore che lega queste righe alla tabella rm_user è la colonna username.
qui c'è il problema perche mentre nella tabella rm_user la username è sempre scritta in piccolo "pinco.pallino" nella tabella radacct mette nella username la user che digita il cliente.
quindi se lui digita Pinco.PALLINO o PINCO.PALLINO o pinco.pallino, lui inserisce il valore nel modo che viene scritto.
facendo Un like dovrebbe risolvere.  come posso farlo?

Offline zeus

  • Esploratore
  • **
  • Post: 71
  • Sesso: Maschio
  • Silly rabbit, trix are not for kids
    • Mostra profilo
Re:componente gestionale per wisp freeradius
« Risposta #3 il: 17 Giu 2011, 08:49:19 »
Non basta fare la like... non sempre funzionerebbe.... soprattutto su un sistema linux...
la soluzione definitiva è questa:
SELECT * FROM radacct WHERE UPPER(username) = UPPER('$username_scritta_dall_utente')

la funzione UPPER non fa altro che trasformare la stringa passata in tutto maiuscolo. Quindi compari la username della tabella passata in maiuscolo con quello che ti passa l'utente trasformato in tutto maiuscolo e sicuramente avrai un match....

altra soluzione può essere che quando l'utente si logga tu scriva nella tabella radacct la username in tutto minuscolo e così non avrai mai problemi di sorta.... ma non conosco la piattaforma e quindi non so se questo si può fare.

fammi sapere
Beppe

 



Web Design Bolzano Kreatif