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 '
'; echo ''; 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; } ?>