PDF::Table darf nicht unkonditionell eingebettet werden, solange PDF::API2 keine...
[kivitendo-erp.git] / SL / DBUpgrade2.pm
index 514448f..66ce85f 100644 (file)
@@ -1,5 +1,7 @@
 package SL::DBUpgrade2;
 
+use SL::Common;
+
 require Exporter;
 @ISA = qw(Exporter);
 
@@ -45,6 +47,8 @@ sub parse_dbupdate_controls {
       }
     }
 
+    $control->{charset} ||= Common::DEFAULT_CHARSET;
+
     _control_error($form, $file_name,
                    $locale->text("Missing 'tag' field."))
       unless ($control->{"tag"});
@@ -103,20 +107,26 @@ sub _check_for_loops {
 
   push(@path, $tag);
 
-  _control_error($form, $file_name,
-                 $main::locale->text("Dependency loop detected:") .
-                 " " . join(" -> ", @path))
-    if ($controls->{$tag}->{"loop"});
+  my $ctrl = $controls->{$tag};
 
-  $controls->{$tag}->{"loop"} = 1;
-  map({ _check_for_loops($form, $file_name, $controls, $_, @path); }
-      @{$controls->{$tag}->{"depends"}});
+  if ($ctrl->{"loop"} == 1) {
+    # Not done yet.
+    _control_error($form, $file_name,
+                   $main::locale->text("Dependency loop detected:") .
+                   " " . join(" -> ", @path))
+  } elsif ($ctrl->{"loop"} == 0) {
+    # Not checked yet.
+    $ctrl->{"loop"} = 1;
+    map({ _check_for_loops($form, $file_name, $controls, $_, @path); }
+        @{ $ctrl->{"depends"} });
+    $ctrl->{"loop"} = 2;
+  }
 }
 
 sub _control_error {
   my ($form, $file_name, $message) = @_;
 
-  my $form = $main::form;
+  $form = $main::form;
   my $locale = $main::locale;
 
   $form->error(sprintf($locale->text("Error in database control file '%s': %s"),