Bug 373440: Make "check" into a generic function in Bugzilla::Object

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=LpSolit
This commit is contained in:
mkanat%bugzilla.org 2007-08-23 21:31:21 +00:00
Родитель 517bd9d9ce
Коммит 9b6b991de2
8 изменённых файлов: 97 добавлений и 97 удалений

Просмотреть файл

@ -1282,7 +1282,7 @@ sub add_cc {
my ($self, $user_or_name, $product) = @_;
return if !$user_or_name;
my $user = ref $user_or_name ? $user_or_name
: Bugzilla::User::check($user_or_name);
: Bugzilla::User->check($user_or_name);
my $product_id = $product ? $product->id : $self->{product_id};
if (Bugzilla->params->{strict_isolation}
@ -1301,7 +1301,7 @@ sub add_cc {
sub remove_cc {
my ($self, $user_or_name) = @_;
my $user = ref $user_or_name ? $user_or_name
: Bugzilla::User::check($user_or_name);
: Bugzilla::User->check($user_or_name);
my $cc_users = $self->cc_users;
@$cc_users = grep { $_->id != $user->id } @$cc_users;
}

Просмотреть файл

@ -96,23 +96,6 @@ sub sortkey { return $_[0]->{'sortkey'}; }
##### Subroutines #####
################################
sub check_milestone {
my ($product, $milestone_name) = @_;
unless ($milestone_name) {
ThrowUserError('milestone_not_specified');
}
my $milestone = new Bugzilla::Milestone({ product => $product,
name => $milestone_name });
unless ($milestone) {
ThrowUserError('milestone_not_valid',
{'product' => $product->name,
'milestone' => $milestone_name});
}
return $milestone;
}
sub check_sort_key {
my ($milestone_name, $sortkey) = @_;
# Keep a copy in case detaint_signed() clears the sortkey
@ -174,21 +157,3 @@ Milestone.pm represents a Product Milestone object.
Returns: Integer with the number of bugs.
=back
=head1 SUBROUTINES
=over
=item C<check_milestone($product, $milestone_name)>
Description: Checks if a milestone name was passed in
and if it is a valid milestone.
Params: $product - Bugzilla::Product object.
$milestone_name - String with a milestone name.
Returns: Bugzilla::Milestone object.
=back
=cut

Просмотреть файл

@ -104,6 +104,24 @@ sub _init {
return $object;
}
sub check {
my ($invocant, $param) = @_;
my $class = ref($invocant) || $invocant;
# If we were just passed a name, then just use the name.
if (!ref $param) {
$param = { name => $param };
}
# Don't allow empty names.
if (exists $param->{name}) {
$param->{name} = trim($param->{name});
$param->{name} || ThrowUserError('object_name_not_specified',
{ class => $class });
}
my $obj = $class->new($param)
|| ThrowUserError('object_does_not_exist', {%$param, class => $class});
return $obj;
}
sub new_from_list {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
@ -463,7 +481,7 @@ during these comparisons.
=over
=item C<new($param)>
=item C<new>
=over
@ -478,7 +496,7 @@ If you pass an integer, the integer is the id of the object,
from the database, that we want to read in. (id is defined
as the value in the L</ID_FIELD> column).
If you pass in a hash, you can pass a C<name> key. The
If you pass in a hashref, you can pass a C<name> key. The
value of the C<name> key is the case-insensitive name of the object
(from L</NAME_FIELD>) in the DB.
@ -503,7 +521,35 @@ are intended B<only> for use by subclasses.
=item B<Returns>
A fully-initialized object.
A fully-initialized object, or C<undef> if there is no object in the
database matching the parameters you passed in.
=back
=item C<check>
=over
=item B<Description>
Checks if there is an object in the database with the specified name, and
throws an error if you specified an empty name, or if there is no object
in the database with that name.
=item B<Params>
The parameters are the same as for L</new>, except that if you don't pass
a hashref, the single argument is the I<name> of the object, not the id.
=item B<Returns>
A fully initialized object, guaranteed.
=item B<Notes For Implementors>
If you implement this in your subclass, make sure that you also update
the C<object_name> block at the bottom of the F<global/user-error.html.tmpl>
template.
=back

Просмотреть файл

@ -131,14 +131,6 @@ sub new {
return $class->SUPER::new(@_);
}
sub check {
my ($username) = @_;
$username = trim($username);
my $user = new Bugzilla::User({ name => $username })
|| ThrowUserError('invalid_username', { name => $username });
return $user;
}
sub update {
my $self = shift;
my $changes = $self->SUPER::update(@_);

Просмотреть файл

@ -150,20 +150,6 @@ sub product_id { return $_[0]->{'product_id'}; }
##### Subroutines ###
###############################
sub check_version {
my ($product, $version_name) = @_;
$version_name || ThrowUserError('version_not_specified');
my $version = new Bugzilla::Version(
{ product => $product, name => $version_name });
unless ($version) {
ThrowUserError('version_not_valid',
{'product' => $product->name,
'version' => $version_name});
}
return $version;
}
sub create {
my ($name, $product) = @_;
my $dbh = Bugzilla->dbh;
@ -212,9 +198,6 @@ Bugzilla::Version - Bugzilla product version class.
my $version = $hash_ref->{'version_value'};
my $version = Bugzilla::Version::check_version($product_obj,
'acme_version');
my $version = Bugzilla::Version::create($version_name, $product);
=head1 DESCRIPTION
@ -266,15 +249,6 @@ Version.pm represents a Product Version object.
=over
=item C<check_version($product, $version_name)>
Description: Checks if the version name exists for the product name.
Params: $product - A Bugzilla::Product object.
$version_name - String with a version name.
Returns: Bugzilla::Version object.
=item C<create($version_name, $product)>
Description: Create a new version for the given product.

Просмотреть файл

@ -168,8 +168,8 @@ if ($action eq 'new') {
#
if ($action eq 'del') {
my $milestone = Bugzilla::Milestone::check_milestone($product,
$milestone_name);
my $milestone = Bugzilla::Milestone->check({ product => $product,
name => $milestone_name });
$vars->{'milestone'} = $milestone;
$vars->{'product'} = $product;
@ -193,9 +193,8 @@ if ($action eq 'del') {
if ($action eq 'delete') {
check_token_data($token, 'delete_milestone');
my $milestone =
Bugzilla::Milestone::check_milestone($product,
$milestone_name);
my $milestone = Bugzilla::Milestone->check({ product => $product,
name => $milestone_name });
$vars->{'milestone'} = $milestone;
$vars->{'product'} = $product;
@ -245,9 +244,8 @@ if ($action eq 'delete') {
if ($action eq 'edit') {
my $milestone =
Bugzilla::Milestone::check_milestone($product,
$milestone_name);
my $milestone = Bugzilla::Milestone->check({ product => $product,
name => $milestone_name });
$vars->{'milestone'} = $milestone;
$vars->{'product'} = $product;
@ -269,9 +267,8 @@ if ($action eq 'edit') {
if ($action eq 'update') {
check_token_data($token, 'edit_milestone');
my $milestone_old_name = trim($cgi->param('milestoneold') || '');
my $milestone_old =
Bugzilla::Milestone::check_milestone($product,
$milestone_old_name);
my $milestone_old = Bugzilla::Milestone->check(
{ product => $product, name => $milestone_old_name });
if (length($milestone_name) > 20) {
ThrowUserError('milestone_name_too_long',
@ -343,9 +340,8 @@ if ($action eq 'update') {
$dbh->bz_unlock_tables();
my $milestone =
Bugzilla::Milestone::check_milestone($product,
$milestone_name);
my $milestone = Bugzilla::Milestone->check({ product => $product,
name => $milestone_name });
delete_token($token);
$vars->{'milestone'} = $milestone;

Просмотреть файл

@ -147,9 +147,8 @@ if ($action eq 'new') {
#
if ($action eq 'del') {
my $version = Bugzilla::Version::check_version($product, $version_name);
my $version = Bugzilla::Version->check({ product => $product,
name => $version_name });
$vars->{'version'} = $version;
$vars->{'product'} = $product;
$vars->{'token'} = issue_session_token('delete_version');
@ -167,7 +166,8 @@ if ($action eq 'del') {
if ($action eq 'delete') {
check_token_data($token, 'delete_version');
my $version = Bugzilla::Version::check_version($product, $version_name);
my $version = Bugzilla::Version->check({ product => $product,
name => $version_name });
$version->remove_from_db;
delete_token($token);
@ -189,9 +189,8 @@ if ($action eq 'delete') {
#
if ($action eq 'edit') {
my $version = Bugzilla::Version::check_version($product, $version_name);
my $version = Bugzilla::Version->check({ product => $product,
name => $version_name });
$vars->{'version'} = $version;
$vars->{'product'} = $product;
$vars->{'token'} = issue_session_token('edit_version');
@ -211,8 +210,8 @@ if ($action eq 'edit') {
if ($action eq 'update') {
check_token_data($token, 'edit_version');
my $version_old_name = trim($cgi->param('versionold') || '');
my $version =
Bugzilla::Version::check_version($product, $version_old_name);
my $version = Bugzilla::Version->check({ product => $product,
name => $version_old_name });
$dbh->bz_lock_tables('bugs WRITE', 'versions WRITE');

Просмотреть файл

@ -1139,6 +1139,24 @@
in the <em>[% field_descs.$field FILTER html %]</em> field
is less than the minimum allowable value of '[% min_num FILTER html %]'.
[% ELSIF error == "object_name_not_specified" %]
[% type = BLOCK %][% PROCESS object_name %][% END %]
[% title = BLOCK %][% type FILTER ucfirst FILTER html %] Not
Specified[% END %]
You must select/enter a [% type FILTER html %].
[% ELSIF error == "object_does_not_exist" %]
[% type = BLOCK %][% PROCESS object_name %][% END %]
[% title = BLOCK %]Invalid [% type FILTER ucfirst FILTER html %][% END %]
There is no [% type FILTER html %] named '[% name FILTER html %]'
[% IF product.defined %]
in the '[% product.name FILTER html %]' product
[% END %].
[% IF class == "Bugzilla::User" %]
Either you mis-typed the name or that user has not yet registered
for a [% terms.Bugzilla %] account.
[% END %]
[% ELSIF error == "old_password_incorrect" %]
[% title = "Incorrect Old Password" %]
You did not enter your old password correctly.
@ -1611,3 +1629,13 @@
[% END %]
[% PROCESS global/footer.html.tmpl %]
[% BLOCK object_name %]
[% IF class == "Bugzilla::User" %]
user
[% ELSIF class == "Bugzilla::Version" %]
version
[% ELSIF class == "Bugzilla::Milestone" %]
milestone
[% END %]
[% END %]