diff options
author | Joey Hess <joey@kitenet.net> | 2011-06-09 10:08:02 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-06-09 10:10:27 -0400 |
commit | cf707d16541c0f65519231c1ccc9a6c3a7ed8d62 (patch) | |
tree | 01965bd0064136c28b619b64305333bf4a902ed4 /IkiWiki | |
parent | 6849c8fab595e0b2c73daf3b691531cf9089de6c (diff) | |
download | ikiwiki-cf707d16541c0f65519231c1ccc9a6c3a7ed8d62.tar ikiwiki-cf707d16541c0f65519231c1ccc9a6c3a7ed8d62.tar.gz |
userlist: New plugin, lets admins see a list of users and their info.
Diffstat (limited to 'IkiWiki')
-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 |