Risultato:

Link attivo:
http://www.roaclan.net/index.php?showtopic=980
Questa mod funziona su:
- Invision Power Board 2.1.x
- Invision Power Board 2.2.x
- Invision Power Board 2.3.x
Se hai PhpBB continua qui.
Questa mod NON funziona su:
- Invision Power Board 1.3.x
Questa mod NON è installabile su:
Requisiti per l'installazione:
- Accesso ftp allo spazio web in cui contenete gli script di invision
- Possibilità di creare directory nel vostro spazio web
- Possibilità di scrivere all'interno di una directory del vostro server [fopen() con wb]
- Possibilità di usare fopen() per aprire destinazioni remote
Passo 1: Creazione del campo Tracker Id
Per prima cosa bisogna creare un Custom Profile Field dal vostro pannello di controllo di Invision e nominarlo Tracker Id quindi dalla sezione Management vi spostate utilizzando il menu situato a sinistra in Custom Profile Fields.
Compilate i campi in questo modo:
- Field Title Tracker Id
- Description Inserisci qui il tuo ID Del tracker
- Field Type Text Input
- Maximun Input 7
- Display Order 0
- Expected input format [Scegliete voi se metterlo o no, perchè può dare problemi] nnnnnnnnn
- Option Content (for drop downs) Lasciate il campo vuoto
- Include on registration Page Yes
- Field MUST be completed and not left empty? No
- Field can be edited by the member? Yes
- Make this a private profile field? No
- Make Admin and Super Moderator Editable/Viewable Only? No
NOTA: il campo Field Title deve essere compilato esattamente con Tracker Id altrimenti non vi funzionerà la mod!
Per ciò che riguarda l'ultimo campo (Topic View Format?) inserite questo codice html che comparirà al di sotto della scheda/avatar utente. Questo HTML è ottimizzato per una skin scura quindi se siete in possesso di una skin chiara cambiate i colori ovviamente agendo nell'html. Tralaltro se vi interessa togliere delle informazioni che non ritenete necessarie potete rimuovere una o più righe:
HTML:
And i'm so skilled »
<br><br>
<strong><a href="http://www.aaotracker.com/usertracker.php?userid={content}"><span style="color:#039fe2">{nick}</span></a> </strong><br><span style="color:#9b9b9b">{rank}</span><br>
<img src="http://aaotracker.com/Images/stars/{stars}.gif">
<br><br>
Honor: <strong>{honor}</strong><br>
Fragrate: <span style="color:#99FFFF"><strong>{fragrate}</strong></span><br>
Activity: <span style='color:#FF3366'><strong>{activity} %</strong></span><br>
Popularity: <span style='color:#00FF33'><strong>{popularity} %</strong></span><br>
Experience: <span style='color:#33CCFF'><strong>{experience} %</strong></span><br>
<br>
Next Honor: <span style='color:#FFCC99'><strong>{nexthonor} %</strong></span><br><br>
I pwnd <span style='color:#99CC66'><strong>{kills}</strong></span> n00bz <br />
I rosik <span style='color:#FF99CC'><strong>{kia}</strong></span> times<br />
ROE: A lot...<br />
<br>
Actually i'm <a href="http://www.aaotracker.com/usertracker.php?userid={content}"> <img border="0" src="http://www.aaotracker.com/trackericon.php?userid={content}&style=6"></a><br /><br></strong><span style="color:#9b9b9b">Last update {updated}<br>{status}</span><br>
Le variabili utilizzate (quelle comprese tra graffe) verranno sostituite con le informazioni prelevate dal tracker e sono:
- {title} verrà sostituito con "Tracker Id"
- {content} verrà sostituito con l'id tracker dell'utente
- {rank} verrà sostituito con il rank dell'utente (Seargent/Major/General/Recruit...)
- {stars} verrà sostituito con il nome dell'immagine che rappresenta le stelline dell'utente [senza il suffisso .gif]
- {nick} verrà sostituito con il nick di gioco dell'utente
- {guid} verrà sostituito con la guid dell'account
- {kills} verrà sostituito con il numero delle kills dell'utente
- {kia} verrà sostituito con il numero delle kia dell'utente
- {honor} verrà sostituito con l'honor dell'utente
- {nexthonor} verrà sostituito con la percentuale senza '%' del completamento dell'honor successivo dell'utente
- {fragrate} verrà sostituito con il fragrate dell'utente
- {activity} verrà sostituito con la percentuale senza '%' dell'activity dell'utente
- {popularity} verrà sostituito con la percentuale senza '%' del popularity dell'utente
- {experience} verrà sostituito con la percentuale senza '%' dell'experience dell'utente
- {longestsession} verrà sostituito con il numero di ore che formano la sessione più lunga dell'utente
- {bestmap} verrà sostituito con la mappa preferita dell'utente
- {updated} verrà sostituito con l'ora e la data dell'ultimo aggiornamento delle informazioni del tracker
- {status} verrà sostituito con "Stat cache Created!" quando si creerà per la prima volta il profilo utente o "Stat cache Updated!" quando si aggiorneranno le statistiche
Al termine delle modifiche dovreste trovarvi davanti ad una situazione come questa:

