/**
  * Send the preview/test email
  * @param SS_HTTPRequest $request
  */
 public function emailpreview(SS_HTTPRequest $request = null)
 {
     $emailVar = $request->getVar('email');
     $recipient = new Recipient(Recipient::$test_data);
     if ($request && !empty($emailVar)) {
         $recipient->Email = Convert::raw2js($emailVar);
     } else {
         $recipient->Email = Member::currentUser()->Email;
     }
     $newsletter = $this->record;
     $email = new NewsletterEmail($newsletter, $recipient, true);
     $email->send();
     return Controller::curr()->redirectBack();
 }
 public function updateNewsletterEmail(NewsletterEmail $email)
 {
     $newsletter = $email->Newsletter();
     if ($newsletter->ContentSource != 'page' || !$newsletter->SourcePageID) {
         return;
     }
     $page = $newsletter->SourcePage();
     $response = Director::test($page->RelativeLink());
     $body = $this->emogrify($response->getBody());
     $body = str_replace('xmlns="http://www.w3.org/1999/xhtml"', '', HTTP::absoluteURLs($body));
     $re = '/\\.src\\s*=' . str_replace('/', '\\/', Director::absoluteBaseURL()) . '/';
     $body = preg_replace($re, '.src =', $body);
     // undo the fudging that happens to keywords
     $body = preg_replace('/"[^"]*%7B%24(\\w+)%7D/', '"{\\$$1}', $body);
     $email->setBody(DBField::create('HTMLText', $body));
 }
 public static function get_static_base_url()
 {
     if (!self::$static_base_url) {
         global $_FILE_TO_URL_MAPPING;
         if (!empty($_FILE_TO_URL_MAPPING) && !empty($_FILE_TO_URL_MAPPING[BASE_PATH])) {
             $baseurl = $_FILE_TO_URL_MAPPING[BASE_PATH];
             if (strpos($baseurl, -1) !== "/") {
                 $baseurl .= "/";
             }
             self::$static_base_url = $baseurl;
         }
     }
     return self::$static_base_url;
 }
 function next($count = 10)
 {
     $max = $this->current + $count;
     $max = $max < count($this->objects) ? $max : count($this->objects);
     while ($this->current < $max) {
         $index = $this->current++;
         $member = $this->objects[$index];
         // check to see if the user has unsubscribed from the mailing list
         // TODO Join in the above query first
         if (defined('DB::USE_ANSI_SQL')) {
             $unsubscribeRecord = DataObject::get_one('UnsubscribeRecord', "\"MemberID\"='{$member->ID}' AND \"NewsletterTypeID\"='{$this->nlType->ID}'");
         } else {
             $unsubscribeRecord = DataObject::get_one('UnsubscribeRecord', "`MemberID`='{$member->ID}' AND `NewsletterTypeID`='{$this->nlType->ID}'");
         }
         if (!$unsubscribeRecord) {
             $address = $member->Email;
             /**
              * Email Blacklisting Support
              */
             if ($member->BlacklistedEmail && NewsletterEmailBlacklist::isBlocked($address)) {
                 $bounceRecord = new Email_BounceRecord();
                 $bounceRecord->BounceEmail = $member->Email;
                 $bounceRecord->BounceTime = date("Y-m-d H:i:s", time());
                 $bounceRecord->BounceMessage = "BlackListed Email";
                 $bounceRecord->MemberID = $member->ID;
                 $bounceRecord->write();
                 // Log the blacklist for this specific Newsletter
                 $newsletter = new Newsletter_SentRecipient();
                 $newsletter->Email = $address;
                 $newsletter->MemberID = $member->ID;
                 $newsletter->Result = 'BlackListed';
                 $newsletter->ParentID = $this->newsletter->ID;
                 $newsletter->write();
             } else {
                 $e = new NewsletterEmail($this->newsletter, $this->nlType);
                 $e->setSubject($this->subject);
                 $e->setFrom($this->from);
                 $e->setTemplate($this->nlType->Template);
                 $nameForEmail = method_exists($member, "getNameForEmail") ? $member->getNameForEmail() : false;
                 $e->populateTemplate(array('Member' => $member, 'FirstName' => $member->FirstName, 'NameForEmail' => $nameForEmail));
                 $this->sendToAddress($e, $address, $this->messageID, $member);
             }
         }
     }
     return $this->current >= count($this->objects) ? $this->complete() : parent::next();
 }
 function render()
 {
     if (!($templateName = $this->RenderTemplate)) {
         $templateName = 'SimpleNewsletterTemplate';
     }
     // Block stylesheets and JS that are not required (email templates should have inline CSS/JS)
     Requirements::clear();
     // Create recipient with some test data
     $recipient = new Recipient(Recipient::$test_data);
     $newsletterEmail = new NewsletterEmail($this, $recipient, true);
     return HTTP::absoluteURLs($newsletterEmail->getData()->renderWith($templateName));
 }
 /**
  * Sends a newsletter given by the url 
  */
 public function sendnewsletter()
 {
     $id = isset($_REQUEST['ID']) ? $_REQUEST['ID'] : $_REQUEST['NewsletterID'];
     if (!$id) {
         FormResponse::status_message(_t('NewsletterAdmin.NONLSPECIFIED', 'No newsletter specified'), 'bad');
         return FormResponse::respond();
     }
     $newsletter = DataObject::get_by_id("Newsletter", $id);
     $nlType = $newsletter->getNewsletterType();
     $e = new NewsletterEmail($newsletter, $nlType);
     $e->Subject = $subject = $newsletter->Subject;
     // TODO Make this dynamic
     if ($nlType && $nlType->FromEmail) {
         $e->From = $from = $nlType->FromEmail;
     } else {
         $e->From = $from = Email::getAdminEmail();
     }
     if (isset($_REQUEST['TestEmail'])) {
         $e->To = $_REQUEST['TestEmail'];
     }
     $e->setTemplate($nlType->Template);
     $messageID = base64_encode($newsletter->ID . '_' . date('d-m-Y H:i:s'));
     switch ($_REQUEST['SendType']) {
         case "Test":
             if ($_REQUEST['TestEmail']) {
                 $e->To = $_REQUEST['TestEmail'];
                 $e->setTemplate($nlType->Template);
                 self::sendToAddress($e, $_REQUEST['TestEmail'], $messageID);
                 FormResponse::status_message(_t('NewsletterAdmin.SENTTESTTO', 'Sent test to ') . $_REQUEST['TestEmail'], 'good');
             } else {
                 FormResponse::status_message(_t('NewsletterAdmin.PLEASEENTERMAIL', 'Please enter an email address'), 'bad');
             }
             break;
         case "List":
             // Send to the entire mailing list.
             $groupID = $nlType->GroupID;
             if (defined('DB::USE_ANSI_SQL')) {
                 $members = DataObject::get('Member', "\"GroupID\"='{$groupID}'", null, "INNER JOIN \"Group_Members\" ON \"MemberID\"=\"Member\".\"ID\"");
             } else {
                 $members = DataObject::get('Member', "`GroupID`='{$groupID}'", null, "INNER JOIN `Group_Members` ON `MemberID`=`Member`.`ID`");
             }
             echo self::sendToList($subject, $from, $newsletter, $nlType, $messageID, $members);
             break;
         case "Unsent":
             // Send to only those who have not already been sent this newsletter.
             $only_to_unsent = 1;
             echo self::sendToList($subject, $from, $newsletter, $nlType, $messageID, $newsletter->UnsentSubscribers());
             break;
     }
     return FormResponse::respond();
 }