Aufrufe von 'exit' durch eigene Funktion '::end_of_request()' ersetzt.
authorSven Schöling <s.schoeling@linet-services.de>
Tue, 20 Jul 2010 08:23:46 +0000 (10:23 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 20 Jul 2010 08:23:46 +0000 (10:23 +0200)
Außerdem dafür gesorgt, dass Meldungen, die per
$form->show_generic_(error|information) ausgegeben werden, nicht
doppelt angezeigt werden.

Conflicts:

bin/mozilla/io.pl
bin/mozilla/oe.pl

27 files changed:
SL/DATEV.pm
SL/Dispatcher.pm
SL/Form.pm
SL/USTVA.pm
SL/User.pm
bin/mozilla/admin.pl
bin/mozilla/am.pl
bin/mozilla/ap.pl
bin/mozilla/ar.pl
bin/mozilla/arap.pl
bin/mozilla/bp.pl
bin/mozilla/cp.pl
bin/mozilla/ct.pl
bin/mozilla/do.pl
bin/mozilla/fu.pl
bin/mozilla/ic.pl
bin/mozilla/installationcheck.pl
bin/mozilla/invoice_io.pl
bin/mozilla/io.pl
bin/mozilla/ir.pl
bin/mozilla/is.pl
bin/mozilla/licenses.pl
bin/mozilla/login.pl
bin/mozilla/oe.pl
bin/mozilla/ustva.pl
bin/mozilla/wh.pl
doc/INSTALL.fcgi

index 49e824b..eacda09 100644 (file)
@@ -405,7 +405,7 @@ sub _get_transactions {
 
       if ($ref2->{trans_id} != $trans->[0]->{trans_id}) {
         $form->error("Unbalanced ledger! old trans_id " . $trans->[0]->{trans_id} . " new trans_id " . $ref2->{trans_id} . " count $count");
-        exit 1;
+        ::end_of_request();
       }
 
       push @{ $trans }, $ref2;
index 9d968ad..532592e 100644 (file)
@@ -14,6 +14,10 @@ use Rose::DB;
 use Rose::DB::Object;
 use File::Basename;
 
+# Trailing new line is added so that Perl will not add the line
+# number 'die' was called in.
+use constant END_OF_REQUEST => "END-OF-REQUEST\n";
+
 sub pre_request_checks {
   show_error('login/auth_db_unreachable') unless $::auth->session_tables_present;
   $::auth->expire_sessions;
@@ -33,7 +37,7 @@ sub show_error {
   print $::form->parse_html_template($template);
   $::lxdebug->leave_sub;
 
-  exit;
+  ::end_of_request();
 }
 
 sub pre_startup_setup {
@@ -159,8 +163,10 @@ sub handle_request {
 
     1;
   } or do {
-    $::form->{label_error} = $::cgi->pre($EVAL_ERROR);
-    show_error('generic/error');
+    if ($EVAL_ERROR ne END_OF_REQUEST) {
+      $::form->{label_error} = $::cgi->pre($EVAL_ERROR);
+      eval { show_error('generic/error') };
+    }
   };
 
   # cleanup
@@ -181,4 +187,12 @@ sub unrequire_bin_mozilla {
   }
 }
 
+package main;
+
+use strict;
+
+sub end_of_request {
+  die SL::Dispatcher->END_OF_REQUEST;
+}
+
 1;
index c75249b..130a337 100644 (file)
@@ -455,8 +455,8 @@ sub error {
     $self->show_generic_error($msg);
 
   } else {
-
-    die "Error: $msg\n";
+    print STDERR "Error: $msg\n";
+    ::end_of_request();
   }
 
   $main::lxdebug->leave_sub();
@@ -772,7 +772,7 @@ sub _prepare_html_template {
       my $info = "Developer information: templates/webpages/${file}.html is newer than the translation file locale/${language}/all.\n" .
         "Please re-run 'locales.pl' in 'locale/${language}'.";
       print(qq|<pre>$info</pre>|);
-      die($info);
+      ::end_of_request();
     }
 
     $file = "templates/webpages/${file}.html";
@@ -781,7 +781,7 @@ sub _prepare_html_template {
     my $info = "Web page template '${file}' not found.\n" .
       "Please re-run 'locales.pl' in 'locale/${language}'.";
     print(qq|<pre>$info</pre>|);
-    die($info);
+    ::end_of_request();
   }
 
   if ($self->{"DEBUG"}) {
@@ -895,9 +895,11 @@ sub show_generic_error {
   $self->header();
   print $self->parse_html_template("generic/error", $add_params);
 
+  print STDERR "Error: $error\n";
+
   $main::lxdebug->leave_sub();
 
-  die("Error: $error\n");
+  ::end_of_request();
 }
 
 sub show_generic_information {
@@ -917,7 +919,7 @@ sub show_generic_information {
 
   $main::lxdebug->leave_sub();
 
-  die("Information: $text\n");
+  ::end_of_request();
 }
 
 # write Trigger JavaScript-Code ($qty = quantity of Triggers)
@@ -975,7 +977,7 @@ sub redirect {
   if (!$self->{callback}) {
 
     $self->info($msg);
-    exit;
+    ::end_of_request();
   }
 
 #  my ($script, $argv) = split(/\?/, $self->{callback}, 2);
index bfda202..84a8a96 100644 (file)
@@ -412,7 +412,7 @@ sub info {
     </body>
     |;
 
-    exit;
+    ::end_of_request();
 
   } else {
 
index 16ad74e..88ea5b3 100644 (file)
@@ -144,7 +144,7 @@ sub login {
 
       if ($form->{"show_dbupdate_warning"}) {
         print $form->parse_html_template("dbupgrade/warning");
-        exit(0);
+        ::end_of_request();
       }
 
       # update the tables
@@ -412,7 +412,7 @@ sub dbcreate {
 # Process a Perl script which updates the database.
 # If the script returns 1 then the update was successful.
 # Return code "2" means "needs more interaction; remove
-# users/nologin and exit".
+# users/nologin and end current request".
 # All other return codes are fatal errors.
 sub process_perl_script {
   $main::lxdebug->enter_sub();
@@ -466,10 +466,10 @@ sub process_perl_script {
     print $form->parse_html_template("dbupgrade/error",
                                      { "file"  => $filename,
                                        "error" => $@ });
-    exit(0);
+    ::end_of_request();
   } elsif (1 != $result) {
     unlink("users/nologin") if (2 == $result);
-    exit(0);
+    ::end_of_request();
   }
 
   if (ref($version_or_control) eq "HASH") {
index 8bd621c..5962e54 100755 (executable)
@@ -132,7 +132,7 @@ sub check_auth_db_and_tables {
     $form->header();
     print $form->parse_html_template('admin/check_auth_database', \%params);
 
-    exit 0;
+    ::end_of_request();
   }
 
   if (!$main::auth->check_tables()) {
@@ -140,7 +140,7 @@ sub check_auth_db_and_tables {
     $form->header();
     print $form->parse_html_template('admin/check_auth_tables', \%params);
 
-    exit 0;
+    ::end_of_request();
   }
 
   if (-f $main::memberfile) {
@@ -157,7 +157,7 @@ sub check_auth_db_and_tables {
     print $form->parse_html_template('admin/user_migration', { 'memberfile' => $main::memberfile,
                                                                'backupdir'  => $backupdir });
 
-    exit 0
+    ::end_of_request();
   }
 }
 
index a1e227f..4a78402 100644 (file)
@@ -3545,7 +3545,7 @@ sub delete_warehouse {
 
     $form->header();
     print $form->parse_html_template('am/confirm_delete_warehouse');
-    exit 0;
+    ::end_of_request();
   }
 
   if (AM->delete_warehouse(\%myconfig, $form)) {
index 91836eb..1262b49 100644 (file)
@@ -1064,7 +1064,7 @@ sub post {
   my ($vendor) = split /--/, $form->{vendor};
   if ($form->{oldvendor} ne "$vendor--$form->{vendor_id}") {
     &update;
-    exit;
+    ::end_of_request();
   }
   my ($debitaccno,    $debittaxkey)    = split /--/, $form->{AP_amountselected};
   my ($taxkey,        $NULL)           = split /--/, $form->{taxchartselected};
index b5bd9be..9fdf2bc 100644 (file)
@@ -1127,7 +1127,7 @@ sub post {
   my ($customer) = split /--/, $form->{customer};
   if ($form->{oldcustomer} ne "$customer--$form->{customer_id}") {
     update();
-    exit;
+    ::end_of_request();
   }
 
   $form->{AR}{receivables} = $form->{ARselected};
index 8c49dc2..03dd6e8 100644 (file)
@@ -108,7 +108,7 @@ sub check_name {
           $form->error($locale->text("More than one #1 found matching, please be more specific.", $locale->text(ucfirst $name)));
         } else {
           &select_name($name);
-          exit;
+          ::end_of_request();
         }
       }
 
@@ -318,7 +318,7 @@ sub check_project {
           # check form->{project_list} how many there are
           $form->{rownumber} = $i;
           &select_project($i ? undef : 1, $nextsub);
-          exit;
+          ::end_of_request();
         }
 
         if ($rows == 1) {
index 1445eba..1196763 100644 (file)
@@ -390,7 +390,7 @@ sub print {
         print $locale->text('done');
         $form->redirect($locale->text('Marked entries printed!'));
       }
-      exit;
+      ::end_of_request();
     }
   }
 
index f4a9efb..a62a9eb 100644 (file)
@@ -771,7 +771,7 @@ sub check_form {
 
   if ($form->{currency} ne $form->{oldcurrency}) {
     &update;
-    exit;
+    ::end_of_request();
   }
 
   $form->error($locale->text('Zero amount posting!')) if !$form->parse_amount(\%myconfig, $form->{amount});
index 9488ec8..10b138e 100644 (file)
@@ -574,8 +574,9 @@ sub save {
   }
   # /saving the history
   &edit;
-  exit;
+
   $main::lxdebug->leave_sub();
+  ::end_of_request();
 }
 
 sub delete {
index f7e859e..e350cb3 100644 (file)
@@ -367,7 +367,7 @@ sub update_delivery_order {
       if ($rows > 1) {
 
         select_item();
-        exit;
+        ::end_of_request();
 
       } else {
 
@@ -619,7 +619,7 @@ sub save {
   # if the name changed get new values
   if (check_name($form->{vc})) {
     update();
-    exit;
+    ::end_of_request();
   }
 
   $form->{id} = 0 if $form->{saveasnew};
@@ -647,7 +647,7 @@ sub save {
   if(!$form->{print_and_save}) {
     set_headings("edit");
     update();
-    exit;
+    ::end_of_request();
   }
   $main::lxdebug->leave_sub();
 }
@@ -690,7 +690,7 @@ sub delete_delivery_order {
     # /saving the history
 
     $form->info($locale->text('Delivery Order deleted!'));
-    exit();
+    ::end_of_request();
   }
 
   $form->error($locale->text('Cannot delete delivery order!'));
@@ -1232,7 +1232,7 @@ sub transfer_in {
       update();
       $main::lxdebug->leave_sub();
 
-      exit 0;
+      ::end_of_request();
     }
   }
 
@@ -1346,7 +1346,7 @@ sub transfer_out {
       update();
       $main::lxdebug->leave_sub();
 
-      exit 0;
+      ::end_of_request();
     }
   }
 
index 1879be0..ac9e81f 100644 (file)
@@ -118,7 +118,7 @@ sub save_follow_up {
   if ($form->{POPUP_MODE}) {
     $form->header();
     print $form->parse_html_template('fu/close_window');
-    exit 0;
+    ::end_of_request();
   }
 
   $form->{SAVED_MESSAGE} = $locale->text('Follow-Up saved.');
@@ -162,7 +162,7 @@ sub finish {
   if ($form->{POPUP_MODE}) {
     $form->header();
     print $form->parse_html_template('fu/close_window');
-    exit 0;
+    ::end_of_request();
   }
 
   $form->redirect() if ($form->{callback});
@@ -198,7 +198,7 @@ sub delete {
   if ($form->{POPUP_MODE}) {
     $form->header();
     print $form->parse_html_template('fu/close_window');
-    exit 0;
+    ::end_of_request();
   }
 
   $form->redirect() if ($form->{callback});
index ec287aa..95d72ec 100644 (file)
@@ -1723,7 +1723,7 @@ sub update {
         if ($rows > 1) {
           $form->{makemodel_rows}--;
           &select_item;
-          exit;
+          ::end_of_request();
         } else {
           map { $form->{item_list}[$i]{$_} =~ s/\"/&quot;/g }
             qw(partnumber description unit partsgroup);
index 54a9211..ce6022b 100644 (file)
@@ -85,7 +85,8 @@ sub verify_installation {
  </body>
 </html>
 |);
-  exit(0);
+
+  ::end_of_request();
 }
 
 1;
index 97d30fe..7203f92 100644 (file)
@@ -159,7 +159,7 @@ sub display_form {
   # if we have a display_form
   if ($form->{display_form}) {
     call_sub($form->{"display_form"});
-    exit;
+    ::end_of_request();
   }
 
   Common::webdav_folder($form) if ($main::webdav);
@@ -176,7 +176,7 @@ sub display_form {
   #     $form->{print_and_post} = 0;
   #
   #     &print_form($old_form);
-  #     exit;
+  #     ::end_of_request();
   #   }
   #
   #   $form->{action}   = "";
index 46b7c28..cd01926 100644 (file)
@@ -882,7 +882,7 @@ sub validate_items {
   # check if items are valid
   if ($form->{rowcount} == 1) {
     &update;
-    exit;
+    ::end_of_request();
   }
 
   for my $i (1 .. $form->{rowcount} - 1) {
@@ -1265,7 +1265,7 @@ sub print {
     &save();
     $form->{formname} = $formname;
     &edit();
-    exit;
+    ::end_of_request();
   }
 
   &print_form($old_form);
@@ -1432,7 +1432,7 @@ sub print_form {
         $form->save_history($form->dbconnect(\%myconfig));
       }
       # /saving the history
-      exit;
+      ::end_of_request();
     }
   }
 
@@ -1705,7 +1705,7 @@ sub print_form {
       }
 
       call_sub($display_form);
-      exit;
+      ::end_of_request();
     }
 
     my $msg =
@@ -1716,7 +1716,7 @@ sub print_form {
   }
   if ($form->{printing}) {
    call_sub($display_form);
-   exit;
+   ::end_of_request();
   }
 
   $main::lxdebug->leave_sub();
index 06f6d05..1119ad4 100644 (file)
@@ -468,7 +468,7 @@ sub update {
       if ($rows > 1) {
 
         &select_item;
-        exit;
+        ::end_of_request();
 
       } else {
 
@@ -664,7 +664,7 @@ sub post {
   # if the vendor changed get new values
   if (&check_name('vendor')) {
     &update;
-    exit;
+    ::end_of_request();
   }
 
   if ($myconfig{mandatory_departments} && !$form->{department_id}) {
index 3c5282c..7084d0a 100644 (file)
@@ -512,7 +512,7 @@ sub update {
       if ($rows > 1) {
 
         &select_item;
-        exit;
+        ::end_of_request();
 
       } else {
 
@@ -652,7 +652,7 @@ sub post {
   # if oldcustomer ne customer redo form
   if (&check_name('customer')) {
     &update;
-    exit;
+    ::end_of_request();
   }
 
   if ($myconfig{mandatory_departments} && !$form->{department_id}) {
index 6fe4f76..4902205 100644 (file)
@@ -611,7 +611,7 @@ sub do_search {
             . $locale->text(
                       "No licenses were found that match the search criteria.")
             . qq|</body></html>|);
-    exit(0);
+    ::end_of_request();
   }
 
   print(
index 5a5aa42..622db69 100644 (file)
@@ -57,7 +57,7 @@ sub run {
   if (SL::Auth::SESSION_EXPIRED == $session_result) {
     $form->{error_message} = $locale->text('The session is invalid or has expired.');
     login_screen();
-    exit;
+    ::end_of_request();
   }
   my $action = $form->{action};
   if (!$action && $auth->{SESSION}->{login}) {
@@ -104,7 +104,7 @@ sub login {
 
   unless ($form->{login}) {
     login_screen($locale->text('You did not enter a name!'));
-    exit;
+    ::end_of_request();
   }
 
   my $user = new User $form->{login};
@@ -112,9 +112,9 @@ sub login {
   # if we get an error back, bale out
   my $result;
   if (($result = $user->login($form)) <= -1) {
-    exit if $result == -2;
+    ::end_of_request() if $result == -2;
     login_screen($locale->text('Incorrect username or password!'));
-    exit;
+    ::end_of_request();
   }
 
   my %style_to_script_map = ( 'v3'  => 'v3',
@@ -188,7 +188,7 @@ sub show_error {
   # $form->parse_html_template('login/auth_db_unreachable');
   # $form->parse_html_template('login/authentication_pl_missing');
 
-  exit;
+  ::end_of_request();
 }
 
 1;
index f40e918..cd04c6b 100644 (file)
@@ -563,7 +563,7 @@ sub update {
       if ($rows > 1) {
 
         &select_item;
-        exit;
+        ::end_of_request();
 
       } else {
 
@@ -1010,7 +1010,7 @@ sub save_and_close {
       $form->{payment_id} = $payment_id;
     }
     &update;
-    exit;
+    ::end_of_request();
   }
 
   $form->{id} = 0 if $form->{saveasnew};
@@ -1119,7 +1119,7 @@ sub save {
       $form->{payment_id} = $payment_id;
     }
     &update;
-    exit;
+    ::end_of_request();
   }
 
   $form->{id} = 0 if $form->{saveasnew};
@@ -1180,7 +1180,7 @@ sub save {
   if(!$form->{print_and_save}) {
     delete @{$form}{ary_diff([keys %{ $form }], [qw(login stylesheet id script type cursor_fokus)])};
     edit();
-    exit;
+    ::end_of_request();
   }
   $main::lxdebug->leave_sub();
 }
@@ -1264,7 +1264,7 @@ sub delete_order_quotation {
     }
     # /saving the history
     $form->info($msg);
-    exit();
+    ::end_of_request();
   }
   $form->error($err);
 
@@ -1310,7 +1310,7 @@ sub invoice {
   if (&check_name($form->{vc})) {
     $form->{payment_id} = $payment_id if $form->{payment_id} eq "";
     &update;
-    exit;
+    ::end_of_request();
   }
 
   $form->{cp_id} *= 1;
@@ -1333,7 +1333,7 @@ sub invoice {
 
     if (!$exchangerate) {
       &backorder_exchangerate($orddate, $buysell);
-      exit;
+      ::end_of_request();
     }
   }
 
@@ -1681,7 +1681,7 @@ sub check_for_direct_delivery {
 
   $main::lxdebug->leave_sub();
 
-  exit 0;
+  ::end_of_request();
 }
 
 sub purchase_order {
index cfd78bf..945de31 100644 (file)
@@ -915,7 +915,7 @@ sub generate_ustva {
       } else {
         $form->header;
         USTVA::error( $locale->text('Wrong Period' ));
-        exit(0);
+        ::end_of_request();
       }
 
       my $tax_office           = first { $_->{name} eq $form->{elsterland} } @{ $ustva->{tax_office_information} };
@@ -983,12 +983,12 @@ sub generate_ustva {
     } elsif ( $form->{format} eq '' ){ # No format error.
       $form->header;
       USTVA::error( $locale->text('Application Error. No Format given' ) . "!");
-      exit(0);
+      ::end_of_request();
 
     } else { # All other Formats are wrong
       $form->header;
       USTVA::error( $locale->text('Application Error. Wrong Format') . ": " . $form->{format} );
-      exit(0);
+      ::end_of_request();
     }
 
 
index 89975cc..26f22ce 100644 (file)
@@ -277,7 +277,7 @@ sub transfer_parts {
 
   if (!scalar @transfers) {
     $form->show_generic_information($locale->text('Nothing has been selected for transfer.'));
-    exit 0;
+    ::end_of_request();
   }
 
   WH->transfer(@transfers);
@@ -611,7 +611,7 @@ sub remove_parts {
 
   if (!scalar @transfers) {
     $form->show_generic_information($locale->text('Nothing has been selected for removal.'));
-    exit 0;
+    ::end_of_request();
   }
 
   WH->transfer(@transfers);
index 5eb3a40..6ec640d 100644 (file)
@@ -49,6 +49,3 @@ Variante 2 startet nur einen zentralen Dispatcher und lenkt alle Scripte auf die
 
 4. TODO
 
-4.1. Fehlermeldungen, die per $form->error() ausgegeben werden, werden momentan doppelt angezeigt.
-
-4.2. "exit" sollte unter FastCGI nicht verwendet werden, startet ja den Prozess neu. Nur die Abhandlung des Requests sollte beendet werden.