Exemplo n.º 1
0
 /**
  * scan events for categories.
  * @param $events VEVENTs to scan. null to check all events for the current user.
  */
 public static function scanCategories($events = null)
 {
     if (is_null($events)) {
         $calendars = CalendarCalendar::allCalendars(\OCP\USER::getUser());
         if (count($calendars) > 0) {
             $events = array();
             foreach ($calendars as $calendar) {
                 if ($calendar['userid'] === \OCP\User::getUser()) {
                     $calendar_events = Object::all($calendar['id']);
                     $events = $events + $calendar_events;
                 }
             }
         }
     }
     if (is_array($events) && count($events) > 0) {
         $vcategories = \OC::$server->getTagManager()->load('event');
         $getName = function ($tag) {
             return $tag['name'];
         };
         $tags = array_map($getName, $vcategories->getTags());
         $vcategories->delete($tags);
         foreach ($events as $event) {
             $vobject = VObject::parse($event['calendardata']);
             if (!is_null($vobject)) {
                 $object = null;
                 if (isset($calendar->VEVENT)) {
                     $object = $calendar->VEVENT;
                 } else {
                     if (isset($calendar->VTODO)) {
                         $object = $calendar->VTODO;
                     } else {
                         if (isset($calendar->VJOURNAL)) {
                             $object = $calendar->VJOURNAL;
                         }
                     }
                 }
                 if ($object && isset($object->CATEGORIES)) {
                     $vcategories->addMultiple($object->CATEGORIES->getParts(), true, $event['id']);
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
 /**
  * @NoAdminRequired
  * 
  * @brief checks if a whole calendar is already cached
  * @param integer $id 
  * @return bool
  */
 public function isCalendarCached($id)
 {
     $aCachedevents = $this->getCalendar($id);
     $cachedevents = 0;
     if ($aCachedevents !== null) {
         $cachedevents = count($aCachedevents);
     }
     $repeatingevents = 0;
     $allevents = Object::all($id);
     foreach ($allevents as $event) {
         if ((int) $event['repeating'] === 1) {
             $repeatingevents++;
         }
     }
     if ($cachedevents < $repeatingevents) {
         return false;
     } else {
         return true;
     }
 }
Exemplo n.º 3
0
 /**
  * 
  * @param string $query
  * @return \OCP\Search\Result
  */
 function search($query)
 {
     $today = date('Y-m-d', time());
     $allowedCommands = array('#ra' => 1, '#dt' => 1);
     $calendars = CalendarCalendar::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(CalendarApp::$appname);
     $isDate = false;
     if (strlen($query) >= 5 && self::validateDate($query)) {
         $isDate = true;
         //\OCP\Util::writeLog('calendar','VALID DATE FOUND', \OCP\Util::DEBUG);
     }
     foreach ($activeCalendars as $calendar) {
         $objects = Object::all($calendar['id']);
         foreach ($objects as $object) {
             if ($object['objecttype'] !== 'VEVENT') {
                 continue;
             }
             $searchAdvanced = false;
             if ($isDate === true && strlen($query) >= 5) {
                 //	\OCP\Util::writeLog('calendar','search: ->'.$query, \OCP\Util::DEBUG);
                 $tempQuery = strtotime($query);
                 $checkDate = date('Y-m-d', $tempQuery);
                 if (substr_count($object['startdate'], $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']);
                 $vevent = $calendardata->VEVENT;
                 if (Object::getowner($object['id']) !== \OCP\USER::getUser()) {
                     if (isset($vevent->CLASS) && $vevent->CLASS->getValue() === 'CONFIDENTIAL') {
                         continue;
                     }
                     if (isset($vevent->CLASS) && ($vevent->CLASS->getValue() === 'PRIVATE' || $vevent->CLASS->getValue() === '')) {
                         continue;
                     }
                 }
                 $dtstart = $vevent->DTSTART;
                 $dtend = Object::getDTEndFromVEvent($vevent);
                 $start_dt = $dtstart->getDateTime();
                 $start_dt->setTimezone(new \DateTimeZone($user_timezone));
                 $end_dt = $dtend->getDateTime();
                 $end_dt->setTimezone(new \DateTimeZone($user_timezone));
                 if ($dtstart->getValueType() == 'DATE') {
                     $end_dt->modify('-1 sec');
                     if ($start_dt->format('d.m.Y') != $end_dt->format('d.m.Y')) {
                         $info = $l->t('Date') . ': ' . $start_dt->format('d.m.Y') . ' - ' . $end_dt->format('d.m.Y');
                     } else {
                         $info = $l->t('Date') . ': ' . $start_dt->format('d.m.Y');
                     }
                 } else {
                     $info = $l->t('Date') . ': ' . $start_dt->format('d.m.y H:i') . ' - ' . $end_dt->format('d.m.y H:i');
                 }
                 $link = \OC::$server->getURLGenerator()->linkToRoute(CalendarApp::$appname . '.page.index') . '#' . urlencode($object['id']);
                 $returnData['id'] = $object['id'];
                 $returnData['description'] = $object['summary'] . ' ' . $info;
                 $returnData['link'] = $link;
                 $returnData['type'] = 'calendar';
                 //$results[]=$returnData;
                 $results[] = new Result($returnData);
                 //$name,$text,$link,$type
             }
         }
     }
     return $results;
 }
Exemplo n.º 4
0
 /**
  * Returns all calendar objects within a calendar object.
  *
  * Every item contains an array with the following keys:
  *   * id - unique identifier which will be used for subsequent updates
  *   * calendardata - The iCalendar-compatible calnedar data
  *   * uri - a unique key which will be used to construct the uri. This can be any arbitrary string.
  *   * lastmodified - a timestamp of the last modification time
  *   * etag - An arbitrary string, surrounded by double-quotes. (e.g.:
  *   '  "abcdef"')
  *   * calendarid - The calendarid as it was passed to this function.
  *
  * Note that the etag is optional, but it's highly encouraged to return for
  * speed reasons.
  *
  * The calendardata is also optional. If it's not returned
  * 'getCalendarObject' will be called later, which *is* expected to return
  * calendardata.
  *
  * @param string $calendarId
  * @return array
  */
 public function getCalendarObjects($calendarId)
 {
     $data = array();
     $calendar = CalendarCalendar::find($calendarId);
     $isShared = $calendar['userid'] !== \OCP\USER::getUser();
     foreach (Object::all($calendarId) as $row) {
         if (!$isShared) {
             $data[] = $this->OCAddETag($row);
         } else {
             if (substr_count($row['calendardata'], 'CLASS') === 0) {
                 $data[] = $this->OCAddETag($row);
             } else {
                 $object = VObject::parse($row['calendardata']);
                 if (!$object) {
                     return false;
                 }
                 $isPrivate = false;
                 $toCheck = array('VEVENT', 'VJOURNAL', 'VTODO');
                 foreach ($toCheck as $type) {
                     foreach ($object->select($type) as $vobject) {
                         if (isset($vobject->{'CLASS'}) && $vobject->{'CLASS'}->getValue() === 'PRIVATE') {
                             $isPrivate = true;
                         }
                     }
                 }
                 if ($isPrivate === false) {
                     $data[] = $this->OCAddETag($row);
                 }
             }
         }
     }
     return $data;
 }