diff options
-rwxr-xr-x | LedgerSMB.pm | 7 | ||||
-rw-r--r-- | LedgerSMB/DBObject.pm | 34 | ||||
-rw-r--r-- | LedgerSMB/Employee.pm | 14 |
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")}; |