Correction : n’impose pas de / avant $config{userdir} .
[ikiwiki/poll.git] / poll.pm
diff --git a/poll.pm b/poll.pm
index 3d50081..f9fc878 100644 (file)
--- a/poll.pm
+++ b/poll.pm
@@ -124,7 +124,7 @@ sub preprocess (@) {
                if (@{$choices{$choice}{users}} > 0) {
                        $votes .= " : ".join(', ', map {
                                        my $userpage = linkpage(($config{userdir}?$config{userdir}.'/':'').$_);
-                                       htmllink($params{page}, $params{destpage}, '/'.$userpage, linktext => pagetitle($_))
+                                       htmllink($params{page}, $params{destpage}, $userpage, linktext => pagetitle($_))
                                 } @{$choices{$choice}{users}});
                        $votes .= " + ".$choices{$choice}{unknown_votes}." "
                         . ($choices{$choice}{unknown_votes} > 1 ? gettext("unknowns") : gettext("unknown"))
@@ -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);