public function get_view() { $dbc = $this->connection; $settings = $this->config->get('PLUGIN_SETTINGS'); $dbc->selectDB($settings['ScheduledEmailDB']); $templates = new ScheduledEmailTemplatesModel($dbc); $ret = '<table class="table table-bordered table-striped"> <thead> <tr> <th>ID</th> <th>Name</th> <th> </th> <th> </th> </tr> </thead> <tbody>'; foreach ($templates->find('scheduledEmailTemplateID') as $t) { $ret .= sprintf('<tr> <td>%d</td> <td>%s</td> <td><a class="btn btn-default btn-xs" href="?id=%d">%s</a></td> <td><a class="btn btn-danger btn-xs" href="?_method=delete&id=%d" onclick="return confirm(\'Delete template %s?\');">%s</a></td> </tr>', $t->scheduledEmailTemplateID(), $t->name(), $t->scheduledEmailTemplateID(), \COREPOS\Fannie\API\lib\FannieUI::editIcon(), $t->scheduledEmailTemplateID(), $t->name(), \COREPOS\Fannie\API\lib\FannieUI::deleteIcon()); } $ret .= '</tbody></table>'; $ret .= '<p> <a href="?_method=put" class="btn btn-default">Create New Template</a> </p>'; return $ret; }
public function run() { $settings = $this->config->get('PLUGIN_SETTINGS'); $dbc = FannieDB::get($settings['ScheduledEmailDB']); $sentP = $dbc->prepare(' UPDATE ScheduledEmailQueue SET sentDate=' . $dbc->now() . ', sent=1, sentToEmail=? WHERE scheduledEmailQueueID=?'); $failP = $dbc->prepare(' UPDATE ScheduledEmailQueue SET sentDate=' . $dbc->now() . ', sent=2, sentToEmail=? WHERE scheduledEmailQueueID=?'); // find messages due to be sent $query = ' SELECT scheduledEmailQueueID, scheduledEmailTemplateID, cardNo, templateData FROM ScheduledEmailQueue WHERE sent=0 AND sendDate <= ' . $dbc->now() . ' ORDER BY scheduledEmailTemplateID'; $result = $dbc->query($query); $template = new ScheduledEmailTemplatesModel($dbc); while ($row = $dbc->fetchRow($result)) { $template->scheduledEmailTemplateID($row['scheduledEmailTemplateID']); if (!$template->load()) { $this->cronMsg('Template does not exist: ' . $row['scheduledEmailTemplateID']); continue; } $member = \COREPOS\Fannie\API\member\MemberREST::get($row['cardNo']); $dbc->selectDB($settings['ScheduledEmailDB']); // reset current DB if ($member === false) { $this->cronMsg('Member does not exist: ' . $row['cardNo']); continue; } $email = false; foreach ($member['customers'] as $customer) { if ($customer['accountHolder']) { $email = $customer['email']; break; } } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $this->cronMsg('Member does not have valid email address: ' . $row['cardNo']); $dbc->execute($failP, array('no email address', $row['scheduledEmailQueueID'])); continue; } $data = json_decode($row['templateData'], true); if ($data === null && $row['templateData'] !== null) { $this->cronMsg('Invalid template data: ' . $row['data']); continue; } elseif (!is_array($data)) { $data = array(); } if (self::sendEmail($template, $email, $data)) { $dbc->execute($sentP, array($email, $row['scheduledEmailQueueID'])); } else { $dbc->execute($failP, array('error sending', $row['scheduledEmailQueueID'])); } } }