diff options
Diffstat (limited to 'rt/lib/RT/ObjectKeywords.pm')
-rw-r--r-- | rt/lib/RT/ObjectKeywords.pm | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/rt/lib/RT/ObjectKeywords.pm b/rt/lib/RT/ObjectKeywords.pm new file mode 100644 index 000000000..5df996e37 --- /dev/null +++ b/rt/lib/RT/ObjectKeywords.pm @@ -0,0 +1,234 @@ +#$Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Attic/ObjectKeywords.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $ + +package RT::ObjectKeywords; + +use strict; +use vars qw( @ISA ); + +=head1 NAME + + RT::ObjectKeywords - note warning + +=head1 WARNING + +This module should B<NEVER> be called directly by client code. its API is entirely through RT ticket or other objects which can have keywords assigned. + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=begin testing + +ok (require RT::TestHarness); +ok (require RT::ObjectKeywords); + +=end testing + +=cut + +use RT::EasySearch; +use RT::ObjectKeyword; + +@ISA = qw( RT::EasySearch ); + +# {{{ sub _Init +sub _Init { + my $self = shift; + $self->{'table'} = 'ObjectKeywords'; + $self->{'primary_key'} = 'id'; + return ($self->SUPER::_Init(@_)); +} +# }}} + +# {{{ sub NewItem +sub NewItem { + my $self = shift; + return (new RT::ObjectKeyword($self->CurrentUser)); +} +# }}} + +# {{{ sub LimitToKeywordSelect + +=head2 LimitToKeywordSelect + + Takes a B<RT::KeywordSelect> id or Nameas its single argument. limits the returned set of ObjectKeywords +to ObjectKeywords which apply to that ticket + +=cut + + +sub LimitToKeywordSelect { + my $self = shift; + my $keywordselect = shift; + + if ($keywordselect =~ /^\d+$/) { + + $self->Limit(FIELD => 'KeywordSelect', + OPERATOR => '=', + ENTRYAGGREGATOR => 'OR', + VALUE => "$keywordselect"); + } + + #We're limiting by name. time to be klever + else { + my $ks = $self->NewAlias('KeywordSelects'); + $self->Join(ALIAS1 => $ks, FIELD1 => 'id', + ALIAS2 => 'main', FIELD2 => 'KeywordSelect'); + + $self->Limit( ALIAS => "$ks", + FIELD => 'Name', + VALUE => "$keywordselect", + OPERATOR => "=", + ENTRYAGGREGATOR => "OR"); + + $self->Limit ( ALIAS => "$ks", + FIELD => 'ObjectType', + VALUE => 'Ticket', + OPERATOR => '=', + ); + + $self->Limit ( ALIAS => "$ks", + FIELD => 'ObjectField', + VALUE => 'Queue', + OPERATOR => '=', + ); + + + # TODO +++ we need to be able to limit the returned + # keywordselects to ones that apply only to this queue + # $self->Limit( ALIAS => "$ks", + # FIELD => 'ObjectValue', + # VALUE => $self->QueueObj->Id, + # OPERATOR => "=", + # ENTRYAGGREGATOR => "OR"); + + } + + + +} + +# }}} + +# {{{ LimitToTicket + +=head2 LimitToTicket TICKET_ID + + Takes an B<RT::Ticket> id as its single argument. limits the returned set of ObjectKeywords +to ObjectKeywords which apply to that ticket + +=cut + +sub LimitToTicket { + my $self = shift; + my $ticket = shift; + $self->Limit(FIELD => 'ObjectId', + OPERATOR => '=', + ENTRYAGGREGATOR => 'OR', + VALUE => "$ticket"); + + $self->Limit(FIELD => 'ObjectType', + OPERATOR => '=', + ENTRYAGGREGATOR => 'OR', + VALUE => "Ticket"); + +} + +# }}} + +# {{{ sub _DoSearch +#wrap around _DoSearch so that we can build the hash of returned +#values + +sub _DoSearch { + my $self = shift; + # $RT::Logger->debug("Now in ".$self."->_DoSearch"); + my $return = $self->SUPER::_DoSearch(@_); + # $RT::Logger->debug("In $self ->_DoSearch. return from SUPER::_DoSearch was $return\n"); + $self->_BuildHash(); + return ($return); +} +# }}} + +# {{{ sub _BuildHash +#Build a hash of this ACL's entries. +sub _BuildHash { + my $self = shift; + + while (my $entry = $self->Next) { + + my $hashkey = $entry->Keyword; + $self->{'as_hash'}->{"$hashkey"} =1; + } + +} +# }}} + +# {{{ HasEntry + +=head2 HasEntry KEYWORD_ID + + Takes a keyword id and returns true if this ObjectKeywords object has an entry for that +keyword. Returns undef otherwise. + +=cut + +sub HasEntry { + + my $self = shift; + my $keyword = shift; + + + #if we haven't done the search yet, do it now. + $self->_DoSearch(); + + # $RT::Logger->debug("Now in ".$self."->HasEntry\n"); + + + if ($self->{'as_hash'}->{ $keyword } == 1) { + return(1); + } + else { + return(undef); + } +} + +# }}} + +# {{{ sub RelativePaths + +=head2 RelativePaths + +# Return a (reference to a) list of KeywordRelativePaths + +=cut + +sub RelativePaths { + my $self = shift; + + my @list; + + # Here $key is a RT::ObjectKeyword + while (my $key=$self->Next()) { + push(@list, $key->KeywordRelativePath); + } + return(\@list); +} +# }}} + +# {{{ sub RelativePathsAsString + +=head2 RelativePathsAsString + +# Returns the RT::ObjectKeywords->RelativePaths as a comma seperated string + +=cut + +sub RelativePathsAsString { + my $self = shift; + return(join(", ",@{$self->KeywordRelativePaths})); +} +# }}} + +1; + |