Notifications | PHPBoost 5.2
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Aujourd'hui je vous présente un module pour PHPBoost 5.2.
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.2 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
Notez que dans la PHPBoost 5.2 final il n'y aura pas besoin de faire les deux modifications ci-dessous car les colonnes seront prise en compte .. En attendant si vous utilisez une RC, vous devez le faire
Caché :
Par ceci:
Par le code suivant:
Voilà c'est tout !
- 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 256 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 :
Par le code suivant:
Code PHP :
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, vers la ligne 340 juste après:
Ajoutez ceci:
Dans forum/post.php, vers la ligne 340 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
ajoutez ceci:
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é :
Ajoutez ceci:
- Dans forum/action.php vers la ligne ligne 215 en dessous de:
Code PHP :
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 230 juste en dessous de
Ajoutez ceci:
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 239 juste en dessous de
Ajoutez ceci:
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 :
Ajoutez ceci:
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 :
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
Update pour PHPBoost 5.2.4 Voir ici: https://www.phpboost.com/forum/topic-17395-3+notifications-phpboost-5-2.php#m165004
Édité par Myster Le 13/12/2019 à 18h15
Swan Membre non connecté
Booster Mortier
- Booster Mortier
- Voir le profil du membre Swan
- Inscrit le : 31/05/2013
- Site internet
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
En 2, mes premières remarques #PasTaper
Myster :
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
Dans l'idée je suis plutôt intéressé, ça permet aux admins de mettre l'accent sur tel ou tel événement du site qui ne serait pas forcement en évidence (mais pas que), mais je verrai bien un "système" pour que l'utilisateur ait le choix d'accepter d'en recevoir ou pas et la possibilité de créer des "catégories" d'envoi de notifications avec le choix pour les membres de s'inscrire à toutes/chaque catégorie, un peu comme pour les newsletters
Côté fichiers, mes remarques ne sont que d'ordre rédactionnel donc rien d'important:
- tu as oublié le @since dans les docblocks, qui correspond à la date de création des fichiers, aujourd'hui le @version suffit puisque c'est récent mais dans les futures versions de phpboost le @version aura été modifié et on n'aura plus l'info de création.
- en description plusieurs fichiers ont la mention "Cette classe founit une interface...", il manque un p'tit r je pense.
Il y en a d'autres de-ci de-là, notamment dans les commentaires de fonction.
Et je suis conscient que le module est naissant, je passerai donc sous silence un GuestbookConfig dans un admincontroller, le texte en dur dans le mini, du style dans un tpl, le manque de h1 dans les tpl (w3c), le manque de balises header/article/footer (framework phpboost), une structure en <table> à l'heure de la flexbox/gridbox, les indentations/sauts de ligne dans les fichiers tpl/php.
Côté code, et là mon incompétence n'aura d'égale que la légitimité de mes interrogations , concernant les add-ons, je vois que les ajouts dans les modules cibles sont quasiment similaires et surtout qu'il y a du texte en dur (ce que je comprends dans le cas présent, sinon il faudrait créer les variables de langues dans chaque module) qui empêche le multilingue (c'est balo):
- N'y aurait-il pas un moyen de créer le code coté module notifications et faire un appel "simplifié" dans le module correspondant ?
Un genre de
NotificationsService::send_notifications('module_name');
je pense surtout à la simplicité de remettre les codes après une mise à jour de pbt impactant les fichiers.
- Est-ce qu'une vérif de présence du module notifications dans les modules cible ne serait pas nécessaire pour le cas où on désinstallerai le module notifications(ne serait-ce que par inadvertance ) ?
En 3, j'ai dit bravo ? ah oui, en 1, alors encore bravo
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Citation :Dans l'idée je suis plutôt intéressé, ça permet aux admins de mettre l'accent sur tel ou tel événement du site qui ne serait pas forcement en évidence (mais pas que), mais je verrai bien un "système" pour que l'utilisateur ait le choix d'accepter d'en recevoir ou pas et la possibilité de créer des "catégories" d'envoi de notifications avec le choix pour les membres de s'inscrire à toutes/chaque catégorie, un peu comme pour les newsletters
Oui effectivement je vais voir pour faire quelque chose qui permet de recevoir ou pas des notifications.
Citation :Côté fichiers, mes remarques ne sont que d'ordre rédactionnel donc rien d'important:
- tu as oublié le @since dans les docblocks, qui correspond à la date de création des fichiers, aujourd'hui le @version suffit puisque c'est récent mais dans les futures versions de phpboost le @version aura été modifié et on n'aura plus l'info de création.
- en description plusieurs fichiers ont la mention "Cette classe founit une interface...", il manque un p'tit r je pense.
Il y en a d'autres de-ci de-là, notamment dans les commentaires de fonction.
Ca sera corrigé dans une prochaine version
Citation :Et je suis conscient que le module est naissant, je passerai donc sous silence un GuestbookConfig dans un admincontroller, le texte en dur dans le mini, du style dans un tpl, le manque de h1 dans les tpl (w3c), le manque de balises header/article/footer (framework phpboost), une structure en <table> à l'heure de la flexbox/gridbox, les indentations/sauts de ligne dans les fichiers tpl/php.
Concernant le guestbook config, effectivement par flemme de créer les fichiers j'ai copier/coller pour retirer, j'ai dû en oublier un
Et pour le reste de tes affirmations je vais voir ce que je peut faire, y'a pas de soucis !
Citation :(ce que je comprends dans le cas présent, sinon il faudrait créer les variables de langues dans chaque module)
Justement non hier en fouillant un peu j'ai pu trouvé un fichier de langue avec par exemple $lang['trucbidule'] = 'Bienvenue sur le site :site', et la variable :site était passer ensuite dans un array en php, donc ça dois être possible de faire un fichier lang, incluant les variables à l'intérieur, ça éviterai de mettre du texte en dur dans le module
Citation :- Est-ce qu'une vérif de présence du module notifications dans les modules cible ne serait pas nécessaire pour le cas où on désinstallerai le module notifications(ne serait-ce que par inadvertance ) ?
Oui peut-être bien mais je ne trouve pas de fonction du genre module_exist('nom_du_module')
Et merci ! Bonne journée à toi
Édité par Myster Le 11/01/2019 à 09h56
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
Myster :Oui peut-être bien mais je ne trouve pas de fonction du genre module_exist('nom_du_module')
celle-là je la connais bien #HomeLanding #VérifieSiYATousLesModules
ModulesManager::is_module_installed('notifications') && ModulesManager::is_module_activated('notifications')
Myster :hey! c'est ma méthode ça! pas touche[...] mme de créer les fichiers j'ai copier/coller [...]
Édité par babsolune Le 11/01/2019 à 10h11
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Code PHP :
if(ModulesManager::is_module_activated('notifications')) { // MON CODE ? }
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
Édité par babsolune Le 11/01/2019 à 10h14
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Suite à suggestion de M-ickael
- Possibilité d'avoir une option pour archiver automatiquement les nouvelles notifications à la lecture .. Cette option ne peut pas être activé avec la suppression automatique, vu qu'elle elle supprime directement .. Donc vous pouvez essayer mais vous arriverez pas à l'activer (question de logique) toute est une question de logique
- Ajout d'une icône "Archiver" à côté de l'icone "Supprimer" des notifications (Vous pouvez archiver une à une chaque notification)
Maintenant je me penche sur ce fameux fichier de langue pour éviter du texte en dur !
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Petite update pour vous dire que désormais il n'y aura plus de texte en dur pour les notifications, et le système de réception vas être revu pour une meilleure
Pour l'envoi du contenu d'une notification là sans texte en dur ça donne ça :
Code PHP :
// Code à titre d'exemple, variable fausse .. $notify->set_content(StringVars::replace_vars(LangLoader::get_message('notification.forum.msg', 'common', 'notifications'), array('sujet' => $topic['title'], 'user' => $user)));
Je vais voir pour faire une fonction qui raccourci encore tout ça parce que là c'est long encore !
Édité par Myster Le 11/01/2019 à 12h30
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Code PHP :
$notify->set_content(NotificationsFormat::contenu('notification.forum.msg', array('username' => 'Myster', 'sujet' =>'Testeeeee')));
De plus il s'adapte à chaque variable de langue, suffit que dans une variable de langue vous ayez par exemple
$lang['msg'] = 'Bienvenue sur le site :site nous sommes ravis de vous compter parmi nos membres :username allez sur le sujet suivant :sujet';
Suffit d'ajouter un nouveau champ dans le array du genre
Code PHP :
$notify->set_content(NotificationsFormat::contenu('notification.msg', array('username' => 'Myster', 'sujet' =>'Testeeeee', 'site' => 'Mon super site')));
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie