/**
  * @param Database_Result $objSettings The information from which to initialize the setting from
  *
  * @return IMetaModelFilterSetting
  */
 protected function newSetting(Database_Result $objSettings)
 {
     $strClass = $GLOBALS['METAMODELS']['filters'][$objSettings->type]['class'];
     // TODO: add factory support here.
     if ($strClass) {
         return new $strClass($this, $objSettings->row());
     }
     return null;
 }
 /**
  * Initialize the object
  * @param object
  * @return string
  */
 public function __construct(Database_Result $objElement)
 {
     parent::__construct();
     $this->arrData = $objElement->row();
     $this->space = deserialize($objElement->space);
     $this->cssID = deserialize($objElement->cssID, true);
     $arrHeadline = deserialize($objElement->headline);
     $this->headline = is_array($arrHeadline) ? $arrHeadline['value'] : $arrHeadline;
     $this->hl = is_array($arrHeadline) ? $arrHeadline['unit'] : 'h1';
 }
Example #3
0
 /**
  * Initialize the object
  * @param Database_Result
  * @param string
  */
 public function __construct(Database_Result $objModule, $strColumn = 'main')
 {
     parent::__construct();
     $this->arrData = $objModule->row();
     $this->space = deserialize($objModule->space);
     $this->cssID = deserialize($objModule->cssID, true);
     $arrHeadline = deserialize($objModule->headline);
     $this->headline = is_array($arrHeadline) ? $arrHeadline['value'] : $arrHeadline;
     $this->hl = is_array($arrHeadline) ? $arrHeadline['unit'] : 'h1';
     $this->strColumn = $strColumn;
 }
 /**
  * Create start tag for given end tag and update it
  *
  * @param Database_Result $objEndTag
  */
 public function createStartTag($objEndTag)
 {
     $arrStartTag = $objEndTag->row();
     unset($arrStartTag['id']);
     unset($arrStartTag['sh5_pid']);
     $arrStartTag['sh5_tag'] = 'start';
     $arrStartTag['sorting'] = $objEndTag->sorting - 1;
     // Support GlobalContentelements extension if installed
     if (in_array('GlobalContentelements', $this->Config->getActiveModules())) {
         $arrStartTag['do'] = $this->Input->get('do');
     }
     // Insert start tag
     $objResult = $this->Database->prepare("INSERT INTO tl_content %s")->set($arrStartTag)->execute();
     $intId = $objResult->insertId;
     // Update start tag
     $this->Database->prepare("UPDATE tl_content %s WHERE id = ?")->set(array('sh5_pid' => $intId))->executeUncached($intId);
     // Update end tag
     $this->Database->prepare("UPDATE tl_content %s WHERE id = ?")->set(array('sh5_pid' => $intId))->executeUncached($objEndTag->id);
 }
Example #5
0
 /**
  * Load the relations and optionally process a result set
  * 
  * @param \Database_Result $objResult An optional database result
  */
 public function __construct(\Database_Result $objResult = null)
 {
     parent::__construct();
     $objRelations = new \DcaExtractor(static::$strTable);
     $this->arrRelations = $objRelations->getRelations();
     if ($objResult !== null) {
         $this->arrData = $objResult->row();
         // Look for joined fields
         foreach ($this->arrData as $k => $v) {
             if (strpos($k, '__') !== false) {
                 list($key, $field) = explode('__', $k, 2);
                 // Create the related model
                 if (!isset($this->arrRelated[$key])) {
                     $table = $this->arrRelations[$key]['table'];
                     $strClass = $this->getModelClassFromTable($table);
                     $this->arrRelated[$key] = new $strClass();
                 }
                 $this->arrRelated[$key]->{$field} = $v;
                 unset($this->arrData[$k]);
             }
         }
     }
 }
