package Form;
use HTML::Template;
+use SL::Menu;
sub _input_to_hash {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my $input = $_[0];
my %in = ();
$in{$name} = unescape(undef, $value);
}
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return %in;
}
sub _request_to_hash {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($input) = @_;
my ($i, $loc, $key, $val);
}
}
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return %ATTACH;
} else {
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return _input_to_hash($input);
}
}
$self->{action} = lc $self->{action};
$self->{action} =~ s/( |-|,|#)/_/g;
- $self->{version} = "2.2.0";
+ $self->{version} = "2.3.0";
$main::lxdebug->leave_sub();
}
sub escape {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($self, $str, $beenthere) = @_;
$str =~ s/([^a-zA-Z0-9_.-])/sprintf("%%%02x", ord($1))/ge;
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return $str;
}
sub unescape {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($self, $str) = @_;
$str =~ s/%([0-9a-fA-Z]{2})/pack("c",hex($1))/eg;
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return $str;
}
if ($ENV{HTTP_USER_AGENT}) {
$msg =~ s/\n/<br>/g;
-
- $self->header;
$self->show_generic_error($msg);
- die "Error: $msg\n";
-
} else {
if ($self->{error_function}) {
}
#Set Calendar
- $jsscript = "";
+ my $jsscript = "";
if ($self->{jsscript} == 1) {
$jsscript = qq|
$main::lxdebug->leave_sub();
}
-use Data::Dumper;
sub parse_html_template {
$main::lxdebug->enter_sub();
"<br><em>DEBUG INFORMATION:</em><pre>" . $additional_params->{"DEBUG"} . "</pre>";
}
+ if (%main::myconfig) {
+ map({ $additional_params->{"myconfig_${_}"} = $main::myconfig{$_}; } keys(%main::myconfig));
+ my $jsc_dateformat = $main::myconfig{"dateformat"};
+ $jsc_dateformat =~ s/d+/\%d/gi;
+ $jsc_dateformat =~ s/m+/\%m/gi;
+ $jsc_dateformat =~ s/y+/\%Y/gi;
+ $additional_params->{"myconfig_jsc_dateformat"} = $jsc_dateformat;
+ }
+
+ $additional_params->{"conf_jscalendar"} = $main::jscalendar;
+ $additional_params->{"conf_lizenzen"} = $main::lizenzen;
+ $additional_params->{"conf_latex_templates"} = $main::latex;
+ $additional_params->{"conf_opendocument_templates"} = $main::opendocument_templates;
+
+ my $menu;
+ if (-f $self->{"login"} . "_menu.ini") {
+ $menu = Menu->new($self->{"login"} . "_menu.ini");
+ } else {
+ $menu = Menu->new("menu.ini");
+ }
+ $menu->generate_acl("", $additional_params);
+
my @additional_param_names = keys(%{$additional_params});
foreach my $key ($template->param()) {
$add_params->{"title"} = $title if ($title);
$self->{"label_error"} = $error;
+ $self->header();
print($self->parse_html_template("generic/error", $add_params));
+
+ die("Error: $error\n");
+}
+
+sub show_generic_information {
+ my ($self, $error, $title) = @_;
+
+ my $add_params = {};
+ $add_params->{"title"} = $title if ($title);
+ $self->{"label_information"} = $error;
+
+ $self->header();
+ print($self->parse_html_template("generic/information", $add_params));
+
+ die("Information: $error\n");
}
# write Trigger JavaScript-Code ($qty = quantity of Triggers)
);
|;
}
- $jsscript = qq|
+ my $jsscript = qq|
<script type="text/javascript">
<!--| . join("", @triggers) . qq|//-->
</script>
return @columns;
}
-
+#
sub format_amount {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($self, $myconfig, $amount, $places, $dash) = @_;
+ my $neg = ($amount =~ s/-//);
- #Workaround for $format_amount calls without $places
- if (!defined $places) {
- (my $dec) = ($amount =~ /\.(\d+)/);
- $places = length $dec;
- }
-
- if ($places =~ /\d/) {
- $amount = $self->round_amount($amount, $places);
- }
-
- # is the amount negative
- my $negative = ($amount < 0);
- my $fillup = "";
-
- if ($amount != 0) {
- if ($myconfig->{numberformat} && ($myconfig->{numberformat} ne '1000.00'))
- {
- my ($whole, $dec) = split /\./, "$amount";
- $whole =~ s/-//;
- $amount = join '', reverse split //, $whole;
- $fillup = "0" x ($places - length($dec));
-
- if ($myconfig->{numberformat} eq '1,000.00') {
- $amount =~ s/\d{3,}?/$&,/g;
- $amount =~ s/,$//;
- $amount = join '', reverse split //, $amount;
- $amount .= "\.$dec" . $fillup if ($places ne '' && $places * 1 != 0);
- }
-
- if ($myconfig->{numberformat} eq '1.000,00') {
- $amount =~ s/\d{3,}?/$&./g;
- $amount =~ s/\.$//;
- $amount = join '', reverse split //, $amount;
- $amount .= ",$dec" . $fillup if ($places ne '' && $places * 1 != 0);
- }
+ $amount = $self->round_amount($amount, $places) if ($places =~ /\d/);
- if ($myconfig->{numberformat} eq '1000,00') {
- $amount = "$whole";
- $amount .= ",$dec" . $fillup if ($places ne '' && $places * 1 != 0);
- }
+ my @d = map { s/\d//g; reverse split // } my $tmp = $myconfig->{numberformat}; # get delim chars
+ my @p = split /\./, $amount ; # split amount at decimal point
- if ($dash =~ /-/) {
- $amount = ($negative) ? "($amount)" : "$amount";
- } elsif ($dash =~ /DRCR/) {
- $amount = ($negative) ? "$amount DR" : "$amount CR";
- } else {
- $amount = ($negative) ? "-$amount" : "$amount";
- }
- }
- } else {
- if ($dash eq "0" && $places) {
- if ($myconfig->{numberformat} eq '1.000,00') {
- $amount = "0" . "," . "0" x $places;
- } else {
- $amount = "0" . "." . "0" x $places;
- }
- } else {
- $amount = ($dash ne "") ? "$dash" : "0";
- }
- }
-
- $main::lxdebug->leave_sub();
+ $p[0] =~ s/\B(?=(...)*$)/$d[1]/g if $d[1]; # add 1,000 delimiters
+ $amount = $p[0];
+ $amount .= $d[0].$p[1].(0 x ($places - length $p[1])) if ($places || $p[1] ne '');
+
+ $amount = do {
+ ($dash =~ /-/) ? ($neg ? "($amount)" : "$amount" ) :
+ ($dash =~ /DRCR/) ? ($neg ? "$amount DR" : "$amount CR" ) :
+ ($neg ? "-$amount" : "$amount" ) ;
+ };
+
+ $main::lxdebug->leave_sub(2);
return $amount;
}
-
+#
sub parse_amount {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($self, $myconfig, $amount) = @_;
- $main::lxdebug->message(LXDebug::DEBUG2, "Start amount: $amount");
if ($myconfig->{in_numberformat} == 1) {
-
# Extra input number format 1000.00 or 1000,00
- $main::lxdebug->message(LXDebug::DEBUG2,
- "in_numberformat: " . $main::locale->text('1000,00 or 1000.00'));
$amount =~ s/,/\./g;
-
- #$main::lxdebug->message(LXDebug::DEBUG2, "1.Parsed Number: $amount") if ($amount);
$amount = scalar reverse $amount;
-
- #$main::lxdebug->message(LXDebug::DEBUG2, "2.Parsed Number: $amount") if ($amount);
$amount =~ s/\./DOT/;
-
- #$main::lxdebug->message(LXDebug::DEBUG2, "3.Parsed Number: $amount") if ($amount);
$amount =~ s/\.//g;
-
- #$main::lxdebug->message(LXDebug::DEBUG2, "4.Parsed Number: $amount") if ($amount);
$amount =~ s/DOT/\./;
-
- #$main::lxdebug->message(LXDebug::DEBUG2, "5.Parsed Number:" . $amount) if ($amount);
$amount = scalar reverse $amount;
- $main::lxdebug->message(LXDebug::DEBUG2,
- "Parsed amount:" . $amount . "\n");
-
+ $main::lxdebug->leave_sub(2);
return ($amount * 1);
-
}
- $main::lxdebug->message(LXDebug::DEBUG2,
- "in_numberformat: " . $main::locale->text('equal Outputformat'));
- $main::lxdebug->message(LXDebug::DEBUG2,
- " = numberformat: $myconfig->{numberformat}");
+
if ( ($myconfig->{numberformat} eq '1.000,00')
|| ($myconfig->{numberformat} eq '1000,00')) {
$amount =~ s/\.//g;
$amount =~ s/,//g;
- $main::lxdebug->message(LXDebug::DEBUG2, "Parsed amount:" . $amount . "\n")
- if ($amount);
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return ($amount * 1);
}
sub round_amount {
- $main::lxdebug->enter_sub();
+ $main::lxdebug->enter_sub(2);
my ($self, $amount, $places) = @_;
my $round_amount;
$amount = $amount * (10**($places));
$round_amount = int($amount + .5 * ($amount <=> 0)) / (10**($places));
- $main::lxdebug->leave_sub();
+ $main::lxdebug->leave_sub(2);
return $round_amount;
my ($current_page, $current_line, $current_row) = (1, 1, 0);
my $pagebreak = "";
my $sum = 0;
-
# } Moritz Bunkus
+ # The old fixed notation of <%variable%> is changed to a new dynamic one.
+ my ${pre} = '<%'; # Variable Prefix, must be regex save!
+ my ${suf} = '%>'; # Variable Suffix, must be regex save!
+
+
# Make sure that all *notes* (intnotes, partnotes_*, notes etc) are converted to markup correctly.
$self->format_string(grep(/notes/, keys(%{$self})));
$self->{"notes"} = $self->{ $self->{"formname"} . "notes" };
map({ $self->{"employee_${_}"} = $myconfig->{$_}; }
- qw(email tel fax name signature));
+ qw(email tel fax name signature company address businessnumber));
open(IN, "$self->{templates}/$self->{IN}")
or $self->error("$self->{IN} : $!");
$two_passes = 0;
# first we generate a tmpfile
- # read file and replace <%variable%>
+ # read file and replace ${pre}variable${suf}
while ($_ = shift) {
$par = "";
$var = $_;
- # Switch <%analyse%> for template checking
- # If <%analyse%> is set in the template, you'll find the
+ # Switch ${pre}analyse${suf} for template checking
+ # If ${pre}analyse${suf} is set in the template, you'll find the
# parsed output in the user Directory for analysing
# Latex errors
- # <%analyse%> is a switch (allways off, on if set), not a Variable
+ # ${pre}analyse${suf} is a switch (allways off, on if set), not a Variable
# Set $form->{analysing}="" for system state: never analyse.
# Set $form->{analysing}="1" for system state: ever analyse.
- $self->{analysing} = "1" if (/<%analyse%>/ && !defined $self->{analysing});
+ $self->{analysing} = "1" if (/${pre}analyse${suf}/ && !defined $self->{analysing});
$two_passes = 1 if (/\\pageref/);
# { Moritz Bunkus
# detect pagebreak block and its parameters
- if (/\s*<%pagebreak ([0-9]+) ([0-9]+) ([0-9]+)%>/) {
+ if (/\s*${pre}pagebreak ([0-9]+) ([0-9]+) ([0-9]+)${suf}/) {
$chars_per_line = $1;
$lines_on_first_page = $2;
$lines_on_second_page = $3;
while ($_ = shift) {
- last if (/\s*<%end pagebreak%>/);
+ last if (/\s*${pre}end pagebreak${suf}/);
$pagebreak .= $_;
}
}
# } Moritz Bunkus
-
- if (/\s*<%foreach /) {
+
+ if (/\s*${pre}foreach /) {
# this one we need for the count
chomp $var;
- $var =~ s/\s*<%foreach (.+?)%>/$1/;
+ $var =~ s/\s*${pre}foreach (.+?)${suf}/$1/;
while ($_ = shift) {
- last if (/\s*<%end /);
+ last if (/\s*${pre}end /);
# store line in $par
$par .= $_;
# { Moritz Bunkus
# Try to detect whether a manual page break is necessary
- # but only if there was a <%pagebreak ...%> block before
+ # but only if there was a ${pre}pagebreak ...${suf} block before
if ($chars_per_line) {
my $lines =
) {
my $pb = $pagebreak;
- # replace the special variables <%sumcarriedforward%>
- # and <%lastpage%>
+ # replace the special variables ${pre}sumcarriedforward${suf}
+ # and ${pre}lastpage${suf}
my $psum = $self->format_amount($myconfig, $sum, 2);
- $pb =~ s/<%sumcarriedforward%>/$psum/g;
- $pb =~ s/<%lastpage%>/$current_page/g;
+ $pb =~ s/${pre}sumcarriedforward${suf}/$psum/g;
+ $pb =~ s/${pre}lastpage${suf}/$current_page/g;
# only "normal" variables are supported here
- # (no <%if, no <%foreach, no <%include)
+ # (no ${pre}if, no ${pre}foreach, no ${pre}include)
- $pb =~ s/<%(.+?)%>/$self->{$1}/g;
+ $pb =~ s/${pre}(.+?)${suf}/$self->{$1}/g;
# page break block is ready to rock
print(OUT $pb);
# don't parse par, we need it for each line
$_ = $par;
- s/<%(.+?)%>/$self->{$1}[$i]/mg;
+ s/${pre}(.+?)${suf}/$self->{$1}[$i]/mg;
print OUT;
}
next;
}
# if not comes before if!
- if (/\s*<%if not /) {
+ if (/\s*${pre}if not /) {
# check if it is not set and display
chop;
- s/\s*<%if not (.+?)%>/$1/;
+ s/\s*${pre}if not (.+?)${suf}/$1/;
unless ($self->{$_}) {
while ($_ = shift) {
- last if (/\s*<%end /);
+ last if (/\s*${pre}end /);
# store line in $par
$par .= $_;
} else {
while ($_ = shift) {
- last if (/\s*<%end /);
+ last if (/\s*${pre}end /);
}
next;
}
}
- if (/\s*<%if /) {
+ if (/\s*${pre}if /) {
# check if it is set and display
chop;
- s/\s*<%if (.+?)%>/$1/;
+ s/\s*${pre}if (.+?)${suf}/$1/;
if ($self->{$_}) {
while ($_ = shift) {
- last if (/\s*<%end /);
+ last if (/\s*${pre}end /);
# store line in $par
$par .= $_;
} else {
while ($_ = shift) {
- last if (/\s*<%end /);
+ last if (/\s*${pre}end /);
}
next;
}
}
- # check for <%include filename%>
- if (/\s*<%include /) {
+ # check for ${pre}include filename${suf}
+ if (/\s*${pre}include /) {
# get the directory/filename
chomp $var;
- $var =~ s/\s*<%include (.+?)%>/$1/;
+ $var =~ s/\s*${pre}include (.+?)${suf}/$1/;
# mangle filename on basedir
$var =~ s/^(\/|\.\.)//g;
next;
}
- s/<%(.+?)%>/$self->{$1}/g;
+ s/${pre}(.+?)${suf}/$self->{$1}/g;
s/<nobr><\/nobr>/ /g;
print OUT;
}
close(IN);
}
- $self->cleanup;
-
}
+ $self->cleanup;
+
chdir("$self->{cwd}");
$main::lxdebug->leave_sub();
}
'&', quotemeta('\n'), '
',
'"', '\$', '%', '_', '#', quotemeta('^'),
- '{', '}', '<', '>', '£', "\r"
+ '{', '}', '<', '>', '£', "\r", '²'
]
},
'html' => {
'
' => '\newline ',
'£' => '\pounds ',
+ '²' => '$^2$',
"\r" => ""
});
$query = qq| SELECT * FROM tax t|;
$sth = $dbh->prepare($query);
$sth->execute || $self->dberror($query);
- $form->{TAX} = ();
+ $self->{TAX} = ();
while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
push @{ $self->{TAX} }, $ref;
}
$query = qq|UPDATE defaults
SET $fld = '$var'|;
- $dbh->do($query) || $form->dberror($query);
+ $dbh->do($query) || $self->dberror($query);
$dbh->commit;
$dbh->disconnect;
}
$query = qq|UPDATE business
SET customernumberinit = '$var' WHERE id=$business_id|;
- $dbh->do($query) || $form->dberror($query);
+ $dbh->do($query) || $self->dberror($query);
$dbh->commit;
$dbh->disconnect;