<?php class Cron { private $now = 0; private $sender = ''; private $error = ''; private $kvs; private $ldap; public function __construct($sender, $error) { $this->now = time(); $this->sender = $sender; $this->error = $error; $this->kvs = new Kvs(); $this->ldap = new Ldap(); } 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 = "¤brand¤ ¤name¤, försenad sedan ¤due¤\n"; $reminder_template_en = "¤brand¤ ¤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(), 'brand' => $loan->get_product()->get_brand(), '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($this->ldap), '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($this->ldap), $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()); } } } ?>