]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/CGI.pm
* Add a separate pass to find page links, and only render each page once,
[ikiwiki.git] / IkiWiki / CGI.pm
index 53eda2158ad0958c97c3fad511ef9b1a60380a23..8b01ca3f89ab004a81d04d4066d081c3d3baea65 100644 (file)
@@ -83,12 +83,16 @@ sub cgi_recentchanges ($) { #{{{
        foreach my $change (@$changelog) {
                $change->{when} = concise(ago($change->{when}));
                $change->{user} = htmllink("", "", escapeHTML($change->{user}), 1);
+
+               my $is_excess = exists $change->{pages}[10]; # limit pages to first 10
+               delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
                $change->{pages} = [
                        map {
                                $_->{link} = htmllink("", "", $_->{page}, 1);
                                $_;
                        } @{$change->{pages}}
                ];
+               push @{$change->{pages}}, { link => '...' } if $is_excess;
        }
 
        my $template=template("recentchanges.tmpl"); 
@@ -310,9 +314,11 @@ sub cgi_prefs ($$) { #{{{
                comment => "(".htmllink("", "", "PageSpec", 1).")");
        $form->field(name => "locked_pages", size => 50,
                comment => "(".htmllink("", "", "PageSpec", 1).")");
+       $form->field(name => "banned_users", size => 50);
        
        if (! is_admin($user_name)) {
                $form->field(name => "locked_pages", type => "hidden");
+               $form->field(name => "banned_users", type => "hidden");
        }
 
        if ($config{httpauth}) {
@@ -327,6 +333,10 @@ sub cgi_prefs ($$) { #{{{
                        value => userinfo_get($user_name, "subscriptions"));
                $form->field(name => "locked_pages", force => 1,
                        value => userinfo_get($user_name, "locked_pages"));
+               if (is_admin($user_name)) {
+                       $form->field(name => "banned_users", force => 1,
+                               value => join(" ", get_banned_users()));
+               }
        }
        
        decode_form_utf8($form);
@@ -346,6 +356,10 @@ sub cgi_prefs ($$) { #{{{
                                userinfo_set($user_name, $field, $form->field($field)) || error("failed to set $field");
                        }
                }
+               if (is_admin($user_name)) {
+                       set_banned_users(grep { ! is_admin($_) }
+                                       split(' ', $form->field("banned_users")));
+               }
                $form->text("Preferences saved.");
        }
        
@@ -667,7 +681,7 @@ sub cgi () { #{{{
                }
                else {
                        $session->param("name", $q->remote_user());
-                       if (!userinfo_get($session->param("name"),"regdate")) {
+                       if (! userinfo_get($session->param("name"), "regdate")) {
                                userinfo_setall($session->param("name"), {
                                        email => "",
                                        password => "",
@@ -676,6 +690,13 @@ sub cgi () { #{{{
                        }
                }
        }
+
+       if (userinfo_get($session->param("name"), "banned")) {
+               print $q->header(-status => "403 Forbidden");
+               $session->delete();
+               print "You are banned.";
+               exit;
+       }
        
        if ($do eq 'create' || $do eq 'edit') {
                cgi_editpage($q, $session);