X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=poll.pm;h=411f3bd39b8979071caefd75f1b0d9d8ac6001c8;hb=7764e02283b706857fc3318af2b6d15c695de426;hp=f5bb0d10da5218a35d04d6ba945298e3302db2f2;hpb=40fe6defb88afea888bd466a0b3b32f2f52999f9;p=ikiwiki%2Fpoll.git diff --git a/poll.pm b/poll.pm index f5bb0d1..411f3bd 100644 --- a/poll.pm +++ b/poll.pm @@ -262,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; @@ -319,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) { @@ -341,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);