--
MichaelDaum - 07 Mar 2005
Thanks Michael for sharing this Plugin with the community
How about measuring and documenting the
PluginBenchmarks?
--
PeterThoeny - 08 Mar 2005
Hi, I get the following error when I use the
VotePlugin:
"Undefined subroutine &TWiki::normalizeFileName called at /var/www/twiki/lib/TWiki/Plugins/VotePlugin.pm line 344."
When I comment the line out, it works in my
FireFox browser - but if I try it in IE, the combo boxes don't size correctly, it only draws a few pixels (about half a letter).
I'm using Twiki bundle TWiki20040902.tar.gz
Thanks.
--
ScottCampbellTwo - 01 Apr 2005
About TWiki::normalizeFileName:
The
VotePlugin has been written using the security patches from
UncoordinatedSecurityAlert23Feb2005. So you might follow the recommendations there first anyway, Scott.
About the comboxes:
Actually I've got no IE arround for testing. So could you do me a favor and attach a screenshot showing the problem.
--
MichaelDaum - 02 Apr 2005
Thanks for the link, I'll check it out.
Here are the screen shots in IE version 6.0
- votePlugin1.jpg:
- votePlugin2.jpg:
--
ScottCampbellTwo - 04 Apr 2005
Try this patch:
@@ -167,7 +167,7 @@
next if ! $optionNames;
$result .= "<tr><td><b>$selectName</b> </td>\n";
- $result .= "<td><select name=\"$selectName\" size=\"1\" style=\"width:90%\">\n";
+ $result .= "<td><select name=\"$selectName\" size=\"1\">\n";
$result .= "<option selected value=\"\">Select ...</option>\n";
foreach my $optionName (split /\s?,\s?/,$optionNames) {
--
MichaelDaum - 04 Apr 2005
Thanks,
I applied the security patch so I no longer get the error I was receiveing before.
I also applied the patch above and it displays correctly in IE now.
Thanks
--
ScottCampbellTwo - 04 Apr 2005
checked
.zip
into
CVS
--
WillNorris - 19 Jul 2005
I added a signature to the Plugin topic; the report on the
PluginPackage topic depends on it.
How about measuring and documenting the
PluginBenchmarks?
--
PeterThoeny - 23 Aug 2005
Peter, why not extract the plugin author from the plugin info table. Isn't this extra signature redundant?
--
MichaelDaum - 23 Aug 2005
There's a new version v1.10 which runs on dakar now.
--
MichaelDaum - 14 Sep 2005
Hi! I dont want the users to be able to vote once a day, just one vote generally. Is it enough to change line 309 in VotePlugin.pm from
- $host = md5_base64("$ENV{REMOTE_ADDR}$user$date");
to
+ $host = md5_base64("$user");
?
So every registered user can vote only once.
--
TomWolf - 15 Sep 2005
Yes, certainly. Sorry, that there is no configuration switch to do so.
--
MichaelDaum - 15 Sep 2005
Hazzard: The parameters are very sensitive.
- Using single quotes instead of double quotes breaks things.
- You can't have something like "...,5% to 10%,..." in the option string. It deens't like the percentage marks.
--
AntonAylward - 05 Oct 2005
Bugs:Item580
--
AntonAylward - 05 Oct 2005
Thanks for the elaborated tests, Anton (btw. your email is broken).
About "Bug in handling of arguments - quotes": single quoted arguments are no proper TWikiML. Although there's a bug in the
VotePlugin that prevented to return a proper error message and resulted in displaying nothing.
About "Bug when used with Dakar: vote storage": the
VotePlugin will convert
Votes*.txt
to
_Votes*.txt
if needed to match the new storage constraints.
More to come.
--
MichaelDaum - 07 Oct 2005
Ok. Released a new version v1.20 today which addresses the reported bugs and feature requests. See also
http://ntwiki.ethermage.net/~develop/cgi-bin/view/Bugs/Item580.
--
MichaelDaum - 08 Oct 2005
We have been using Wiki for our organization and there are some problem with this vote plug-in:-
1) There is no option to limit user to vote only once per pool. Although user can�t vote more than once a day, but can do so on different day!
2) There is no option to display voter user and time voted. If at least we can see who have been voted, then we can tell who vote more than once. But so far I couldn�t trace for the voters, not sure if it�s because my Wiki�s authorization level.
3) Perhaps I might not fully understand this functionality. But I could only find one reference document at
https://wiki.au.adp.com/wiki/bin/view/TWiki/VotePlugin, which obviously not sufficient.
--
KenBuncharoen - 24 Feb 2006
The extension of
VotePlugin is far better than original. But still one problem that it allow voter to vote more than once and it seems not easy to setup.
--
KenBuncharoen - 09 Mar 2006
The
VotePlugin does not work in topics with limited read access. When voting in a page where I have read access, I get the following error:
TWiki . OurWeb . OurTopic (oops)
Attention
View Access Denied
You do not have permission to view topic OurWeb.OurTopic.
Contact al_twiki_admin@xxxx if you have any questions.
Related topics: TWikiGroups, TWikiAccessControl
The vote is not counted.
--
PeterHuisken - 27 Mar 2006
Awesome work!! After trying unsuccessfully to get
PollPlugin working I switched over to this one. Exactly what i was looking for... funny that searching the plugins database didn't list this at all; but i was fairly tired so I guess i just missed it.
--
DavidWall - 19 Apr 2006
Looks interesting!
The
PackageForm and Plugin Info (especially change history) are not updated.
--
JosMaccabiani - 19 Apr 2006
Excellent work! I have one question however. How do I map the syntax of the Vote plugin to a preference variable? I would like to create a preference variable named RANK and I would like to map the entire syntax of the vote plugin to this variable. But the problem is that the vote plugin requires a unique ID.
--
AlokNarula - 08 May 2006
Looking at
TagMePlugin, I would like to suggest an improvement to this plugin. I'm using this plugin to capture feedback on TWiki topics. The feedback is captured on a 1-5 scale (1 being least useful and 5 being moset useful). I would like to run a search on all topics who have a rank x, where x is 1 to 5.
--
AlokNarula - 26 Jun 2006
I might be tired and missing something here, but doesn't
$host = md5_base64("$ENV{REMOTE_ADDR}$user$date");
allow people to have more than one vote counted if they vote from different IPs (also for different dates)?
--
KarlSkidmore - 09 Jul 2006
Karl, see the
TomWolf comment from
15 Sep 2005
for the answer to that question (although, now the line to change is found at #272 of
Core.pm
--
KeithHelfrich - 18 Jul 2006
I found that the vote mechanism does not require an authenticated user. So
TWikiGuest is allowed to vote if the user hasn't yet logged on.
This means that, even with the one vote per user fix above, one person could always vote twice by voting for himself and then again as
TWikiGuest.
I've asked the community for an answer in
LogonBeforeFormSubmit.
--
KeithHelfrich - 18 Jul 2006
Thanks to Peter in
LogonBeforeFormSubmit, the following directive in your
../twiki/bin/.htaccess
would prevent the casual user from voting before logging on.
<Files "vote">
require valid-user
</Files>
But the clever user could still logon as
TWikiGuest with password
guest
. Is there a way to update the plugin to prevent this user from voting ?
thanks !
--
KeithHelfrich - 19 Jul 2006
Happily reporting that my users have been voting
To me an operational voting mechanism
really helps people collaborate. Here's a small list of the things I'd like to see this plugin be able to do :
- prevent TWikiGuest from casting a vote (even when authenticated w/ password
guest
)
- allow the option for an "open" or "closed" ballotbox
- if open, then
$host = $user;
- if closed, then
$host = md5_base64("$user");
- allow for a deadline after which votes can no longer be added or changed
To achieve #3, I manually adjusted the file permissions on the ballotbox file
/pub/Web/Topic/_Vote*.txt
to make it read only. But doing so results in a fairly ugly
Software error the next time someone tries to vote :
cannot append /path/to/twiki/pub/Web/Topic/_Votes_Example.txt at /path/to/twiki/lib/TWiki/Plugins/VotePlugin/Core.pm line 265.
A friendlier
oops
page, or a "this poll is no longer accepting votes" message, or a javascript disable of the vote button would be much more elegant.
All three of those mods I'm requesting are things I'd be happy to put some time into developing. Except I'm not a programmer and don't know the first bit of Perl. So I would need some help. This
could be my first real
perl contribution to the
TWikiCommunity ( and my first step on a slippery slope? )
Is somebody out there willing to mentor me through making these modifications ? For example, with pointers on where to begin and a code review in case I have trouble ?
--
KeithHelfrich - 04 Aug 2006
I have a couple of feature requests:
- Be able to display radio buttons instead of a select box
- Be able to specify the text in the dropdown "Select"
- Add a link "View results" (and be able to specify this text)
- Be able to specify if the results are only shown after clicking this link
- Be able to specify the bar images, or better yet, make this a CSS style
- Be able to use this as suggestion box, with an freetext input field
- Be able to show the results in a pop-up window
- Have CSS classes documented
- Be able to specify the format of the result table.
- If one of the keys is a WikiWord, I wouldn't want a link for instance.
- Be able to display the total number of cast votes
- As mentioned above: be able to let users vote only once
- Be able to change the text of the poll without throwing away cast votes
The results table header is redundant if the question is listed above the results.
--
ArthurClemens - 23 Nov 2006
The dependency on
CPAN Digest::MD5
is not listed.
This dependency can cause this plugin to not work with hosted twikis. Is it possible to make this functionality optional?
--
ArthurClemens - 23 Nov 2006
I implemented the following:
-
freq
parameter allows setting votes to be counted only once
-
anon
parameter allows turning off anonymous voting
-
voters
style shows voters per key/value pair if anonymous voting is off
-
list
style shows a list of votes if anonymous voting is off
Patch attached, you can apply it by standing in the twiki dir and running
patch -p0 < VotePlugin-extras.patch
Some comments:
- Placing the votes in a pub dir allows them to be read by anyone, which in turn allows them to decypher who voted for what.
- Placing the votes in a pub dir allows anyone to attach a file that contains their set of votes
- The
vote
binary doesn't initialize TWiki properly for version 4.0. This makes it fail the allowview test on closed topics. Perhaps the vote binary should instead be implemented as a rest verb, although I can't find any information about that other than the little bit at TWikiScripts .
I think the votes should be placed somewhere in the data dir, in a non-topic. The
PollPlugin puts the votes in the same topic, which might or might not be a good idea.
--
WoutMertens - 14 Dec 2006
On storing plugin specific data see
TWikiPlugins
This plugin is marked as
PleaseFeelFreeToModify, so please feel free to create a new package. See
ReadmeFirst and
PluginsInSubversion.
--
PeterThoeny - 14 Dec 2006
Thank you!! These are some changes we've been waiting for
I think it would be worthwhile to create a new package because these changes are clearly improvements to the
VotePlugin that everyone should enjoy. Some of
ArthurClemens' other requests would also be quite useful, as well as preventing the default
TWikiGuest user from casting a vote. Thanks again.
--
KeithHelfrich - 15 Dec 2006
Help, this Plugin drives me nuts. Almost nothing works
and what I'd like to know isn't documented or I don't unterstand it .
- stars is the only vote-style that works (where something happens when I selecet somthing and where I see a result)
- For every other style: I don't now how to use them corrctly and I don't see any results and I don't know how to get the results.
- eg, I just have a select box and if I select an item nothing happens.
- no submit, no refresh, no results,
here's one of my non-working examples:
%VOTE{id="FruitOfTheMonth" select1="Fruit" options1="Apple,Pineapple,Mango,Orange"}%
applying a
style="..."
parameter to code above or any other
%VOTE{}
leads to nothing...
I'd like to fix the docu and add some examples as the given instructions don't help at all - if I only unterstood how this plugin works.
The plugin topic says
PLEASE DO NOT EDIT THIS TOPIC
. So what do I have to do if i want to fix a typo or add some examples?
--
CarloSchulz - 30 May 2007
Carlo, if you've got a patch, then just attach it here. That's perfectly fine. Or mail it to me.
--
MichaelDaum - 30 May 2007
Michael, I would do so but unfortunately i cant document something thats not working (at least in my environmet)... any ideas what's wrong?
--
CarloSchulz - 30 May 2007
Yes. Working on it.
--
MichaelDaum - 30 May 2007
I've been beavering away in the background, hopefully without breaking compatibility. I have attached my work in progress for comments.
Note that the
style
parameter has been deprecated in favour of a "TWiki-standard" formatting approach.
--
CrawfordCurrie - 02 Jun 2007
Awesome, just when I needed it you come along and upload a new version
I'm taking a look at it now, so far I like the code, it's plenty cleaner than the old code.
Things I'm noticing:
- Does the new code honor topic permissions when storing/retrieving votes with a defined
saveto
value?
- I love the fact that you now allow storing the votes as meta info on a topic
- The previous code stored the date alongside the vote, even though it wasn't used. I'd like to keep that in there, for administrative use or perhaps historic graphs.
- The star field will only work on browsers that support javascript and css. Blind users have no way to know how many stars were selected.
- The "Ok" button is rather small and doesn't look like a standard button. I overlooked it at first. I would prefer it to the right of the form with the standard button look.
- When you vote a star it works correctly, but if you vote a select box nothing happens until you click "Ok". This is confusing if both types are present in the form.
- I have made it so that if there is only one item in the vote, then a button isn;t required; otherwise it is.
- If you click on a star field, and then click "Ok", your star vote is reset to 0 provided the new page view made it through before you clicked "Ok". I think the input field doesn't get the current value.
- When you try to reload a page that you just voted on, the browser complains that the page was created with POSTDATA. Would it be possible to let the plugin register the vote and immediately redirect the user to the "regular" view, or, even better, perform the vote using AJAX? See http://engadget.com for an example of such voting in the comments.
- No. Well, it would be possible, but I'm not going to do it.
- The aggregation doesn't work for "select" values but does work for "star" values. For example, if you vote twice in a default poll, with differing values for a select box and a star field, the select box will count both votes but the star field will only show one vote, your latest.
- The plugin depends on voting.js but doesn't have it in the package... * Fixed.
- Err that's it so far, nice code
Longer-standing issues:
- If the voting is open, people can vote once a day. If it's closed, people can only vote once (even though they can change their vote). Not entirely sure that always makes sense.
My patch against the previous code added support for choosing the frequency, but that was more to allow single votes. I wonder what the reasoning behind it is. I'm actually having trouble coming up with use cases for other systems than the current setup :-).
- I also noted that there's no way to show the list of voters per value or a list of all votes per voter. I'd really like to have that, for example when you're trying to find out who wants what when ordering pizza.
- Vote parameters aren't encoded. If you vote for something with a '|' in it, you'll break the data retrieval
- (Generally, I wish TWiki had a cleaner metadata storage implementation, with key-value pairs and nested structures. Ah well.)
Final comment, this plugin does almost everything better than
PollPlugin, except for the fact that
PollPlugin supports other parameter types than select boxes. I'd love to be able to easily add a comment box to polls... (for example to say that the pizza should not have onion) I know that
CommentPlugin could be made to do something like it but that's way harder to set up.
Great job so far!
--
WoutMertens - 03 Jun 2007
Thanks for the feedback, Wout, very useful. Comments embedded above. I also added Bayesian averages for rating, though it's a bit clunky to use. New rev attached.
--
CrawfordCurrie - 05 Jun 2007
Crawford, i think you accidentelly attached the zip to the dev topic so I moved it to the plugin topic. I hope thats fine with you
--
CarloSchulz - 06 Jun 2007
I couldn't move it so I attached your version to the plugin topic
--
CarloSchulz - 06 Jun 2007
Hmm, Carlo you are in the
TWikiCommunityGroup, so you should be able gto move the attachments.
--
PeterThoeny - 06 Jun 2007
I have located a bug in the latest
VotePlugin that is causing percentages to always come out zero. Here's the diff on Core.pm that fixes the problem. It also avoids recopying the keyValuesFreq hash entries. (That works because it already is a hash reference and the showSelect sub doesn't alter the contents)
verbatim7
--
MalcolmDavis - 06 Jun 2007
the
!
marks in Malcoms patch caused an error so I removed them.
VotePlugin works fine after this so incorperated the patch and attached a new version...
--
CarloSchulz - 07 Jun 2007
Sorry about that. Must have used the wrong flags for diff.
While I am writing, I do have a question. Are there plans for something like the %POLLRESULTS% tag, or is that functionality available in some way that I am missing?
I have been able to get a bit of what I want by creating %VOTE%s with formats which do not include a
$prompt
for select-type votes or either a
$small
or
$large
for star-type votes. However, besides the fact that I can only show numerical results for the star-type votes, I must also include only one key at a time to keep the submit button from being generated. So, I'm hoping for a better solution.
--
MalcolmDavis - 07 Jun 2007
Carlo, I deliberately attached the zip here; I didn't want to publish yet. BTW this plugin is maintained in subversion, so any code changes you make that aren't checked in will be lost the next time it's released. Patching is the best way to propose changes (or get checkin access; see
HowCanIContribute).
Malcolm, nice one! Use unified diff (see
man diff
) to generate patches.
I don't have any plans for a
POLLRESULTS
. It's a reasonable idea, though. I like your approach, as it leverages what's already there. Blocking the submit button would be easy enough, all we'd need to do would be to block the generation of the form and the button.
--
CrawfordCurrie - 08 Jun 2007
Sorry for that Crawford. I thought it would be a good idea as the former plugin version was broken and yours not.
Off topic: I find this subversion thingy as it appers to me contradicts the wiki nature... see my comment on
SoYouWantToBeATWikiDeveloper
--
CarloSchulz - 08 Jun 2007
There's a grey area between "managed development" where it's essential to have fine granularity histories of code changes - a job that subversion is terrific at - versus "wiki development" where you'd like anyone to be able to contribute to the code, any time. Unfortunately the risk of someone screwing up the code (maliciously or otherwise) is too high to allow unconstrained "wiki code editing", at least on this site. This is also why I generate md5 checksums.
Of course that doesn't stop you using it that way in your own environment. I've often thought that collaborative web-based code development (edit the code of the site in the browser, save it, and see what happens) would be an interesting experiment. As long as you had a way to revert to a "last known good" version, it might actually work.
--
CrawfordCurrie - 08 Jun 2007
I just released it, with a new
submit
parameter to answer Malcolm's requirement.
--
CrawfordCurrie - 08 Jun 2007
Great! Thanks!
--
MalcolmDavis - 09 Jun 2007
- When there's only one entry of a poll, it can't seem to generate a proper table markup. Without HTML codes for submit button, the table markup is just followed by ending
tag and it prevents correct rendering. I had to modify line 199 of Core.pm to set $needSubmit
always 1. Does this happen only to me?
- I got the latest version (11 Jun 2007). But it still seems to retain 'zero percentage' bug. Is it fixed?
- The default formats in VotePlugin page looks a bit outdated. No
$item
exists for select format. $myLast
should be $mylast
and $total
be $sum
on stars format.
--
KyungdahmYun - 16 Jun 2007
am i right in thinking that
TWikiGuest in an open poll counts as 1 user? If so then having
TWikiGuest not able to vote more than once pretty much means that an open poll is not much different to an closed poll...right?
--
AdamHyde - 05 Jul 2007
Ok, I did some work on the latest version and I thought I'd report in with my preliminary results. Consider this beta quality. I'll attach just the updated Core.pm since that's all that changed.
Basically I needed the plugin to perform duties as a registration form and I coded up everything I deemed necessary.
- Supports
text
, textbox
and hidden
field types. Use like the select
type, for example text1="Comments"
- The vote display code for
text
and textbox
doesn't yet allow you to list all comments and their authors. As a workaround, use the topicsave
attribute.
- Added
selectformat
, starsformat
and textformat
fields that override the default format strings for each type
- The poll results are now encoded so that "," and "|" and some others don't break the data storage
- I'm hitting the problem that if you have newlines in your textbox vote string, they will mess up the display of the votes, because I don't know how to embed newlines in a verbatim string in a twiki "|" table. Hints welcome.
- Added
enable
attribute that has %IF{}%-type syntax to optionally enable a field. This hides the prompt (and results) from view if the expression evaluates to false.
- Added
desc
attribute that can be used as a longhand (or localized) field name. Changed the default templates to have the $desc
variable instead of $key
. $desc
will be replaced with the desc
attribute or, if it's missing, the key
attribute like before.
- Added
thanks
attribute that shows up in front of the vote form if you have voted
- I'm pondering if it should implement the
$form
variable so that the user can choose how/where the form shows up with respect to the "thanks" string.
- Added
$vote
variable on select
and text/textbox
types so that you can have a %VOTE% displaying just the results of your vote in a form you like.
- Can't think of anything else right now...
--
WoutMertens - 12 Jul 2007
Micha remarked to me a while ago
"this plugin is getting to be a bit of a monster" … sounds like it just grew another arm
Wout, I'm not sure what you mean by a "registration form", but did you consider creating a new type for the
CommentPlugin? I created the
RatingContrib as a way to support at least ratings (though not selection votes) in comments, since there is a great deal of overlap between
CommentPlugin and this plugin.
I suspect you are going to have to get checkin rights to merge this large change into the released version.
--
CrawfordCurrie - 12 Jul 2007
Yes, an extra arm at least
And checkin rights would be awesome!
I did consider using the commentplugin, but that would convert structured data into a blob of text, without the individual users being able to go back later and look at what they selected or being able to change their choices. Also, the template-based setup is pretty hard to do :-(.
<forward-looking>
I think that tags, voting, TWikiForms, preferences, comments and so on should be first class TWiki citizens. What is lacking is a proper metadata infrastructure in TWiki.
The above things share a lot of common traits:
- Structured data consisting of specific types, like users, timestamps, integers, strings, booleans etc.
- Data tied to specific webs, topics or users (can be abstracted to a topic in each case)
- The data has semantics that can and should be validated
- The data shouldn't be visible text but should be presented according to its use. Therefore it should be stored as metadata
- The data should be fast to query/aggregate
Pretend that TWiki can store metadata efficiently and do instant lookups based on topic (or user topic), including searches on specific metadata keys or values. Pretend as well that the "* Set" entries in topics are also stored as metadata. All traits of a topic are query-able as metadata.
Then:
- The same mechanism that presents a voting form could present a set of user preferences.
- Topic access rights could be edited and presented consistently while being checked for common errors.
- Comments would be rendered inside the topic, but with all the features of sites like slashdot.org.
- Users could be subscribed to mail notifications of topics that they commented on.
- ...
In other words, a lot of currently-duplicated code would merge, benefiting all these things.
</forward-looking>
But maybe this should be discussed elsewhere, any idea where?
--
WoutMertens - 13 Jul 2007
I have come across two problems.
Setting the option
open="off"
inside VOTE breaks the plugin. However setting
Set VOTEPLUGIN_DEFAULTS = open="off"
has the desired effect.
Percentage is always 0% and so the bar graphs to not expand. I set line 253 as
$totalVotes{$key}, $params));
(see above ) . This initially fixed the problem and I had non-zero percentages and a bar. However on reloading the page the percentage returned to zero again.
--
PeterJones - 16 Jul 2007
I'm uses VOTE{... stars1="A" stars2="B" }, and I get see bizarre behaviour. If someone votes for 5 stars on option A, and then I vote for 3 stars on option A, it immediately sets the score to 4 as expected. But when I vote for option B, it updates option B as expected, but also uses the average score of 4 as my vote for option A, and updates the score to 4.5 stars!!! For the option you don't click on, the score becomes your vote! This makes "starN" unusable for anything other than N=1.
--
ArthurNeufeld - 08 Sep 2007
I see the problem. The code is generating the following HTML:
{input value="2" name="vote_data_A" type="hidden" ... /}
...
{small}Score: 2, My vote: 3, Total votes: 2{/small}
The hidden input 'value' should be the 'My vote' value of '3', not the current score of '2'.
--
ArthurNeufeld - 12 Sep 2007
I'm having the same problem as Peter above - all the percentages are coming out as 0, even with the most current version of the plugin.
--
MichelleHedstrom - 20 Sep 2007
The plugin seems to have an issue when using hierarchical webs - looks as the relative path to pub/_work_areas/VorePlugin is only valid for webs at top level.
--
GaryNewman - 12 Nov 2007
Fixed, -- ColasNahaboo - 14 Oct 2008
I have the same use case as
ArthurNeufeld, and almost fixed it.
I also think that submitting on each star click when you have multiple is annoying. If anyone else wants to only have the stars submit on change when there is a single item, here's the modification for core.pm line 553:
if ($submit) {
if (! $needSubmit) {
$eAttrs = {
onChange =>
"javascript: document.getElementById('$form').submit()" };
} else {
$eAttrs = { };
}
}
--
ByronIgoe - 20 Dec 2007
It's a simple fix, but it requires a change to
RatingContrib as well:
VotePlugin/core.pm line 563: pass $myLast as an additional parameter to renderRating()
RatingContrib.pm line 17: add $myVote as a new parameter to renderRating()
RatingContrib.pm line 35: change $value to $myVote
This makes the default value of the hidden parameters equal to the current users last votes. Thus you can change your vote for one item without having to re-vote for every item in the group.
--
ByronIgoe - 03 Jan 2008
I am using
VotePlugin (1.33, $Rev: 14312 (01 Jul 2007) $) on TWiki-4.2.0, Tue, 22 Jan 2008, build 16278, Plugin API version 1.2
It seems the percentage is always 0%.
--
LijiYu - 22 Feb 2008
See also the
GenericVote, a simple TWiki application based on a custom
CommentPlugin template.
--
PeterThoeny - 02 Mar 2008
I am trying to use this plugin to rate different ideas to allow engineers to influence which should be looked at, and the bayesian ranking seemed like a good way to do this. I setup 3 different pages, with different vote ids (To keep the ratings separate), but the rame stars names to allow bayesian ranking. When setting just global, they just performed like 3 different votes, and when using saveto to put the ratings all in one place, they were all being merged into a single rating, so all pages showed the same information.
I've updated my Core.pm (Patch included below) to perform bayesian filtering, but it requires that saveto is used to put all ratings that you wish to include in the filtering in one file.
--- Core.pm.orig 2008-03-04 08:41:23.000000000 +0000
+++ Core.pm 2008-03-04 08:44:36.000000000 +0000
@@ -167,22 +167,22 @@
my %totalVoters; # how many different people voted for each key
my %totalRate; # Total of all ratings for each key
my %items; # Hash of id's that have the same key
- my $voteSum = 0; # Sum of the number of votes on all rated items
- my $rateSum = 0; # Sum of all ratings of rated items
+ my %voteSum; # Sum of the number of votes on all rated items
+ my %rateSum; # Sum of all ratings of rated items
foreach my $voter (keys %votes) {
foreach my $vid (keys %{$votes{$voter}}) {
foreach my $key (keys %{$votes{$voter}{$vid}}) {
my $choice = $votes{$voter}{$vid}{$key}->[0];
my $weight = $votes{$voter}{$vid}{$key}->[1];
$keyValueFreq{$vid}{$key}{$choice} += $weight;
- $totalVotes{$key} += $weight;
+ $totalVotes{$key}{$vid} += $weight;
$items{$key}{$vid} = 1;
- $voteSum += $weight;
+ $voteSum{$key} += $weight;
if ($choice =~ /^[\d.]+$/) {
- $totalRate{$key} += $choice * $weight;
- $rateSum += $choice * $weight;
+ $totalRate{$key}{$vid} += $choice * $weight;
+ $rateSum{$key} += $choice * $weight;
}
- $totalVoters{$key}++;
+ $totalVoters{$key}{$vid}++;
}
}
}
@@ -218,22 +218,22 @@
# num_votes>0
# avg_rating: The average rating of each item (again, of those that
# have num_votes>0)
- my $avg_num_votes = $numItems ? $voteSum / $numItems : 0;
- my $avg_rating = $voteSum ? $rateSum / $voteSum : 0;
+ my $avg_num_votes = $numItems ? $voteSum{$key} / $numItems : 0;
+ my $avg_rating = $voteSum{$key} ? $rateSum{$key} / $voteSum{$key} : 0;
my $myLastVote =
$votes{getIdent($isSecret, $isOpen)}{$id}{$key}->[0] || 0;
my $mean = 0;
- if ($totalVotes{$key}) {
- $mean = $totalRate{$key} / $totalVotes{$key};
+ if ($totalVotes{$key}{$id}) {
+ $mean = $totalRate{$key}{$id} / $totalVotes{$key}{$id};
if ($bayesian) {
$mean = ($avg_num_votes * $avg_rating +
- $totalVotes{$key} * $mean) /
- ($avg_num_votes + $totalVotes{$key});
+ $totalVotes{$key}{$id} * $mean) /
+ ($avg_num_votes + $totalVotes{$key}{$id});
}
}
push(@rows, showLineOfStars(
$id, $prompt, $submit, $needSubmit, $act,
- $mean, $myLastVote, $totalVoters{$key} || 0));
+ $mean, $myLastVote, $totalVoters{$key}{$id} || 0));
}
else {
my $opts = CGI::option({selected=>'selected',
--
JeffJHarper - 04 Mar 2008
Following on from the patch above, I've made another change to Core.pm to display all ratings within a single saveto file, sorted by the mean.
I also updated the standard ouput line to show the ID and the key, so that you can distinguish between the different ratings. One thing I found useful is that you can use %TOPIC% as the id for a vote, making it possible to create templates with votes.
(The indenting in the attached patch file is somewhat broken, as I put a foreach around a large part of the code, and didn't want the patch to include all the indentation changes)
--- Core.pm.orig2 2008-03-04 09:14:38.000000000 +0000 +++ Core.pm 2008-03-04 13:24:38.000000000 +0000 @@ -169,6 +169,7 @@ my %items; # Hash of id's that have the same key my %voteSum; # Sum of the number of votes on all rated items my %rateSum; # Sum of all ratings of rated items + my %idlist; # List of Vote id's foreach my $voter (keys %votes) { foreach my $vid (keys %{$votes{$voter}}) { foreach my $key (keys %{$votes{$voter}{$vid}}) { @@ -183,6 +184,7 @@ $rateSum{$key} += $choice * $weight; } $totalVoters{$key}{$vid}++; + $idlist{$vid}++; } } } @@ -206,7 +208,16 @@ # Do we need a submit button? my $needSubmit = scalar(@prompts) > 1; + my @ids; + if ($id ne "_bay_rank") { + @ids = ( "$id", ); + } else { + @ids = keys(%idlist); + } my @rows; + my $result; +foreach my $sid (@ids) { +$id = $sid; foreach my $prompt (@prompts) { my $key = $prompt->{name}; my $row; @@ -231,7 +242,7 @@ ($avg_num_votes + $totalVotes{$key}{$id}); } } - push(@rows, showLineOfStars( + push(@rows, "<$mean>".showLineOfStars( $id, $prompt, $submit, $needSubmit, $act, $mean, $myLastVote, $totalVoters{$key}{$id} || 0)); } @@ -253,7 +264,8 @@ $totalVotes{$id}{$key}, $params)); } } - my $result = join($separator, @rows); + $result = join($separator, reverse sort(@rows)); + $result =~ s/\<[0-9]\.*[0-9]*\>//g; if ($submit) { my $hiddens = ''; while (my ($k, $v) = each %hidden) { @@ -269,6 +281,7 @@ } $result = "$result$separator"; } +} # Render tables and remove newlines # so we can embed votes in TWiki tables $result = TWiki::Func::renderText($result); @@ -542,7 +555,7 @@ $mean = sprintf("%.3g", $mean); my $row = expandFormattingTokens($prompt->{format}); - $row =~ s/\$key/$prompt->{name}/g; + $row =~ s/\$key/$form $prompt->{name}/g; $row =~ s/\$sum/$total/g; $row =~ s/\$score/$mean/g; $row =~ s/\$perc/$perc/g;
--
JeffJHarper - 04 Mar 2008
I wanted to display the percentage of users that voted in a topic, but couldn't find a "TWiki way" to do that. There is already some code available in
UserInfoPlugin to receive the (cleaned) number of TWikiUsers. So to display this relative participation in a vote, I added some code to core.pm (Version 14312, 01 Jul 2007) to get the number of TWikiUsers from UserInfoPlugin(so this change is dependent on it), to do the calculation and to add the formatting token $participation for stars items.
It's my first try in perl, so most probably not the best solution! I didn't test it that much, so take care. But it seems to work for my purpose.
In sub ShowLineOfStars, after line
my $perc = $total ? int(1000 * $mean / $total) / 10 : 0;
I added the following:
require TWiki::Plugins::UserInfoPlugin;
my $core = &TWiki::Plugins::UserInfoPlugin::getCore();
my $twusers = $core->handleNrUsers(); # get number of TWikiUsers
my $participation = $total ? int(1000 * $total / $twusers) / 10 : 0; # calc participation in percent
After line:
$row =~ s/\$mylast/$myLast/g;
I added:
$row =~ s/\$participation/$participation/g; # add FormattingToken $participation
Any comments and reviews are very welcome!
--
IngoBlickling - 10 Apr 2008
Great plugin! What would be the best way of adding a rating option to every topic of a web? Will it work just to stick the command in the template file for the left bar etc?
--
JonathanManning - 25 Apr 2008
Like others I am having trouble with the zero percent bug and bars not expanding. I think the problem is with $sum. When I included this token in my chart parameter it did not expand but just printed $sum. If this token is used to calculate the percentages and lengths of the bars it may be behaving like null or zero.
--
JimCrum - 02 May 2008
We also had the zero percent bug in the 1 Jul 2007 version of this plugin taken directly from
VotePlugin with TWiki 4.2. Further investigation showed that
MalcolmDavis's patch of 6 Jun 2007 has only been partially applied.
push(@rows, showSelect( $id, $prompt, $submit, $select, $keyValueFreq{$id}{$key}, $totalVotes{$id}{$key}, $params));
Removing the red marked text near line 253 in Core.pm fixed it.
--
UlfJastrow - 13 May 2008
TWiki version TWiki-4.1.2
VotePlugin Version: 14312 (01 Jul 2007)
"noautolink" does not work for text in starsN="text", this also makes it impossible to vote for the item.
The workaround I use for this is insert <nop> in front of wikiwords.
Every time a star is clicked the page refreshes. This is impractical when the list of items is long. What is the [OK] button at the bottom of the page for? (I expected to be able to click on stars for a number of item followed by a click on the [OK] button.)
Found the fix for this behaviour submitted by
ByronIgoe - 20 Dec 2007
Example (raw view)
---++<nop>%TOPIC%
<noautolink>
%VOTE{
id="For Implementation Test" open="off" secret="off"
stars1="DFT00008963 DynamicTranscript per slot"
stars2="DFT00009230 It should be possible when generating a service"
stars3="DFT00009270 Freeform provisioned attribute configuration"
stars4="DFT00009393 ApplicationGrammar should be DiagramGrammar"
stars5="DFT00009420 Remove all static references from code"
stars6="DFT00009427 ConcatAudio Inflection and Token features"
}%
</noautolink>
--
ThomasSchodt - 16 May 2008
$bar(n) seems to have no effect. In the following vote, am I doing the width correctly?
%VOTE{
id="FavoriteFlavors"
select1="Flavors"
options1="Vanilla,Chocolate,Strawberry"
open="off"
secret="off"
saveto="Main.FavoriteFlavors"
global="off"
submit="on"
format="<div>$bar(100) $option $perc% ($score)</div>"}%
No matter what I set the value to, the bars stay the same length.
--
DavidWolfe - 16 Jul 2008
Took the latest voteplugin.tgz and added all my changes again. Would be nice if it could go upstream. I amended the documentation this time.
https://twiki.org/p/pub/Plugins/VotePluginDev/VotePlugin.tgz
--
WoutMertens - 23 Jul 2008
Note that this patch doesn't include the voter list that was in my previous patch. Sigh. I don't feel like including it now - someone else be my guest.
--
WoutMertens - 23 Jul 2008
Some notes:
- Using
%TOPIC%
as the id for a vote is great (making it possible to create templates with votes), thanks to Jeff for recommending that!
- Removing the red marked text near line 253 in Core.pm, as suggested by UlfJastrow on
13 May 2008,
also fixed the zero percent bug in the 1 Jul 2007 version for me too. Thanks!
And some questions:
- What "magic number" does the plugin use for calculating the Bayesian average ?
- I don't quite understand how to prevent the page from refreshing every time a star is clicked, can someone please summarize how to do that ?
- When configuring only 5 stars as the max, the graphic shows 6½ stars with the last 1½ unuseable. How to make the graphic display only 5 ?
- There should likely be a distinction made between a vote of zero stars versus no vote made. I'm finding that with Bayesian turned on, items that don't have any votes at all yet still get a score of .25, for example, because the Bayesian "pulls them up". Seems that if no votes exist, the value should always remain zero.
Thanks, with just a few tweaks the plugin is working great!
--
KeithHelfrich - 21 Sep 2008
Wout, "would be nice" in this topic doesn't work for me. Please add bug reports to the Bugs web, and attach patches there, if you want anything to go upstream. Keith, what you describe about the width is probably a result of your CSS. There are known problems in the CSS used by
NatSkin, for example. Your point about zero stars is a good one; please raise a bug report. I can't remember how the Bayesian computation is done; suggest you read the code (I would have to).
--
CrawfordCurrie - 22 Sep 2008
I've found a new bug which actually prevents votes from being counted:
Bugs:Item6020
--
KeithHelfrich - 24 Sep 2008
Does anyone know how to fix
Bugs:Item6020 ? I'm finding the plugin to be unuseable, as it is constantly necessary to manipulate the results to add missing newline characters..
--
KeithHelfrich - 05 Oct 2008
Mmm I stumbled on the bug that Gary reported here one year ago but I guess wasnt adressed because of no proper bug report. Here it is, will provide a fix shortly
http://develop.twiki.org/~twiki4/cgi-bin/view/Bugs/Item6070
- Fixed as SVN commits 17635 & 17636
--
ColasNahaboo - 14 Oct 2008
Bugs:Item6020 fixed, commited, attached...
--
ColasNahaboo - 14 Oct 2008
Thanks, Colas.
--
MichaelDaum - 15 Oct 2008
Bugs:Item6125 on the incorrect month issue and
Bugs:Item6127 on total votes counting issue have been filed.
--
KyungdahmYun - 18 Nov 2008
This plugin fails with sub-webs.
--
PeterThoeny - 2009-05-16
I just installed Plugin Rev 19292 (2010-07-31) and got the old zero-percentage bug back. As I mentioned on 13 May 2008 (see comment from me above) one has to remove a wrong
{$id}
. The line in Core.pm is 270 in this revision.
--
UlfJastrow - 2011-03-01
Thanks Ulf, I fixed and updated the plugin. Could you verify that it works now properly?
--
PeterThoeny - 2011-03-02
Did an update via configure and the new version works. Thank you.
--
UlfJastrow - 2011-03-15
Thanks Ulf, the plugin is marked as TWiki-5.0 compatible.
--
PeterThoeny - 2011-03-16
I would like to have a mouseover effect. For example for the following when the mouse is over Documentation,
SubjectMatter or Completeness it should show a text box for each with a description. Also similarly when the cursor is over each star. How can I do this?
%VOTE{id="Review" stars1="Documentation" stars2="SubjectMatter" stars3="Completeness"}%
--
RonMascarenhas - 2011-10-31
The
VotePlugin needs to be enhanced. You could use jQuery, which supports mouse over popups; TWiki standardized on the
JQueryPlugin, so it is safe to use.
--
PeterThoeny - 2011-11-01
It should me mentioned that the select names cannot include commas.
--
AriTrachtenberg - 2012-11-27