X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FRecord.pm;h=a551bb8cccb74a012be084a9671d21185b4d4b24;hb=264ad081e68057c7bc30a8b2ad741b783e1342ff;hp=fa0d2d87e527b02930cda25072217b0297853341;hpb=c0e8da2f1e89729efa1032241e4239765a296514;p=freeside.git diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index fa0d2d87e..a551bb8cc 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -10,6 +10,7 @@ use Locale::Country; use DBI qw(:sql_types); use DBIx::DBSchema 0.25; use FS::UID qw(dbh getotaker datasrc driver_name); +use FS::CurrentUser; use FS::Schema qw(dbdef); use FS::SearchCache; use FS::Msgcat qw(gettext); @@ -763,7 +764,7 @@ sub insert { #my $i_sql = "SELECT $primary_key FROM $table WHERE oid = ?"; my $default = $self->dbdef_table->column($primary_key)->default; - unless ( $default =~ /^nextval\('"?([\w\.]+)"?'/i ) { + unless ( $default =~ /^nextval\(\(?'"?([\w\.]+)"?'/i ) { dbh->rollback if $FS::UID::AutoCommit; return "can't parse $table.$primary_key default value". " for sequence name: $default"; @@ -1620,6 +1621,36 @@ sub ut_foreign_keyn { : ''; } +=item ut_agentnum_acl + +Checks this column as an agentnum, taking into account the current users's +ACLs. + +=cut + +sub ut_agentnum_acl { + my( $self, $field, $null_acl ) = @_; + + my $error = $self->ut_foreign_keyn($field, 'agent', 'agentnum'); + return "Illegal agentnum: $error" if $error; + + my $curuser = $FS::CurrentUser::CurrentUser; + + if ( $self->$field() ) { + + return "Access deined" + unless $curuser->agentnum($self->$field()); + + } else { + + return "Access denied" + unless $curuser->access_right($null_acl); + + } + + ''; + +} =item virtual_fields [ TABLE ] @@ -1727,7 +1758,7 @@ sub _quote { ( $nullable ? ' NULL' : ' NOT NULL' ). ")\n" if $DEBUG > 2; - if ( $value eq '' && $column_type =~ /^int/ ) { + if ( $value eq '' && $column_type =~ /^(int|numeric)/ ) { if ( $nullable ) { 'NULL'; } else {