X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FCommon.pm;h=9d7cdcbccd088ca37b8ac1b293fbfdcadc96d1cd;hb=75e721508b508648ffe2454f10cfe29ba8a359dd;hp=73be248ce3a5a9786363a29bf39f261e3dda1d6f;hpb=faef45c2e723c9fbc80d1d84b8481367204719b7;p=kivitendo-erp.git diff --git a/SL/Common.pm b/SL/Common.pm index 73be248ce..9d7cdcbcc 100644 --- a/SL/Common.pm +++ b/SL/Common.pm @@ -10,6 +10,8 @@ package Common; use Time::HiRes qw(gettimeofday); +use SL::DBUtils; + use vars qw(@db_encodings %db_encoding_to_charset); @db_encodings = ( @@ -258,7 +260,7 @@ sub webdav_folder { my ($path, $number); - $form->{WEBDAV} = {}; + $form->{WEBDAV} = []; if ($form->{type} eq "sales_quotation") { ($path, $number) = ("angebote", $form->{quonumber}); @@ -278,6 +280,8 @@ sub webdav_folder { return $main::lxdebug->leave_sub() unless ($path && $number); + $number =~ s|[/\\]|_|g; + $path = "webdav/${path}/${number}"; if (!-d $path) { @@ -286,17 +290,171 @@ sub webdav_folder { } else { my $base_path = substr($ENV{'SCRIPT_NAME'}, 1); $base_path =~ s|[^/]+$||; + $base_path =~ s|/$||; + + if (opendir $dir, $path) { + foreach my $file (sort { lc $a cmp lc $b } readdir $dir) { + next if (($file eq '.') || ($file eq '..')); + + my $fname = $file; + $fname =~ s|.*/||; + + my $is_directory = -d "$path/$file"; - foreach my $file (<$path/*>) { - my $fname = $file; - $fname =~ s|.*/||; - $form->{WEBDAV}{$fname} = - ($ENV{"HTTPS"} ? "https://" : "http://") . - $ENV{'SERVER_NAME'} . "/" . $base_path . $file; + $file = join('/', map { $form->escape($_) } grep { $_ } split m|/+|, "$path/$file"); + $file .= '/' if ($is_directory); + + push @{ $form->{WEBDAV} }, { + 'name' => $fname, + 'link' => ($ENV{"HTTPS"} ? "https://" : "http://") . $ENV{'SERVER_NAME'} . "/$base_path/$file", + 'type' => $is_directory ? $main::locale->text('Directory') : $main::locale->text('File'), + }; + } + + closedir $dir; } } $main::lxdebug->leave_sub(); } +sub get_vc_details { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form, $vc, $vc_id) = @_; + + $vc = $vc eq "customer" ? "customer" : "vendor"; + + my $dbh = $form->dbconnect($myconfig); + + my $query; + + $query = + qq|SELECT + vc.*, + pt.description AS payment_terms, + b.description AS business, + l.description AS language + FROM ${vc} vc + LEFT JOIN payment_terms pt ON (vc.payment_id = pt.id) + LEFT JOIN business b ON (vc.business_id = b.id) + LEFT JOIN language l ON (vc.language_id = l.id) + WHERE vc.id = ?|; + my $ref = selectfirst_hashref_query($form, $dbh, $query, $vc_id); + + if (!$ref) { + $dbh->disconnect(); + $main::lxdebug->leave_sub(); + return 0; + } + + map { $form->{$_} = $ref->{$_} } keys %{ $ref }; + + map { $form->{$_} = $form->format_amount($myconfig, $form->{$_} * 1) } qw(discount creditlimit); + + $query = qq|SELECT * FROM shipto WHERE (trans_id = ?)|; + $form->{SHIPTO} = selectall_hashref_query($form, $dbh, $query, $vc_id); + + $query = qq|SELECT * FROM contacts WHERE (cp_cv_id = ?)|; + $form->{CONTACTS} = selectall_hashref_query($form, $dbh, $query, $vc_id); + + $dbh->disconnect(); + + $main::lxdebug->leave_sub(); + + return 1; +} + +sub get_shipto_by_id { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form, $shipto_id, $prefix) = @_; + + $prefix ||= ""; + + my $dbh = $form->dbconnect($myconfig); + + my $query = qq|SELECT * FROM shipto WHERE shipto_id = ?|; + my $ref = selectfirst_hashref_query($form, $dbh, $query, $shipto_id); + + map { $form->{"${prefix}${_}"} = $ref->{$_} } keys %{ $ref } if $ref; + + $dbh->disconnect(); + + $main::lxdebug->leave_sub(); +} + +sub save_email_status { + $main::lxdebug->enter_sub(); + + my ($self, $myconfig, $form) = @_; + + my ($table, $query, $dbh); + + if ($form->{script} eq 'oe.pl') { + $table = 'oe'; + + } elsif ($form->{script} eq 'is.pl') { + $table = 'ar'; + + } elsif ($form->{script} eq 'ir.pl') { + $table = 'ap'; + + } + + return $main::lxdebug->leave_sub() if (!$form->{id} || !$table || !$form->{formname}); + + $dbh = $form->get_standard_dbh($myconfig); + + my ($intnotes) = selectrow_query($form, $dbh, qq|SELECT intnotes FROM $table WHERE id = ?|, $form->{id}); + + $intnotes =~ s|\r||g; + $intnotes =~ s|\n$||; + + $intnotes .= "\n\n" if ($intnotes); + + my $cc = $main::locale->text('Cc') . ": $form->{cc}\n" if $form->{cc}; + my $bcc = $main::locale->text('Bcc') . ": $form->{bcc}\n" if $form->{bcc}; + my $now = scalar localtime; + + $intnotes .= $main::locale->text('[email]') . "\n" + . $main::locale->text('Date') . ": $now\n" + . $main::locale->text('To (email)') . ": $form->{email}\n" + . "${cc}${bcc}" + . $main::locale->text('Subject') . ": $form->{subject}\n\n" + . $main::locale->text('Message') . ": $form->{message}"; + + $intnotes =~ s|\r||g; + + do_query($form, $dbh, qq|UPDATE $table SET intnotes = ? WHERE id = ?|, $intnotes, $form->{id}); + + $form->save_status($dbh); + + $dbh->commit(); + + $main::lxdebug->leave_sub(); +} + +sub check_params { + my $params = shift; + + foreach my $key (@_) { + if (!defined $params->{$key}) { + my $subroutine = (caller(1))[3]; + $main::form->error($main::locale->text("Missing parameter #1 in call to sub #2.", $key, $subroutine)); + } + } +} + +sub check_params_x { + my $params = shift; + + foreach my $key (@_) { + if (!exists $params->{$key}) { + my $subroutine = (caller(1))[3]; + $main::form->error($main::locale->text("Missing parameter #1 in call to sub #2.", $key, $subroutine)); + } + } +} + 1;