Easy-Design.Net forum




Documentations et Dossiers Notifications Forum | PHPBoost 5.1

Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 09/01/2019 à 21h55
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





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 12/01/2019 à 10h36
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 09/01/2019 à 22h18
Super :D

Je test ça demain matin :D

Merci :)
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 09/01/2019 à 22h20
Mais de rien, tu pourras me faire un retour ? :)
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 08h20
Salut.

Je suis en train de faire les modifs .. Mais faut donner des fichiers pour éditer, car avec la fonction caché, c'est un carnage dès que tu cliques .. Tu te perd, et ça sélectionnes un autre texte caché qui est plus bas du coup ..
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 08h29
Bon, ton module à planté mon site lors de l'installation (du module) .. Même erreur que lors d'une redirection !

Code TEXT :
The requested URL /[R=301,L] was not found on this server.
 
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 08h47
Salut.

Bon, j'ai pu retirer ce que j'avais dans le .htaccess, mais c'est bizarre que c'est revenu !

ça fonctionne, seulement, je n'ai pas d'alerte spécifique en faite .. Rien pour dire que j'ai une notification, si je vais pas directement sur la page accueil des notifications :)
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 10/01/2019 à 09h15
Re bizarre l'erreur du htaccess ça vient pas du module en tout cas :/

Sinon si si y'a un menu basique ... regarde bien dans la gestion des menus ^^ Edité par Myster Le 10/01/2019 à 09h15
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 09h20
Salut.

Oui le mini module, mais très imposant, il aurait fallu implanter dans le connect je pense, ou alors une cloche pour le coup.

Par contre je détecte un autre soucis, et je trouve pas. On dirait que la page est "longue" à s'afficher. J'ai des micros flashs à chaque changement de page (page accueil notifs ou sur toutes les pages si j'ai le mini module apparent).

Il doit y avoir un soucis de cache, ou une balise pas fermé .. Je sais pas.
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 10/01/2019 à 09h22
Hello, tu peux me faire un compte test avec quelques notif dedans stp ? Merci Edité par Myster Le 10/01/2019 à 09h22
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 09h31
C'est fait en MP :)

Tu verras c'est charge et ça flash (sous chrome). Habituellement la page ne flash pas au chargement des pages, là oui un quart de seconde.

La dernière fois que j'ai eu ça, c'est quand j'ai oublié de fermer une balise ..
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 10/01/2019 à 09h34
Re,

Donc pour la lenteur t'es sûr de ça ? Parce que moi ça c'est affiché instantanément pourtant j'ai une connexion pourri ... ^^ Et pour ce qui est du "flash" je vais aller voir ça, la seule hypothèse probable c'est dans le notifications.tpl puisque la page /notifications appelle que HomeController et il ne charge que notifications.tpl

Mais c'est bizarre j'ai pas ce soucis en local :/ Edité par Myster Le 10/01/2019 à 09h35
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 09h40
J'ai détecté autre chose. Que tu peux voir.

Les logos en cliquant sur "partager" (un petit bouton en haut droite) et mes logos RECHERCHER & CONTACT tout en haut à droite du site sont remontés ..

Ils sont normaux sur les autres pages.

Et oui c'est certains, quand je suis sur la page des notifs, j'ai un flash au changement de page (mais ça reste rapide attention, mais j'ai un flash). Quand je suis ailleurs, ma bannière etc... reste intact au changement de page. Pas de flash.
Myster Membre non connecté

EDN Enraciné(e)

Rang

Avatar

Inscrit le : 19/01/2011 à 16h42

Messages: 871

Le 10/01/2019 à 09h43
On va essayer un truc, retire le css du module de notification (supprime tout le css à l'intérieur de notifications.css) puis ensuite supprime le cache de PBT

Et dis moi si ça a changer quelque chose ?
   
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 09h46
Oui c'est la même chose (même défautS)
m-ickael Membre non connecté

EDN Maitre-Sage

Rang

Avatar

Inscrit le : 23/02/2010 à 09h15

Messages: 2296

Le 10/01/2019 à 09h48
Mon fichier CSS est OK

Code CSS :
.list-notifications {
 
}
.list-date {
    color:#b2b2b2;
    font-weight:bold;
    border-left: 4px solid #989c9a;
    border-right: 1px solid #3333;
}
 
.list-avatar { border-right: none; }
.list-text { border-left: none; }
 
.list-date, .list-avatar,.list-text, .list-type {
    border-bottom: none!important;
}
 
.list-avatar img {
    max-width: 50px;
    max-height: 50px;
    border-radius: 50%;
    vertical-align: middle;
 
}  
 
.list-date, .list-text, .list-avatar, .list-type {
    background-color: #ecf0f1 !important;
}
 
.list-spacer { }
.list-ghost {height: 0px; border: none !important;}
 
/* MODIFICATIONS */
 
#module-notifications .table {
    margin:40px 0 0 0;
}
 
#module-notifications .cssmenu-group > ul > li:last-child {
    margin:20px;
}
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie