From 6d379871793d85a71b368ac14b5a74d867bfbaca Mon Sep 17 00:00:00 2001
From: Shaswat Ganisshan <sganisshan13@gmail.com>
Date: Fri, 31 May 2024 10:05:15 -0400
Subject: [PATCH 1/3] implemented deletion of notices at expiry date

---
 tools/docker-dev/sql/bootstrap.sql  | 5 +++--
 tools/docker-dev/unity-web-portal   | 1 +
 workers/notices-expiry-deletion.php | 6 ++++++
 3 files changed, 10 insertions(+), 2 deletions(-)
 create mode 160000 tools/docker-dev/unity-web-portal
 create mode 100644 workers/notices-expiry-deletion.php

diff --git a/tools/docker-dev/sql/bootstrap.sql b/tools/docker-dev/sql/bootstrap.sql
index 96f8ad77..395aa0ca 100644
--- a/tools/docker-dev/sql/bootstrap.sql
+++ b/tools/docker-dev/sql/bootstrap.sql
@@ -147,7 +147,8 @@ CREATE TABLE `notices` (
   `id` int(11) NOT NULL,
   `date` timestamp NOT NULL DEFAULT current_timestamp(),
   `title` varchar(300) NOT NULL,
-  `message` longtext NOT NULL
+  `message` longtext NOT NULL,
+  `expiry` timestamp NOT NULL DEFAULT DATE_ADD(CURDATE(), INTERVAL 7 DAY)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 
 --
@@ -156,7 +157,7 @@ CREATE TABLE `notices` (
 
 INSERT INTO `notices` (`id`, `date`, `title`, `message`) VALUES
 (9, '2022-09-19 15:49:10', 'Example Notice 1', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>'),
-(10, '2022-09-14 11:48:39', 'Example Notice 2', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>');
+(10, '2022-09-14 11:48:39', 'Example Notice 2', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>', '2024-05-29');
 
 -- --------------------------------------------------------
 
diff --git a/tools/docker-dev/unity-web-portal b/tools/docker-dev/unity-web-portal
new file mode 160000
index 00000000..7087b787
--- /dev/null
+++ b/tools/docker-dev/unity-web-portal
@@ -0,0 +1 @@
+Subproject commit 7087b78718a64185ea1ebaf615f4a8b395f39267
diff --git a/workers/notices-expiry-deletion.php b/workers/notices-expiry-deletion.php
new file mode 100644
index 00000000..623e90d5
--- /dev/null
+++ b/workers/notices-expiry-deletion.php
@@ -0,0 +1,6 @@
+<?php
+
+require_once "../resources/autoload.php";
+require_once "../resources/init.php";
+
+$SQL->getConn()->prepare("DELETE FROM `notices` WHERE `expiry` <= CURDATE()")->execute();

From 78796d766667e77e3d1db4f5030a091bb3c56485 Mon Sep 17 00:00:00 2001
From: Shaswat Ganisshan <sganisshan13@gmail.com>
Date: Mon, 16 Sep 2024 19:53:00 -0400
Subject: [PATCH 2/3] Fixed deletion of notices at expiry

---
 resources/lib/UnitySQL.php          | 10 ++++++----
 tools/docker-dev/sql/bootstrap.sql  |  8 ++++----
 webroot/admin/notices.php           |  4 ++--
 webroot/index.php                   |  4 ++++
 workers/notices-expiry-deletion.php |  6 ------
 5 files changed, 16 insertions(+), 16 deletions(-)
 delete mode 100644 workers/notices-expiry-deletion.php

diff --git a/resources/lib/UnitySQL.php b/resources/lib/UnitySQL.php
index 904ea2fd..cbf39315 100644
--- a/resources/lib/UnitySQL.php
+++ b/resources/lib/UnitySQL.php
@@ -126,14 +126,15 @@ public function deleteRequestsByUser($user)
         $stmt->execute();
     }
 
-    public function addNotice($title, $date, $content, $operator)
+    public function addNotice($title, $date, $content, $expiry, $operator)
     {
         $stmt = $this->conn->prepare(
-            "INSERT INTO " . self::TABLE_NOTICES . " (date, title, message) VALUES (:date, :title, :message)"
+            "INSERT INTO " . self::TABLE_NOTICES . " (date, title, message, expiry) VALUES (:date, :title, :message, :expiry)"
         );
         $stmt->bindParam(":date", $date);
         $stmt->bindParam(":title", $title);
         $stmt->bindParam(":message", $content);
+        $stmt->bindParam(":expiry", $expiry); 
 
         $stmt->execute();
 
@@ -147,14 +148,15 @@ public function addNotice($title, $date, $content, $operator)
         );
     }
 
-    public function editNotice($id, $title, $date, $content)
+    public function editNotice($id, $title, $date, $content, $expiry)
     {
         $stmt = $this->conn->prepare(
-            "UPDATE " . self::TABLE_NOTICES . " SET date=:date, title=:title, message=:message WHERE id=:id"
+            "UPDATE " . self::TABLE_NOTICES . " SET date=:date, title=:title, message=:message, expiry=:expiry WHERE id=:id"
         );
         $stmt->bindParam(":date", $date);
         $stmt->bindParam(":title", $title);
         $stmt->bindParam(":message", $content);
+        $stmt->bindParam(":expiry", $expiry);
         $stmt->bindParam(":id", $id);
 
         $stmt->execute();
diff --git a/tools/docker-dev/sql/bootstrap.sql b/tools/docker-dev/sql/bootstrap.sql
index 395aa0ca..6966885b 100644
--- a/tools/docker-dev/sql/bootstrap.sql
+++ b/tools/docker-dev/sql/bootstrap.sql
@@ -148,16 +148,16 @@ CREATE TABLE `notices` (
   `date` timestamp NOT NULL DEFAULT current_timestamp(),
   `title` varchar(300) NOT NULL,
   `message` longtext NOT NULL,
-  `expiry` timestamp NOT NULL DEFAULT DATE_ADD(CURDATE(), INTERVAL 7 DAY)
+  `expiry` timestamp NOT NULL DEFAULT DATE_ADD(current_timestamp(), INTERVAL 14 DAY)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 
 --
 -- Dumping data for table `notices`
 --
 
-INSERT INTO `notices` (`id`, `date`, `title`, `message`) VALUES
-(9, '2022-09-19 15:49:10', 'Example Notice 1', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>'),
-(10, '2022-09-14 11:48:39', 'Example Notice 2', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>', '2024-05-29');
+INSERT INTO `notices` (`id`, `date`, `title`, `message`, `expiry`) VALUES
+(9, '2022-09-19 15:49:10', 'Example Notice 1', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>', '2025-05-29 01:02:03'),
+(10, '2024-03-02 00:00:00', 'Example Notice 2', '<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>', '2024-03-02 00:00:00');
 
 -- --------------------------------------------------------
 
diff --git a/webroot/admin/notices.php b/webroot/admin/notices.php
index 3d01a0b1..df2235a9 100644
--- a/webroot/admin/notices.php
+++ b/webroot/admin/notices.php
@@ -9,11 +9,11 @@
 if ($_SERVER["REQUEST_METHOD"] == "POST") {
     switch ($_POST["form_type"]) {
         case "newNotice":
-            $SQL->addNotice($_POST["title"], $_POST["date"], $_POST["content"], $USER);
+            $SQL->addNotice($_POST["title"], $_POST["date"], $_POST["content"], $_POST["expiry"], $USER);
 
             break;
         case "editNotice":
-            $SQL->editNotice($_POST["id"], $_POST["title"], $_POST["date"], $_POST["content"]);
+            $SQL->editNotice($_POST["id"], $_POST["title"], $_POST["date"], $_POST["content"], $_POST["expiry"]);
 
             break;
         case "delNotice":
diff --git a/webroot/index.php b/webroot/index.php
index cede6f18..e70d8ffa 100644
--- a/webroot/index.php
+++ b/webroot/index.php
@@ -17,6 +17,10 @@
 
 $notices = $SQL->getNotices();
 foreach ($notices as $notice) {
+    if ($notice["expiry"] < date('Y-m-d')) {
+        $SQL->deleteNotice($notice["id"]);
+        continue;
+    }
     echo "<div class='notice'>";
     echo "<span class='noticeTitle'>" . $notice["title"] . "</span>";
     echo "<span class='noticeDate'>" . date('m-d-Y', strtotime($notice["date"])) . "</span>";
diff --git a/workers/notices-expiry-deletion.php b/workers/notices-expiry-deletion.php
deleted file mode 100644
index 623e90d5..00000000
--- a/workers/notices-expiry-deletion.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-require_once "../resources/autoload.php";
-require_once "../resources/init.php";
-
-$SQL->getConn()->prepare("DELETE FROM `notices` WHERE `expiry` <= CURDATE()")->execute();

From 23d1de79eea2d56ed5a26e3f1648d60af83d7368 Mon Sep 17 00:00:00 2001
From: Shaswat Ganisshan <sganisshan13@gmail.com>
Date: Mon, 16 Sep 2024 19:54:27 -0400
Subject: [PATCH 3/3] fixed linting error

---
 resources/lib/UnitySQL.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/resources/lib/UnitySQL.php b/resources/lib/UnitySQL.php
index cbf39315..ebbde3d4 100644
--- a/resources/lib/UnitySQL.php
+++ b/resources/lib/UnitySQL.php
@@ -134,7 +134,7 @@ public function addNotice($title, $date, $content, $expiry, $operator)
         $stmt->bindParam(":date", $date);
         $stmt->bindParam(":title", $title);
         $stmt->bindParam(":message", $content);
-        $stmt->bindParam(":expiry", $expiry); 
+        $stmt->bindParam(":expiry", $expiry);
 
         $stmt->execute();