Mercurial > hg > rc1
comparison plugins/libcalendaring/lib/Sabre/VObject/Property/MultiDateTime.php @ 4:888e774ee983
libcalendar plugin as distributed
| author | Charlie Root |
|---|---|
| date | Sat, 13 Jan 2018 08:57:56 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 3:f6fe4b6ae66a | 4:888e774ee983 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 namespace Sabre\VObject\Property; | |
| 4 | |
| 5 use Sabre\VObject; | |
| 6 | |
| 7 /** | |
| 8 * Multi-DateTime property | |
| 9 * | |
| 10 * This element is used for iCalendar properties such as the EXDATE property. | |
| 11 * It basically provides a few helper functions that make it easier to deal | |
| 12 * with these. It supports both DATE-TIME and DATE values. | |
| 13 * | |
| 14 * In order to use this correctly, you must call setDateTimes and getDateTimes | |
| 15 * to retrieve and modify dates respectively. | |
| 16 * | |
| 17 * If you use the 'value' or properties directly, this object does not keep | |
| 18 * reference and results might appear incorrectly. | |
| 19 * | |
| 20 * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/). | |
| 21 * @author Evert Pot (http://evertpot.com/) | |
| 22 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License | |
| 23 */ | |
| 24 class MultiDateTime extends VObject\Property { | |
| 25 | |
| 26 /** | |
| 27 * DateTime representation | |
| 28 * | |
| 29 * @var DateTime[] | |
| 30 */ | |
| 31 protected $dateTimes; | |
| 32 | |
| 33 /** | |
| 34 * dateType | |
| 35 * | |
| 36 * This is one of the Sabre\VObject\Property\DateTime constants. | |
| 37 * | |
| 38 * @var int | |
| 39 */ | |
| 40 protected $dateType; | |
| 41 | |
| 42 /** | |
| 43 * Updates the value | |
| 44 * | |
| 45 * @param array $dt Must be an array of DateTime objects. | |
| 46 * @param int $dateType | |
| 47 * @return void | |
| 48 */ | |
| 49 public function setDateTimes(array $dt, $dateType = VObject\Property\DateTime::LOCALTZ) { | |
| 50 | |
| 51 foreach($dt as $i) | |
| 52 if (!$i instanceof \DateTime) | |
| 53 throw new \InvalidArgumentException('You must pass an array of DateTime objects'); | |
| 54 | |
| 55 $this->offsetUnset('VALUE'); | |
| 56 $this->offsetUnset('TZID'); | |
| 57 switch($dateType) { | |
| 58 | |
| 59 case DateTime::LOCAL : | |
| 60 $val = array(); | |
| 61 foreach($dt as $i) { | |
| 62 $val[] = $i->format('Ymd\\THis'); | |
| 63 } | |
| 64 $this->setValue(implode(',',$val)); | |
| 65 $this->offsetSet('VALUE','DATE-TIME'); | |
| 66 break; | |
| 67 case DateTime::UTC : | |
| 68 $val = array(); | |
| 69 foreach($dt as $i) { | |
| 70 $i->setTimeZone(new \DateTimeZone('UTC')); | |
| 71 $val[] = $i->format('Ymd\\THis\\Z'); | |
| 72 } | |
| 73 $this->setValue(implode(',',$val)); | |
| 74 $this->offsetSet('VALUE','DATE-TIME'); | |
| 75 break; | |
| 76 case DateTime::LOCALTZ : | |
| 77 $val = array(); | |
| 78 foreach($dt as $i) { | |
| 79 $val[] = $i->format('Ymd\\THis'); | |
| 80 } | |
| 81 $this->setValue(implode(',',$val)); | |
| 82 $this->offsetSet('VALUE','DATE-TIME'); | |
| 83 $this->offsetSet('TZID', $dt[0]->getTimeZone()->getName()); | |
| 84 break; | |
| 85 case DateTime::DATE : | |
| 86 $val = array(); | |
| 87 foreach($dt as $i) { | |
| 88 $val[] = $i->format('Ymd'); | |
| 89 } | |
| 90 $this->setValue(implode(',',$val)); | |
| 91 $this->offsetSet('VALUE','DATE'); | |
| 92 break; | |
| 93 default : | |
| 94 throw new \InvalidArgumentException('You must pass a valid dateType constant'); | |
| 95 | |
| 96 } | |
| 97 $this->dateTimes = $dt; | |
| 98 $this->dateType = $dateType; | |
| 99 | |
| 100 } | |
| 101 | |
| 102 /** | |
| 103 * Returns the current DateTime value. | |
| 104 * | |
| 105 * If no value was set, this method returns null. | |
| 106 * | |
| 107 * @return array|null | |
| 108 */ | |
| 109 public function getDateTimes() { | |
| 110 | |
| 111 if ($this->dateTimes) | |
| 112 return $this->dateTimes; | |
| 113 | |
| 114 $dts = array(); | |
| 115 | |
| 116 if (!$this->value) { | |
| 117 $this->dateTimes = null; | |
| 118 $this->dateType = null; | |
| 119 return null; | |
| 120 } | |
| 121 | |
| 122 foreach(explode(',',$this->value) as $val) { | |
| 123 list( | |
| 124 $type, | |
| 125 $dt | |
| 126 ) = DateTime::parseData($val, $this); | |
| 127 $dts[] = $dt; | |
| 128 $this->dateType = $type; | |
| 129 } | |
| 130 $this->dateTimes = $dts; | |
| 131 return $this->dateTimes; | |
| 132 | |
| 133 } | |
| 134 | |
| 135 /** | |
| 136 * Returns the type of Date format. | |
| 137 * | |
| 138 * This method returns one of the format constants. If no date was set, | |
| 139 * this method will return null. | |
| 140 * | |
| 141 * @return int|null | |
| 142 */ | |
| 143 public function getDateType() { | |
| 144 | |
| 145 if ($this->dateType) | |
| 146 return $this->dateType; | |
| 147 | |
| 148 if (!$this->value) { | |
| 149 $this->dateTimes = null; | |
| 150 $this->dateType = null; | |
| 151 return null; | |
| 152 } | |
| 153 | |
| 154 $dts = array(); | |
| 155 foreach(explode(',',$this->value) as $val) { | |
| 156 list( | |
| 157 $type, | |
| 158 $dt | |
| 159 ) = DateTime::parseData($val, $this); | |
| 160 $dts[] = $dt; | |
| 161 $this->dateType = $type; | |
| 162 } | |
| 163 $this->dateTimes = $dts; | |
| 164 return $this->dateType; | |
| 165 | |
| 166 } | |
| 167 | |
| 168 /** | |
| 169 * This method will return true, if the property had a date and a time, as | |
| 170 * opposed to only a date. | |
| 171 * | |
| 172 * @return bool | |
| 173 */ | |
| 174 public function hasTime() { | |
| 175 | |
| 176 return $this->getDateType()!==DateTime::DATE; | |
| 177 | |
| 178 } | |
| 179 | |
| 180 } |
