Introduction :
Cette contrib permet de voir qui s’est connecté récemment (auteurs ou visiteurs) à partir de l’interface privée de SPIP.
Première étape :
Spip gère la date de connexion pour les auteurs, cela permet d’afficher qui est en ligne en ce moment dans la partie privée.
Comme les visiteurs n’ont pas acces à la partie privée,
SPIP ne gère pas la date de connexion d’un visiteur.
Nous allons corriger ca :
Mais du coup, si on met à jour la date de connexion d’un visiteur, il va apparaître connecté dans la partie privée :
Commencons par modifier le petit bout de code qui permet de mettre à jour la date de dernière connexion d’un visiteur :
Modification du fichier spip_cookie.php3 pour mettre à jour la connexion des visiteurs
Dans le fichier spip_cookie.php3 :
Ligne 123 (Sur une version 1.7.2)
Vous avez :
$query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'";
$result = spip_query($query);
if ($row_auteur = spip_fetch_array($result))
$cookie_session = creer_cookie_session($row_auteur);
if (ereg("ecrire/", $cible->getUrl())) {
$cible->addVar('bonjour','oui');
}
Ajoutez ce petit code en ligne 128 pour donner ceci :
$query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'";
$result = spip_query($query);
if ($row_auteur = spip_fetch_array($result))
$cookie_session = creer_cookie_session($row_auteur);
// Petit hack pour indiquer la connexion d'un visiteur
@spip_query("UPDATE spip_auteurs SET en_ligne=NOW() WHERE id_auteur='" . $row_auteur['id_auteur'] . "'");
// Fin de la modif
if (ereg("ecrire/", $cible->getUrl())) {
$cible->addVar('bonjour','oui');
}
Deuxième étape :
Maintenant, nous allons devoir modifier un tout petit peu le code d’affichage des présents, pour enlever les visiteurs. C’est tout simple, il suffit de changer une requête SQL comme suivant :
Fichier ecrire/inc_presentation.php3, ligne 1728 (SPIP 1.7.2), vous avez le code suivant :
if ($activer_imessage != "non" AND ($connect_activer_imessage != "non" OR $connect_statut == "0minirezo")) {
$query2 = "SELECT id_auteur, nom FROM spip_auteurs WHERE id_auteur!=$connect_id_auteur AND imessage!='non' AND messagerie!='non' AND en_ligne>DATE_SUB(NOW(),INTERVAL 5 MINUTE)";
Changez simplement la chaine $query2 comme suivant :
if ($activer_imessage != "non" AND ($connect_activer_imessage != "non" OR $connect_statut == "0minirezo")) {
$query2 = "SELECT id_auteur, nom FROM spip_auteurs WHERE id_auteur!=$connect_id_auteur AND imessage!='non' AND messagerie!='non' AND statut!='6forum' AND en_ligne>DATE_SUB(NOW(),INTERVAL 5 MINUTE)";
Troisième étape :
Maintenant il ne vous reste plus qu’à afficher la date de dernière connexion pour un visiteur et la date de dernière connexion OU dernière déconnexion pour un auteur.
Soit vous faites un petit script vous même, soit vous pouvez modifier l’affichage de la page auteurs.php3 dans la partie privée.
Voici simplement comment faire pour modifier l’affichage des auteurs/visiteurs et obtenir ceci :
Modification de ecrire/auteurs.php3 afin d’ajouter une colonne de date de connexion
Ligne 232 de ecrire/auteurs.php3 (version 1.7.2)
Vous avez le code :
}
echo "</td></tr>\n";
if ($nombre_auteurs > $max_par_page) {
Ajouter cette ligne pour donner le nouveau titre de colonne comme ceci :
}
if ($connect_statut == '0minirezo') echo "</td><td>En ligne";
echo "</td></tr>\n";
if ($nombre_auteurs > $max_par_page) {
Au passage, on pourrait ajouter « En ligne » dans la liste des variables de langue, mais je ne vais pas vous compliquer la tâche :-)
Maintenant vous avez à la ligne 310 le code suivant :
// nombre d'articles
echo '</td><td>';
if ($row['compteur'] > 1)
echo $row['compteur']." "._T('info_article_2');
else if($row['compteur'] == 1)
echo "1 "._T('info_article');
else
echo " ";
echo "</td></tr>\n";
}
Ajoutez-y les 9 lignes afin de donner ceci :
// nombre d'articles
echo '</td><td>';
if ($row['compteur'] > 1)
echo $row['compteur']." "._T('info_article_2');
else if($row['compteur'] == 1)
echo "1 "._T('info_article');
else
echo " ";
// En ligne
if ($connect_statut == '0minirezo') {
echo '</td><td>';
if ($row['en_ligne'] == 0) {
echo '<i>Jamais</i>';
} else {
echo affdate_court( $row['en_ligne']);
}
}
echo "</td></tr>\n";
}
Ceci va afficher la colonne de la date de connexion.
Et maintenant, il va falloir sélectionner le champ « en_ligne » dans les requêtes SQL afin qu’elle remontent ce champs de la base.
Les 4 requêtes à modifier sont sous le format suivant :
$result_* = spip_query("SELECT auteurs.id_auteur, [...]
FROM spip_auteurs AS auteurs [...]
WHERE [...]
[...]
$sql_order");
Il suffit d’ajouter le code :
, auteurs.en_ligne
à la fin de la ligne SELECT des 4 requêtes SQL sous la forme indiquée et qui se trouvent aux lignes 109, 125, 147 et 167 pour SPIP 1.7.2
Celà va donner ceci :
$result_auteurs = spip_query("SELECT id_auteur, statut, source, pass, login, nom, email, url_site, messagerie, UPPER(nom) AS unom, auteurs.en_ligne
FROM spip_auteurs AS auteurs
WHERE 1 $sql_statut_auteurs
$sql_order");
[...]
$result_nombres = spip_query("SELECT auteurs.id_auteur, UPPER(auteurs.nom) AS unom, COUNT(articles.id_article) AS compteur, auteurs.en_ligne
FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien, spip_articles AS articles
WHERE auteurs.id_auteur=lien.id_auteur AND lien.id_article=articles.id_article
$sql_statut_auteurs $sql_statut_articles
GROUP BY auteurs.id_auteur
$sql_order");
[...]
$result_nombres = spip_query("SELECT auteurs.id_auteur, auteurs.statut, auteurs.source, auteurs.pass, auteurs.login, auteurs.nom, auteurs.email, auteurs.url_site, auteurs.messagerie, UPPER(nom) AS unom, COUNT(articles.id_article) AS compteur, auteurs.en_ligne
FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien, spip_articles AS articles
WHERE auteurs.id_auteur=lien.id_auteur AND lien.id_article=articles.id_article
$sql_statut_auteurs $sql_statut_articles
GROUP BY auteurs.id_auteur
$sql_order");
[...]
$result_auteurs = spip_query("SELECT auteurs.id_auteur, auteurs.statut, auteurs.source, auteurs.pass, auteurs.login, auteurs.nom, auteurs.email, auteurs.url_site, auteurs.messagerie, UPPER(nom) AS unom, 0 as compteur, auteurs.en_ligne
FROM spip_auteurs AS auteurs
WHERE id_auteur NOT IN (0$vus)
$sql_statut_auteurs_ajout
$sql_order");
Et voilà, le tour est joué !
C’était pas facile, mais ca en valait la peine non ?
Partie publique
Maintenant que la date et l’heure de connexion est disponible aux visiteurs, vous pouvez utiliser un petit
filtre qui permet d’afficher si un auteur ou un visiteur est en ligne.
Si besoin
J’ai fait la modif pour SPIP 1.7, 1.7.1 et SPIP 1.7.2 donc si vous avez besoin du fichier final, demandez-le moi !
Bon courage.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |