From 5c50f4b439b6ad711318996c79cc869301d869f0 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 | 25 +++++++++- .../ItemList/IncidentHistoryListItem.php | 49 ++++++++++++++----- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/library/Notifications/Model/IncidentHistory.php b/library/Notifications/Model/IncidentHistory.php index 803b4318b..18c50539e 100644 --- a/library/Notifications/Model/IncidentHistory.php +++ b/library/Notifications/Model/IncidentHistory.php @@ -4,11 +4,16 @@ namespace Icinga\Module\Notifications\Model; +use DateTime; use ipl\Orm\Behavior\MillisecondTimestamp; use ipl\Orm\Behaviors; use ipl\Orm\Model; use ipl\Orm\Relations; +/** + * @property string $notification_state + * @property DateTime $sent_at + */ class IncidentHistory extends Model { public function getTableName() @@ -38,7 +43,9 @@ public function getColumns() 'old_severity', 'new_recipient_role', 'old_recipient_role', - 'message' + 'message', + 'notification_state', + 'sent_at' ]; } @@ -64,7 +71,7 @@ public function getColumnDefinitions() public function createBehaviors(Behaviors $behaviors) { - $behaviors->add(new MillisecondTimestamp(['time'])); + $behaviors->add(new MillisecondTimestamp(['time', 'sent_at'])); } public function getDefaultSort() @@ -84,4 +91,18 @@ public function createRelations(Relations $relations) $relations->belongsTo('rule_escalation', RuleEscalation::class)->setJoinType('LEFT'); $relations->belongsTo('channel', Channel::class)->setJoinType('LEFT'); } + + public static function translateNotificationState(string $state): string + { + switch ($state) { + case 'sent': + return t('sent', 'contact.notifications.state'); + case 'failed': + return t('failed', 'contact.notifications.state'); + case 'pending': + return t('pending', 'contact.notifications.state'); + default: + return t('unknown', 'contact.notifications.state'); + } + } } diff --git a/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php b/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php index dc39e748e..ac5803da5 100644 --- a/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php +++ b/library/Notifications/Widget/ItemList/IncidentHistoryListItem.php @@ -157,24 +157,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) ); } break;