/** * Run importer * * @param int $limit number of sources to check */ public function runCommand($limit = 1) { $importSources = $this->importSourceRepository->findSourcesToImport($limit); $importReport = array(); if (isset($this->settings['filter']['searchFields']) && is_array($this->settings['filter']['searchFields'])) { $searchFields = $this->settings['filter']['searchFields']; } else { $searchFields = array('title', 'bodytext'); } $this->outputLine(); /** @var ImportSource $importSource */ foreach ($importSources as $importSource) { $this->outputLine($importSource->getTitle()); $this->outputDashedLine(); $this->extractorService->setSource($importSource->getUrl()); $this->extractorService->setMapping($importSource->getMapping()); $items = $this->extractorService->getItems(); foreach ($items as $item) { if ($this->importService->alreadyImported($importSource->getStoragePid(), $item->getGuid())) { $this->outputLine('Already imported: ' . $item->getGuid()); } elseif ($importSource->getFilterWords() && !$this->importService->matchFilter($item, $importSource->getFilterWords(), $searchFields)) { $this->outputLine('Skipped: ' . $item->getGuid() . '; Filter mismatch'); } else { $this->importService->importItem($importSource, $item); $this->outputLine('Imported: ' . $item->getGuid()); $importReport[] = $item->extractValue('title') . '; ' . $item->getGuid(); } } if (!$items) { $this->outputLine('No items found'); } $importSource->setLastRun(new \DateTime()); $this->importSourceRepository->update($importSource); $this->persistenceManager->persistAll(); } if ($importReport !== array() && !empty($this->settings['notification']['recipients'])) { /** @var MailMessage $message */ $message = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage'); $message->setTo($this->settings['notification']['recipients'])->setSubject($this->settings['notification']['subject'] ?: 'New items imported'); if ($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress']) { $message->setFrom($GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'], $GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromName'] ?: NULL); } $message->setBody(vsprintf($this->settings['notification']['body'] ?: 'Imported %1$d items: %2$s', array(count($importReport), PHP_EOL . PHP_EOL . implode(PHP_EOL, $importReport)))); $message->send(); } }
/** * Import item * * @param ImportSource $importSource * @param string $guid * @return string * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException */ public function importAction(ImportSource $importSource, $guid) { $this->extractorService->setSource($importSource->getUrl()); $this->extractorService->setMapping($importSource->getMapping()); $extractedItems = $this->extractorService->getItems(); foreach ($extractedItems as $item) { if ($item->getGuid() === $guid) { $this->importService->importItem($importSource, $item); $itemUid = $this->importService->alreadyImported($importSource->getPid(), $guid); $this->uriBuilder->reset()->setCreateAbsoluteUri(TRUE); if (\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv('TYPO3_SSL')) { $this->uriBuilder->setAbsoluteUriScheme('https'); } $returnUrl = $this->uriBuilder->uriFor('show', array('importSource' => $importSource), $this->request->getControllerName()); $this->redirectToUri('alt_doc.php?returnUrl=' . rawurlencode($returnUrl) . '&edit[tx_news_domain_model_news][' . $itemUid . ']=edit&disHelp=1'); } } $this->addFlashMessage('requested-item-not-found', '', AbstractMessage::ERROR); $this->redirect('show', NULL, NULL, array('importSource' => $importSource)); }