/** * Runs the import */ public function run(Feed $feed) { $this->startTime = microtime(true); while ($item = $this->getNextItem($feed)) { // increase item count $this->processed++; // dispatch event for next item $event = new ItemEvent($this, $item); $this->eventDispatcher->dispatch(ImportEvents::ITEM_START, $event); // import the item try { $source = $this->handler->handle($this->import->getFeed(), $item); $this->successItem($item, $source); } catch (FailedItemException $e) { $this->failItem($item, $e->getMessage()); } // item done $this->eventDispatcher->dispatch(ImportEvents::ITEM_FINISH, $event); // clear entitymanager after batch if ($this->processed % $this->batchSize === 0) { $this->flush(); $this->clear(); } } // flush remaining changes $this->flush(); $this->clear(); $this->logger->finishImportLog($this->import); $this->logger->logImportResult($this); }
/** * @param Import $import * * @throws \RuntimeException */ protected function setImportItemCounts(Import $import) { $success = 0; $failed = 0; $skipped = 0; foreach ($this->logger->getImportedItems($import) as $item) { switch ($item['result']) { case 'success': $success++; break; case 'skipped': $skipped++; break; case 'failed': $failed++; break; default: throw new \RuntimeException('Unsupported result type: ' . $item['result']); } } $import->setNumberOfSuccessfulItems($success); $import->setNumberOfFailedItems($failed); $import->setNumberOfSkippedItems($skipped); }