fix
[ikiwiki.git] / ikiwiki
diff --git a/ikiwiki b/ikiwiki
index 81bdf85b67ba8d301ec0956ede870d4d23f83e18..f65f96b011b31dc39ef9499f8e77cf7a85adf1cf 100755 (executable)
--- a/ikiwiki
+++ b/ikiwiki
@@ -407,7 +407,7 @@ sub rcs_recentchanges ($) { #{{{
                my $div=qr/^--------------------+$/;
                my $infoline=qr/^r(\d+)\s+\|\s+([^\s]+)\s+\|\s+(\d+-\d+-\d+\s+\d+:\d+:\d+\s+[-+]?\d+).*/;
                my $state='start';
-               my ($rev, $user, $when, @pages, $message);
+               my ($rev, $user, $when, @pages, @message);
                foreach (`LANG=C svn log -v '$svn_url'`) {
                        chomp;
                        if ($state eq 'start' && /$div/) {
@@ -427,16 +427,16 @@ sub rcs_recentchanges ($) { #{{{
                        }
                        elsif ($state eq 'body' && /$div/) {
                                push @ret, { rev => $rev, user => $user,
-                                       when => $when, message => $message,
+                                       when => $when, message => [@message],
                                        pages => [@pages] } if @pages;
                                return @ret if @ret >= $num;
                                
                                $state='header';
-                               $message=$rev=$user=$when=undef;
-                               @pages=();
+                               $rev=$user=$when=undef;
+                               @pages=@message=();
                        }
                        elsif ($state eq 'body') {
-                               $message.="$_<br>\n";
+                               push @message, {line => $_},
                        }
                }
        }
@@ -658,7 +658,7 @@ EOF
        exit 0;
 } #}}}
 
-sub cgi_recentchanges () { #{{{
+sub cgi_recentchanges ($) { #{{{
        my $q=shift;
        
        my $template=HTML::Template->new(
@@ -669,7 +669,7 @@ sub cgi_recentchanges () { #{{{
                wikiname => $wikiname,
                changelog => [rcs_recentchanges(100)],
        );
-       return $template->output;
+       print $q->header, $template->output;
 } #}}}
 
 sub cgi_signin ($$) { #{{{
@@ -693,6 +693,7 @@ sub cgi_signin ($$) { #{{{
                javascript => 0,
                params => $q,
                action => $q->request_uri,
+               template => (-e "$templatedir/signin.tmpl" ? "$templatedir/signin.tmpl" : "")
        );
        
        $form->sessionid($session->id);
@@ -746,12 +747,12 @@ sub cgi_signin ($$) { #{{{
                if ($form->submitted eq 'Login') {
                        $session->param("name", $form->field("name"));
                        if (defined $form->field("do")) {
-                               $q->redirect(
+                               print $q->redirect(
                                        "$cgiurl?do=".$form->field("do").
                                        "&page=".$form->field("page"));
                        }
                        else {
-                               $q->redirect($url);
+                               print $q->redirect($url);
                        }
                }
                elsif ($form->submitted eq 'Register') {
@@ -777,23 +778,26 @@ sub cgi () { #{{{
        eval q{use CGI::Session};
        
        my $q=CGI->new;
-       # session id has to be _sessionid for CGI::FormBuilder to work.
-       # TODO: stop having the formbuilder emit cookies and change session
-       # id to something else.
-       CGI::Session->name("_sessionid");
-       my $session = CGI::Session->new(undef, $q,
-               { Directory=> "$srcdir/.ikiwiki/sessions" });
        
        my $do=$q->param('do');
        if (! defined $do || ! length $do) {
                error("\"do\" parameter missing");
        }
        
+       # This does not need a session.
        if ($do eq 'recentchanges') {
-               cgi_recentchanges();
+               cgi_recentchanges($q);
                return;
        }
        
+       # session id has to be _sessionid for CGI::FormBuilder to work.
+       # TODO: stop having the formbuilder emit cookies and change session
+       # id to something else.
+       CGI::Session->name("_sessionid");
+       my $session = CGI::Session->new(undef, $q,
+               { Directory=> "$srcdir/.ikiwiki/sessions" });
+       
+       # Everything below this point needs the user to be signed in.
        if ((! $anonok && ! defined $session->param("name")) || $do eq 'signin') {
                cgi_signin($q, $session);
                return;