Documentations et Dossiers » Notifications Forum | PHPBoost 5.0

 Le 09/01/2019 à 19h09 Myster Avatar  
 


Bonjour à toutes et à tous,

Aujourd'hui je vous présente un module pour PHPBoost 5.0.

Notifications!


Un module permettant d'envoyer des notifications à vos membres lorsque d'autres personnes interagissent avec leurs contenus. C'est-à-dire que si un membre poste un sujet sur le forum et qu'un autre membre envoie un message dans ce sujet, le membre qui a créé le sujet recevra une notification lui indiquant que le membre a ajouté une réponse à son sujet.

De base le module de notifications ne communique pas avec les différents modules de PHPBoost, c'est pour cela que vous devez mettre en oeuvre les addons qui sont proposés sur cette page !

Liste des fonctionnalités!





  • Envoyer une notification à un membre, ou tous les membres depuis l'administration
  • Gérer le nombre de notifications par pages
  • Archivage des notifications une fois lues
  • Supprimer une notification en particulier (ou toutes d'un coup)
  • Activation/Désactivation de la suppression automatique des notifications après la lecture
  • Recevoir des notifications sur les différents modules de PHPBoost grâce aux addons ci-dessous
  • Option permettant l'archivage automatique des notifications (à activer dans l'administration)
  • Possibilité d'archiver une notification spécifique si l'option d'archivage automatique n'est pas activée.




Mais pourquoi tu nous parles d'addons ?


Les addons sont des petits morceaux de code à ajouter sur le module pour lequel il a été fait afin justement "d'activer" les notifications pour ce module. Vous trouverez de plus amples détails ci-dessous.

Preview du module





Lien de téléchargement


Pour télécharger le module Notifications pour PHPBoost 5.0 Cliquez-ici

Les addons


Donc comme vous l'aurez compris ce module fonctionne grâce à des addons ! Sans cela, la seule fonctionnalité du module c'est de pouvoir envoyer une notification à un membre depuis votre espace d'administration, ce n'est pas vraiment ce que l'on souhaite j'imagine ! Donc voici les différents addons

Recevoir une notification lorsque quelqu'un poste un message dans notre sujet
Recevoir une notification lorsque qu'un modérateur ou administrateur supprime notre sujet
Recevoir une notification lorsqu'un membre répond à notre sondage
Recevoir une notification lorsqu'un modérateur ou un administrateur verrouille notre sujet
Recevoir une notification lorsqu'un modérateur ou un administrateur déverrouille notre sujet
Recevoir une notification lorsque notre contribution est mise à jour
Connaître le nombre de notification(s) dans le module connect ..
Mettre à jour le connect-mini.tpl..

A FAIRE ABSOLUMENT AVANT D'INTEGRER LES ADDONS


Certains addons nécessite des champs que certaines requêtes SQL de PHPBoost 5.0 n'ont pas (N'ayez crainte vous n'avez juste qu'à modifier une ligne pour demander à PHPBoost qu'il prenne en compte une colonne en plus ..)

Caché:

  • Il nous faut l'user_id du créateur du topic pour les différentes notifications donc allez dans forum/post.php, puis à la ligne 411 remplacez

Code PHP :
 
            $topic = PersistenceContext::get_querier()->select_single_row_query('SELECT idcat, title, nbr_msg, last_user_id, last_msg_id, status
            FROM ' . PREFIX . 'forum_topics
            WHERE id=:id', array(
                'id' => $idt_get
            ));
 


Par ceci:

Code PHP :
 
            $topic = PersistenceContext::get_querier()->select_single_row_query('SELECT user_id, idcat, title, nbr_msg, last_user_id, last_msg_id, status
            FROM ' . PREFIX . 'forum_topics
            WHERE id=:id', array(
                'id' => $idt_get
            ));
 


  • Et pour finir il nous faut le titre du sujet donc allez dans forum/action.php à la ligne 69 puis remplacez ceci:

