15 changed files with 261 additions and 189 deletions
-
2apps/calendar/ajax/editevent.php
-
16apps/calendar/ajax/editeventform.php
-
2apps/calendar/ajax/events.php
-
12apps/calendar/ajax/moveevent.php
-
77apps/calendar/lib/object.php
-
8apps/contacts/ajax/addcard.php
-
4apps/contacts/ajax/addproperty.php
-
2apps/contacts/ajax/deleteproperty.php
-
2apps/contacts/ajax/getdetails.php
-
4apps/contacts/ajax/setproperty.php
-
2apps/contacts/ajax/showsetproperty.php
-
2apps/contacts/index.php
-
114apps/contacts/lib/vcard.php
-
2apps/contacts/photo.php
-
201lib/vobject.php
@ -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); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue