From 0dc2c4c05e6ae1dbb818b7797472f0e2625ef45c Mon Sep 17 00:00:00 2001
From: Thomas Hackl <hackl@data-quest.de>
Date: Mon, 12 Jun 2023 16:39:46 +0200
Subject: [PATCH] check for news expiration in cronjob

---
 MatrixPostNewsCronjob.php | 51 ++++++++++++++++++++++-----------------
 plugin.manifest           |  2 +-
 2 files changed, 30 insertions(+), 23 deletions(-)

diff --git a/MatrixPostNewsCronjob.php b/MatrixPostNewsCronjob.php
index d4ac57f..e2d63d4 100644
--- a/MatrixPostNewsCronjob.php
+++ b/MatrixPostNewsCronjob.php
@@ -77,34 +77,41 @@ class MatrixPostNewsCronjob extends CronJob
             print_r($news);
         }
         foreach (StudipNews::findMany($news) as $one) {
-            foreach ($one->news_ranges as $range) {
-                $success = false;
-                if ($range->course && MatrixRoom::hasRoom($range->course->id)) {
-                    $room = MatrixRoom::find($range->course->id);
+            if ($one->date + $one->expire >= time()) {
+                foreach ($one->news_ranges as $range) {
+                    $success = false;
+                    if ($range->course && MatrixRoom::hasRoom($range->course->id)) {
+                        $room = MatrixRoom::find($range->course->id);
 
-                    $success = MatrixClient::get()->postMessage(
-                        MatrixAccount::requireSystemAccount(),
-                        $room->getLinkedRoom(),
-                        'Ankündigung: ' . $one->topic . ' ' . strip_tags($one->body),
-                        '<strong>Ankündigung: ' . $one->topic . '</strong><br>' . $one->body
-                    );
+                        $success = MatrixClient::get()->postMessage(
+                            MatrixAccount::requireSystemAccount(),
+                            $room->getLinkedRoom(),
+                            'Ankündigung: ' . $one->topic . ' ' . strip_tags($one->body),
+                            '<strong>Ankündigung: ' . $one->topic . '</strong><br>' . $one->body
+                        );
+
+                        // Mark entry as done after message has been posted to Matrix room successfully.
+                        if ($success) {
+                            // Verbose output
+                            if ($parameters['verbose']) {
+                                echo sprintf(
+                                    "Posted news entry $1%s to Matrix room $2%s in course $3%s.\n",
+                                    $one->id, $room->matrix_room_id, $room->range_id
+                                );
+                            }
 
-                    // Mark entry as done after message has been posted to Matrix room successfully.
-                    if ($success) {
-                        // Verbose output
-                        if ($parameters['verbose']) {
-                            echo sprintf(
-                                "Posted news entry $1%s to Matrix room $2%s in course $3%s.\n",
-                                $news->id, $room->matrix_room_id, $room->range_id
+                            DBManager::get()->execute(
+                                "UPDATE `matrix_upcoming_news` SET `posted` = 1 WHERE `news_id` = :id AND `range_id` = :range",
+                                ['id' => $one->id, 'range' => $range->course->id]
                             );
                         }
-
-                        DBManager::get()->execute(
-                            "UPDATE `matrix_upcoming_news` SET `posted` = 1 WHERE `news_id` = :id AND `range_id` = :range",
-                            ['id' => $one->id, 'range' => $range->course->id]
-                        );
                     }
                 }
+            } else {
+                DBManager::get()->execute(
+                    "DELETE FROM `matrix_upcoming_news` WHERE `news_id` = :id",
+                    ['id' => $one->id]
+                );
             }
         }
 
diff --git a/plugin.manifest b/plugin.manifest
index c25c2a6..630979a 100644
--- a/plugin.manifest
+++ b/plugin.manifest
@@ -1,7 +1,7 @@
 pluginname=Matrix-Chat
 pluginclassname=MatrixPlugin
 origin=data-quest
-version=1.4.3
+version=1.4.4
 screenshot=assets/images/matrix_logo.png
 description=Matrix chat for Stud.IP courses
 studipMinVersion=4.5
-- 
GitLab