1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/macros/VoteRecorder.py Sun Mar 02 02:04:56 2008 +0100
1.3 @@ -0,0 +1,112 @@
1.4 +# -*- coding: iso-8859-1 -*-
1.5 +"""
1.6 + MoinMoin - VoteRecorder Macro
1.7 +
1.8 + @copyright: 2008 by Paul Boddie <paul@boddie.org.uk>
1.9 + @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.10 +
1.11 + This is like the VotingStars macro except that votes are logged for later
1.12 + counting, and the current state of the poll is not shown during voting.
1.13 +"""
1.14 +
1.15 +from MoinMoin.util import filesys
1.16 +from MoinMoin import wikiutil
1.17 +import os
1.18 +
1.19 +Dependencies = []
1.20 +
1.21 +def get_vote_pathname(page, name):
1.22 + votes_dir = page.getPagePath("poll")
1.23 + if not os.path.exists(votes_dir):
1.24 + filesys.makeDirs(votes_dir)
1.25 + filename = wikiutil.quoteWikinameFS(name)
1.26 + return os.path.join(votes_dir, filename)
1.27 +
1.28 +def save_vote(page, poll_name, username, vote):
1.29 + path = get_vote_pathname(page, username)
1.30 + f = open(path, "a")
1.31 + try:
1.32 + f.write(poll_name + "\t" + vote + "\n")
1.33 + finally:
1.34 + f.close()
1.35 +
1.36 +def get_votes(page, poll_name, username, vote):
1.37 + path = get_vote_pathname(page, username)
1.38 + f = open(path)
1.39 + try:
1.40 + voting = {}
1.41 + for line in f.xreadlines():
1.42 + line = line.strip()
1.43 + if line:
1.44 + poll_name, vote = line.split("\t")
1.45 + voting[poll_name] = vote
1.46 + return voting
1.47 + finally:
1.48 + f.close()
1.49 +
1.50 +def execute(macro, args):
1.51 + request = macro.request
1.52 + form = macro.form
1.53 + fmt = macro.formatter
1.54 + page = fmt.page
1.55 +
1.56 + output = []
1.57 +
1.58 + # Obtain the poll name for presentation purposes.
1.59 +
1.60 + args = args.split(",")
1.61 + if args:
1.62 + poll_name = args[0]
1.63 + else:
1.64 + output.append(fmt.sysmsg(on=1))
1.65 + output.append(fmt.text("Please specify a poll name!"))
1.66 + output.append(fmt.sysmsg(on=0))
1.67 + return ''.join(output)
1.68 +
1.69 + # Show a message if the user is not logged in.
1.70 +
1.71 + # Get the user, if known.
1.72 +
1.73 + if not request.user.valid:
1.74 + output.append(fmt.emphasis(on=1))
1.75 + output.append(fmt.text("Please log in to vote!"))
1.76 + output.append(fmt.emphasis(on=0))
1.77 + return ''.join(output)
1.78 +
1.79 + username = request.user.name
1.80 +
1.81 + # Handle any vote.
1.82 +
1.83 + if form and form.has_key("vote") and form.has_key("poll"):
1.84 + poll = form["poll"][0]
1.85 + if poll == poll_name:
1.86 + save_vote(page, poll, username, form["vote"][0])
1.87 + output.append(fmt.emphasis(on=1))
1.88 + output.append(fmt.text("Vote submitted!"))
1.89 + output.append(fmt.emphasis(on=0))
1.90 + return ''.join(output)
1.91 +
1.92 + # Show the choices.
1.93 +
1.94 + values = {
1.95 + "poll" : poll_name, "url" : page.url(request),
1.96 + "on_image" : '/wiki/modern/img/star_on.png',
1.97 + "off_image" : '/wiki/modern/img/star_off.png'
1.98 + }
1.99 + choices = range(1, 6)
1.100 +
1.101 + output.append(fmt.rawHTML('<form method="get" name="%(poll)s" action="%(url)s#%(poll)s">' % values))
1.102 + output.append(fmt.rawHTML('<input type="hidden" name="poll" value="%(poll)s">' % values))
1.103 + for choice in choices:
1.104 + values["choice"] = choice
1.105 + output.append(
1.106 + fmt.rawHTML('''
1.107 +<input type="image" name="vote" value="%(choice)s" src="%(off_image)s"
1.108 + onmouseover="this.src='%(on_image)s'"
1.109 + onmouseout="this.src='%(off_image)s'">
1.110 + ''' % values))
1.111 + output.append(fmt.rawHTML('</form>'))
1.112 +
1.113 + return ''.join(output)
1.114 +
1.115 +# vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/macros/VotingStars.py Sat Mar 01 21:57:01 2008 +0100
2.2 +++ b/macros/VotingStars.py Sun Mar 02 02:04:56 2008 +0100
2.3 @@ -29,10 +29,6 @@
2.4
2.5 VotingStars data is stored in data_dir/pages/pagename/votes
2.6 (i.e. alongside the attachments directory for a page).
2.7 -
2.8 - You can customise the appearance by defining the following CSS styles:
2.9 - table.votestars
2.10 -
2.11 '''
2.12 import os, pickle
2.13 from MoinMoin import wikiutil
2.14 @@ -120,7 +116,7 @@
2.15
2.16 if voter:
2.17 html.append('''
2.18 - <form method="get" name="%(formname)s" action="%(url)s#voteform">\n
2.19 + <form method="get" name="%(formname)s" action="%(url)s#%(formname)s">\n
2.20 <input type="hidden" name="voteName" value="%(voteName)s">\n
2.21 <input type="hidden" name="vote" value="0">
2.22 ''' % {