Пример #1
0
 /**
  * @NoAdminRequired
  */
 public function editEvent()
 {
     $id = (int) $this->params('id');
     $pStart = $this->params('viewstart');
     $pEnd = $this->params('viewend');
     $postRequestAll = $this->getParams();
     $calId = (int) $this->params('calendar');
     $lastmodified = $this->params('lastmodified');
     if (!array_key_exists('calendar', $postRequestAll)) {
         $calId = (int) Object::getCalendarid($id);
     }
     $errarr = $this->objectParser->validateRequest($postRequestAll);
     if ($errarr) {
         $errarr['status'] = 'error';
         $response = new JSONResponse($errarr);
         return $response;
     } else {
         $data = CalendarApp::getEventObject($id, false, false);
         $vcalendar = VObject::parse($data['calendardata']);
         CalendarApp::isNotModified($vcalendar->VEVENT, $lastmodified);
         $this->objectParser->updateVCalendarFromRequest($postRequestAll, $vcalendar);
         Object::edit($id, $vcalendar->serialize());
         if ((int) $data['calendarid'] !== $calId) {
             Object::moveToCalendar($id, $calId);
         }
         $editedEvent = CalendarApp::getEventObject($id, false, false);
         if (stristr($pStart, '(')) {
             $temp = explode('(', $pStart);
             $pStart = $temp[0];
         }
         if (stristr($pEnd, '(')) {
             $temp = explode('(', $pEnd);
             $pEnd = $temp[0];
         }
         $start = new \DateTime($pStart);
         $end = new \DateTime($pEnd);
         $events = $this->generateEventOutput($editedEvent, $start, $end);
         $params = ['status' => 'success', 'data' => ['id' => $id, 'events' => $events]];
         $response = new JSONResponse($params);
         return $response;
     }
 }
Пример #2
0
 /**
  * @NoAdminRequired
  * 
  * @brief generates the cache the first time
  * @param integer $id 
  * @return bool true 
  */
 public function generateEventCache($id)
 {
     $event = Object::find($id);
     if ((int) $event['repeating'] === 0) {
         return false;
     }
     $calendarId = Object::getCalendarid($id);
     $object = VObject::parse($event['calendardata']);
     $start = new \DateTime('01-01-' . date('Y') . ' 00:00:00', new \DateTimeZone('UTC'));
     $start->modify('-2 years');
     $end = new \DateTime('31-12-' . date('Y') . ' 23:59:59', new \DateTimeZone('UTC'));
     $end->modify('+2 years');
     $object->expand($start, $end);
     foreach ($object->getComponents() as $vevent) {
         if (!$vevent instanceof \Sabre\VObject\Component) {
             continue;
         }
         $startenddate = Object::generateStartEndDate($vevent->DTSTART, Object::getDTEndFromVEvent($vevent), !$vevent->DTSTART->hasTime(), 'UTC');
         $this->repeatDB->insertEvent($id, $calendarId, $startenddate['start'], $startenddate['end']);
     }
     return true;
 }
