Skip to content

Commit

Permalink
when addingEvents with option "covertDates", treat equally recurring …
Browse files Browse the repository at this point in the history
…and non recurring events

the modification moves the code handling covertDates for non recurring events into Kronolith::addCoverDates().
=> this modifies how recurring events are treated

Signed-off-by: Michael J Rubinsky <mrubinsk@horde.org>
  • Loading branch information
prigaux authored and mrubinsk committed May 25, 2016
1 parent 4c6e22b commit 1923f77
Showing 1 changed file with 29 additions and 51 deletions.
80 changes: 29 additions & 51 deletions kronolith/lib/Kronolith.php
Expand Up @@ -520,52 +520,8 @@ public static function addEvents(&$results, &$event, $startDate, $endDate,
}
}

/* Add the event to all the days it covers. This is similar to
* Kronolith::addCoverDates(), but for days in between the
* start and end day, the range is midnight to midnight, and
* for the edge days it's start to midnight, and midnight to
* end. */
$i = $eventStart->mday;
$loopDate = new Horde_Date(array('month' => $eventStart->month,
'mday' => $i,
'year' => $eventStart->year));
while ($loopDate->compareDateTime($eventEnd) <= 0) {
if (!$allDay ||
$loopDate->compareDateTime($eventEnd) != 0) {
$addEvent = clone $event;
$addEvent->originalStart = $originalStart;
$addEvent->originalEnd = $originalEnd;

/* If this is the start day, set the start time to
* the real start time, otherwise set it to
* 00:00 */
if ($loopDate->compareDate($eventStart) == 0) {
$addEvent->start = $eventStart;
} else {
$addEvent->start = clone $loopDate;
$addEvent->start->hour = $addEvent->start->min = $addEvent->start->sec = 0;
$addEvent->first = false;
}

/* If this is the end day, set the end time to the
* real event end, otherwise set it to 23:59. */
if ($loopDate->compareDate($eventEnd) == 0) {
$addEvent->end = $eventEnd;
} else {
$addEvent->end = clone $loopDate;
$addEvent->end->hour = 23;
$addEvent->end->min = $addEvent->end->sec = 59;
$addEvent->last = false;
}

$results[$loopDate->dateString()][$addEvent->id] = $json ? $addEvent->toJson(array('all_day' => $allDay)) : $addEvent;
}

$loopDate = new Horde_Date(
array('month' => $eventStart->month,
'mday' => ++$i,
'year' => $eventStart->year));
}
Kronolith::addCoverDates($results, $event, $eventStart,
$eventEnd, $json, $originalStart, $originalEnd);
}
}
ksort($results);
Expand All @@ -583,29 +539,51 @@ public static function addEvents(&$results, &$event, $startDate, $endDate,
* method?
*/
public static function addCoverDates(&$results, $event, $eventStart,
$eventEnd, $json)
$eventEnd, $json, $originalStart = null, $originalEnd = null)
{
$loopDate = new Horde_Date($eventStart->year, $eventStart->month, $eventStart->mday);
$i = $eventStart->mday;
$loopDate = new Horde_Date(array('month' => $eventStart->month,
'mday' => $i,
'year' => $eventStart->year));
$allDay = $event->isAllDay();
while ($loopDate->compareDateTime($eventEnd) <= 0) {
if (!$allDay ||
$loopDate->compareDateTime($eventEnd) != 0) {
$addEvent = clone $event;
$addEvent->start = $eventStart;
$addEvent->end = $eventEnd;
if ($originalStart) $addEvent->originalStart = $originalStart;
if ($originalEnd) $addEvent->originalEnd = $originalEnd;

/* If this is the start day, set the start time to
* the real start time, otherwise set it to
* 00:00 */
if ($loopDate->compareDate($eventStart) != 0) {
$addEvent->start = clone $loopDate;
$addEvent->start->hour = $addEvent->start->min = $addEvent->start->sec = 0;
$addEvent->first = false;
} else {
$addEvent->start = $eventStart;
}

/* If this is the end day, set the end time to the
* real event end, otherwise set it to 23:59. */
if ($loopDate->compareDate($eventEnd) != 0) {
$addEvent->end = clone $loopDate;
$addEvent->end->hour = 23;
$addEvent->end->min = $addEvent->end->sec = 59;
$addEvent->last = false;
} else {
$addEvent->end = $eventEnd;
}
if ($addEvent->recurs() &&
$addEvent->recurrence->hasCompletion($loopDate->year, $loopDate->month, $loopDate->mday)) {
$addEvent->status = Kronolith::STATUS_CANCELLED;
}
$results[$loopDate->dateString()][$addEvent->id] = $json ? $addEvent->toJson(array('all_day' => $allDay)) : $addEvent;
}
$loopDate->mday++;
$loopDate = new Horde_Date(
array('month' => $eventStart->month,
'mday' => ++$i,
'year' => $eventStart->year));
}
}

Expand Down

0 comments on commit 1923f77

Please sign in to comment.