Exemplo n.º 1
0
 /**
  * @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 '';
 }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * 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));
 }
Exemplo n.º 5
0
 /**
  * @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 '';
 }
Exemplo n.º 6
0
 /**
  * @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;
 }