Code PHP :
 
$topic = PersistenceContext::get_querier()->select_single_row(PREFIX . 'forum_topics', array('user_id', 'idcat', 'first_msg_id', 'last_msg_id', 'last_timestamp'), 'WHERE id=:id', array('id' => $msg['idtopic']));
 


Par le code suivant:
Code PHP :
$topic = PersistenceContext::get_querier()->select_single_row(PREFIX . 'forum_topics', array('user_id', 'title',  'idcat', 'first_msg_id', 'last_msg_id', 'last_timestamp'), 'WHERE id=:id', array('id' => $msg['idtopic']));


Voilà c'est tout ! :)


Liste des addons


Le forum

Recevoir une notification lorsque quelqu'un poste un message dans notre sujet
Caché:


Dans forum/post.php, A la ligne 495 juste après:

Code PHP :
 
$last_msg_id = $Forumfct->Add_msg($idt_get, $topic['idcat'], $contents, $topic['title'], $last_page, $last_page_rewrite);
 


Ajoutez ceci:

Code PHP :
 
                    if ($topic['user_id'] != AppContext::get_current_user()->get_id())
                      {
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($topic['user_id']);
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('forum.msg', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'sujet' => $topic['title'],
                            'url' => PATH_TO_ROOT . "/forum/topic" . url('.php?id=' . $idt_get . $last_page, '-' . $idt_get . $last_page_rewrite . '.php', '&') . '#m' . $last_msg_id
                        )));
                        Notifications::add_notification($notify);
                      }
 



Recevoir une notification lorsque qu'un modérateur ou administrateur supprime notre sujet
Caché:

A la ligne 80 dans forum/action.php, juste en dessous de
Code PHP :
$Forumfct->Del_topic($msg['idtopic']); //Suppresion du topic.


ajoutez ceci:

Code PHP :
 
if($topic['user_id'] != AppContext::get_current_user()->get_id())
{
    $notify = New Notifications();
    $notify->set_sender_id(AppContext::get_current_user()->get_id());
    $notify->set_recipient_id($topic['user_id']);
    $notify->set_reading(0);
    $notify->set_date(time());
    $notify->set_content(NotificationsFormat::contenu('forum.del.topic', array(
    'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
    'username' => AppContext::get_current_user()->get_display_name(),
    'sujet' => $topic['title'],
    )));
    Notifications::add_notification($notify);
}
 



Recevoir une notification lorsqu'un membre répond à notre sondage
Caché:

  • Dans forum/action.php à la ligne 217 en dessous de:


Code PHP :
            PersistenceContext::get_querier()->update(PREFIX . 'forum_poll', array('voter_id' =>  implode('|', $voter_id), 'votes' =>  implode('|', $array_votes)), 'WHERE idtopic=:id', array('id' => $idt_get));


Ajoutez ceci:
Code PHP :
 
                    if ($topic['user_id'] != AppContext::get_current_user()->get_id())
                      {
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($topic['user_id']);
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('forum.poll', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'sujet' => $topic['title'],
                            'url' => PATH_TO_ROOT . "/forum/topic.php?id=".$idt_get
                        )));
                        Notifications::add_notification($notify);
                      }
 



Recevoir une notification lorsqu'un modérateur ou un administrateur verrouille notre sujet
Caché:

Dans le fichier forum/action.php vers la ligne 240 juste en dessous de
Code PHP :
 $Forumfct->Lock_topic($idt_get); 


Ajoutez ceci:

Code PHP :
 
                    if ($topic['user_id'] != AppContext::get_current_user()->get_id())
                      {
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($topic['user_id']);
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('forum.lock.topic', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'sujet' => $topic['title'],
                            'url' => PATH_TO_ROOT . "/forum/topic.php?id=".$idt_get
                        )));
                        Notifications::add_notification($notify);
                      }
 



Recevoir une notification lorsqu'un modérateur ou un administrateur déverrouille notre sujet
Caché:

