mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 20:58:30 +01:00
229 lines
7.0 KiB
PHP
229 lines
7.0 KiB
PHP
<?php
|
|
/*
|
|
+ ----------------------------------------------------------------------------+
|
|
| e107 website system
|
|
|
|
|
| ©Steve Dunstan 2001-2002
|
|
| http://e107.org
|
|
| jalist@e107.org
|
|
|
|
|
| Released under the terms and conditions of the
|
|
| GNU General Public License (http://gnu.org).
|
|
|
|
|
| $Source: /cvs_backup/e107_0.8/e107_handlers/rate_class.php,v $
|
|
| $Revision: 1.3 $
|
|
| $Date: 2007-01-10 21:31:12 $
|
|
| $Author: e107steved $
|
|
+----------------------------------------------------------------------------+
|
|
*/
|
|
|
|
if (!defined('e107_INIT')) { exit; }
|
|
|
|
@include_once(e_LANGUAGEDIR.e_LANGUAGE."/lan_rate.php");
|
|
@include_once(e_LANGUAGEDIR."English/lan_rate.php");
|
|
class rater {
|
|
function rateselect($text, $table, $id, $mode=FALSE) {
|
|
//$mode : if mode is set, no urljump will be used (used in combined comments+rating system)
|
|
|
|
$table = preg_replace('/\W/', '', $table);
|
|
$id = intval($id);
|
|
|
|
$self = $_SERVER['PHP_SELF'];
|
|
if ($_SERVER['QUERY_STRING']) {
|
|
$self .= "?".$_SERVER['QUERY_STRING'];
|
|
}
|
|
|
|
$jump = "";
|
|
$url = "";
|
|
if($mode==FALSE){
|
|
$jump = "onchange='urljump(this.options[selectedIndex].value)'";
|
|
$url = e_BASE."rate.php?";
|
|
}
|
|
|
|
$str = $text."
|
|
<select name='rateindex' ".$jump." class='tbox'>
|
|
<option selected='selected' value='0'>".RATELAN_5."</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^1'>1</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^2'>2</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^3'>3</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^4'>4</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^5'>5</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^6'>6</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^7'>7</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^8'>8</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^9'>9</option>
|
|
<option value='".$url."{$table}^{$id}^{$self}^10'>10</option>
|
|
</select>";
|
|
return $str;
|
|
}
|
|
|
|
function rateradio($table, $id) {
|
|
|
|
$table = preg_replace('/\W/', '', $table);
|
|
$id = intval($id);
|
|
|
|
$str = "
|
|
<input type='radio' value='1' />1
|
|
<input type='radio' value='2' />2
|
|
<input type='radio' value='3' />3
|
|
<input type='radio' value='4' />4
|
|
<input type='radio' value='5' />5
|
|
<input type='radio' value='6' />6
|
|
<input type='radio' value='7' />7
|
|
<input type='radio' value='8' />8
|
|
<input type='radio' value='9' />9
|
|
<input type='radio' value='10' />10";
|
|
return $str;
|
|
}
|
|
|
|
function checkrated($table, $id) {
|
|
|
|
$table = preg_replace('/\W/', '', $table);
|
|
$id = intval($id);
|
|
|
|
$sql = new db;
|
|
if (!$sql->db_Select("rate", "*", "rate_table = '{$table}' AND rate_itemid = '{$id}' ")) {
|
|
return FALSE;
|
|
} else {
|
|
$row = $sql->db_Fetch();
|
|
|
|
if (preg_match("/\.".USERID."\./", $row['rate_voters'])) {
|
|
return TRUE;
|
|
//added option to split an individual users rating
|
|
}else if (preg_match("/\.".USERID.chr(1)."([0-9]{1,2})\./", $row['rate_voters'])) {
|
|
return TRUE;
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
function getrating($table, $id, $userid=FALSE) {
|
|
//userid : boolean, get rating for a single user, or get general total rating of the item
|
|
|
|
$table = preg_replace('/\W/', '', $table);
|
|
$id = intval($id);
|
|
|
|
$sql = new db;
|
|
if (!$sql->db_Select("rate", "*", "rate_table = '{$table}' AND rate_itemid = '{$id}' ")) {
|
|
return FALSE;
|
|
} else {
|
|
$rowgr = $sql->db_Fetch();
|
|
if($userid==TRUE){
|
|
$rating = "";
|
|
$rateusers = explode(".", $rowgr['rate_voters']);
|
|
for($i=0;$i<count($rateusers);$i++){
|
|
if(strpos($rateusers[$i], chr(1))){
|
|
$rateuserinfo[$i] = explode(chr(1), $rateusers[$i]);
|
|
if($userid == $rateuserinfo[$i][0]){
|
|
$rating[0] = 0; //number of votes, not relevant in users rating
|
|
$rating[1] = $rateuserinfo[$i][1]; //the rating by this user
|
|
$rating[2] = 0; //no remainder is present, because we have a single users rating
|
|
break;
|
|
}
|
|
}else{
|
|
$rating[0] = 0; //number of votes, not relevant in users rating
|
|
$rating[1] = 0; //the rating by this user
|
|
$rating[2] = 0; //no remainder is present, because we have a single users rating
|
|
}
|
|
}
|
|
}else{
|
|
$rating[0] = $rowgr['rate_votes']; // $rating[0] == number of votes
|
|
$tmp = $rowgr['rate_rating'] / $rowgr['rate_votes'];
|
|
$tmp = (strpos($tmp,",")) ? explode(",", $tmp) : explode(".", $tmp);
|
|
$rating[1] = $tmp[0];
|
|
if(isset($tmp[1])){
|
|
$rating[2] = substr($tmp[1], 0, 1);
|
|
}else{
|
|
$rating[2] = "0";
|
|
}
|
|
}
|
|
|
|
return $rating;
|
|
}
|
|
}
|
|
|
|
function enterrating($rateindex){
|
|
global $sql, $tp;
|
|
|
|
$qs = explode("^", $rateindex);
|
|
|
|
if (!$qs[0] || USER == FALSE || $qs[3] > 10 || $qs[3] < 1) {
|
|
header("location:".e_BASE."index.php");
|
|
exit;
|
|
}
|
|
|
|
$table = $tp -> toDB($qs[0], true);
|
|
$itemid = intval($qs[1]);
|
|
$rate = intval($qs[3]);
|
|
|
|
//rating is now stored as userid-rating (to retain individual users rating)
|
|
//$sep = "^";
|
|
$sep = chr(1);
|
|
$voter = USERID.$sep.intval($qs[3]);
|
|
|
|
if ($sql->db_Select("rate", "*", "rate_table='{$table}' AND rate_itemid='{$itemid}' ")) {
|
|
$row = $sql->db_Fetch();
|
|
$rate_voters = $row['rate_voters'].".".$voter.".";
|
|
$sql->db_Update("rate", "rate_votes=rate_votes+1, rate_rating=rate_rating+'{$rate}', rate_voters='{$rate_voters}' WHERE rate_id='{$row['rate_id']}' ");
|
|
} else {
|
|
$sql->db_Insert("rate", " 0, '$table', '$itemid', '$rate', '1', '.".$voter.".' ");
|
|
}
|
|
}
|
|
|
|
function composerating($table, $id, $enter=TRUE, $userid=FALSE, $nojump=FALSE){
|
|
//enter : boolean to show (rateselect box + textual info) or not
|
|
//userid : used to calculate a users given rating
|
|
//nojump : boolean, if present no urljump will be used (needed in comment_rating system)
|
|
|
|
global $imode;
|
|
$rate = "";
|
|
if($ratearray = $this -> getrating($table, $id, $userid)){
|
|
if($ratearray[1] > 0){
|
|
for($c=1; $c<= $ratearray[1]; $c++){
|
|
$rate .= "<img src='".e_IMAGE."packs/".$imode."/rate/box.png' alt='' style='height:8px; vertical-align:middle' />";
|
|
}
|
|
if($ratearray[1] < 10){
|
|
for($c=9; $c>=$ratearray[1]; $c--){
|
|
$rate .= "<img src='".e_IMAGE."packs/".$imode."/rate/empty.png' alt='' style='height:8px; vertical-align:middle' />";
|
|
}
|
|
}
|
|
$rate .= "<img src='".e_IMAGE."packs/".$imode."/rate/boxend.png' alt='' style='height:8px; vertical-align:middle' />";
|
|
if($ratearray[2] == ""){ $ratearray[2] = 0; }
|
|
$rate .= " ".$ratearray[1].".".$ratearray[2];
|
|
if(!$userid){
|
|
$rate .= " - ".$ratearray[0]." ";
|
|
$rate .= ($ratearray[0] == 1 ? RATELAN_0 : RATELAN_1);
|
|
}
|
|
}
|
|
}else{
|
|
if($enter===TRUE){
|
|
$rate .= RATELAN_4;
|
|
}
|
|
}
|
|
if($enter===TRUE){
|
|
if(!isset($ratearray[1]) || $ratearray[1] > 0){
|
|
$rate .= " - ";
|
|
}
|
|
if(!$this -> checkrated($table, $id) && USER){
|
|
$rate .= $this -> rateselect(RATELAN_2, $table, $id, $nojump);
|
|
|
|
}else if(USER){
|
|
$rate .= RATELAN_3;
|
|
}
|
|
}
|
|
|
|
return $rate;
|
|
|
|
}
|
|
|
|
function delete_ratings($table, $id)
|
|
{
|
|
global $tp, $sql;
|
|
$table = $tp->toDB($table, true);
|
|
$id = intval($id);
|
|
return $sql -> db_Delete("rate", "rate_itemid='{$id}' AND rate_table='{$table}'");
|
|
}
|
|
}
|
|
?>
|