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>&nbsp;</th>
             <th>&nbsp;</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;
 }
Esempio n. 2
0
 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']));
         }
     }
 }