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: 964

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: 964

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: 964

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: 4812

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: 2371

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: 1416

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.
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 964

Le 07/11/2019 à 19h29
ElenWii :
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,})


Pardon de cet énorme retard, mais oui effectivement ton regex fonctionne est moins restrictif en effet
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1416

Le 08/11/2019 à 08h20
Salut.

Je l'utilise toujours ce tuto :D
Dommage seulement que en tapant une ou deux lettres, ça ne propose pas un pseudo :D On fait pas mal d'erreurs de frappe de temps en temps.

J'espère cependant que tu vas bien @Myster :)
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 964

Le 08/11/2019 à 10h49
Bonjour,

Je vais bien je te remercie et toi dont ?

Je vais voir ce que je peux faire pour l'autocompletion des pseudos :)
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1416

Le 08/11/2019 à 12h04
T'embête pas :)
C'est optionnel, mais cela me parait bien pratique. Tu m'avais parlé d'un Json non ?

Sinon je vais bien, merci à mon tour :) Edité par MickaelFR Le 08/11/2019 à 12h04
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 964

Le 08/11/2019 à 13h36
Oui oui mais c'est le résultat de la requête qui retournera un JSON Edité par Myster Le 08/11/2019 à 13h36
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1416

Le 08/11/2019 à 20h29
D'accord :)
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie