Commit b9eec82e authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 530467: Create a read-only Bugzilla::Whine::Query object and have editwhines.cgi use it

Patch by Eric Black <eblack@higherone.com> r=mkanat, a=mkanat
parent e1b433e3
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Eric Black.
# Portions created by the Initial Developer are Copyright (C) 2009
# Eric Black. All Rights Reserved.
#
# Contributor(s): Eric Black <black.eric@gmail.com>
package Bugzilla::Whine::Query;
use strict;
use base qw(Bugzilla::Object);
use Bugzilla::Constants;
use Bugzilla::Search::Saved;
#############
# Constants #
#############
use constant DB_TABLE => 'whine_queries';
use constant DB_COLUMNS => qw(
id
eventid
query_name
sortkey
onemailperbug
title
);
use constant NAME_FIELD => 'id';
use constant LIST_ORDER => 'sortkey';
####################
# Simple Accessors #
####################
sub eventid { return $_[0]->{'eventid'}; }
sub sortkey { return $_[0]->{'sortkey'}; }
sub one_email_per_bug { return $_[0]->{'onemailperbug'}; }
sub title { return $_[0]->{'title'}; }
sub name { return $_[0]->{'query_name'}; }
1;
__END__
=head1 NAME
Bugzilla::Whine::Query - A query object used by L<Bugzilla::Whine>.
=head1 SYNOPSIS
use Bugzilla::Whine::Query;
my $query = new Bugzilla::Whine::Query($id);
my $event_id = $query->eventid;
my $id = $query->id;
my $query_name = $query->name;
my $sortkey = $query->sortkey;
my $one_email_per_bug = $query->one_email_per_bug;
my $title = $query->title;
=head1 DESCRIPTION
This module exists to represent a query for a L<Bugzilla::Whine::Event>.
Each event, which are groups of schedules and queries based on how the
user configured the event, may have zero or more queries associated
with it. Additionally, the queries are selected from the user's saved
searches, or L<Bugzilla::Search::Saved> object with a matching C<name>
attribute for the user.
This is an implementation of L<Bugzilla::Object>, and so has all the
same methods available as L<Bugzilla::Object>, in addition to what is
documented below.
=head1 METHODS
=head2 Constructors
=over
=item C<new>
Does not accept a bare C<name> argument. Instead, accepts only an id.
See also: L<Bugzilla::Object/new>.
=back
=head2 Accessors
These return data about the object, without modifying the object.
=over
=item C<event_id>
The L<Bugzilla::Whine::Event> object id for this object.
=item C<name>
The L<Bugzilla::Search::Saved> query object name for this object.
=item C<sortkey>
The relational sorting key as compared with other L<Bugzilla::Whine::Query>
objects.
=item C<one_email_per_bug>
Returns a numeric 1(C<true>) or 0(C<false>) to represent whether this
L<Bugzilla::Whine::Query> object is supposed to be mailed as a list of
bugs or one email per bug.
=item C<title>
The title of this object as it appears in the user forms and emails.
=back
......@@ -37,6 +37,7 @@ use Bugzilla::User;
use Bugzilla::Group;
use Bugzilla::Token;
use Bugzilla::Whine::Schedule;
use Bugzilla::Whine::Query;
# require the user to have logged in
my $user = Bugzilla->login(LOGIN_REQUIRED);
......@@ -267,16 +268,9 @@ if ($cgi->param('update')) {
}
# Check queries for changes
$sth = $dbh->prepare("SELECT id " .
"FROM whine_queries " .
"WHERE eventid=?");
$sth->execute($eventid);
my @queries = ();
while (my ($qid) = $sth->fetchrow_array) {
push @queries, $qid;
}
for my $qid (@queries) {
my $queries = Bugzilla::Whine::Query->match({ eventid => $eventid });
for my $query (@$queries) {
my $qid = $query->id;
if ($cgi->param("remove_query_$qid")) {
$sth = $dbh->prepare("SELECT whine_queries.id " .
......@@ -371,32 +365,27 @@ for my $event_id (keys %{$events}) {
$mailto = $schedule->mailto->name;
}
my $this_schedule = {
'day' => $schedule->run_day,
'time' => $schedule->run_time,
'mailto_type' => $mailto_type,
'mailto' => $mailto,
'id' => $schedule->id,
};
push @{$events->{$event_id}->{'schedule'}}, $this_schedule;
push @{$events->{$event_id}->{'schedule'}},
{
'day' => $schedule->run_day,
'time' => $schedule->run_time,
'mailto_type' => $mailto_type,
'mailto' => $mailto,
'id' => $schedule->id,
};
}
# queries
$sth = $dbh->prepare("SELECT query_name, title, sortkey, id, " .
"onemailperbug " .
"FROM whine_queries " .
"WHERE eventid=? " .
"ORDER BY sortkey");
$sth->execute($event_id);
for my $row (@{$sth->fetchall_arrayref}) {
my $this_query = {
'name' => $row->[0],
'title' => $row->[1],
'sort' => $row->[2],
'id' => $row->[3],
'onemailperbug' => $row->[4],
};
push @{$events->{$event_id}->{'queries'}}, $this_query;
my $queries = Bugzilla::Whine::Query->match({ eventid => $event_id });
for my $query (@$queries) {
push @{$events->{$event_id}->{'queries'}},
{
'name' => $query->name,
'title' => $query->title,
'sort' => $query->sortkey,
'id' => $query->id,
'onemailperbug' => $query->one_email_per_bug,
};
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment