diff --git a/application/Espo/Classes/AssignmentNotificators/Email.php b/application/Espo/Classes/AssignmentNotificators/Email.php index de1320a49d..2a2c2819e8 100644 --- a/application/Espo/Classes/AssignmentNotificators/Email.php +++ b/application/Espo/Classes/AssignmentNotificators/Email.php @@ -197,7 +197,8 @@ class Email implements AssignmentNotificator if ( $entity->getUserIdColumnInTrash($userId) || - $entity->getUserIdColumnIsRead($userId) + $entity->getUserIdColumnIsRead($userId) || + $entity->getUserSkipNotification($userId) ) { continue; } diff --git a/application/Espo/Entities/Email.php b/application/Espo/Entities/Email.php index 28e2e20d10..613f4577d1 100644 --- a/application/Espo/Entities/Email.php +++ b/application/Espo/Entities/Email.php @@ -40,6 +40,7 @@ use Espo\Repositories\Email as EmailRepository; use Espo\Tools\Email\Util as EmailUtil; use RuntimeException; +use stdClass; class Email extends Entity { @@ -847,6 +848,24 @@ class Email extends Entity return $this; } + public function getUserSkipNotification(string $userId): bool + { + /** @var stdClass $map */ + $map = $this->get('skipNotificationMap') ?? (object) []; + + return $map->$userId ?? false; + } + + public function setUserSkipNotification(string $userId): self + { + /** @var stdClass $map */ + $map = $this->get('skipNotificationMap') ?? (object) []; + $map->$userId = true; + $this->set('skipNotificationMap', $map); + + return $this; + } + public function addTeamId(string $teamId): self { $this->addLinkMultipleId('teams', $teamId); diff --git a/application/Espo/Entities/EmailFilter.php b/application/Espo/Entities/EmailFilter.php index 3c2ecc4ed1..e8bd693f54 100644 --- a/application/Espo/Entities/EmailFilter.php +++ b/application/Espo/Entities/EmailFilter.php @@ -65,6 +65,11 @@ class EmailFilter extends Entity return (bool) $this->get('markAsRead'); } + public function skipNotification(): bool + { + return (bool) $this->get('skipNotification'); + } + public function isGlobal(): bool { return (bool) $this->get('isGlobal'); diff --git a/application/Espo/Repositories/Email.php b/application/Espo/Repositories/Email.php index 3f81cb2014..5b141b6b33 100644 --- a/application/Espo/Repositories/Email.php +++ b/application/Espo/Repositories/Email.php @@ -468,6 +468,10 @@ class Email extends Database implements if ($filter->markAsRead()) { $entity->setUserColumnIsRead($userId, true); } + + if ($filter->skipNotification()) { + $entity->setUserSkipNotification($userId); + } } } diff --git a/application/Espo/Resources/i18n/en_US/EmailFilter.json b/application/Espo/Resources/i18n/en_US/EmailFilter.json index 6a19586ed8..9472684594 100644 --- a/application/Espo/Resources/i18n/en_US/EmailFilter.json +++ b/application/Espo/Resources/i18n/en_US/EmailFilter.json @@ -9,7 +9,8 @@ "isGlobal": "Is Global", "emailFolder": "Folder", "groupEmailFolder": "Group Email Folder", - "markAsRead": "Mark as Read" + "markAsRead": "Mark as Read", + "skipNotification": "Skip Notification" }, "links": { "emailFolder": "Folder", diff --git a/application/Espo/Resources/layouts/EmailFilter/detail.json b/application/Espo/Resources/layouts/EmailFilter/detail.json index 6d1bbc4f9f..9adb6148a5 100644 --- a/application/Espo/Resources/layouts/EmailFilter/detail.json +++ b/application/Espo/Resources/layouts/EmailFilter/detail.json @@ -31,7 +31,7 @@ {"name": "action"}, {"name": "markAsRead"} ], [ - {"name": "emailFolder"}, false + {"name": "emailFolder"}, {"name": "skipNotification"} ], [ {"name": "groupEmailFolder"}, false diff --git a/application/Espo/Resources/layouts/EmailFilter/detailSmall.json b/application/Espo/Resources/layouts/EmailFilter/detailSmall.json index eb1577e690..40edf61bb6 100644 --- a/application/Espo/Resources/layouts/EmailFilter/detailSmall.json +++ b/application/Espo/Resources/layouts/EmailFilter/detailSmall.json @@ -39,7 +39,7 @@ {"name": "groupEmailFolder"} ], [ - {"name": "markAsRead"} + {"name": "markAsRead"}, {"name": "skipNotification"} ] ] } diff --git a/application/Espo/Resources/layouts/EmailFilter/filters.json b/application/Espo/Resources/layouts/EmailFilter/filters.json index a59f2cf3ca..41d6c78688 100644 --- a/application/Espo/Resources/layouts/EmailFilter/filters.json +++ b/application/Espo/Resources/layouts/EmailFilter/filters.json @@ -2,6 +2,7 @@ "parent", "action", "markAsRead", + "skipNotification", "createdBy", "createdAt" ] diff --git a/application/Espo/Resources/metadata/clientDefs/EmailFilter.json b/application/Espo/Resources/metadata/clientDefs/EmailFilter.json index 0a830c0507..d999d66067 100644 --- a/application/Espo/Resources/metadata/clientDefs/EmailFilter.json +++ b/application/Espo/Resources/metadata/clientDefs/EmailFilter.json @@ -94,6 +94,17 @@ } ] } + }, + "skipNotification": { + "visible": { + "conditionGroup": [ + { + "attribute": "parentType", + "type": "equals", + "value": "User" + } + ] + } } }, "options": { diff --git a/application/Espo/Resources/metadata/entityDefs/Email.json b/application/Espo/Resources/metadata/entityDefs/Email.json index aafa078cb7..ec14a1df62 100644 --- a/application/Espo/Resources/metadata/entityDefs/Email.json +++ b/application/Espo/Resources/metadata/entityDefs/Email.json @@ -490,6 +490,12 @@ "customizationDisabled": true, "massUpdateDisabled": true }, + "skipNotificationMap": { + "type": "jsonObject", + "utility": true, + "readOnly": true, + "notStorable": true + }, "teams": { "type": "linkMultiple", "view": "views/fields/teams" diff --git a/application/Espo/Resources/metadata/entityDefs/EmailFilter.json b/application/Espo/Resources/metadata/entityDefs/EmailFilter.json index 892de96f86..c7000d744c 100644 --- a/application/Espo/Resources/metadata/entityDefs/EmailFilter.json +++ b/application/Espo/Resources/metadata/entityDefs/EmailFilter.json @@ -61,6 +61,9 @@ "markAsRead": { "type": "bool" }, + "skipNotification": { + "type": "bool" + }, "createdAt": { "type": "datetime", "readOnly": true