/**
  * Returns the localized salutation string.
  *
  * @return string
  */
 public function getSalutationText()
 {
     return SilvercartTools::getSalutationText($this->Salutation);
 }
 /**
  * Creates and returns the CSV content to download.
  * $exportContext can be:
  * 0 = all customers with a valid email address
  * 1 = all newsletter recipients
  * 2 = all newsletter recipients with customer account
  * 3 = all newsletter recipients without customer account
  * 4 = all non-newletter recipients with customer account
  * 
  * @param string $exportContext 0|1|2|3|4; Identifies the context to get recipients for
  * 
  * @return string
  */
 protected function getCSVContent($exportContext)
 {
     $membersSql = 'SELECT "M"."Email", "M"."Salutation", "M"."FirstName", "M"."Surname" FROM "Member" AS "M" WHERE "M"."Email" IS NOT NULL';
     $anonymousSql = 'SELECT "ANR"."Email", "ANR"."Salutation", "ANR"."FirstName", "ANR"."Surname" FROM "SilvercartAnonymousNewsletterRecipient" AS "ANR" WHERE "ANR"."Email" IS NOT NULL AND "ANR"."NewsletterOptInStatus" = 1';
     $membersSqlAddition = '';
     switch ($exportContext) {
         case '1':
             // All newletter recipients
             $useMembersSql = true;
             $useAnonymousSql = true;
             $membersSqlAddition = ' AND "M"."NewsletterOptInStatus" = 1';
             break;
         case '2':
             // All newletter recipients with customer account
             $useMembersSql = true;
             $useAnonymousSql = false;
             $membersSqlAddition = ' AND "M"."NewsletterOptInStatus" = 1';
             break;
         case '3':
             // All newletter recipients without customer account
             $useMembersSql = false;
             $useAnonymousSql = true;
             break;
         case '4':
             // All non-newletter recipients
             $useMembersSql = true;
             $useAnonymousSql = false;
             $membersSqlAddition = ' AND "M"."NewsletterOptInStatus" = 0';
             break;
         case '0':
         default:
             // All customers with a valid email address
             $useMembersSql = true;
             $useAnonymousSql = true;
             break;
     }
     $tempFolder = getTempFolder();
     $tempCsvFile = $tempFolder . '/do_newsletter_recipients_export.csv';
     $csvFile = fopen($tempCsvFile, 'w');
     fputcsv($csvFile, array('email', 'salutation', 'firstname', 'surname'));
     if ($useMembersSql) {
         $records = DB::query($membersSql . $membersSqlAddition);
         if ($records->numRecords() > 0) {
             foreach ($records as $record) {
                 $record['Salutation'] = SilvercartTools::getSalutationText($record['Salutation']);
                 fputcsv($csvFile, $record);
             }
         }
     }
     if ($useAnonymousSql) {
         $records = DB::query($anonymousSql);
         if ($records->numRecords() > 0) {
             foreach ($records as $record) {
                 $record['Salutation'] = SilvercartTools::getSalutationText($record['Salutation']);
                 fputcsv($csvFile, $record);
             }
         }
     }
     fclose($csvFile);
     $csvFileContent = file_get_contents($tempCsvFile);
     unlink($tempCsvFile);
     return $csvFileContent;
 }
 /**
  * Uses DataObject based, editable templates to send the email
  * 
  * @param integer $messageID ???
  * 
  * @return void
  *
  * @author Sebastian Diel <*****@*****.**>
  * @since 25.11.2015
  */
 public function send($messageID = null)
 {
     $variables = $this->template_data->toMap();
     $variables['PasswordResetLink'] = Director::absoluteURL($this->template_data->PasswordResetLink);
     /* @var $member Member */
     $member = singleton('Member');
     foreach ($member->db() as $dbFieldName => $dbFieldType) {
         if (!array_key_exists($dbFieldName, $variables)) {
             $variables[$dbFieldName] = $this->template_data->{$dbFieldName};
         }
     }
     $variables['SalutationText'] = SilvercartTools::getSalutationText($variables['Salutation']);
     SilvercartShopEmail::send('ForgotPasswordEmail', $this->To(), $variables);
 }