/** * @brief generates the VEVENT/VTODO/VJOURNAL with UTC dates * @param array $event * @return string */ private static function generateEvent($event) { $object = OC_VObject::parse($event['calendardata']); if (!$object) { return false; } $sharedAccessClassPermissions = OC_Calendar_Object::getAccessClassPermissions($object); if (OC_Calendar_Object::getowner($event['id']) !== OCP\User::getUser()) { if (!($sharedAccessClassPermissions & OCP\PERMISSION_READ)) { return ''; } } $object = OC_Calendar_Object::cleanByAccessClass($event['id'], $object); if ($object->VEVENT) { $dtstart = $object->VEVENT->DTSTART; $start_dt = $dtstart->getDateTime(); $dtend = OC_Calendar_Object::getDTEndFromVEvent($object->VEVENT); $end_dt = $dtend->getDateTime(); if ($dtstart->getDateType() !== Sabre\VObject\Property\DateTime::DATE) { $start_dt->setTimezone(new DateTimeZone('UTC')); $end_dt->setTimezone(new DateTimeZone('UTC')); $object->VEVENT->setDateTime('DTSTART', $start_dt, Sabre\VObject\Property\DateTime::UTC); $object->VEVENT->setDateTime('DTEND', $end_dt, Sabre\VObject\Property\DateTime::UTC); } return $object->VEVENT->serialize(); } if ($object->VTODO) { return $object->VTODO->serialize(); } if ($object->VJOURNAL) { return $object->VJOURNAL->serialize(); } return ''; }
public static function parseVTODO($task) { $object = \Sabre\VObject\Reader::read($task['calendardata']); if (!$object) { return false; } $sharedAccessClassPermissions = \OC_Calendar_Object::getAccessClassPermissions($object); if (\OC_Calendar_Object::getowner($task['id']) !== \OC::$server->getUserSession()->getUser()->getUID()) { if (!($sharedAccessClassPermissions & \OCP\Constants::PERMISSION_READ)) { return false; } } $object = \OC_Calendar_Object::cleanByAccessClass($task['id'], $object); $vtodo = $object->VTODO; return $vtodo; }
/** * check if task is valid * * @param \OCA\Tasks\Db\Tasks $task * @return mixed */ public function checkTask($task) { $object = $this->readTask($task); if (!$object) { return false; } if (\OC_Calendar_Object::getowner($task->getId()) !== \OC::$server->getUserSession()->getUser()->getUID()) { $sharedAccessClassPermissions = \OC_Calendar_Object::getAccessClassPermissions($object); if (!($sharedAccessClassPermissions & \OCP\Constants::PERMISSION_READ)) { return false; } } $taskID = $task->getId(); $object = \OC_Calendar_Object::cleanByAccessClass($taskID, $object); $vtodo = $object->VTODO; $vtodo->ID = $taskID; return $vtodo; }
/** * Returns a list of ACE's for this node. * * Each ACE has the following properties: * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are * currently the only supported privileges * * 'principal', a url to the principal who owns the node * * 'protected' (optional), indicating that this ACE is not allowed to * be updated. * * @return array */ public function getACL() { $readprincipal = $this->getOwner(); $writeprincipal = $this->getOwner(); $uid = OC_Calendar_Calendar::extractUserID($this->getOwner()); if ($uid != OCP\USER::getUser()) { if ($uid === 'contact_birthdays') { $readprincipal = 'principals/' . OCP\User::getUser(); } else { $object = OC_VObject::parse($this->objectData['calendardata']); $sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $this->calendarInfo['id']); $sharedAccessClassPermissions = OC_Calendar_Object::getAccessClassPermissions($object); if ($sharedCalendar && $sharedCalendar['permissions'] & OCP\PERMISSION_READ && $sharedAccessClassPermissions & OCP\PERMISSION_READ) { $readprincipal = 'principals/' . OCP\USER::getUser(); } if ($sharedCalendar && $sharedCalendar['permissions'] & OCP\PERMISSION_UPDATE && $sharedAccessClassPermissions & OCP\PERMISSION_UPDATE) { $writeprincipal = 'principals/' . OCP\USER::getUser(); } } } return array(array('privilege' => '{DAV:}read', 'principal' => $readprincipal, 'protected' => true), array('privilege' => '{DAV:}write', 'principal' => $writeprincipal, 'protected' => true), array('privilege' => '{DAV:}read', 'principal' => $readprincipal . '/calendar-proxy-write', 'protected' => true), array('privilege' => '{DAV:}write', 'principal' => $writeprincipal . '/calendar-proxy-write', 'protected' => true), array('privilege' => '{DAV:}read', 'principal' => $readprincipal . '/calendar-proxy-read', 'protected' => true)); }
/** * @brief generates the VEVENT/VTODO/VJOURNAL with UTC dates * @param array $event * @return string */ private static function generateEvent($event) { $object = OC_VObject::parse($event['calendardata']); if (!$object) { return false; } $sharedAccessClassPermissions = OC_Calendar_Object::getAccessClassPermissions($object); if (OC_Calendar_Object::getowner($event['id']) !== OCP\User::getUser()) { if (!($sharedAccessClassPermissions & OCP\PERMISSION_READ)) { return ''; } } $object = OC_Calendar_Object::cleanByAccessClass($event['id'], $object); if ($object->VEVENT) { return $object->VEVENT->serialize(); } if ($object->VTODO) { return $object->VTODO->serialize(); } if ($object->VJOURNAL) { return $object->VJOURNAL->serialize(); } return ''; }
/** * @brief deletes an object * @param integer $id id of object * @return boolean */ public static function delete($id) { $oldobject = self::find($id); $calid = self::getCalendarid($id); $calendar = OC_Calendar_Calendar::find($calid); $oldvobject = OC_VObject::parse($oldobject['calendardata']); if ($calendar['userid'] != OCP\User::getUser()) { $sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $calid); $sharedAccessClassPermissions = OC_Calendar_Object::getAccessClassPermissions($oldvobject); if (!$sharedCalendar || !($sharedCalendar['permissions'] & OCP\PERMISSION_DELETE) || !($sharedAccessClassPermissions & OCP\PERMISSION_DELETE)) { throw new Exception(OC_Calendar_App::$l10n->t('You do not have the permissions to delete this event.')); } } $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*clndr_objects` WHERE `id` = ?'); $stmt->execute(array($id)); OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']); OCP\Share::unshareAll('event', $id); OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $id); return true; }