public function getLastSentLocalized($sFormat = 'x')
 {
     if ($this->getLastSent() != null) {
         return LocaleUtil::localizeDate($this->getLastSent(), null, $sFormat);
     }
     return null;
 }
 public function getCreatedAtLocalized($sFormat = ' %e. %B %Y')
 {
     if (Session::language() === 'en') {
         $sFormat = ' %e %B %Y';
     }
     return LocaleUtil::localizeDate($this->created_at, null, $sFormat);
 }
 /** send()
  * Description:
  * • This method is called when NewsletterMailer is instanciated
  * • All newsletter, sender and recipient info are ready
  *
  * @return boolean has_invalid email addresses
  */
 public function send()
 {
     // Get newsletter email main template and template body and css by template name
     $oEmailTemplate = new Template('main', array(DIRNAME_TEMPLATES, 'newsletter'));
     $oEmailTemplate->replaceIdentifier('newsletter_template_css', new Template("{$this->oNewsletter->getTemplateName()}.css", array(DIRNAME_TEMPLATES, 'newsletter')));
     // Parse links differently in text
     RichtextUtil::$USE_ABSOLUTE_LINKS = LinkUtil::isSSL();
     $oEMailContent = RichtextUtil::parseStorageForFrontendOutput(stream_get_contents($this->oNewsletter->getNewsletterBody()));
     RichtextUtil::$USE_ABSOLUTE_LINKS = null;
     // Replace add surrounding (body.tmpl) before content if exists. Template needs to contain a newsletter_content identifier
     if (ResourceFinder::findResource(array(DIRNAME_TEMPLATES, NewsletterDetailWidgetModule::NEWSLETTER_DIRNAME, "{$this->oNewsletter->getTemplateName()}.body.tmpl")) !== null) {
         $oEmailTemplate->replaceIdentifier('newsletter_content', new Template("{$this->oNewsletter->getTemplateName()}.body", array(DIRNAME_TEMPLATES, NewsletterDetailWidgetModule::NEWSLETTER_DIRNAME)), null, Template::LEAVE_IDENTIFIERS);
     }
     $oEmailTemplate->replaceIdentifier('newsletter_content', $oEMailContent, null, Template::LEAVE_IDENTIFIERS);
     $oEmailTemplate->replaceIdentifier('subject', $this->oNewsletter->getSubject());
     $oEmailTemplate->replaceIdentifier('language', $this->oNewsletter->getLanguageId());
     $oEmailTemplate->replaceIdentifier('newsletter_link', LinkUtil::absoluteLink($this->oNewsletter->getDisplayLink()));
     $oEmailTemplate->replaceIdentifier('newsletter_date', LocaleUtil::localizeDate(null, $this->oNewsletter->getLanguageId()));
     $oEmailTemplate->replaceIdentifier('newsletter_timestamp', time());
     // Process templates with each recipient, depending on whether recipient is object and object of Subscriber or string
     foreach ($this->aRecipients as $mRecipient) {
         $this->sendNewsletter($mRecipient, clone $oEmailTemplate);
     }
     return count($this->aInvalidEmails) === 0;
 }
 public function getPublishAtFormatted($sLanguageId = null, $sFormatString = 'x')
 {
     if ($this->publish_at === null) {
         return null;
     }
     return LocaleUtil::localizeDate($this->publish_at, $sLanguageId, $sFormatString);
 }
 public function getDateSentFormatted($sAddTimeFormat = null)
 {
     $sTime = LocaleUtil::localizeDate($this->date_sent);
     if ($sAddTimeFormat) {
         $sTime .= ' ' . $this->getDateSent($sAddTimeFormat);
     }
     return $sTime;
 }
 public function testParseBackLongDateAsInGems()
 {
     $_SERVER['HTTP_ACCEPT_LANGUAGE'] = "en-gb,en;q=0.8,de-de;q=0.5,de-ch;q=0.3";
     $sDate = "10.03.2008";
     $iTimestamp = LocaleUtil::parseLocalizedDate($sDate, "de");
     $this->assertSame(1205107200, $iTimestamp);
     $this->assertSame($sDate, LocaleUtil::localizeDate($iTimestamp, "de"));
 }
 /**
  * renderFile()
  * @return string xhtml output
  */
 public function renderFile()
 {
     $oOutput = new XHTMLOutput(XHTMLOutput::SETTING_HTML_4_TRANSITIONAL, true, null, $this->oNewsletter->getLanguageId());
     $oOutput->render();
     $oNewsletterTemplate = new Template('main_display', array(DIRNAME_TEMPLATES, 'newsletter'), false, true);
     $oNewsletterTemplate->replaceIdentifier('newsletter_template_css', new Template("{$this->oNewsletter->getTemplateName()}.css", array(DIRNAME_TEMPLATES, 'newsletter')));
     $oNewsletterContent = RichtextUtil::parseStorageForFrontendOutput(stream_get_contents($this->oNewsletter->getNewsletterBody()));
     if (ResourceFinder::findResource(array(DIRNAME_TEMPLATES, NewsletterDetailWidgetModule::NEWSLETTER_DIRNAME, "{$this->oNewsletter->getTemplateName()}.body.tmpl")) !== null) {
         $oNewsletterTemplate->replaceIdentifier('newsletter_content', new Template("{$this->oNewsletter->getTemplateName()}.body", array(DIRNAME_TEMPLATES, NewsletterDetailWidgetModule::NEWSLETTER_DIRNAME)), null, Template::LEAVE_IDENTIFIERS);
     }
     $oNewsletterTemplate->replaceIdentifier('newsletter_content', $oNewsletterContent, null, Template::LEAVE_IDENTIFIERS);
     $oNewsletterTemplate->replaceIdentifier('language', $this->oNewsletter->getLanguageId());
     if ($this->oMailing !== null) {
         $oNewsletterTemplate->replaceIdentifier('newsletter_date', LocaleUtil::localizeDate($this->oMailing->getDateSent(null)->getTimestamp(), $this->oNewsletter->getLanguageId()));
         $oNewsletterTemplate->replaceIdentifier('newsletter_timestamp', $this->oMailing->getDateSent(null)->getTimestamp());
     } else {
         $oNewsletterTemplate->replaceIdentifier('newsletter_date', LocaleUtil::localizeDate($this->oNewsletter->getCreatedAt(null)->getTimestamp(), $this->oNewsletter->getLanguageId()));
         $oNewsletterTemplate->replaceIdentifier('newsletter_timestamp', $this->oNewsletter->getCreatedAt(null)->getTimestamp());
     }
     $oNewsletterTemplate->replaceIdentifier('recipient', TranslationPeer::getString('wns.newsletter.recipient', $this->oNewsletter->getLanguageId()));
     $oNewsletterTemplate->replaceIdentifier('subject', $this->oNewsletter->getSubject());
     $oNewsletterTemplate->render();
 }
 public function writeDate($oTemplateIdentifier)
 {
     $iTimestamp = false;
     if ($oTemplateIdentifier->hasParameter('timestamp')) {
         $iTimestamp = (int) $oTemplateIdentifier->getParameter('timestamp');
     } else {
         if ($oTemplateIdentifier->hasParameter('format')) {
             $iTimestamp = DateTime::createFromFormat($oTemplateIdentifier->getParameter('format'), $oTemplateIdentifier->getParameter('date'));
         }
     }
     $sLocaleId = null;
     if ($oTemplateIdentifier->hasParameter('locale')) {
         $sLocaleId = $oTemplateIdentifier->getParameter('locale');
     }
     return LocaleUtil::localizeDate($iTimestamp, $sLocaleId, $oTemplateIdentifier->getValue());
 }
 /**
  * renderCollapsibleDateTreeWidget()
  *
  * description: display collapsible date tree without link on year
  * include javascript file web/js/journal-collapsible-date-tree.js
  * @return Template object
  */
 private function renderCollapsibleDateTreeWidget()
 {
     $iTreeWidgetLevels = Settings::getSetting('journal', 'display_journal_collapsible_tree_levels', 2);
     $oTemplate = $this->constructTemplate('widget_collapsible_date_tree');
     if ($this->archiveIsActive()) {
         $sHref = LinkUtil::link($this->oPage->getLinkArray());
         $oTemplate->replaceIdentifier('reset_archive_href', $sHref, null, Template::NO_HTML_ESCAPE);
     }
     $oItemPrototype = $this->constructTemplate('widget_collapsible_date_tree_item');
     $sPreviousYear = null;
     $sPreviousMonth = null;
     $aStack = array($oTemplate);
     $cReduceToLevel = function ($iLevel) use(&$aStack) {
         while (count($aStack) > $iLevel) {
             $oPreviousTemplate = array_pop($aStack);
             $oCurrentTemplate = $aStack[count($aStack) - 1];
             $oCurrentTemplate->replaceIdentifierMultiple('items', $oPreviousTemplate, null, Template::NO_NEW_CONTEXT);
         }
     };
     $oPage = $this->oPage;
     $cOutput = function ($aDate, $sFormat, $bIsActive) use(&$aStack, $oItemPrototype, $oPage) {
         $oTemplate = clone $oItemPrototype;
         array_push($aStack, $oTemplate);
         foreach ($aDate as $sPeriod => $sValue) {
             $oTemplate->replaceIdentifier(strtolower($sPeriod), $sValue);
         }
         $oDate = new DateTime();
         $oDate->setDate($aDate['Year'], @$aDate['Month'] ? $aDate['Month'] : 1, @$aDate['Day'] ? $aDate['Day'] : 1);
         $oTemplate->replaceIdentifier('full_name', LocaleUtil::localizeDate($oDate, null, $sFormat));
         $aKeys = array_keys($aDate);
         $oTemplate->replaceIdentifier('name', $aDate[$aKeys[count($aKeys) - 1]]);
         $oTemplate->replaceIdentifier('level', count($aKeys));
         $oTemplate->replaceIdentifier('link', LinkUtil::link($oPage->getFullPathArray(array_values($aDate))));
         if ($bIsActive) {
             $oTemplate->replaceIdentifier('class_is_active', 'is_active');
         }
     };
     foreach ($this->createQuery()->filterByJournalId($this->aJournalIds)->findDistinctDates() as $aDate) {
         $oCurrentTemplate = null;
         // Make year template whenever the year changes and add it to main template
         if ($aDate['Year'] !== $sPreviousYear) {
             $cReduceToLevel(1);
             $sPreviousYear = $aDate['Year'];
             $cOutput(array('Year' => $aDate['Year']), 'Y', $this->iYear === $aDate['Year']);
         }
         // Render 2nd level months
         if ($iTreeWidgetLevels === 1) {
             continue;
         }
         // Make month template whenever month changes (or year, because it can happen that two months are the same when a year changes)
         // Add it to year template
         if ($aDate['Year'] !== $sPreviousYear || $aDate['Month'] !== $sPreviousMonth) {
             $cReduceToLevel(2);
             $sPreviousMonth = $aDate['Month'];
             $cOutput(array('Year' => $aDate['Year'], 'Month' => $aDate['Month']), 'B', $this->iMonth === $aDate['Month']);
         }
         // Render 3rd level days
         if ($iTreeWidgetLevels === 2) {
             continue;
         }
         $cReduceToLevel(3);
         $cOutput(array('Year' => $aDate['Year'], 'Month' => $aDate['Month'], 'Day' => $aDate['Day']), 'x', $this->iDay === $aDate['Day']);
     }
     $cReduceToLevel(1);
     return $oTemplate;
 }