Bug 329377: Bugzilla::Object base class for objects
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, r=kevin.benton, a=justdave git-svn-id: svn://10.0.0.236/trunk@198783 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -18,8 +18,7 @@ use strict;
|
||||
|
||||
package Bugzilla::Keyword;
|
||||
|
||||
use Bugzilla::Util;
|
||||
use Bugzilla::Error;
|
||||
use base qw(Bugzilla::Object);
|
||||
|
||||
###############################
|
||||
#### Initialization ####
|
||||
@@ -31,100 +30,18 @@ use constant DB_COLUMNS => qw(
|
||||
keyworddefs.description
|
||||
);
|
||||
|
||||
my $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 $keyword;
|
||||
|
||||
if (defined $id) {
|
||||
detaint_natural($id)
|
||||
|| ThrowCodeError('param_must_be_numeric',
|
||||
{function => 'Bugzilla::Keyword::_init'});
|
||||
|
||||
$keyword = $dbh->selectrow_hashref(qq{
|
||||
SELECT $columns FROM keyworddefs
|
||||
WHERE id = ?}, undef, $id);
|
||||
} elsif (defined $param->{'name'}) {
|
||||
trick_taint($param->{'name'});
|
||||
$keyword = $dbh->selectrow_hashref(qq{
|
||||
SELECT $columns FROM keyworddefs
|
||||
WHERE name = ?}, undef, $param->{'name'});
|
||||
} else {
|
||||
ThrowCodeError('bad_arg',
|
||||
{argument => 'param',
|
||||
function => 'Bugzilla::Keyword::_init'});
|
||||
}
|
||||
|
||||
return undef unless (defined $keyword);
|
||||
|
||||
foreach my $field (keys %$keyword) {
|
||||
$self->{$field} = $keyword->{$field};
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub new_from_list {
|
||||
my $class = shift;
|
||||
my ($id_list) = @_;
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
my $keywords;
|
||||
if (@$id_list) {
|
||||
my @detainted_ids;
|
||||
foreach my $id (@$id_list) {
|
||||
detaint_natural($id) ||
|
||||
ThrowCodeError('param_must_be_numeric',
|
||||
{function => 'Bugzilla::Keyword::new_from_list'});
|
||||
push(@detainted_ids, $id);
|
||||
}
|
||||
$keywords = $dbh->selectall_arrayref(
|
||||
"SELECT $columns FROM keyworddefs WHERE id IN ("
|
||||
. join(',', @detainted_ids) . ")", {Slice=>{}});
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
foreach my $keyword (@$keywords) {
|
||||
bless($keyword, $class);
|
||||
}
|
||||
return $keywords;
|
||||
}
|
||||
use constant DB_TABLE => 'keyworddefs';
|
||||
|
||||
###############################
|
||||
#### Accessors ######
|
||||
###############################
|
||||
|
||||
sub id { return $_[0]->{'id'}; }
|
||||
sub name { return $_[0]->{'name'}; }
|
||||
sub description { return $_[0]->{'description'}; }
|
||||
|
||||
###############################
|
||||
#### Subroutines ######
|
||||
###############################
|
||||
|
||||
sub get_all_keywords {
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
my $ids = $dbh->selectcol_arrayref(q{
|
||||
SELECT id FROM keyworddefs ORDER BY name});
|
||||
|
||||
my $keywords = Bugzilla::Keyword->new_from_list($ids);
|
||||
return @$keywords;
|
||||
}
|
||||
|
||||
sub keyword_count {
|
||||
my ($count) =
|
||||
Bugzilla->dbh->selectrow_array('SELECT COUNT(*) FROM keyworddefs');
|
||||
@@ -143,61 +60,25 @@ Bugzilla::Keyword - A Keyword that can be added to a bug.
|
||||
|
||||
use Bugzilla::Keyword;
|
||||
|
||||
my $keyword = new Bugzilla::Keyword(1);
|
||||
my $keyword = new Bugzilla::Keyword({name => 'perf'});
|
||||
my $count = Bugzilla::Keyword::keyword_count;
|
||||
|
||||
my $id = $keyword->id;
|
||||
my $name = $keyword->name;
|
||||
my $description = $keyword->description;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Bugzilla::Keyword represents a keyword that can be added to a bug.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=over
|
||||
|
||||
=item C<new($param)>
|
||||
|
||||
Description: The constructor is used to load an existing keyword
|
||||
by passing a keyword id or a hash.
|
||||
|
||||
Params: $param - If you pass an integer, the integer is the
|
||||
keyword id from the database that we want to
|
||||
read in. If you pass in a hash with 'name' key,
|
||||
then the value of the name key is the name of a
|
||||
keyword from the DB.
|
||||
|
||||
Returns: A Bugzilla::Keyword object.
|
||||
|
||||
=item C<new_from_list(\@id_list)>
|
||||
|
||||
Description: Creates an array of Keyword objects, given an
|
||||
array of ids.
|
||||
|
||||
Params: \@id_list - A reference to an array of numbers, keyword ids.
|
||||
If any of these are not numeric, the function
|
||||
will throw an error. If any of these are not
|
||||
valid keyword ids, they will simply be skipped.
|
||||
|
||||
Returns: A reference to an array of C<Bugzilla::Keyword> objects.
|
||||
|
||||
=back
|
||||
This implements all standard C<Bugzilla::Object> methods. See
|
||||
L<Bugzilla::Object> for more details.
|
||||
|
||||
=head1 SUBROUTINES
|
||||
|
||||
This is only a list of subroutines specific to C<Bugzilla::Keyword>.
|
||||
See L<Bugzilla::Object> for more subroutines that this object
|
||||
implements.
|
||||
|
||||
=over
|
||||
|
||||
=item C<get_all_keywords()>
|
||||
|
||||
Description: Returns all keywords from the database.
|
||||
|
||||
Params: none.
|
||||
|
||||
Returns: A list of C<Bugzilla::Keyword> objects,
|
||||
or an empty list if there are none.
|
||||
|
||||
=item C<keyword_count()>
|
||||
|
||||
Description: A utility function to get the total number
|
||||
|
||||
Reference in New Issue
Block a user