<?php
/****************************************************************************
**
** This file is part of the Rating Bar extension for MediaWiki
** Copyright (C)2009
** - Franck Dernoncourt <www.francky.me>
** - PatheticCockroach <www.patheticcockroach.com>
**
** Home Page : http://www.wiki4games.com/Wiki4Games:RatingBar
**
** This program is free software; you can redistribute it and/or
** modify it under the terms of the GNU 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 General Public License for more details.
** <http://www.gnu.org/licenses/>
*********************************************************************/
// Check to make sure we're actually in MediaWiki.
if (!defined('MEDIAWIKI')) die('This file is part of MediaWiki. It is not a valid entry point.');
// Get some variables
require ( dirname( __FILE__ ) . '/config.php');
// Credits stuff
$wgExtensionCredits['parserhook'][] = array(
'name' => 'Rating Bar',
'version' => '1.1-b1',
'author' => array( '[http://www.francky.me Franck Dernoncourt]', '[http://www.patheticcockroach.com PatheticCockroach]' ),
'url' => 'http://www.wiki4games.com/index.php?title=Wiki4Games:RatingBar',
'description' => 'Display a rating bar using Ajax.',
);
// Tag creation
$wgExtensionFunctions[] = "wfRatingBar";
function wfRatingBar() {
global $wgParser;
$wgParser->setHook( "w4g_ratingbar", "render_w4g_ratingbar" );
$wgParser->setHook( "w4g_ratinglist", "render_w4g_ratinglist" );
$wgParser->setHook( "w4g_ratingraw", "render_w4g_ratingraw" );
}
// Get directory path
$w4g_rb_dir = dirname(__FILE__) . '/';
// Add the special page
if ( $add_special_page ) {
$wgAutoloadClasses['Ratings'] = $w4g_rb_dir . 'specialpage.php'; // Tell MediaWiki to load the extension body.
$wgSpecialPageGroups['Ratings'] = 'wiki';
$wgExtensionMessagesFiles['Ratings']= $w4g_rb_dir . 'ratingbar.i18n.php';
$wgSpecialPages['Ratings'] = 'Ratings'; // Let MediaWiki know about your the special page.
}
// This boolean is set to false it there is no ratingbar on the page, true if there is one.
// It prevents from having strictly more than 1 rating bar on the same page.
$alreadyratingbar = false;
// Set the counter of the calls to w4g_ratinglist hook to 0.
// It will be used to check if a user doesn't use the w4g_ratinglist hook on the same page more than he's allowed by the administrator, so as to avoid server lag.
$w4g_ratinglist_calls = 0;
// Make a link to another page of the wiki using MediaWiki's API
function MakeLink( $page_namespace, $page_title ) {
// Global object variables
global $wgUser; // For $wgUser->getSkin();
$title = Title::makeTitleSafe($page_namespace, $page_title);
$skin = $wgUser->getSkin();
if( !is_null( $title ) ) {
$link = $skin->makeKnownLinkObj( $title );
} else {
$link = "There is no <i>" . htmlspecialchars( $page_title ) . "</i> in namespace <i>" . htmlspecialchars( $page_namespace )."</i>";
}
return $link;
}
// Make a link to a user page of the wiki using MediaWiki's API
function MakeLinkUser( $user_id, $user_name, $displayusertools = false ) {
// Global object variables
global $wgUser; // For $wgUser->getSkin();
$skin = $wgUser->getSkin();
// Get link to the user
$link = $skin->userLink( $user_id, $user_name );
// Generate user tools
if ( $displayusertools ) $link .= $skin->userToolLinks( $user_id, $user_name );
return $link;
}
// The callback function for converting the input text to HTML output
function render_w4g_ratingraw( $input, $argv, $parser ) {
// Get some variables
require ( dirname( __FILE__ ) . '/config.php');
// Disable cache
header("Cache-Control: no-cache");
header("Pragma: nocache");
$parser->disableCache();
// Add CSS => David: not needed here I think
// $parser->mOutput->addHeadItem('<link rel="stylesheet" type="text/css" href="'.$path_to_w4g_rb.'styles.css"/>');
// Global object variables
global $wgOut; // For $wgOut->getPageTitle();
// Gets $page_id
if( isset( $argv['idpage'] ) && '{{FULLPAGENAME}}' != $argv['idpage'] ) {
$page_id = $argv['idpage'];
} else {
$page_id = $parser->getTitle();
}
// What's the max rate?
if( !isset( $argv['maxrate'] ) || intval($argv['maxrate']) <= 0 ) $maxrate = 100;
else $maxrate = intval($argv['maxrate']);
// Cleans $page_id
$page_id=mysql_real_escape_string($page_id);
// What's the current rating?
$query = mysql_query("SELECT AVG(rating) rating FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` WHERE page_id='".$page_id."';") or die("Error: ".mysql_error()." on line ".__LINE__);
$line = mysql_fetch_array($query);
$average_rating = round(intval($line['rating']) * $maxrate / 100);
$output = $average_rating;
return $output;
}
// The callback function for converting the input text to HTML output
function render_w4g_ratinglist( $input, $argv, $parser ) {
// Get some variables
require ( dirname( __FILE__ ) . '/config.php');
global $wgScriptPath; /* sdc 14 Apr 2009 */
// Disable cache
header("Cache-Control: no-cache");
header("Pragma: nocache");
$parser->disableCache();
// Global object variables
global $wgUser; // For $wgUser->getID();
// Check if the number of calls to w4g_ratinglist hook isn't too high.
global $w4g_ratinglist_calls;
if($w4g_ratinglist_calls==0)
$parser->mOutput->addHeadItem('<link rel="stylesheet" type="text/css" href="'.$wgScriptPath.'/extensions/RatingBar/styles.css"/>');
$w4g_ratinglist_calls += 1;
if ( $w4g_ratinglist_max_calls != 0 && $w4g_ratinglist_calls > $w4g_ratinglist_max_calls )
return '<span class="w4g_ratinglist-error">Sorry, you are not allowed to use w4g_ratinglist more than '.$w4g_ratinglist_max_calls.' on the same page.</span><br/>';
// Get the user's ID and name
$uid = $wgUser->getID();
$user_name = $wgUser->getName();
// Does the user want to display titles?
if( isset( $argv['notitle'] ) ) $displaytitle = false;
else $displaytitle = true;
// Does the user want a sortable table ?
if( isset( $argv['nosort'] ) ) $sortable = "";
else $sortable = "sortable";
/* Check if the user only wants page ID that are in the main namespace
if( isset( $argv['mainnamespace'] ) ) $mainnamespace = true;
else $mainnamespace = false;
*/
// Check if the user has specified a category
if( isset( $argv['category'] ) ) {
$category = $argv['category'];
// Clean category name
$category=str_replace(" ","_",$category); // Windows games should become Windows_games.
$category=mysql_real_escape_string($category);
} else {
$category = "";
}
// IF THE USER WANTS TO DISPLAY THE LATEST VOTES
if( isset( $argv['latestvotes'] ) ) {
$latestvotes = intval($argv['latestvotes']);
// Check if we don't display more items than the maximum numbers of items allowed by the administrator.
if ( $max_items != 0 && $latestvotes > $max_items ) $latestvotes = $max_items;
// Check if there is a specified period of time
if( isset( $argv['numberofdays'] ) && $argv['numberofdays'] > 0) {
$numberofdays = intval($argv['numberofdays']);
$starttime = time() - ( $numberofdays * 24 * 60 * 60 );
} else {
$starttime = 0;
}
// Check if the user has the right to list all voters for one page
if ( !$allow_display_latest_votes) return '<span class="w4g_ratinglist-error">Sorry, you are not allowed to list the latest votes.</span><br/>';
// Queries
if ( $category == "" ) {
if ( $latestvotes > 0 ) $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id, ratingbar.page_id, ratingbar.page_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE ratingbar.user_id = users.user_id ORDER BY time DESC LIMIT 0, ".$latestvotes.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id, ratingbar.page_id, ratingbar.page_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE ratingbar.user_id = users.user_id ORDER BY time DESC;") or die("Error: ".mysql_error()." on line ".__LINE__);
} else {
if ( $latestvotes > 0 ) $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id, ratingbar.page_id, ratingbar.page_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.user_id = users.user_id ORDER BY time DESC LIMIT 0, ".$latestvotes.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id, ratingbar.page_id, ratingbar.page_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.user_id = users.user_id ORDER BY time DESC;") or die("Error: ".mysql_error()." on line ".__LINE__);
}
// Display the title
$output = "";
if ( $displaytitle ) {
$output .= '<b>';
if ( $starttime != 0 && $latestvotes="" ) {
if ( $numberofdays == 1 ) $output .= 'Last 24 hours votes';
if ( $numberofdays > 1 ) $output .= 'Last '.$numberofdays.' days votes';
} else {
$output .= 'Latest votes ('.$latestvotes.')';
}
$output .= '</b>';
}
// Display the table
$output .= "<table class=\"wikitable w4g_ratinglist ".$sortable."\" >";
$output .= "<tr class='w4g_ratinglist-headercell'>";
$output .= "<td>Time</td>";
$output .= "<td>".$items_name."</td>";
$output .= "<td>Rating</td>";
$output .= "<td>User</td>";
$output .= "</tr>";
while($line = mysql_fetch_array($query)) {
$output .= "<tr class='w4g_ratinglist-contentcell'><td>".date("F j, Y, g:i a",($line['time']))."</td>";
$output .= "<td>".MakeLink( 'Main', $line['page_id'])."</td></td>";
$output .= "<td>".intval($line['rating'])."%</td>";
$output .= "<td>".MakeLinkUser($line['user_id'], $line['user_name'])."</td></tr>";
}
$output .= "</table>";
return $output;
}
// IF THE USER WANTS TO DISPLAY WHO VOTED FOR ONE PAGE
if( isset( $argv['idpage'] ) && isset( $argv['displayvoters'] )) {
$page_id=mysql_real_escape_string($argv['idpage']);
// Check if the user has the right to list all voters for one page
if ( !$allow_display_voters_for_one_page) return '<span class="w4g_ratinglist-error">Sorry, you are not allowed to list the users who voted for this page.</span>';
// If a number of items is specified
if( isset( $argv['numberofitems'] ) ) {
$numberofitems = intval($argv['numberofitems']);
} else {
$numberofitems = 0;
}
// Check if we don't display more items than the maximum numbers of items allowed by the administrator.
if ( ( $max_items != 0 && $numberofitems > $max_items ) || $numberofitems <= 0) $numberofitems = $max_items;
// Check if there is a specified period of time
if( isset( $argv['numberofdays'] ) ) {
$numberofdays = intval($argv['numberofdays']);
$starttime = time() - ( $numberofdays * 24 * 60 * 60 );
} else {
$starttime = 0;
}
// Do query
if ( $numberofitems > 0 ) $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE page_id='".$page_id."' AND ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY time DESC LIMIT 0, ".$numberofitems.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT users.user_name, ratingbar.rating, ratingbar.time, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE page_id='".$page_id."' AND ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY time DESC ;") or die("Error: ".mysql_error()." on line ".__LINE__);
// Display the title
$output = "";
if ( $displaytitle ) $output .= '<b>Voters for '.$page_id.'</b>';
// Display the table
$output .= "<table class=\"wikitable w4g_ratinglist ".$sortable."\" >";
$output .= "<tr class='w4g_ratinglist-headercell'>";
$output .= "<td>User</td>";
$output .= "<td>Rating</td>";
$output .= "<td>Time</td>";
$output .= "</tr>";
while($line = mysql_fetch_array($query)) {
$output .= "<tr class='w4g_ratinglist-contentcell'><td>".MakeLinkUser($line['user_id'], $line['user_name'])."</td>";
$output .= "<td>".intval($line['rating'])."%</td>";
$output .= "<td>".date("F j, Y, g:i a",($line['time']))."</td></tr>";
}
$output .= "</table>";
return $output;
}
// IF THE USER WANTS TO DISPLAY THE TOP VOTERS
if( isset( $argv['topvoters'] ) ) {
$topvoters = intval($argv['topvoters']);
// Check if we don't display more items than the maximum numbers of items allowed by the administrator.
if ( ( $max_items != 0 && $topvoters > $max_items ) || $topvoters <= 0) $topvoters = $max_items;
// Check if there is a specified period of time
if( isset( $argv['numberofdays'] ) ) {
$numberofdays = intval($argv['numberofdays']);
$starttime = time() - ( $numberofdays * 24 * 60 * 60 );
} else {
$starttime = 0;
}
// Query
if ( $category == "" ) {
if ( $topvoters > 0 ) $query = mysql_query("SELECT users.user_name, avg(rating) average, count(*) cnt, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY count(rating) DESC LIMIT 0, ".$topvoters.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT users.user_name, avg(rating) average, count(*) cnt, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users WHERE ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY count(rating) DESC ;") or die("Error: ".mysql_error()." on line ".__LINE__);
} else {
if ( $topvoters > 0 ) $query = mysql_query("SELECT users.user_name, avg(rating) average, count(*) cnt, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY count(rating) DESC LIMIT 0, ".$topvoters.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT users.user_name, avg(rating) average, count(*) cnt, users.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$user_tablename." users, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.time >= ".$starttime." AND ratingbar.user_id = users.user_id GROUP BY ratingbar.user_id ORDER BY count(rating) DESC ;") or die("Error: ".mysql_error()." on line ".__LINE__);
}
// Display the title
$output = "";
if ( $displaytitle ) {
$output .= '<b>';
if ( $topvoters > 0 ) $output .= 'Top '.$topvoters.' voters ';
else $output .= 'Top voters ';
if ( $starttime != 0 ) {
if ( $numberofdays == 1 ) $output .= 'over the last 24 hours';
if ( $numberofdays > 1 ) $output .= 'over the last '.$numberofdays.' days';
} else {
$output .= 'all time';
}
$output .= '</b>';
}
// Display the table
$output .= "<table class=\"wikitable w4g_ratinglist ".$sortable."\" >";
$output .= "<tr class='w4g_ratinglist-headercell'>";
$output .= "<td>User</td>";
$output .= "<td>Average rating</td>";
$output .= "<td>Votes</td>";
$output .= "</tr>";
while($line = mysql_fetch_array($query)) {
$output .= "<tr class='w4g_ratinglist-contentcell'><td>".MakeLinkUser($line['user_id'], $line['user_name'])."</td>";
$output .= "<td>".intval($line['average'])."%</td>";
$output .= "<td>".intval($line['cnt'])."</td></tr>";
}
$output .= "</table>";
return $output;
}
// IF THE USER WANTS TO DISPLAY THE TOP RATED PAGES
if( isset( $argv['numberofitems'] ) and !isset( $argv['user'] ) ) {
$numberofitems = intval($argv['numberofitems']);
// Check if we don't display more items than the maximum numbers of items allowed by the administrator.
if ( ( $max_items != 0 && $numberofitems > $max_items ) || $numberofitems <= 0) $numberofitems = $max_items;
// Check if there is a specified period of time
if( isset( $argv['numberofdays'] ) && $argv['numberofdays'] > 0) {
$numberofdays = intval($argv['numberofdays']);
$starttime = time() - ( $numberofdays * 24 * 60 * 60 );
} else {
$starttime = 0;
}
// Check if there is enough votes to display the votes
if( isset( $argv['minimumvotenumber'] ) ) {
$minimumvotenumber = intval($argv['minimumvotenumber']);
} else {
$minimumvotenumber = 0;
}
// Check if the user wants to display the number of votes
if( isset( $argv['hidenumberofvotes'] ) ) {
$hidenumberofvotes = true;
} else {
$hidenumberofvotes = false;
}
// Query
if ( $category == "" ) $query = mysql_query("SELECT avg(rating) average, page_id, count(*) cnt FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` WHERE time >= ".$starttime." GROUP BY page_id HAVING count(*) >= ".$minimumvotenumber." ORDER BY avg(rating) DESC LIMIT 0, ".$numberofitems.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT avg(ratingbar.rating) average, ratingbar.page_id, count(*) cnt FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.time >= ".$starttime." GROUP BY ratingbar.page_id HAVING count(*) >= ".$minimumvotenumber." ORDER BY avg(ratingbar.rating) DESC LIMIT 0, ".$numberofitems.";") or die("Error: ".mysql_error()." on line ".__LINE__);
// Display the title
$output = "";
if ( $displaytitle ) {
$output .= '<b>';
if ( $starttime != 0 ) {
if ( $numberofdays == 1 ) $output .= 'Last 24 hours';
if ( $numberofdays > 1 ) $output .= 'Last '.$numberofdays.' days';
} else {
$output .= 'All time';
}
$output .= ' (Top '.$numberofitems.')';
$output .= '</b>';
}
// Display the table
$output .= "<table class=\"wikitable w4g_ratinglist ".$sortable."\" >";
$output .= "<tr class='w4g_ratinglist-headercell'>";
$output .= "<td>".$items_name."</td>";
$output .= "<td>Rating</td>";
if ( !$hidenumberofvotes) $output .= "<td>Votes #</td>";
$output .= "</tr>";
while($line = mysql_fetch_array($query)) {
$output .= "<tr class='w4g_ratinglist-contentcell'><td>".MakeLink( 'Main', $line['page_id'])."</td>";
$output .= "<td>".intval($line['average'])."%</td>";
if ( !$hidenumberofvotes) $output .= "<td>".intval($line['cnt'])."</td>";
$output .= "</tr>";
}
$output .= "</table>";
return $output;
}
// IF THE USER WANTS TO DISPLAY A USER'S VOTES
if( isset( $argv['user'] ) ) {
$user = $argv['user'];
// If a number of items is specified
if( isset( $argv['numberofitems'] ) ) {
$numberofitems = intval($argv['numberofitems']);
} else {
$numberofitems = 0;
}
// Check if we don't display more items than the maximum numbers of items allowed by the administrator.
if ( ( $max_items != 0 && $numberofitems > $max_items ) || $numberofitems <= 0) $numberofitems = $max_items;
// If a number of items is specified
if( isset( $argv['displaytimestamp'] ) ) {
$displaytimestamp = true;
} else {
$displaytimestamp = false;
}
// Check if there is a specified period of time
if( isset( $argv['numberofdays'] ) ) {
$numberofdays = intval($argv['numberofdays']);
$starttime = time() - ( $numberofdays * 24 * 60 * 60 );
} else {
$starttime = 0;
}
// Check if the administrator allows user vote listing.
if ( !$allow_display_user_votes ) return '<span class="w4g_ratinglist-error">Sorry, the administrator has disabled user\'s vote listing.</span>';
if ( $allow_display_user_own_votes_only && $user!= $user_name ) return '<span class="w4g_ratinglist-error">Sorry, you are not allowed to see another user\'s votes.</span>';
$user_name = $user;
// Does the user exist?
$query = mysql_query("SELECT user_id FROM ".$ratingbar_dbname.".".$user_tablename." WHERE user_name='".$user_name."';") or die("Error: ".mysql_error()." on line ".__LINE__);
if ( mysql_num_rows($query) == 0 ) return 'The user '.$user_name.' doesn\'t exist.';
$line = mysql_fetch_array($query);
$uid = $line[0];
// Query
if ( $category == "" ) {
if ( $numberofitems > 0 ) $query = mysql_query("SELECT ratingbar.page_id, ratingbar.rating, ratingbar.time, ratingbar.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar WHERE user_id=".$uid." AND time >= ".$starttime." ORDER BY rating DESC LIMIT 0, ".$numberofitems.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT page_id, rating, time, user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar WHERE user_id=".$uid." AND time >= ".$starttime." ORDER BY rating DESC;") or die("Error: ".mysql_error()." on line ".__LINE__);
} else {
if ( $numberofitems > 0 ) $query = mysql_query("SELECT ratingbar.page_id, ratingbar.rating FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.user_id=".$uid." AND ratingbar.time >= ".$starttime." ORDER BY ratingbar.rating DESC LIMIT 0, ".$numberofitems.";") or die("Error: ".mysql_error()." on line ".__LINE__);
else $query = mysql_query("SELECT ratingbar.page_id, ratingbar.rating, ratingbar.time, ratingbar.user_id FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` ratingbar, ".$ratingbar_dbname.".".$categorylinks_tablename." categorylinks WHERE categorylinks.cl_to = '".$category."' AND categorylinks.cl_sortkey = ratingbar.page_id AND ratingbar.user_id=".$uid." AND ratingbar.time >= ".$starttime." ORDER BY ratingbar.rating DESC;") or die("Error: ".mysql_error()." on line ".__LINE__);
}
// Display the title
$output = "";
if ( $displaytitle ) {
$output = MakeLinkUser($line['user_id'], $user_name);
$output = "<b>".$output."'s votes</b>";
}
$output .= "<table class=\"wikitable w4g_ratinglist ".$sortable."\" >";
$output .= "<tr class='w4g_ratinglist-headercell'>";
$output .= "<td>".$items_name."</td>";
$output .= "<td>User's vote</td>";
if ( $displaytimestamp ) $output .= "<td>Voting time</td>";
$output .= "</tr>";
$ncount = 0; // resets the count
while($line = mysql_fetch_array($query)) {
$output .= "<tr class='w4g_ratinglist-contentcell'><td>".MakeLink( 'Main', $line['page_id'] )."</td>";
$output .= "<td>".intval($line['rating'])."%</td>";
if ( $displaytimestamp ) $output .= '<td>'.date("F j, Y, g:i a",($line['time'])).'</td>';
$output .= "</tr>";
}
$output .= "</table>";
return $output;
}
return '<span class="w4g_ratinglist-error">Something\'s wrong is your parameters.</span>';
}
// The callback function for converting the input text to HTML output
function render_w4g_ratingbar( $input, $argv, $parser ) {
// Check if there isn't any other rating bar on the same page
global $alreadyratingbar;
if ( $alreadyratingbar ) return '<span class="w4g_ratinglist-error">You can\'t display over 1 rating bar on the same page.</br></span>';
$alreadyratingbar = true;
// Global object variables
global $wgUser; // For $wgUser->getID();
global $wgOut; // For $wgOut->getPageTitle();
global $wgScriptPath; /* sdc 14 Apr 2009 */
// Get some variables
require ( dirname( __FILE__ ) . '/config.php');
// Add CSS and Javscript
$parser->mOutput->addHeadItem('<link rel="stylesheet" type="text/css" href="'.$wgScriptPath.'/extensions/RatingBar/styles.css"/>'); /* sdc 14 Apr 2009 */
$parser->mOutput->addHeadItem('<link rel="stylesheet" type="text/css" href="'.$wgScriptPath.'/extensions/RatingBar/ratingstars.css"/>');
$parser->mOutput->addHeadItem('<script type="text/javascript" src="'.$wgScriptPath.'/extensions/RatingBar/script.js"></script>'); /* sdc 14 Apr 2009 */
// Gets $page_id
if( isset( $argv['idpage'] ) && '{{FULLPAGENAME}}' != $argv['idpage'] ) {
$page_id = $argv['idpage'];
} else {
$page_id = $parser->getTitle();
}
// Cleans $page_id for not breaking GET queries
$page_id_js=str_replace("U","Ux55",$page_id);
$page_id_js=mysql_real_escape_string(str_replace($stupid_characters,$stupid_characters_codes,$page_id_js));
// Cleans $page_id for use in MySQL queries - DO NOT confuse with $page_id_js afterwards!
$page_id=mysql_real_escape_string($page_id);
// Get rating bar style
$w4g_rb_bar_styles = isset($w4g_rb_bar_styles) ? $w4g_rb_bar_styles : array("gradbar", "stars");
$w4g_rb_barstyle = (isset($argv['style'])) ? mysql_real_escape_string($argv['style']) : "gradbar";
if( !in_array($w4g_rb_barstyle, $w4g_rb_bar_styles) ) $w4g_rb_barstyle = $w4g_rb_bar_styles[0];
// === TEMPORARY: DISABLE stars STYLE ===
//$w4g_rb_barstyle = "gradbar";
// Initiating some variables
$output="";
$user_rating=0;
$ip = $_SERVER['REMOTE_ADDR'];
// What's the current rating?
$query = mysql_query("SELECT AVG(rating) FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` WHERE page_id='".$page_id."';") or die("Error: ".mysql_error()." on line ".__LINE__);
$line = mysql_fetch_array($query);
$average_rating = intval($line[0]);
$output .= '<span id="w4g_rb_area">'; // Open the AJAX field
$output .= 'Current user rating: <b>'.$average_rating.'% </b>';
// How many users voted?
$query = mysql_query("SELECT count(*) FROM `".$ratingbar_dbname."`.`".$ratingbar_tablename."` WHERE page_id='".$page_id."';") or die("Error: ".mysql_error()." on line ".__LINE__);
$line = mysql_fetch_array($query);
$output .= '('.$line[0].' votes) <br/>';
$output .= '</span>'; // Close the AJAX field
// You MUST leave the line breaks in $output as they are, otherwise MediaWiki won't be able to display the rating bar in a table. (Parsing error: a <p> tag will otherwise be added AFTER <script type="text/javascript">, causing trouble)
$output .= '
<script type="text/javascript">
//<![CDATA[
var average_rating='.$average_rating.';
var user_rating=0;
var pid="'.$page_id_js.'";
var base_query_url="'.$wgScriptPath.'/extensions/RatingBar/doqueries.php"; /* sdc 14 Apr 2009 */
query2page(base_query_url+"?act=load\x26pid="+pid,"w4g_rb_area",2,"'.$w4g_rb_barstyle.'");
var query_url = base_query_url+"?pid="+pid;
//]]>
</script>
';
switch ($w4g_rb_barstyle)
{
case "stars":
$output .= '<div class="w4g_rb_starbox" id="w4g_rb_starbox1" onmouseout="updateStars(\'w4g_rb_starbox1\',user_rating)">
<span class="w4g_rb_nojs"> You need to enable Javascript to vote</span>
</div>
<script type="text/javascript">
//<![CDATA[
loadStars("w4g_rb_starbox1");
updateStars("w4g_rb_starbox1",average_rating);
//]]>
</script>
';
break;
case "stars_old":
$output .='<div class="ratingblock">
<div id="unit_long1">
<ul id="unit_ul1" class="unit-rating" style="width:150px;">
<li class="current-rating" style="width:109px;">Currently 3.64/5</li>';
for($i=1;$i<=5;$i++)
{
$output.='<li><a onclick="user_rating='.intval($i*20).';query2page(\''.$path_to_w4g_rb.'doqueries.php?pid='.$page_id_js.'&vote='.intval($i*20).'\',\'w4g_rb_area\')" title="'.$i.' out of 5" class="r'.$i.'-unit rater" rel="nofollow">'.$i.'</a></li>';
}
$output .='</ul>
</div></div>';
break;
default:
case "gradbar":
$output .='
<div id="rating_box">
<div id="rating_target" onmouseout="updatebox(\'rating_target\',user_rating)"><span class="w4g_rb_nojs"> You need to enable Javascript to vote</span>
</div>
<div id="rating_text"></div>
</div>
<script type="text/javascript">
//<![CDATA[
loadbox("rating_target");
updatebox("rating_target",average_rating);
//]]>
</script>
';
break;
}
return $output;
}
?>