/**
  * Creates the default SilvercartShopEmails if not exists
  * 
  * @return void
  *
  * @author Sebastian Diel <*****@*****.**>
  * @since 02.05.2012
  */
 public function createDefaultShopEmails()
 {
     $shopEmailRegistrationOptIn = SilvercartShopEmail::get()->filter('Identifier', 'RegistrationOptIn')->first();
     if (!$shopEmailRegistrationOptIn) {
         $shopEmailRegistrationOptIn = new SilvercartShopEmail();
         $shopEmailRegistrationOptIn->setField('Identifier', 'RegistrationOptIn');
         $shopEmailRegistrationOptIn->setField('Subject', _t('SilvercartRegistrationPage.PLEASE_COFIRM', 'please confirm Your registration'));
         $shopEmailRegistrationOptIn->setField('EmailText', _t('SilvercartRegistrationPage.CONFIRMATION_TEXT', '<h1>Complete registration</h1><p>Please confirm Your activation or copy the link to Your Browser.</p><p><a href="$ConfirmationLink">Confirm registration</a></p><p>In case You did not register please ignore this mail.</p><p>Your shop team</p>'));
         $shopEmailRegistrationOptIn->write();
     }
     $shopEmailRegistrationConfirmation = SilvercartShopEmail::get()->filter('Identifier', 'RegistrationConfirmation')->first();
     if (!$shopEmailRegistrationConfirmation) {
         $shopEmailRegistrationConfirmation = new SilvercartShopEmail();
         $shopEmailRegistrationConfirmation->setField('Identifier', 'RegistrationConfirmation');
         $shopEmailRegistrationConfirmation->setField('Subject', _t('SilvercartRegistrationPage.THANKS', 'Many thanks for Your registration'));
         $shopEmailRegistrationConfirmation->setField('EmailText', _t('SilvercartRegistrationPage.SUCCESS_TEXT', '<h1>Registration completed successfully!</h1><p>Many thanks for Your registration.</p><p>Have a nice time on our website!</p><p>Your webshop team</p>'));
         $shopEmailRegistrationConfirmation->write();
     }
     $checkOrderMail = SilvercartShopEmail::get()->filter('Identifier', 'MailOrderConfirmation')->first();
     if (!$checkOrderMail) {
         $orderMail = new SilvercartShopEmail();
         $orderMail->setField('Identifier', 'MailOrderConfirmation');
         $orderMail->setField('Subject', _t('SilvercartShopEmail.ORDER_ARRIVED_EMAIL_SUBJECT'));
         $orderMail->setField('Variables', "\$FirstName\n\$Surname\n\$Salutation\n\$Order");
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/SilvercartMailOrderConfirmation.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $orderMail->setField('EmailText', $defaultTemplate);
         $orderMail->write();
     }
     $orderMail = SilvercartShopEmail::get()->filter('Identifier', 'MailOrderNotification')->first();
     if (!$orderMail) {
         $orderMail = new SilvercartShopEmail();
         $orderMail->setField('Identifier', 'MailOrderNotification');
         $orderMail->setField('Subject', _t('SilvercartShopEmail.NEW_ORDER_PLACED'));
         $orderMail->setField('Variables', "\$FirstName\n\$Surname\n\$Salutation\n\$Order");
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/SilvercartMailOrderNotification.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $orderMail->setField('EmailText', $defaultTemplate);
         $orderMail->write();
     }
     $contactEmail = SilvercartShopEmail::get()->filter('Identifier', 'ContactMessage')->first();
     if (!$contactEmail) {
         $contactEmail = new SilvercartShopEmail();
         $contactEmail->setField('Identifier', 'ContactMessage');
         $contactEmail->setField('Subject', _t('SilvercartContactFormPage.REQUEST', 'request via contact form'));
         $contactEmail->setField('Variables', "\$FirstName\n\$Surname\n\$Email\n\$Message");
         $contactEmail->setField('EmailText', _t('SilvercartContactMessage.TEXT'));
         $contactEmail->write();
     }
     $shopEmailNewsletterOptIn = SilvercartShopEmail::get()->filter('Identifier', 'NewsletterOptIn')->first();
     if (!$shopEmailNewsletterOptIn) {
         $shopEmailNewsletterOptIn = new SilvercartShopEmail();
         $shopEmailNewsletterOptIn->setField('Identifier', 'NewsletterOptIn');
         $shopEmailNewsletterOptIn->setField('Subject', _t('SilvercartNewsletterOptInConfirmationPage.TITLE'));
         $shopEmailNewsletterOptIn->setField('EmailText', _t('SilvercartNewsletterOptInConfirmationPage.EMAIL_CONFIRMATION_TEXT'));
         $shopEmailNewsletterOptIn->write();
     }
     $shopEmailNewsletterOptInConfirmation = SilvercartShopEmail::get()->filter('Identifier', 'NewsletterOptInConfirmation')->first();
     if (!$shopEmailNewsletterOptInConfirmation) {
         $shopEmailNewsletterOptInConfirmation = new SilvercartShopEmail();
         $shopEmailNewsletterOptInConfirmation->setField('Identifier', 'NewsletterOptInConfirmation');
         $shopEmailNewsletterOptInConfirmation->setField('Subject', _t('SilvercartNewsletterOptInConfirmationPage.TITLE_THANKS'));
         $shopEmailNewsletterOptInConfirmation->setField('EmailText', _t('SilvercartNewsletterOptInConfirmationPage.CONFIRMATIONSUCCESSMESSAGE'));
         $shopEmailNewsletterOptInConfirmation->write();
     }
     $shopEmailForgotPasswordEmail = SilvercartShopEmail::get()->filter('Identifier', 'ForgotPasswordEmail')->first();
     if (!$shopEmailForgotPasswordEmail) {
         $shopEmailForgotPasswordEmail = new SilvercartShopEmail();
         $shopEmailForgotPasswordEmail->Identifier = 'ForgotPasswordEmail';
         $shopEmailForgotPasswordEmail->Subject = _t('SilvercartShopEmail.FORGOT_PASSWORD_SUBJECT');
         $shopEmailForgotPasswordEmail->Variables = "\$FirstName\n\$Surname\n\$Salutation\n\$PasswordResetLink";
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/ForgotPasswordEmail.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $shopEmailForgotPasswordEmail->EmailText = $defaultTemplate;
         $shopEmailForgotPasswordEmail->write();
     }
     $shopEmailOrderShippedNotification = SilvercartShopEmail::get()->filter('Identifier', 'OrderShippedNotification')->first();
     if (!$shopEmailOrderShippedNotification) {
         $shopEmailOrderShippedNotification = new SilvercartShopEmail();
         $shopEmailOrderShippedNotification->setField('Identifier', 'OrderShippedNotification');
         $shopEmailOrderShippedNotification->setField('Subject', _t('SilvercartShopEmail.ORDER_SHIPPED_NOTIFICATION_SUBJECT'));
         $shopEmailOrderShippedNotification->setField('Variables', "\$FirstName\n\$Surname\n\$Salutation\n\$SilvercartOrder");
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/SilvercartMailOrderShippedNotification.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $shopEmailOrderShippedNotification->setField('EmailText', $defaultTemplate);
         $shopEmailOrderShippedNotification->write();
     }
     $shopEmailRevocationNotification = SilvercartShopEmail::get()->filter('Identifier', 'RevocationNotification')->first();
     if (!$shopEmailRevocationNotification) {
         $shopEmailRevocationNotification = new SilvercartShopEmail();
         $shopEmailRevocationNotification->Identifier = 'RevocationNotification';
         $shopEmailRevocationNotification->Subject = _t('SilvercartMailRevocationNotification.Subject');
         $shopEmailRevocationNotification->Variables = '';
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/SilvercartMailRevocationNotification.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $shopEmailRevocationNotification->EmailText = $defaultTemplate;
         $shopEmailRevocationNotification->write();
         $shopEmailRevocationConfirmation = new SilvercartShopEmail();
         $shopEmailRevocationConfirmation->Identifier = 'RevocationConfirmation';
         $shopEmailRevocationConfirmation->Subject = _t('SilvercartMailRevocationConfirmation.Subject');
         $shopEmailRevocationConfirmation->Variables = '';
         $defaultTemplateFile = Director::baseFolder() . '/silvercart/templates/email/SilvercartMailRevocationConfirmation.ss';
         if (is_file($defaultTemplateFile)) {
             $defaultTemplate = SilvercartShopEmail::parse(file_get_contents($defaultTemplateFile));
         } else {
             $defaultTemplate = '';
         }
         $shopEmailRevocationConfirmation->EmailText = $defaultTemplate;
         $shopEmailRevocationConfirmation->write();
     }
     // attribute ShopEmails to order status
     $orderStatus = SilvercartOrderStatus::get()->filter('Code', 'shipped')->sort('ID')->first();
     $orderEmail = SilvercartShopEmail::get()->filter('Identifier', 'OrderShippedNotification')->sort('ID')->first();
     if ($orderStatus && $orderEmail) {
         $orderStatus->SilvercartShopEmails()->add($orderEmail);
     }
 }
 /**
  * sends email to defined address
  *
  * @param string $identifier  identifier for email template
  * @param string $to          recipients email address
  * @param array  $variables   array with template variables that can be called in the template
  * @param array  $attachments absolute filename to an attachment file
  *
  * @return bool
  *
  * @author Sebastian Diel <*****@*****.**>,
  *         Sascha Koehler <*****@*****.**>
  * @since 16.06.2014
  */
 public static function send($identifier, $to, $variables = array(), $attachments = null)
 {
     $mailObj = SilvercartShopEmail::get()->filter('Identifier', $identifier)->first();
     if (!$mailObj) {
         return false;
     }
     $emailText = trim($mailObj->EmailText);
     if (is_null($emailText) || empty($emailText)) {
         return false;
     }
     $emailSubject = trim($mailObj->Subject);
     if (is_null($emailSubject) || empty($emailSubject)) {
         return false;
     }
     if (!is_array($variables)) {
         $variables = array();
     }
     $templateVariables = new ArrayData($variables);
     $emailTextTemplate = new SSViewer_FromString($mailObj->EmailText);
     $emailText = HTTP::absoluteURLs($emailTextTemplate->process($templateVariables));
     $emailSubjectTemplate = new SSViewer_FromString($mailObj->Subject);
     $emailSubject = HTTP::absoluteURLs($emailSubjectTemplate->process($templateVariables));
     $email = new Email(SilvercartConfig::EmailSender(), $to, $emailSubject, $mailObj->EmailText);
     $email->setTemplate('SilvercartShopEmail');
     $email->populateTemplate(array('ShopEmailSubject' => $emailSubject, 'ShopEmailMessage' => $emailText));
     self::attachFiles($email, $attachments);
     $email->send();
     if (SilvercartConfig::GlobalEmailRecipient() != '') {
         $email = new Email(SilvercartConfig::EmailSender(), SilvercartConfig::GlobalEmailRecipient(), $emailSubject, $mailObj->EmailText);
         $email->setTemplate('SilvercartShopEmail');
         $email->populateTemplate(array('ShopEmailSubject' => $emailSubject, 'ShopEmailMessage' => $emailText));
         $email->send();
     }
     //Send the email to additional standard receipients from the n:m
     //relation AdditionalReceipients;
     //Email address is validated.
     if ($mailObj->AdditionalReceipients()->exists()) {
         foreach ($mailObj->AdditionalReceipients() as $additionalReceipient) {
             if ($additionalReceipient->getEmailAddressWithName() && Email::validEmailAddress($additionalReceipient->Email)) {
                 $to = $additionalReceipient->getEmailAddressWithName();
             } elseif ($additionalReceipient->getEmailAddress() && Email::validEmailAddress($additionalReceipient->Email)) {
                 $to = $additionalReceipient->getEmailAddress();
             } else {
                 continue;
             }
             $email = new Email(SilvercartConfig::EmailSender(), $to, $emailSubject, $mailObj->EmailText);
             $email->setTemplate('SilvercartShopEmail');
             $email->populateTemplate(array('ShopEmailSubject' => $emailSubject, 'ShopEmailMessage' => $emailText));
             self::attachFiles($email, $attachments);
             $email->send();
         }
     }
 }