Dans le fichier forum/action.php vers la ligne 257 juste en dessous de
Code PHP :
 $Forumfct->Unlock_topic($idt_get); 


Ajoutez ceci:

Code PHP :
 
                    if ($topic['user_id'] != AppContext::get_current_user()->get_id())
                      {
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($topic['user_id']);
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('forum.unlock.topic', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'sujet' => $topic['title'],
                            'url' => PATH_TO_ROOT . "/forum/topic.php?id=".$idt_get
                        )));
                        Notifications::add_notification($notify);
                      }
 



Les contributions

Pour les contributions j'ai fait qu'un seul addon donc à voir si y'a encore des choses à faire à ce niveau plus tard ..

Recevoir une notification lorsque notre contribution est mise à jour
Caché:

Rendez-vous dans /user/contribution_panel.php vers la ligne 111

Juste en dessous de :
Code PHP :
 
        //Enregistrement en base de données
        ContributionService::save_contribution($contribution);
 


Ajoutez ceci:

Code PHP :
 
                        $notify = New Notifications();
                        $notify->set_sender_id(AppContext::get_current_user()->get_id());
                        $notify->set_recipient_id($topic['user_id']);
                        $notify->set_reading(0);
                        $notify->set_date(time());
                        $notify->set_content(NotificationsFormat::contenu('update.contrib', array(
                            'url_username' => UserUrlBuilder::profile(AppContext::get_current_user()->get_id())->rel(),
                            'username' => AppContext::get_current_user()->get_display_name(),
                            'contribution' => $topic['title'],
                            'url' => PATH_TO_ROOT."/user/contribution_panel.php?id=".$id_to_update
                        )));
                        Notifications::add_notification($notify);
 



Module: "Connect"

Connaître le nombre de notification(s) dans le module connect ..
Caché:

  • Allez dans connect/phpboost/ConnectModuleMiniMenu.class.php vers la ligne 47 juste en dessous de :
    Code PHP :
    $unread_contributions = UnreadContributionsCache::load();

    Ajoutez ceci :
    Code PHP :
    $nbr_notifications = NotificationsService::count('WHERE recipient_id=:recip_id AND reading=0', array('recip_id' => $user->get_id()));

    Puis pour déclarer dans le template le nombre de notifications:
    Vers la ligne 107 de ce même fichier juste en dessous de :
    Code PHP :
                        'NUMBER_UNREAD_CONTRIBUTIONS' => $contribution_number,

    Ajoutez ceci :
    Code PHP :
                        'NBR_NOTIFICATIONS' => $nbr_notifications,





Le connect-mini.tpl


Mettre à jour le connect-mini.tpl.

Vous pouvez maintenant afficher le nombre de notifications dans connect_mini.tpl qui se trouve dans connect/templates/connect_mini.tpl ou dans /templates/{Votre theme}/modules/connect/connect_mini.tpl

Caché:
au dessus de la ligne 98 et 163 :

Code TPL :
                    <li>
                        <i class="fa fa-sign-out"></i>
                        <a href="${relative_url(UserUrlBuilder::disconnect())}" class="small"> {L_DISCONNECT}</a>
                    </li>


Placer :

Code TPL :
                <li>
                    <i class="fa fa-bell" aria-hidden="true"></i>
                    <a href="{PATH_TO_ROOT}/notifications" class="small"> Notifications ({NBR_NOTIFICATIONS})</a>
                </li>




Edité par Myster Le 12/01/2019 à 10h33

CsN Mortier


 Le 09/01/2019 à 19h38 m-ickael Avatar  
 


Salut.

Il faut installer tout ça ? Ce qui veut dire que à chaque MAJ, il faudra refaire la manipulation ?

Moi j'attends la 5.1 du coup :D

Merci pour ton travail.

CsN Fusée


 Le 09/01/2019 à 19h44 Myster Avatar  
 


Re,

