public function importAllCalendarData($onlyCurrentUserOrganizer = false, $update = false) { if (count($this->calendarICSs) < 1 && !$this->findAllCalendarICSs()) { return false; } if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__ . ' Importing all calendar data for user ' . $this->userName . ' with ics uris: ' . print_r(array_keys($this->calendarICSs), true)); } Tinebase_Core::getApplicationInstance($this->appName, $this->modelName)->sendNotifications(false); Tinebase_Core::getApplicationInstance($this->appName, $this->modelName)->useNotes(false); Sabre\VObject\Component\VCalendar::$propertyMap['ATTACH'] = '\\Calendar_Import_CalDav_SabreAttachProperty'; $this->decorator->initCalendarImport(); $application_id = Tinebase_Application::getInstance()->getApplicationByName($this->appName)->getId(); $type = Tinebase_Model_Container::TYPE_PERSONAL; $defaultContainer = Tinebase_Container::getInstance()->getDefaultContainer($this->modelName); $defaultCalendarsName = $this->_getDefaultCalendarsName(); foreach ($this->calendarICSs as $calUri => $calICSs) { if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__ . ' Processing calendar ' . print_r($this->calendars[$calUri], true)); } $container = $this->findContainerForCalendar($calUri, $this->calendars[$calUri]['displayname'], $defaultCalendarsName, $type, $application_id); if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) { Tinebase_Core::getLogger()->trace(__METHOD__ . ' ' . __LINE__ . ' User container: ' . print_r($container->toArray(), true)); } $this->decorator->setCalendarProperties($container, $this->calendars[$calUri]); // we shouldnt do the grants here as the caldav user file may not contain all users, so setting the grants wont work properly! // use importAllCalendars to have the grants set //$grants = $this->getCalendarGrants($calUri); //Tinebase_Container::getInstance()->setGrants($container->getId(), $grants, TRUE, FALSE); $start = 0; $max = count($calICSs); do { $etags = array(); $requestEnd = ''; for ($i = $start; $i < $max && $i < $this->maxBulkRequest + $start; ++$i) { if (in_array($calICSs[$i], $this->_icsBlacklist)) { if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . ' ' . __LINE__ . ' Ignoring blacklisted ics: ' . $calICSs[$i]); } continue; } $requestEnd .= ' <a:href>' . $calICSs[$i] . "</a:href>\n"; } $start = $i; $requestEnd .= '</b:calendar-multiget>'; $result = $this->calDavRequest('REPORT', $calUri, self::getAllCalendarDataRequest . $requestEnd, 1); foreach ($result as $key => $value) { if (!isset($value['{urn:ietf:params:xml:ns:caldav}calendar-data'])) { continue; } $data = $value['{urn:ietf:params:xml:ns:caldav}calendar-data']; if (strpos($data, 'BEGIN:' . $this->skipComonent) !== false) { if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) { Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Skipping ' . $this->skipComonent); } continue; } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . ' ' . __LINE__ . ' Processing caldav record: ' . $key); } $name = explode('/', $key); $name = end($name); $id = $this->_getEventIdFromName($name); try { if ($update && in_array($id, $this->existingRecordIds[$calUri])) { $webdavFrontend = new $this->webdavFrontend($container, $id); // @todo move this to separate fn if ($onlyCurrentUserOrganizer && $this->modelName === 'Calendar_Model_Event') { // assert current user is organizer if ($webdavFrontend->getRecord()->organizer && $webdavFrontend->getRecord()->organizer == Tinebase_Core::getUser()->contact_id) { $webdavFrontend->put($data); } else { continue; } } else { $webdavFrontend->put($data); } } else { $webdavFrontend = call_user_func_array(array($this->webdavFrontend, 'create'), array($container, $name, $data, $onlyCurrentUserOrganizer)); } if ($webdavFrontend) { $etags[$webdavFrontend->getRecord()->getId()] = $value['{DAV:}getetag']; } } catch (Exception $e) { if (Tinebase_Core::isLogLevel(Zend_Log::WARN)) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not create event from data: ' . $data); } Tinebase_Exception::log($e, false); } } $this->_recordBackend->setETags($etags); } while ($start < $max); } return true; }