Forum

Créations de Modules » Vos Modules Notifications | PHPBoost 5.1

Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 06/01/2019 à 20h27
Bonjour à toutes et à tous,

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

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


notif1_10434
notif2_2c41d
notif3
notif4

Lien de téléchargement


Pour télécharger le module Notifications pour PHPBoost 5.1 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 ..

A FAIRE ABSOLUMENT AVANT D'INTEGRER LES ADDONS


Certains addons nécessite des champs que certaines requêtes SQL de PHPBoost 5.1 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 253 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('title', 'user_id', '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 338 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é :
Vers la ligne 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 215 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 ..[/b]

Caché :
  • Allez dans [b]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,


    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

Edité par Myster Le 11/01/2019 à 16h58
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1368

Le 06/01/2019 à 20h34
Salut.

Comme d'habitude ça sens bon :)
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 06/01/2019 à 20h37
Pour le moment je suis confronté à aucun problème, j'ai mis à jours ma connaissance de la POO ça va le faire ! (Merci grafikart ! )
Et j'avance vite c'est ça qui est bien, surtout que j'ai rien de prévu la semaine prochaine ça impliquerait sûrement la sortie de ce module la semaine pro sait-on jamais ! ;) Edité par Myster Le 06/01/2019 à 20h37
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1368

Le 06/01/2019 à 20h43
On verra en temps voulu, j'ai déjà bavé sur un qui n'est pas là :lol

Dans tous les cas, courage à toi :) C'est sympa de faire ça :top
babsolune Membre non connecté

Modérateur

Rang

Avatar

Equipe Graphique

Inscrit le : 16/05/2008 à 12h52

Messages: 2334

Le 07/01/2019 à 06h20
Super ça

juste un petit truc d'ordre rédactionnel qui ne changera pas grand chose, on est en train de revoir les docblocks (crédits au début du fichier) en début de fichiers, si tu peux intégrer la nouvelle nomenclature, c'est top ;)

tu as le modèle sur le repo Github
avant https://github.com/PHPBoost/PHPBoost/blob/5.1/BBCode/formatting/BBCodeEditor.class.php
après https://github.com/PHPBoost/PHPBoost/blob/5.2/BBCode/formatting/BBCodeEditor.class.php


Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 07/01/2019 à 10h41
Bonjour,

Oui merci c'est fait :)
Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 07/01/2019 à 22h15
Bonsoir !

Alors la base du module de notifications est finalisé dans sa première version, il me reste plus qu'à faire les "Addons", ce qui prends quelques minutes à faire...

Donc je pense que le module sortira après demain (Si j'ai de l'inspiration pour faire le design html/css de la présentation des notifications) ! En tout cas je suis content d'être allé jusqu'au bout avec les petites mésaventures que j'ai eu j'ai pu apprendre de mes erreurs.
Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 09/01/2019 à 21h52
Module disponible pour la 5.1 !
Site web    
Swan Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 31/05/2013 à 12h34

Messages: 769

Le 10/01/2019 à 11h34
Merci Myster ^^
Site web    
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 10/01/2019 à 12h00
Mais de rien :)

Petite maj pour avoir accès au profil de celui qui envoi la notifications

Dans notifications.tpl

Remplacez

Code TPL :
 
{U_SENDER_PROFIL}


par

Code TPL :
{list_notifications.U_SENDER_PROFIL}


Et dans archives.tpl remplacez

Code TPL :
 
{U_SENDER_PROFIL}


par
Code TPL :
{list_archives.U_SENDER_PROFIL}


L'archive vas être mise à jour dans quelques minutes Edité par Myster Le 10/01/2019 à 12h01
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1368

Le 10/01/2019 à 13h39
Merci.

Je confirme c'est tout OK :)
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 10/01/2019 à 13h41
J'en suis content alors qu'il soit stable !

(Cf: "Module" points ... :lol :lol :lol ) Edité par Myster Le 10/01/2019 à 13h41
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1368

Le 10/01/2019 à 14h04
Le module points, j'ai laissé tombé à cause des MAJs :D
Myster Membre non connecté

Booster Mortier

Rang

Avatar

Inscrit le : 04/10/2010 à 19h18

Messages: 931

Le 10/01/2019 à 14h06
Tu m'étonnes la galère totale ce module, faut attendre une maj de PBT qui intègre une API permettant justement d'avoir des modules qui peuvent "intéroger" pour ne pas avoir à faire la modif dans tous les module :)
Site web    
MickaelFR Membre non connecté

Booster Missile

Rang

Avatar

Inscrit le : 20/01/2014 à 11h01

Messages: 1368

Le 10/01/2019 à 14h32
Salut.

En complément pour le .tpl :

Code HTML :
<li class="connect-element connect-notifications">
                    <a href="{PATH_TO_ROOT}/notifications" class="small">
                        <i class="fa fa-bell" aria-hidden="true"></i><span> <strong>{NBR_NOTIFICATIONS}</strong></span>
                    </a>
                </li>
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie