X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FCustomFields_Overlay.pm;h=16b86ba508e1373c6db23f3027b9bdba10cbd8fe;hp=b22e8b461a8b2c92eec6a0a8169b1748a894d634;hb=ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de diff --git a/rt/lib/RT/CustomFields_Overlay.pm b/rt/lib/RT/CustomFields_Overlay.pm index b22e8b461..16b86ba50 100644 --- a/rt/lib/RT/CustomFields_Overlay.pm +++ b/rt/lib/RT/CustomFields_Overlay.pm @@ -1,8 +1,8 @@ -# {{{ BEGIN BPS TAGGED BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2007 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -22,7 +22,9 @@ # # 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. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/copyleft/gpl.html. # # # CONTRIBUTION SUBMISSION POLICY: @@ -42,7 +44,7 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# }}} END BPS TAGGED BLOCK +# END BPS TAGGED BLOCK }}} =head1 NAME RT::CustomFields - a collection of RT CustomField objects @@ -64,13 +66,31 @@ ok (require RT::CustomFields); =cut + +package RT::CustomFields; + use strict; no warnings qw(redefine); +use DBIx::SearchBuilder::Unique; + + +sub _OCFAlias { + my $self = shift; + unless ($self->{_sql_ocfalias}) { + + $self->{'_sql_ocfalias'} = $self->NewAlias('ObjectCustomFields'); + $self->Join( ALIAS1 => 'main', + FIELD1 => 'id', + ALIAS2 => $self->_OCFAlias, + FIELD2 => 'CustomField' ); + } + return($self->{_sql_ocfalias}); +} # {{{ sub LimitToGlobalOrQueue -=item LimitToGlobalOrQueue QUEUEID +=head2 LimitToGlobalOrQueue QUEUEID Limits the set of custom fields found to global custom fields or those tied to the queue with ID QUEUEID @@ -79,8 +99,8 @@ Limits the set of custom fields found to global custom fields or those tied to t sub LimitToGlobalOrQueue { my $self = shift; my $queue = shift; - $self->LimitToQueue($queue); - $self->LimitToGlobal(); + $self->LimitToGlobalOrObjectId( $queue ); + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -99,11 +119,12 @@ sub LimitToQueue { my $self = shift; my $queue = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', + $self->Limit (ALIAS => $self->_OCFAlias, + ENTRYAGGREGATOR => 'OR', + FIELD => 'ObjectId', VALUE => "$queue") if defined $queue; - + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -121,10 +142,11 @@ another call to this method or LimitToQueue sub LimitToGlobal { my $self = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', + $self->Limit (ALIAS => $self->_OCFAlias, + ENTRYAGGREGATOR => 'OR', + FIELD => 'ObjectId', VALUE => 0); - + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -133,9 +155,9 @@ sub LimitToGlobal { =head2 _DoSearch - A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that _Disabled ro -ws never get seen unless -we're explicitly trying to see them. +A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that + _Disabled rows never get seen unless we're explicitly trying to see +them. =cut @@ -152,6 +174,91 @@ sub _DoSearch { } # }}} + +# {{{ sub Next + +=head2 Next + +Returns the next custom field that this user can see. + +=cut + +sub Next { + my $self = shift; + + + my $CF = $self->SUPER::Next(); + if ((defined($CF)) and (ref($CF))) { + + if ($CF->CurrentUserHasRight('SeeCustomField')) { + return($CF); + } + + #If the user doesn't have the right to show this queue + else { + return($self->Next()); + } + } + #if there never was any queue + else { + return(undef); + } + +} +# }}} + +sub LimitToLookupType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); +} + +sub LimitToChildType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); + $self->Limit( FIELD => 'LookupType', ENDSWITH => "$lookup" ); +} + +sub LimitToParentType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); + $self->Limit( FIELD => 'LookupType', STARTSWITH => "$lookup" ); +} + +sub LimitToGlobalOrObjectId { + my $self = shift; + my $global_only = 1; + + + foreach my $id (@_) { + $self->Limit( ALIAS => $self->_OCFAlias, + FIELD => 'ObjectId', + OPERATOR => '=', + VALUE => $id || 0, + ENTRYAGGREGATOR => 'OR' ); + $global_only = 0 if $id; + } + + $self->Limit( ALIAS => $self->_OCFAlias, + FIELD => 'ObjectId', + OPERATOR => '=', + VALUE => 0, + ENTRYAGGREGATOR => 'OR' ) unless $global_only; + + $self->OrderByCols( + { ALIAS => $self->_OCFAlias, FIELD => 'ObjectId' }, + { ALIAS => $self->_OCFAlias, FIELD => 'SortOrder' }, + ); + + # This doesn't work on postgres. + #$self->OrderBy( ALIAS => $class_cfs , FIELD => "SortOrder", ORDER => 'ASC'); + +} 1;