diff options
Diffstat (limited to 'rt/lib/RTx/Calendar.pm')
-rw-r--r-- | rt/lib/RTx/Calendar.pm | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/rt/lib/RTx/Calendar.pm b/rt/lib/RTx/Calendar.pm deleted file mode 100644 index 20568e853..000000000 --- a/rt/lib/RTx/Calendar.pm +++ /dev/null @@ -1,233 +0,0 @@ -package RTx::Calendar; - -use strict; -use base qw( Exporter ); -use DateTime; -use DateTime::Set; - -our $VERSION = "0.07"; - -our @EXPORT_OK = qw( FirstDay LastDay ); - -sub FirstDay { - my ($year, $month, $matchday) = @_; - my $set = DateTime::Set->from_recurrence( - next => sub { $_[0]->truncate( to => 'day' )->subtract( days => 1 ) } - ); - - my $day = DateTime->new( year => $year, month => $month ); - - $day = $set->next($day) while $day->day_of_week != $matchday; - $day; - -} - -sub LastDay { - my ($year, $month, $matchday) = @_; - my $set = DateTime::Set->from_recurrence( - next => sub { $_[0]->truncate( to => 'day' )->add( days => 1 ) } - ); - - my $day = DateTime->last_day_of_month( year => $year, month => $month ); - - $day = $set->next($day) while $day->day_of_week != $matchday; - $day; -} - -# we can't use RT::Date::Date because it uses gmtime -# and we need localtime -sub LocalDate { - my $ts = shift; - my ($d,$m,$y) = (localtime($ts))[3..5]; - sprintf "%4d-%02d-%02d", ($y + 1900), ++$m, $d; -} - -sub DatesClauses { - my ($Dates, $begin, $end) = @_; - - my $clauses = ""; - - my @DateClauses = map { - "($_ >= '" . $begin . "' AND $_ <= '" . $end . "')" - } @$Dates; - $clauses .= " AND " . " ( " . join(" OR ", @DateClauses) . " ) " - if @DateClauses; - - return $clauses -} - -sub FindTickets { - my ($CurrentUser, $Query, $Dates, $begin, $end) = @_; - - $Query .= DatesClauses($Dates, $begin, $end) - if $begin and $end; - - my $Tickets = RT::Tickets->new($CurrentUser); - $Tickets->FromSQL($Query); - - my %Tickets; - my %AlreadySeen; - - while ( my $Ticket = $Tickets->Next()) { - - # How to find the LastContacted date ? - for my $Date (@$Dates) { - my $DateObj = $Date . "Obj"; - push @{ $Tickets{ LocalDate($Ticket->$DateObj->Unix) } }, $Ticket - # if reminder, check it's refering to a ticket - unless ($Ticket->Type eq 'reminder' and not $Ticket->RefersTo->First) - or $AlreadySeen{ LocalDate($Ticket->$DateObj->Unix) }{ $Ticket }++; - } - } - return %Tickets; -} - -# -# Take a user object and return the search with Description "calendar" if it exists -# -sub SearchDefaultCalendar { - my $CurrentUser = shift; - my $Description = "calendar"; - - # I'm quite sure the loop isn't usefull but... - my @Objects = $CurrentUser->UserObj; - for my $object (@Objects) { - next unless ref($object) eq 'RT::User' && $object->id == $CurrentUser->Id; - my @searches = $object->Attributes->Named('SavedSearch'); - for my $search (@searches) { - next if ($search->SubValue('SearchType') - && $search->SubValue('SearchType') ne 'Ticket'); - - return $search - if "calendar" eq $search->Description; - } - } -} - - -1; - -__END__ - -=head1 NAME - -RTx::Calendar - Calendar for RT due tasks - -=head1 VERSION - -This document describes version 0.07 of RTx::Calendar - -=head1 DESCRIPTION - -This RT extension provides a calendar view for your tickets and your -reminders so you see when is your next due ticket. You can find it in -the menu Search->Calendar. - -There's a portlet to put on your home page (see Prefs/MyRT.html) - -You can also enable ics (ICal) feeds for your default calendar and all -your private searches in Prefs/Calendar.html. Authentication is magic -number based so that you can give those feeds to other people. - -You can find screenshots on -http://gaspard.mine.nu/dotclear/index.php?tag/rtx-calendar - -=head1 INSTALLATION - -If you upgrade from 0.02, see next part before. - -You need to install those three modules : - - * Date::ICal - * Data::ICal - * DateTime::Set - -Install it like a standard perl module - - perl Makefile.PL - make - make install - -If your RT is not in the default path (/opt/rt3) you must set RTHOME -before doing the Makefile.PL - -=head1 CONFIGURATION - -=head2 Base configuration - -In RT 3.8 and later, to enable calendar plugin, you must add something -like that in your etc/RT_SiteConfig.pm : - - Set(@Plugins,(qw(RTx::Calendar))); - -To use MyCalendar portlet you must add MyCalendar to -$HomepageComponents in etc/RT_SiteConfig.pm like that : - - Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar - MyAdminQueues MySupportQueues MyReminders RefreshHomepage)]); - -To enable private searches ICal feeds, you need to give -CreateSavedSearch and LoadSavedSearch rights to your users. - -=head2 Display configuration - -You can show the owner in each day box by adding this line to your -etc/RT_SiteConfig.pm : - - Set($CalendarDisplayOwner, 1); - -You can change which fields show up in the popup display when you -mouse over a date in etc/RT_SiteConfig.pm : - - @CalendarPopupFields = ('Status', 'OwnerObj->Name', 'DueObj->ISO'); - -=head2 ICAL feed configuration - -By default, tickets are todo and reminders event. You can change this -by setting $RT::ICalTicketType and $RT::ICalReminderType in etc/RT_SiteConfig.pm : - - Set($ICalTicketType, "Data::ICal::Entry::Event"); - Set($ICalReminderType ,"Data::ICal::Entry::Todo"); - -=head1 USAGE - -A small help section is available in /Prefs/Calendar.html - -=head1 UPGRADE FROM 0.02 - -As I've change directory structure, if you upgrade from 0.02 you need -to delete old files manually. Go in RTHOME/share/html (by default -/opt/rt3/share/html) and delete those files : - - rm -rf Callbacks/RTx-Calendar - rm Tools/Calendar.html - -RTx-Calendar may work without this but it's not very clean. - -=head1 BUGS - -=over - -=item * -compatible only with RT 3.6 for the moment. If someone need -compatibility with 3.4 I can work on this. And I will work on 3.7 -compatibility later. - -=back - -=head1 AUTHORS - -Nicolas Chuche E<lt>nchuche@barna.beE<gt> - -Idea borrowed from redmine's calendar (Thanks Jean-Philippe). - -=head1 COPYRIGHT - -Copyright 2007 by Nicolas Chuche E<lt>nchuche@barna.beE<gt> - -This program is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -See L<http://www.perl.com/perl/misc/Artistic.html> - -=cut |