Example #6
0
	/**
	 * Parse one or more items and return them as array
	 * @param Database_Result
	 * @param boolean
	 * @return array
	 */
	protected function parseArticles(Database_Result $objArticles, $blnAddArchive=false)
	{
		if ($objArticles->numRows < 1)
		{
			return array();
		}

		global $objPage;
		$this->import('String');

		$arrArticles = array();
		$limit = $objArticles->numRows;
		$count = 0;
		$imgSize = false;

		// Override the default image size
		if ($this->imgSize != '')
		{
			$size = deserialize($this->imgSize);

			if ($size[0] > 0 || $size[1] > 0)
			{
				$imgSize = $this->imgSize;
			}
		}

		while ($objArticles->next())
		{
			$objTemplate = new FrontendTemplate($this->news_template);
			$objTemplate->setData($objArticles->row());

			$objTemplate->count = ++$count;
			$objTemplate->class = (($objArticles->cssClass != '') ? ' ' . $objArticles->cssClass : '') . (($count == 1) ? ' first' : '') . (($count == $limit) ? ' last' : '') . ((($count % 2) == 0) ? ' odd' : ' even');
			$objTemplate->newsHeadline = $objArticles->headline;
			$objTemplate->subHeadline = $objArticles->subheadline;
			$objTemplate->hasSubHeadline = $objArticles->subheadline ? true : false;
			$objTemplate->linkHeadline = $this->generateLink($objArticles->headline, $objArticles, $blnAddArchive);
			$objTemplate->more = $this->generateLink($GLOBALS['TL_LANG']['MSC']['more'], $objArticles, $blnAddArchive, true);
			$objTemplate->link = $this->generateNewsUrl($objArticles, $blnAddArchive);
			$objTemplate->archive = $objArticles->archive;

			// Clean the RTE output
			if ($objArticles->teaser != '')
			{
				if ($objPage->outputFormat == 'xhtml')
				{
					$objArticles->teaser = $this->String->toXhtml($objArticles->teaser);
				}
				else
				{
					$objArticles->teaser = $this->String->toHtml5($objArticles->teaser);
				}

				$objTemplate->teaser = $this->String->encodeEmail($objArticles->teaser);
			}

			// Display the "read more" button for external/article links
			if (($objArticles->source == 'external' || $objArticles->source == 'article') && $objArticles->text == '')
			{
				$objTemplate->text = true;
			}

			// Encode e-mail addresses
			else
			{
				// Clean the RTE output
				if ($objPage->outputFormat == 'xhtml')
				{
					$objArticles->text = $this->String->toXhtml($objArticles->text);
				}
				else
				{
					$objArticles->text = $this->String->toHtml5($objArticles->text);
				}

				$objTemplate->text = $this->String->encodeEmail($objArticles->text);
			}

			$arrMeta = $this->getMetaFields($objArticles);

			// Add meta information
			$objTemplate->date = $arrMeta['date'];
			$objTemplate->hasMetaFields = !empty($arrMeta);
			$objTemplate->numberOfComments = $arrMeta['ccount'];
			$objTemplate->commentCount = $arrMeta['comments'];
			$objTemplate->timestamp = $objArticles->date;
			$objTemplate->author = $arrMeta['author'];
			$objTemplate->datetime = date('Y-m-d\TH:i:sP', $objArticles->date);

			$objTemplate->addImage = false;

			// Add an image
			if ($objArticles->addImage && is_file(TL_ROOT . '/' . $objArticles->singleSRC))
			{
				if ($imgSize)
				{
					$objArticles->size = $imgSize;
				}

				$this->addImageToTemplate($objTemplate, $objArticles->row());
			}

			$objTemplate->enclosure = array();

			// Add enclosures
			if ($objArticles->addEnclosure)
			{
				$this->addEnclosuresToTemplate($objTemplate, $objArticles->row());
			}

			// HOOK: add custom logic
			if (isset($GLOBALS['TL_HOOKS']['parseArticles']) && is_array($GLOBALS['TL_HOOKS']['parseArticles']))
			{
				foreach ($GLOBALS['TL_HOOKS']['parseArticles'] as $callback)
				{
					$this->import($callback[0]);
					$this->$callback[0]->$callback[1]($objTemplate, $objArticles->row(), $this);
				}
			}

			$arrArticles[] = $objTemplate->parse();
		}

		return $arrArticles;
	}
