159 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * Contao Open Source CMS
 | 
						|
 * Copyright (C) 2005-2011 Leo Feyer
 | 
						|
 *
 | 
						|
 * Formerly known as TYPOlight Open Source CMS.
 | 
						|
 *
 | 
						|
 * This program is free software: you can redistribute it and/or
 | 
						|
 * modify it under the terms of the GNU Lesser General Public
 | 
						|
 * License as published by the Free Software Foundation, either
 | 
						|
 * version 3 of the License, or (at your option) any later version.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
						|
 * Lesser General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Lesser General Public
 | 
						|
 * License along with this program. If not, please visit the Free
 | 
						|
 * Software Foundation website at <http://www.gnu.org/licenses/>.
 | 
						|
 *
 | 
						|
 * PHP version 5
 | 
						|
 * @copyright  cgo IT, 2013
 | 
						|
 * @author     Carsten Götzinger (info@cgo-it.de)
 | 
						|
 * @package    rateit
 | 
						|
 * @license    GNU/LGPL
 | 
						|
 * @filesource
 | 
						|
 */
 | 
						|
 | 
						|
namespace cgoIT\rateit;
 | 
						|
 | 
						|
class RateItFaq extends RateItFrontend { 
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Initialize the controller
 | 
						|
	 */
 | 
						|
	public function __construct() {
 | 
						|
		parent::__construct();
 | 
						|
	}
 | 
						|
	
