Skip to content

MelisMessenger

Messagerie interne entre utilisateurs dans le back-office Melis. Paquet melisplatform/melis-messenger.

Présentation

MelisMessenger ajoute un système de messagerie privée léger à la plateforme afin que les collaborateurs du back-office puissent communiquer entre eux. Un utilisateur démarre une conversation avec un ou plusieurs autres utilisateurs, les messages sont échangés et rafraîchis à intervalle régulier, et une icône dans l'en-tête signale les nouveaux messages non lus. C'est un outil uniquement back-office — il n'existe aucun composant front-office.

Activation

Ajouter dans config/melis.module.load.php :

php
return [
    'MelisMessenger',
];

Nécessite melisplatform/melis-core (^5.2). La catégorie du module est core avec dbdeploy activé, donc ses tables s'installent via le mécanisme dbdeploy.

Services principaux

AliasRôle
MelisMessengerServiceService public de messagerie : envoyer et lire messages/conversations.
MelisMessengerMsgTablePasserelle de table pour melis_messenger_msg.
MelisMessengerMsgContentTablePasserelle de table pour melis_messenger_msg_content.
MelisMessengerMsgMembersTablePasserelle de table pour melis_messenger_msg_members.

Les méthodes de MelisMessengerService déclenchent les événements melismessenger_*_start / *_end pour chaque appel de lecture/liste (ex. melismessenger_get_conversation_start / _end) :

MéthodeRôle
saveMsg($data)Crée/met à jour une conversation ; retourne l'id de conversation.
saveMsgMembers($data)Rattache un utilisateur à une conversation.
saveMsgContent($data)Enregistre un message dans une conversation.
getConversation($id)Récupère une conversation complète par id.
getConversationWithLimit($id, $limit, $offset)Récupération paginée de la conversation.
getNewMessage($id)Récupère les nouveaux messages non lus depuis le dernier sondage.
updateMessageStatus($data, $msg_id, $user_id)Marque les messages comme lus pour un utilisateur.
getContactList($convo_id, $user_id)Résout les contacts d'une conversation.
prepareConversationId($userId)Liste les ids de conversation auxquels un utilisateur appartient.
getUserRightsForMessenger()Vérifie les droits d'accès de l'utilisateur courant au module.

Back-office

Le module apparaît dans le back-office via config/app.interface.php :

  • Un onglet Messenger dans l'écran du profil utilisateur — melisKey melismessenger_tool (icône comments), injecté sous meliscore_user_profile_tabs.
  • Une icône de notification dans l'en-tête — injectée sous meliscore_header, signale les nouveaux messages non lus depuis n'importe quel écran du back-office.
  • Le fil de discussion se rafraîchit automatiquement toutes les msg_interval millisecondes (par défaut 60 000 ms).

Toutes les actions se trouvent dans MelisMessenger\Controller\MelisMessengerController :

ActionPrésentation
renderMessengerActionAffiche l'onglet Messenger du profil.
renderMessengerToolContentActionAffiche le contenu du fil de conversation.
renderMessengerContactActionAffiche le sélecteur de contacts/destinataires.
headerMessengerActionAffiche l'icône de notification dans l'en-tête.
createConversationActionAJAX — crée une conversation.
saveMessageActionAJAX — envoie un message.
getConversationActionAJAX — récupère une conversation.
getNewMessageActionAJAX — sonde les nouveaux messages.
getLastMessageActionAJAX — récupère le dernier message.
updateMessageStatusActionAJAX — marque les messages comme lus.
getContactListActionAJAX — récupère la liste des contacts.
getMsgTimeIntervalActionAJAX — retourne l'intervalle de sondage.
getUserRightsForMessengerActionAJAX — retourne les droits de l'utilisateur.

Le sélecteur de destinataires utilise la bibliothèque tokenize2 (public/plugins/tokenize2.*) via l'élément de formulaire MelisMessengerInput (un champ tokenize2 multi-destinataires).

Tables de base de données

TableContenu
melis_messenger_msgUne ligne par conversation (msgr_msg_id, msgr_msg_creator_id, msgr_msg_date_created).
melis_messenger_msg_membersUtilisateurs participant à une conversation (msgr_msg_mbr_id, msgr_msg_id, msgr_msg_mbr_usr_id).
melis_messenger_msg_contentMessages individuels (msgr_msg_cont_id, expéditeur, texte du message, date, statut).

Exemple

php
$messenger = $this->getServiceManager()->get('MelisMessengerService');

// Create a conversation, add a member, then post a message
$convoId = $messenger->saveMsg($data);
$messenger->saveMsgMembers(['msgr_msg_id' => $convoId, 'msgr_msg_mbr_usr_id' => $userId]);
$messenger->saveMsgContent(['msgr_msg_id' => $convoId, 'msgr_msg_cont_message' => 'Hi']);

// Read messages
$thread = $messenger->getConversation($convoId);
$page   = $messenger->getConversationWithLimit($convoId, 10, 0);
$new    = $messenger->getNewMessage($convoId);

// Mark read
$messenger->updateMessageStatus($data, $msgId, $userId);

// Contacts
$contacts = $messenger->getContactList($convoId, $userId);

Fichiers clés

ÉlémentChemin
Config du module (routes, services, contrôleurs)vendor/melisplatform/melis-messenger/config/module.config.php
Déclaration de l'interface (onglet profil + en-tête)vendor/melisplatform/melis-messenger/config/app.interface.php
Config des formulairesvendor/melisplatform/melis-messenger/config/app.forms.php
Config des outilsvendor/melisplatform/melis-messenger/config/app.tools.php
Service publicvendor/melisplatform/melis-messenger/src/Service/MelisMessengerService.php
Contrôleur principalvendor/melisplatform/melis-messenger/src/Controller/MelisMessengerController.php
Passerelles de tablesvendor/melisplatform/melis-messenger/src/Model/Tables/
Élément de formulaire sélecteur de destinatairesvendor/melisplatform/melis-messenger/src/Form/Factory/MelisMessengerInputFactory.php
Delta d'installation BDDvendor/melisplatform/melis-messenger/install/

Voir aussi : melis-core