From 79d9f45c383a061ad1899a4bd14c1145deb25b1d Mon Sep 17 00:00:00 2001
From: Erik Thuning <boooink@gmail.com>
Date: Mon, 16 May 2022 13:49:22 +0200
Subject: [PATCH] Refactored the reminder generaion

---
 include/Cron.php | 106 +++++++++++++++++++++++------------------------
 1 file changed, 52 insertions(+), 54 deletions(-)

diff --git a/include/Cron.php b/include/Cron.php
index eeb26bd..a8a5159 100644
--- a/include/Cron.php
+++ b/include/Cron.php
@@ -14,6 +14,38 @@ class Cron {
         $this->run_interval = DateInterval::createFromDateString('1 day');
         $this->kvs = new Kvs();
         $this->ldap = new Ldap();
+
+        $days = $this->warn_time->d;
+        $this->strings = array(
+            'en' => array(
+                'expiring' => array(
+                    'single' => "The following loan expires in less than $days days:",
+                    'multi'  => "The following loans expire in less than $days days:",
+                    'expiry' => "expires on",
+                    'serial' => "serial number",
+                ),
+                'overdue' => array(
+                    'single' => "The following loan has expired:",
+                    'multi'  => "The following loans have expired:",
+                    'expiry' => "expired on",
+                    'serial' => "serial number",
+                ),
+            ),
+            'sv' => array(
+                'expiring' => array(
+                    'single' => "Följande lån går ut om mindre än $days dagar:",
+                    'multi'  => "Följande lån går ut om mindre än $days dagar:",
+                    'expiry' => "går ut",
+                    'serial' => "artikelnummer",
+                ),
+                'overdue' => array(
+                    'single' => "Följande lån har gått ut:",
+                    'multi'  => "Följande lån har gått ut:",
+                    'expiry' => "gick ut",
+                    'serial' => "artikelnummer",
+                ),
+            ),
+        );
     }
 
     public function run() {
@@ -54,68 +86,34 @@ class Cron {
         return $subject.implode(" och ", $messages);
     }
 
-    private function make_expiring_notice($lang, $expiring) {
-        if(!$expiring) {
+    private function make_notice($lang, $type, $list) {
+        if(!$list) {
             return '';
         }
-        $days = $this->warn_time->d;
-        switch($lang) {
-            case 'sv':
-                $msg = "Följande lån går ut om mindre än ".$days." dagar:";
-                $itemglue = ", går ut ";
-                break;
-            case 'en':
-                if(count($expiring) == 1) {
-                    $loanstr = "loan expires";
-                } else {
-                    $loanstr = "loans expire";
-                }
-                $msg = "The following ".$loanstr." in less than ".$days." days:";
-                $itemglue = ", expires on ";
-                break;
-            default:
-                throw new Exception("Invalid language: ".$lang);
+        if(!array_key_exists($lang, $this->strings)) {
+            throw new Exception("Invalid languange: $lang");
         }
-        $lines = array();
-        foreach($expiring as $loan) {
-            $product = $loan->get_product();
-            $serial = $product->get_serial();
-            $brand = $product->get_brand();
-            $name = $product->get_name();
-            $endtime = format_date($loan->get_endtime());
-            $lines[] = $serial.": ".$brand." ".$name.$itemglue.$endtime;
+        $strings = $this->strings[$lang];
+        if(!array_key_exists($type, $strings)) {
+            throw new Exception("Invalid type: $type");
         }
-        return $msg."\n\n".implode("\n", $lines);
-    }
+        $strings = $strings[$type];
 
-    private function make_overdue_notice($lang, $overdue) {
-        if(!$overdue) {
-            return '';
-        }
-        switch($lang) {
-            case 'sv':
-                $msg = "Följande lån har gått ut:";
-                $itemglue = ", gick ut ";
-                break;
-            case 'en':
-                if(count($overdue) == 1) {
-                    $msg = "The following loan has expired:";
-                } else {
-                    $msg = "The following loans have expired:";
-                }
-                $itemglue = ", expired on ";
-                break;
-            default:
-                throw new Exception("Invalid language: ".$lang);
+        $msg = $strings['single'];
+        if(count($list) > 1) {
+            $msg = $strings['multi'];
         }
+
         $lines = array();
-        foreach($overdue as $loan) {
+        foreach($list as $loan) {
             $product = $loan->get_product();
             $serial = $product->get_serial();
             $brand = $product->get_brand();
             $name = $product->get_name();
             $endtime = format_date($loan->get_endtime());
-            $lines[] = $serial.": ".$brand." ".$name.$itemglue.$endtime;
+
+            $lines[] = "$brand $name, ".$strings['serial']
+                      ." $serial, ".$strings['expiry']." $endtime";
         }
         return $msg."\n\n".implode("\n", $lines);
     }
@@ -161,12 +159,12 @@ class Cron {
         $info_sv = array();
         $info_en = array();
         if($expiring_count > 0) {
-            $info_sv[] = $this->make_expiring_notice('sv', $expiring);
-            $info_en[] = $this->make_expiring_notice('en', $expiring);
+            $info_sv[] = $this->make_notice('sv', 'expiring', $expiring);
+            $info_en[] = $this->make_notice('en', 'expiring', $expiring);
         }
         if($overdue_count > 0) {
-            $info_sv[] = $this->make_overdue_notice('sv', $overdue);
-            $info_en[] = $this->make_overdue_notice('en', $overdue);
+            $info_sv[] = $this->make_notice('sv', 'overdue', $overdue);
+            $info_en[] = $this->make_notice('en', 'overdue', $overdue);
         }
         $info_sv = implode("\n\n", $info_sv);
         $returns_sv = $this->make_return_info('sv', $total);