]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/CGI.pm
Release 3.20141016.4
[git.ikiwiki.info.git] / IkiWiki / CGI.pm
index 70e3b713473c789e3c844b6dd853b608d8f94709..9c80c05c14ad16c91ab22f9ed9afb20989117a09 100644 (file)
@@ -66,7 +66,10 @@ sub cgitemplate ($$$;@) {
        my $page="";
        if (exists $params{page}) {
                $page=delete $params{page};
-               $params{forcebaseurl}=urlabs(urlto($page), $topurl);
+               $params{forcebaseurl}=urlto($page);
+               if (! $config{html5}) {
+                       $params{forcebaseurl}=urlabs($params{forcebaseurl}, $topurl);
+               }
        }
        run_hooks(pagetemplate => sub {
                shift->(
@@ -77,12 +80,17 @@ sub cgitemplate ($$$;@) {
        });
        templateactions($template, "");
 
+       my $baseurl = baseurl();
+       if (! $config{html5}) {
+               $baseurl = urlabs($baseurl, $topurl),
+       }
+
        $template->param(
                dynamic => 1,
                title => $title,
                wikiname => $config{wikiname},
                content => $content,
-               baseurl => urlabs(baseurl(), $topurl),
+               baseurl => $baseurl,
                html5 => $config{html5},
                %params,
        );
@@ -114,7 +122,8 @@ sub decode_cgi_utf8 ($) {
        if ($] < 5.01) {
                my $cgi = shift;
                foreach my $f ($cgi->param) {
-                       $cgi->param($f, map { decode_utf8 $_ } $cgi->param($f));
+                       $cgi->param($f, map { decode_utf8 $_ }
+                               @{$cgi->param_fetch($f)});
                }
        }
 }
@@ -298,8 +307,9 @@ sub cgi_prefs ($$) {
                return;
        }
        elsif ($form->submitted eq 'Save Preferences' && $form->validate) {
-               if (defined $form->field('email')) {
-                       userinfo_set($user_name, 'email', $form->field('email')) ||
+               my $email = $form->field('email');
+               if (defined $email) {
+                       userinfo_set($user_name, 'email', $email) ||
                                error("failed to set email");
                }
 
@@ -482,6 +492,9 @@ sub cgi (;$$) {
 sub cgierror ($) {
        my $message=shift;
 
+       eval q{use HTML::Entities};
+       $message = encode_entities($message);
+
        print "Content-type: text/html\n\n";
        print cgitemplate(undef, gettext("Error"),
                "<p class=\"error\">".gettext("Error").": $message</p>");