]> sipb.mit.edu Git - ikiwiki.git/commitdiff
implemented form state saving and retrieval
authorJoey Hess <joey@kodama.kitenet.net>
Mon, 21 Jul 2008 17:23:07 +0000 (13:23 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Mon, 21 Jul 2008 17:23:07 +0000 (13:23 -0400)
This is overkill for delete, since it's only used on Cancel. But it will be
crucial for rename, so as to restore any pending edits after renaming a
page.

IkiWiki/Plugin/remove.pm

index 77ddd63ba7de731cefdef1702520c4268d3005ce..3ad90ad6d9d072db89cf4a7b4809a3de917f1ea8 100644 (file)
@@ -65,15 +65,16 @@ sub formbuilder (@) { #{{{
 
        if (defined $form->field("do") && $form->field("do") eq "edit" &&
            $form->submitted eq "Remove") {
 
        if (defined $form->field("do") && $form->field("do") eq "edit" &&
            $form->submitted eq "Remove") {
-               # When the remove button is pressed on the edit form,
-               # save the rest of the form state and generate a small
-               # remove confirmation form.
-
-               # TODO save state
-
-
                my $q=$params{cgi};
                my $session=$params{session};
                my $q=$params{cgi};
                my $session=$params{session};
+               # Save current form state to allow returning to it later
+               # without losing any edits.
+               # (But don't save what button was submitted.)
+               $q->param(-name => "_submit", -value => "");
+               $session->param(postremove => scalar $q->Vars);
+               IkiWiki::cgi_savesession($session);
+
+               # Display a small confirmation form.
                my ($f, $buttons)=confirmation_form($q, $session);
                $f->field(name => "page", value => $form->field("page"),
                        force => 1);
                my ($f, $buttons)=confirmation_form($q, $session);
                $f->field(name => "page", value => $form->field("page"),
                        force => 1);
@@ -90,7 +91,12 @@ sub sessioncgi ($$) { #{{{
                my ($form, $buttons)=confirmation_form($q, $session);
                IkiWiki::decode_form_utf8($form);
                if ($form->submitted eq 'Cancel') {
                my ($form, $buttons)=confirmation_form($q, $session);
                IkiWiki::decode_form_utf8($form);
                if ($form->submitted eq 'Cancel') {
-                       error("canceled"); # TODO load state
+                       # Load saved form state and return to edit form.
+                       my $postremove=CGI->new($session->param("postremove"));
+                       $session->clear("postremove");
+                       IkiWiki::cgi_savesession($session);
+                       IkiWiki::cgi($postremove, $session);
+                       exit 0;
                }
                elsif ($form->submitted eq 'Remove' && $form->validate) {
                        error("removal not yet implemented"); # TODO
                }
                elsif ($form->submitted eq 'Remove' && $form->validate) {
                        error("removal not yet implemented"); # TODO