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