Esempio n. 1
0
 /**
  * @param string $backendId
  * @param string $privateUri
  * @param string $userId
  * @param ICalendar $usersCalendar
  * @return mixed
  */
 public function scanCalendar($backendId, $privateUri, $userId, ICalendar &$usersCalendar = null)
 {
     $backend = $this->backends->find($backendId);
     if (!$backend instanceof IBackend) {
         $this->logger->debug('Backend \'' . $backendId . '\' not found');
         return null;
     }
     $calendar = $this->getRemoteAndDeleteIfNecessary($backend, $privateUri, $userId);
     if (!$calendar) {
         return null;
     }
     $cachedCalendar = $this->getCached($backendId, $privateUri, $userId);
     if ($cachedCalendar) {
         if ($usersCalendar) {
             $calendar = $this->resetUnsupportedProperties($backend, $calendar, $usersCalendar);
         } else {
             $calendar = $this->resetUnsupportedProperties($backend, $calendar, $cachedCalendar);
         }
         $cachedCalendar->overwriteWith($calendar);
         $this->updateCache($cachedCalendar);
     } else {
         CalendarUtility::generateURI($calendar, function ($newUri) use($calendar) {
             return $this->cache->doesExist($newUri, $calendar->getUserId());
         }, true);
         $calendar = $this->addToCache($calendar);
         if ($usersCalendar) {
             $usersCalendar->setId($calendar->getId());
         }
     }
 }
 /**
  * @param mixed $data
  * @param int $format
  * @return \OCA\Calendar\Db\Calendar
  * @throws CorruptDataException
  * @throws TemporarilyNotAvailableException
  * @throws \InvalidArgumentException
  */
 public function createEntity($data, $format = self::FORMAT_PARAM)
 {
     if (!is_array($data) || empty($data)) {
         throw new CorruptDataException('CalendarFactory::createEntity() - Calendardata is empty');
     }
     if (isset($data['backend'])) {
         if ($data['backend'] instanceof IBackend) {
             if (!$this->backends->inCollection($data['backend'])) {
                 unset($data['backend']);
             }
         } else {
             $backend = $this->backends->find($data['backend']);
             if (!$backend instanceof IBackend) {
                 throw new TemporarilyNotAvailableException('CalendarFactory::createEntity() - Calendardata references unknown backend');
             }
             //replace backend-identifier with IBackend instance
             $data['backend'] = $backend;
         }
     }
     //replace timezone-identifier with ITimezone instance
     if (isset($data['timezone']) && isset($data['user_id'])) {
         try {
             $timezone = $this->timezones->find($data['timezone'], $data['user_id']);
             $row['timezone'] = $timezone;
         } catch (DoesNotExistException $ex) {
             unset($data['timezone']);
         }
     }
     //TODO - fix me
     unset($data['last_properties_update']);
     unset($data['last_object_update']);
     switch ($format) {
         case self::FORMAT_PARAM:
             return Calendar::fromParams($data);
             break;
         case self::FORMAT_ROW:
             return Calendar::fromRow($data);
             break;
         default:
             throw new \InvalidArgumentException('CalendarFactory::createEntity() - Unknown format given');
             break;
     }
 }
Esempio n. 3
0
 /**
  * was a calendar updated?
  * @param string $backendId
  * @param string $privateUri
  * @param string $userId
  * @return boolean
  */
 public function checkUpdate($backendId, $privateUri, $userId)
 {
     if ($this->watchPolicy === self::CHECK_ALWAYS || $this->watchPolicy === self::CHECK_ONCE && !$this->wasCalendarChecked($backendId, $privateUri, $userId)) {
         $backend = $this->backends->find($backendId);
         if (!$backend instanceof IBackend) {
             return false;
         }
         $cachedCalendar = $this->cache->findByPrivateUri($backendId, $privateUri, $userId);
         $this->setCheckedCalendar($backendId, $privateUri, $userId);
         $calendarAPI = $backend->getCalendarAPI();
         if ($calendarAPI->hasUpdated($cachedCalendar)) {
             $objectScanner = $backend->getObjectScanner($cachedCalendar);
             $objectScanner->scan();
             $this->scanner->scanCalendar($backendId, $privateUri, $userId);
             return true;
         }
         return false;
     } else {
         return false;
     }
 }