Forum

Créations de Modules [Tutoriel] Mentionner un @utilisateur sur le forum

Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 932

Le 02/07/2019 à 12h59
Bonjour à toutes et à tous,

Aujourd'hui je vous partage une petite bidouillette pour avoir la possibilité de mentionner un membre sur votre forum par exemple

"Bonjour @Myster se transformera en @Myster <= Lorsqu'on cliquera sur le pseudo ça amènera au profil du membre.

Etape 1
Ouvrez le fichier /forum/Forum.class.php puis juste en dessous de class Forum { ajoutez ceci:

Code PHP :
 
   static function mentionnerUtilisateur($matches)
    {
        try 
        {
            $req = PersistenceContext::get_querier()->select_single_row(PREFIX . 'member', array('user_id', 'display_name'), 'WHERE display_name=:name', array('name' => $matches[1]));
            return '<a href="'.UserUrlBuilder::profile($req['user_id'])->rel().'">@'.$matches[1].'</a>';
        }
        catch(RowNotFoundException $e)
        {
            return $matches[0];
        }
    } 
 


Puis ouvrez le fichier forum/topic.php et vers la ligne 372 et remplacez
Code PHP :
        'FORUM_MSG_CONTENTS'          => FormatingHelper::second_parse(stripslashes($row['contents'])),
 


par

Code PHP :
 
        'FORUM_MSG_CONTENTS'          => preg_replace_callback('#@([A-Za-z0-9]+)#', 'Forum::mentionnerUtilisateur', FormatingHelper::second_parse(stripslashes($row['contents']))),
 

Edité par Myster Le 02/07/2019 à 21h02
Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 932

Le 02/07/2019 à 13h19
Je vais prochainement vous proposez une petite modification pour pouvoir recevoir une notification lorsque quelqu'un nous mentionne sur le forum.
Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 932

Le 02/07/2019 à 14h07
SI VOUS AVEZ LE MODULE DE NOTIFICATION INSTALLER ET SEULEMENT SI VOUS L'AVEZ SUIVEZ LES ETAPES CI-DESSOUS:

Tout d'abord nous allons rajouter la langue, donc allez dans /notifications/lang/french/common.php
puis à la fin du fichier avant la balise ?> ajoutez ceci:

Code PHP :
 
$lang['notification.forum.mention'] = '<a href=":url_username">:username</a> vous a mentionné sur le sujet <a href=":url">:sujet</a>';


Puis maintenant ouvrez forum/Forum.class.php

Puis dans la fonction Add_msg vers la ligne 130 juste au dessus de

Code PHP :
forum_generate_feeds();


Ajoutez ceci

Code PHP :
 
        $matches = array();
        if (preg_match_all('#@([A-Za-z0-9]+)#', $contents, $matches)) 
        {
            foreach(array_unique($matches[1]) as $value)
            {
                $userExist = UserService::get_user_by_display_name($value);
                if($userExist)
                {
                    if ($userExist->get_id() != AppContext::get_current_user()->get_id())
                    {
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($userExist->get_id());
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('forum.mention', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'sujet' => $title,
                            'url' => '    /forum/topic' . url('.php?id=' . $idtopic . $last_page, '-' . $idtopic . $last_page_rewrite . '.php') . ($previous_msg_id ? '#m' . $previous_msg_id : '')
                )));
                        Notifications::add_notification($notify);
                    }
                }
            }
        }
 


Voilà c'est fini ! Dorénavant vous recevrez une notification si quelqu'un vous mentionne dans un message du forum. Edité par Myster Le 02/07/2019 à 19h50
Site web    
Mayo-naise Membre non connecté

Booster Fronde

Rang

Avatar

Inscrit le : 29/05/2019 à 14h33

Messages: 6

Le 29/07/2019 à 17h51
Bonsoir, qu'appelez vous le module de notification ?
   
ElenWii Membre non connecté

Administrateur

Rang

Avatar

Equipe Graphique

Inscrit le : 14/08/2009 à 19h01

Messages: 4795

Le 29/07/2019 à 20h54
Superbe idée Myster.

Est-ce que ton regex n'est pas un peu trop restrictif ?
@([A-Za-z0-9]+) n'accepterait pas "Mayo-naise" a priori. (Ajout du -, du _ et du . nécessaire je pense.)
et il serait intéressant de limiter à des éléments d'au moins 2 caractères ? ({2,} à la place du +)

Je crois que cela donnerait ça : @([A-Za-z0-9-_.]{2,})
Site web    
babsolune Membre non connecté

Modérateur

Rang

Avatar

Equipe Graphique

Inscrit le : 16/05/2008 à 12h52

Messages: 2342

Le 30/07/2019 à 05h34
@Mayo-naise

C'est un module créé par @Myster dont les différentes versions en fonction des versions de PHPBoost sont ici : https://www.phpboost.com/forum/forum-132+vos-modules.php
c'est un module qui pour l'instant nécessite des modifications dans les autres modules.


Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1369

Le 02/08/2019 à 08h46
Salut.

J'ai installé le premier je crois bien, et ça marche très bien :)
Je n'ai pas encore eu le cas de nom composé avec tiret ou sans ..

Il ne faut juste pas mettre les accents.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie