Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * @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);
 }