aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/Forum/Service/DiscussionNotification.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classes/Forum/Service/DiscussionNotification.php')
-rw-r--r--lib/classes/Forum/Service/DiscussionNotification.php62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/classes/Forum/Service/DiscussionNotification.php b/lib/classes/Forum/Service/DiscussionNotification.php
new file mode 100644
index 0000000..c3dcfe8
--- /dev/null
+++ b/lib/classes/Forum/Service/DiscussionNotification.php
@@ -0,0 +1,62 @@
+<?php
+namespace Forum\Service;
+
+use Forum\Enum\SubscriptionNotificationType;
+use Icon;
+use PersonalNotifications;
+use Forum\ForumDiscussion;
+use Forum\ForumSubscription;
+use Forum\ForumTopic;
+use URLHelper;
+
+class DiscussionNotification
+{
+ protected ForumTopic $topic;
+ protected ForumDiscussion $discussion;
+
+ public function __construct(ForumDiscussion $discussion)
+ {
+ $this->discussion = $discussion;
+ $this->topic = $discussion->topic;
+ }
+
+ public function notifySubscribers(): void
+ {
+ $subscribers = $this->getSubscribers();
+
+ foreach ($subscribers as $subscriber) {
+ $this->sendNotifications($subscriber);
+ }
+ }
+
+ protected function getSubscribers(): array
+ {
+ return ForumSubscription::findBySQL(
+ "subject = :subject AND subject_id = :subject_id AND notification_type = :notification_type",
+ [
+ 'subject' => 'topic',
+ 'subject_id' => $this->topic->topic_id,
+ 'notification_type' => SubscriptionNotificationType::All->value
+ ]
+ );
+ }
+
+ protected function sendNotifications(ForumSubscription $subscriber): void
+ {
+ $url = URLHelper::getURL('dispatch.php/course/forum/discussions/show/'.$this->discussion->discussion_id, ['cid' => $this->topic->range_id], true);
+
+ $message = sprintf(
+ _('Es gibt eine neue Diskussion ā€ž%1$sā€œ zum Thema ā€ž%2$sā€œ.'),
+ $this->discussion->title,
+ $this->topic->name
+ );
+
+ PersonalNotifications::add(
+ $subscriber->user_id,
+ $url,
+ $message,
+ null,
+ Icon::create('forum')
+ );
+ }
+}