157 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.6 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 RateItFrontend
 | 
						|
 */
 | 
						|
class RateItFrontend extends \Hybrid
 | 
						|
{
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Primary key
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $strPk = 'id';
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Typ
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $strType = 'hearts';	
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Template
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $strTemplate = 'rateit_default';	
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Anzahl der Herzen/Sterne
 | 
						|
	 * @var int
 | 
						|
	 */
 | 
						|
	protected $intStars = 5;
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Textposition
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	protected $strTextPosition = 'after';
 | 
						|
	
 | 
						|
	/**
 | 
						|
	 * Initialize the controller
 | 
						|
	 */
 | 
						|
	public function __construct($objElement=array()) {
 | 
						|
		if (!empty($objElement)) {
 | 
						|
			if ($objElement instanceof \Model) {
 | 
						|
				$this->strTable = $objElement->getTable();
 | 
						|
			}
 | 
						|
			elseif ($objElement instanceof \Model\Collection) {
 | 
						|
				$this->strTable = $objElement->current()->getTable();
 | 
						|
			}
 | 
						|
			
 | 
						|
			$this->strKey = $this->strPk;
 | 
						|
		}
 | 
						|
			
 | 
						|
		$stars = intval($GLOBALS['TL_CONFIG']['rating_count']);
 | 
						|
		if ($stars > 0) {
 | 
						|
			$this->intStars = $stars;
 | 
						|
		}
 | 
						|
		parent::__construct($objElement);
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Display a wildcard in the back end
 | 
						|
	 * @return string
 | 
						|
	 */
 | 
						|
	public function generate() {
 | 
						|
	   return parent::generate();
 | 
						|
	   $this->loadLanguageFile('default');
 | 
						|
	   $this->strType = $GLOBALS['TL_CONFIG']['rating_type'];
 | 
						|
	   $stars = intval($GLOBALS['TL_CONFIG']['rating_count']);
 | 
						|
	   if ($stars > 0) {
 | 
						|
		$this->intStars = $stars;
 | 
						|
	   }
 | 
						|
	   $this->strTemplate = $GLOBALS['TL_CONFIG']['rating_template'];
 | 
						|
	   $this->strTextPosition = $GLOBALS['TL_CONFIG']['rating_textposition'];
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Generate the module/content element
 | 
						|
	 */
 | 
						|
	protected function compile() {
 | 
						|
	}
 | 
						|
	
 | 
						|
	public function getStarMessage($rating) {
 | 
						|
		$this->loadLanguageFile('default');
 | 
						|
		$stars = $this->percentToStars($rating['rating']);
 | 
						|
		preg_match('/^.*\[(.+)\|(.+)\].*$/i', $GLOBALS['TL_CONFIG']['rating_description'], $labels);
 | 
						|
		if (!is_array($labels) && (!count($labels) == 2 || !count($labels) == 3)) {
 | 
						|
			$label = ($rating[totalRatings] > 1 || $rating[totalRatings] == 0) || !$rating ? $GLOBALS['TL_LANG']['rateit']['rating_label'][1] : $GLOBALS['TL_LANG']['rateit']['rating_label'][0];
 | 
						|
			$description = '%current%/%max% %type% (%count% ['.$GLOBALS['TL_LANG']['tl_rateit']['vote'][0].'|'.$GLOBALS['TL_LANG']['tl_rateit']['vote'][1].'])';
 | 
						|
		} else {
 | 
						|
			$label = count($labels) == 2 ? $labels[1] : ($rating[totalRatings] > 1 || $rating[totalRatings] == 0) || !$rating ? $labels[2] : $labels[1];
 | 
						|
			$description = $GLOBALS['TL_CONFIG']['rating_description'];
 | 
						|
		}
 | 
						|
		$actValue = $rating === false ? 0 : $rating[totalRatings];
 | 
						|
		$type = $GLOBALS['TL_CONFIG']['rating_type'] == 'hearts' ? $GLOBALS['TL_LANG']['rateit']['hearts'] : $GLOBALS['TL_LANG']['rateit']['stars'];
 | 
						|
// 		return str_replace('.', ',', $stars)."/$this->intStars ".$type." ($actValue $label)";
 | 
						|
		$description = str_replace('%current%', str_replace('.', ',', $stars), $description);
 | 
						|
		$description = str_replace('%max%', $this->intStars, $description);
 | 
						|
		$description = str_replace('%type%', $type, $description);
 | 
						|
		$description = str_replace('%count%', $actValue, $description);
 | 
						|
		$description = preg_replace('/^(.*)(\[.*\])(.*)$/i', "\\1$label\\3", $description);
 | 
						|
		return $description;
 | 
						|
	}
 | 
						|
 | 
						|
	public function loadRating($rkey, $typ) {
 | 
						|
		$SQL_GET_RATINGS = "SELECT i.rkey AS rkey,
 | 
						|
			i.title AS title,
 | 
						|
			IFNULL(AVG(r.rating),0) AS rating, 
 | 
						|
			COUNT( r.rating ) AS totalRatings
 | 
						|
			FROM tl_rateit_items i
 | 
						|
			LEFT OUTER JOIN tl_rateit_ratings r
 | 
						|
			ON ( i.id = r.pid ) WHERE i.rkey = ? and typ=? and active='1'
 | 
						|
			GROUP BY i.rkey;";
 | 
						|
		$result = $this->Database->prepare($SQL_GET_RATINGS)
 | 
						|
							->execute($rkey, $typ)
 | 
						|
							->fetchAssoc();
 | 
						|
		return $result;
 | 
						|
	}
 | 
						|
 | 
						|
	protected function percentToStars($percent) {
 | 
						|
		$modifier = 100 / $this->intStars;
 | 
						|
		return round($percent / $modifier, 1);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
?>
 |