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 /FS | |
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 'FS')
-rw-r--r-- | FS/FS/access_user.pm | 8 | ||||
-rw-r--r-- | FS/FS/part_pkg.pm | 101 |
2 files changed, 71 insertions, 38 deletions
diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm index e5c5ed155..63ae30d36 100644 --- a/FS/FS/access_user.pm +++ b/FS/FS/access_user.pm @@ -425,11 +425,7 @@ sub access_right { $self->{_ACLcache} = {}; } - my $has_right = ' ( '. join(' OR ', - map { 'rightname = '. dbh->quote($_) } - @$rightname - ). - ' ) '; + my $has_right = ' rightname IN ('. join(',', map '?', @$rightname ). ') '; my $sth = dbh->prepare(" SELECT groupnum FROM access_usergroup @@ -441,7 +437,7 @@ sub access_right { AND $has_right LIMIT 1 ") or die dbh->errstr; - $sth->execute($self->usernum) or die $sth->errstr; + $sth->execute($self->usernum, @$rightname) or die $sth->errstr; my $row = $sth->fetchrow_arrayref; #$row ? $row->[0] : ''; diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index e53d7b821..3308eadf4 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -1100,10 +1100,48 @@ sub calc_remain { 0; } sub calc_cancel { 0; } sub calc_units { 0; } +=item format OPTION DATA + +Returns data formatted according to the function 'format' described +in the plan info. Returns DATA if no such function exists. + +=cut + +sub format { + my ($self, $option, $data) = (shift, shift, shift); + if (exists($plans{$self->plan}->{fields}->{$option}{format})) { + &{$plans{$self->plan}->{fields}->{$option}{format}}($data); + }else{ + $data; + } +} + +=item parse OPTION DATA + +Returns data parsed according to the function 'parse' described +in the plan info. Returns DATA if no such function exists. + +=cut + +sub parse { + my ($self, $option, $data) = (shift, shift, shift); + if (exists($plans{$self->plan}->{fields}->{$option}{parse})) { + &{$plans{$self->plan}->{fields}->{$option}{parse}}($data); + }else{ + $data; + } +} + =back =cut +=head1 CLASS METHODS + +=over 4 + +=cut + # _upgrade_data # # Used by FS::Upgrade to migrate to a new database. @@ -1170,6 +1208,37 @@ sub _upgrade_data { # class method } +=item curuser_pkgs_sql + +Returns an SQL fragment for searching for packages the current user can +use, either via part_pkg.agentnum directly, or via agent type (see +L<FS::type_pkgs>). + +=cut + +sub curuser_pkgs_sql { + #my($class) = shift; + + my $agentnums = join(',', $FS::CurrentUser::CurrentUser->agentnums); + + " + ( + 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) + ) + ) + "; + +} + +=back + =head1 SUBROUTINES =over 4 @@ -1217,38 +1286,6 @@ sub plan_info { \%plans; } -=item format OPTION DATA - -Returns data formatted according to the function 'format' described -in the plan info. Returns DATA if no such function exists. - -=cut - -sub format { - my ($self, $option, $data) = (shift, shift, shift); - if (exists($plans{$self->plan}->{fields}->{$option}{format})) { - &{$plans{$self->plan}->{fields}->{$option}{format}}($data); - }else{ - $data; - } -} - -=item parse OPTION DATA - -Returns data parsed according to the function 'parse' described -in the plan info. Returns DATA if no such function exists. - -=cut - -sub parse { - my ($self, $option, $data) = (shift, shift, shift); - if (exists($plans{$self->plan}->{fields}->{$option}{parse})) { - &{$plans{$self->plan}->{fields}->{$option}{parse}}($data); - }else{ - $data; - } -} - =back |