1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Property\ICalendar; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse 6*a1a3b679SAndreas Boehler Sabre\VObject\Property, 7*a1a3b679SAndreas Boehler Sabre\VObject\Parser\MimeDir, 8*a1a3b679SAndreas Boehler Sabre\VObject\DateTimeParser; 9*a1a3b679SAndreas Boehler 10*a1a3b679SAndreas Boehler/** 11*a1a3b679SAndreas Boehler * Period property 12*a1a3b679SAndreas Boehler * 13*a1a3b679SAndreas Boehler * This object represents PERIOD values, as defined here: 14*a1a3b679SAndreas Boehler * 15*a1a3b679SAndreas Boehler * http://tools.ietf.org/html/rfc5545#section-3.8.2.6 16*a1a3b679SAndreas Boehler * 17*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/). 18*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 19*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 20*a1a3b679SAndreas Boehler */ 21*a1a3b679SAndreas Boehlerclass Period extends Property { 22*a1a3b679SAndreas Boehler 23*a1a3b679SAndreas Boehler /** 24*a1a3b679SAndreas Boehler * In case this is a multi-value property. This string will be used as a 25*a1a3b679SAndreas Boehler * delimiter. 26*a1a3b679SAndreas Boehler * 27*a1a3b679SAndreas Boehler * @var string|null 28*a1a3b679SAndreas Boehler */ 29*a1a3b679SAndreas Boehler public $delimiter = ','; 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler /** 32*a1a3b679SAndreas Boehler * Sets a raw value coming from a mimedir (iCalendar/vCard) file. 33*a1a3b679SAndreas Boehler * 34*a1a3b679SAndreas Boehler * This has been 'unfolded', so only 1 line will be passed. Unescaping is 35*a1a3b679SAndreas Boehler * not yet done, but parameters are not included. 36*a1a3b679SAndreas Boehler * 37*a1a3b679SAndreas Boehler * @param string $val 38*a1a3b679SAndreas Boehler * @return void 39*a1a3b679SAndreas Boehler */ 40*a1a3b679SAndreas Boehler public function setRawMimeDirValue($val) { 41*a1a3b679SAndreas Boehler 42*a1a3b679SAndreas Boehler $this->setValue(explode($this->delimiter, $val)); 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler } 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler /** 47*a1a3b679SAndreas Boehler * Returns a raw mime-dir representation of the value. 48*a1a3b679SAndreas Boehler * 49*a1a3b679SAndreas Boehler * @return string 50*a1a3b679SAndreas Boehler */ 51*a1a3b679SAndreas Boehler public function getRawMimeDirValue() { 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler return implode($this->delimiter, $this->getParts()); 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler } 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler /** 58*a1a3b679SAndreas Boehler * Returns the type of value. 59*a1a3b679SAndreas Boehler * 60*a1a3b679SAndreas Boehler * This corresponds to the VALUE= parameter. Every property also has a 61*a1a3b679SAndreas Boehler * 'default' valueType. 62*a1a3b679SAndreas Boehler * 63*a1a3b679SAndreas Boehler * @return string 64*a1a3b679SAndreas Boehler */ 65*a1a3b679SAndreas Boehler public function getValueType() { 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler return "PERIOD"; 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler } 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler /** 72*a1a3b679SAndreas Boehler * Sets the json value, as it would appear in a jCard or jCal object. 73*a1a3b679SAndreas Boehler * 74*a1a3b679SAndreas Boehler * The value must always be an array. 75*a1a3b679SAndreas Boehler * 76*a1a3b679SAndreas Boehler * @param array $value 77*a1a3b679SAndreas Boehler * @return void 78*a1a3b679SAndreas Boehler */ 79*a1a3b679SAndreas Boehler public function setJsonValue(array $value) { 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler $value = array_map( 82*a1a3b679SAndreas Boehler function($item) { 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler return strtr(implode('/', $item), array(':' => '', '-' => '')); 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler }, 87*a1a3b679SAndreas Boehler $value 88*a1a3b679SAndreas Boehler ); 89*a1a3b679SAndreas Boehler parent::setJsonValue($value); 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler } 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler /** 94*a1a3b679SAndreas Boehler * Returns the value, in the format it should be encoded for json. 95*a1a3b679SAndreas Boehler * 96*a1a3b679SAndreas Boehler * This method must always return an array. 97*a1a3b679SAndreas Boehler * 98*a1a3b679SAndreas Boehler * @return array 99*a1a3b679SAndreas Boehler */ 100*a1a3b679SAndreas Boehler public function getJsonValue() { 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler $return = array(); 103*a1a3b679SAndreas Boehler foreach($this->getParts() as $item) { 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler list($start, $end) = explode('/', $item, 2); 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehler $start = DateTimeParser::parseDateTime($start); 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler // This is a duration value. 110*a1a3b679SAndreas Boehler if ($end[0]==='P') { 111*a1a3b679SAndreas Boehler $return[] = array( 112*a1a3b679SAndreas Boehler $start->format('Y-m-d\\TH:i:s'), 113*a1a3b679SAndreas Boehler $end 114*a1a3b679SAndreas Boehler ); 115*a1a3b679SAndreas Boehler } else { 116*a1a3b679SAndreas Boehler $end = DateTimeParser::parseDateTime($end); 117*a1a3b679SAndreas Boehler $return[] = array( 118*a1a3b679SAndreas Boehler $start->format('Y-m-d\\TH:i:s'), 119*a1a3b679SAndreas Boehler $end->format('Y-m-d\\TH:i:s'), 120*a1a3b679SAndreas Boehler ); 121*a1a3b679SAndreas Boehler } 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler } 124*a1a3b679SAndreas Boehler 125*a1a3b679SAndreas Boehler return $return; 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler } 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler} 130