summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorivan <ivan>2009-02-09 01:49:28 +0000
committerivan <ivan>2009-02-09 01:49:28 +0000
commitdf676d82034cb63ff357f8d8ed0f95ce788fb98b (patch)
tree11159ec986698a2b7b1b86cf1f68b4e0b67c5677 /FS
parent24533a22a23e211888fcc36a5177c0def5c77de3 (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.pm8
-rw-r--r--FS/FS/part_pkg.pm101
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