Пример #3
0
 /**
  * @NoAdminRequired
  */
 public function editTask()
 {
     //relatedto,hiddenfield, read_worker,$_POST,mytaskcal, mytaskmode
     $id = $this->params('tid');
     $hiddenPostField = $this->params('hiddenfield');
     $myTaskCal = $this->params('mytaskcal');
     $myTaskMode = $this->params('mytaskmode');
     $data = TasksApp::getEventObject($id, false, false);
     $object = VObject::parse($data['calendardata']);
     $calId = Object::getCalendarid($id);
     $orgId = $data['org_objid'];
     //Search for Main Task
     $mainTaskId = '';
     if ($data['relatedto'] !== '') {
         $mainTaskId = TasksApp::getEventIdbyUID($data['relatedto']);
     }
     //Search for Sub Tasks
     $subTaskIds = '';
     if ($data['relatedto'] === '') {
         $subTaskIds = TasksApp::getSubTasks($data['eventuid']);
     }
     if (isset($hiddenPostField) && $hiddenPostField === 'edititTask' && $id > 0) {
         $cid = $this->params('read_worker');
         $postRequestAll = $this->getParams();
         TasksApp::updateVCalendarFromRequest($postRequestAll, $object);
         TasksApp::edit($id, $object->serialize(), $orgId);
         if ($mainTaskId === '') {
             $mainTaskId = $id;
         }
         if ($calId !== intval($cid)) {
             Object::moveToCalendar($id, intval($cid));
             if ($subTaskIds !== '') {
                 $tempIds = explode(',', $subTaskIds);
                 foreach ($tempIds as $subIds) {
                     Object::moveToCalendar($subIds, intval($cid));
                 }
             }
         }
         $vcalendar1 = TasksApp::getVCalendar($id, true, true);
         $vtodo = $vcalendar1->VTODO;
         $aTask = TasksApp::getEventObject($id, true, true);
         $aCalendar = CalendarCalendar::find($aTask['calendarid']);
         $user_timezone = CalendarApp::getTimezone();
         $task_info = TasksApp::arrayForJSON($id, $vtodo, $user_timezone, $aCalendar, $aTask);
         $task_info['olduid'] = $data['eventuid'];
         $task_info['oldcalendarid'] = $data['calendarid'];
         $response = new JSONResponse();
         $response->setData($task_info);
         return $response;
     }
     $vtodo = $object->VTODO;
     $object = Object::cleanByAccessClass($id, $object);
     $accessclass = $vtodo->getAsString('CLASS');
     if (empty($accessclass)) {
         $accessclass = 'PUBLIC';
     }
     $permissions = TasksApp::getPermissions($id, TasksApp::TODO, $accessclass);
     $link = strtr($vtodo->getAsString('URL'), array('\\,' => ',', '\\;' => ';'));
     $TaskDate = '';
     $TaskTime = '';
     if ($vtodo->DUE) {
         $dateDueType = $vtodo->DUE->getValueType();
         if ($dateDueType === 'DATE') {
             $TaskDate = $vtodo->DUE->getDateTime()->format('d.m.Y');
             $TaskTime = '';
         }
         if ($dateDueType === 'DATE-TIME') {
             $TaskDate = $vtodo->DUE->getDateTime()->format('d.m.Y');
             $TaskTime = $vtodo->DUE->getDateTime()->format('H:i');
         }
     }
     $TaskStartDate = '';
     $TaskStartTime = '';
     if ($vtodo->DTSTART) {
         $dateStartType = $vtodo->DTSTART->getValueType();
         if ($dateStartType === 'DATE') {
             $TaskStartDate = $vtodo->DTSTART->getDateTime()->format('d.m.Y');
             $TaskStartTime = '';
         }
         if ($dateStartType === 'DATE-TIME') {
             $TaskStartDate = $vtodo->DTSTART->getDateTime()->format('d.m.Y');
             $TaskStartTime = $vtodo->DTSTART->getDateTime()->format('H:i');
         }
     }
     $priority = $vtodo->getAsString('PRIORITY');
     $calendarsArrayTmp = CalendarCalendar::allCalendars($this->userId, true);
     //Filter Importent Values
     $calendar_options = array();
     $checkArray = array();
     $checkShareArray = array();
     $bShareCalId = '';
     foreach ($calendarsArrayTmp as $calendar) {
         $isAktiv = $calendar['active'];
         if ($this->configInfo->getUserValue($this->userId, CalendarApp::$appname, 'calendar_' . $calendar['id']) != '') {
             $isAktiv = $this->configInfo->getUserValue($this->userId, CalendarApp::$appname, 'calendar_' . $calendar['id']);
         }
         if (!array_key_exists('active', $calendar)) {
             $isAktiv = 1;
         }
         if ((int) $isAktiv === 1 && $calendar['userid'] !== $this->userId || $mainTaskId !== '') {
             $sharedCalendar = \OCP\Share::getItemSharedWithBySource(CalendarApp::SHARECALENDAR, CalendarApp::SHARECALENDARPREFIX . $calendar['id']);
             if ($sharedCalendar && $sharedCalendar['permissions'] & \OCP\PERMISSION_UPDATE && $mainTaskId === '') {
                 array_push($calendar_options, $calendar);
                 $checkShareArray[$calendar['id']] = $sharedCalendar['permissions'];
             }
         }
         if ($isAktiv === 1 && $calendar['userid'] === $this->userId) {
             array_push($calendar_options, $calendar);
             $checkShareArray[$calendar['id']] = \OCP\PERMISSION_ALL;
         }
     }
     if (!array_key_exists($calId, $checkShareArray)) {
         $bShareCalId = 'hide';
     }
     $priorityOptionsArray = TasksApp::getPriorityOptionsFilterd();
     $priorityOptions = TasksApp::generateSelectFieldArray('priority', (string) $vtodo->priority, $priorityOptionsArray, false);
     $access_class_options = CalendarApp::getAccessClassOptions();
     //NEW Reminder
     $reminder_options = CalendarApp::getReminderOptions();
     $reminder_advanced_options = CalendarApp::getAdvancedReminderOptions();
     $reminder_time_options = CalendarApp::getReminderTimeOptions();
     //reminder
     $vtodosharees = array();
     $sharedwithByVtodo = \OCP\Share::getItemShared(CalendarApp::SHARETODO, CalendarApp::SHARETODOPREFIX . $id);
     if (is_array($sharedwithByVtodo)) {
         foreach ($sharedwithByVtodo as $share) {
             if ($share['share_type'] == \OCP\Share::SHARE_TYPE_USER || $share['share_type'] == \OCP\Share::SHARE_TYPE_GROUP) {
                 $vtodosharees[] = $share;
             }
         }
     }
     $percentCompleted = '0';
     if ($vtodo->{'PERCENT-COMPLETE'}) {
         $percentCompleted = $vtodo->getAsString('PERCENT-COMPLETE');
     }
     $aAlarm = $this->setAlarmTask($vtodo, $reminder_options);
     $params = ['id' => $id, 'calId' => $calId, 'orgId' => $orgId, 'permissions' => $permissions, 'priorityOptions' => $priorityOptions, 'access_class_options' => $access_class_options, 'calendar_options' => $calendar_options, 'calendar' => $calId, 'mymode' => $myTaskMode, 'mycal' => $myTaskCal, 'bShareCalId' => $bShareCalId, 'subtaskids' => $subTaskIds, 'cal_permissions' => $checkShareArray, 'accessclass' => $accessclass, 'reminder_options' => $reminder_options, 'reminder_rules' => array_key_exists('triggerRequest', $aAlarm) ? $aAlarm['triggerRequest'] : '', 'reminder' => $aAlarm['action'], 'reminder_time_options' => $reminder_time_options, 'reminder_advanced_options' => $reminder_advanced_options, 'reminder_advanced' => 'DISPLAY', 'remindertimeselect' => array_key_exists('reminder_time_select', $aAlarm) ? $aAlarm['reminder_time_select'] : '', 'remindertimeinput' => array_key_exists('reminder_time_input', $aAlarm) ? $aAlarm['reminder_time_input'] : '', 'reminderemailinput' => array_key_exists('email', $aAlarm) ? $aAlarm['email'] : '', 'reminderdate' => array_key_exists('reminderdate', $aAlarm) ? $aAlarm['reminderdate'] : '', 'remindertime' => array_key_exists('remindertime', $aAlarm) ? $aAlarm['remindertime'] : '', 'link' => $link, 'priority' => $priority, 'TaskDate' => $TaskDate, 'TaskTime' => $TaskTime, 'TaskStartDate' => $TaskStartDate, 'TaskStartTime' => $TaskStartTime, 'vtodosharees' => $vtodosharees, 'percentCompleted' => $percentCompleted, 'sharetodo' => CalendarApp::SHARETODO, 'sharetodoprefix' => CalendarApp::SHARETODOPREFIX, 'vtodo' => $vtodo];
     $response = new TemplateResponse($this->appName, 'event.edit', $params, '');
     return $response;
 }
Пример #4
0
 /**
  * @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;
 }