From 1727db1cc2853dd2ef8faf5eb7148d55ad97e230 Mon Sep 17 00:00:00 2001 From: Narindra ezway Date: Wed, 12 Mar 2025 15:29:47 +0300 Subject: [PATCH] Refactor Talk and Gestion services to use user identifiers for talk room creation and notifications --- gestion/lib/Db/TalkDb.php | 10 ++++---- gestion/lib/Service/GestionService.php | 24 ++++++++++++------- gestion/lib/Service/TalkService.php | 33 +++++++++++++------------- 3 files changed, 36 insertions(+), 31 deletions(-) diff --git a/gestion/lib/Db/TalkDb.php b/gestion/lib/Db/TalkDb.php index 530f037..77e9658 100644 --- a/gestion/lib/Db/TalkDb.php +++ b/gestion/lib/Db/TalkDb.php @@ -153,7 +153,7 @@ class TalkDb { $rooms = $this->execSQLNoJsonReturn( $sql, - [$names['createdByUser'],$names['createdByAdmin']]); + [$names['target'],$names['sender']]); if(!empty($rooms)){ return $rooms[0]; @@ -161,13 +161,13 @@ class TalkDb { return null; } - public function createDevisTalkRoomAndReturnDevisTalkRoom($idNextCloud,$token){ - $roomName = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; + public function createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser,$token){ + $roomName = '["'.$targetUser.'","'.$senderUser.'"]'; $this->createDevisTalkRoom($roomName,$token); $room = $this->getDevisTalkRoomByName($roomName); $attendees = [ - $idNextCloud, - BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD + $targetUser, + $senderUser ]; $this->createDevisTalkRoomAttendeesByActors($attendees,$room['id']); return $room; diff --git a/gestion/lib/Service/GestionService.php b/gestion/lib/Service/GestionService.php index 4da67e9..dc0c306 100644 --- a/gestion/lib/Service/GestionService.php +++ b/gestion/lib/Service/GestionService.php @@ -37,6 +37,7 @@ use OCA\Gestion\Service\Order\OrderPdfService; use OCP\DB\Exception; use Psr\Log\LoggerInterface; use OCA\Gestion\Helpers\VCalendarHelpers; +use OCP\IUserSession; class GestionService { /** @var Bdd */ @@ -53,19 +54,27 @@ class GestionService { private $orderPdfService; private $devisPdfService; + private $userSession; + + private string $userConnectedUuid; + public function __construct( Bdd $gestionBdd, OrderBdd $orderBdd, LoggerInterface $logger, OrderPdfService $orderPdfService, DevisPdfService $devisPdfService, - TalkService $talkService) { + TalkService $talkService, + IUserSession $userSession + ) { $this->orderBdd = $orderBdd; $this->logger = $logger; $this->gestionBdd = $gestionBdd; $this->orderPdfService = $orderPdfService; $this->devisPdfService = $devisPdfService; $this->talkService = $talkService; + $this->userSession = $userSession; + $this->userConnectedUuid = $userSession->getUser()?->getUID() ?? BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD; } private function GetCalendarSummaryFromVCalendarString(string $vCalendarString): string @@ -194,15 +203,13 @@ class GestionService { $order = $this->orderBdd->getOrderByDevisId($devisId); $this->logger->debug(json_encode($order)); if($order != null){ - $this->orderPdfService->generateOrderPdfByOrderId($order['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); - $this->orderPdfService->generateOrderPdfByOrderId($order['id'],BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); + $this->orderPdfService->generateOrderPdfByOrderId($order['id'],$this->userConnectedUuid); } } } $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devisId,$userName); - $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); - $this->devisPdfService->generateDevisPdfByDevisId($devisId,BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); - $this->devisPdfService->generateDevisPdfByDevisId($devisId,BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); + $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid); + $this->devisPdfService->generateDevisPdfByDevisId($devisId,$this->userConnectedUuid); $this->gestionBdd->createDevisTrajetFromVCalendar($devisId,$userName); } catch(Exception $e){ @@ -321,10 +328,9 @@ class GestionService { $this->UpdateDevisDataByVCalendarString($devis,$vCalendarString); $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); $devisTalkMessage = $this->gestionBdd->getDevisTalkRoomMessage($devis['id'],$userName); - $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName); + $this->talkService->sendDevisTalkNotifications($devisTalkMessage,$userName,$this->userConnectedUuid); } - $this->devisPdfService->generateDevisPdfByDevisId($devis['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); - $this->devisPdfService->generateDevisPdfByDevisId($devis['id'],BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD); + $this->devisPdfService->generateDevisPdfByDevisId($devis['id'],$this->userConnectedUuid); return true; } catch(Exception $e){ diff --git a/gestion/lib/Service/TalkService.php b/gestion/lib/Service/TalkService.php index 837f7c5..58cd441 100644 --- a/gestion/lib/Service/TalkService.php +++ b/gestion/lib/Service/TalkService.php @@ -48,12 +48,12 @@ class TalkService { $this->talkDb = $talkDb; } - private function getUserDevisTalkRoomNames($idNextCloud){ - $roomNamesCreatedByUser = '["'.$idNextCloud.'","'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"]'; - $roomNamesCreatedByAdmin = '["'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'","'.$idNextCloud.'"]'; + private function getUserDevisTalkRoomNames($target ,$senderUser){ + $roomNamesCreatedBytargetUser = '["'.$target.'","'.$senderUser.'"]'; + $roomNamesCreatedBySenderUser = '["'.$senderUser.'","'.$target.'"]'; return [ - "createdByUser" => $roomNamesCreatedByUser, - "createdByAdmin" => $roomNamesCreatedByAdmin + "target" => $roomNamesCreatedBytargetUser, + "sender" => $roomNamesCreatedBySenderUser ]; } @@ -68,35 +68,34 @@ class TalkService { return $randomToken; } - private function getNotificationsSubjectsParameters(){ - return '{"userType":"users","userId":"'.BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD.'"}'; + private function getNotificationsSubjectsParameters(string $senderUser){ + return '{"userType":"users","userId":"'.$senderUser.'"}'; } private function getNotificationsMessageParameters($commentId){ return '{"commentId":"'.$commentId.'"}'; } - public function sendDevisTalkNotifications(string $message,string $idNextcloud){ - if($idNextcloud === BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD || $idNextcloud === BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD){ - return true; - } - $roomNames = $this->getUserDevisTalkRoomNames($idNextcloud); + public function sendDevisTalkNotifications(string $message,string $targetUser ,string $senderUser){ + $senderAndTargetIsTheSameUser = $targetUser == $senderUser; + $senderUser = $senderAndTargetIsTheSameUser ? BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD : $senderUser; + $roomNames = $this->getUserDevisTalkRoomNames($targetUser , $senderUser); $room = $this->talkDb->getDevisTalkRoomByNames($roomNames); if($room == null){ $roomToken = $this->generateTalkRandomToken(); - $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($idNextcloud,$roomToken); - $initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$idNextcloud); + $room = $this->talkDb->createDevisTalkRoomAndReturnDevisTalkRoom($targetUser,$senderUser, $roomToken); + $initialMessage = $this->talkDb->setDevisTalkRoomInitialMessageAndReturnMessage($room['id'],$targetUser); } else{ $roomToken = $room['token']; } $devisMessage = $this->talkDb->createDevisTalkRoomMessageAndReturnMessage($room['id'],$message); $this->talkDb->updateRoomLastMessage($room['id'],$devisMessage['id']); - $this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],BddConstant::DEFAULT_ADMIN_APP_ID_NEXTCLOUD); + $this->talkDb->setAttendeeLastReadMessage($room['id'],$devisMessage['id'],$senderUser); //send notifications - $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters(); + $notificationsSubjectsParameters = $this->getNotificationsSubjectsParameters($senderUser); $notificationsMessageParameters = $this->getNotificationsMessageParameters($devisMessage['id']); - $this->talkDb->sendAttendeeNotifications($idNextcloud,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); + $this->talkDb->sendAttendeeNotifications($targetUser,$roomToken,$notificationsSubjectsParameters,$notificationsMessageParameters); return true; }