usertype == '' ) {
$usertype = eUTF::utf8_strtolower($acl->get_group_name('29'));
} else {
$usertype = eUTF::utf8_strtolower($my->usertype);
}
// ensure user is allowed to view this component
if (!($acl->acl_check( 'action', 'view', 'users', $usertype, 'components', 'all' ) ||
$acl->acl_check( 'action', 'view', 'users', $usertype, 'components', 'com_poll' ))) {
if(ereg('ajax', $task)) {
echo _NOT_AUTH;
exit;
} else {
mosRedirect( 'index.php', _NOT_AUTH );
}
}
}
require_once( $mainframe->getPath( 'front_html' ) );
require_once( $mainframe->getPath( 'class' ) );
$tabclass = 'sectiontableentry2,sectiontableentry1';
$polls_graphwidth = 200;
$polls_barheight = 2;
$polls_maxcolors = 5;
$polls_barcolor = 0;
$poll = new mosPoll( $database );
switch ($task) {
case 'vote':
pollAddVote( $id );
break;
case 'ajaxvote':
pollAddAjaxVote( $id );
break;
case 'ajaxresult':
pollAjaxresult( $id );
break;
default:
pollresult( $id );
break;
}
function pollAddVote( $uid ) {
global $database, $mosConfig_offset, $Itemid, $lang;
$redirect = 1;
$sessionCookieName = md5( 'site'.$GLOBALS['mosConfig_live_site'] );
$sessioncookie = mosGetParam( $_REQUEST, $sessionCookieName, '' );
if (!$sessioncookie) {
echo '
'. _E_ALERT_ENABLED .'"
';
echo '';
return;
}
$poll = new mosPoll( $database );
if (!$poll->load( $uid )) {
echo ''. _NOT_AUTH .'
';
echo '';
return;
}
if ($poll->language != '') {
$plangs = explode(',', $poll->language);
if (!in_array($lang, $plangs)) {
echo ''. _NOT_AUTH .'
';
echo '';
return;
}
}
//check if user has allready vote based on cookie
$cookiename = "voted$poll->id";
$voted = mosGetParam( $_COOKIE, $cookiename, '0' );
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND $_SERVER['HTTP_X_FORWARDED_FOR']!="") {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['REMOTE_ADDR']) AND $_SERVER['REMOTE_ADDR']!="") {
$ipaddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipaddress = '';
}
// check if user has allready vote based on ip address
if (!$voted) {
if (strlen($ipaddress) > 7) {
$nowstamp = strtotime ('now');
$lagstamp = $nowstamp - ($poll->lag);
$checkdate = date('Y-m-d H:i:s', $lagstamp);
$query = "SELECT count(id) FROM #__poll_date WHERE "
."\n poll_id='$poll->id' AND ipaddress='$ipaddress'"
."\n AND date > '$checkdate'"
;
$database->setQuery($query);
$counter = intval($database->loadResult());
if ($counter > 0) { //oops a cheater!
$voted = 1;
@setcookie( $cookiename, '1', time()+$poll->lag );
}
}
}
if ($voted) {
echo ""._ALREADY_VOTE."
";
echo "";
return;
}
$voteid = mosGetParam( $_POST, 'voteid', 0 );
if (!$voteid) {
echo ""._E_NO_SELECTION."
";
echo '';
return;
}
setcookie( $cookiename, '1', time()+$poll->lag );
$database->setQuery( "UPDATE #__poll_data SET hits=hits + 1 WHERE pollid='$poll->id' AND id='$voteid'");
$database->query();
$database->setQuery( "UPDATE #__polls SET voters=voters + 1 WHERE id='$poll->id'");
$database->query();
$now = date("Y-m-d G:i:s");
$database->setQuery( "INSERT INTO #__poll_date (date,vote_id,poll_id) VALUES ('$now', '$voteid', '$poll->id')");
$database->query();
if ( $redirect ) {
mosRedirect( sefRelToAbs( 'index.php?option=com_poll&task=results&id='. $uid ), _THANKS );
} else {
echo ''. _THANKS .'
';
echo '';
}
}
/*
Author: Ioannis Sannos
*/
function pollAddAjaxVote( $uid ) {
global $database, $mosConfig_offset, $Itemid, $lang;
$sessionCookieName = md5( 'site'.$GLOBALS['mosConfig_live_site'] );
$sessioncookie = mosGetParam( $_REQUEST, $sessionCookieName, '' );
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND $_SERVER['HTTP_X_FORWARDED_FOR']!="") {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['REMOTE_ADDR']) AND $_SERVER['REMOTE_ADDR']!="") {
$ipaddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipaddress = '';
}
if (!$sessioncookie) {
echo _E_ALERT_ENABLED;
exit();
}
$poll = new mosPoll( $database );
if (!$poll->load( $uid )) {
echo _NOT_AUTH;
exit();
}
if ($poll->language != '') {
$plangs = explode(',', $poll->language);
if (!in_array($lang, $plangs)) {
echo _NOT_AUTH;
exit();
}
}
//check if user has allready vote based on cookie
$cookiename = "voted$poll->id";
$voted = mosGetParam( $_COOKIE, $cookiename, '0' );
//check if user has allready vote based on ip address
if (!$voted) {
if (strlen($ipaddress) > 7) {
$nowstamp = strtotime ('now');
$lagstamp = $nowstamp - ($poll->lag);
$checkdate = date('Y-m-d H:i:s', $lagstamp);
$query = "SELECT count(id) FROM #__poll_date WHERE "
."\n poll_id='$poll->id' AND ipaddress='$ipaddress'"
."\n AND date > '$checkdate'"
;
$database->setQuery($query);
$counter = intval($database->loadResult());
if ($counter > 0) { //oops a cheater!
$voted = 1;
@setcookie( $cookiename, '1', time()+$poll->lag );
}
}
}
if ($voted) {
pollAjaxresult( $poll->id, _ALREADY_VOTE );
exit();
}
$voteid = mosGetParam( $_GET, 'voteid', 0 );
if (!$voteid) {
echo _E_NO_SELECTION;
exit();
}
setcookie( $cookiename, '1', time()+$poll->lag );
$database->setQuery( "UPDATE #__poll_data SET hits=hits + 1 WHERE pollid='$poll->id' AND id='$voteid'");
$database->query();
$database->setQuery( "UPDATE #__polls SET voters=voters + 1 WHERE id='$poll->id'");
$database->query();
$now = date("Y-m-d G:i:s");
$database->setQuery( "INSERT INTO #__poll_date (date,vote_id,poll_id,ipaddress) VALUES ('$now', '$voteid', '$poll->id', '$ipaddress')");
$database->query();
/* Create ajax graph */
$query = "SELECT id, text, hits FROM #__poll_data WHERE pollid='$poll->id' AND text <> '' ORDER BY id";
$database->setQuery($query);
if(!($options = $database->loadObjectList())) {
echo _THANKS; //just say thanks, we can not create graph
exit();
}
/* server responce on success */
ob_clean();
@header("Content-type: application/xml");
echo '';
echo "\n\n";
echo "".$poll->title."\n";
echo ""._E_NUM_VOTERS.": \n";
for ($i=0, $n=count( $options ); $i < $n; $i++) {
echo "";
}
echo "\n";
exit();
}
function pollresult( $uid ) {
global $database, $mosConfig_offset, $mosConfig_live_site, $Itemid, $mainframe, $lang;
$poll = new mosPoll( $database );
$poll->load( $uid );
if (empty($poll->title)) {
$poll->id = '';
$poll->title = _E_SELECT_POLL;
}
if ($poll->language != '') {
$plangs = explode(',', $poll->language);
if (!in_array($lang, $plangs)) {
$poll->id = '';
$poll->title = _E_SELECT_POLL;
}
}
$first_vote = '';
$last_vote = '';
if (isset($poll->id) && $poll->id != "") {
$query = "SELECT MIN(date) AS mindate, MAX(date) AS maxdate"
."\n FROM #__poll_date"
."\n WHERE poll_id='$poll->id'"
;
$database->setQuery( $query );
$dates = $database->loadObjectList();
if (isset($dates[0]->mindate)) {
$first_vote = mosFormatDate( $dates[0]->mindate, _GEM_DATE_FORMLC2 );
$last_vote = mosFormatDate( $dates[0]->maxdate, _GEM_DATE_FORMLC2 );
}
}
if (intval($poll->id) > 0) {
$query = "SELECT a.id, a.text, count( DISTINCT b.id ) AS hits, count( DISTINCT b.id )/COUNT( DISTINCT a.id )*100.0 AS percent"
. "\n FROM #__poll_data AS a"
. "\n LEFT JOIN #__poll_date AS b ON b.vote_id = a.id"
. "\n WHERE a.pollid='$poll->id' AND a.text <> ''"
. "\n GROUP BY a.id, a.text"
. "\n ORDER BY a.id"
;
$database->setQuery( $query );
$votes = $database->loadObjectList();
} else { $votes = null; }
$query = "SELECT id, title"
. "\n FROM #__polls"
. "\n WHERE published=1"
. "\n AND ((language LIKE '%$lang%') OR (language IS NULL))"
. "\n ORDER BY id"
;
$database->setQuery( $query );
$polls = $database->loadObjectList();
reset( $polls );
$link = sefRelToAbs( 'index.php?option=com_poll&task=results&id=\' + this.options[selectedIndex].value + \'&Itemid='. $Itemid .'\' + \'' );
$pollist = '\n";
// Adds parameter handling
$menu =& new mosMenu( $database );
$menu->load( $Itemid );
$params =& new mosParameters( $menu->params );
$params->def( 'page_title', 1 );
$params->def( 'pageclass_sfx', '' );
$params->def( 'back_button', $mainframe->getCfg( 'back_button' ) );
$params->def( 'header', $menu->name );
$mainframe->SetPageTitle($poll->title);
poll_html::showResults( $poll, $votes, $first_vote, $last_vote, $pollist, $params );
}
/*
Author: Ioannis Sannos
*/
function pollAjaxresult( $uid, $msg='' ) {
global $database, $lang;
$poll = new mosPoll( $database );
$poll->load( $uid );
if (!$poll->load( $uid )) {
echo _NOT_AUTH;
exit();
}
if ($poll->language != '') {
$plangs = explode(',', $poll->language);
if (!in_array($lang, $plangs)) {
$poll->id = '';
$poll->title = _E_SELECT_POLL;
}
}
if (empty($poll->title)) {
echo _NOT_AUTH;
exit();
}
/* Create ajax graph */
$query = "SELECT id, text, hits FROM #__poll_data WHERE pollid='$poll->id' AND text <> '' ORDER BY id";
$database->setQuery($query);
if(!($options = $database->loadObjectList())) {
echo $msg; //just print msg (usually: you have already voted), we can not create graph
exit();
}
/* server responce */
ob_clean();
@header("Content-type: application/xml");
echo "\n";
echo "\n";
if (trim($msg) != '') {
echo "".$msg."\n";
}
echo ""._E_NUM_VOTERS.": \n";
echo "".$poll->title."\n";
for ($i=0, $n=count( $options ); $i < $n; $i++) {
echo "\n";
}
echo "";
exit;
}
?>