[Rt-commit] r3973 - in rt/branches/3.5-TESTING: .
html/User/Elements lib/RT lib/RT/Action lib/t/regression
jesse at bestpractical.com
jesse at bestpractical.com
Fri Oct 14 23:57:54 EDT 2005
Author: jesse
Date: Fri Oct 14 23:57:52 2005
New Revision: 3973
Modified:
rt/branches/3.5-TESTING/ (props changed)
rt/branches/3.5-TESTING/html/User/Elements/Tabs
rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm
rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm
rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm
rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay.pm
rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay_SQL.pm
rt/branches/3.5-TESTING/lib/t/regression/12-search.t
rt/branches/3.5-TESTING/lib/t/regression/13-attribute-tests.t
rt/branches/3.5-TESTING/lib/t/regression/20-sort-by-requestor.t
Log:
r17383 at hualien: jesse | 2005-10-14 16:12:53 -0400
* perltidy
r17385 at hualien: jesse | 2005-10-14 16:33:19 -0400
r17373 at hualien: jesse | 2005-10-14 15:34:42 -0400
r17359 at hualien: jesse | 2005-10-14 15:21:10 -0400
* Perltidy
r17386 at hualien: jesse | 2005-10-14 16:33:41 -0400
r17374 at hualien: jesse | 2005-10-14 15:34:43 -0400
r17361 at hualien: jesse | 2005-10-14 15:22:39 -0400
r17358 at hualien: jesse | 2005-10-14 15:06:26 -0400
r17219 at hualien (orig r3938): robert | 2005-10-07 00:20:15 -0400
r3995 at bear: rspier | 2005-10-06 21:19:24 -0700
[fsck.com #7067] - If we can't find a customfield that the user is allowed to see on a ticket, don't return any values, (when specifying a custom field)
r17275 at hualien (orig r3944): ruz | 2005-10-10 15:27:36 -0400
backport of the 3.5-TESTING at 3943
Changes
* fix for search by owner's fields, now owner is WATCHERFIELD instead of ENUM
* added backward compatible variant for Owner, next searches should work
** Owner = '<id>'
** Owner != '<id>'
** Owner = '<name>'
** Owner != '<name>'
** for other operators or if subfield(subkey) is specified search works
as for other watchers
* Fix for searches like "Cc.Name <> 'SomeBody'", was skipping tickets
with empty Cc list.
* get rid of some unint warnings
* test suite for all corner cases
r17276 at hualien (orig r3945): ruz | 2005-10-10 15:47:29 -0400
backport of the 3.5-TESTING at 3543
Changes:
* fix attachments ordering
r17313 at hualien (orig r3948): ruz | 2005-10-10 20:01:50 -0400
* get rid of "not a number" warning
r17339 at hualien (orig r3957): ruz | 2005-10-13 08:37:47 -0400
* code comments
r17340 at hualien (orig r3958): ruz | 2005-10-13 08:40:24 -0400
* new callback in html/User/Elements/Tabs
r17360 at hualien: jesse | 2005-10-14 15:21:46 -0400
* Perltidy
r17387 at hualien: jesse | 2005-10-14 16:34:33 -0400
r17375 at hualien: jesse | 2005-10-14 15:34:45 -0400
r17362 at hualien: jesse | 2005-10-14 15:56:53 -0400
* Merge fixups
r17388 at hualien: jesse | 2005-10-14 16:34:35 -0400
r17376 at hualien: jesse | 2005-10-14 15:34:47 -0400
r17363 at hualien: jesse | 2005-10-14 15:57:06 -0400
* Todo test no longer failing
r17389 at hualien: jesse | 2005-10-14 16:34:36 -0400
r17377 at hualien: jesse | 2005-10-14 15:34:48 -0400
r17371 at hualien: jesse | 2005-10-14 17:13:07 -0400
Pull up from 3.4
r17390 at hualien: jesse | 2005-10-14 23:45:35 -0400
* Tickets_Overlay.pm merging; untodoed passing tests
Modified: rt/branches/3.5-TESTING/html/User/Elements/Tabs
==============================================================================
--- rt/branches/3.5-TESTING/html/User/Elements/Tabs (original)
+++ rt/branches/3.5-TESTING/html/User/Elements/Tabs Fri Oct 14 23:57:52 2005
@@ -67,6 +67,9 @@
},
};
+ # Now let callbacks add their extra tabs
+ $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
+
foreach my $tab (sort keys %{$tabs}) {
if ($tabs->{$tab}->{'path'} eq $current_tab) {
$tabs->{$tab}->{"subtabs"} = $subtabs;
Modified: rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm (original)
+++ rt/branches/3.5-TESTING/lib/RT/Action/SendEmail.pm Fri Oct 14 23:57:52 2005
@@ -444,7 +444,7 @@
# If there is one, and we can parse it, then base our Message-ID on it
if ($msgid
- and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/
+ and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+)-\d+-\d+\@\Q$RT::Organization\E>$/
"<$1." . $self->TicketObj->id
. "-" . $self->ScripObj->id
. "-" . $self->ScripActionObj->{_Message_ID}
Modified: rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm (original)
+++ rt/branches/3.5-TESTING/lib/RT/Attachment_Overlay.pm Fri Oct 14 23:57:52 2005
@@ -290,7 +290,7 @@
return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding));
}
- # Encode::_utf8_on($content);
+ Encode::_utf8_on($content);
if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') {
# If we somehow fail to do the decode, at least push out the raw bits
eval {return( Encode::decode_utf8($content))} || return ($content);
Modified: rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm (original)
+++ rt/branches/3.5-TESTING/lib/RT/Ticket_Overlay.pm Fri Oct 14 23:57:52 2005
@@ -3719,13 +3719,17 @@
sub CustomFieldValues {
my $self = shift;
my $field = shift;
- unless ( $field =~ /^\d+$/ ) {
+ if ( $field and $field !~ /^\d+$/ ) {
my $cf = RT::CustomField->new( $self->CurrentUser );
$cf->LoadByNameAndQueue( Name => $field, Queue => $self->QueueObj->Id );
unless ( $cf->id ) {
$cf->LoadByNameAndQueue( Name => $field, Queue => '0' );
}
$field = $cf->id;
+ unless ( $field =~ /^\d+$/ ) {
+ # If we didn't find a valid cfid, give up.
+ return RT::CustomFieldValues->new($self->CurrentUser);
+ }
}
return $self->SUPER::CustomFieldValues($field);
}
Modified: rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay.pm (original)
+++ rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay.pm Fri Oct 14 23:57:52 2005
@@ -1,38 +1,38 @@
# BEGIN BPS TAGGED BLOCK {{{
-#
+#
# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
+#
+# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
# <jesse at bestpractical.com>
-#
+#
# (Except where explicitly superseded by other copyright notices)
-#
-#
+#
+#
# LICENSE:
-#
+#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
-#
+#
# This work is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-#
-#
+#
+#
# CONTRIBUTION SUBMISSION POLICY:
-#
+#
# (The following paragraph is not intended to limit the rights granted
# to you to modify and distribute this software under the terms of
# the GNU General Public License and is only of importance to you if
# you choose to contribute your changes and enhancements to the
# community by submitting them to Best Practical Solutions, LLC.)
-#
+#
# By intentionally submitting any modifications, corrections or
# derivatives to this work, or any other work intended for use with
# Request Tracker, to Best Practical Solutions, LLC, you confirm that
@@ -41,7 +41,7 @@
# royalty-free, perpetual, license to use, copy, create derivative
# works based on those contributions, and sublicense and distribute
# those contributions and any derivatives thereof.
-#
+#
# END BPS TAGGED BLOCK }}}
# Major Changes:
@@ -99,46 +99,45 @@
# metadata.
my %FIELD_METADATA = (
- Status => [ 'ENUM', ],
- Queue => [ 'ENUM' => 'Queue', ],
- Type => [ 'ENUM', ],
- Creator => [ 'ENUM' => 'User', ],
- LastUpdatedBy => [ 'ENUM' => 'User', ],
- Owner => [ 'WATCHERFIELD' => 'Owner' ],
- EffectiveId => [ 'INT', ],
- id => [ 'INT', ],
- InitialPriority => [ 'INT', ],
- FinalPriority => [ 'INT', ],
- Priority => [ 'INT', ],
- TimeLeft => [ 'INT', ],
- TimeWorked => [ 'INT', ],
- MemberOf => [ 'LINK' => To => 'MemberOf', ],
- DependsOn => [ 'LINK' => To => 'DependsOn', ],
- RefersTo => [ 'LINK' => To => 'RefersTo', ],
- HasMember => [ 'LINK' => From => 'MemberOf', ],
- DependentOn => [ 'LINK' => From => 'DependsOn', ],
- DependedOnBy => [ 'LINK' => From => 'DependsOn', ],
- ReferredToBy => [ 'LINK' => From => 'RefersTo', ],
- Told => [ 'DATE' => 'Told', ],
- Starts => [ 'DATE' => 'Starts', ],
- Started => [ 'DATE' => 'Started', ],
- Due => [ 'DATE' => 'Due', ],
- Resolved => [ 'DATE' => 'Resolved', ],
- LastUpdated => [ 'DATE' => 'LastUpdated', ],
- Created => [ 'DATE' => 'Created', ],
+ Status => [ 'ENUM', ],
+ Queue => [ 'ENUM' => 'Queue', ],
+ Type => [ 'ENUM', ],
+ Creator => [ 'ENUM' => 'User', ],
+ LastUpdatedBy => [ 'ENUM' => 'User', ],
+ Owner => [ 'WATCHERFIELD' => 'Owner', ],
+ EffectiveId => [ 'INT', ],
+ id => [ 'INT', ],
+ InitialPriority => [ 'INT', ],
+ FinalPriority => [ 'INT', ],
+ Priority => [ 'INT', ],
+ TimeLeft => [ 'INT', ],
+ TimeWorked => [ 'INT', ],
+ MemberOf => [ 'LINK' => To => 'MemberOf', ],
+ DependsOn => [ 'LINK' => To => 'DependsOn', ],
+ RefersTo => [ 'LINK' => To => 'RefersTo', ],
+ HasMember => [ 'LINK' => From => 'MemberOf', ],
+ DependentOn => [ 'LINK' => From => 'DependsOn', ],
+ DependedOnBy => [ 'LINK' => From => 'DependsOn', ],
+ ReferredToBy => [ 'LINK' => From => 'RefersTo', ],
+ Told => [ 'DATE' => 'Told', ],
+ Starts => [ 'DATE' => 'Starts', ],
+ Started => [ 'DATE' => 'Started', ],
+ Due => [ 'DATE' => 'Due', ],
+ Resolved => [ 'DATE' => 'Resolved', ],
+ LastUpdated => [ 'DATE' => 'LastUpdated', ],
+ Created => [ 'DATE' => 'Created', ],
Subject => [ 'STRING', ],
Content => [ 'TRANSFIELD', ],
ContentType => [ 'TRANSFIELD', ],
Filename => [ 'TRANSFIELD', ],
TransactionDate => [ 'TRANSDATE', ],
- Requestor => [ 'WATCHERFIELD' => 'Requestor', ],
- Requestors => [ 'WATCHERFIELD' => 'Requestor', ],
- Cc => [ 'WATCHERFIELD' => 'Cc', ],
- AdminCc => [ 'WATCHERFIELD' => 'AdminCc', ],
- Watcher => [ 'WATCHERFIELD', ],
- LinkedTo => [ 'LINKFIELD', ],
+ Requestor => [ 'WATCHERFIELD' => 'Requestor', ],
+ Requestors => [ 'WATCHERFIELD' => 'Requestor', ],
+ Cc => [ 'WATCHERFIELD' => 'Cc', ],
+ AdminCc => [ 'WATCHERFIELD' => 'AdminCc', ],
+ Watcher => ['WATCHERFIELD'],
+ LinkedTo => [ 'LINKFIELD', ],
CustomFieldValue => [ 'CUSTOMFIELD', ],
- CustomField => [ 'CUSTOMFIELD', ],
CF => [ 'CUSTOMFIELD', ],
Updated => [ 'TRANSDATE', ],
RequestorGroup => [ 'MEMBERSHIPFIELD' => 'Requestor', ],
@@ -212,10 +211,10 @@
# {{{ sub SortFields
@SORTFIELDS = qw(id Status
- Queue Subject
- Owner Created Due Starts Started
- Told
- Resolved LastUpdated Priority TimeWorked TimeLeft);
+ Queue Subject
+ Owner Created Due Starts Started
+ Told
+ Resolved LastUpdated Priority TimeWorked TimeLeft);
=head2 SortFields
@@ -270,7 +269,8 @@
$op = "!=" if $op eq "<>";
die "Invalid Operation: $op for $field"
- unless $op eq "=" or $op eq "!=";
+ unless $op eq "="
+ or $op eq "!=";
my $meta = $FIELD_METADATA{$field};
if ( defined $meta->[1] ) {
@@ -301,7 +301,7 @@
my ( $sb, $field, $op, $value, @rest ) = @_;
die "Invalid Operator $op for $field"
- unless $op =~ /^(=|!=|>|<|>=|<=)$/;
+ unless $op =~ /^(=|!=|>|<|>=|<=)$/;
$sb->_SQLLimit(
FIELD => $field,
@@ -328,7 +328,7 @@
die "Invalid Operator $op for $field" unless $op =~ /^(=|!=|IS)/io;
die "Incorrect Metadata for $field"
- unless ( defined $meta->[1] and defined $meta->[2] );
+ unless ( defined $meta->[1] and defined $meta->[2] );
my $direction = $meta->[1];
@@ -390,17 +390,17 @@
$sb->_SQLLimit(
ALIAS => $linkalias,
ENTRYAGGREGATOR => 'AND',
- FIELD => ( $is_local ? "Local$matchfield" : $matchfield ),
- OPERATOR => 'IS',
- VALUE => 'NULL',
- QUOTEVALUE => '0',
+ FIELD => ( $is_local ? "Local$matchfield" : $matchfield ),
+ OPERATOR => 'IS',
+ VALUE => 'NULL',
+ QUOTEVALUE => '0',
);
}
else {
$sb->{_sql_linkalias} = $sb->NewAlias('Links')
- unless defined $sb->{_sql_linkalias};
+ unless defined $sb->{_sql_linkalias};
$sb->_OpenParen();
@@ -415,9 +415,9 @@
$sb->_SQLLimit(
ALIAS => $sb->{_sql_linkalias},
ENTRYAGGREGATOR => 'AND',
- FIELD => ( $is_local ? "Local$matchfield" : $matchfield ),
- OPERATOR => '=',
- VALUE => $value,
+ FIELD => ( $is_local ? "Local$matchfield" : $matchfield ),
+ OPERATOR => '=',
+ VALUE => $value,
);
#If we're searching on target, join the base to ticket.id
@@ -445,23 +445,17 @@
my ( $sb, $field, $op, $value, @rest ) = @_;
die "Invalid Date Op: $op"
- unless $op =~ /^(=|>|<|>=|<=)$/;
+ unless $op =~ /^(=|>|<|>=|<=)$/;
my $meta = $FIELD_METADATA{$field};
die "Incorrect Meta Data for $field"
- unless ( defined $meta->[1] );
+ unless ( defined $meta->[1] );
- require Time::ParseDate;
use POSIX 'strftime';
- # XXX TODO FIXME: Replace me with RT::Date( Type => 'unknown' ...)
- my $time = Time::ParseDate::parsedate(
- $value,
- UK => $RT::DateDayBeforeMonth,
- PREFER_PAST => $RT::AmbiguousDayInPast,
- PREFER_FUTURE => !($RT::AmbiguousDayInPast),
- FUZZY => 1
- );
+ my $date = RT::Date->new( $sb->CurrentUser );
+ $date->Set( Format => 'unknown', Value => $value );
+ my $time = $date->Unix;
if ( $op eq "=" ) {
@@ -469,8 +463,8 @@
# particular single day. in the database, we need to check for >
# and < the edges of that day.
- my $daystart =
- strftime( "%Y-%m-%d %H:%M", gmtime( $time - ( $time % 86400 ) ) );
+ my $daystart = strftime( "%Y-%m-%d %H:%M",
+ gmtime( $time - ( $time % 86400 ) ) );
my $dayend = strftime( "%Y-%m-%d %H:%M",
gmtime( $time + ( 86399 - $time % 86400 ) ) );
@@ -548,28 +542,67 @@
# See the comments for TransLimit, they apply here too
$sb->{_sql_transalias} = $sb->NewAlias('Transactions')
- unless defined $sb->{_sql_transalias};
+ unless defined $sb->{_sql_transalias};
$sb->{_sql_trattachalias} = $sb->NewAlias('Attachments')
- unless defined $sb->{_sql_trattachalias};
+ unless defined $sb->{_sql_trattachalias};
+
+ my $date = RT::Date->new( $sb->CurrentUser );
+ $date->Set( Format => 'unknown', Value => $value );
+ my $time = $date->Unix;
- # Join Transactions To Attachments
$sb->_OpenParen;
+ if ( $op eq "=" ) {
- #Search for the right field
- $sb->_SQLLimit(
- ALIAS => $sb->{_sql_trattachalias},
- FIELD => 'Created',
- OPERATOR => $op,
- VALUE => $value,
- CASESENSITIVE => 0,
- @rest
- );
+ # if we're specifying =, that means we want everything on a
+ # particular single day. in the database, we need to check for >
+ # and < the edges of that day.
+
+ my $daystart = strftime( "%Y-%m-%d %H:%M",
+ gmtime( $time - ( $time % 86400 ) ) );
+ my $dayend = strftime( "%Y-%m-%d %H:%M",
+ gmtime( $time + ( 86399 - $time % 86400 ) ) );
+
+ $sb->_SQLLimit(
+ ALIAS => $sb->{_sql_transalias},
+ FIELD => 'Created',
+ OPERATOR => ">=",
+ VALUE => $daystart,
+ CASESENSITIVE => 0,
+ @rest
+ );
+ $sb->_SQLLimit(
+ ALIAS => $sb->{_sql_transalias},
+ FIELD => 'Created',
+ OPERATOR => "<=",
+ VALUE => $dayend,
+ CASESENSITIVE => 0,
+ @rest,
+ ENTRYAGGREGATOR => 'AND',
+ );
+
+ }
+
+ # not searching for a single day
+ else {
+
+ #Search for the right field
+ $sb->_SQLLimit(
+ ALIAS => $sb->{_sql_transalias},
+ FIELD => 'Created',
+ OPERATOR => $op,
+ VALUE => $value,
+ CASESENSITIVE => 0,
+ @rest
+ );
+ }
+
+ # Join Transactions To Attachments
$sb->_SQLJoin(
ALIAS1 => $sb->{_sql_trattachalias},
FIELD1 => 'TransactionId',
- ALIAS2 => $sb->{_transalias},
- FIELD2 => 'id'
+ ALIAS2 => $sb->{_sql_transalias},
+ FIELD2 => 'id',
);
# Join Transactions to Tickets
@@ -586,10 +619,6 @@
VALUE => 'RT::Ticket'
);
- my $d = new RT::Date( $sb->CurrentUser );
- $d->Set( Format => 'ISO', Value => $value );
- $value = $d->ISO;
-
$sb->_CloseParen;
}
@@ -639,9 +668,9 @@
my ( $self, $field, $op, $value, @rest ) = @_;
$self->{_sql_transalias} = $self->NewAlias('Transactions')
- unless defined $self->{_sql_transalias};
+ unless defined $self->{_sql_transalias};
$self->{_sql_trattachalias} = $self->NewAlias('Attachments')
- unless defined $self->{_sql_trattachalias};
+ unless defined $self->{_sql_trattachalias};
$self->_OpenParen;
@@ -764,7 +793,6 @@
my $value = shift;
my %rest = (@_);
-
# Find out what sort of watcher we're looking for
my $fieldname;
if ( ref $field ) {
@@ -772,7 +800,7 @@
}
else {
$fieldname = $field;
- $field = [[$field, $op, $value, %rest]]; # gross hack
+ $field = [ [ $field, $op, $value, %rest ] ]; # gross hack
}
my $meta = $FIELD_METADATA{$fieldname};
my $type = ( defined $meta->[1] ? $meta->[1] : undef );
@@ -780,11 +808,11 @@
# Owner was ENUM field, so "Owner = 'xxx'" allowed user to
# search by id and Name at the same time, this is workaround
# to preserve backward compatibility
- if( $fieldname eq 'Owner' ) {
+ if ( $fieldname eq 'Owner' ) {
my $flag = 0;
- for my $chunk (splice @$field) {
+ for my $chunk ( splice @$field ) {
my ( $f, $op, $value, %rest ) = @$chunk;
- if( !$rest{SUBKEY} && $op =~ /^!?=$/ ) {
+ if ( !$rest{SUBKEY} && $op =~ /^!?=$/ ) {
$self->_OpenParen unless $flag++;
my $o = RT::User->new( $self->CurrentUser );
$o->Load($value);
@@ -795,7 +823,8 @@
VALUE => $value,
%rest,
);
- } else {
+ }
+ else {
push @$field, $chunk;
}
}
@@ -812,7 +841,7 @@
for my $chunk (@$field) {
( $field, $op, $value, %rest ) = @$chunk;
$rest{SUBKEY} ||= 'EmailAddress';
-
+
my $re_negative_op = qr[!=|NOT LIKE];
$self->_OpenParen if $op =~ /$re_negative_op/;
@@ -825,7 +854,7 @@
%rest
);
- if( $op =~ /$re_negative_op/ ) {
+ if ( $op =~ /$re_negative_op/ ) {
$self->_SQLLimit(
ALIAS => $users,
FIELD => $rest{SUBKEY},
@@ -847,29 +876,29 @@
=cut
sub _WatcherJoin {
- my $self = shift;
- my $type = shift;
+ my $self = shift;
+ my $type = shift;
# we cache joins chain per watcher type
- # if we limit by requestor then we should join requestors again
+ # if we limit by requestor then we shouldn't join requestors again
# for sort or limit on other requestors
- if( $self->{'_watcher_join_users_alias'}{$type||'any'} ) {
- return $self->{'_watcher_join_users_alias'}{$type||'any'};
+ if ( $self->{'_watcher_join_users_alias'}{ $type || 'any' } ) {
+ return $self->{'_watcher_join_users_alias'}{ $type || 'any' };
}
- # we always have watcher groups for ticket
- # this join should be NORMAL
- # XXX: if we change this from Join to NewAlias+Limit
- # then Pg will complain because SB build wrong query.
- # Query looks like "FROM (Tickets LEFT JOIN CGM ON(Groups.id = CGM.GroupId)), Groups"
- # Pg doesn't like that fact that it doesn't know about Groups table yet when
- # join CGM table into Tickets. Problem is in Join method which doesn't use
- # ALIAS1 argument when build braces.
+# we always have watcher groups for ticket
+# this join should be NORMAL
+# XXX: if we change this from Join to NewAlias+Limit
+# then Pg will complain because SB build wrong query.
+# Query looks like "FROM (Tickets LEFT JOIN CGM ON(Groups.id = CGM.GroupId)), Groups"
+# Pg doesn't like that fact that it doesn't know about Groups table yet when
+# join CGM table into Tickets. Problem is in Join method which doesn't use
+# ALIAS1 argument when build braces.
my $groups = $self->Join(
- ALIAS1 => 'main',
- FIELD1 => 'id',
- TABLE2 => 'Groups',
- FIELD2 => 'Instance',
+ ALIAS1 => 'main',
+ FIELD1 => 'id',
+ TABLE2 => 'Groups',
+ FIELD2 => 'Instance',
ENTRYAGGREGATOR => 'AND'
);
$self->SUPER::Limit(
@@ -883,8 +912,8 @@
FIELD => 'Type',
VALUE => $type,
ENTRYAGGREGATOR => 'AND'
- )
- if ($type);
+ )
+ if ($type);
my $groupmembers = $self->Join(
TYPE => 'LEFT',
@@ -893,6 +922,7 @@
TABLE2 => 'CachedGroupMembers',
FIELD2 => 'GroupId'
);
+
# XXX: work around, we must hide groups that
# are members of the role group we search in,
# otherwise them result in wrong NULLs in Users
@@ -901,10 +931,10 @@
# ticket roles, so we just hide entries in CGM table
# with MemberId == GroupId from results
my $groupmembers = $self->SUPER::Limit(
- LEFTJOIN => $groupmembers,
- FIELD => 'GroupId',
- OPERATOR => '!=',
- VALUE => "$groupmembers.MemberId",
+ LEFTJOIN => $groupmembers,
+ FIELD => 'GroupId',
+ OPERATOR => '!=',
+ VALUE => "$groupmembers.MemberId",
QUOTEVALUE => 0,
);
my $users = $self->Join(
@@ -914,7 +944,7 @@
TABLE2 => 'Users',
FIELD2 => 'id'
);
- return $self->{'_watcher_join_users_alias'}{$type||'any'} = $users;
+ return $self->{'_watcher_join_users_alias'}{ $type || 'any' } = $users;
}
=head2 _WatcherMembershipLimit
@@ -1124,29 +1154,30 @@
}
-=head2 _CustomFieldDecipher
+=head2 _CustomFieldDecipher
+
Try and turn a CF descriptor into (cfid, cfname) object pair.
+
=cut
sub _CustomFieldDecipher {
my ($self, $field) = @_;
-
+
my $queue = 0;
-
if ( $field =~ /^(.+?)\.{(.+)}$/ ) {
$queue = $1;
$field = $2;
- }
+ }
$field = $1 if $field =~ /^{(.+)}$/; # trim { }
-
+
my $cfid;
-
+
if ($queue) {
my $q = RT::Queue->new( $self->CurrentUser );
$q->Load($queue) if ($queue);
-
+
my $cf;
if ( $q->id ) {
# $queue = $q->Name; # should we normalize the queue?
@@ -1155,26 +1186,29 @@
else {
$cf = RT::CustomField->new( $self->CurrentUser );
$cf->LoadByNameAndQueue( Queue => '0', Name => $field );
- }
+ }
$cfid = $cf->id if $cf;
}
-
+
return ($queue, $field, $cfid);
-
+
}
+
-
+
=head2 _CustomFieldJoin
-
+
Factor out the Join of custom fields so we can use it for sorting too
=cut
sub _CustomFieldJoin {
my ($self, $cfkey, $cfid, $field) = @_;
-
+
my $TicketCFs;
+
# Perform one Join per CustomField
+
if ( $self->{_sql_object_cf_alias}{$cfkey} ) {
$TicketCFs = $self->{_sql_object_cf_alias}{$cfkey};
}
@@ -1193,12 +1227,13 @@
VALUE => $cfid,
ENTRYAGGREGATOR => 'AND'
);
- } else {
+ }
+ else {
my $cfalias = $self->Join(
- TYPE => 'left',
- EXPRESSION => "'$field'",
- TABLE2 => 'CustomFields',
- FIELD2 => 'Name',
+ TYPE => 'left',
+ EXPRESSION => "'$field'",
+ TABLE2 => 'CustomFields',
+ FIELD2 => 'Name',
);
$TicketCFs = $self->{_sql_object_cf_alias}{$cfkey} = $self->Join(
@@ -1209,28 +1244,28 @@
FIELD2 => 'CustomField',
);
$self->SUPER::Limit(
- LEFTJOIN => $TicketCFs,
- FIELD => 'ObjectId',
- VALUE => 'main.id',
- QUOTEVALUE => 0,
+ LEFTJOIN => $TicketCFs,
+ FIELD => 'ObjectId',
+ VALUE => 'main.id',
+ QUOTEVALUE => 0,
ENTRYAGGREGATOR => 'AND',
);
}
$self->SUPER::Limit(
- LEFTJOIN => $TicketCFs,
- FIELD => 'ObjectType',
- VALUE => 'RT::Ticket',
+ LEFTJOIN => $TicketCFs,
+ FIELD => 'ObjectType',
+ VALUE => 'RT::Ticket',
ENTRYAGGREGATOR => 'AND'
);
$self->SUPER::Limit(
- LEFTJOIN => $TicketCFs,
- FIELD => 'Disabled',
- OPERATOR => '=',
- VALUE => '0',
- ENTRYAGGREGATOR => 'AND');
+ LEFTJOIN => $TicketCFs,
+ FIELD => 'Disabled',
+ OPERATOR => '=',
+ VALUE => '0',
+ ENTRYAGGREGATOR => 'AND'
+ );
}
-
return $TicketCFs;
}
@@ -1266,7 +1301,7 @@
my $cfkey = $cfid ? $cfid : "$queue.$field";
my $TicketCFs = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
- $self->_OpenParen if ($null_columns_ok);
+ $self->_OpenParen if ($null_columns_ok);
$self->_SQLLimit(
ALIAS => $TicketCFs,
@@ -1289,8 +1324,6 @@
}
$self->_CloseParen if ($null_columns_ok);
-
-
}
# End Helper Functions
@@ -1310,19 +1343,21 @@
my $self = shift;
my @args = @_;
my $clause;
- my @res = ();
+ my @res = ();
my $order = 0;
- foreach my $row( @args ) {
- if( $row->{ALIAS} || $row->{FIELD} !~ /\./ ) {
- push @res, $row;
- next;
- }
- my ($field, $subkey) = split /\./, $row->{FIELD}, 2;
- my $meta = $self->FIELDS->{ $field };
- if( $meta->[0] eq 'WATCHERFIELD' ) {
- my $users = $self->_WatcherJoin( $meta->[1] );
- push @res, { %$row, ALIAS => $users, FIELD => $subkey };
+ foreach my $row (@args) {
+ if ( $row->{ALIAS} || $row->{FIELD} !~ /\./ ) {
+ push @res, $row;
+ next;
+ }
+ my ( $field, $subkey ) = split /\./, $row->{FIELD}, 2;
+ my $meta = $self->FIELDS->{$field};
+ if ( $meta->[0] eq 'WATCHERFIELD' ) {
+ my $users = $self->_WatcherJoin( $meta->[1], "order" . $order++ );
+ push @res, { %$row, ALIAS => $users, FIELD => $subkey };
+
+
} elsif ( $meta->[0] eq 'CUSTOMFIELD' ) {
my ($queue, $field, $cfid ) = $self->_CustomFieldDecipher( $subkey );
my $cfkey = $cfid ? $cfid : "$queue.$field";
@@ -1375,12 +1410,12 @@
push @res, { %$row, FIELD => "Owner=$nobodyId", ORDER => $order } ;
push @res, { %$row, FIELD => "Priority", ORDER => $order } ;
-
- } else {
- push @res, $row;
- }
- }
- return $self->SUPER::OrderByCols( @res );
+ }
+ else {
+ push @res, $row;
+ }
+ }
+ return $self->SUPER::OrderByCols(@res);
}
# }}}
@@ -1405,13 +1440,15 @@
DESCRIPTION => undef,
@_
);
- $args{'DESCRIPTION'} = $self->loc( "[_1] [_2] [_3]",
- $args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'} )
- if ( !defined $args{'DESCRIPTION'} );
+ $args{'DESCRIPTION'} = $self->loc(
+ "[_1] [_2] [_3]", $args{'FIELD'},
+ $args{'OPERATOR'}, $args{'VALUE'}
+ )
+ if ( !defined $args{'DESCRIPTION'} );
my $index = $self->_NextIndex;
- #make the TicketRestrictions hash the equivalent of whatever we just passed in;
+#make the TicketRestrictions hash the equivalent of whatever we just passed in;
%{ $self->{'TicketRestrictions'}{$index} } = %args;
@@ -1419,13 +1456,15 @@
# If we're looking at the effective id, we don't want to append the other clause
# which limits us to tickets where id = effective id
- if ( $args{'FIELD'} eq 'EffectiveId' &&
- (!$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) ) {
+ if ( $args{'FIELD'} eq 'EffectiveId'
+ && ( !$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) )
+ {
$self->{'looking_at_effective_id'} = 1;
}
- if ( $args{'FIELD'} eq 'Type' &&
- (!$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) ) {
+ if ( $args{'FIELD'} eq 'Type'
+ && ( !$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) )
+ {
$self->{'looking_at_type'} = 1;
}
@@ -1442,7 +1481,7 @@
sub _FreezeThawKeys {
'TicketRestrictions', 'restriction_index', 'looking_at_effective_id',
- 'looking_at_type';
+ 'looking_at_type';
}
# {{{ sub FreezeLimits
@@ -1479,8 +1518,8 @@
require MIME::Base64;
#We don't need to die if the thaw fails.
- @{$self}{ $self->_FreezeThawKeys } =
- eval { @{ Storable::thaw( MIME::Base64::base64_decode($in) ) }; };
+ @{$self}{ $self->_FreezeThawKeys }
+ = eval { @{ Storable::thaw( MIME::Base64::base64_decode($in) ) }; };
$RT::Logger->error($@) if $@;
@@ -1526,8 +1565,9 @@
FIELD => 'Queue',
VALUE => $args{VALUE},
OPERATOR => $args{'OPERATOR'},
- DESCRIPTION =>
- join( ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE}, ),
+ DESCRIPTION => join(
+ ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE},
+ ),
);
}
@@ -1613,8 +1653,8 @@
FIELD => 'Type',
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
- DESCRIPTION =>
- join( ' ', $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, ),
+ DESCRIPTION => join( ' ',
+ $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, ),
);
}
@@ -1641,9 +1681,8 @@
FIELD => 'Subject',
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
- DESCRIPTION => join(
- ' ', $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'},
- ),
+ DESCRIPTION => join( ' ',
+ $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'}, ),
);
}
@@ -1676,7 +1715,7 @@
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
DESCRIPTION =>
- join( ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, ),
+ join( ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, ),
);
}
@@ -1751,8 +1790,8 @@
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
DESCRIPTION => join( ' ',
- $self->loc('Final Priority'),
- $args{'OPERATOR'}, $args{'VALUE'}, ),
+ $self->loc('Final Priority'), $args{'OPERATOR'},
+ $args{'VALUE'}, ),
);
}
@@ -1830,8 +1869,8 @@
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
DESCRIPTION => join( ' ',
- $self->loc('Ticket content'),
- $args{'OPERATOR'}, $args{'VALUE'}, ),
+ $self->loc('Ticket content'), $args{'OPERATOR'},
+ $args{'VALUE'}, ),
);
}
@@ -1915,8 +1954,8 @@
FIELD => 'Owner',
VALUE => $args{'VALUE'},
OPERATOR => $args{'OPERATOR'},
- DESCRIPTION =>
- join( ' ', $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), ),
+ DESCRIPTION => join( ' ',
+ $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), ),
);
}
@@ -1975,7 +2014,9 @@
sub LimitRequestor {
my $self = shift;
my %args = (@_);
- $RT::Logger->error("Tickets->LimitRequestor is deprecated at (". join(":",caller).")");
+ $RT::Logger->error( "Tickets->LimitRequestor is deprecated at ("
+ . join( ":", caller )
+ . ")" );
$self->LimitWatcher( TYPE => 'Requestor', @_ );
}
@@ -2051,8 +2092,8 @@
# translate RT2 From/To naming to RT3 TicketSQL naming
my %fromToMap = qw(DependsOn DependentOn
- MemberOf HasMember
- RefersTo ReferredToBy);
+ MemberOf HasMember
+ RefersTo ReferredToBy);
my $type = $args{'TYPE'};
$type = $fromToMap{$type} if exists( $fromToMap{$type} );
@@ -2185,10 +2226,9 @@
#Set the description if we didn't get handed it above
unless ( $args{'DESCRIPTION'} ) {
- $args{'DESCRIPTION'} =
- $args{'FIELD'} . " "
- . $args{'OPERATOR'} . " "
- . $args{'VALUE'} . " GMT";
+ $args{'DESCRIPTION'} = $args{'FIELD'} . " "
+ . $args{'OPERATOR'} . " "
+ . $args{'VALUE'} . " GMT";
}
$self->Limit(%args);
@@ -2262,10 +2302,9 @@
#Set the description if we didn't get handed it above
unless ( $args{'DESCRIPTION'} ) {
- $args{'DESCRIPTION'} =
- $args{'FIELD'} . " "
- . $args{'OPERATOR'} . " "
- . $args{'VALUE'} . " GMT";
+ $args{'DESCRIPTION'} = $args{'FIELD'} . " "
+ . $args{'OPERATOR'} . " "
+ . $args{'VALUE'} . " GMT";
}
$self->Limit(%args);
@@ -2321,12 +2360,12 @@
#If we are looking to compare with a null value.
if ( $args{'OPERATOR'} =~ /^is$/i ) {
- $args{'DESCRIPTION'} ||=
- $self->loc( "Custom field [_1] has no value.", $CF->Name );
+ $args{'DESCRIPTION'}
+ ||= $self->loc( "Custom field [_1] has no value.", $CF->Name );
}
elsif ( $args{'OPERATOR'} =~ /^is not$/i ) {
- $args{'DESCRIPTION'} ||=
- $self->loc( "Custom field [_1] has a value.", $CF->Name );
+ $args{'DESCRIPTION'}
+ ||= $self->loc( "Custom field [_1] has a value.", $CF->Name );
}
# if we're not looking to compare with a null value
@@ -2344,16 +2383,16 @@
my @rest;
@rest = ( ENTRYAGGREGATOR => 'AND' )
- if ( $CF->Type eq 'SelectMultiple' );
+ if ( $CF->Type eq 'SelectMultiple' );
$self->Limit(
VALUE => $args{VALUE},
FIELD => "CF."
- . (
+ . (
$q
? $q . ".{" . $CF->Name . "}"
: $CF->Name
- ),
+ ),
OPERATOR => $args{OPERATOR},
CUSTOMFIELD => 1,
@rest,
@@ -2442,7 +2481,8 @@
push( @{ $self->{'items_array'} }, $item );
}
$self->GotoItem($placeholder);
- $self->{'items_array'} = $self->ItemsOrderBy( $self->{'items_array'} );
+ $self->{'items_array'}
+ = $self->ItemsOrderBy( $self->{'items_array'} );
}
return ( $self->{'items_array'} );
}
@@ -2458,18 +2498,21 @@
my $Ticket = $self->SUPER::Next();
if ( ( defined($Ticket) ) and ( ref($Ticket) ) ) {
- if ( $Ticket->__Value('Status') eq 'deleted' &&
- !$self->{'allow_deleted_search'} ) {
- return($self->Next());
- }
- # Since Ticket could be granted with more rights instead
- # of being revoked, it's ok if queue rights allow
- # ShowTicket. It seems need another query, but we have
- # rights cache in Principal::HasRight.
- elsif ($Ticket->QueueObj->CurrentUserHasRight('ShowTicket') ||
- $Ticket->CurrentUserHasRight('ShowTicket')) {
- return($Ticket);
- }
+ if ( $Ticket->__Value('Status') eq 'deleted'
+ && !$self->{'allow_deleted_search'} )
+ {
+ return ( $self->Next() );
+ }
+
+ # Since Ticket could be granted with more rights instead
+ # of being revoked, it's ok if queue rights allow
+ # ShowTicket. It seems need another query, but we have
+ # rights cache in Principal::HasRight.
+ elsif ($Ticket->QueueObj->CurrentUserHasRight('ShowTicket')
+ || $Ticket->CurrentUserHasRight('ShowTicket') )
+ {
+ return ($Ticket);
+ }
if ( $Ticket->__Value('Status') eq 'deleted' ) {
return ( $self->Next() );
@@ -2552,10 +2595,10 @@
my $self = shift;
my $field = shift;
map $self->{'TicketRestrictions'}{$_}{'VALUE'}, grep {
- $self->{'TicketRestrictions'}{$_}{'FIELD'} eq $field
- && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "="
- }
- keys %{ $self->{'TicketRestrictions'} };
+ $self->{'TicketRestrictions'}{$_}{'FIELD'} eq $field
+ && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "="
+ }
+ keys %{ $self->{'TicketRestrictions'} };
}
# }}}
@@ -2614,9 +2657,9 @@
#use Data::Dumper;
#print Dumper($restriction),"\n";
- # We need to reimplement the subclause aggregation that SearchBuilder does.
- # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main',
- # Then SB AND's the different Subclauses together.
+ # We need to reimplement the subclause aggregation that SearchBuilder does.
+ # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main',
+ # Then SB AND's the different Subclauses together.
# So, we want to group things into Subclauses, convert them to
# SQL, and then join them with the appropriate DefaultEA.
@@ -2639,14 +2682,15 @@
}
die "I don't know about $field yet"
- unless ( exists $FIELD_METADATA{$realfield} or $restriction->{CUSTOMFIELD} );
+ unless ( exists $FIELD_METADATA{$realfield}
+ or $restriction->{CUSTOMFIELD} );
my $type = $FIELD_METADATA{$realfield}->[0];
my $op = $restriction->{'OPERATOR'};
my $value = (
- grep { defined }
- map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET)
+ grep {defined}
+ map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET)
)[0];
# this performs the moral equivalent of defined or/dor/C<//>,
@@ -2664,10 +2708,12 @@
# defined $restriction->{'TARGET'} ?
# $restriction->{TARGET} )
- my $ea = $restriction->{ENTRYAGGREGATOR} || $DefaultEA{$type} || "AND";
+ my $ea = $restriction->{ENTRYAGGREGATOR}
+ || $DefaultEA{$type}
+ || "AND";
if ( ref $ea ) {
die "Invalid operator $op for $field ($type)"
- unless exists $ea->{$op};
+ unless exists $ea->{$op};
$ea = $ea->{$op};
}
@@ -2715,8 +2761,10 @@
delete $self->{'raw_rows'};
delete $self->{'rows'};
delete $self->{'count_all'};
+
my $sql = $self->Query; # Violating the _SQL namespace
if ( !$sql || $self->{'RecalcTicketLimits'} ) {
+
# "Restrictions to Clauses Branch\n";
my $clauseRef = eval { $self->_RestrictionsToClauses; };
if ($@) {
@@ -2753,7 +2801,7 @@
$self->{'item_map'}->{$id}->{'defined'} = 1;
$self->{'item_map'}->{$id}->{prev} = $prev;
$self->{'item_map'}->{$id}->{next} = $items->[0]->EffectiveId
- if ( $items->[0] );
+ if ( $items->[0] );
$prev = $id;
}
$self->{'item_map'}->{'last'} = $prev;
@@ -2774,13 +2822,14 @@
sub ItemMap {
my $self = shift;
$self->_BuildItemMap()
- unless ( $self->{'items_array'} and $self->{'item_map'} );
+ unless ( $self->{'items_array'} and $self->{'item_map'} );
return ( $self->{'item_map'} );
}
=cut
+
}
@@ -2801,7 +2850,6 @@
$self->RedoSearch();
}
-
=head1 FLAGS
RT::Tickets supports several flags which alter search behavior:
Modified: rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay_SQL.pm
==============================================================================
--- rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay_SQL.pm (original)
+++ rt/branches/3.5-TESTING/lib/RT/Tickets_Overlay_SQL.pm Fri Oct 14 23:57:52 2005
@@ -379,11 +379,11 @@
my $first = 1;
# Build SQL from the data hash
- for my $data ( @{ $clauses->{$f} } ) {
- $sql .= $data->[0] unless $first; $first=0;
- $sql .= " '". $data->[2] . "' ";
- $sql .= $data->[3] . " ";
- $sql .= "'". $data->[4] . "' ";
+ for my $data ( @{ $clauses->{$f} } ) {
+ $sql .= $data->[0] unless $first; $first=0; # ENTRYAGGREGATOR
+ $sql .= " '". $data->[2] . "' "; # FIELD
+ $sql .= $data->[3] . " "; # OPERATOR
+ $sql .= "'". $data->[4] . "' "; # VALUE
}
push @sql, " ( " . $sql . " ) ";
Modified: rt/branches/3.5-TESTING/lib/t/regression/12-search.t
==============================================================================
--- rt/branches/3.5-TESTING/lib/t/regression/12-search.t (original)
+++ rt/branches/3.5-TESTING/lib/t/regression/12-search.t Fri Oct 14 23:57:52 2005
@@ -163,14 +163,9 @@
$tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search'");
is($tix->Count, 6, "LIKE requestor");
-TODO: {
-
- local $TODO = "Can't search for 'no requestor";
- $tix = RT::Tickets->new($RT::SystemUser);
- $tix->FromSQL("Queue = '$queue' AND Requestors IS NULL");
- is($tix->Count, 1, "Search for no requestor");
-
-};
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors IS NULL");
+is($tix->Count, 1, "Search for no requestor");
$tix = RT::Tickets->new($RT::SystemUser);
$tix->FromSQL("Queue = '$queue' AND Subject = 'SearchTest1'");
Modified: rt/branches/3.5-TESTING/lib/t/regression/13-attribute-tests.t
==============================================================================
--- rt/branches/3.5-TESTING/lib/t/regression/13-attribute-tests.t (original)
+++ rt/branches/3.5-TESTING/lib/t/regression/13-attribute-tests.t Fri Oct 14 23:57:52 2005
@@ -58,9 +58,7 @@
$runid_attr = $user->FirstAttribute($runid);
ok($runid_attr, "got some sort of attribute");
isa_ok($runid_attr, 'RT::Attribute');
-TODO: { local $TODO = "which attribute is returned by FirstAttribute is undefined";
- is($runid_attr->Content, 'First', "got the first content back still");
-}
+is($runid_attr->Content, 'First', "got the first content back still");
is ($attr->Count,3, " Three attrs after adding a secondvalue to $runid");
($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "First");
Modified: rt/branches/3.5-TESTING/lib/t/regression/20-sort-by-requestor.t
==============================================================================
--- rt/branches/3.5-TESTING/lib/t/regression/20-sort-by-requestor.t (original)
+++ rt/branches/3.5-TESTING/lib/t/regression/20-sort-by-requestor.t Fri Oct 14 23:57:52 2005
@@ -118,14 +118,14 @@
ok($id, "added group to requestors group") or diag("error: $msg");
}
+ my $tix = RT::Tickets->new($RT::SystemUser);
+ $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
TODO: {
local $TODO = "if group has non users members we get wrong order";
- my $tix = RT::Tickets->new($RT::SystemUser);
- $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
$tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
check_emails_order($tix, 7, 'ASC');
+}
$tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
check_emails_order($tix, 7, 'DESC');
-}
# vim:ft=perl:
More information about the Rt-commit
mailing list