summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xLedgerSMB.pm7
-rw-r--r--LedgerSMB/DBObject.pm34
-rw-r--r--LedgerSMB/Employee.pm14
3 files changed, 25 insertions, 30 deletions
diff --git a/LedgerSMB.pm b/LedgerSMB.pm
index ab771eb1..4fe53d2e 100755
--- a/LedgerSMB.pm
+++ b/LedgerSMB.pm
@@ -103,10 +103,9 @@ sub escape {
my $regex = qr/([^a-zA-Z0-9_.-])/;
$str =~ s/$regex/sprintf("%%%02x", ord($1))/ge;
- # for Apache 2 we escape strings twice
- if (($ENV{SERVER_SIGNATURE} =~ /Apache\/2\.(\d+)\.(\d+)/)) {
- $str =~ s/$regex/sprintf("%%%02x", ord($1))/ge
- if $1 == 0 && $2 < 44;
+ # for Apache 2.0.x prior to 2.0.44 we escape strings twic;
+ if ($ENV{SERVER_SIGNATURE} =~ /Apache\/2\.0\.(\d+)/ && $1 < 44) {
+ $str =~ s/$regex/sprintf("%%%02x", ord($1))/ge;
}
$str;
}
diff --git a/LedgerSMB/DBObject.pm b/LedgerSMB/DBObject.pm
index 0a79590e..4d6dabcb 100644
--- a/LedgerSMB/DBObject.pm
+++ b/LedgerSMB/DBObject.pm
@@ -8,7 +8,16 @@ This module creates object instances based on LedgerSMB's in-database ORM.
=head1 METHODS
-=item find_method ($hashref, $function_name, @args)
+=item new ($class, base => $LedgerSMB::hash)
+
+This is the base constructor for all child classes. It must be used with base
+argument because this is necessary for database connectivity and the like.
+
+Of course the base object can be any object that inherits LedgerSMB, so you can
+use any subclass of that. The per-session dbh is passed between the objects
+this way as is any information that is needed.
+
+=item exec_method ($self, procname => $function_name, args => \@args)
=item merge ($hashref, @attrs)
copies @attrs from $hashref to $self.
@@ -33,26 +42,25 @@ our $AUTOLOAD;
sub AUTOLOAD {
my ($self) = shift;
- my $type = (Scalar::Util::reftype $self) =~ m/::(.*?)$/;
- print "Type: $type\n";
- $type =~ m/::(.*?)$/;
+ my $type = Scalar::Util::blessed $self;
+ $type =~ m/::(.*?)$/;
$type = lc $1;
- $self->exec_method("$type" . "_" . $AUTOLOAD, @_);
+ print "Type: $type\n";
+ $self->exec_method(procname => "$type" . "_" . $AUTOLOAD, args => \@_);
}
sub new {
- my $self = shift @_;
- my $lsmb = shift @_;
- if (! $lsmb->isa('LedgerSMB')){
+ my $class = shift @_;
+ my %args = @_;
+ my $base = $args{base};
+ my $self = bless {}, $class;
+ if (! $base->isa('LedgerSMB')){
$self->error("Constructor called without LedgerSMB object arg");
}
- $self = {};
my $attr;
- for $attr (keys %{$lsmb}){
- $self->{$attr} = $lsmb->{$attr};
- }
- bless $self;
+ $self->merge($base);
+ $self;
}
diff --git a/LedgerSMB/Employee.pm b/LedgerSMB/Employee.pm
index 261d9578..0512cf64 100644
--- a/LedgerSMB/Employee.pm
+++ b/LedgerSMB/Employee.pm
@@ -29,22 +29,10 @@ your software.
=cut
package LedgerSMB::Employee;
-use LedgerSMB;
-use LedgerSMB::DBObject;
+use base qw(LedgerSMB::DBObject);
use strict;
our $VERSION = '1.0.0';
-our @ISA = qw(LedgerSMB::DBObject);
-
-sub AUTOLOAD {
- my $self = shift;
- my $AUTOLOAD = $LedgerSMB::Employee::AUTOLOAD;
- $AUTOLOAD =~ s/^.*:://;
- my $procname = "employee_$AUTOLOAD";
- $self->exec_method(procname => "employee_$AUTOLOAD", args => \@_);
- my @call_args;
-}
-
sub save {
my $self = shift;
my $hashref = shift @{$self->exec_method(procname => "employee_save")};