[otrs-cvs] CVS: Calendar/Kernel/System CalendarEvent.pm,1.8,1.9
cvs-log at otrs.org
cvs-log at otrs.org
Wed Oct 4 23:04:50 CEST 2006
Update of /home/cvs/Calendar/Kernel/System
In directory lancelot:/tmp/cvs-serv19527/Kernel/System
Modified Files:
CalendarEvent.pm
Log Message:
added sequence feature
Index: CalendarEvent.pm
===================================================================
RCS file: /home/cvs/Calendar/Kernel/System/CalendarEvent.pm,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** CalendarEvent.pm 1 Feb 2006 17:27:16 -0000 1.8
--- CalendarEvent.pm 4 Oct 2006 20:04:48 -0000 1.9
***************
*** 1,5 ****
# --
# Kernel/System/CalendarEvent.pm - manage all calendar events
! # Copyright (C) 2001-2006 Martin Edenhofer <martin+code at otrs.org>
# --
# $Id$
--- 1,5 ----
# --
# Kernel/System/CalendarEvent.pm - manage all calendar events
! # Copyright (C) 2001-2006 OTRS GmbH, http://otrs.org/
# --
# $Id$
***************
*** 13,16 ****
--- 13,17 ----
use strict;
+ use Date::Pcalc qw(:all);
use Kernel::System::Email;
***************
*** 39,43 ****
my %DBParam = ();
# check needed stuff
! foreach (qw(Title StartTime EndTime State UserIDs)) {
if (!defined ($Param{$_})) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!");
--- 40,44 ----
my %DBParam = ();
# check needed stuff
! foreach (qw(Title StartTime EndTime SequenceEndTime State UserIDs)) {
if (!defined ($Param{$_})) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!");
***************
*** 50,63 ****
}
# db quote
! foreach (qw(Title Content StartTime EndTime State)) {
$DBParam{$_} = $Self->{DBObject}->Quote($Param{$_});
}
# sql
my $SQL = "INSERT INTO calendar_event ".
! " (title, content, start_time, end_time, owner_id, event_status) ".
" VALUES ".
" ('$DBParam{Title}', '$DBParam{Content}', '$DBParam{StartTime}', ".
! " '$DBParam{EndTime}', $Self->{UserID}, '$DBParam{State}')";
!
if ($Self->{DBObject}->Do(SQL => $SQL)) {
my $EventID;
--- 51,64 ----
}
# db quote
! foreach (qw(Title Content StartTime EndTime SequenceEndTime SequenceType Reminder State)) {
$DBParam{$_} = $Self->{DBObject}->Quote($Param{$_});
}
# sql
my $SQL = "INSERT INTO calendar_event ".
! " (title, content, start_time, end_time, sequence_end_time, sequence_type, reminder, owner_id, event_status) ".
" VALUES ".
" ('$DBParam{Title}', '$DBParam{Content}', '$DBParam{StartTime}', ".
! " '$DBParam{EndTime}', '$DBParam{SequenceEndTime}', '$DBParam{SequenceType}', ".
! " '$DBParam{Reminder}', $Self->{UserID}, '$DBParam{State}')";
if ($Self->{DBObject}->Do(SQL => $SQL)) {
my $EventID;
***************
*** 132,136 ****
my %DBParam = ();
# check needed stuff
! foreach (qw(EventID Title StartTime EndTime State UserIDs)) {
if (!defined ($Param{$_})) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!");
--- 133,137 ----
my %DBParam = ();
# check needed stuff
! foreach (qw(EventID Title StartTime EndTime SequenceEndTime SequenceType State UserIDs)) {
if (!defined ($Param{$_})) {
$Self->{LogObject}->Log(Priority => 'error', Message => "Need $_!");
***************
*** 143,147 ****
}
# db quote
! foreach (qw(Title Content StartTime EndTime State)) {
$DBParam{$_} = $Self->{DBObject}->Quote($Param{$_});
}
--- 144,148 ----
}
# db quote
! foreach (qw(Title Content StartTime EndTime SequenceEndTime SequenceType Reminder State)) {
$DBParam{$_} = $Self->{DBObject}->Quote($Param{$_});
}
***************
*** 155,163 ****
" start_time = '$DBParam{StartTime}', ".
" end_time = '$DBParam{EndTime}', ".
" owner_id = $Self->{UserID}, ".
" event_status = '$DBParam{State}' ".
" WHERE ".
" id = $DBParam{EventID}";
-
if ($Self->{DBObject}->Do(SQL => $SQL)) {
$Self->{DBObject}->Do(
--- 156,166 ----
" start_time = '$DBParam{StartTime}', ".
" end_time = '$DBParam{EndTime}', ".
+ " sequence_type = '$DBParam{SequenceType}', ".
+ " sequence_end_time = '$DBParam{SequenceEndTime}', ".
+ " reminder = '$DBParam{Reminder}', ".
" owner_id = $Self->{UserID}, ".
" event_status = '$DBParam{State}' ".
" WHERE ".
" id = $DBParam{EventID}";
if ($Self->{DBObject}->Do(SQL => $SQL)) {
$Self->{DBObject}->Do(
***************
*** 313,317 ****
}
# sql for event
! my $SQL = "SELECT title, content, start_time, end_time, owner_id, event_status ".
" FROM calendar_event WHERE id = $Param{EventID}";
$Self->{DBObject}->Prepare(SQL => $SQL);
--- 316,320 ----
}
# sql for event
! my $SQL = "SELECT title, content, start_time, end_time, sequence_end_time, sequence_type, reminder, owner_id, event_status ".
" FROM calendar_event WHERE id = $Param{EventID}";
$Self->{DBObject}->Prepare(SQL => $SQL);
***************
*** 322,327 ****
$Data{StartTime} = $Row[2];
$Data{EndTime} = $Row[3];
! $Data{UserID} = $Row[4];
! $Data{State} = $Row[5];
}
if (!$Data{EventID}) {
--- 325,333 ----
$Data{StartTime} = $Row[2];
$Data{EndTime} = $Row[3];
! $Data{SequenceEndTime} = $Row[4];
! $Data{SequenceType} = $Row[5] || 'SequenceType::None';
! $Data{Reminder} = $Row[6];
! $Data{UserID} = $Row[7];
! $Data{State} = $Row[8];
}
if (!$Data{EventID}) {
***************
*** 354,357 ****
--- 360,371 ----
SystemTime => $EndTime,
);
+ if ($Data{SequenceEndTime} && $Data{SequenceEndTime} !~ /^0000/) {
+ my $SequenceEndTime = $Self->{TimeObject}->TimeStamp2SystemTime(
+ String => $Data{SequenceEndTime},
+ );
+ ($Data{SequenceEndSec}, $Data{SequenceEndMinute}, $Data{SequenceEndHour}, $Data{SequenceEndDay}, $Data{SequenceEndMonth}, $Data{SequenceEndYear}) = $Self->{TimeObject}->SystemTime2Date(
+ SystemTime => $SequenceEndTime,
+ );
+ }
return (%User,%Data);
***************
*** 362,365 ****
--- 376,380 ----
my %Param = @_;
my @EventIDs = ();
+ my %Used = ();
# check needed stuff
foreach (qw(StartTime EndTime)) {
***************
*** 369,404 ****
}
}
! # db quote
! foreach (qw(StartTime EndTime)) {
! $Param{$_} = $Self->{DBObject}->Quote($Param{$_});
! }
! # sql
! my $SQL = "SELECT e.id FROM calendar_event e, calendar_event_involved ei ".
! " WHERE ".
! " e.id = ei.event_id AND ".
! " ((e.start_time >= '$Param{StartTime}' AND e.end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time >= '$Param{StartTime}' AND e.start_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.end_time >= '$Param{StartTime}' AND e.end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time <= '$Param{StartTime}' AND e.end_time >= '$Param{EndTime}')) ";
! if ($Param{UserIDs} && @{$Param{UserIDs}}) {
! $SQL .= " AND ei.user_id IN (";
! my $Count = 0;
! foreach (@{$Param{UserIDs}}) {
! if ($Count) {
! $SQL .= ", ";
}
! $SQL .= "$_";
! $Count++;
}
! $SQL .= ")";
! }
! $SQL .= " ORDER BY e.start_time";
#print STDERR "SQL: $SQL\n";
! $Self->{DBObject}->Prepare(SQL => $SQL);
! while (my @Row = $Self->{DBObject}->FetchrowArray()) {
! push (@EventIDs, $Row[0]);
}
return @EventIDs;
--- 384,596 ----
}
}
! my $StartSystemTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Param{StartTime},
! );
! my $EndSystemTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Param{EndTime},
! );
! my ($SSec, $SMin, $SHour, $SDay, $SMonth, $SYear) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $StartSystemTime,
! );
! my ($ESec, $EMin, $EHour, $EDay, $EMonth, $EYear) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $EndSystemTime,
! );
! my $Delta = Delta_Days($SYear, $SMonth, $SDay, $EYear, $EMonth, $EDay);
!
! foreach (0..$Delta) {
! my ($Year1, $Month1, $Day1) = Add_Delta_Days($SYear, $SMonth, $SDay, $_);
! my ($Year2, $Month2, $Day2) = Add_Delta_Days($SYear, $SMonth, $SDay, $_);
! if ($_ == 0) {
! $Param{StartTime} = "$Year1-$Month1-$Day1 $SHour:$SMin:$SSec";
! }
! else {
! $Param{StartTime} = "$Year1-$Month1-$Day1 00:00:00";
! }
! if ($_ == $Delta) {
! $Param{EndTime} = "$Year2-$Month2-$Day2 $EHour:$EMin:$ESec";
! }
! else {
! $Param{EndTime} = "$Year2-$Month2-$Day2 23:59:59";
! }
! # db quote
! foreach (qw(StartTime EndTime)) {
! $Param{$_} = $Self->{DBObject}->Quote($Param{$_});
! }
! # sql
! my $SQL = "SELECT e.id, e.title, e.content, e.start_time, e.end_time, e.event_status ".
! " FROM calendar_event e ";
! if ($Param{UserIDs} && @{$Param{UserIDs}}) {
! $SQL .= " , calendar_event_involved ei ";
! }
! $SQL .= " WHERE ".
! # " FROM calendar_event e, calendar_event_involved ei ".
! # " WHERE ".
! # " e.id = ei.event_id AND ".
! " ((e.start_time >= '$Param{StartTime}' AND e.end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time >= '$Param{StartTime}' AND e.start_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.end_time >= '$Param{StartTime}' AND e.end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time <= '$Param{StartTime}' AND e.end_time >= '$Param{EndTime}')) ";
! if ($Param{UserIDs} && @{$Param{UserIDs}}) {
! # $SQL .= " AND ei.user_id IN (";
! $SQL .= " AND e.id = ei.event_id AND ei.user_id IN (";
! my $Count = 0;
! foreach (@{$Param{UserIDs}}) {
! if ($Count) {
! $SQL .= ", ";
! }
! $SQL .= "$_";
! $Count++;
}
! $SQL .= ")";
}
! $SQL .= " ORDER BY e.start_time";
#print STDERR "SQL: $SQL\n";
! $Self->{DBObject}->Prepare(SQL => $SQL);
! while (my @Row = $Self->{DBObject}->FetchrowArray()) {
! if (!$Used{$Row[0]}) {
! my %Event = (
! EventID => $Row[0],
! Title => $Row[1] || '-',
! Content => $Row[2],
! StartTime => $Row[3],
! EndTime => $Row[4],
! State => $Row[5],
! );
! my $StartTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Event{StartTime},
! );
! my $EndTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Event{EndTime},
! );
! ($Event{StartSec}, $Event{StartMinute}, $Event{StartHour}, $Event{StartDay}, $Event{StartMonth}, $Event{StartYear}) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $StartTime,
! );
! ($Event{EndSec}, $Event{EndMinute}, $Event{EndHour}, $Event{EndDay}, $Event{EndMonth}, $Event{EndYear}) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $EndTime,
! );
! push (@EventIDs, \%Event);
! $Used{$Row[0]} = 1;
! }
! }
! my $SystemTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Param{StartTime},
! );
! my ($SSec, $SMin, $SHour, $SDay, $SMonth, $SYear) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $SystemTime,
! );
!
! $SQL = "SELECT e.id, e.sequence_type, e.title, e.content, e.start_time, e.end_time, e.event_status ";
! # " FROM calendar_event e, calendar_event_involved ei ".
! # " WHERE ".
! # " e.id = ei.event_id AND ".
! $SQL .= " FROM calendar_event e ";
! if ($Param{UserIDs} && @{$Param{UserIDs}}) {
! $SQL .= " , calendar_event_involved ei ";
! }
! $SQL .= " WHERE ".
! " ((e.start_time >= '$Param{StartTime}' AND e.sequence_end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time >= '$Param{StartTime}' AND e.start_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.sequence_end_time >= '$Param{StartTime}' AND e.sequence_end_time <= '$Param{EndTime}') ".
! " OR ".
! " (e.start_time <= '$Param{StartTime}' AND e.sequence_end_time >= '$Param{EndTime}')) ";
! if ($Param{UserIDs} && @{$Param{UserIDs}}) {
! # $SQL .= " AND ei.user_id IN (";
! $SQL .= " AND e.id = ei.event_id AND ei.user_id IN (";
! my $Count = 0;
! foreach (@{$Param{UserIDs}}) {
! if ($Count) {
! $SQL .= ", ";
! }
! $SQL .= "$_";
! $Count++;
! }
! $SQL .= ")";
! }
! $SQL .= " ORDER BY e.start_time";
! #print STDERR "SQL: $SQL\n";
! $Self->{DBObject}->Prepare(SQL => $SQL);
! while (my @Row = $Self->{DBObject}->FetchrowArray()) {
! if (!$Used{$Row[0]}) {
! my %Event = (
! EventID => $Row[0],
! Title => $Row[2] || '-',
! Content => $Row[3],
! StartTime => $Row[4],
! EndTime => $Row[5],
! State => $Row[6],
! );
! my $StartTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Event{StartTime},
! );
! my $EndTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => $Event{EndTime},
! );
! my $Total = $EndTime-$StartTime;
! my %EventOld = ();
! ($EventOld{StartSec}, $EventOld{StartMinute}, $EventOld{StartHour}, $EventOld{StartDay}, $EventOld{StartMonth}, $EventOld{StartYear}) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $StartTime,
! );
! ($Event{StartSec}, $Event{StartMinute}, $Event{StartHour}, $Event{StartDay}, $Event{StartMonth}, $Event{StartYear}) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $StartTime,
! );
! $Event{StartDay} = $SDay;
! $Event{StartMonth} = $SMonth;
! $Event{StartYear} = $SYear;
!
! my $NewStartTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! String => "$Event{StartYear}-$Event{StartMonth}-$Event{StartDay} $Event{StartHour}:$Event{StartMinute}:$Event{StartSec}",
! );
! my $NewEndTime = $NewStartTime+$Total;
! ($Event{EndSec}, $Event{EndMinute}, $Event{EndHour}, $Event{EndDay}, $Event{EndMonth}, $Event{EndYear}) = $Self->{TimeObject}->SystemTime2Date(
! SystemTime => $NewEndTime,
! );
! $Event{StartTime} = "$Event{StartYear}-$Event{StartMonth}-$Event{StartDay} $Event{StartHour}:$Event{StartMinute}:$Event{StartSec}";
! $Event{EndTime} = "$Event{EndYear}-$Event{EndMonth}-$Event{EndDay} $Event{EndHour}:$Event{EndMinute}:$Event{EndSec}";
!
! if ($Row[1] eq 'Yearly' && $EventOld{StartMonth} == $SMonth && $EventOld{StartDay} == $SDay && (($NewStartTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime >= $StartSystemTime && $NewStartTime <= $EndSystemTime) || ($NewEndTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime <= $StartSystemTime && $NewEndTime >= $EndSystemTime))) {
! # $Event{StartYear}++;
! # my $NewStartTime = $Self->{TimeObject}->TimeStamp2SystemTime(
! # String => "$Event{StartYear}-$Event{StartMonth}-$Event{StartDay} $Event{StartHour}:$Event{StartMinute}:$Event{StartSec}",
! # );
! # my $NewEndTime = $NewStartTime+$Total;
! # if (($NewStartTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime >= $StartSystemTime && $NewStartTime <= $EndSystemTime) || ($NewEndTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime <= $StartSystemTime && $NewEndTime >= $EndSystemTime)) {
! push (@EventIDs, \%Event);
! $Used{$Row[0]} = 1;
! # }
! }
! elsif ($Row[1] =~ /^Weekly::(.+?)$/ && (($NewStartTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime >= $StartSystemTime && $NewStartTime <= $EndSystemTime) || ($NewEndTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime <= $StartSystemTime && $NewEndTime >= $EndSystemTime))) {
! my $CDow = $1;
! my $Dow = Day_of_Week_Abbreviation(Day_of_Week($SYear,$SMonth,$SDay));
! if ($Dow eq $CDow) {
! push (@EventIDs, \%Event);
! $Used{$Row[0]} = 1;
! }
! }
! elsif ($Row[1] =~ /^Monthly::(.+?)::(.+?)$/ && (($NewStartTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime >= $StartSystemTime && $NewStartTime <= $EndSystemTime) || ($NewEndTime >= $StartSystemTime && $NewEndTime <= $EndSystemTime) || ($NewStartTime <= $StartSystemTime && $NewEndTime >= $EndSystemTime))) {
! my $CDow = $1;
! my $DowCount = $2;
! my $Days = Days_in_Month($SYear,$SMonth);
! my $Dow = Day_of_Week_Abbreviation(Day_of_Week($SYear,$SMonth,$SDay));
! if ($CDow eq $Dow) {
! my $Count = 0;
! foreach my $Day (1..$SDay) {
! my $Dow = Day_of_Week_Abbreviation(Day_of_Week($SYear,$SMonth,$Day));
! if ($CDow eq $Dow) {
! $Count++;
! }
! }
! if ($Count == $DowCount) {
! push (@EventIDs, \%Event);
! $Used{$Row[0]} = 1;
! }
! }
! }
! }
! }
}
return @EventIDs;
More information about the cvs-log
mailing list