Example #7
0
 /**
  * Compile the newsletter and send it
  * @param object
  * @param object
  * @param array
  * @param string
  * @param string
  * @param string
  * @return string
  */
 protected function sendNewsletter(Email $objEmail, Database_Result $objNewsletter, $arrRecipient, $text, $html, $css)
 {
     // Prepare text content
     $objEmail->text = $this->parseSimpleTokens($text, $arrRecipient);
     // Add HTML content
     if (!$objNewsletter->sendText) {
         // Get the mail template
         $objTemplate = new BackendTemplate(strlen($objNewsletter->template) ? $objNewsletter->template : 'mail_default');
         $objTemplate->setData($objNewsletter->row());
         $objTemplate->title = $objNewsletter->subject;
         $objTemplate->body = $this->parseSimpleTokens($html, $arrRecipient);
         $objTemplate->charset = $GLOBALS['TL_CONFIG']['characterSet'];
         $objTemplate->css = $css;
         // Parse template
         $objEmail->html = $objTemplate->parse();
         $objEmail->imageDir = TL_ROOT . '/';
     }
     // Deactivate invalid addresses
     try {
         $objEmail->sendTo($arrRecipient['email']);
     } catch (Swift_RfcComplianceException $e) {
         $_SESSION['REJECTED_RECIPIENTS'][] = $arrRecipient['email'];
     }
     // Rejected recipients
     if (count($objEmail->failures)) {
         $_SESSION['REJECTED_RECIPIENTS'][] = $arrRecipient['email'];
     }
 }
Example #8
0
	/**
	 * Add a data row to the XML document
	 * @param DOMDocument
	 * @param DOMElement
	 * @param Database_Result
	 */
	protected function addDataRow(DOMDocument $xml, DOMElement $table, Database_Result $objData)
	{
		$row = $xml->createElement('row');
		$row = $table->appendChild($row);

		foreach ($objData->row() as $k=>$v)
		{
			$field = $xml->createElement('field');
			$field->setAttribute('name', $k);
			$field = $row->appendChild($field);

			if ($v === null)
			{
				$v = 'NULL';
			}

			$value = $xml->createTextNode($v);
			$value = $field->appendChild($value);
		}
	}
Example #9
0
 /**
  * Compile the newsletter and send it
  * @param \Email
  * @param \Database_Result
  * @param array
  * @param string
  * @param string
  * @param string
  * @return string
  */
 protected function sendNewsletter(\Email $objEmail, \Database_Result $objNewsletter, $arrRecipient, $text, $html, $css = null)
 {
     // Prepare the text content
     $objEmail->text = \String::parseSimpleTokens($text, $arrRecipient);
     // Add the HTML content
     if (!$objNewsletter->sendText) {
         // Default template
         if ($objNewsletter->template == '') {
             $objNewsletter->template = 'mail_default';
         }
         // Load the mail template
         $objTemplate = new \BackendTemplate($objNewsletter->template);
         $objTemplate->setData($objNewsletter->row());
         $objTemplate->title = $objNewsletter->subject;
         $objTemplate->body = \String::parseSimpleTokens($html, $arrRecipient);
         $objTemplate->charset = $GLOBALS['TL_CONFIG']['characterSet'];
         $objTemplate->css = $css;
         // Backwards compatibility
         // Parse template
         $objEmail->html = $objTemplate->parse();
         $objEmail->imageDir = TL_ROOT . '/';
     }
     // Deactivate invalid addresses
     try {
         $objEmail->sendTo($arrRecipient['email']);
     } catch (Swift_RfcComplianceException $e) {
         $_SESSION['REJECTED_RECIPIENTS'][] = $arrRecipient['email'];
     }
     // Rejected recipients
     if ($objEmail->hasFailures()) {
         $_SESSION['REJECTED_RECIPIENTS'][] = $arrRecipient['email'];
     }
 }
