summaryrefslogtreecommitdiff
path: root/data-couch
diff options
context:
space:
mode:
Diffstat (limited to 'data-couch')
0 files changed, 0 insertions, 0 deletions
e", call => \&formbuilder);
  • hook(type => "sessioncgi", id => "rename", call => \&sessioncgi);
  • } # }}}
  • sub getsetup () { #{{{
  • return
  • plugin => {
  • safe => 1,
  • rebuild => 0,
  • },
  • } #}}}
  • sub check_canrename ($$$$$$) { #{{{
  • my $src=shift;
  • my $srcfile=shift;
  • my $dest=shift;
  • my $destfile=shift;
  • my $q=shift;
  • my $session=shift;
  • my $attachment=! defined pagetype($pagesources{$src});
  • # Must be a known source file.
  • if (! exists $pagesources{$src}) {
  • error(sprintf(gettext("%s does not exist"),
  • htmllink("", "", $src, noimageinline => 1)));
  • }
  • # Must exist on disk, and be a regular file.
  • if (! -e "$config{srcdir}/$srcfile") {
  • error(sprintf(gettext("%s is not in the srcdir, so it cannot be renamed"), $srcfile));
  • }
  • elsif (-l "$config{srcdir}/$srcfile" && ! -f _) {
  • error(sprintf(gettext("%s is not a file"), $srcfile));
  • }
  • # Must be editable.
  • IkiWiki::check_canedit($src, $q, $session);
  • if ($attachment) {
  • if (IkiWiki::Plugin::attachment->can("check_canattach")) {
  • IkiWiki::Plugin::attachment::check_canattach($session, $src, $srcfile);
  • }
  • else {
  • error("renaming of attachments is not allowed");
  • }
  • }
  • # Dest checks can be omitted by passing undef.
  • if (defined $dest) {
  • if ($srcfile eq $destfile) {
  • error(gettext("no change to the file name was specified"));
  • }
  • # Must be a legal filename, and not absolute.
  • if (IkiWiki::file_pruned($destfile, $config{srcdir}) ||
  • $destfile=~/^\//) {
  • error(sprintf(gettext("illegal name")));
  • }
  • # Must not be a known source file.
  • if ($src ne $dest && exists $pagesources{$dest}) {
  • error(sprintf(gettext("%s already exists"),
  • htmllink("", "", $dest, noimageinline => 1)));
  • }
  • # Must not exist on disk already.
  • if (-l "$config{srcdir}/$destfile" || -e _) {
  • error(sprintf(gettext("%s already exists on disk"), $destfile));
  • }
  • # Must be editable.
  • IkiWiki::check_canedit($dest, $q, $session);
  • if ($attachment) {
  • # Note that $srcfile is used here, not $destfile,
  • # because it wants the current file, to check it.
  • IkiWiki::Plugin::attachment::check_canattach($session, $dest, $srcfile);
  • }
  • }
  • } #}}}
  • sub rename_form ($$$) { #{{{
  • my $q=shift;
  • my $session=shift;
  • my $page=shift;
  • eval q{use CGI::FormBuilder};
  • error($@) if $@;
  • my $f = CGI::FormBuilder->new(
  • name => "rename",
  • title => sprintf(gettext("rename %s"), pagetitle($page)),
  • header => 0,
  • charset => "utf-8",
  • method => 'POST',
  • javascript => 0,
  • params => $q,
  • action => $config{cgiurl},
  • stylesheet => IkiWiki::baseurl()."style.css",
  • fields => [qw{do page new_name attachment}],
  • );
  • $f->field(name => "do", type => "hidden", value => "rename", force => 1);
  • $f->field(name => "page", type => "hidden", value => $page, force => 1);
  • $f->field(name => "new_name", value => pagetitle($page), size => 60);
  • if (!$q->param("attachment")) {
  • # insert the standard extensions
  • my @page_types;
  • if (exists $IkiWiki::hooks{htmlize}) {
  • @page_types=grep { !/^_/ }
  • keys %{$IkiWiki::hooks{htmlize}};
  • }
  • # make sure the current extension is in the list
  • my ($ext) = $pagesources{$page}=~/\.([^.]+)$/;
  • if (! $IkiWiki::hooks{htmlize}{$ext}) {
  • unshift(@page_types, $ext);
  • }
  • $f->field(name => "type", type => 'select',
  • options => \@page_types,
  • value => $ext, force => 1);
  • foreach my $p (keys %pagesources) {
  • if ($pagesources{$p}=~m/^\Q$page\E\//) {
  • $f->field(name => "subpages",
  • label => "",
  • type => "checkbox",
  • options => [ [ 1 => gettext("Also rename SubPages and attachments") ] ],
  • value => 1,
  • force => 1);
  • last;
  • }
  • }
  • }
  • $f->field(name => "attachment", type => "hidden");
  • return $f, ["Rename", "Cancel"];
  • } #}}}
  • sub rename_start ($$$$) { #{{{
  • my $q=shift;
  • my $session=shift;
  • my $attachment=shift;
  • my $page=shift;
  • check_canrename($page, $pagesources{$page}, undef, undef,
  • $q, $session);
  • # Save current form state to allow returning to it later
  • # without losing any edits.
  • # (But don't save what button was submitted, to avoid
  • # looping back to here.)
  • # Note: "_submit" is CGI::FormBuilder internals.
  • $q->param(-name => "_submit", -value => "");
  • $session->param(postrename => scalar $q->Vars);
  • IkiWiki::cgi_savesession($session);
  • if (defined $attachment) {
  • $q->param(-name => "attachment", -value => $attachment);
  • }
  • my ($f, $buttons)=rename_form($q, $session, $page);
  • IkiWiki::showform($f, $buttons, $session, $q);
  • exit 0;
  • } #}}}
  • sub postrename ($;$$$) { #{{{
  • my $session=shift;
  • my $src=shift;
  • my $dest=shift;
  • my $attachment=shift;
  • # Load saved form state and return to edit page.
  • my $postrename=CGI->new($session->param("postrename"));
  • $session->clear("postrename");
  • IkiWiki::cgi_savesession($session);
  • if (defined $dest) {
  • if (! $attachment) {
  • # They renamed the page they were editing. This requires
  • # fixups to the edit form state.
  • # Tweak the edit form to be editing the new page.
  • $postrename->param("page", $dest);
  • }
  • # Update edit form content to fix any links present
  • # on it.
  • $postrename->param("editcontent",
  • renamepage_hook($dest, $src, $dest,
  • $postrename->param("editcontent")));
  • # Get a new edit token; old was likely invalidated.
  • $postrename->param("rcsinfo",
  • IkiWiki::rcs_prepedit($pagesources{$dest}));
  • }
  • IkiWiki::cgi_editpage($postrename, $session);
  • } #}}}
  • sub formbuilder (@) { #{{{
  • my %params=@_;
  • my $form=$params{form};
  • if (defined $form->field("do") && ($form->field("do") eq "edit" ||
  • $form->field("do") eq "create")) {
  • my $q=$params{cgi};
  • my $session=$params{session};
  • if ($form->submitted eq "Rename" && $form->field("do") eq "edit") {
  • rename_start($q, $session, 0, $form->field("page"));
  • }
  • elsif ($form->submitted eq "Rename Attachment") {
  • my @selected=$q->param("attachment_select");
  • if (@selected > 1) {
  • error(gettext("Only one attachment can be renamed at a time."));
  • }
  • elsif (! @selected) {
  • error(gettext("Please select the attachment to rename."))
  • }
  • rename_start($q, $session, 1, $selected[0]);
  • }
  • }
  • } #}}}
  • my $renamesummary;
  • sub formbuilder_setup (@) { #{{{
  • my %params=@_;
  • my $form=$params{form};
  • my $q=$params{cgi};
  • if (defined $form->field("do") && ($form->field("do") eq "edit" ||
  • $form->field("do") eq "create")) {
  • # Rename button for the page, and also for attachments.