La version 1.2 de ce mod pour une install complète:
- accès aux statistiques détaillés (v1.0)
- gestion de la pagination (v1.1)
- compteur live (v1.2)
############################################################## ## MOD Title: Stats ## MOD Author: e-poussin (http://www.e-poussin.com/) ## MOD Description: - this MOD allow you to have detailed statistics ## - ce MOD vous permet d'avoir des statistiques détaillés ## MOD Version: 1.2 ## phpWebGallery Version: 1.4.1 ## ## Installation Level: Advanced ## Installation Time: 30 Minutes ## Files To Edit: ## admin/configuration.php ## admin/stats.php ## include/functions.inc.php ## include/config.inc.php ## language/en_UK.iso-8859-1/admin.lang.php ## language/fr_FR.iso-8859-1/admin.lang.php ## template/default/admin/configuration.tpl ## template/default/admin/stats.tpl ## category.php ## ############################################################## ## Author Notes: ## ## ### Francais ### ## ## Ce MOD permet d'obtenir la liste de toutes les connexions à votre galerie, et ## de connaître les accès (quelle catégorie?, quelle photo?) réalisés par les ## utilisateurs (adresse, login) pour un mois donné. ## ## De plus, des paramètres supplémentaires vous permettent de ne pas historiser ## l'activité de l'administrateur, ni tracer l'activité d'utilisateurs se ## présentant avec une IP donnée. ## ############################################################## ## MOD History: ## ## 2005-09-16 - Version 1.0 ## - Initial Release ## ## 2005-09-18 - Version 1.1 ## - Added: Pagination ## ## 2005-09-18 - Version 1.2 ## - Added: Live counter ## ############################################################## ## Before Adding This MOD To Your PWG, You Should Back Up All Files Related To This MOD ############################################################## # #-----[ SQL ]------------------------------------------ # -- -- Don't forget to replace 'phpwebgallery_' with you owned table_prefix -- INSERT INTO `phpwebgallery_config` ( `param` , `value` , `comment` ) VALUES ('logadmin', 'true', 'log administrator actions'); INSERT INTO `phpwebgallery_config` ( `param` , `value` , `comment` ) VALUES ('IPList', '', 'List of IP addresses to ignore'); # #-----[ OPEN ]------------------------------------------ # admin/stats.php # #-----[ FIND ]------------------------------------------ # 'IMAGES'=>$pictures['p'], # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD 'URL'=>PHPWG_ROOT_PATH.'admin.php?page=stats&month='.$current_month, // END Stats Detaillé MOD # #-----[ FIND ]------------------------------------------ # $max_pages_seen = 0; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD if (isset( $_GET['month'] )) { $current_month = $_GET['month']; // Set WHERE clause $where = ' WHERE DATE_FORMAT(date,\'%Y-%m\') = \''.$current_month.'\''; // Set LIMIT clause $limit = ' LIMIT '; $page['start'] = 0; if (isset($_GET['start']) and is_numeric($_GET['start'])) $page['start'] = abs($_GET['start']); $limit .= $page['start']; $limit .= ','.$conf['nb_logs_page']; $query = ' SELECT date, login, IP, category, file, picture FROM '.HISTORY_TABLE. $where.' ORDER BY date DESC'. $limit. ';'; $result = pwg_query( $query ); $i=0; while ( $row = mysql_fetch_array( $result ) ) { $class = ($i % 2)? 'row1':'row2'; $i++; $template->assign_block_vars('detail',array( 'DATE'=>$row['date'], 'LOGIN'=>$row['login'], 'IP'=>gethostbyaddr($row['IP']), 'CATEGORY'=>$row['category'], 'FILE'=>$row['file'], 'PICTURE'=>$row['picture'], 'T_CLASS'=>$class )); } // Get total number of logs $query = ' SELECT COUNT(date) as nb_logs FROM '.HISTORY_TABLE. $where.' ;'; $result = pwg_query($query); $row = mysql_fetch_array($result); $page['nb_logs']=$row['nb_logs']; //display nav bar $url = $_SERVER['PHP_SELF'].'?page=stats&month='.$_GET['month']; $page['navigation_bar'] = create_navigation_bar( $url, $page['nb_logs'],$page['start'],$conf['nb_logs_page'], 'admin' ); $template->assign_block_vars( 'navigation', array('NAV_BAR' => $page['navigation_bar']) ); } // END Stats Detaillé MOD # #-----[ OPEN ]------------------------------------------ # admin/configuration.php # #-----[ FIND ]------------------------------------------ # $history_yes = ($conf['log']=='true')?'checked="checked"':''; # #-----[ BEFORE, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD $history_admin_yes = ($conf['logadmin']=='true')?'checked="checked"':''; $history_admin_no = ($conf['logadmin']=='false')?'checked="checked"':''; // END Stats Detaillé MOD # #-----[ FIND ]------------------------------------------ # 'L_CONF_GALLERY_LOCKED_INFO'=>$lang['conf_gallery_locked_info'], # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD 'L_CONF_HISTORY_IPLIST'=>$lang['conf_log_iplist'], 'L_CONF_HISTORY_ADMIN'=>$lang['conf_log_admin'], 'LOGADMIN_YES'=>$history_admin_yes, 'LOGADMIN_NO'=>$history_admin_no, 'IPLIST'=>$conf['IPList'], // END Stats Detaillé MOD # #-----[ OPEN ]------------------------------------------ # include/functions.inc.php # #-----[ FIND ]------------------------------------------ # if ($conf['log']) { # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD if ( (!in_array($_SERVER['REMOTE_ADDR'], split(';', $conf['IPList']))) and ($conf['logadmin'] or (!$conf['logadmin'] and ($user['username'] != 'admin'))) ) { // END Stats Detaillé MOD # #-----[ FIND ]------------------------------------------ # \''.addslashes($picture).'\') ;'; pwg_query($query); # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD } // END Stats Detaillé MOD # #-----[ OPEN ]------------------------------------------ # include/config.inc.php # #-----[ FIND ]------------------------------------------ # $conf['show_version'] = false; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé // nb_logs_page : number of logs displayed per page $conf['nb_logs_page'] = 300; // Activity period (in minutes) $conf['activity_period'] = 5; // END Stats Detaillé # #-----[ OPEN ]------------------------------------------ # language/en_UK.iso-8859-1/admin.lang.php # #-----[ FIND ]------------------------------------------ # $lang['conf_gallery_locked_info'] = 'Lock the entire gallery for maintenance. Only administrator users will be able to reach the gallery'; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD $lang['conf_log_iplist'] = 'List of IP addresses to ignore (separated by ;)'; $lang['conf_log_admin'] = 'Log administrator actions'; // END Stats Detaillé MOD # #-----[ FIND ]------------------------------------------ # $lang['stats_visitors_graph_title'] = 'Nombre de visiteurs par jour'; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD $lang['stats_date'] = 'Date'; $lang['stats_login'] = 'Login'; $lang['stats_addr'] = 'Address'; $lang['stats_category'] = 'Category'; $lang['stats_file'] = 'File'; $lang['stats_picture'] = 'Picture'; // END Stats Detaillé MOD # #-----[ OPEN ]------------------------------------------ # language/fr_FR.iso-8859-1/admin.lang.php # #-----[ FIND ]------------------------------------------ # $lang['conf_gallery_locked_info'] = 'Verrouiller toute la galerie pour maintenance. Attention à ne pas vous déconnecter : seul l\'administrateur sera capable d\'y accéder.'; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaille MOD $lang['conf_log_iplist'] = 'Liste des adresses IP à ignorer (séparées par des ;)'; $lang['conf_log_admin'] = 'Historiser les actions de l\'administrateur'; // END Stats Detaille MOD # #-----[ FIND ]------------------------------------------ # $lang['stats_visitors_graph_title'] = 'Nombre de visiteurs par jour'; # #-----[ AFTER, ADD ]------------------------------------------ # // BEGIN Stats Detaillé MOD $lang['stats_date'] = 'Date'; $lang['stats_login'] = 'Identifiant'; $lang['stats_addr'] = 'Adresse'; $lang['stats_category'] = 'Categorie'; $lang['stats_file'] = 'Fichier'; $lang['stats_picture'] = 'Image'; // END Stats Detaillé MOD # #-----[ OPEN ]------------------------------------------ # template/default/admin/configuration.tpl # #-----[ FIND ]------------------------------------------ # <tr> <td><strong>{general.L_CONF_HISTORY} :</strong><br /><span class="small">{general.L_CONF_HISTORY_INFO}</span></td> <td class="row1"><input type="radio" class="radio" name="log" value="true" {general.history_yes} />{L_YES} <input type="radio" class="radio" name="log" value="false" {general.history_no} />{L_NO}</td> </tr> # #-----[ REPLACE BY ]------------------------------------------ # <tr> <td><strong>{general.L_CONF_HISTORY} :</strong><br /><span class="small">{general.L_CONF_HISTORY_INFO}</span></td> <td class="row1"><input type="radio" class="radio" name="log" value="true" {general.HISTORY_YES} onClick="document.forms[0].IPList.disabled=false; document.forms[0].logadmin[0].disabled=false; document.forms[0].logadmin[1].disabled=false;"/>{L_YES} <input type="radio" class="radio" name="log" value="false" {general.HISTORY_NO} onClick="document.forms[0].IPList.disabled=true; document.forms[0].logadmin[0].disabled=true; document.forms[0].logadmin[1].disabled=true;"/>{L_NO}</td> </tr> <tr> <td><span class="small">{general.L_CONF_HISTORY_IPLIST}</span></td> <td class="row1"><input name="IPList" type="text" id="IPList" size="20" maxlength="255" value="{general.IPLIST}"></td> </tr> <tr> <td><span class="small">{general.L_CONF_HISTORY_ADMIN}</span></td> <td class="row1"><input type="radio" class="radio" name="logadmin" value="true" {general.LOGADMIN_YES} /> {L_YES} <input type="radio" class="radio" name="logadmin" value="false" {general.LOGADMIN_NO} /> {L_NO}</td> </tr> # #-----[ OPEN ]------------------------------------------ # template/default/admin/stats.tpl # #-----[ FIND ]------------------------------------------ # <td>{month.MONTH}</td> # #-----[ REPLACE BY ]------------------------------------------ # <td><a href="{month.URL}">{month.MONTH}</a></td> # #-----[ FIND ]------------------------------------------ # <br /> # #-----[ AFTER, ADD ]------------------------------------------ # <table class="table2" width="60%"> <tr class="throw"> <th>{L_STAT_DATE}</th> <th>{L_STAT_LOGIN}</th> <th>{L_STAT_ADDR}</th> <th>{L_STAT_CATEGORY}</th> <th>{L_STAT_FILE}</th> <th>{L_STAT_PICTURE}</th> </tr> <!-- BEGIN detail --> <tr class="{detail.T_CLASS}"> <td nowrap>{detail.DATE}</td> <td>{detail.LOGIN}</td> <td>{detail.IP}</td> <td>{detail.CATEGORY}</td> <td>{detail.FILE}</td> <td>{detail.PICTURE}</td> </tr> <!-- END detail --> </table> <br /> <!-- BEGIN navigation --> <div class="admin"> {navigation.NAV_BAR} </div> <!-- END navigation --> # #-----[ OPEN ]------------------------------------------ # category.php # #-----[ FIND ]------------------------------------------ # //------------------------------------------------------------ log informations # #-----[ BEFORE, ADD ]------------------------------------------ # // BEGIN Stats Detaillé $query = ' SELECT COUNT(DISTINCT(IP)) AS nb_users FROM '.HISTORY_TABLE.' WHERE date >= DATE_SUB(NOW(), INTERVAL '.$conf['activity_period'].' MINUTE);'; $result = pwg_query($query); $row = mysql_fetch_array($result); $page['nb_users']=$row['nb_users']; $template->assign_vars(array( 'NB_USERS'=>$page['nb_users'] )); // END Stats Detaillé #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ # # EoM
Hors ligne
Encore un tres tres tres grand merci pour ta contribution e-poussin ca fesait un moment que je chercher tout ca......
moi je vote pour toi pour "MISTER PHP 2005"
Hors ligne
(j'encourage très très fortement e-poussin à me contacter, via le forum, pour que son MOD soit mis à disposition officiellement)
Hors ligne
z0rglub a écrit:
(j'encourage très très fortement e-poussin à me contacter, via le forum, pour que son MOD soit mis à disposition officiellement)
Avec plaisir!
As tu besoin d'éléments complémentaires au code du post précédent? Ce mod ne requiert aucun nouveau fichier: il modifie les fichiers existants.
J'en profite pour te poser une question: est-ce que la version 1.5 incluera une fonctionnalité de statistiques "détaillées"?
Et sinon, la question que tout le monde se pose :) : la version 1.5 sortira-t'elle avant la fin du mois?
Toutes mes félicitations pour phpwebgallery, c'est vraiment un outil génial!
Hors ligne
on en avait discuté avec z0rglub, apparemment ce n'était pas dans les priorités de la 1.5. S' il est d'accord, je peux m'occuper ce week end d'intégrer des statistiques détaillées en récupérant quelques morceaux de ton code (si tu es accord aussi) et en ajoutant quelques fonctionnalités. On pourrait tester tout ça en RC1. Qu'en pensez vous ?
Félicitations à toi pour ce MOD :)
Hors ligne
Je pense que e-poussin peut nous apporter beaucoup d'idées d'améliorations.
Bravo en tout cas pour cette amélioration de l'historique qui effectivement mériterait d'être incorporée en 1.5.
Hors ligne
Merci pour ce MOD qui nous permet de pouvoir de nouveau espionner discrètement nos visiteurs..
J'ai par contre qq petits pbs sur certains mois, en haut de la page je peux avoir parfois jusqu'à une centaine de ligne comme celle-ci :
" Warning: gethostbyaddr(): Address is not in a.b.c.d form in /var/www/free.fr/e/7/famille.menot/images/photos/admin/stats.php on line 141"
=> il semble que l'IP du visiteur soit mal décodé ou pas décodable ?? Est-ce que je suis le seul avec ce pb ?
Une idée sur l'origine ??
Rq : parfois dans le tableau détaillant toutes les connexions, certain visiteur n'ont pas d'adresse IP renseignée (peut-être que cela correspond aux msg précédents..)
Hors ligne
j'ai une soucis avec ce Mod...
Je l'ai installé et rien ne se passe...
Je l'ai donc désinstallé et remis ma gallery au "propre".
Je l'ai réinstallé et toujours rien.... Dans "Historique", je ne peux pas cliquer sur les mois. Et c'est pas un problème de trop de connexion car j'ai très peu de visiteurs.
Que('s) fichier(s) vous voulez voir pour m'aider?
Hors ligne
volcom a écrit:
on en avait discuté avec z0rglub, apparemment ce n'était pas dans les priorités de la 1.5. S' il est d'accord, je peux m'occuper ce week end d'intégrer des statistiques détaillées en récupérant quelques morceaux de ton code (si tu es accord aussi) et en ajoutant quelques fonctionnalités. On pourrait tester tout ça en RC1. Qu'en pensez vous ?
Félicitations à toi pour ce MOD :)
Tout à fait d'accord pour que tu l'intégres dans la prochaine version.
Par contre, j'ai encore quelques idées pour améliorer ou apporter de nouvelles fonctionnalités à ce mod. Et en priorité, le consolider (cf le bug détecté par roadbuster ci-dessus).
Donc, au choix: soit on l'intégre dès maintenant dans la v1.5, soit on continue à améliorer le mod actuel.
Tout dépend de la date de sortie de la 1.5.
PS: exemple de nouvelles fonctionnalités: afficher la répartition des connectés par pays. Ca m'a toujours amusé de savoir que mon site était visité par différentes nationalités. :)
Hors ligne
je souhaiterais une chose. peut on désactiver les logs du compte administrateur car a chaque fois que je visualise la galerie je me vois dans les logs et ca me parasite plus qu'autre chose.
Autrement peut on aussi trier par LOGIN en gros ce serait de rajouter des options de tri pour chaque colonne..
Hors ligne
roadbuster a écrit:
Merci pour ce MOD qui nous permet de pouvoir de nouveau espionner discrètement nos visiteurs..
J'ai par contre qq petits pbs sur certains mois, en haut de la page je peux avoir parfois jusqu'à une centaine de ligne comme celle-ci :
" Warning: gethostbyaddr(): Address is not in a.b.c.d form in /var/www/free.fr/e/7/famille.menot/images/photos/admin/stats.php on line 141"
=> il semble que l'IP du visiteur soit mal décodé ou pas décodable ?? Est-ce que je suis le seul avec ce pb ?
Une idée sur l'origine ??
Rq : parfois dans le tableau détaillant toutes les connexions, certain visiteur n'ont pas d'adresse IP renseignée (peut-être que cela correspond aux msg précédents..)
J'ai trouvé une astuce sur un forum, il suffit simplement d'ajouter @ devant la fonction gethostbyaddr. J'ai testé ca marche!
Il faut donc:
- ouvrir le fichier admin/stats.php
- trouver la chaîne suivante: 'IP'=>gethostbyaddr($row['IP']),
- tu ajoutes un @ juste avant le gethostbyaddr. Ca donne ça: 'IP'=>@gethostbyaddr($row['IP'])
- tu sauves
Dis moi si c'est efficace.
Hors ligne