Se provate a registrar un utente di prova vedrete che comparirà il campo "Tracker Id".
Passo 2: Creazione delle directory per la cache del tracker
Come potete ben immaginare se attingessimo al sito del tracker in continuazione il sito diventerebbe impraticabile vista la lentezza con cui fopen accede al tracker: dobbiamo quindi creare una cache locale in cui salvare una volta al giorno tutte le pagine dei profili degli utenti iscritti.
NOTA: L'ggiornamento viene fatto automaticamente una volta al giorno e se il tracker non fosse disponibile in quel momento o se l'utente avesse il profilo privato apparirà una scritta con "Informazioni del tracker non disponibili! L'utente potrebbe avere il profilo privato o il tracker non è momentaneamente disponibile!" e bisognerà aspettare 24 ore perchè si aggiorni nuovamente il profilo del tracker.
Tornando alla creazione delle directory, attraverso il vostro client ftp andate sulla root in cui avete installato invision e spostatevi nella cartella cache. A questo punto create una cartella di nome profiles e successivamente se siete in un server linux utilizzate il comando CHMOD e con permessi 777 per assegnare i diritti allo script di scrivere all'interno. Se possedete un server Windows allora saltate quest'ultimo passo in quanto il comando CHMOD non è riconosciuto.
A questo punto avete completato la parte relativa alla creazione delle directory, passiamo a quella più difficile: la modifica dei files di invision.
Passo 3: Modifica dei files php di invision
Il nostro file da modificare è class_custom_fields.php situato in questo percorso
root di invision /sources/classes/class_custom_fields.php
Apritelo con il vostro editor preferito (io uso Dreamweaver ma non perchè sono sborone ma perchè mi piace vedere il codice bello colorato) e recatevi più o meno alla linea 490. Dovreste essere nei pressi della funzione method_format_field_for_topic_view( $i ) giusto? Se non siete lì pazienza, cercatela e recatevi al più presto non ho mica tempo da perdere io qui!!!!
Ora questo è quello che dovete avere sotto agli occhi per continuare
PHP:
/*-------------------------------------------------------------------------*/
// Method: format_field_for_topic_view
/*-------------------------------------------------------------------------*/
function method_format_field_for_topic_view( $i )
{
$out = $this->out_fields[$i];
$tmp = $this->cache_data[$i]['pf_topic_format'];
$tmp = str_replace( '{title}' , $this->field_names[$i], $tmp );
$tmp = str_replace( '{key}' , $this->out_chosen[$i] , $tmp );
$tmp = str_replace( '{content}', $out , $tmp );
return $tmp;
}
Ora sostituite questa funzione (SOLO QUESTA!) con questa:
PHP:
/*-------------------------------------------------------------------------*/
// Method: format_field_for_topic_view
/*-------------------------------------------------------------------------*/
function method_format_field_for_topic_view( $i )
{
$out = $this->out_fields[$i];
$tmp = $this->cache_data[$i]['pf_topic_format'];
$tmp = str_replace( '{title}' , $this->field_names[$i], $tmp );
$tmp = str_replace( '{key}' , $this->out_chosen[$i] , $tmp );
$tmp = str_replace( '{content}', $out , $tmp );
if($this->field_names[$i] == "Tracker Id")
$tmp = $this->get_external($tmp,$out);
return $tmp;
}
In pratica ho aggiunto solamente due righe per riconoscere il campo "tracker id" in modo tale da applicare lo script di riconoscimento tracker solo a quel campo lì e non agli altri.
Aggiungete successivamente al termine di questo script [esattamente tra la funzione method_format_field_for_topic_view( $i ) che avete appena modificato e method_format_content_for_save( $c ) che è la successiva] questa funzione:
PHP:
function get_external
($tmp,
$trackerid) {
// set a variable
$contents =
"";
$filename =
"./cache/profiles/profile_".
$trackerid.
".bk";
$status =
"";
//Cache per evitare l'accesso al tracker in continuazione
if (file_exists($filename)) {
if(date("Y-m-d",
filemtime($filename)) !=
date("Y-m-d")) {
//Aggiorno
// echo "Update!";
$status =
"Stat cache Updated!";
$handle =
fopen("http://aaotracker.com/usertracker.php?userid=".
$trackerid,
"rb");
$handle2 =
fopen($filename,
"wb");
// Get the info into array.
while (!
feof($handle)) {
$sout =
fread($handle,
round(8*
1024));
$contents.=
$sout;
fwrite($handle2,
$sout,
round(8*
1024));
}
fclose($handle);
fclose($handle2);
} else {
// echo "Non serviva update!";
$handle =
fopen($filename,
"rb");
while (!
feof($handle)) {
$contents.=
fread($handle,
round(8*
1024));
}
fclose($handle);
}
} else {
// echo "Creo il file!";
$status =
"Stat cache Created!";
$handle =
fopen("http://aaotracker.com/usertracker.php?userid=".
$trackerid,
"rb");
$handle2 =
fopen($filename,
"w+b");
while (!
feof($handle)) {
$sout =
fread($handle,
round(8*
1024));
$contents.=
$sout;
fwrite($handle2,
$sout,
round(8*
1024));
}
fclose($handle);
fclose($handle2);
}
$tmp =
str_replace( '{status}',
$status ,
$tmp );
$tmp =
str_replace('{updated}',
date("d/m g:i a",
filemtime($filename)),
$tmp);
preg_match_all("|size=\"2\"><a title=\"PBGUID:(.*)</a>|U",
$contents,
$out_nick, PREG_PATTERN_ORDER
);
preg_match_all("|size=\"2\">(.*)</font></td>|U",
$contents,
$out, PREG_PATTERN_ORDER
);
list($guid,$nick) = split("\">",$out_nick[1][0]);
if($nick == "") {
$tmp = "<br><br>Informazioni del tracker non disponibili!<br>L'utente potrebbe avere il profilo privato o il tracker non è momentaneamente disponibile!";
return $tmp;
}
$tmp = str_replace( '{nick}', $nick , $tmp );
$tmp = str_replace( '{guid}', $guid , $tmp );
$tmp = str_replace( '{rank}', $out[1][3] , $tmp );
$tmp = str_replace( '{fragrate}', $out[1][17] , $tmp );
$tmp = str_replace( '{longestsession}', $out[1][11] , $tmp );
$tmp = str_replace( '{kills}', $out[1][13] , $tmp );
$tmp = str_replace( '{kia}', $out[1][15] , $tmp );
$tmp = str_replace( '{honor}', $out[1][5] , $tmp );
preg_match_all("|size=\"2\"><b>(.*)</b></font></td>|U", $contents, $out, PREG_PATTERN_ORDER);
$map = $out[1];
$bestmap = 5;
for($i = 5; $i <sizeof($map); $i=$i+2)
if(str_replace(" Hours","",$map[$bestmap]) <str_replace(" Hours","",$map[$i]))
$bestmap = $i;
$tmp = str_replace( '{bestmap}', $map[$bestmap-1], $tmp);
preg_match_all("|: (.+)%|U", $contents, $out, PREG_PATTERN_ORDER);
$tmp = str_replace( '{activity}', $out[1][0] , $tmp );
$tmp = str_replace( '{popularity}', $out[1][1] , $tmp );
$tmp = str_replace( '{experience}', $out[1][2] , $tmp );
$tmp = str_replace( '{nexthonor}', $out[1][3] , $tmp );
preg_match_all("|Images/stars/(.*)\.gif|U", $contents, $out, PREG_PATTERN_ORDER);
$tmp = str_replace( '{stars}', $out[1][0] , $tmp );
return $tmp;
}
Una volta aggiunta questa funzione salvate il file class_custom_fields.php create un backup el precedente e uppatelo nella directory classes.
Se in qualche modo dovesse capitare qualche problema o avete pasticciato con il file php avete due opzioni: caricare il file class_custom_fields.php di backup o tentare di caricare il mio file class_custom_fields.php che trovate qui.
La guida è terminata qui, segue ora un passo per chi dovesse riscontrare problemi:
Passo 4: Aiuto! Ho un problema!
Hai qualche problema?
Mi visualizza una pagina bianca o un messaggio di errore quando tento di visualizzare un post!
Significa che hai pasticciato con il php! In questo caso puoi scegliere di ripristinare il backup del tuo file class_custom_fields.php o di tentare con questo.
Mi visualizza sempre il messaggio Informazioni del tracker non disponibili! anche se il tracker funziona e il mio profilo è pubblico!
In questo caso può essere per vari motivi:
1- Può essere dovuto al fatto che nel momento in cui il profilo del tracker sul tuo forum è stato aggiornato il tracker non era disponibile o tu avevi il profilo privato. Hai la possibilità di scegliere di aspettare un giorno oppure di andare dentro alla cartella cache/profiles e di cancellare il file profile_{tuo id del tracker}.bk.
2- Può essere dovuto al fatto che il tuo server non ti permette di accedere a pagine web da remoto, per verificarlo prova a recarti all'interno della cartella cache/profiles e se la cartella è vuota forse è dovuto a quello.
3- Può essere dovuto al fatto che il tuo server non ti permette di creare file con fopen(), per verificarlo prova a recarti all'interno della cartella cache/profiles e se la cartella è vuota forse è dovuto a quello.
In questi ultimi due casi hai la possibilità di chiedere informazioni al supporto tecnico del tuo dominio o, se sei bravo con php, tentare una configurazione di fopen alternativa [magari con w+ o w+b anzichè wb].
MP
EDIT 10/09/2007: A seguito di modifiche del tracker è stato modificato anche il codice di get_external() per cui siete invitati ad aggiornarlo alla versione corrente.