/** * 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 = CalendarCalendar::extractUserID($this->getOwner()); if ($uid != \OCP\USER::getUser()) { $object = VObject::parse($this->objectData['calendardata']); $sharedCalendar = \OCP\Share::getItemSharedWithBySource(CalendarApp::SHARECALENDAR, CalendarApp::SHARECALENDARPREFIX . $this->calendarInfo['id']); $sharedAccessClassPermissions = 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(); } else { $writeprincipal = ''; } } 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 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 = Calendar::find($calid); $oldvobject = VObject::parse($oldobject['calendardata']); if ($calendar['userid'] != \OCP\User::getUser()) { $shareMode = self::checkShareMode($calid); if ($shareMode) { $sharedCalendar = \OCP\Share::getItemSharedWithBySource(App::SHARECALENDAR, App::SHARECALENDARPREFIX . $calid); //calid, not objectid !!!! 1111 one one one eleven } else { $sharedCalendar = \OCP\Share::getItemSharedWithBySource(App::SHAREEVENT, App::SHAREEVENTPREFIX . $id); } $sharedAccessClassPermissions = Object::getAccessClassPermissions($oldvobject); if (!$sharedCalendar || !($sharedCalendar['permissions'] & \OCP\PERMISSION_DELETE) || !($sharedAccessClassPermissions & \OCP\PERMISSION_DELETE)) { throw new \Exception(App::$l10n->t('You do not have the permissions to delete this event.')); } } $stmt = \OCP\DB::prepare('DELETE FROM `' . App::CldObjectTable . '` WHERE `id` = ?'); $stmt->execute(array($id)); //DELETE SHARED ONLY EVENT if (\OCP\Share::unshareAll(App::SHAREEVENT, App::SHAREEVENTPREFIX . $id)) { //if($delId=Object::checkSharedEvent($id)){ $stmt = \OCP\DB::prepare('DELETE FROM `' . App::CldObjectTable . '` WHERE `org_objid` = ?'); $stmt->execute(array($id)); //} } Calendar::touchCalendar($oldobject['calendarid']); $app = new Application(); $c = $app->getContainer(); $repeatController = $c->query('RepeatController'); $repeatController->cleanEvent($id); //\OCP\Util::emitHook('\OCA\CalendarPlus', 'deleteEvent', $id); $params = array('mode' => 'deleted', 'link' => '', 'trans_type' => App::$l10n->t($oldobject['objecttype']), 'summary' => $oldobject['summary'], 'cal_user' => $calendar['userid'], 'cal_displayname' => $calendar['displayname']); ActivityData::logEventActivity($params); //App::getVCategories()->purgeObject($id); return true; }
/** * @brief edits an object * @param integer $id id of object * @param string $data object * @return boolean */ public static function edit($id, $data, $orgid = 0) { $oldobject = Object::find($id); $calid = Object::getCalendarid($id); $calendar = Calendar::find($calid); $oldvobject = VObject::parse($oldobject['calendardata']); if ($calendar['userid'] !== \OCP\User::getUser()) { $shareMode = Object::checkShareMode($calid); if ($shareMode) { $sharedCalendar = \OCP\Share::getItemSharedWithBySource(CalendarApp::SHARECALENDAR, CalendarApp::SHARECALENDARPREFIX . $calid); //calid, not objectid !!!! 1111 one one one eleven } else { $sharedCalendar = \OCP\Share::getItemSharedWithBySource(CalendarApp::SHARETODO, CalendarApp::SHARETODOPREFIX . $id); } $sharedAccessClassPermissions = Object::getAccessClassPermissions($oldvobject); if (!$sharedCalendar || !($sharedCalendar['permissions'] & \OCP\PERMISSION_UPDATE) || !($sharedAccessClassPermissions & \OCP\PERMISSION_UPDATE)) { throw new \Exception(CalendarApp::$l10n->t('You do not have the permissions to edit this todo. Fehler' . $sharedCalendar . $id)); } } $object = VObject::parse($data); CalendarApp::loadCategoriesFromVCalendar($id, $object); list($type, $startdate, $enddate, $summary, $repeating, $uid, $isAlarm, $relatedTo) = Object::extractData($object); //check Share if ($orgid > 0) { $stmtShareUpdate = \OCP\DB::prepare("UPDATE `*PREFIX*share` SET `item_target`= ? WHERE `item_source` = ? AND `item_type` = ? "); $stmtShareUpdate->execute(array($summary, CalendarApp::SHARETODOPREFIX . $orgid, CalendarApp::SHARETODO)); $stmt = \OCP\DB::prepare('UPDATE `' . CalendarApp::CldObjectTable . '` SET `objecttype`=?,`startdate`=?,`enddate`=?,`repeating`=?,`summary`=?,`calendardata`=?,`lastmodified`= ? ,`isalarm`= ? ,`eventuid`= ?,`relatedto`= ? WHERE `id` = ?'); $stmt->execute(array($type, $startdate, $enddate, $repeating, $summary, $data, time(), $isAlarm, $uid, $relatedTo, $orgid)); } $stmtShare = \OCP\DB::prepare("SELECT COUNT(*) AS COUNTSHARE FROM `*PREFIX*share` WHERE `item_source` = ? AND `item_type`= ? "); $result = $stmtShare->execute(array(CalendarApp::SHARETODOPREFIX . $id, CalendarApp::SHARETODO)); $row = $result->fetchRow(); if ($row['COUNTSHARE'] >= 1) { $stmtShareUpdate = \OCP\DB::prepare("UPDATE `*PREFIX*share` SET `item_target`= ? WHERE `item_source` = ? AND `item_type` = ? "); $stmtShareUpdate->execute(array($summary, CalendarApp::SHARETODOPREFIX . $id, CalendarApp::SHARETODO)); $stmt = \OCP\DB::prepare('UPDATE `' . CalendarApp::CldObjectTable . '` SET `objecttype`=?,`startdate`=?,`enddate`=?,`repeating`=?,`summary`=?,`calendardata`=?,`lastmodified`= ?,`isalarm`= ? WHERE `org_objid` = ?'); $stmt->execute(array($type, $startdate, $enddate, $repeating, $summary, $data, time(), $isAlarm, $id)); } $stmt = \OCP\DB::prepare('UPDATE `' . CalendarApp::CldObjectTable . '` SET `objecttype`=?,`startdate`=?,`enddate`=?,`repeating`=?,`summary`=?,`calendardata`=?,`lastmodified`= ? ,`isalarm`= ?,`eventuid`= ?,`relatedto`= ? WHERE `id` = ?'); $stmt->execute(array($type, $startdate, $enddate, $repeating, $summary, $data, time(), $isAlarm, $uid, $relatedTo, $id)); Calendar::touchCalendar($oldobject['calendarid']); //\OCP\Util::emitHook('OC_Calendar', 'editTodo', $id); /****Activity New ***/ $link = \OC::$server->getURLGenerator()->linkToRoute(self::$appname . '.page.index') . '#' . urlencode($id); $params = array('mode' => 'edited', 'link' => $link, 'trans_type' => App::$l10n->t($type), 'summary' => $summary, 'cal_user' => $calendar['userid'], 'cal_displayname' => $calendar['displayname']); ActivityData::logEventActivity($params); /**END***/ return true; }