use service-def specific labels, at least for service pages that use {view,edit}...
[freeside.git] / httemplate / edit / elements / edit.html
index f4e4195..4a6079a 100644 (file)
@@ -91,8 +91,12 @@ Example:
     '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'
 
@@ -106,6 +110,8 @@ Example:
     # 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>
@@ -126,37 +132,39 @@ Example:
     # 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
 
@@ -172,7 +180,8 @@ Example:
 
 <% include('/elements/header'. ( $opt{popup} ? '-popup' : '' ). '.html',
               $title,
-              include( '/elements/menubar.html', @menubar )
+              include( '/elements/menubar.html', @menubar ),
+              $opt{'body_etc'},
            )
 %>
 
@@ -254,7 +263,7 @@ Example:
 %     'layer_values'  => $layer_values,
 %     'html_between'  => $f->{'html_between'},
 %
-%     #umm.
+%     #umm.  for select-agent_types at least
 %     'disabled'      => $f->{'disabled'},
 %   );
 %
@@ -611,7 +620,7 @@ if ( $cgi->param('error') ) {
     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+)$/ ) {
@@ -620,9 +629,12 @@ if ( $cgi->param('error') ) {
 
   $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('');
@@ -641,12 +653,13 @@ if ( $cgi->param('error') ) {
     $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
@@ -661,7 +674,7 @@ if ( $cgi->param('error') ) {
               ? &{$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'};
 
 }