diff options
author | ivan <ivan> | 2009-02-08 02:05:25 +0000 |
---|---|---|
committer | ivan <ivan> | 2009-02-08 02:05:25 +0000 |
commit | 8b72ad2a4d67f46e4bda36179e992d82d069689f (patch) | |
tree | 5caa8331a3c04910d341dce7977be4b4c05f0ad5 /httemplate/browse/part_pkg.cgi | |
parent | d4ac14699c56a2e5a9b8d2ce24c4c6ee837327c6 (diff) |
further work on agents editing own packages: allow them to see (but not edit) global packages for their type, RT#1331
Diffstat (limited to 'httemplate/browse/part_pkg.cgi')
-rwxr-xr-x | httemplate/browse/part_pkg.cgi | 122 |
1 files changed, 77 insertions, 45 deletions
diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index 478d4a6d4..780f40b9f 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -1,61 +1,93 @@ <% include( 'elements/browse.html', - 'title' => 'Package Definitions', - 'html_init' => $html_init, - 'name' => 'package definitions', - 'disableable' => 1, - 'disabled_statuspos' => 3, - 'agent_virt' => 1, - 'agent_null_right' => 'Edit global package definitions', - 'agent_pos' => 5, - 'query' => { 'select' => $select, - 'table' => 'part_pkg', - 'hashref' => {}, - 'order_by' => "ORDER BY $orderby", - }, - 'count_query' => $count_query, - 'header' => \@header, - 'fields' => \@fields, - 'links' => \@links, - 'align' => $align, + 'title' => 'Package Definitions', + 'html_init' => $html_init, + 'name' => 'package definitions', + 'disableable' => 1, + 'disabled_statuspos' => 3, + 'agent_virt' => 1, + 'agent_null_right' => [ $edit, $edit_global ], + 'agent_null_right_link' => $edit_global, + 'agent_pos' => 5, + 'query' => { 'select' => $select, + 'table' => 'part_pkg', + 'hashref' => {}, + 'extra_sql' => $extra_sql, + 'order_by' => "ORDER BY $orderby" + }, + 'count_query' => $count_query, + 'header' => \@header, + 'fields' => \@fields, + 'links' => \@links, + 'align' => $align, ) %> <%init> +my $curuser = $FS::CurrentUser::CurrentUser; + +my $edit = 'Edit package definitions'; +my $edit_global = 'Edit global package definitions'; +my $acl_edit = $curuser->access_right($edit); +my $acl_edit_global = $curuser->access_right($edit_global); +my $acl_config = $curuser->access_right('Configuration'); #to edit services + die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Edit package definitions') - || $FS::CurrentUser::CurrentUser->access_right('Edit global package definitions'); + unless $acl_edit || $acl_edit_global; + +my $conf = new FS::Conf; +my $taxclasses = $conf->exists('enable_taxclasses'); +my $money_char = $conf->config('money_char') || '$'; my $select = '*'; my $orderby = 'pkgpart'; if ( $cgi->param('active') ) { - $orderby = 'num_active DESC'; } - $select = " - *, +my $extra_sql = ''; + +my $agentnums = join(',', $curuser->agentnums); + +unless ( $acl_edit_global ) { + $extra_sql .= " + WHERE ( + agentnum IS NOT NULL OR 0 < ( + SELECT COUNT(*) + FROM type_pkgs + LEFT JOIN agent_type USING ( typenum ) + LEFT JOIN agent AS typeagent USING ( typenum ) + WHERE type_pkgs.pkgpart = part_pkg.pkgpart + AND typeagent.agentnum IN ($agentnums) + ) + ) + "; +} - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND ( cancel IS NULL OR cancel = 0 ) - AND ( susp IS NULL OR susp = 0 ) - ) AS num_active, +my $count_cust_pkg = " + SELECT COUNT(*) FROM cust_pkg LEFT JOIN cust_main USING ( custnum ) + WHERE cust_pkg.pkgpart = part_pkg.pkgpart + AND cust_main.agentnum IN ($agentnums) +"; - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND ( cancel IS NULL OR cancel = 0 ) - AND susp IS NOT NULL AND susp != 0 - ) AS num_suspended, +$select = " - ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart - AND cancel IS NOT NULL AND cancel != 0 - ) AS num_cancelled + *, - "; + ( $count_cust_pkg + AND ( cancel IS NULL OR cancel = 0 ) + AND ( susp IS NULL OR susp = 0 ) + ) AS num_active, -#} + ( $count_cust_pkg + AND ( cancel IS NULL OR cancel = 0 ) + AND susp IS NOT NULL AND susp != 0 + ) AS num_suspended, -my $conf = new FS::Conf; -my $taxclasses = $conf->exists('enable_taxclasses'); -my $money_char = $conf->config('money_char') || '$'; + ( $count_cust_pkg + AND cancel IS NOT NULL AND cancel != 0 + ) AS num_cancelled + +"; my $html_init; #unless ( $cgi->param('active') ) { @@ -270,8 +302,11 @@ push @fields, { 'data' => $svc, 'align' => 'left', - 'link' => $p. 'edit/part_svc.cgi?'. - $part_svc->svcpart, + 'link' => ( $acl_config + ? $p. 'edit/part_svc.cgi?'. + $part_svc->svcpart + : '' + ), }, ]; } @@ -299,9 +334,6 @@ $align .= 'lrl'; #rr'; # -------- -my $count_query = 'SELECT COUNT(*) FROM part_pkg WHERE '. - $FS::CurrentUser::CurrentUser->agentnums_sql( - 'null_right' => 'Edit global package definitions', - ); +my $count_query = "SELECT COUNT(*) FROM part_pkg $extra_sql"; </%init> |