Afficher un troisième état pour les messages privés (MP) sous PhpBB2

Gaël Donat

Comment mettre à profit un troisième état dans les messages privés pour la modération.

- Titre : Afficher un troisième état pour les messages privés (MP) sous PhpBB2

- Auteur : Gaël Donat

- Parution : 26 mars 2005

- Mise à jour : 29 avril 2013

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Gaël DONAT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Fonctionnemement

- III. Installation

- IV. Remerciements

I - Introduction

PhpBB2 est avant tout un forum comprenant un grand nombre de fonctionnalités dont l'une d'elles consiste en l'envoi d'un message privé d'un utilisateur à un autre.
Par défaut dans PhpBB2, les messages privés ont visuellement deux états possibles, message non lu avec l'icône orange, et message lu avec l'icône blanche, mais dans PhpBB2 il en existe un troisième non exploité graphiquement.

Pourquoi un troisième état possible si c'est pour ne pas s'en servir ?
Simplement parce que ce troisième état permet d'afficher ou non, un pop-up lorsque vous recevez un message.

Comment cela fonctionne ?
Lorsque vous recevez un message privé, PhpBB2 lui donne à l'origine un code PRIVMSGS_NEW_MAIL tel que défini dans le fichier de constantes (voir plus bas). Si vous avez au moins un MP ayant ce code, vous aurez un pop-up pour vous dire que vous avez un nouveau message privé (si vous avez autorisé les pop-ups et activé l'option dans votre profil évidemment).
Lorsque vous vous rendez sur votre boîte de réception le code du message change et passe en PRIVMSGS_UNREAD_MAIL, dès lors même si vous ne lisez pas ce message vous n'aurez plus de pop-up pour vous avertir de sa présence.
Dans la boîte d'envoi de l'expéditeur dans les deux cas le MP est marqué comme non lu.
Voilà à quoi sert ce troisième état.

La modification de ce mode permet de rajouter pour les administrateurs et modérateurs la possibilité de voir avec une icône différente les messages pour lesquels le destinataire est passé sur sa boîte de réception, mais n'a pas lu le message.

II - Fonctionnemement

Pour des raisons de confidentialité, cette fonctionnalité n'est possible que pour certains cas :

- pour les administrateurs ;

- pour les modérateurs, uniquement si le destinataire est un utilisateur sans droit de modération.

Les membres entre eux ne bénéficient pas de cette fonctionnalité, c'est un outil de modération.

Le code à modifier est donc très simple, il suffit de poser les conditions définies. Il faut néanmoins vérifier avant toute chose que nous nous trouvons bien dans la boîte d'envoi, car c'est cela que nous voulons modifier, ce qui en PHP se traduit comme ceci :

if ($folder == "outbox")

{

//Si l’expéditeur n'est pas utilisateur normal

//Si l’expéditeur est admin -> tous

//Sinon, si le destinataire n'est pas modo.

//Par défaut à 2

$état=2;

if ($userdata['user_level']==ADMIN)

{

$état=3;

}

if ($userdata['user_level']==USER)

{

$état=2;

}

if ($userdata['user_level']==MOD & $row['user_level']==USER)

{

$état=3;

}

}

else

{

$état=2;

}

Il suffit ensuite de passer dans un "switch" pour choisir quel $état sera pris en compte puis affecter l'image de notre choix.

switch ($état)

{

case 2:

$icon_flag = ( $flag == PRIVMSGS_NEW_MAIL || $flag == PRIVMSGS_UNREAD_MAIL ) ? $images['pm_unreadmsg'] : $images['pm_readmsg'];

break;

case 3:

switch ($flag)

{

case PRIVMSGS_NEW_MAIL :

$icon_flag = $images['pm_unreadmsg'];

break;

case PRIVMSGS_UNREAD_MAIL :

$icon_flag = $images['pm_viewmsg'];

break;

default :

$icon_flag = $images['pm_readmsg'];

break;

}

}

Voilà la modification est finie, le code se divise donc en deux parties, l'une pour vérifier les règles de gestion que nous avons définies, et l'autre permet d'affecter la bonne image.

Pour information voilà les valeurs des constantes définies dans le fichier /includes/constants.php

// Private messaging

define('PRIVMSGS_READ_MAIL', 0);

define('PRIVMSGS_NEW_MAIL', 1);

define('PRIVMSGS_SENT_MAIL', 2);

define('PRIVMSGS_SAVED_IN_MAIL', 3);

define('PRIVMSGS_SAVED_OUT_MAIL', 4);

define('PRIVMSGS_UNREAD_MAIL', 5);

III - Installation

Pour installer ce module, vous devez simplement rechercher et remplacer le code suivant :

if ( $row = $db->sql_fetchrow($result) )

{

$i = 0;

do

{

$privmsg_id = $row['privmsgs_id'];

$flag = $row['privmsgs_type'];

$icon_flag = ( $flag == PRIVMSGS_NEW_MAIL || $flag == PRIVMSGS_UNREAD_MAIL ) ? $images['pm_unreadmsg'] : $images['pm_readmsg'];

Par :

if ( $row = $db->sql_fetchrow($result) )

{

$i = 0;

do

{

$privmsg_id = $row['privmsgs_id'];

$flag = $row['privmsgs_type'];

//<Modif Goshiz>

//dans certains cas, on ne met pas le contrôle

// si on n'est pas dans outbox

if ($folder == "outbox")

{

//Si l’expéditeur n'est pas utilisateur normal

//Si l’expéditeur est admin -> tous

//Sinon, si le destinataire n'est pas modo.

//Par défaut à 2

$état=2;

if ($userdata['user_level']==ADMIN)

{

$état=3;

}

if ($userdata['user_level']==USER)

{

$état=2;

}

if ($userdata['user_level']==MOD & $row['user_level']==USER)

{

$état=3;

}

}

else

{

$état=2;

}

switch ($état)

{

case 2:

$icon_flag = ( $flag == PRIVMSGS_NEW_MAIL || $flag == PRIVMSGS_UNREAD_MAIL )

? $images['pm_unreadmsg'] : $images['pm_readmsg'];

//le passage à la ligne est fait pour des soucis de visibilité.

break;

case 3:

switch ($flag)

{

case PRIVMSGS_NEW_MAIL :

$icon_flag = $images['pm_unreadmsg'];

break;

case PRIVMSGS_UNREAD_MAIL :

$icon_flag = $images['pm_viewmsg'];

break;

default :

$icon_flag = $images['pm_readmsg'];

break;

}

}

//</Modif Goshiz>

Il nous reste une dernière modification à faire du côté du template car nous avons ajouté une image, et il faut donc la déclarer ($images['pm_viewmsg'])
Pour cela ouvrons le fichier /templates/subSilver/subSilver.cfg et remplaçons :

$images['pm_unreadmsg'] = "$current_template_images/folder_new.gif";

Par :

$images['pm_unreadmsg'] = "$current_template_images/folder_new.gif";

$images['pm_viewmsg'] = "$current_template_images/folder_announce_new.gif";

C'est un exemple, vous pouvez mettre l'image que vous voulez.

IV - Remerciements

Un grand merci à Pharaonix pour ses conseils de mise à jour et la correction ;-)