summaryrefslogtreecommitdiff
path: root/rt/lib/RT/Watchers.pm
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/Watchers.pm')
-rwxr-xr-xrt/lib/RT/Watchers.pm226
1 files changed, 226 insertions, 0 deletions
diff --git a/rt/lib/RT/Watchers.pm b/rt/lib/RT/Watchers.pm
new file mode 100755
index 000000000..c55adda3f
--- /dev/null
+++ b/rt/lib/RT/Watchers.pm
@@ -0,0 +1,226 @@
+# $Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Attic/Watchers.pm,v 1.1 2002-08-12 06:17:07 ivan Exp $
+# (c) 1996-2000 Jesse Vincent <jesse@fsck.com>
+# This software is redistributable under the terms of the GNU GPL
+
+=head1 NAME
+
+ RT::Watchers - Collection of RT Watcher objects
+
+=head1 SYNOPSIS
+
+ use RT::Watchers;
+ my $watchers = new RT::Watchers($CurrentUser);
+ while (my $watcher = $watchers->Next()) {
+ print $watcher->Id . "is a watcher";
+ }
+
+=head1 DESCRIPTION
+
+This module should never be called directly by client code. it's an internal module which
+should only be accessed through exported APIs in Ticket, Queue and other similar objects.
+
+
+=head1 METHODS
+
+=begin testing
+
+ok(require RT::TestHarness);
+ok(require RT::Watchers);
+
+=end testing
+
+=cut
+
+package RT::Watchers;
+
+use strict;
+use vars qw( @ISA );
+
+
+require RT::EasySearch;
+require RT::Watcher;
+@ISA= qw(RT::EasySearch);
+
+
+# {{{ sub _Init
+sub _Init {
+ my $self = shift;
+
+ $self->{'table'} = "Watchers";
+ $self->{'primary_key'} = "id";
+ return($self->SUPER::_Init(@_));
+}
+# }}}
+
+# {{{ sub Limit
+
+=head2 Limit
+
+ A wrapper around RT::EasySearch::Limit which sets
+the default entry aggregator to 'AND'
+
+=cut
+
+sub Limit {
+ my $self = shift;
+ my %args = ( ENTRYAGGREGATOR => 'AND',
+ @_);
+
+ $self->SUPER::Limit(%args);
+}
+# }}}
+
+# {{{ sub LimitToTicket
+
+=head2 LimitToTicket
+
+Takes a single arg which is a ticket id
+Limits to watchers of that ticket
+
+=cut
+
+sub LimitToTicket {
+ my $self = shift;
+ my $ticket = shift;
+ $self->Limit( ENTRYAGGREGATOR => 'OR',
+ FIELD => 'Value',
+ VALUE => $ticket);
+ $self->Limit (ENTRYAGGREGATOR => 'AND',
+ FIELD => 'Scope',
+ VALUE => 'Ticket');
+}
+# }}}
+
+# {{{ sub LimitToQueue
+
+=head2 LimitToQueue
+
+Takes a single arg, which is a queue id
+Limits to watchers of that queue.
+
+=cut
+
+sub LimitToQueue {
+ my $self = shift;
+ my $queue = shift;
+ $self->Limit (ENTRYAGGREGATOR => 'OR',
+ FIELD => 'Value',
+ VALUE => $queue);
+ $self->Limit (ENTRYAGGREGATOR => 'AND',
+ FIELD => 'Scope',
+ VALUE => 'Queue');
+}
+# }}}
+
+# {{{ sub LimitToType
+
+=head2 LimitToType
+
+Takes a single string as its argument. That string is a watcher type
+which is one of 'Requestor', 'Cc' or 'AdminCc'
+Limits to watchers of that type
+
+=cut
+
+
+sub LimitToType {
+ my $self = shift;
+ my $type = shift;
+ $self->Limit(FIELD => 'Type',
+ VALUE => "$type");
+}
+# }}}
+
+# {{{ sub LimitToRequestors
+
+=head2 LimitToRequestors
+
+Limits to watchers of type 'Requestor'
+
+=cut
+
+sub LimitToRequestors {
+ my $self = shift;
+ $self->LimitToType("Requestor");
+}
+# }}}
+
+# {{{ sub LimitToCc
+
+=head2 LimitToCc
+
+Limits to watchers of type 'Cc'
+
+=cut
+
+sub LimitToCc {
+ my $self = shift;
+ $self->LimitToType("Cc");
+}
+# }}}
+
+# {{{ sub LimitToAdminCc
+
+=head2 LimitToAdminCc
+
+Limits to watchers of type AdminCc
+
+=cut
+
+sub LimitToAdminCc {
+ my $self = shift;
+ $self->LimitToType("AdminCc");
+}
+# }}}
+
+# {{{ sub Emails
+
+=head2 Emails
+
+# Return a (reference to a) list of emails
+
+=cut
+
+sub Emails {
+ my $self = shift;
+ my @list; # List is a list of watcher email addresses
+
+ # $watcher is an RT::Watcher object
+ while (my $watcher=$self->Next()) {
+ push(@list, $watcher->Email);
+ }
+ return \@list;
+}
+# }}}
+
+# {{{ sub EmailsAsString
+
+=head2 EmailsAsString
+
+# Returns the RT::Watchers->Emails as a comma seperated string
+
+=cut
+
+sub EmailsAsString {
+ my $self = shift;
+ return(join(", ",@{$self->Emails}));
+}
+# }}}
+
+# {{{ sub NewItem
+
+
+
+sub NewItem {
+ my $self = shift;
+
+ use RT::Watcher;
+ my $item = new RT::Watcher($self->CurrentUser);
+ return($item);
+}
+# }}}
+1;
+
+
+
+