vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 2.x Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=4)
-   -   Change Vote Ability (https://vborg.vbsupport.ru/showthread.php?t=15709)

Flare 04-30-2001 09:00 PM

As promised a few weeks ago, I finally found some time to make the much needed addition to allow users to change their votes in a poll. After examining the code a bit, I ended up reusing some of the vB code for this ... I hope this isn't a violation of the hacks rules. I read through them, and I think the code re-use is so small and specialized that it will be ok for redistribution via this forum. If it's not, please feel free to edit/lock this thread, I just ask that a moderator let me know what parts are unacceptable.

Here is the hack, it's fairly simple:

Open up poll.php:

At the bottom of the file, find ?>

Just above this, insert this code:

PHP Code:

// #################################### Change Vote ##########################################

if ($action=="changevote"

{

  
// other permissions?
  
$permissions=getpermissions($forumid);
  if (!
$permissions[canview] or !$permissions[canvote]) {
    
show_nopermission();
  }

  
$pollid=verifyid("poll",$pollid);
  
$pollinfo=$DB_site->query_first("SELECT * FROM poll WHERE pollid='$pollid'");
  
$voteinfo=$DB_site->query_first("SELECT * FROM pollvote WHERE userid='$bbuserinfo[userid]' AND pollid='$pollid'");

  
$threadinfo=$DB_site->query_first("SELECT * FROM thread WHERE pollid='$pollid' AND open<>10");
  
$threadcache[$threadinfo[threadid]]=$threadinfo;
  
  
//check if poll is closed
  
if (!$pollinfo[active] or !$threadinfo[open] or ($pollinfo[dateline]+($pollinfo[timeout]*86400)<time() and $pollinfo[timeout]!=0)){ //poll closed
     
eval("standarderror(\"".gettemplate("error_pollclosed")."\");");
     exit;
  }

    
//check if a user has already voted - abuse management
    
if (!$uservoteinfo=$DB_site->query_first("SELECT userid FROM pollvote WHERE userid=$bbuserinfo[userid] AND pollid='$pollid'"))
    {
      
//the user has not voted yet
      
eval("standarderror(\"".gettemplate("error_userhasnotvoted")."\");");
      exit;
    }

    
//Error checking complete, lets get the options
    
$timenow time();
    
$DB_site->query("DELETE FROM pollvote WHERE pollid='$pollid' AND userid='$bbuserinfo[userid]' LIMIT 1");

    
$splitvotes=explode("|||",$pollinfo[votes]);
    
$splitvotes[$voteinfo[voteoption]-1]--;

    
$counter=0;
    while (
$counter<$pollinfo[numberoptions]) {
      
$votesstring.="|||".intval($splitvotes[$counter]);
      
$counter++;
    }
    if (
substr($votesstring,0,3)=="|||") {
      
$votesstring=substr($votesstring,3);
    }

    
$DB_site->query("UPDATE poll SET votes='".addslashes($votesstring)."' WHERE pollid='$pollid'");

    
//make last reply date == last vote date
    
if ($updatelastpost){ //option selected in CP
      
$DB_site->query("UPDATE thread SET lastpost=$timenow WHERE threadid=$threadinfo[threadid]");
    }

    
// redirect
    
eval("standardredirect(\"".gettemplate("redirect_pollchange")."\",\"showthread.php?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
  } 

Save poll.php and upload it.

In your templates, you will need to add two templates and modify 1 existing one.

First:

Code:

Add template " error_userhasnotvoted "

The text of the template should be:

You have not voted on this thread, so you can not change your vote.

Second:

Code:

Add template " redirect_pollchange "

The text of the template should be:

You have deleted your vote.  You will be taken to the poll, where you will be allowed to revote.

Lastly:

Code:

Edit your "showthread_pollresults_voted" template.

Change the text to:

You have already voted on this poll!
<BR>If you wish to change your vote, click <a href="poll.php?action=changevote&pollid=$pollinfo[pollid]">here</a>.

That's it...

Now your users will have the option to erase thier vote and revote. Not <i>quite</i> as elegant as allowing them to actually revote, but it will suffice for now ... at least for me. Someone feel free to expand on this if they want something a bit more robust.

Thanks, and good luck!

-Flare

conan 05-01-2001 05:23 PM

I apologize if I misundestood the meaning of the hack, but if I understood correctly, there is already a feature to allow users to change their vote

tubedogg 05-01-2001 05:50 PM

There's a way to allow users to change their thread ratings, not votes on polls.

doron 05-01-2001 06:07 PM

that code is somewhat unclean (select *).

conan 05-01-2001 09:13 PM

Oh I see my bad :)
Thanks for clearing that up tuebdogg

Quote:

Originally posted by tubedogg
There's a way to allow users to change their thread ratings, not votes on polls.

Flare 05-02-2001 03:11 PM

Jeez... thought this was something a bunch of people wanted :D Instead... I'm... *sob* ... unclean!

I'll go back in my corner now and eat paint chips ;)

jojo85 05-03-2001 08:48 AM

Nice one thx youuu

Aunt Jemima 06-22-2001 06:45 AM

I get a Parse Error

Jpp 06-22-2001 07:48 AM

Quote:

Originally posted by Aunt Jemima
I get a Parse Error
Me to

Flare 06-22-2001 04:29 PM

Where is this error generated? Can you show me a on your system?


All times are GMT. The time now is 06:47 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02164 seconds
  • Memory Usage 1,761KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (3)bbcode_code_printable
  • (1)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete