use SL::Template;
use SL::User;
use Template;
-use List::Util qw(max min sum);
+use List::Util qw(first max min sum);
my $standard_dbh;
}
-sub quote_html {
- $main::lxdebug->enter_sub(2);
-
- my ($self, $str) = @_;
-
- my %replace =
- ('order' => ['&', '"', '<', '>'],
- '<' => '<',
- '>' => '>',
- '"' => '"',
- '&' => '&',
- );
-
- map({ $str =~ s/$_/$replace{$_}/g; } @{ $replace{"order"} });
-
- $main::lxdebug->leave_sub(2);
-
- return $str;
-}
-
-sub unquote_html {
- $main::lxdebug->enter_sub(2);
-
- my ($self, $str) = @_;
-
- my %replace =
- ('ä' => 'ä',
- 'ö' => 'ö',
- 'ü' => 'ü',
- 'Ä' => 'Ä',
- 'Ö' => 'Ö',
- 'Ü' => 'Ü',
- 'ß' => 'ß',
- '>' => '>',
- '<' => '<',
- '"' => '"',
- );
-
- map { $str =~ s/\Q$_\E/$replace{$_}/g; } keys %replace;
- $str =~ s/\&/\&/g;
-
- $main::lxdebug->leave_sub(2);
-
- return $str;
-}
-
-
sub hide_form {
my $self = shift;
my ($self, $name, $msg) = @_;
my $curr = $self;
- foreach my $part (split '.', $name) {
+ foreach my $part (split /\./, $name) {
if (!$curr->{$part} || ($curr->{$part} =~ /^\s*$/)) {
$self->error($msg);
}
$main::lxdebug->leave_sub();
}
+sub create_http_response {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my %params = @_;
+
+ my $cgi = $main::cgi;
+ $cgi ||= CGI->new('');
+
+ my $base_path;
+
+ if ($ENV{HTTP_X_FORWARDED_FOR}) {
+ $base_path = $ENV{HTTP_REFERER};
+ $base_path =~ s|^.*?://.*?/|/|;
+ } else {
+ $base_path = $ENV{REQUEST_URI};
+ }
+ $base_path =~ s|[^/]+$||;
+ $base_path =~ s|/$||;
+
+ my $session_cookie;
+ if (defined $main::auth) {
+ my $session_cookie_value = $main::auth->get_session_id();
+ $session_cookie_value ||= 'NO_SESSION';
+
+ $session_cookie = $cgi->cookie('-name' => $main::auth->get_session_cookie_name(),
+ '-value' => $session_cookie_value,
+ '-path' => $base_path);
+ }
+
+ my %cgi_params = ('-type' => $params{content_type});
+ $cgi_params{'-charset'} = $params{charset} if ($parmas{charset});
+
+ my $output = $cgi->header('-cookie' => $session_cookie,
+ %cgi_params);
+
+ $main::lxdebug->leave_sub();
+
+ return $output;
+}
+
+
sub header {
$main::lxdebug->enter_sub();
return;
}
- my $cgi = $main::cgi;
- $cgi ||= CGI->new('');
-
my ($stylesheet, $favicon);
if ($ENV{HTTP_USER_AGENT}) {
$ajax .= $item->show_javascript();
}
- my $base_path;
-
- if ($ENV{HTTP_X_FORWARDED_FOR}) {
- $base_path = $ENV{HTTP_REFERER};
- $base_path =~ s|^.*?://.*?/|/|;
- } else {
- $base_path = $ENV{REQUEST_URI};
- }
- $base_path =~ s|[^/]+$||;
- $base_path =~ s|/$||;
-
- my $session_cookie;
- if (defined $main::auth) {
- my $session_cookie_value = $main::auth->get_session_id();
- $session_cookie_value ||= 'NO_SESSION';
-
- $session_cookie = $cgi->cookie('-name' => $main::auth->get_session_cookie_name(),
- '-value' => $session_cookie_value,
- '-path' => $base_path);
- }
-
- print $cgi->header('-type' => 'text/html',
- '-charset' => $db_charset,
- '-cookie' => $session_cookie);
+ print $self->create_http_response('content_type' => 'text/html',
+ 'charset' => $db_charset,);
print qq|${doctype}<html>
<head>
<title>$self->{titlebar}</title>
}
sub show_generic_error {
- my ($self, $error, $title, $action) = @_;
+ my ($self, $error, %params) = @_;
my $add_params = {
- 'title_error' => $title,
+ 'title_error' => $params{title},
'label_error' => $error,
};
- my @vars;
- if ($action) {
- map({ delete($self->{$_}); } qw(action));
- map({ push(@vars, { "name" => $_, "value" => $self->{$_} })
- if (!ref($self->{$_})); }
- keys(%{$self}));
- $add_params->{"SHOW_BUTTON"} = 1;
- $add_params->{"BUTTON_LABEL"} = $action;
+ if ($params{action}) {
+ my @vars;
+
+ map { delete($self->{$_}); } qw(action);
+ map { push @vars, { "name" => $_, "value" => $self->{$_} } if (!ref($self->{$_})); } keys %{ $self };
+
+ $add_params->{SHOW_BUTTON} = 1;
+ $add_params->{BUTTON_LABEL} = $params{label} || $params{action};
+ $add_params->{VARIABLES} = \@vars;
+
+ } elsif ($params{back_button}) {
+ $add_params->{SHOW_BACK_BUTTON} = 1;
}
- $add_params->{"VARIABLES"} = \@vars;
$self->{title} = $title if ($title);
$formname ||= $self->{formname};
my %formname_translations = (
- bin_list => $main::locale->text('Bin List'),
- credit_note => $main::locale->text('Credit Note'),
- invoice => $main::locale->text('Invoice'),
- packing_list => $main::locale->text('Packing List'),
- pick_list => $main::locale->text('Pick List'),
- proforma => $main::locale->text('Proforma Invoice'),
- purchase_order => $main::locale->text('Purchase Order'),
- request_quotation => $main::locale->text('RFQ'),
- sales_order => $main::locale->text('Confirmation'),
- sales_quotation => $main::locale->text('Quotation'),
- storno_invoice => $main::locale->text('Storno Invoice'),
- storno_packing_list => $main::locale->text('Storno Packing List'),
+ bin_list => $main::locale->text('Bin List'),
+ credit_note => $main::locale->text('Credit Note'),
+ invoice => $main::locale->text('Invoice'),
+ packing_list => $main::locale->text('Packing List'),
+ pick_list => $main::locale->text('Pick List'),
+ proforma => $main::locale->text('Proforma Invoice'),
+ purchase_order => $main::locale->text('Purchase Order'),
+ request_quotation => $main::locale->text('RFQ'),
+ sales_order => $main::locale->text('Confirmation'),
+ sales_quotation => $main::locale->text('Quotation'),
+ storno_invoice => $main::locale->text('Storno Invoice'),
+ storno_packing_list => $main::locale->text('Storno Packing List'),
+ sales_delivery_order => $main::locale->text('Delivery Order'),
+ purchase_delivery_order => $main::locale->text('Delivery Order'),
);
return $formname_translations{$formname}
}
+sub get_number_prefix_for_type {
+ my ($self) = @_;
+
+ my $prefix =
+ (first { $self->{type} eq $_ } qw(invoice credit_note)) ? 'inv'
+ : ($self->{type} =~ /_quotation$/) ? 'quo'
+ : ($self->{type} =~ /_delivery_order$/) ? 'do'
+ : 'ord';
+
+ return $prefix;
+}
+
+sub get_extension_for_format {
+ my ($self) = @_;
+
+ my $extension = $self->{format} =~ /pdf/i ? ".pdf"
+ : $self->{format} =~ /postscript/i ? ".ps"
+ : $self->{format} =~ /opendocument/i ? ".odt"
+ : $self->{format} =~ /html/i ? ".html"
+ : "";
+
+ return $extension;
+}
+
sub generate_attachment_filename {
my ($self) = @_;
- my $attachment_filename = $self->unquote_html($self->get_formname_translation());
- my $prefix =
- (grep { $self->{"type"} eq $_ } qw(invoice credit_note)) ? "inv"
- : ($self->{"type"} =~ /_quotation$/) ? "quo"
- : "ord";
+ my $attachment_filename = $main::locale->unquote_special_chars('HTML', $self->get_formname_translation());
+ my $prefix = $self->get_number_prefix_for_type();
if ($attachment_filename && $self->{"${prefix}number"}) {
- $attachment_filename .= "_" . $self->{"${prefix}number"}
- . ( $self->{format} =~ /pdf/i ? ".pdf"
- : $self->{format} =~ /postscript/i ? ".ps"
- : $self->{format} =~ /opendocument/i ? ".odt"
- : $self->{format} =~ /html/i ? ".html"
- : "");
- $attachment_filename =~ s/ /_/g;
- my %umlaute = ( "ä" => "ae", "ö" => "oe", "ü" => "ue",
- "Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue", "ß" => "ss");
- map { $attachment_filename =~ s/$_/$umlaute{$_}/g } keys %umlaute;
+ $attachment_filename .= "_" . $self->{"${prefix}number"} . $self->get_extension_for_format();
+ $attachment_filename = $main::locale->quote_special_chars('filenames', $attachment_filename);
+ $attachment_filename =~ s|[\s/\\]+|_|g;
} else {
$attachment_filename = "";
}
return $attachment_filename;
}
+sub generate_email_subject {
+ my ($self) = @_;
+
+ my $subject = $main::locale->unquote_special_chars('HTML', $self->get_formname_translation());
+ my $prefix = $self->get_number_prefix_for_type();
+
+ if ($subject && $self->{"${prefix}number"}) {
+ $subject .= " " . $self->{"${prefix}number"}
+ }
+
+ return $subject;
+}
+
sub cleanup {
$main::lxdebug->enter_sub();
my ($exchangerate) = selectrow_query($self, $dbh, $query, $currency, $transdate);
- $exchangerate = 1 if ($exchangerate eq "");
-
$main::lxdebug->leave_sub();
return $exchangerate;
$main::lxdebug->leave_sub();
}
+sub backup_vars {
+ $main::lxdebug->enter_sub();
+ my $self = shift;
+ my @vars = @_;
+
+ map { $self->{_VAR_BACKUP}->{$_} = $self->{$_} if $self->{$_} } @vars;
+
+ $main::lxdebug->leave_sub();
+}
+
+sub restore_vars {
+ $main::lxdebug->enter_sub();
+
+ my $self = shift;
+ my @vars = @_;
+
+ map { $self->{$_} = $self->{_VAR_BACKUP}->{$_} if $self->{_VAR_BACKUP}->{$_} } @vars;
+
+ $main::lxdebug->leave_sub();
+}
+
1;