fix one-time charges and package customization for employees who don't have 'Edit...
[freeside.git] / FS / FS / Record.pm
index 16949fa..b856aea 100644 (file)
@@ -1365,14 +1365,16 @@ Formats hashref.  Keys are field names, values are listrefs that define the
 format.
 
 Each listref value can be a column name or a code reference.  Coderefs are run
-with the row object and data as the two parameters.  For example, this coderef
-does the same thing as using the "columnname" string:
+with the row object, data and a FS::Conf object as the three parameters.
+For example, this coderef does the same thing as using the "columnname" string:
 
   sub {
-    my( $record, $data ) = @_;
+    my( $record, $data, $conf ) = @_;
     $record->columnname( $data );
   },
 
+Coderefs are run after all "column name" fields are assigned.
+
 =item format_types
 
 Optional format hashref of types.  Keys are field names, values are "csv",
@@ -1662,7 +1664,7 @@ sub batch_import {
     while ( scalar(@later) ) {
       my $sub = shift @later;
       my $data = shift @later;
-      &{$sub}($record, $data);  # $record->&{$sub}($data); 
+      &{$sub}($record, $data, $conf);  # $record->&{$sub}($data, $conf); 
     }
 
     my $error = $record->insert;
@@ -2324,15 +2326,18 @@ sub ut_foreign_keyn {
     : '';
 }
 
-=item ut_agentnum_acl
+=item ut_agentnum_acl COLUMN [ NULL_RIGHT | NULL_RIGHT_LISTREF ]
 
 Checks this column as an agentnum, taking into account the current users's
-ACLs.
+ACLs.  NULL_RIGHT or NULL_RIGHT_LISTREF, if specified, indicates the access
+right or rights allowing no agentnum.
 
 =cut
 
 sub ut_agentnum_acl {
-  my( $self, $field, $null_acl ) = @_;
+  my( $self, $field ) = (shift, shift);
+  my $null_acl = scalar(@_) ? shift : [];
+  $null_acl = [ $null_acl ] unless ref($null_acl);
 
   my $error = $self->ut_foreign_keyn($field, 'agent', 'agentnum');
   return "Illegal agentnum: $error" if $error;
@@ -2347,7 +2352,7 @@ sub ut_agentnum_acl {
   } else {
 
     return "Access denied"
-      unless $curuser->access_right($null_acl);
+      unless grep $curuser->access_right($_), @$null_acl;
 
   }