'menubar' => '', #menubar arrayref
#agent virtualization
- 'agent_virt' => 1,
- 'agent_null_right' => 'Access Right Name',
+ 'agent_virt' => 1,
+ 'agent_null_right' => 'Access Right Name',
+ 'agent_clone_extra_sql' => '', #if provided, this overrides the extra_sql
+ #implementing agent virt, for clone
+ #operations. i.e. pass "1=1" to allow
+ #cloning anything
'viewall_dir' => '', #'search' or 'browse', defaults to 'search'
# HTML callbacks
###
+ 'body_etc' => '', # Additional BODY attributes, i.e. onLoad=""
+
'html_init' => '', #after the header/menubar
#string or coderef of additional HTML to add before </TABLE>
# initialization callbacks
###
- ###global callbacks
+ ###global callbacks, always run if provided
- #always run if provided, after decoding long CGI "redirect=" responses but
+ #after decoding long CGI "redirect=" responses but
# before object creation/search
# (useful if you have a long form that might trigger redirect= and you need
# to do things with $cgi params - they're not decoded in the calling
# <%init> block yet)
'begin_callback' = sub { my( $cgi, $fields_listref, $opt_hashref ) = @_; },
- #always run, after the mode-specific object creation/search
+ #after the mode-specific object creation/search
'end_callback' = sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
- ###mode-specific callbacks
+ ###mode-specific callbacks. one (and only one) of these four is called
+ #run when adding
+ 'new_callback' => sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
+
+ #run when editing
+ 'edit_callback' => sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
+
#run when re-displaying with an error
'error_callback' => sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
- #run when editing
- 'edit_callback' => sub { my( $cgi, $object, $fields_listref ) = @_; },
-
+ #run when cloning
+ 'clone_callback' => sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
+
+ ###callbacks called in new mode only
+
# returns a hashref for the new object
'new_hashref_callback'
# returns the new object iself (otherwise, ->new is called)
'new_object_callback'
-
- #run when adding
- 'new_callback' => sub { my( $cgi, $object, $fields_listref ) = @_; },
-
- #run when cloning
- 'clone_callback' => sub { my( $cgi, $object, $fields_listref, $opt_hashref ) = @_; },
###display callbacks
<% include('/elements/header'. ( $opt{popup} ? '-popup' : '' ). '.html',
$title,
- include( '/elements/menubar.html', @menubar )
+ include( '/elements/menubar.html', @menubar ),
+ $opt{'body_etc'},
)
%>
% 'layer_values' => $layer_values,
% 'html_between' => $f->{'html_between'},
%
-% #umm.
+% #umm. for select-agent_types at least
% 'disabled' => $f->{'disabled'},
% );
%
map { $_ => scalar($cgi->param($_)) } fields($table)
});
- &{$opt{'error_callback'}}($cgi, $object, $fields, \%opt )
+ &{$opt{'error_callback'}}( $cgi, $object, $fields, \%opt )
if $opt{'error_callback'};
} elsif ( $cgi->param('clone') =~ /^(\d+)$/ ) {
$clone = $1;
+ $qsearch{'extra_sql'} = ' AND '. $opt{'agent_clone_extra_sql'}
+ if $opt{'agent_clone_extra_sql'};
+
$object = qsearchs({ %qsearch, 'hashref' => { $pkey => $clone } });
- &{$opt{'clone_callback'}}($cgi, $object, $fields, \%opt )
+ &{$opt{'clone_callback'}}( $cgi, $object, $fields, \%opt )
if $opt{'clone_callback'};
#$object->$pkey('');
$value = $query;
}
$value =~ /^(\d+)$/ or die "unparsable $pkey";
- $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $1 } });
+ $object = qsearchs({ %qsearch, 'hashref' => { $pkey => $1 } })
+ or die "$pkey $1 not found in $table";
warn "$table $pkey => $1"
if $opt{'debug'};
- &{$opt{'edit_callback'}}($cgi, $object, $fields)
+ &{$opt{'edit_callback'}}( $cgi, $object, $fields, \%opt )
if $opt{'edit_callback'};
} else { #adding
? &{$opt{'new_object_callback'}}( $cgi, $hashref, $fields, \%opt )
: $class->new( $hashref );
- &{$opt{'new_callback'}}($cgi, $object, $fields)
+ &{$opt{'new_callback'}}( $cgi, $object, $fields, \%opt )
if $opt{'new_callback'};
}