Oui mais c'est des petits bout de code facile à remettre si jamais y'a une maj, et j'ai justement eu une conversation avec j1.seth c'est la seule solution pour le moment (v5.3 ... ) :D

Edit: Et de toute façon il n'y aura pas de maj concernant le forum il me semble donc ça roule jusqu'à la 5.3 .. :)

Edit2: Et tu n'est pas obligé d'installer tous les addons tu prends ceux qui te plaît uniquement ;) D'où le fait que contrairement à mes précédentes création ce véritable module est extensible .. :)



Edité par Myster Le 09/01/2019 à 19h48

CsN Mortier


 Le 09/01/2019 à 20h29 m-ickael Avatar  
 


D'accord. Je pensais que c'était un module comme média etc ... Mais je prends quand même, mais quand tu sortiras la 5.1 :D

CsN Fusée


 Le 09/01/2019 à 20h31 Myster Avatar  
 


Justement c'est un module comme média ^^ Sauf que pour interagir avec les autres modules ils faut déclarer aux autres modules "Envoi une notification"

CsN Mortier


 Le 09/01/2019 à 20h35 m-ickael Avatar  
 


D'accord. Il faudrait que ce soit "officiel" pour l'intégrer au projet alors .. Pourquoi pas ??

CsN Fusée


 Le 09/01/2019 à 20h38 Myster Avatar  
 


Parce que c'est dans leurs projet de refaire un module de notification pour la 5.3 d'après ce que j'ai pu comprendre aujourd'hui ^^

CsN Mortier


 Le 09/01/2019 à 21h12 m-ickael Avatar  
 


Ah d'accord.

CsN Fusée


 Le 10/01/2019 à 09h22 Swan Avatar  
 


Bonjour,

Tout d'abord, merci pour ton partage ^^

Cet addon ne touche que le forum et un fichier User (contribution_panel.php), si j'ai bien compris.. donc si c'est le cas et de ce que je viens de voir , pour une migration, cela n'est pas gênant. Puisque le script de migration, ne touchera dans la BDD que les tables qu'il connait. Il suffira avant la migration de remettre le fichier original post.php et action.php.

:oO Heu ou est la partie CSS , je ne l'ai pas vu ..

Swan.


Administrateur


 Le 10/01/2019 à 09h30 Myster Avatar  
 


Mais de rien il n'y a pas de quoi ^^
La partie css dans le module /templates => notifications.css



Edité par Myster Le 10/01/2019 à 09h31

CsN Mortier


 Le 10/01/2019 à 11h02 Swan Avatar  
 


OUPS...

ha oui, je suis nulle .. j'ai pas regardé dans le module :siffle


Administrateur


 Le 10/01/2019 à 11h26 Myster Avatar  
 


:rolleyes :bravo

CsN Mortier


 Le 11/01/2019 à 17h24 Swan Avatar  
 


Bon je me suis décidée à tester la version en locale ..

J'ai bien procédé tout comme sur le sujet. Pas de soucis particulier.
en dehors de

1/ installer le module en priorité
2/ patcher avec les addons
3/ vérifiez que le thème user est le même pour tous ( surtout si en local)
4/ et faire le ConnectModuleMiniMenu.class.php et le connect_mini.tpl , vraiment en dernier !

Jusque là parfait !

Je fais donc un compte user/membre lambda nommé PilePoil et je poste sur le forum et pof :

lien URL du message de renvoie d'erreur:

- http://localhost/PBT-V5-Base/forum/post.php?idt=1&id=2&new=n_msg&token=b3632d087d0855a0




Par contre j'ai toujours accés et au forum et au message.
Et lorsque je repasse sur le compte admin, pas de notifications .. et quand je poste en tant qu'admin, j'ai pas de soucis.

Une idée ??


Administrateur


 Le 11/01/2019 à 17h42 Myster Avatar  
 


Etrange je n'ai pas ce problème, en tout cas dans sa dernière version, peux-tu essayer avec la dernière version ? (Lien dispo sur le fofo de phpboost)

