X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=poll.pm;h=411f3bd39b8979071caefd75f1b0d9d8ac6001c8;hb=7764e02283b706857fc3318af2b6d15c695de426;hp=b79fd0e0be1280712ea1fc78173c9df3ba4ce6ab;hpb=2af402570220c582546515129925f9dadcc155ec;p=ikiwiki%2Fpoll.git diff --git a/poll.pm b/poll.pm index b79fd0e..411f3bd 100644 --- a/poll.pm +++ b/poll.pm @@ -187,6 +187,7 @@ sub sessioncgi ($$) { use Data::Dumper; error("bad page name"); } + &IkiWiki::check_canedit($page, $cgi, $session); # Did they vote before? If so, let them change their vote, # and check for dups. @@ -261,19 +262,19 @@ sub sessioncgi ($$) { s{ (?\\?) \[\[\Q$prefix\E - (?:\s+id="(?[^"]*)")? - (?\s+) + (?:(?\s+)id="(?[^"]*)")? + (?\s+) (?$params_re) - (?\s*) + (?\s*) \]\] } {$id=$+{id}; $+{escape} .'[['.$prefix - .($+{id} eq ''?'':'id="'.$+{id}.'"') - .$+{space_begin} + .($+{id} eq ''?'':$+{id_space}.'id="'.$+{id}.'"') + .$+{params_space} .$edit->($+{escape}, $+{params}) - .$+{space_end} + .$+{end_space} .']]' }egsx; @@ -318,9 +319,13 @@ package IkiWiki::PageSpec; my ($page, $match, %params) = @_; my $polls = $IkiWiki::pagestate{$page}{poll}; if (defined $polls and %$polls) { - my ($match_poll, $match_user, $match_choice) = $match =~ m/^id=(.*?) user=(.*?) choice=(.*?)$/; - if (exists $polls->{$match_poll}) { - my %poll = %{$polls->{$match_poll}}; + my ($match_id, $match_user, $match_choice) = $match =~ m/^id=(.*?) user=(.*?) choice=(.*?)$/; + my $match_id_re = IkiWiki::glob2re($match_id?$match_id:'*'); + my @polls = grep {$_ =~ $match_id_re} (keys %$polls); + return IkiWiki::FailReason->new("no poll match id=`$match_id'", $page => $IkiWiki::DEPEND_CONTENT) + unless @polls > 0; + foreach my $poll (@polls) { + my %poll = %{$polls->{$poll}}; my $match_user_re = IkiWiki::glob2re($match_user?$match_user:'*'); my $match_choice_re = IkiWiki::glob2re($match_choice?$match_choice:'*'); while (my ($choice, $data) = each %poll) { @@ -340,11 +345,8 @@ package IkiWiki::PageSpec; } } } - return IkiWiki::FailReason->new("no user=`$match_user' has voted for choice=`$match_choice'", $page => $IkiWiki::DEPEND_CONTENT); - } - else { - return IkiWiki::FailReason->new("no poll id=`$match_poll'", $page => $IkiWiki::DEPEND_CONTENT); } + return IkiWiki::FailReason->new("no user=`$match_user' has voted for choice=`$match_choice'", $page => $IkiWiki::DEPEND_CONTENT); } else { return IkiWiki::FailReason->new("no poll", $page => $IkiWiki::DEPEND_CONTENT);