Umstellung der Vorlagen aus templates/webpages/drafts von HTML::Template auf Template.
[kivitendo-erp.git] / bin / mozilla / drafts.pl
index 3f5e527..515a642 100644 (file)
@@ -7,6 +7,8 @@
 #
 #======================================================================
 
+use YAML;
+
 use SL::Drafts;
 
 require "bin/mozilla/common.pl";
@@ -16,18 +18,21 @@ sub save_draft {
 
   if (!$form->{draft_id} && !$form->{draft_description}) {
     restore_form($form->{SAVED_FORM}, 1) if ($form->{SAVED_FORM});
-    $form->{SAVED_FORM} = save_form();
+    delete $form->{SAVED_FORM};
+
+    $form->{SAVED_FORM}   = save_form();
+    $form->{remove_draft} = 1;
 
     $form->header();
-    print($form->parse_html_template("drafts/save_new"));
+    print($form->parse_html_template2("drafts/save_new"));
+
     return $lxdebug->leave_sub();
   }
 
-  my ($draft_id, $draft_description) =
-    ($form->{draft_id}, $form->{draft_description});
+  my ($draft_id, $draft_description) = ($form->{draft_id}, $form->{draft_description});
 
   restore_form($form->{SAVED_FORM}, 1);
-  delete($form->{SAVED_FORM});
+  delete $form->{SAVED_FORM};
 
   Drafts->save(\%myconfig, $form, $draft_id, $draft_description);
 
@@ -43,8 +48,7 @@ sub remove_draft {
 
   Drafts->remove(\%myconfig, $form, $form->{draft_id}) if ($form->{draft_id});
 
-  delete($form->{draft_id});
-  delete($form->{draft_description});
+  delete @{$form}{qw(draft_id draft_description)};
 
   $lxdebug->leave_sub();
 }
@@ -62,14 +66,14 @@ sub load_draft_maybe {
 
   $draft_nextsub = "add" unless ($draft_nextsub);
 
-  delete($form->{action});
+  delete $form->{action};
   my $saved_form = save_form();
 
   $form->header();
-  print($form->parse_html_template("drafts/load",
-                                   { "DRAFTS" => \@drafts,
-                                     "SAVED_FORM" => $saved_form,
-                                     "draft_nextsub" => $draft_nextsub }));
+  print($form->parse_html_template2("drafts/load",
+                                    { "DRAFTS" => \@drafts,
+                                      "SAVED_FORM" => $saved_form,
+                                      "draft_nextsub" => $draft_nextsub }));
 
   $lxdebug->leave_sub();
 
@@ -79,13 +83,14 @@ sub load_draft_maybe {
 sub dont_load_draft {
   $lxdebug->enter_sub();
 
-  my $draft_nextsub = $form->{draft_nextsub};
-  $draft_nextsub = "add" unless ($form->{draft_nextsub});
+  my $draft_nextsub = $form->{draft_nextsub} || "add";
+
   restore_form($form->{SAVED_FORM}, 1);
-  delete($form->{action});
+  delete $form->{SAVED_FORM};
+
   $form->{DONT_LOAD_DRAFT} = 1;
 
-  &{ $draft_nextsub }();
+  call_sub($draft_nextsub);
 
   $lxdebug->leave_sub();
 }
@@ -94,11 +99,18 @@ sub load_draft {
   $lxdebug->enter_sub();
 
   my ($old_form, $id, $description) = Drafts->load(\%myconfig, $form, $form->{id});
+
   if ($old_form) {
-    restore_form($old_form, 1);
-    $form->{draft_id} = $id;
-    $form->{draft_description} = $description;
-    $lxdebug->dump(0, "of", $old_form);
+    $old_form = YAML::Load($old_form);
+
+    my %dont_save_vars      = map { $_ => 1 } @Drafts::dont_save;
+    my @restore_vars        = grep { !$skip_vars{$_} } keys %{ $old_form };
+
+    @{$form}{@restore_vars} = @{$old_form}{@restore_vars};
+
+    $form->{draft_id}              = $id;
+    $form->{draft_description}     = $description;
+    $form->{remove_draft}          = 'checked';
   }
 
   update();
@@ -106,4 +118,34 @@ 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;