]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/CGI.pm
* The hack used to make the pagetemplate hook have access to the editpage
[ikiwiki.git] / IkiWiki / CGI.pm
index 1caea99a4e6d930705154830c2271c9fcebf11ee..d00de740a1c11554b890009c887fcbd3b7719cac 100644 (file)
@@ -168,6 +168,7 @@ sub cgi_postsignin ($$) { #{{{
                my $postsignin=CGI->new($session->param("postsignin"));
                $session->clear("postsignin");
                cgi($postsignin, $session);
+               cgi_savesession($session);
                exit;
        }
        else {
@@ -273,15 +274,8 @@ sub cgi_editpage ($$) { #{{{
        my @fields=qw(do rcsinfo subpage from page type editcontent comments);
        my @buttons=("Save Page", "Preview", "Cancel");
        
-       eval q{use CGI::FormBuilder; use CGI::FormBuilder::Template::HTML};
+       eval q{use CGI::FormBuilder};
        error($@) if $@;
-       my $renderer=CGI::FormBuilder::Template::HTML->new(
-               fields => \@fields,
-               template_params("editpage.tmpl"),
-       );
-       run_hooks(pagetemplate => sub {
-               shift->(page => "", destpage => "", template => $renderer->engine);
-       });
        my $form = CGI::FormBuilder->new(
                fields => \@fields,
                header => 1,
@@ -295,7 +289,8 @@ sub cgi_editpage ($$) { #{{{
                params => $q,
                action => $config{cgiurl},
                table => 0,
-               template => $renderer,
+               template => (-e "$config{templatedir}/editpage.tmpl" ?
+                               {template_params("editpage.tmpl")} : ""),
        );
        
        run_hooks(formbuilder_setup => sub {
@@ -523,12 +518,35 @@ sub cgi_editpage ($$) { #{{{
        }
 } #}}}
 
+sub cgi_getsession ($) { #{{{
+       my $q=shift;
+
+       eval q{use CGI::Session};
+       CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname}));
+       
+       my $oldmask=umask(077);
+       my $session = CGI::Session->new("driver:DB_File", $q,
+               { FileName => "$config{wikistatedir}/sessions.db" });
+       umask($oldmask);
+
+       return $session;
+} #}}}
+
+sub cgi_savesession ($) { #{{{
+       my $session=shift;
+
+       # Force session flush with safe umask.
+       my $oldmask=umask(077);
+       $session->flush;
+       umask($oldmask);
+}
+
 sub cgi (;$$) { #{{{
        my $q=shift;
        my $session=shift;
 
        if (! $q) {
-               eval q{use CGI; use CGI::Session};
+               eval q{use CGI};
                error($@) if $@;
        
                $q=CGI->new;
@@ -560,12 +578,7 @@ sub cgi (;$$) { #{{{
        lockwiki();
        
        if (! $session) {
-               CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname}));
-       
-               my $oldmask=umask(077);
-               $session = CGI::Session->new("driver:DB_File", $q,
-                       { FileName => "$config{wikistatedir}/sessions.db" });
-               umask($oldmask);
+               $session=cgi_getsession($q);
        }
        
        # Auth hooks can sign a user in.
@@ -595,12 +608,7 @@ sub cgi (;$$) { #{{{
                        $session->param(postsignin => $ENV{QUERY_STRING});
                }
                cgi_signin($q, $session);
-       
-               # Force session flush with safe umask.
-               my $oldmask=umask(077);
-               $session->flush;
-               umask($oldmask);
-               
+               cgi_savesession($session);
                return;
        }
        elsif (defined $session->param("postsignin")) {
@@ -611,6 +619,7 @@ sub cgi (;$$) { #{{{
                print $q->header(-status => "403 Forbidden");
                $session->delete();
                print "You are banned.";
+               cgi_savesession($session);
                exit;
        }