2012-06-03 14:19:28 -04:00
|
|
|
<?php
|
|
|
|
|
2012-08-11 04:07:19 -04:00
|
|
|
namespace Sabre\VObject\Component;
|
|
|
|
|
|
|
|
use Sabre\VObject;
|
|
|
|
|
2012-06-03 14:19:28 -04:00
|
|
|
/**
|
|
|
|
* VTodo component
|
|
|
|
*
|
|
|
|
* This component contains some additional functionality specific for VTODOs.
|
|
|
|
*
|
|
|
|
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
|
|
|
|
* @author Evert Pot (http://www.rooftopsolutions.nl/)
|
|
|
|
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
|
|
|
*/
|
2012-08-11 04:07:19 -04:00
|
|
|
class VTodo extends VObject\Component {
|
2012-06-03 14:19:28 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true or false depending on if the event falls in the specified
|
|
|
|
* time-range. This is used for filtering purposes.
|
|
|
|
*
|
|
|
|
* The rules used to determine if an event falls within the specified
|
|
|
|
* time-range is based on the CalDAV specification.
|
|
|
|
*
|
|
|
|
* @param DateTime $start
|
|
|
|
* @param DateTime $end
|
|
|
|
* @return bool
|
|
|
|
*/
|
2012-08-11 04:07:19 -04:00
|
|
|
public function isInTimeRange(\DateTime $start, \DateTime $end) {
|
2012-06-03 14:19:28 -04:00
|
|
|
|
|
|
|
$dtstart = isset($this->DTSTART)?$this->DTSTART->getDateTime():null;
|
2012-08-11 04:07:19 -04:00
|
|
|
$duration = isset($this->DURATION)?VObject\DateTimeParser::parseDuration($this->DURATION):null;
|
2012-06-03 14:19:28 -04:00
|
|
|
$due = isset($this->DUE)?$this->DUE->getDateTime():null;
|
|
|
|
$completed = isset($this->COMPLETED)?$this->COMPLETED->getDateTime():null;
|
|
|
|
$created = isset($this->CREATED)?$this->CREATED->getDateTime():null;
|
|
|
|
|
|
|
|
if ($dtstart) {
|
|
|
|
if ($duration) {
|
|
|
|
$effectiveEnd = clone $dtstart;
|
|
|
|
$effectiveEnd->add($duration);
|
|
|
|
return $start <= $effectiveEnd && $end > $dtstart;
|
|
|
|
} elseif ($due) {
|
|
|
|
return
|
|
|
|
($start < $due || $start <= $dtstart) &&
|
|
|
|
($end > $dtstart || $end >= $due);
|
|
|
|
} else {
|
|
|
|
return $start <= $dtstart && $end > $dtstart;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($due) {
|
|
|
|
return ($start < $due && $end >= $due);
|
|
|
|
}
|
|
|
|
if ($completed && $created) {
|
|
|
|
return
|
|
|
|
($start <= $created || $start <= $completed) &&
|
|
|
|
($end >= $created || $end >= $completed);
|
|
|
|
}
|
|
|
|
if ($completed) {
|
|
|
|
return ($start <= $completed && $end >= $completed);
|
|
|
|
}
|
|
|
|
if ($created) {
|
|
|
|
return ($end > $created);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|