# This untaint is safe because we check file_pruned and
# wiki_file_regexp.
my ($page)=$form->field('page')=~/$config{wiki_file_regexp}/;
+ if (! defined $page) {
+ error(gettext("bad page name"));
+ }
$page=possibly_foolish_untaint($page);
my $absolute=($page =~ s#^/+##); # absolute name used to force location
if (! defined $page || ! length $page ||
error(gettext("bad page name"));
}
- my $baseurl = urlto($page, undef);
+ my $baseurl = urlto($page);
my $from;
if (defined $form->field('from')) {
# favor the type of linking page
$type=pagetype($pagesources{$from});
}
- $type=$config{default_pageext} unless defined $type;
+ $type=$config{default_pageext}
+ if ! defined $type || $type=~/^_/; # not internal type
$file=newpagefile($page, $type);
if (! $form->submitted) {
$form->field(name => "rcsinfo", value => "", force => 1);
my $previewing=0;
if ($form->submitted eq "Cancel") {
if ($form->field("do") eq "create" && defined $from) {
- redirect($q, urlto($from, undef));
+ redirect($q, urlto($from));
}
elsif ($form->field("do") eq "create") {
redirect($q, baseurl(undef));
}
else {
- redirect($q, urlto($page, undef));
+ redirect($q, $baseurl);
}
exit;
}
$absolute ||
$form->submitted) {
@page_locs=$best_loc=$page;
+ unshift @page_locs, lc($page)
+ if ! $form->submitted && lc($page) ne $page;
}
else {
my $dir=$from."/";
$best_loc=$dir.$page;
}
+ my $mixedcase=lc($page) ne $page;
+
+ push @page_locs, $dir.lc($page) if $mixedcase;
push @page_locs, $dir.$page;
- push @page_locs, "$from/$page";
+ push @page_locs, $from."/".lc($page) if $mixedcase;
+ push @page_locs, $from."/".$page;
while (length $dir) {
$dir=~s![^/]+/+$!!;
+ push @page_locs, $dir.lc($page) if $mixedcase;
push @page_locs, $dir.$page;
}
-
+
my $userpage=IkiWiki::userpage($page);
push @page_locs, $userpage
if ! grep { $_ eq $userpage } @page_locs;
@page_locs=$page;
}
else {
- redirect($q, urlto($page, undef));
+ redirect($q, $baseurl);
exit;
}
}
value => $best_loc);
$form->field(name => "type", type => 'select',
options => \@page_types);
- $form->title(sprintf(gettext("creating %s"), pagetitle($page)));
+ $form->title(sprintf(gettext("creating %s"), pagetitle(basename($page))));
}
elsif ($form->field("do") eq "edit") {
$form->tmpl_param("page_select", 0);
$form->field(name => "page", type => 'hidden');
$form->field(name => "type", type => 'hidden');
- $form->title(sprintf(gettext("editing %s"), pagetitle($page)));
+ $form->title(sprintf(gettext("editing %s"), pagetitle(basename($page))));
}
- showform($form, \@buttons, $session, $q,
- forcebaseurl => $baseurl, page => $page);
+ showform($form, \@buttons, $session, $q, page => $page);
}
else {
# save page
$form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page));
showform($form, \@buttons, $session, $q,
- forcebaseurl => $baseurl, page => $page);
+ page => $page);
exit;
}
elsif ($form->field("do") eq "create" && $exists) {
"\n\n\n".$form->field("editcontent"),
force => 1);
showform($form, \@buttons, $session, $q,
- forcebaseurl => $baseurl, page => $page);
+ page => $page);
exit;
}
$form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page));
showform($form, \@buttons, $session, $q,
- forcebaseurl => $baseurl, page => $page);
+ page => $page);
exit;
}
$form->field(name => "type", type => 'hidden');
$form->title(sprintf(gettext("editing %s"), $page));
showform($form, \@buttons, $session, $q,
- forcebaseurl => $baseurl, page => $page);
+ page => $page);
}
else {
# The trailing question mark tries to avoid broken
# caches and get the most recent version of the page.
- redirect($q, urlto($page, undef)."?updated");
+ redirect($q, $baseurl."?updated");
}
}