summaryrefslogtreecommitdiff
path: root/LedgerSMB/Form.pm
diff options
context:
space:
mode:
Diffstat (limited to 'LedgerSMB/Form.pm')
-rwxr-xr-xLedgerSMB/Form.pm30
1 files changed, 29 insertions, 1 deletions
diff --git a/LedgerSMB/Form.pm b/LedgerSMB/Form.pm
index 5ea22710..3b8e79ca 100755
--- a/LedgerSMB/Form.pm
+++ b/LedgerSMB/Form.pm
@@ -1282,6 +1282,7 @@ sub db_init {
}
sub get_custom_queries {
+ my $dbh = $self->{dbh};
my ($self, $tablename, $query_type, $linenum) = @_;
if ($query_type !~ /^(select|insert|update)$/i){
$self->error($locale->text(
@@ -1308,7 +1309,10 @@ sub get_custom_queries {
my $ins_values;
$query = "$query_type ";
if ($query_type eq 'UPDATE'){
- $query .= " $_ SET ";
+ $query = "DELETE FROM $_ WHERE row_id = ?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute->($form->{"id"."$linenum"})
+ || $self->dberror($query);
} elsif ($query_type eq 'INSERT'){
$query .= " INTO $_ (";
}
@@ -1344,6 +1348,30 @@ sub get_custom_queries {
push @rc, [ @data ];
}
}
+ if ($query_type eq 'INSERT'){
+ for (@rc){
+ $query = shift (@{$_});
+ $sth = $dbh->prepare($query)
+ || $form->db_error($query);
+ $sth->execute(@{$_}, $form->{id})
+ || $form->dberror($query);;
+ $sth->finish;
+ $did_insert = 1;
+ }
+ } elsif ($query_type eq 'UPDATE'){
+ @rc = $self->get_custom_queries(
+ $tablename, $query_type, $linenum);
+ } elsif ($query_type eq 'SELECT'){
+ for (@rc){
+ $query = shift @{$_};
+ $sth = $form->{dbh}->prepare($query);
+ $sth->execute($form->{id});
+ $ref = $sth->fetchrow_hashref(NAME_lc);
+ for (keys %{$ref}){
+ $form->{$_} = $ref->{$_};
+ }
+ }
+ }
@rc;
}