summaryrefslogtreecommitdiff
path: root/rt/lib/RT/ObjectKeywords.pm
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/ObjectKeywords.pm')
-rw-r--r--rt/lib/RT/ObjectKeywords.pm234
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;
+