diff options
Diffstat (limited to 'IkiWiki/Plugin/userlist.pm')
-rw-r--r-- | IkiWiki/Plugin/userlist.pm | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/userlist.pm b/IkiWiki/Plugin/userlist.pm new file mode 100644 index 000000000..f3e5cd462 --- /dev/null +++ b/IkiWiki/Plugin/userlist.pm @@ -0,0 +1,73 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::userlist; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "userlist", call => \&getsetup); + hook(type => "sessioncgi", id => "userlist", call => \&sessioncgi); + hook(type => "formbuilder_setup", id => "userlist", + call => \&formbuilder_setup); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 0, + section => "web", + }, +} + +sub sessioncgi ($$) { + my $cgi=shift; + my $session=shift; + + if ($cgi->param("do") eq "userlist") { + showuserlist($cgi, $session); + exit; + } +} + +sub formbuilder_setup (@) { + my %params=@_; + + my $form=$params{form}; + if ($form->title eq "preferences" && + IkiWiki::is_admin($params{session}->param("name"))) { + push @{$params{buttons}}, "Users"; + if ($form->submitted && $form->submitted eq "Users") { + showuserlist($params{cgi}, $params{session}); + exit; + } + } +} + +sub showuserlist ($$) { + my $q=shift; + my $session=shift; + + IkiWiki::needsignin($q, $session); + if (! defined $session->param("name") || + ! IkiWiki::is_admin($session->param("name"))) { + error(gettext("you are not logged in as an admin")); + } + + my $h="<table border=\"1\">\n"; + $h.="<tr><th>".gettext("login")."</th><th>".gettext("email")."</th></tr>\n"; + my $info=IkiWiki::userinfo_retrieve(); + if (ref $info) { + foreach my $user (sort { $info->{$a}->{regdate} <=> $info->{$b}->{regdate} } keys %$info) { + my %i=%{$info->{$user}}; + $h.="<tr><td>$user</td><td>".(defined $i{email} ? $i{email} : "")."</tr>\n"; + } + } + $h.="</table>\n"; + + IkiWiki::printheader($session); + print IkiWiki::cgitemplate(undef, gettext("Users"), $h); +} + +1 |