CsN Mortier


 Le 11/01/2019 à 18h05 Swan Avatar  
 


Bon, j'ai remplacé les fichiers du module notification (avec le zip dispo sur le fofo de phpboost) , c'est la même chose.
Demain dans la mâtiné, je ferais les modifs sur une installation neuve.



Administrateur


 Le 11/01/2019 à 18h09 Myster Avatar  
 



Non pas pour les addons le code a changé ^^ mais dans tous les cas ça dis pas pourquoi le sender_id il ne le trouve pas



Edité par Myster Le 11/01/2019 à 18h09

CsN Mortier


 Le 11/01/2019 à 19h20 Swan Avatar  
 


Demain dans la mâtiné, je ferais les modifs sur une installation neuve. ;) à partir du sujet de PBt.


Administrateur


 Le 11/01/2019 à 19h26 Myster Avatar  
 


Oui il se peut que ce bug avais était corrigé mais que tu avais dl l'archive trop tôt, je sais plus du tout mais il me semble avoir résolu un bug de ce genre ^^

CsN Mortier


 Le 12/01/2019 à 11h18 Swan Avatar  
 


Bonjour,

Récap shoutbox :

Citation:
12/01/2019 à 11h10 : Swan : Salut tout le monde ^^ Ne va pas te perdre Mika ^^ EDN Myster, edn .. Ok je vais re-tester , donc il y avait bien un soucis ?

12/01/2019 à 10h41 : Myster : Bonjour à tous ! Bon courage Mickael :) Voilà j'ai mis à jour les sujets et archives sur CsN, donc Swan après test sur une v5 tu n'auras plus ce problème, de plus ce module est désormais stable pour une mise en production ! Il n'y aura plus de maj sur ce module en lui même pour le moment, mais par contre il y aura des addons au fur et à mesure du temps ! :)

11/01/2019 à 19h27 : Myster : Tu as tout bien fait pourtant, bizarre à voir demain du coup mais en théorie ça devrait fonctionner, vu qu'à chaque upload d'archive, je supprime mon dossier notif pour faire les essais avant l'envoi

11/01/2019 à 19h22 : Swan :
Tiens ==> https://pastebin.com/riKeQCiQ ^^

11/01/2019 à 17h47 : Myster : Mais ton problème est bizarre le sender id est récupérer automatiquement via une fonction globale de PHPBoost donc je vois pas pourquoi il la trouverais pas, juste au cas ou ça fonctionne pas, tu pourrais me donner ce que tu as mis dans post.php ? J'ai pu l'ancienne version du module donc je me souviens plus trop :')

11/01/2019 à 17h43 : Swan : j'ai un soucis avec la version 5.0 :p regarde le sujet , j'ai posté , ensuite c'est peut-être corrigé sur la futur maj, je sais pas.. Laisse tomber pour les screens, je les ferais quand cela sera opé sur mon locale ;)


Bon je re-teste et je te dis cela dans la journée ;)


Administrateur


 Le 12/01/2019 à 11h24 Myster Avatar  
 


D'accord merci, par contre je tiens à apporter une précision

Citation:
4/ et faire le ConnectModuleMiniMenu.class.php et le connect_mini.tpl , vraiment en dernier !


Aucun des addons n'est obligatoires, tu peux très bien installer deux addons sur tous, ou pas même le module connect n'est pas obligatoire ^^

CsN Mortier


Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
Qui est en ligne ?

Qui est en ligne ?

Au total il y a 1 Utilisateur en ligne :: 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
( basées sur les utilisateurs actifs des 5 dernières minutes )
Utilisateur en ligne: Aucun membre connecté

Membres connectés au cours des dernières 24 heures:

Swan, m-ickael,

Légende

 [ Administrateur(s) ]   [ Modérateur(s) ]   [ Helpers]   [ WebDesigner(s) ]   [ Membres ]