]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 530467: Create a read-only Bugzilla::Whine::Query object and have editwhines...
authormkanat%bugzilla.org <>
Sat, 12 Dec 2009 22:15:42 +0000 (22:15 +0000)
committermkanat%bugzilla.org <>
Sat, 12 Dec 2009 22:15:42 +0000 (22:15 +0000)
Patch by Eric Black <eblack@higherone.com> r=mkanat, a=mkanat

Bugzilla/Whine/Query.pm [new file with mode: 0644]
editwhines.cgi

diff --git a/Bugzilla/Whine/Query.pm b/Bugzilla/Whine/Query.pm
new file mode 100644 (file)
index 0000000..1121575
--- /dev/null
@@ -0,0 +1,136 @@
+# -*- 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
index e934376477d85e6e2b5b696a219ad4f0cc1b5b3a..671774ef730dd342f7b6700ca2986e09deda52e7 100755 (executable)
@@ -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,
+             };
     }
 }