Example #10
0
 /**
  * Add an event to the array of active events
  * @param Database_Result
  * @param integer
  * @param integer
  * @param string
  * @param integer
  * @param integer
  * @param integer
  */
 protected function addEvent(Database_Result $objEvents, $intStart, $intEnd, $strUrl, $intBegin, $intLimit, $intCalendar)
 {
     global $objPage;
     $intDate = $intStart;
     $intKey = date('Ymd', $intStart);
     $span = Calendar::calculateSpan($intStart, $intEnd);
     $strDate = $this->parseDate($objPage->dateFormat, $intStart);
     $strDay = $GLOBALS['TL_LANG']['DAYS'][date('w', $intStart)];
     $strMonth = $GLOBALS['TL_LANG']['MONTHS'][date('n', $intStart) - 1];
     if ($span > 0) {
         $strDate = $this->parseDate($objPage->dateFormat, $intStart) . ' - ' . $this->parseDate($objPage->dateFormat, $intEnd);
         $strDay = '';
     }
     $strTime = '';
     if ($objEvents->addTime) {
         if ($span > 0) {
             $strDate = $this->parseDate($objPage->datimFormat, $intStart) . ' - ' . $this->parseDate($objPage->datimFormat, $intEnd);
         } elseif ($intStart == $intEnd) {
             $strTime = $this->parseDate($objPage->timeFormat, $intStart);
         } else {
             $strTime = $this->parseDate($objPage->timeFormat, $intStart) . ' - ' . $this->parseDate($objPage->timeFormat, $intEnd);
         }
     }
     // Store raw data
     $arrEvent = $objEvents->row();
     // Overwrite some settings
     $arrEvent['time'] = $strTime;
     $arrEvent['date'] = $strDate;
     $arrEvent['day'] = $strDay;
     $arrEvent['month'] = $strMonth;
     $arrEvent['parent'] = $intCalendar;
     $arrEvent['link'] = $objEvents->title;
     $arrEvent['target'] = '';
     $arrEvent['title'] = specialchars($objEvents->title, true);
     $arrEvent['href'] = $this->generateEventUrl($objEvents, $strUrl);
     $arrEvent['class'] = $objEvents->cssClass != '' ? ' ' . $objEvents->cssClass : '';
     $arrEvent['details'] = $this->String->encodeEmail($objEvents->details);
     $arrEvent['start'] = $intStart;
     $arrEvent['end'] = $intEnd;
     // Override the link target
     if ($objEvents->source == 'external' && $objEvents->target) {
         $arrEvent['target'] = $objPage->outputFormat == 'xhtml' ? ' onclick="return !window.open(this.href)"' : ' target="_blank"';
     }
     // Clean the RTE output
     if ($arrEvent['teaser'] != '') {
         if ($objPage->outputFormat == 'xhtml') {
             $arrEvent['teaser'] = $this->String->toXhtml($arrEvent['teaser']);
         } else {
             $arrEvent['teaser'] = $this->String->toHtml5($arrEvent['teaser']);
         }
     }
     // Display the "read more" button for external/article links
     if ($objEvents->source != 'default' && $objEvents->details == '') {
         $arrEvent['details'] = true;
     } else {
         if ($objPage->outputFormat == 'xhtml') {
             $arrEvent['details'] = $this->String->toXhtml($arrEvent['details']);
         } else {
             $arrEvent['details'] = $this->String->toHtml5($arrEvent['details']);
         }
     }
     // Get todays start and end timestamp
     if ($this->intTodayBegin === null) {
         $this->intTodayBegin = strtotime('00:00:00');
     }
     if ($this->intTodayEnd === null) {
         $this->intTodayEnd = strtotime('23:59:59');
     }
     // Mark past and upcoming events (see #3692)
     if ($intEnd < $this->intTodayBegin) {
         $arrEvent['class'] .= ' bygone';
     } elseif ($intStart > $this->intTodayEnd) {
         $arrEvent['class'] .= ' upcoming';
     } else {
         $arrEvent['class'] .= ' current';
     }
     $this->arrEvents[$intKey][$intStart][] = $arrEvent;
     // Multi-day event
     for ($i = 1; $i <= $span && $intDate <= $intLimit; $i++) {
         // Only show first occurrence
         if ($this->cal_noSpan && $intDate >= $intBegin) {
             break;
         }
         $intDate = strtotime('+ 1 day', $intDate);
         $intNextKey = date('Ymd', $intDate);
         $this->arrEvents[$intNextKey][$intDate][] = $arrEvent;
     }
 }
Example #11
0
 /**
  * Get rows
  *
  * @param \Database_Result $objRecords
  *
  * @return array
  */
 public function getRows($objRecords)
 {
     if (!$objRecords->numRows) {
         return array();
     }
     $arrRows = array();
     $objRecords->reset();
     while ($objRecords->next()) {
         $arrField = $objRecords->row();
         foreach ($this->fields as $field) {
             $arrField[$field] = Format::dcaValue($this->foreignTable, $field, $objRecords->{$field});
         }
         $arrRows[] = $arrField;
     }
     return $arrRows;
 }
Example #12
0
 function __construct(Database_Result $resultSet = null)
 {
     foreach ($resultSet->row() as $name => $value) {
         $this->{$name} = $value;
     }
 }
