Qualche tempo fa avevo necessità di visualizzare sulla home page lo stato di alcuni utenti del forum (vedi moderatori o staff), non essendo prodotto con un CMS, ho realizzato uno script che leggendo i dati dal db riporta lo stato di alcuni utenti.

il risultato è il seguente :


mentre lo script utilizzato è questo
Codice PHP:
<?
//-------------------------------------------------//
// Titolo : show_mod_online.php //
// Autore : Lemoeb (lemoeb@topolinux.org) //
// Versione : 0.1b //
// Data : Marzo 2006 //
// Data ult.mod. : //
// Licenza : GPL //
//-------------------------------------------------//

//Configurazione
//--------------
$db_host="localhost"; //Indentifica dove è situato il db, solitamente localhost
$db_user=""; //Utente per la connessione al db
$db_pass=""; //Password per la connessione al db
$db_name=""; //Nome del database a cui connettersi
$session_time=300; //Numero di secondi per determinare se un utente è online
$img_online="online.gif"; //Immagine utente on-line
$img_mangia="mangia.gif"; //Immagine utente che mangia
$img_dorme="dorme.gif"; //Immagine utente che dorme
$img_all_offline="suda.gif"; //Immagine nessun moderatore on-line
$gruppo_super_moderatori=3; //Identifica il numero gruppo super moderatori
$gruppo_moderatori=6; //Identifica il numero gruppo moderatori

//------------------------------------------------------------//
//Da questo punto in poi non è più necessario fare modifiche //
//tranne per casi particolari legati all'utente //
//------------------------------------------------------------//
$mod_online=0; // 0=nessun moderatore online

//Connessione al Database
//-----------------------
$connessione = mysql_connect($db_host, $db_user, $db_pass) or die ("Errore Db Conn");
$db=mysql_select_db ($db_name,$connessione) or die ("Errore Db select");

//recupero del tempo attuale e dell'ora
//-------------------------------------
$tempo=time();
$ora=date("H");

echo
"<TABLE border=\"0\">";

//Recupero dei moderatori e dei tempi di sessione
//-----------------------------------------------
$query_on_line="SELECT a.uid, a.username, b.time
FROM mybb_users a, mybb_sessions b
WHERE a.uid = b.uid
AND (a.additionalgroups IN ("
.$gruppo_super_moderatori.",".$gruppo_moderatori."
) OR usergroup IN ("
.$gruppo_super_moderatori.",".$gruppo_moderatori."))
"
;

//Esecuzione della query
//----------------------
$risultato = mysql_query($query_on_line,$connessione);

//Stampa dello stato utenti
//-------------------------
while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
//Incremento il tempo di sessione utente del numero
//di secondi deciso per vedere se è online
//-------------------------------------------------
$t_sessione=$riga["time"]+$session_time;

//Stampo il nome dell'utente
//--------------------------
echo "<TR><TD>".$riga['username']."</TD>";

//Cofronto il tempo di sessione dell'untente per determinare se
//è online ($t_sessione >= $tempo allora l'untente è online)
//-------------------------------------------------------------
if ($t_sessione >= $tempo)
{
$mod_online++;
echo
"<TD><font color=\"GREEN\"><strong>on-line</strong></font></td><td>
<img src=\"images/"
.$img_online."\"</TD></TR>";
}
else
{
echo
"<TD><font color=\"red\"> off-line</font>";
if (
$ora>21 || $ora <= 8) { echo "</td><td><img src=\"images/".$img_dorme."\">";}
if (
$ora>12 && $ora <=14) { echo "</td><td><img src=\"images/".$img_mangia."\">";}
if (
$ora>19 && $ora <=21) { echo "</td><td><img src=\"images/".$img_mangia."\">";}
echo
"</TD></TR>";
}

}
echo
"</TABLE>";
//echo "</TR>";
//se non ci sono moderatori online visualizzo
//il messaggio di avviso con relativo smile
//-------------------------------------------
if ($mod_online==0)
{
echo
"<TABLE border=\"0\">";
echo
"<TR><TD align=\"center\">Nessuno dello staff &egrave online
<img src=\"images/"
.$img_all_offline."\"></TD></TR></TABLE>";
}

?>
Le immagini di fianco allo stato, cambiano a seconda dell'orario e dello stato stesso.

Ho utilizzato :

=> per indicare un utente connesso al forum
=> per indicare se un utente è offline durante le ore notturne(>21 e <=8)
=> per indicare se un utente è offline durante le ore di pranzo o cena
=> per indicare che nessun moderatore è online

Ho pubblicato il tutto sperando possa tornare utile a qualcuno.

Lo script è facilmente configurabile e personalizzabile.

Ciao

Leandro