 | 
						|
	public function getContentElementRateIt($objRow, $strBuffer) {
 | 
						|
		if ($objRow->type == 'module') {
 | 
						|
			$objModule = $this->Database->prepare("SELECT * FROM tl_module WHERE id=? AND type IN ('faqpage', 'faqreader')")
 | 
						|
										->limit(1)
 | 
						|
										->execute($objRow->module);
 | 
						|
			
 | 
						|
			if ($objModule->numRows == 1) {
 | 
						|
				$this->faq_categories = deserialize($objModule->faq_categories);
 | 
						|
				
 | 
						|
				if ($objModule->type == 'faqreader') {
 | 
						|
					$strBuffer = $this->generateForFaqReader($objModule, $strBuffer);
 | 
						|
				} else {
 | 
						|
					$strBuffer = $this->generateForFaqPage($objModule, $strBuffer);
 | 
						|
				}
 | 
						|
				
 | 
						|
				$GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/rateit/public/js/onReadyRateIt.js|static';
 | 
						|
				$GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/rateit/public/js/rateit.js|static';
 | 
						|
				$GLOBALS['TL_CSS'][] = 'system/modules/rateit/public/css/rateit.min.css||static';
 | 
						|
				switch ($GLOBALS['TL_CONFIG']['rating_type']) {
 | 
						|
					case 'hearts' :
 | 
						|
						$GLOBALS['TL_CSS'][] = 'system/modules/rateit/public/css/heart.min.css||static';
 | 
						|
						break;
 | 
						|
					default:
 | 
						|
						$GLOBALS['TL_CSS'][] = 'system/modules/rateit/public/css/star.min.css||static';
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return $strBuffer;
 | 
						|
	}
 | 
						|
	
 | 
						|
	private function generateForFaqPage($objModule, $strBuffer) {
 | 
						|
		$objFaq = $this->Database
 | 
						|
		               ->execute("SELECT *, author AS authorId, (SELECT headline FROM tl_faq_category WHERE tl_faq_category.id=tl_faq.pid) AS category, (SELECT name FROM tl_user WHERE tl_user.id=tl_faq.author) AS author FROM tl_faq WHERE pid IN(" . implode(',', array_map('intval', $this->faq_categories)) . ")" . (!BE_USER_LOGGED_IN ? " AND published=1" : ""));
 | 
						|
		
 | 
						|
		if ($objFaq->numRows < 1) {
 | 
						|
			return $strBuffer;
 | 
						|
		}
 | 
						|
		
 | 
						|
		$htmlBuffer = new \simple_html_dom();
 | 
						|
		$htmlBuffer->load($strBuffer);
 | 
						|
		
 | 
						|
		$arrFaqs = $objFaq->fetchAllAssoc();
 | 
						|
		foreach ($arrFaqs as $arrFaq) {
 | 
						|
			$rating = $this->generateSingle($arrFaq, $strBuffer);
 | 
						|
			
 | 
						|
			$h3 = $htmlBuffer->find('#'.$arrFaq['alias']);
 | 
						|
			if (is_array($h3) && count($h3) == 1) { 
 | 
						|
				$section = $h3[0]->parent();
 | 
						|
				
 | 
						|
				if ($arrFaq['rateit_position'] == 'before') {
 | 
						|
					$section->innertext = $rating.$section->innertext;
 | 
						|
				} else if ($arrFaq['rateit_position'] == 'after') {
 | 
						|
					$section->innertext = $section->innertext.$rating;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		$strBuffer = $htmlBuffer->save();
 | 
						|
		
 | 
						|
		// Aufräumen
 | 
						|
		$htmlBuffer->clear();
 | 
						|
		unset($htmlBuffer);
 | 
						|
		
 | 
						|
		return $strBuffer;
 | 
						|
	}
 | 
						|
	
 | 
						|
	private function generateForFaqReader($objModule, $strBuffer) {
 | 
						|
		// Set the item from the auto_item parameter
 | 
						|
		if ($GLOBALS['TL_CONFIG']['useAutoItem'] && isset($_GET['auto_item'])) {
 | 
						|
			$this->Input->setGet('items', $this->Input->get('auto_item'));
 | 
						|
		}
 | 
						|
		
 | 
						|
		// Do not index or cache the page if no FAQ has been specified
 | 
						|
		if (!$this->Input->get('items')) {
 | 
						|
			return $strBuffer;
 | 
						|
		}
 | 
						|
		
 | 
						|
		$objFaq = $this->Database->prepare("SELECT *, author AS authorId, (SELECT title FROM tl_faq_category WHERE tl_faq_category.id=tl_faq.pid) AS category, (SELECT name FROM tl_user WHERE tl_user.id=tl_faq.author) AS author FROM tl_faq WHERE pid IN(" . implode(',', array_map('intval', $this->faq_categories)) . ") AND (id=? OR alias=?)" . (!BE_USER_LOGGED_IN ? " AND published=1" : ""))
 | 
						|
								 ->limit(1)
 | 
						|
								 ->execute((is_numeric($this->Input->get('items')) ? $this->Input->get('items') : 0), $this->Input->get('items'));
 | 
						|
		
 | 
						|
		if ($objFaq->numRows == 1) {
 | 
						|
			$arrFaq = $objFaq->fetchAssoc();
 | 
						|
			
 | 
						|
			$rating = $this->generateSingle($arrFaq, $strBuffer);
 | 
						|
		}
 | 
						|
	
 | 
						|
		if ($arrFaq['rateit_position'] == 'before') {
 | 
						|
			$strBuffer = $rating.$strBuffer;
 | 
						|
		} else if ($arrFaq['rateit_position'] == 'after') {
 | 
						|
			$strBuffer = $strBuffer.$rating;
 | 
						|
		}
 | 
						|
 | 
						|
		return $strBuffer;
 | 
						|
	}
 | 
						|
	
 | 
						|
	private function generateSingle($arrFaq, $strBuffer) {
 | 
						|
		$rating = '';
 | 
						|
		
 | 
						|
		if ($arrFaq['addRating']) {
 | 
						|
			$actRecord = $this->Database->prepare("SELECT * FROM tl_rateit_items WHERE rkey=? and typ='faq'")
 | 
						|
			->execute($arrFaq['id'])
 | 
						|
			->fetchAssoc();
 | 
						|
				
 | 
						|
			if ($actRecord['active']) {
 | 
						|
				$this->import('rateit\\RateItRating', 'RateItRating');
 | 
						|
				$this->RateItRating->rkey = $arrFaq['id'];
 | 
						|
				$this->RateItRating->ratingType = 'faq';
 | 
						|
				$this->RateItRating->generate();
 | 
						|
		
 | 
						|
				$rating = $this->RateItRating->output();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		return $rating;
 | 
						|
	}
 | 
						|
}
 | 
						|
?>
 |