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;
 | |
| 	}
 | |
| }
 | |
| ?>
 |