summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2005-07-12 02:14:31 +0200
committerlpsolit%gmail.com <>2005-07-12 02:14:31 +0200
commit07578c0a572fe5e5966a0ec3e1bc38a7f0ead834 (patch)
tree4522fedafac6b217e04ac37f4addf015e8e9e0f2
parent45d93f11e0d60f20e6b15e206f86cd351423ae2f (diff)
downloadbugzilla-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.pm138
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