Пример #1
0
 /**
  * @NoAdminRequired
  */
 public function addComment()
 {
     $taskId = $this->params('taskID');
     $comment = $this->params('comment');
     $userId = $this->api->getUserId();
     $response = new JSONResponse();
     try {
         $vcalendar = \OC_Calendar_App::getVCalendar($taskId);
         $vtodo = $vcalendar->VTODO;
         // Determine new commentId by looping through all comments
         $commentIds = array();
         foreach ($vtodo->COMMENT as $com) {
             $commentIds[] = (int) $com['ID']->value;
         }
         $commentId = 1 + max($commentIds);
         $now = new \DateTime();
         $vtodo->addProperty('COMMENT', $comment, array('ID' => $commentId, 'USERID' => $userId, 'DATE-TIME' => $now->format('Ymd\\THis\\Z')));
         \OC_Calendar_Object::edit($taskId, $vcalendar->serialize());
         $user_timezone = \OC_Calendar_App::getTimezone();
         $now->setTimezone(new \DateTimeZone($user_timezone));
         $comment = array('taskID' => $taskId, 'id' => $commentId, 'tmpID' => $this->params('tmpID'), 'name' => \OCP\USER::getDisplayName(), 'userID' => $userId, 'comment' => $comment, 'time' => $now->format('Ymd\\THis'));
         $result = array('data' => array('comment' => $comment));
         $response->setData($result);
     } catch (\Exception $e) {
         // throw new BusinessLayerException($e->getMessage());
     }
     return $response;
 }
Пример #2
0
 public static function arrayForJSON($id, $vtodo, $user_timezone)
 {
     $task = array('id' => $id);
     $task['name'] = $vtodo->getAsString('SUMMARY');
     $task['created'] = $vtodo->getAsString('CREATED');
     $task['note'] = $vtodo->getAsString('DESCRIPTION');
     $task['location'] = $vtodo->getAsString('LOCATION');
     $task['categories'] = $vtodo->getAsArray('CATEGORIES');
     $start = $vtodo->DTSTART;
     if ($start) {
         try {
             $start = $start->getDateTime();
             $start->setTimezone(new \DateTimeZone($user_timezone));
             $task['start'] = $start->format('Ymd\\THis');
         } catch (\Exception $e) {
             $task['start'] = null;
             \OCP\Util::writeLog('tasks_enhanced', $e->getMessage(), \OCP\Util::ERROR);
         }
     } else {
         $task['start'] = null;
     }
     $due = $vtodo->DUE;
     if ($due) {
         try {
             $due = $due->getDateTime();
             $due->setTimezone(new \DateTimeZone($user_timezone));
             $task['due'] = $due->format('Ymd\\THis');
         } catch (\Exception $e) {
             $task['due'] = null;
             \OCP\Util::writeLog('tasks_enhanced', $e->getMessage(), \OCP\Util::ERROR);
         }
     } else {
         $task['due'] = null;
     }
     $reminder = $vtodo->VALARM;
     if ($reminder) {
         try {
             $reminderType = $reminder->TRIGGER['VALUE']->value;
             $reminderAction = $reminder->ACTION->value;
             $reminderDate = null;
             $reminderDuration = null;
             if ($reminderType == 'DATE-TIME') {
                 $reminderDate = $reminder->TRIGGER->getDateTime();
                 $reminderDate->setTimezone(new \DateTimeZone($user_timezone));
                 $reminderDate = $reminderDate->format('Ymd\\THis');
             } elseif ($reminderType == 'DURATION' && ($start || $due)) {
                 $parsed = VObject\DateTimeParser::parseDuration($reminder->TRIGGER, true);
                 // Calculate the reminder date from duration and start date
                 $related = null;
                 if (is_object($reminder->TRIGGER['RELATED'])) {
                     $related = $reminder->TRIGGER['RELATED']->value;
                     if (is_object($reminder->TRIGGER['RELATED']) && $reminder->TRIGGER['RELATED']->value == 'END' && $due) {
                         $reminderDate = $due->modify($parsed)->format('Ymd\\THis');
                     } elseif ($start) {
                         $reminderDate = $start->modify($parsed)->format('Ymd\\THis');
                     }
                 } else {
                     throw new \Exception('Reminder duration related to not available date.');
                 }
                 $result = preg_match('/^(?P<plusminus>\\+|-)?P((?P<week>\\d+)W)?((?P<day>\\d+)D)?(T((?P<hour>\\d+)H)?((?P<minute>\\d+)M)?((?P<second>\\d+)S)?)?$/', $reminder->TRIGGER, $matches);
                 $invert = false;
                 if ($matches['plusminus'] === '-') {
                     $invert = true;
                 }
                 $parts = array('week', 'day', 'hour', 'minute', 'second');
                 $reminderDuration = array('token' => null);
                 foreach ($parts as $part) {
                     $matches[$part] = isset($matches[$part]) && $matches[$part] ? (int) $matches[$part] : 0;
                     $reminderDuration[$part] = $matches[$part];
                     if ($matches[$part] && !$reminderDuration['token']) {
                         $reminderDuration['token'] = $part;
                     }
                 }
                 if ($reminderDuration['token'] == null) {
                     $reminderDuration['token'] = $parts[0];
                 }
                 $reminderDuration['params'] = array('id' => (int) $invert . (int) ($related == 'END'), 'related' => $related ? $related : 'START', 'invert' => $invert);
             } else {
                 $reminderDate = null;
                 $reminderDuration = null;
             }
             $task['reminder'] = array('type' => $reminderType, 'action' => $reminderAction, 'date' => $reminderDate, 'duration' => $reminderDuration);
         } catch (\Exception $e) {
             $task['reminder'] = null;
             \OCP\Util::writeLog('tasks_enhanced', $e->getMessage(), \OCP\Util::ERROR);
         }
     } else {
         $task['reminder'] = null;
     }
     $starred = $vtodo->getAsString('PRIORITY');
     if ($starred) {
         $task['starred'] = true;
     } else {
         $task['starred'] = false;
     }
     $completed = $vtodo->COMPLETED;
     if ($completed) {
         try {
             $completed = $completed->getDateTime();
             $completed->setTimezone(new \DateTimeZone($user_timezone));
             $task['completed_date'] = $completed->format('Ymd\\THis');
             $task['completed'] = true;
         } catch (\Exception $e) {
             $task['completed'] = false;
             \OCP\Util::writeLog('tasks_enhanced', $e->getMessage(), \OCP\Util::ERROR);
         }
     } else {
         $task['completed'] = false;
     }
     $task['complete'] = $vtodo->getAsString('PERCENT-COMPLETE') == '' ? '0' : $vtodo->getAsString('PERCENT-COMPLETE');
     $comments = $vtodo->COMMENT;
     if ($comments) {
         $comments_parsed = array();
         foreach ($comments as $com) {
             $time = new \DateTime($com['DATE-TIME']->value);
             $time->setTimezone(new \DateTimeZone($user_timezone));
             $time = $time->format('Ymd\\THis');
             $comments_parsed[] = array('id' => (int) $com['ID']->value, 'userID' => $com['USERID']->value, 'name' => \OCP\USER::getDisplayName($com['USERID']->value), 'comment' => $com->value, 'time' => $time);
         }
         $task['comments'] = $comments_parsed;
     }
     return $task;
 }