parent
b9e6f5e42d
commit
c67ac46b6c
@ -0,0 +1,201 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* ownCloud |
||||||
|
* |
||||||
|
* @author Bart Visscher |
||||||
|
* @copyright 2011 Bart Visscher bartv@thisnet.nl |
||||||
|
* |
||||||
|
* This library is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||||
|
* License as published by the Free Software Foundation; either |
||||||
|
* version 3 of the License, or any later version. |
||||||
|
* |
||||||
|
* This library is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU Affero General Public |
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* This class provides a streamlined interface to the Sabre VObject classes |
||||||
|
*/ |
||||||
|
class OC_VObject{ |
||||||
|
/** @var Sabre_VObject_Component */ |
||||||
|
protected $vobject; |
||||||
|
|
||||||
|
/** |
||||||
|
* @returns Sabre_VObject_Component |
||||||
|
*/ |
||||||
|
public function getVObject(){ |
||||||
|
return $this->vobject; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @brief Parses the VObject |
||||||
|
* @param string VObject as string |
||||||
|
* @returns Sabre_VObject or null |
||||||
|
*/ |
||||||
|
public static function parse($data){ |
||||||
|
try { |
||||||
|
Sabre_VObject_Reader::$elementMap['LAST-MODIFIED'] = 'Sabre_VObject_Element_DateTime'; |
||||||
|
$vobject = Sabre_VObject_Reader::read($data); |
||||||
|
if ($vobject instanceof Sabre_VObject_Component){ |
||||||
|
$vobject = new OC_VObject($vobject); |
||||||
|
} |
||||||
|
return $vobject; |
||||||
|
} catch (Exception $e) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @brief Escapes semicolons |
||||||
|
* @param string $value |
||||||
|
* @return string |
||||||
|
*/ |
||||||
|
public static function escapeSemicolons($value){ |
||||||
|
foreach($value as &$i ){ |
||||||
|
$i = implode("\\\\;", explode(';', $i)); |
||||||
|
} |
||||||
|
return implode(';',$value); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @brief Creates an array out of a multivalue property |
||||||
|
* @param string $value |
||||||
|
* @return array |
||||||
|
*/ |
||||||
|
public static function unescapeSemicolons($value){ |
||||||
|
$array = explode(';',$value); |
||||||
|
for($i=0;$i<count($array);$i++){ |
||||||
|
if(substr($array[$i],-2,2)=="\\\\"){ |
||||||
|
if(isset($array[$i+1])){ |
||||||
|
$array[$i] = substr($array[$i],0,count($array[$i])-2).';'.$array[$i+1]; |
||||||
|
unset($array[$i+1]); |
||||||
|
} |
||||||
|
else{ |
||||||
|
$array[$i] = substr($array[$i],0,count($array[$i])-2).';'; |
||||||
|
} |
||||||
|
$i = $i - 1; |
||||||
|
} |
||||||
|
} |
||||||
|
return $array; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Constuctor |
||||||
|
* @param Sabre_VObject_Component or string |
||||||
|
*/ |
||||||
|
public function __construct($vobject_or_name){ |
||||||
|
if (is_object($vobject_or_name)){ |
||||||
|
$this->vobject = $vobject_or_name; |
||||||
|
} else { |
||||||
|
$this->vobject = new Sabre_VObject_Component($vobject_or_name); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function add($item, $itemValue = null){ |
||||||
|
if ($item instanceof OC_VObject){ |
||||||
|
$item = $item->getVObject(); |
||||||
|
} |
||||||
|
$this->vobject->add($item, $itemValue); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @brief Add property to vobject |
||||||
|
* @param object $name of property |
||||||
|
* @param object $value of property |
||||||
|
* @param object $parameters of property |
||||||
|
* @returns Sabre_VObject_Property newly created |
||||||
|
*/ |
||||||
|
public function addProperty($name, $value, $parameters=array()){ |
||||||
|
if(is_array($value)){ |
||||||
|
$value = OC_VObject::escapeSemicolons($value); |
||||||
|
} |
||||||
|
$property = new Sabre_VObject_Property( $name, $value ); |
||||||
|
foreach($parameters as $name => $value){ |
||||||
|
$property->parameters[] = new Sabre_VObject_Parameter($name, $value); |
||||||
|
} |
||||||
|
|
||||||
|
$this->vobject->add($property); |
||||||
|
return $property; |
||||||
|
} |
||||||
|
|
||||||
|
public function setUID(){ |
||||||
|
$uid = substr(md5(rand().time()),0,10); |
||||||
|
$this->vobject->add('UID',$uid); |
||||||
|
} |
||||||
|
|
||||||
|
public function setString($name, $string){ |
||||||
|
if ($string != ''){ |
||||||
|
$this->vobject->__set($name, $string); |
||||||
|
}else{ |
||||||
|
$this->vobject->__unset($name); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets or unsets the Date and Time for a property. |
||||||
|
* When $datetime is set to 'now', use the current time |
||||||
|
* When $datetime is null, unset the property |
||||||
|
* |
||||||
|
* @param string property name |
||||||
|
* @param DateTime $datetime |
||||||
|
* @param int $dateType |
||||||
|
* @return void |
||||||
|
*/ |
||||||
|
public function setDateTime($name, $datetime, $dateType=Sabre_VObject_Element_DateTime::LOCALTZ){ |
||||||
|
if ($datetime == 'now'){ |
||||||
|
$datetime = new DateTime(); |
||||||
|
} |
||||||
|
if ($datetime instanceof DateTime){ |
||||||
|
$datetime_element = new Sabre_VObject_Element_DateTime($name); |
||||||
|
$datetime_element->setDateTime($datetime, $dateType); |
||||||
|
$this->vobject->__set($name, $datetime_element); |
||||||
|
}else{ |
||||||
|
$this->vobject->__unset($name); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function getAsString($name){ |
||||||
|
return $this->vobject->__isset($name) ? |
||||||
|
$this->vobject->__get($name)->value : |
||||||
|
''; |
||||||
|
} |
||||||
|
|
||||||
|
public function getAsArray($name){ |
||||||
|
$values = array(); |
||||||
|
if ($this->vobject->__isset($name)){ |
||||||
|
$values = explode(',', $this->getAsString($name)); |
||||||
|
$values = array_map('trim', $values); |
||||||
|
} |
||||||
|
return $values; |
||||||
|
} |
||||||
|
|
||||||
|
public function &__get($name){ |
||||||
|
if ($name == 'children'){ |
||||||
|
return $this->vobject->children; |
||||||
|
} |
||||||
|
$return = $this->vobject->__get($name); |
||||||
|
if ($return instanceof Sabre_VObject_Component){ |
||||||
|
$return = new OC_VObject($return); |
||||||
|
} |
||||||
|
return $return; |
||||||
|
} |
||||||
|
|
||||||
|
public function __set($name, $value){ |
||||||
|
return $this->vobject->__set($name, $value); |
||||||
|
} |
||||||
|
|
||||||
|
public function __unset($name){ |
||||||
|
return $this->vobject->__unset($name); |
||||||
|
} |
||||||
|
|
||||||
|
public function __call($function,$arguments){ |
||||||
|
return call_user_func_array(array($this->vobject, $function), $arguments); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue