diff --git a/config.php.example b/config.php.example index de56d6d..e972ecf 100644 --- a/config.php.example +++ b/config.php.example @@ -1,8 +1,21 @@ <?php +# Database info $db_host = 'dbserver'; $db_user = 'dbname'; $db_pass = 'dbpassword'; $db_name = 'dbuser'; +# Address to use as the sender for reminder emails +$reminder_sender = 'noreply@example.com'; + +# Address to send cron error messages to +$error_address = 'root@example.com'; + +# Discard notifications +# If this is set to an email address, the system will send a notification +# there each time a product is discarded. +#$notify_discard = 'inventory-tracking@example.com'; +$discard_notify = false; + ?> diff --git a/cron.php b/cron.php index 7164de3..d2170df 100755 --- a/cron.php +++ b/cron.php @@ -7,116 +7,7 @@ require('./include/functions.php'); header('Content-Type: text/html; charset=UTF-8'); -$cron = new Cron(time()); +$cron = new Cron($reminder_sender, $error_address); $cron->run(); -class Cron { - private $kvs; - private $now = 0; - public function __construct($now) { - $this->now = $now; - $this->kvs = new Kvs(); - } - - public function run() { - $lastrun = $this->kvs->get_value('lastrun'); - $interval = 3600*24; //1 day in seconds - - if($lastrun && $this->now - $lastrun < $interval) { - return; - } - $this->kvs->set_key('lastrun', $this->now); - - $users = get_items('user'); - foreach($users as $user) { - $this->check_loans($user); - } - } - - private function check_loans($user) { - $overdue = $user->get_overdue_loans(); - if($overdue) { - $this->send_reminder($user, $overdue); - } - } - - private function send_reminder($user, $loans) { - $subject_template = "DSV Helpdesk: Du har ¤count¤ ¤late¤ lån"; - $reminder_template_sv = "¤name¤, försenad sedan ¤due¤\n"; - $reminder_template_en = "¤name¤, late since ¤due¤\n"; - $message_template = <<<EOF -Hej ¤name¤ - -Vi vill påminna dig om att ditt lån har gått ut på följande ¤product_sv¤: - -¤list_sv¤ - -Vänligen återlämna ¤it_sv¤ till Helpdesk så snart som möjligt, alternativt svara på det här meddelandet för att förlänga ¤loan_sv¤. - ----- - -We would like to remind you that your loan has expired on the following ¤product_en¤: - -¤list_en¤ - -Please return ¤it_en¤ to the Helpdesk as soon as possible, or reply to this message in order to extend the ¤loan_en¤. - -Mvh -DSV Helpdesk -helpdesk@dsv.su.se -08 - 16 16 48 -EOF; - - $overdue_count = count($loans); - $reminder_list_sv = ''; - $reminder_list_en = ''; - $late = 'försenat'; - $product_sv = 'artikel'; - $product_en = 'product'; - $it_sv = 'den'; - $it_en = 'it'; - $loan_sv = 'lånet'; - $loan_en = 'loan'; - if($overdue_count > 1) { - $late = 'försenade'; - $product_sv = 'artiklar'; - $product_en = 'products'; - $it_sv = 'dem'; - $it_en = 'them'; - $loan_sv = 'lånen'; - $loan_en = 'loans'; - } - foreach($loans as $loan) { - $replacements = array('name' => $loan->get_product()->get_name(), - 'due' => format_date($loan->get_endtime())); - $reminder_list_sv .= replace($replacements, $reminder_template_sv); - $reminder_list_en .= replace($replacements, $reminder_template_en); - } - - $subject = replace(array('count' => $overdue_count, - 'late' => $late), $subject_template); - $message = replace(array('name' => $user->get_displayname(), - 'list_sv' => $reminder_list_sv, - 'product_sv' => $product_sv, - 'it_sv' => $it_sv, - 'loan_sv' => $loan_sv, - 'list_en' => $reminder_list_en, - 'product_en' => $product_en, - 'it_en' => $it_en, - 'loan_en' => $loan_en), - $message_template); - - try { - mb_send_mail($user->get_email(), - $subject, - $message, - 'From: helpdesk@dsv.su.se'); - } catch(Exception $e) { - mb_send_mail('root@dsv.su.se', - "Kunde inte skicka påminnelse", - "Påminnelse kunde inte skickas till " - .$user->get_name()); - } - } -} ?> diff --git a/include/Cron.php b/include/Cron.php new file mode 100644 index 0000000..66d32dc --- /dev/null +++ b/include/Cron.php @@ -0,0 +1,115 @@ +<?php +class Cron { + private $now = 0; + private $sender = ''; + private $error = ''; + private $kvs; + public function __construct($sender, $error) { + $this->now = time(); + $this->sender = $sender; + $this->error = $error; + $this->kvs = new Kvs(); + } + + public function run() { + $lastrun = $this->kvs->get_value('lastrun'); + $interval = 3600*24; //1 day in seconds + + if($lastrun && $this->now - $lastrun < $interval) { + return; + } + $this->kvs->set_key('lastrun', $this->now); + + $users = get_items('user'); + foreach($users as $user) { + $this->check_loans($user); + } + } + + private function check_loans($user) { + $overdue = $user->get_overdue_loans(); + if($overdue) { + $this->send_reminder($user, $overdue); + } + } + + private function send_reminder($user, $loans) { + $subject_template = "DSV Helpdesk: Du har ¤count¤ ¤late¤ lån"; + $reminder_template_sv = "¤name¤, försenad sedan ¤due¤\n"; + $reminder_template_en = "¤name¤, late since ¤due¤\n"; + $message_template = <<<EOF +Hej ¤name¤ + +Vi vill påminna dig om att ditt lån har gått ut på följande ¤product_sv¤: + +¤list_sv¤ + +Vänligen återlämna ¤it_sv¤ till Helpdesk så snart som möjligt, alternativt svara på det här meddelandet för att förlänga ¤loan_sv¤. + +---- + +We would like to remind you that your loan has expired on the following ¤product_en¤: + +¤list_en¤ + +Please return ¤it_en¤ to the Helpdesk as soon as possible, or reply to this message in order to extend the ¤loan_en¤. + +Mvh +DSV Helpdesk +helpdesk@dsv.su.se +08 - 16 16 48 +EOF; + + $overdue_count = count($loans); + $reminder_list_sv = ''; + $reminder_list_en = ''; + $late = 'försenat'; + $product_sv = 'artikel'; + $product_en = 'product'; + $it_sv = 'den'; + $it_en = 'it'; + $loan_sv = 'lånet'; + $loan_en = 'loan'; + if($overdue_count > 1) { + $late = 'försenade'; + $product_sv = 'artiklar'; + $product_en = 'products'; + $it_sv = 'dem'; + $it_en = 'them'; + $loan_sv = 'lånen'; + $loan_en = 'loans'; + } + foreach($loans as $loan) { + $replacements = array('name' => $loan->get_product()->get_name(), + 'due' => format_date($loan->get_endtime())); + $reminder_list_sv .= replace($replacements, $reminder_template_sv); + $reminder_list_en .= replace($replacements, $reminder_template_en); + } + + $subject = replace(array('count' => $overdue_count, + 'late' => $late), $subject_template); + $message = replace(array('name' => $user->get_displayname(), + 'list_sv' => $reminder_list_sv, + 'product_sv' => $product_sv, + 'it_sv' => $it_sv, + 'loan_sv' => $loan_sv, + 'list_en' => $reminder_list_en, + 'product_en' => $product_en, + 'it_en' => $it_en, + 'loan_en' => $loan_en), + $message_template); + + try { + mb_send_mail($user->get_email(), + $subject, + $message, + 'From: '.$this->sender); + } catch(Exception $e) { + mb_send_mail($this->error, + "Kunde inte skicka påminnelse", + "Påminnelse kunde inte skickas till " + .$user->get_name()); + } + } +} +?>