diff options
author | Susinthiran Sithamparanathan <chesusin@gmail.com> | 2012-10-17 12:25:34 +0200 |
---|---|---|
committer | Susinthiran Sithamparanathan <chesusin@gmail.com> | 2012-10-17 16:17:36 +0200 |
commit | b2b84f3a6f3c98005f80c6c7c558a33b4ea36193 (patch) | |
tree | 1ae0c571e25ab7322e9a942dfdcc593f67e98ad6 /3rdparty/Sabre/VObject/Component/VFreeBusy.php | |
parent | 45dec77d92c9a7804489bee34b218bbe8c85f7c5 (diff) | |
download | nextcloud-server-b2b84f3a6f3c98005f80c6c7c558a33b4ea36193.tar.gz nextcloud-server-b2b84f3a6f3c98005f80c6c7c558a33b4ea36193.zip |
Update Sabre to version 1.7.1
Diffstat (limited to '3rdparty/Sabre/VObject/Component/VFreeBusy.php')
-rw-r--r-- | 3rdparty/Sabre/VObject/Component/VFreeBusy.php | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/3rdparty/Sabre/VObject/Component/VFreeBusy.php b/3rdparty/Sabre/VObject/Component/VFreeBusy.php new file mode 100644 index 00000000000..d6da52cbd77 --- /dev/null +++ b/3rdparty/Sabre/VObject/Component/VFreeBusy.php @@ -0,0 +1,68 @@ +<?php + +namespace Sabre\VObject\Component; + +use Sabre\VObject; + +/** + * The VFreeBusy component + * + * This component adds functionality to a component, specific for VFREEBUSY + * components. + * + * @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 + */ +class VFreeBusy extends VObject\Component { + + /** + * Checks based on the contained FREEBUSY information, if a timeslot is + * available. + * + * @param DateTime $start + * @param Datetime $end + * @return bool + */ + public function isFree(\DateTime $start, \Datetime $end) { + + foreach($this->select('FREEBUSY') as $freebusy) { + + // We are only interested in FBTYPE=BUSY (the default), + // FBTYPE=BUSY-TENTATIVE or FBTYPE=BUSY-UNAVAILABLE. + if (isset($freebusy['FBTYPE']) && strtoupper(substr((string)$freebusy['FBTYPE'],0,4))!=='BUSY') { + continue; + } + + // The freebusy component can hold more than 1 value, separated by + // commas. + $periods = explode(',', (string)$freebusy); + + foreach($periods as $period) { + // Every period is formatted as [start]/[end]. The start is an + // absolute UTC time, the end may be an absolute UTC time, or + // duration (relative) value. + list($busyStart, $busyEnd) = explode('/', $period); + + $busyStart = VObject\DateTimeParser::parse($busyStart); + $busyEnd = VObject\DateTimeParser::parse($busyEnd); + if ($busyEnd instanceof \DateInterval) { + $tmp = clone $busyStart; + $tmp->add($busyEnd); + $busyEnd = $tmp; + } + + if($start < $busyEnd && $end > $busyStart) { + return false; + } + + } + + } + + return true; + + } + +} + |