Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 2.x > vBulletin 2.x Full Releases
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
Details »»

Version: , by Flare Flare is offline
Developer Last Online: Mar 2016 Show Printable Version Email this Page

Version: 2.2.x Rating:
Released: 04-30-2001 Last Update: Never Installs: 3
 
No support by the author.

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

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #12  
Old 06-22-2001, 06:44 PM
Jpp
Guest
 
Posts: n/a
Default

Quote:
Originally posted by Flare
Where is this error generated? Can you show me a on your system?
Parse error when woting, and view result
Parse error: parse error in C:\HTTPD\upload\poll.php on line 532
Reply With Quote
  #13  
Old 06-22-2001, 09:09 PM
Flare Flare is offline
 
Join Date: Oct 2001
Posts: 27
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Can you send me your poll.php?

My email is: flare@cohort.cc

I haven't tried this with the latest VB, I'm running 2.0.0 ... but I can't imagine anything has changed in poll.php between the two versions.

Only other thing I can think of off the top of my head is that you are running it on a windows box compared to my linux box... but I don't think that would affect it either.
Reply With Quote
  #14  
Old 06-22-2001, 09:17 PM
Jpp
Guest
 
Posts: n/a
Default

Quote:
Originally posted by Flare
Can you send me your poll.php?

My email is: flare@cohort.cc

I haven't tried this with the latest VB, I'm running 2.0.0 ... but I can't imagine anything has changed in poll.php between the two versions.

Only other thing I can think of off the top of my head is that you are running it on a windows box compared to my linux box... but I don't think that would affect it either.
I dont know much about this but shouldn't the new templates be mentioned in the $templatesused at the top of poll.php?? Did try that but no good,
Reply With Quote
  #15  
Old 06-22-2001, 09:48 PM
Flare Flare is offline
 
Join Date: Oct 2001
Posts: 27
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

No, that $templatesused variable isn't referenced anywhere else in poll.php. To be honest, I'm not even sure why it's there.

I tried installing this hack on a clean copy of poll.php and it worked fine. I have no clue what your issues could be, if you send me a copy of your poll.php, I'll run a compare against mine and see what's different.
Reply With Quote
  #16  
Old 06-22-2001, 10:09 PM
Jpp
Guest
 
Posts: n/a
Default

OK here it comes
Reply With Quote
  #17  
Old 06-23-2001, 04:53 AM
Flare Flare is offline
 
Join Date: Oct 2001
Posts: 27
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
 // redirect
    
eval("standardredirect(\"".gettemplate("redirect_pollchange")."\",\"showthread.php?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
  } 
Code:
 // redirect
    eval("standardredirect(\"".gettemplate("redirect_pollchange")."\",\"showthread.php?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
  }
// redirect
eval("standardredirect(\"".gettemplate("redirect_p ollchange")."\",\"showthread.php?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
}
Reply With Quote
  #18  
Old 06-23-2001, 04:59 AM
Flare Flare is offline
 
Join Date: Oct 2001
Posts: 27
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok... well, I found your problem. Which is exposing a problem with vBulletin itself. Very strange.

I'm on a dialup so I can't debug it very easily right now.. perhaps the VB programmers can take a look at this.

If you look at my original post, you'll see this line:

PHP Code:
 // redirect
    
eval("standardredirect(\"".gettemplate("redirect_pollchange")."\",\"showthread.php?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
  } 
at the bottom of the [ PHP ] tag.

If you'll look closely, the slash is missing from that line when viewed.

If you go edit that message, that quote shows up in the edit box.

You'll see above that the slash exists in the above [ php ] block. The code was cut and pasted from the edit box of the first message, it is identical to the first PHP block in the first message...

Currently, I have no explanation for this. I'll try to look at it more on Monday, but no guarentees. If the vB programmers can take a look at it and see what is causing the parse error, it'd be greatly appreciated.

To solve Jbb and AJ's problem, however, is simple. Just pull the code out of the edit box, not directly from the post page. You are missing an escaping slash (and possibly more), which is generating your parse error. When I tried installing it on a fresh poll.php, I used the copy from the edit box, which is why it worked for me, and not for you two.
Reply With Quote
  #19  
Old 06-23-2001, 07:01 AM
Jpp
Guest
 
Posts: n/a
Default

Ok It works now, That is to bad that you have been trubbled with such a tiny error, sorry!! But I could never have found it myself,
One little slash....... and the empire shakes. Btw It is a very nice featuer to have in the poll's. Good job
Reply With Quote
  #20  
Old 06-23-2001, 10:27 AM
Aunt Jemima
Guest
 
Posts: n/a
Default

I don't understand what to fix right now. Can you post the fix here?

Thanks,
Aunt
Reply With Quote
  #21  
Old 06-23-2001, 10:59 AM
Jpp
Guest
 
Posts: n/a
Default

OK sroll down to the end of your poll.php, at the end of the last line you will see that there is a slash missing,

// redirect
eval("standardredirect(\"".gettemplate("redirect_p ollchange")."\",\"showthread.p hp?s=$session[sessionhash]&threadid=$threadinfo[threadid]\");");
}
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:04 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04630 seconds
  • Memory Usage 2,323KB
  • Queries Executed 25 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (4)bbcode_code
  • (3)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (5)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete