From: Julien Moutinho Date: Thu, 15 May 2014 12:54:07 +0000 (+0200) Subject: Modification : user best page. X-Git-Url: http://git.cyclocoop.org/?p=ikiwiki%2Fpoll.git;a=commitdiff_plain;h=e88b4e7fd0b30120941d04dd97c5616e842ce272 Modification : user best page. --- diff --git a/poll.pm b/poll.pm index f9fc878..449e438 100644 --- a/poll.pm +++ b/poll.pm @@ -40,36 +40,40 @@ my $params_re }x; sub scan (@) { my %params = @_; - my $page = $params{page}; my $content = $params{content}; my $prefix = $config{prefix_directives} ? "!poll" : "poll"; - my $type = IkiWiki::pagetype($pagesources{$page}); + my $type = IkiWiki::pagetype($pagesources{$params{page}}); if (defined $type and $type eq "mdwn") { my %polls = (); while ($content =~ m{(\\?)\[\[\Q$prefix\E(\s+id="([^"]*)")?\s+($params_re)\s*\]\]}gs) { my ($escape, $poll, $directive) = ($1, $3, $4); next if $escape; $poll = '' unless defined $poll; - error("poll id=`$poll' must match (|[a-z][a-z0-9_-]*) on page=`$page'") + error("poll id=`$poll' must match (|[a-z][a-z0-9_-]*) on page=`$params{page}'") unless $poll =~ m/^(|[a-z][a-z0-9_-]*)$/; my %poll = (); + my $userdir = defined $config{userdir} ? $config{userdir}.'/' : ''; while ($directive =~ m/(^|\s+)(\d+)(="([^"]*)")?\s+"?([^"]*)"?/gs) { my ($unknown_votes, $known_votes, $choice) = ($2, $4, $5); - my @known_votes = defined $known_votes ? split(/\s+/, $known_votes) : (); - $poll{$choice} = - { unknown_votes => $unknown_votes - , known_votes => \@known_votes - }; + my @known_votes = defined $known_votes ? grep {length $_ > 0} (split(/\s+/, $known_votes)) : (); + $poll{$choice} = + { unknown_votes => $unknown_votes + , known_votes => \@known_votes + }; foreach my $user (@known_votes) { - my $userpage = linkpage(($config{userdir}?$config{userdir}.'/':'').$user); - add_link($page, $userpage); + my $userpage_best = bestlink($params{page}, $user); + $userpage_best = (length $userpage_best > 0 ? $userpage_best : bestlink($userdir, $user)); + $userpage_best = (length $userpage_best > 0 ? $userpage_best : ($user =~ m{/} ? '/' : $userdir).$user); + debug("user=$user"); + debug("userpage_best=$userpage_best"); + add_link($params{page}, $userpage_best); } } - error("poll id=`$poll' already exists on page=`$page'") + error("poll id=`$poll' already exists on page=`$params{page}'") if exists $polls{$poll}; $polls{$poll} = \%poll; } - $IkiWiki::pagestate{$page}{poll} = \%polls; + $IkiWiki::pagestate{$params{page}}{poll} = \%polls; } } sub preprocess (@) { @@ -94,7 +98,7 @@ sub preprocess (@) { my $known_votes = shift; next unless $unknown_votes =~ /^\d+$/; - my @users = $known_votes ? split(/\s+/, $known_votes) : (); + my @users = $known_votes ? grep {length $_ > 0} (split(/\s+/, $known_votes)) : (); my $choice = shift; shift; my $tot = ($unknown_votes + @users); @@ -108,6 +112,7 @@ sub preprocess (@) { } use URI::Escape; my $uri_page = URI::Escape::uri_escape_utf8($params{page}, '^A-Za-z0-9\-\._~/'); + my $userdir = defined $config{userdir} ? $config{userdir}.'/' : ''; my $ret=""; foreach my $choice (@choices) { if ($open && exists $config{cgiurl}) { @@ -123,8 +128,17 @@ sub preprocess (@) { if $showpercent; if (@{$choices{$choice}{users}} > 0) { $votes .= " : ".join(', ', map { - my $userpage = linkpage(($config{userdir}?$config{userdir}.'/':'').$_); - htmllink($params{page}, $params{destpage}, $userpage, linktext => pagetitle($_)) + my $user = $_; + #my $userpage = linkpage(($config{userdir}?$config{userdir}.'/':'').$_); + #htmllink($params{page}, $params{destpage}, $userpage, linktext => pagetitle($_)) + my $userpage_best = bestlink($userdir, $user); + $userpage_best = (length $userpage_best > 0 ? $userpage_best : bestlink($userdir, $user)); + $userpage_best = (length $userpage_best > 0 ? $userpage_best : ($user =~ m{/} ? '/' : $userdir).$user); + htmllink + ( $params{page} + , $params{destpage} + , $userpage_best + , noimageinline => 1 ) } @{$choices{$choice}{users}}); $votes .= " + ".$choices{$choice}{unknown_votes}." " . ($choices{$choice}{unknown_votes} > 1 ? gettext("unknowns") : gettext("unknown")) @@ -214,7 +228,8 @@ sub sessioncgi ($$) { my $user = $session->param("name"); my %users; foreach (split(/\s+/, $known_votes)) { - $users{$_} = 1; + $users{$_} = 1 + if length $_ > 0; } if ($action eq 'add') { if (defined $user) {