Ajout : supporte id= comme expression rationnelle.
authorJulien Moutinho <julm+ikiwiki+poll@autogeree.net>
Sat, 15 Mar 2014 03:36:30 +0000 (04:36 +0100)
committerJulien Moutinho <julm+ikiwiki+poll@autogeree.net>
Sat, 15 Mar 2014 03:36:30 +0000 (04:36 +0100)
poll.pm

diff --git a/poll.pm b/poll.pm
index 3d50081..411f3bd 100644 (file)
--- a/poll.pm
+++ b/poll.pm
@@ -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);