Beim Laden von Entwürfen nicht restore_form() benutzen, weil restore_form() erwartet...
[kivitendo-erp.git] / bin / mozilla / drafts.pl
index 3255d68..b575715 100644 (file)
@@ -7,6 +7,8 @@
 #
 #======================================================================
 
+use YAML;
+
 use SL::Drafts;
 
 require "bin/mozilla/common.pl";
@@ -16,6 +18,8 @@ sub save_draft {
 
   if (!$form->{draft_id} && !$form->{draft_description}) {
     restore_form($form->{SAVED_FORM}, 1) if ($form->{SAVED_FORM});
+    delete($form->{SAVED_FORM});
+    $form->{remove_draft} = 1;
     $form->{SAVED_FORM} = save_form();
 
     $form->header();
@@ -82,10 +86,11 @@ sub dont_load_draft {
   my $draft_nextsub = $form->{draft_nextsub};
   $draft_nextsub = "add" unless ($form->{draft_nextsub});
   restore_form($form->{SAVED_FORM}, 1);
+  delete($form->{SAVED_FORM});
   delete($form->{action});
   $form->{DONT_LOAD_DRAFT} = 1;
 
-  &{ $draft_nextsub }();
+  call_sub($draft_nextsub);
 
   $lxdebug->leave_sub();
 }
@@ -95,9 +100,11 @@ sub load_draft {
 
   my ($old_form, $id, $description) = Drafts->load(\%myconfig, $form, $form->{id});
   if ($old_form) {
-    restore_form($old_form, 1);
+    $old_form = YAML::Load($old_form);
+    @{$form}{keys %{ $old_form } } = @{$old_form}{keys %{ $old_form } };
     $form->{draft_id} = $id;
     $form->{draft_description} = $description;
+    $form->{remove_draft} = 'checked';
   }
 
   update();
@@ -105,4 +112,32 @@ sub load_draft {
   $lxdebug->leave_sub();
 }
 
+sub delete_drafts {
+  $lxdebug->enter_sub();
+
+  my @ids;
+  foreach (keys(%{$form})) {
+    push(@ids, $1) if (/^checked_(.*)/ && $form->{$_});
+  }
+  Drafts->remove(\%myconfig, $form, @ids) if (@ids);
+  restore_form($form->{SAVED_FORM}, 1);
+  delete($form->{SAVED_FORM});
+
+  add();
+
+  $lxdebug->leave_sub();
+}
+
+sub draft_action_dispatcher {
+  $lxdebug->enter_sub();
+
+  if ($form->{draft_action} eq $locale->text("Skip")) {
+    dont_load_draft();
+  } elsif ($form->{draft_action} eq $locale->text("Delete drafts")) {
+    delete_drafts();
+  }
+
+  $lxdebug->leave_sub();
+}
+
 1;