diff options
author | lpsolit%gmail.com <> | 2005-07-12 02:14:31 +0200 |
---|---|---|
committer | lpsolit%gmail.com <> | 2005-07-12 02:14:31 +0200 |
commit | 07578c0a572fe5e5966a0ec3e1bc38a7f0ead834 (patch) | |
tree | 4522fedafac6b217e04ac37f4addf015e8e9e0f2 | |
parent | 45d93f11e0d60f20e6b15e206f86cd351423ae2f (diff) | |
download | bugzilla-07578c0a572fe5e5966a0ec3e1bc38a7f0ead834.tar.gz bugzilla-07578c0a572fe5e5966a0ec3e1bc38a7f0ead834.tar.xz |
Bug 298931: migrate Group.pm from a simple module to a class - Patch by Tiago R. Mello <timello@async.com.br> r=LpSolit,mkanat a=justdave
-rw-r--r-- | Bugzilla/Group.pm | 138 |
1 files changed, 135 insertions, 3 deletions
diff --git a/Bugzilla/Group.pm b/Bugzilla/Group.pm index 2cb8e5342..85e6de5b1 100644 --- a/Bugzilla/Group.pm +++ b/Bugzilla/Group.pm @@ -19,16 +19,93 @@ # # Contributor(s): Joel Peshkin <bugreport@peshkin.net> # Erik Stambaugh <erik@dasbistro.com> +# Tiago R. Mello <timello@async.com.br> use strict; package Bugzilla::Group; +use Bugzilla; use Bugzilla::Config; +use Bugzilla::Util; +use Bugzilla::Error; + +############################### +##### Module Initialization ### +############################### + +use constant DB_COLUMNS => qw( + groups.id + groups.name + groups.description + groups.isbuggroup + groups.last_changed + groups.userregexp + groups.isactive +); + +our $columns = join(", ", DB_COLUMNS); + +sub new { + my $invocant = shift; + my $class = ref($invocant) || $invocant; + my $self = {}; + bless($self, $class); + return $self->_init(@_); +} + +sub _init { + my $self = shift; + my ($param) = (@_); + my $dbh = Bugzilla->dbh; + + my $id = $param unless (ref $param eq 'HASH'); + my $group; + + if (defined $id && detaint_natural($id)) { + + $group = $dbh->selectrow_hashref(qq{ + SELECT $columns FROM groups + WHERE id = ?}, undef, $id); + + } elsif (defined $param->{'name'}) { + + trick_taint($param->{'name'}); + + $group = $dbh->selectrow_hashref(qq{ + SELECT $columns FROM groups + WHERE name = ?}, undef, $param->{'name'}); + + } else { + ThrowCodeError('bad_arg', + {argument => 'param', + function => 'Bugzilla::Group::_init'}); + } + + return undef unless (defined $group); + + foreach my $field (keys %$group) { + $self->{$field} = $group->{$field}; + } + return $self; +} + +############################### +#### Accessors ###### +############################### + +sub id { return $_[0]->{'id'}; } +sub name { return $_[0]->{'name'}; } +sub description { return $_[0]->{'description'}; } +sub is_bug_group { return $_[0]->{'isbuggroup'}; } +sub last_changed { return $_[0]->{'last_changed'}; } +sub user_regexp { return $_[0]->{'userregexp'}; } +sub is_active { return $_[0]->{'isactive'}; } + +################################ +##### Module Subroutines ### +################################ -# ValidateGroupName checks to see if ANY of the users in the provided list -# of user objects can see the named group. It returns the group id if -# successful and undef otherwise. sub ValidateGroupName { my ($name, @users) = (@_); my $dbh = Bugzilla->dbh; @@ -49,3 +126,58 @@ sub ValidateGroupName { } 1; + +__END__ + +=head1 NAME + +Bugzilla::Group - Object for a Bugzilla group. + +=head1 SYNOPSIS + + use Bugzilla::Group; + + my $group = new Bugzilla::Group(1); + my $group = new Bugzilla::Group({name => 'AcmeGroup'}); + + my $id = $group->id; + my $name = $group->name; + my $description = $group->description; + my $last_changed = $group->last_changed; + my $user_reg_exp = $group->user_reg_exp; + my $is_active = $group->is_active; + +=head1 DESCRIPTION + +Group.pm represents a Bugzilla Group object. + +=head1 METHODS + +=over + +=item C<new($param)> + +The constructor is used to load an existing group by passing +a group id or a hash with the group name. + +=back + +=head1 SUBROUTINES + +=over + +=item C<ValidateGroupName($group_name, @users)> + +ValidateGroupName checks to see if ANY of the users in the provided list +of user objects can see the named group. It returns the group id if +successful and undef otherwise. + +=back + +=head1 AUTHOR + + Joel Peshkin <bugreport@peshkin.net> + Erik Stambaugh <erik@dasbistro.com> + Tiago R. Mello <timello@async.com.br> + +=cut |