From be35b80468442e03505c25d81853c3a910aa752d Mon Sep 17 00:00:00 2001 From: Yonas Habteab Date: Mon, 25 Sep 2023 09:28:11 +0200 Subject: [PATCH] Add pending notifications incident history messages --- .../Notifications/Model/IncidentHistory.php | 29 ++++++++++- .../ItemList/IncidentHistoryListItem.php | 49 ++++++++++++++----- 2 files changed, 65 insertions(+), 13 deletions(-) diff --git a/library/Notifications/Model/IncidentHistory.php b/library/Notifications/Model/IncidentHistory.php index b38ff248..3e19efc5 100644 --- a/library/Notifications/Model/IncidentHistory.php +++ b/library/Notifications/Model/IncidentHistory.php @@ -28,6 +28,8 @@ * @property ?string $new_recipient_role * @property ?string $old_recipient_role * @property ?string $message + * @property string $notification_state + * @property DateTime $sent_at * * @property Query | Incident $incident * @property Query | Event $event @@ -67,7 +69,9 @@ public function getColumns() 'old_severity', 'new_recipient_role', 'old_recipient_role', - 'message' + 'message', + 'notification_state', + 'sent_at' ]; } @@ -93,7 +97,7 @@ public function getColumnDefinitions() public function createBehaviors(Behaviors $behaviors) { - $behaviors->add(new MillisecondTimestamp(['time'])); + $behaviors->add(new MillisecondTimestamp(['time', 'sent_at'])); } public function getDefaultSort() @@ -113,4 +117,25 @@ public function createRelations(Relations $relations) $relations->belongsTo('rule_escalation', RuleEscalation::class)->setJoinType('LEFT'); $relations->belongsTo('channel', Channel::class)->setJoinType('LEFT'); } + + /** + * Transform the given notification state into a translatable message. + * + * @param string $state + * + * @return string + */ + public static function translateNotificationState(string $state): string + { + switch ($state) { + case 'sent': + return t('sent', 'notifications.transmission.state'); + case 'failed': + return t('failed', 'notifications.transmission.state'); + case 'pending': + return t('pending', 'notifications.transmission.state'); + default: + return t('unknown', 'notifications.transmission.state'); + } + } } diff --git a/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php b/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php index 21f70579..d5741278 100644 --- a/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php +++ b/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php @@ -138,24 +138,51 @@ protected function buildMessage(): string break; case "notified": if ($this->item->contactgroup_id) { - $message = sprintf( - t('Contact %s notified via %s as member of contact group %s'), - $this->item->contact->full_name, - $this->item->channel->type, - $this->item->contactgroup->name - ); + if ($this->item->notification_state === 'sent') { + $message = sprintf( + t('Contact %s notified via %s as member of contact group %s'), + $this->item->contact->full_name, + $this->item->channel->type, + $this->item->contactgroup->name + ); + } else { + $message = sprintf( + t('Contact %s notified via %s as member of contact group %s (%s)'), + $this->item->contact->full_name, + $this->item->channel->type, + $this->item->contactgroup->name, + IncidentHistory::translateNotificationState($this->item->notification_state) + ); + } } elseif ($this->item->schedule_id) { + if ($this->item->notfication_state === 'sent') { + $message = sprintf( + t('Contact %s notified via %s as member of schedule %s'), + $this->item->contact->full_name, + $this->item->channel->type, + $this->item->schedule->name + ); + } else { + $message = sprintf( + t('Contact %s notified via %s as member of schedule %s (%s)'), + $this->item->contact->full_name, + $this->item->schedule->name, + $this->item->channel->type, + IncidentHistory::translateNotificationState($this->item->notification_state) + ); + } + } elseif ($this->item->notification_state === 'sent') { $message = sprintf( - t('Contact %s notified via %s as member of schedule %s'), + t('Contact %s notified via %s'), $this->item->contact->full_name, - $this->item->channel->type, - $this->item->schedule->name + $this->item->channel->type ); } else { $message = sprintf( - t('Contact %s notified via %s'), + t('Contact %s notified via %s (%s)'), $this->item->contact->full_name, - $this->item->channel->type + $this->item->channel->type, + IncidentHistory::translateNotificationState($this->item->notification_state) ); }