/** * Import command * * @param string $icsCalendarUri * @param int $pid */ public function importCommand($icsCalendarUri = NULL, $pid = NULL) { if ($icsCalendarUri === NULL || !filter_var($icsCalendarUri, FILTER_VALIDATE_URL)) { $this->enqueueMessage('You have to enter a valid URL to the iCalendar ICS', 'Error', FlashMessage::ERROR); } if (!MathUtility::canBeInterpretedAsInteger($pid)) { $this->enqueueMessage('You have to enter a valid PID for the new created elements', 'Error', FlashMessage::ERROR); } // fetch external URI and write to file $this->enqueueMessage('Start to checkout the calendar: ' . $icsCalendarUri, 'Calendar', FlashMessage::INFO); $relativeIcalFile = 'typo3temp/ical.' . GeneralUtility::shortMD5($icsCalendarUri) . '.ical'; $absoluteIcalFile = GeneralUtility::getFileAbsFileName($relativeIcalFile); $content = GeneralUtility::getUrl($icsCalendarUri); GeneralUtility::writeFile($absoluteIcalFile, $content); // get Events from file $icalEvents = $this->getIcalEvents($absoluteIcalFile); $this->enqueueMessage('Found ' . sizeof($icalEvents) . ' events in the given calendar', 'Items', FlashMessage::INFO); $events = $this->prepareEvents($icalEvents); $this->enqueueMessage('This is just a first draft. There are same missing fields. Will be part of the next release', 'Items', FlashMessage::ERROR); return; foreach ($events as $event) { $eventObject = $this->eventRepository->findOneByImportId($event['uid']); if ($eventObject instanceof Event) { // update $eventObject->setTitle($event['title']); $eventObject->setDescription($this->nl2br($event['description'])); $this->eventRepository->update($eventObject); $this->enqueueMessage('Update Event Meta data: ' . $eventObject->getTitle(), 'Update'); } else { // create $eventObject = new Event(); $eventObject->setPid($pid); $eventObject->setImportId($event['uid']); $eventObject->setTitle($event['title']); $eventObject->setDescription($this->nl2br($event['description'])); $configuration = new Configuration(); $configuration->setType(Configuration::TYPE_TIME); $configuration->setFrequency(Configuration::FREQUENCY_NONE); /** @var \DateTime $startDate */ $startDate = clone $event['start']; $startDate->setTime(0, 0, 0); $configuration->setStartDate($startDate); /** @var \DateTime $endDate */ $endDate = clone $event['end']; $endDate->setTime(0, 0, 0); $configuration->setEndDate($endDate); $startTime = $this->dateTimeToDaySeconds($event['start']); if ($startTime > 0) { $configuration->setStartTime($startTime); $configuration->setEndTime($this->dateTimeToDaySeconds($event['end'])); $configuration->setAllDay(FALSE); } else { $configuration->setAllDay(TRUE); } $eventObject->addCalendarize($configuration); $this->eventRepository->add($eventObject); $this->enqueueMessage('Add Event: ' . $eventObject->getTitle(), 'Add'); } } }
/** * Run the import * * @param array $event * @param ImportCommandController $commandController * @param int $pid * @param boolean $handled * * @return array * @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException */ public function importCommand(array $event, $commandController, $pid, $handled) { $commandController->enqueueMessage('Handle via Default Event Import Slot'); $eventObject = $this->getEvent($event['uid']); $eventObject->setPid($pid); $eventObject->setTitle($event['title']); $eventObject->setDescription($this->nl2br($event['description'])); $configuration = $this->getConfiguration($pid, $event['start'], $event['end']); $eventObject->addCalendarize($configuration); if ($eventObject->getUid() === null) { $this->eventRepository->update($eventObject); $commandController->enqueueMessage('Update Event Meta data: ' . $eventObject->getTitle(), 'Update'); } else { $this->eventRepository->add($eventObject); $commandController->enqueueMessage('Add Event: ' . $eventObject->getTitle(), 'Add'); } $this->persist(); $handled = true; return ['event' => $event, 'commandController' => $commandController, 'pid' => $pid, 'handled' => $handled]; }