diff options
| author | ivan <ivan> | 2009-02-09 01:49:28 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2009-02-09 01:49:28 +0000 | 
| commit | df676d82034cb63ff357f8d8ed0f95ce788fb98b (patch) | |
| tree | 11159ec986698a2b7b1b86cf1f68b4e0b67c5677 /httemplate/edit | |
| parent | 24533a22a23e211888fcc36a5177c0def5c77de3 (diff) | |
further work on agents editing own packages: fix fallout on package customization from turning agent_virt on in edit/part_pkg.cgi, add a "clone package" to package browse, like clone service, and have agent type selection disappear when you set an agentnum.  RT#1331
Diffstat (limited to 'httemplate/edit')
| -rw-r--r-- | httemplate/edit/elements/edit.html | 16 | ||||
| -rwxr-xr-x | httemplate/edit/part_pkg.cgi | 85 | 
2 files changed, 69 insertions, 32 deletions
| diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html index 76fcd384b..d18a37d5a 100644 --- a/httemplate/edit/elements/edit.html +++ b/httemplate/edit/elements/edit.html @@ -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> @@ -172,7 +178,8 @@ Example:  <% include('/elements/header'. ( $opt{popup} ? '-popup' : '' ). '.html',                $title, -              include( '/elements/menubar.html', @menubar ) +              include( '/elements/menubar.html', @menubar ), +              $opt{'body_etc'},             )  %> @@ -620,6 +627,9 @@ 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 ) diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 3efc26cc3..5a9bb109f 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -1,25 +1,28 @@  <% include( 'elements/edit.html', -              'post_url'         => popurl(1).'process/part_pkg.cgi', -              'name'             => "Package definition", -              'table'            => 'part_pkg', - -              'agent_virt'       => 1, -              'agent_null_right' => $edit_global, - -              #'viewall_dir'      => 'browse', -              'viewall_url'      => $p.'browse/part_pkg.cgi', -              'html_init'        => include('/elements/init_overlib.html'). -                                    $freq_changed, -              'html_bottom'      => $html_bottom, - -              'begin_callback'       => $begin_callback, -              'end_callback'         => $end_callback, -              'new_hashref_callback' => $new_hashref_callback, -              'new_object_callback'  => $new_object_callback, -              'new_callback'         => $new_callback, -              'clone_callback'       => $clone_callback, -              'edit_callback'        => $edit_callback, -              'error_callback'       => $error_callback, +              'post_url'              => popurl(1).'process/part_pkg.cgi', +              'name'                  => "Package definition", +              'table'                 => 'part_pkg', + +              'agent_virt'            => 1, +              'agent_null_right'      => $edit_global, +              'agent_clone_extra_sql' => FS::part_pkg->curuser_pkgs_sql, + +              #'viewall_dir'           => 'browse', +              'viewall_url'           => $p.'browse/part_pkg.cgi', +              'html_init'             => include('/elements/init_overlib.html'). +                                         $javascript, +              'html_bottom'           => $html_bottom, +              'body_etc'              => +                'onLoad="agent_changed(document.edit_topform.agentnum)"', + +              'begin_callback'        => $begin_callback, +              'end_callback'          => $end_callback, +              'new_hashref_callback'  => $new_hashref_callback, +              'new_object_callback'   => $new_object_callback, +              'new_callback'          => $new_callback, +              'clone_callback'        => $clone_callback, +              'edit_callback'         => $edit_callback, +              'error_callback'        => $error_callback,                'labels' => {                               'pkgpart'          => 'Package Definition', @@ -65,6 +68,7 @@                                  type          => 'select-agent',                                  disable_empty => ! $acl_edit_global,                                  empty_label   => '(global)', +                                onchange      => 'agent_changed',                                },                                {field=>'classnum', type=>'select-pkg_class' },                                {field=>'disabled', type=>$disabled_type, value=>'Y'}, @@ -230,7 +234,7 @@ my $error_callback = sub {    (@agent_type) = $cgi->param('agent_type'); -  $opt->{action} = 'Custom' if $cgi->param('clone'); +  $opt->{action} = 'Custom' if $cgi->param('pkgnum');    $recur_disabled = $cgi->param('freq') ? 0 : 1; @@ -309,14 +313,21 @@ my $new_callback = sub {  my $clone_callback = sub {    my( $cgi, $object, $fields, $opt ) = @_; -  $opt->{action} = 'Custom'; +  if ( $cgi->param('pkgnum') ) { -  #my $part_pkg = $clone_part_pkg->clone; -  #this is all clone did anyway -  $object->comment( '(CUSTOM) '. $object->comment ) -    unless $object->comment =~ /^\(CUSTOM\) /; +    my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cgi->param('pkgnum') } ); +    $object->agentnum( $cust_pkg->cust_main->agentnum ); -  $object->disabled('Y'); +    $opt->{action} = 'Custom'; + +    #my $part_pkg = $clone_part_pkg->clone; +    #this is all clone did anyway +    $object->comment( '(CUSTOM) '. $object->comment ) +      unless $object->comment =~ /^\(CUSTOM\) /; + +    $object->disabled('Y'); + +  }    %options = $object->options; @@ -343,7 +354,7 @@ my $m2_error_callback_maker = sub {    };  }; -my $freq_changed = <<'END'; +my $javascript = <<'END';    <SCRIPT TYPE="text/javascript">      function freq_changed(what) { @@ -359,6 +370,22 @@ my $freq_changed = <<'END';      } +    function agent_changed(what) { + +      var agentnum = what.options[what.selectedIndex].value; + +      if ( agentnum == 0 ) { +        what.form.agent_type.disabled = false; +        //what.form.agent_type.style.backgroundColor = '#ffffff'; +        what.form.agent_type.style.visibility = ''; +      } else { +        what.form.agent_type.disabled = true; +        //what.form.agent_type.style.backgroundColor = '#dddddd'; +        what.form.agent_type.style.visibility = 'hidden'; +      } + +    } +    </SCRIPT>  END | 
