/** * Add to the queue the subscriber selected * @param integer $subscriber_id */ public static function add_to_queue($subscriber_id, $news_id) { // Check if the subscriber is already in the current queue if (false == self::subscriber_exists_in_active_queue($subscriber_id, $news_id)) { $queue = new NewslettersHistory(); $queue['subscriber_id'] = $subscriber_id; $queue['news_id'] = $news_id; $queue['date_added'] = date('Y-m-d H:i:s'); return $queue->trySave(); } }
/** * Send the newsletter to the queue */ public static function send_queue($test = FALSE, $id = NULL) { $queue = NewslettersHistory::get_active_queue($test, $id); $isp = Isp::getActiveISP(); try { // Get the template from the main email template folder $retval = Shineisp_Commons_Utilities::getEmailTemplate('newsletter'); if (!empty($retval) && !empty($queue)) { $contents = Newsletters::fill_content(); $subject = $retval['subject']; $template = $retval['template']; $subject = str_replace("[subject]", $queue[0]['Newsletters']['subject'], $subject); $template = str_replace("[subject]", $queue[0]['Newsletters']['subject'], $template); $template = str_replace("[body]", $queue[0]['Newsletters']['message'], $template); foreach ($contents as $name => $content) { $template = str_replace("[" . $name . "]", $content, $template); } foreach ($isp as $field => $value) { $template = str_replace("[" . $field . "]", $value, $template); } $template = str_replace("[url]", "http://" . $_SERVER['HTTP_HOST'] . "/media/newsletter/", $template); foreach ($queue as $item) { // Send a test of the newsletter to the default isp email otherwise send an email to the queue if ($test) { $body = str_replace("[optout]", "#", $template); Shineisp_Commons_Utilities::SendEmail($isp['email'], $isp['email'], null, "<!--TEST --> " . $subject, $body, true); break; } else { // Create the optout link to be added in the email $body = str_replace("[optout]", '<a href="http://' . $_SERVER['HTTP_HOST'] . "/newsletter/optout/id/" . MD5($item['NewslettersSubscribers']['email']) . '" >Unsubscribe</a>', $template); $result = Shineisp_Commons_Utilities::SendEmail($isp['email'], $item['NewslettersSubscribers']['email'], null, $subject, $body, true); if ($result === true) { NewslettersHistory::set_status($item['subscriber_id'], $item['newsletter_id'], 1, "Mail Sent"); } else { NewslettersHistory::set_status($item['subscriber_id'], $item['newsletter_id'], 0, $result['message']); } Newsletters::set_sending_date($item['news_id']); } } } } catch (Exception $e) { echo $e->getMessage(); return false; } return true; }
/** * editAction * Get a record and populate the application form * @return unknown_type */ public function editAction() { $form = $this->getForm('/admin/newsletter/process'); $id = $this->getRequest()->getParam('id'); if (!empty($id) && is_numeric($id)) { $fields = "news_id, subject, DATE_FORMAT(sendat, '%d/%m/%Y %H:%i:%s') as sendat, DATE_FORMAT(sent, '%d/%m/%Y %H:%i:%s') as sent, subject, message"; $rs = $this->newsletter->getAllInfo($id, $fields, true); if (!empty($rs[0])) { $form->populate($rs[0]); $this->view->record = $rs[0]; // Get the queue $this->view->queue = array('records' => NewslettersHistory::get_queue_by_newsletter_id($id, "newsletter_id, nh.date_added as added, nh.date_sent as sent, ns.email as email, c.lastname as user")); // Hide these fields and values inside the vertical grid object $this->view->data = array('records' => $rs); // Create the buttons in the edit form $this->view->buttons = array(array("url" => "#", "label" => $this->translator->translate('Save'), "params" => array('css' => null, 'id' => 'submit')), array("url" => "/admin/newsletter/sendtest//id/{$id}", "label" => $this->translator->translate('Test'), "params" => array('css' => null)), array("url" => "/admin/newsletter/confirm/id/{$id}", "label" => $this->translator->translate('Delete'), "params" => array('css' => null)), array("url" => "/admin/newsletter/list", "label" => $this->translator->translate('List'), "params" => array('css' => null, 'id' => 'submit')), array("url" => "/admin/newsletter/new/", "label" => $this->translator->translate('New'), "params" => array('css' => null))); } } $this->view->title = $this->translator->translate("Newsletter edit"); $this->view->description = $this->translator->translate("Here you can edit the newsletter."); $this->view->form = $form; $this->render('applicantform'); }
/** * Save all the information about the newsletter * @param array $params */ public static function save_data($params) { if (is_numeric($params['news_id'])) { $newsletter = self::getbyId($params['news_id']); } else { $newsletter = new Newsletters(); } $newsletter['subject'] = $params['subject']; $newsletter['sendat'] = Shineisp_Commons_Utilities::formatDateIn($params['sendat']); $newsletter['sent'] = Shineisp_Commons_Utilities::formatDateIn($params['sent']); $newsletter['message'] = $params['message']; $newsletter->save(); // If the newsletter has been already sent and you'd like to send it again, clear the history if ($params['sendagain']) { NewslettersHistory::clear_queue($newsletter['news_id']); // Update the sent field value $newsletter['sent'] = null; $newsletter->save(); } // Create the queue NewslettersHistory::add_all_to_queue($newsletter['news_id']); return $newsletter['news_id']; }