public function formatItems($items, $format, $parameters = null) { $vtodos = array(); if ($format === self::FORMAT_TODO) { $user_timezone = CalendarApp::getTimezone(); foreach ($items as $item) { $item['item_source'] = CalendarApp::validateItemSource($item['item_source'], CalendarApp::SHARETODOPREFIX); if (!TasksApp::checkSharedTodo($item['item_source'])) { $event = TasksApp::getEventObject($item['item_source']); $vcalendar = VObject::parse($event['calendardata']); $vtodo = $vcalendar->VTODO; $accessclass = $vtodo->getAsString('CLASS'); if ($accessclass == '' || $accessclass == 'PUBLIC') { $permissions['permissions'] = $item['permissions']; $permissions['calendarcolor'] = '#cccccc'; $permissions['isOnlySharedTodo'] = true; $permissions['calendarowner'] = Object::getowner($item['item_source']); $permissions['displayname'] = $item['uid_owner']; //\OCP\Util::writeLog('calendar','Cal Owner :'.$permissions['calendarowner'].$vtodo -> getAsString('SUMMARY') ,\OCP\Util::DEBUG); $permissions['iscompleted'] = false; if ($vtodo->COMPLETED) { $permissions['iscompleted'] = true; $vtodos['done'][] = TasksApp::arrayForJSON($item['item_source'], $vtodo, $user_timezone, $permissions, $event); } else { $vtodos['open'][] = TasksApp::arrayForJSON($item['item_source'], $vtodo, $user_timezone, $permissions, $event); } } } //$vtodos[] = $vtodo; } } return $vtodos; }
/** * * @param string $query * @return \OCP\Search\Result */ function search($query) { $today = date('Y-m-d', time()); $allowedCommands = array('#ra' => 1, '#dt' => 1); $calendars = Calendar::allCalendars(\OCP\USER::getUser(), true); $activeCalendars = ''; $config = \OC::$server->getConfig(); foreach ($calendars as $calendar) { $isAktiv = $calendar['active']; if ($config->getUserValue(\OCP\USER::getUser(), CalendarApp::$appname, 'calendar_' . $calendar['id']) != '') { $isAktiv = $config->getUserValue(\OCP\USER::getUser(), CalendarApp::$appname, 'calendar_' . $calendar['id']); } if (!array_key_exists('active', $calendar)) { $isAktiv = 1; } if ($isAktiv == 1 && (int) $calendar['issubscribe'] === 0) { $activeCalendars[] = $calendar; } } if (count($activeCalendars) == 0 || !\OCP\App::isEnabled(CalendarApp::$appname)) { //return false; } $results = array(); $searchquery = array(); if (substr_count($query, ' ') > 0) { $searchquery = explode(' ', $query); } else { $searchquery[] = $query; } $user_timezone = CalendarApp::getTimezone(); $l = \OC::$server->getL10N(TasksApp::$appname); $isDate = false; if (strlen($query) >= 5 && self::validateDate($query)) { $isDate = true; //\OCP\Util::writeLog('calendar','VALID DATE FOUND', \OCP\Util::DEBUG); } //foreach($calendars as $calendar) { $objects = TasksApp::all($activeCalendars); foreach ($objects as $object) { if ($object['objecttype'] != 'VTODO') { continue; } $searchAdvanced = false; if ($isDate == true && strlen($query) >= 5) { $tempQuery = strtotime($query); $checkDate = date('Y-m-d', $tempQuery); if (substr_count($object['startdate'], $checkDate) > 0 || substr_count($object['enddate'], $checkDate) > 0) { $searchAdvanced = true; } } if (array_key_exists($query, $allowedCommands) && $allowedCommands[$query]) { if ($query == '#dt') { $search = $object['startdate']; if (substr_count($search, $today) > 0) { $searchAdvanced = true; } } if ($query == '#ra') { if ($object['isalarm'] == 1) { $searchAdvanced = true; } } } if (substr_count(strtolower($object['summary']), strtolower($query)) > 0 || $searchAdvanced == true) { $calendardata = VObject::parse($object['calendardata']); $vtodo = $calendardata->VTODO; if (Object::getowner($object['id']) !== \OCP\USER::getUser()) { if (isset($vtodo->CLASS) && $vtodo->CLASS->getValue() === 'CONFIDENTIAL') { continue; } if (isset($vtodo->CLASS) && ($vtodo->CLASS->getValue() === 'PRIVATE' || $vtodo->CLASS->getValue() === '')) { continue; } } if ($vtodo->DUE) { $dtstart = $vtodo->DUE; $start_dt = $dtstart->getDateTime(); $start_dt->setTimezone(new \DateTimeZone($user_timezone)); if ($dtstart->getValueType() == 'DATE') { $info = $l->t('Date') . ': ' . $start_dt->format('d.m.Y'); } else { $info = $l->t('Date') . ': ' . $start_dt->format('d.m.y H:i'); } } if ($vtodo->DTSTART) { $dtstart1 = $vtodo->DTSTART; $start_dt = $dtstart1->getDateTime(); $start_dt->setTimezone(new \DateTimeZone($user_timezone)); if ($dtstart1->getValueType() == 'DATE') { $info = $l->t('Date') . ': ' . $start_dt->format('d.m.Y'); } else { $info = $l->t('Date') . ': ' . $start_dt->format('d.m.y H:i'); } } $link = \OC::$server->getURLGenerator()->linkToRoute(TasksApp::$appname . '.page.index') . '#' . urlencode($object['id']); $returnData['id'] = $object['id']; $returnData['description'] = $object['summary'] . ' ' . $info; $returnData['link'] = $link; $results[] = new Result($returnData); } } //} return $results; }
public function generateTasksToCalendarOutput() { $this->aTasksOutput = \OCP\Share::getItemsSharedWith(CalendarApp::SHARETODO, Vtodo::FORMAT_TODO); foreach ($this->aTasks as $task) { if ($task['objecttype'] != 'VTODO') { continue; } if (is_null($task['summary'])) { continue; } $object = VObject::parse($task['calendardata']); $vtodo = $object->VTODO; $isCompleted = $vtodo->COMPLETED; try { if ($this->sMode != '' && $this->sMode != 'alltasksdone') { //if($isCompleted){ //$this->aTasksOutput['done'][] = App::arrayForJSON($task['id'], $vtodo, $this->dUserTimeZone,$this->aCalendar[$task['calendarid']],$task); //}else{ $this->aTasksOutput['open'][] = App::arrayForJSON($task['id'], $vtodo, $this->dUserTimeZone, $this->aCalendar[$task['calendarid']], $task); //} } elseif ($this->sMode != '' && $this->sMode == 'alltasksdone') { if ($isCompleted) { //$dateCompleted=$isCompleted->getDateTime() -> format('d.m.Y'); $this->aTasksOutput['done'][] = App::arrayForJSON($task['id'], $vtodo, $this->dUserTimeZone, $this->aCalendar[$task['calendarid']], $task); } } else { //if($isCompleted){ //$this->aTasksOutput['done'][] = App::arrayForJSON($task['id'], $vtodo, $this->dUserTimeZone,$this->aCalendar[$task['calendarid']],$task); //}else{ $this->aTasksOutput['open'][] = App::arrayForJSON($task['id'], $vtodo, $this->dUserTimeZone, $this->aCalendar[$task['calendarid']], $task); //} } } catch (\Exception $e) { \OCP\Util::writeLog(App::$appname, $e->getMessage(), \OCP\Util::ERROR); } } }
/** *@PublicPage * @NoCSRFRequired * @UseSession */ public function index($token) { if ($token) { $linkItem = Share::getShareByToken($token, false); if (is_array($linkItem) && isset($linkItem['uid_owner'])) { $type = $linkItem['item_type']; $itemSource = CalendarApp::validateItemSource($linkItem['item_source'], CalendarApp::SHARETODOPREFIX); $shareOwner = $linkItem['uid_owner']; $calendarName = $linkItem['item_target']; $rootLinkItem = \OCP\Share::resolveReShare($linkItem); // stupid copy and paste job if (isset($linkItem['share_with'])) { // Authenticate share_with $password = $this->params('password'); if (isset($password)) { if ($linkItem['share_type'] === \OCP\Share::SHARE_TYPE_LINK) { // Check Password $newHash = ''; if (\OC::$server->getHasher()->verify($password, $linkItem['share_with'], $newHash)) { $this->session->set('public_link_authenticated', $linkItem['id']); if (!empty($newHash)) { } } else { \OCP\Util::addStyle('files_sharing', 'authenticate'); $params = array('wrongpw' => true); return new TemplateResponse('files_sharing', 'authenticate', $params, 'guest'); } } else { \OCP\Util::writeLog('share', 'Unknown share type ' . $linkItem['share_type'] . ' for share id ' . $linkItem['id'], \OCP\Util::ERROR); return false; } } else { // Check if item id is set in session if (!$this->session->exists('public_link_authenticated') || $this->session->get('public_link_authenticated') !== $linkItem['id']) { // Prompt for password \OCP\Util::addStyle('files_sharing', 'authenticate'); $params = array(); return new TemplateResponse('files_sharing', 'authenticate', $params, 'guest'); } } } \OCP\Util::addStyle(CalendarApp::$appname, '3rdparty/fontello/css/animation'); \OCP\Util::addStyle(CalendarApp::$appname, '3rdparty/fontello/css/fontello'); \OCP\Util::addStyle($this->appName, 'style'); \OCP\Util::addStyle($this->appName, 'share'); \OCP\Util::addScript($this->appName, 'share'); $data = TasksApp::getEventObject($itemSource, false, false); $l = \OC::$server->getL10N($this->appName); $object = VObject::parse($data['calendardata']); $vTodo = $object->VTODO; $id = $data['id']; $object = Object::cleanByAccessClass($id, $object); $accessclass = $vTodo->getAsString('CLASS'); $permissions = TasksApp::getPermissions($id, TasksApp::TODO, $accessclass); if ($accessclass === 'PRIVATE') { header('HTTP/1.0 404 Not Found'); $response = new TemplateResponse('core', '404', '', 'guest'); return $response; } $categories = $vTodo->getAsArray('CATEGORIES'); $summary = strtr($vTodo->getAsString('SUMMARY'), array('\\,' => ',', '\\;' => ';')); $location = strtr($vTodo->getAsString('LOCATION'), array('\\,' => ',', '\\;' => ';')); $description = strtr($vTodo->getAsString('DESCRIPTION'), array('\\,' => ',', '\\;' => ';')); $priorityOptionsArray = TasksApp::getPriorityOptionsFilterd(); //$priorityOptions=$priorityOptionsArray[(string)$vTodo->priority]; $priorityOptions = 0; $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'); } } $TaskStartTime = ''; $TaskStartDate = ''; 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'); } } //PERCENT-COMPLETE $cptlStatus = (string) $this->l10n->t('needs action'); $percentComplete = 0; if ($vTodo->{'PERCENT-COMPLETE'}) { $percentComplete = $vTodo->{'PERCENT-COMPLETE'}; //$cptlStatus = (string)$this->l10n->t('in procress'); if ($percentComplete === '0') { $cptlStatus = (string) $this->l10n->t('needs action'); } if ($percentComplete > '0' && $percentComplete < '100') { $cptlStatus = (string) $this->l10n->t('in procress'); } } if ($vTodo->{'COMPLETED'}) { $cptlStatus = (string) $this->l10n->t('completed'); } $timezone = \OC::$server->getSession()->get('public_link_timezone'); $sCat = ''; if (is_array($categories) && count($categories) > 0) { $sCat = $categories; } $params = ['eventid' => $itemSource, 'permissions' => $permissions, 'priorityOptions' => $priorityOptions, 'percentComplete' => $percentComplete, 'cptlStatus' => $cptlStatus, 'TaskDate' => isset($TaskDate) ? $TaskDate : '', 'TaskTime' => isset($TaskTime) ? $TaskTime : '', 'TaskStartDate' => isset($TaskStartDate) ? $TaskStartDate : '', 'TaskStartTime' => isset($TaskStartTime) ? $TaskStartTime : '', 'title' => $summary, 'accessclass' => $accessclass, 'location' => $location, 'categories' => $sCat, 'calendar' => $data['calendarid'], 'aCalendar' => CalendarApp::getCalendar($data['calendarid'], false, false), 'calAppName' => CalendarApp::$appname, 'description' => $description, 'repeat_rules' => '', 'link' => $link, 'timezone' => $timezone, 'uidOwner' => $shareOwner, 'displayName' => \OCP\User::getDisplayName($shareOwner), 'sharingToken' => $token, 'token' => $token]; $response = new TemplateResponse($this->appName, 'publicevent', $params, 'base'); return $response; } //end isset } //end token $tmpl = new \OCP\Template('', '404', 'guest'); $tmpl->printPage(); }
/** * @NoAdminRequired */ public function deleteTask() { $id = $this->params('id'); $task = CalendarApp::getEventObject($id); //Search for Sub Tasks $subTaskIds = ''; if ($task['relatedto'] === '') { $subTaskIds = TasksApp::getSubTasks($task['eventuid']); if ($subTaskIds !== '') { $tempIds = explode(',', $subTaskIds); foreach ($tempIds as $subIds) { Object::delete($subIds); } } } Object::delete($id); $params = ['id' => $id]; $response = new JSONResponse(); $response->setData($params); return $response; }
/** * @NoAdminRequired */ public function setCompletedTask() { $id = $this->params('id'); $checked = $this->params('checked'); $vcalendar = CalendarApp::getVCalendar($id); $vtodo = $vcalendar->VTODO; TasksApp::setComplete($vtodo, $checked ? 100 : 0, null); Object::edit($id, $vcalendar->serialize()); $user_timezone = CalendarApp::getTimezone(); $aTask = TasksApp::getEventObject($id, true, true); $aCalendar = CalendarCalendar::find($aTask['calendarid']); $task_info[] = TasksApp::arrayForJSON($id, $vtodo, $user_timezone, $aCalendar, $aTask); $subTaskIds = ''; if ($aTask['relatedto'] === '') { $subTaskIds = TasksApp::getSubTasks($aTask['eventuid']); if ($subTaskIds !== '') { $tempIds = explode(',', $subTaskIds); foreach ($tempIds as $subIds) { $vcalendar = TasksApp::getVCalendar($subIds, true, true); $vtodo = $vcalendar->VTODO; TasksApp::setComplete($vtodo, $checked ? 100 : 0, null); TasksApp::edit($subIds, $vcalendar->serialize()); $task_info[] = TasksApp::arrayForJSON($subIds, $vtodo, $user_timezone, $aCalendar, $aTask); } } } $params = ['status' => 'success', 'data' => $task_info]; $response = new JSONResponse($params); return $response; }
*/ /** * This class manages our tasks */ namespace OCA\TasksPlus; use Sabre\VObject\Recur\EventIterator; use OCA\CalendarPlus\Object; use OCA\CalendarPlus\Calendar; use OCA\CalendarPlus\VObject; use OCA\CalendarPlus\App as CalendarApp; use OCA\CalendarPlus\ActivityData; use OCA\TasksPlus\Timeline; use OCA\TasksPlus\Share\Backend\Vtodo; App::$appname = 'tasksplus'; App::$l10n = \OC::$server->getL10N(App::$appname); class App { const CALENDAR = 'calendar'; const TODO = 'todo'; public static $l10n; public static $appname; public static function getPriorityOptions() { return array('' => self::$l10n->t('Unspecified'), '1' => self::$l10n->t('1=highest'), '2' => '2', '3' => '3', '4' => '4', '5' => self::$l10n->t('5=medium'), '6' => '6', '7' => '7', '8' => '8', '9' => self::$l10n->t('9=lowest')); } /** * @brief Returns all shared events where user is owner * * @return array */