$cookie_val) { // Collect poll cookies list($str, $int) = explode('_', $cookie_name); if (($str == 'poll') && is_numeric($int)) { // Yes, its poll's cookie $arr_polls_cookies[] = $int; } } if (count($arr_polls_cookies) > 1) { // Remove all except first (assumption: there is always only one active poll) rsort($arr_polls_cookies); for($i = 1; $i < count($arr_polls_cookies); $i++) { cookie("poll_{$arr_polls_cookies[$i]}", "", (time() - 2592000)); } } } /* function delete_poll parameter in: $existing - existing poll id to be deleted parameter out: language text string on succesful delete, nothing on failed deletion */ function delete_poll($existing) { global $sql, $admin_log; if ($sql -> db_Delete("polls", " poll_id='".intval($existing)."' ")) { if (function_exists("admin_purge_related")) { admin_purge_related("poll", $existing); } $admin_log->log_event('POLL_01',POLL_ADLAN08.': '.$existing,''); return POLL_ADLAN08; } } /* function submit_poll $mode = 1 :: poll is main poll $mode = 2 :: poll is forum poll returns message */ function submit_poll($mode=1) { global $tp, $sql, $admin_log; $poll_title = $tp->toDB($_POST['poll_title']); $poll_comment = $tp -> toDB($_POST['poll_comment']); $multipleChoice = intval($_POST['multipleChoice']); $showResults = intval($_POST['showResults']); $pollUserclass = intval($_POST['pollUserclass']); $storageMethod = intval($_POST['storageMethod']); $active_start = (!$_POST['startmonth'] || !$_POST['startday'] || !$_POST['startyear'] ? 0 : mktime (0, 0, 0, $_POST['startmonth'], $_POST['startday'], $_POST['startyear'])); $active_end = (!$_POST['endmonth'] || !$_POST['endday'] || !$_POST['endyear'] ? 0 : mktime (0, 0, 0, $_POST['endmonth'], $_POST['endday'], $_POST['endyear'])); $poll_options = ''; $_POST['poll_option'] = array_filter($_POST['poll_option']); foreach ($_POST['poll_option'] as $key => $value) { $poll_options .= $tp->toDB($value).chr(1); } if (POLLACTION == 'edit' || vartrue($_POST['poll_id'])) { $sql -> db_Update("polls", "poll_title='{$poll_title}', poll_options='{$poll_options}', poll_comment='{$poll_comment}', poll_type={$mode}, poll_allow_multiple={$multipleChoice}, poll_result_type={$showResults}, poll_vote_userclass={$pollUserclass}, poll_storage_method={$storageMethod} WHERE poll_id=".intval(POLLID)); /* update poll results - bugtracker #1124 .... */ $sql -> db_Select("polls", "poll_votes", "poll_id='".intval(POLLID)."' "); $foo = $sql -> db_Fetch(); $voteA = explode(chr(1), $foo['poll_votes']); $opt = count($poll_option) - count($voteA); if ($opt) { for($a=0; $a<=$opt; $a++) { $foo['poll_votes'] .= '0'.chr(1); } $sql -> db_Update("polls", "poll_votes='".$foo['poll_votes']."' WHERE poll_id='".intval(POLLID)."' "); } $admin_log->log_event('POLL_02','ID: '.POLLID.' - '.$poll_title,''); $message = POLLAN_45; } else { $votes = ''; for($a=1; $a<=count($_POST['poll_option']); $a++) { $votes .= '0'.chr(1); } if ($mode == 1) { /* deactivate other polls */ if ($sql -> db_Select("polls", "*", "poll_type=1 AND poll_vote_userclass!=255")) { $deacArray = $sql -> db_getList(); foreach ($deacArray as $deacpoll) { $sql -> db_Update("polls", "poll_end_datestamp='".time()."', poll_vote_userclass='255' WHERE poll_id=".$deacpoll['poll_id']); } } $ret = $sql -> db_Insert("polls", "'0', ".time().", ".intval($active_start).", ".intval($active_end).", ".ADMINID.", '{$poll_title}', '{$poll_options}', '{$votes}', '', '1', '".$tp -> toDB($poll_comment)."', '".intval($multipleChoice)."', '".intval($showResults)."', '".intval($pollUserclass)."', '".intval($storageMethod)."'"); $admin_log->log_event('POLL_03','ID: '.$ret.' - '.$poll_title,''); // Intentionally only log admin-entered polls } else { $sql -> db_Insert("polls", "'0', ".intval($_POST['iid']).", '0', '0', ".USERID.", '$poll_title', '$poll_options', '$votes', '', '2', '0', '".intval($multipleChoice)."', '0', '0', '".intval($storageMethod)."'"); } } return $message; } function get_poll($query) { global $sql, $e107; if ($sql->db_Select_gen($query)) { $pollArray = $sql -> db_Fetch(); if (!check_class($pollArray['poll_vote_userclass'])) { $POLLMODE = 'disallowed'; } else { switch($pollArray['poll_storage_method']) { case POLL_MODE_COOKIE: $userid = ''; $cookiename = 'poll_'.$pollArray['poll_id']; if (isset($_COOKIE[$cookiename])) { $POLLMODE = 'voted'; } else { $POLLMODE = 'notvoted'; } break; case POLL_MODE_IP: $userid = e107::getIPHandler()->getIP(FALSE); $voted_ids = explode('^', substr($pollArray['poll_ip'], 0, -1)); if (in_array($userid, $voted_ids)) { $POLLMODE = 'voted'; } else { $POLLMODE = 'notvoted'; } break; case POLL_MODE_USERID: if (!USER) { $POLLMODE = 'disallowed'; } else { $userid = USERID; $voted_ids = explode('^', substr($pollArray['poll_ip'], 0, -1)); if (in_array($userid, $voted_ids)) { $POLLMODE = 'voted'; } else { $POLLMODE = 'notvoted'; } } break; } } } else { return FALSE; } if (isset($_POST['pollvote']) && $POLLMODE == 'notvoted' && ($POLLMODE != 'disallowed')) { if ($_POST['votea']) { // $sql -> db_Select("polls", "*", "poll_vote_userclass!=255 AND poll_type=1 ORDER BY poll_datestamp DESC LIMIT 0,1"); $row = $pollArray; extract($row); $votes = explode(chr(1), $poll_votes); if (is_array($_POST['votea'])) { /* multiple choice vote */ foreach ($_POST['votea'] as $vote) { $vote = intval($vote); $votes[($vote-1)] ++; } } else { $votes[($_POST['votea']-1)] ++; } $optionArray = explode(chr(1), $pollArray['poll_options']); $optionArray = array_slice($optionArray, 0, -1); foreach ($optionArray as $k=>$v) { if (!$votes[$k]) { $votes[$k] = 0; } } $votep = implode(chr(1), $votes); $pollArray['poll_votes'] = $votep; $sql->db_Update("polls", "poll_votes = '$votep'".($pollArray['poll_storage_method'] != POLL_MODE_COOKIE ? ", poll_ip='".$poll_ip.$userid."^'" : '')." WHERE poll_id=".$poll_id); echo " "; $POLLMODE = 'voted'; } } $this->pollRow = $pollArray; $this->pollmode = $POLLMODE; } function render_poll($pollArray = "", $type = "menu", $POLLMODE = "", $returnMethod=FALSE) { global $POLLSTYLE, $sql, $tp, $ns; switch ($POLLMODE) { case 'query' : // Show poll, register any vote if ($this->get_poll($pollArray) === FALSE) { return ''; // No display if no poll } $pollArray = $this->pollRow; $POLLMODE = $this->pollmode; break; case 'results' : if ($sql->db_Select_gen($pollArray)) { $pollArray = $sql -> db_Fetch(); } break; } $barl = (file_exists(THEME.'images/barl.png') ? THEME_ABS.'images/barl.png' : e_PLUGIN_ABS.'poll/images/barl.png'); $barr = (file_exists(THEME.'images/barr.png') ? THEME_ABS.'images/barr.png' : e_PLUGIN_ABS.'poll/images/barr.png'); $bar = (file_exists(THEME.'images/bar.png') ? THEME_ABS.'images/bar.png' : e_PLUGIN_ABS.'poll/images/bar.png'); if ($type == 'preview') { $optionArray = $pollArray['poll_option']; $voteArray = array(); $voteArray = array_pad($voteArray, count($optionArray), 0); $pollArray['poll_allow_multiple'] = $pollArray['multipleChoice']; } else if ($type == 'forum') { if (isset($_POST['fpreview'])) { $pollArray['poll_allow_multiple'] = $pollArray['multipleChoice']; $optionArray = $pollArray['poll_option']; } else { $optionArray = explode(chr(1), $pollArray['poll_options']); $optionArray = array_slice($optionArray, 0, -1); } $voteArray = explode(chr(1), $pollArray['poll_votes']); // $voteArray = array_slice($voteArray, 0, -1); } else { // Get existing results $optionArray = explode(chr(1), $pollArray['poll_options']); $optionArray = array_slice($optionArray, 0, -1); $voteArray = explode(chr(1), $pollArray['poll_votes']); // $voteArray = array_slice($voteArray, 0, -1); } $voteTotal = array_sum($voteArray); $percentage = array(); if (count($voteArray)) { foreach ($voteArray as $votes) { if ($voteTotal > 0) { $percentage[] = round(($votes/$voteTotal) * 100, 2); } else { $percentage[] = 0; } } } /* get template */ if (file_exists(THEME.'poll_template.php')) { require(THEME.'poll_template.php'); } else if (!isset($POLL_NOTVOTED_START)) { require(e_PLUGIN.'poll/templates/poll_template.php'); } $preview = FALSE; if ($type == 'preview') { $POLLMODE = 'notvoted'; } elseif ($type == 'forum') { $preview = TRUE; } $comment_total = 0; if ($pollArray['poll_comment']) { // Only get comments if they're allowed on poll. And we only need the count ATM $comment_total = $sql->db_Count("comments", "(*)", "WHERE `comment_item_id`='".intval($pollArray['poll_id'])."' AND `comment_type`=4"); } $QUESTION = $tp -> toHTML($pollArray['poll_title'], TRUE, "emotes_off, defs"); $VOTE_TOTAL = POLLAN_31.": ".$voteTotal; $COMMENTS = ($pollArray['poll_comment'] ? " ".POLLAN_27.": ".$comment_total."" : ""); $poll_count = $sql->db_Count("polls", "(*)", "WHERE poll_id <= '".$pollArray['poll_id']."'"); $OLDPOLLS = ''; if ($poll_count > 1) { $OLDPOLLS = ($type == 'menu' ? "".POLLAN_28."" : ""); } $AUTHOR = POLLAN_35." ".($type == 'preview' || $type == 'forum' ? USERNAME : "".$pollArray['user_name'].""); switch ($POLLMODE) { case 'notvoted': $text = "
\n".preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_NOTVOTED_START : $POLL_NOTVOTED_START)); $count = 1; $alt = 0; // alternate style. foreach ($optionArray as $option) { // $MODE = ($mode) ? $mode : ""; /* debug */ $OPTIONBUTTON = ($pollArray['poll_allow_multiple'] ? "" : ""); $OPTION = $tp->toHTML($option, TRUE); if (isset($POLL_NOTVOTED_LOOP_ALT) && $POLL_NOTVOTED_LOOP_ALT && $type != "forum") { // alternating style $text .= preg_replace("/\{(.*?)\}/e", '$\1', ($alt == 0 ? $POLL_NOTVOTED_LOOP : $POLL_NOTVOTED_LOOP_ALT)); $alt = ($alt ==0) ? 1 : 0; } else { $text .= preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_NOTVOTED_LOOP : $POLL_NOTVOTED_LOOP)); } $count ++; } $SUBMITBUTTON = ""; if (('preview' == $type || $preview == TRUE) && strpos(e_SELF, "viewtopic") === FALSE) { $SUBMITBUTTON = "[".POLLAN_30."]"; } $text .= "\n".preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_NOTVOTED_END : $POLL_NOTVOTED_END))."\n
"; break; case 'voted': case 'results' : if ($pollArray['poll_result_type'] && !strstr(e_SELF, "comment.php")) { $text = "


".POLLAN_39."

".POLLAN_40."


"; } else { $text = preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_VOTED_START : $POLL_VOTED_START)); $count = 0; foreach ($optionArray as $option) { $OPTION = $tp->toHTML($option, TRUE); $BAR = ($percentage[$count] ? "
" : ""); $PERCENTAGE = $percentage[$count]."%"; $VOTES = POLLAN_31.": ".$voteArray[$count]; $text .= preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_VOTED_LOOP : $POLL_VOTED_LOOP)); $count ++; } } $text .= preg_replace("/\{(.*?)\}/e", '$\1', ($type == "forum" ? $POLL_FORUM_VOTED_END : $POLL_VOTED_END)); break; case 'disallowed': $text = preg_replace("/\{(.*?)\}/e", '$\1', $POLL_DISALLOWED_START); foreach ($optionArray as $option) { $MODE = $mode; /* debug */ $OPTION = $tp->toHTML($option, TRUE); $text .= preg_replace("/\{(.*?)\}/e", '$\1', $POLL_DISALLOWED_LOOP); $count ++; } if ($pollArray['poll_vote_userclass'] == 253) { $DISALLOWMESSAGE = POLLAN_41; } elseif ($pollArray['poll_vote_userclass'] == 254) { $DISALLOWMESSAGE = POLLAN_42; } else { $DISALLOWMESSAGE = POLLAN_43; } $text .= preg_replace("/\{(.*?)\}/e", '$\1', $POLL_DISALLOWED_END); break; } if (!defined("POLLRENDERED")) define("POLLRENDERED", TRUE); $caption = (file_exists(THEME."images/poll_menu.png") ? " ".POLLAN_MENU_CAPTION : POLLAN_MENU_CAPTION); if ($type == 'preview') { $caption = POLLAN_23; $text = "
\n\n\n
\n$text\n
"; } else if ($type == 'forum') { $caption = LAN_4; } if ($returnMethod) { return $text; } else { $ns->tablerender($caption, $text, 'poll'); } } /* function renderPollForm $mode = "admin" :: called from admin_config.php $mode = "forum" :: called from forum_post.php */ function renderPollForm($mode='admin') { $tp = e107::getParser(); $frm = e107::getForm(); //TODO Hardcoded FORUM code needs to be moved somewhere. if ($mode == 'forum') { $text = " ".LAN_4." ".LAN_386."
".LAN_5."
"; $option_count = (count($_POST['poll_option']) ? count($_POST['poll_option']) : 1); $text .= " ".LAN_391."
"; for($count = 1; $count <= $option_count; $count++) { if ($count != 1 && $_POST['poll_option'][($count-1)] =="") { break; } $opt = ($count==1) ? "id='pollopt'" : ""; $text .=""; $text .= "
"; } $text .="

".POLL_506." ".POLL_507."   ".POLL_508." ".POLLAN_16." ".POLLAN_17."
".POLLAN_18."
".POLLAN_19." "; return $text; } $formgo = e_SELF.(e_QUERY && !defined("RESET") && strpos(e_QUERY, 'delete') === FALSE ? "?".e_QUERY : ""); $text = "
"; $uclass = (ADMIN) ? "" : "public,member,admin,classes,matchclass"; $text .= "
".POLLAN_3.":
"; $option_count = (varset($_POST['poll_option']) && count($_POST['poll_option']) ? count($_POST['poll_option']) : 2); $text .= "
".LAN_OPTIONS." :
"; for($count = 1; $count <= $option_count; $count++) { $opt = ($count==1) ? "id='pollopt'" : ""; $text .=" post_toForm($_POST['poll_option'][($count-1)])."\" maxlength='200' />"; $text .= "
"; } $text .="

".POLLAN_9." ".POLLAN_10."   ".POLLAN_11."
".POLLAN_12." ".POLLAN_13."
".POLLAN_14."
".POLLAN_15."".r_userclass("pollUserclass", vartrue($_POST['pollUserclass']), 'off', $uclass)."
".POLLAN_16." ".POLLAN_17."
".POLLAN_18."
".POLLAN_19."
".POLLAN_20.": ".POLLAN_10." ".POLLAN_11."
"; if (isset($_POST['preview']) || varset($_POST['edit'])) { // $text .= " "; $text .= $frm->admin_button('preview',POLLAN_24,'other'); if (POLLACTION == 'edit') { $text .= $frm->admin_button('submit',POLLAN_22,'submit')." "; } else { $text .= $frm->admin_button('submit','no-value','submit',POLLAN_23); // $text .= " "; } } else { $text .= $frm->admin_button('preview','no-value','other',POLLAN_24); // $text .= " "; } if (defset('POLLID')) { $text .= $frm->admin_button('reset','no-value','reset',POLLAN_25); // $text .= " "; } $text .= "
"; return $text; } } echo ' '; ?>