Example #13
0
 /**
  * Parse one or more items and return them as array
  *
  * @param Database_Result $objArticles
  * @param bool|Template $objTemplate
  * @return array
  */
 protected function parseArticles(Database_Result $objArticles, $objTemplate = false)
 {
     if ($objArticles->numRows < 1) {
         return array();
     }
     global $objPage;
     $this->import('String');
     $this->import('News4wardHelper');
     $arrArticles = array();
     $limit = $objArticles->numRows;
     $count = 0;
     while ($objArticles->next()) {
         // init FrontendTemplate if theres no object given
         if (!$objTemplate) {
             $objTemplate = new FrontendTemplate($this->news4ward_template);
         }
         $objTemplate->setData($objArticles->row());
         $objTemplate->count = ++$count;
         $objTemplate->class = (strlen($objArticles->cssClass) ? ' ' . $objArticles->cssClass : '') . ($count == 1 ? ' first' : '') . ($count == $limit ? ' last' : '') . ($count % 2 == 0 ? ' odd' : ' even') . ($objArticles->highlight ? ' highlight' : '');
         $objTemplate->link = $this->News4wardHelper->generateUrl($objArticles);
         $objTemplate->archive = $objArticles->archive;
         // Clean the RTE output for the TEASER
         if ($objArticles->teaser != '') {
             if ($objPage->outputFormat == 'xhtml') {
                 $objArticles->teaser = $this->String->toXhtml($objArticles->teaser);
             } else {
                 $objArticles->teaser = $this->String->toHtml5($objArticles->teaser);
             }
             $objTemplate->teaser = $this->String->encodeEmail($objArticles->teaser);
         }
         // Generate ContentElements
         $objContentelements = $this->Database->prepare('SELECT id FROM tl_content WHERE pid=? AND do="news4ward" ' . (!BE_USER_LOGGED_IN ? " AND invisible=''" : "") . ' ORDER BY sorting ')->execute($objArticles->id);
         $strContent = '';
         while ($objContentelements->next()) {
             $strContent .= $this->getContentElement($objContentelements->id);
         }
         // Clean the RTE output for the CONTENT
         if ($strContent != '') {
             // Clean the RTE output
             if ($objPage->outputFormat == 'xhtml') {
                 $strContent = $this->String->toXhtml($strContent);
             } else {
                 $strContent = $this->String->toHtml5($strContent);
             }
             $strContent = $this->String->encodeEmail($strContent);
         }
         $objTemplate->content = $strContent;
         // Add meta information
         $arrMeta = $this->getMetaFields($objArticles);
         $objTemplate->date = $arrMeta['date'];
         $objTemplate->hasMetaFields = count($arrMeta) ? true : false;
         $objTemplate->timestamp = $objArticles->start;
         $objTemplate->author = $arrMeta['author'];
         $objTemplate->datetime = date('Y-m-d\\TH:i:sP', $objArticles->start);
         // Add teaser image
         if ($objArticles->teaserImage && is_file(TL_ROOT . '/' . $objArticles->teaserImage)) {
             $imgSize = deserialize($this->imgSize, true);
             $objTemplate->arrSize = $imgSize;
             if (count($imgSize) > 1) {
                 $objTemplate->teaserImage = $this->getImage($objArticles->teaserImage, $imgSize[0], $imgSize[1], $imgSize[2]);
             } else {
                 $objTemplate->teaserImage = $objArticles->teaserImage;
             }
             $objTemplate->teaserImageRaw = $objTemplate->teaserImag;
         }
         // HOOK: add custom logic
         if (isset($GLOBALS['TL_HOOKS']['News4wardParseArticle']) && is_array($GLOBALS['TL_HOOKS']['News4wardParseArticle'])) {
             foreach ($GLOBALS['TL_HOOKS']['News4wardParseArticle'] as $callback) {
                 $this->import($callback[0]);
                 $this->{$callback}[0]->{$callback}[1]($this, $objArticles, $objTemplate);
             }
         }
         $arrArticles[] = $objTemplate->parse();
     }
     return $arrArticles;
 }
Example #14
0
 /**
  * Set the current record from a database result row
  * @param Database_Result
  * @param string
  * @param string
  */
 public function setFromRow(Database_Result $resResult, $strTable, $strRefField)
 {
     $this->strTable = $strTable;
     $this->strRefField = $strRefField;
     $this->varRefId = $resResult->{$strRefField};
     $this->resResult = $resResult;
     $this->arrData = $resResult->row();
     $this->blnRecordExists = true;
 }