Chris@0: [], Chris@0: 'customized' => LOCALE_NOT_CUSTOMIZED, Chris@0: 'items' => -1, Chris@0: 'seek' => 0, Chris@0: ]; Chris@0: // Instantiate and initialize the stream reader for this file. Chris@0: $reader = new PoStreamReader(); Chris@0: $reader->setLangcode($file->langcode); Chris@0: $reader->setURI($file->uri); Chris@0: Chris@0: try { Chris@0: $reader->open(); Chris@0: } Chris@0: catch (\Exception $exception) { Chris@0: throw $exception; Chris@0: } Chris@0: Chris@0: $header = $reader->getHeader(); Chris@0: if (!$header) { Chris@0: throw new \Exception('Missing or malformed header.'); Chris@0: } Chris@0: Chris@0: // Initialize the database writer. Chris@0: $writer = new PoDatabaseWriter(); Chris@0: $writer->setLangcode($file->langcode); Chris@0: $writer_options = [ Chris@0: 'overwrite_options' => $options['overwrite_options'], Chris@0: 'customized' => $options['customized'], Chris@0: ]; Chris@0: $writer->setOptions($writer_options); Chris@0: $writer->setHeader($header); Chris@0: Chris@0: // Attempt to pipe all items from the file to the database. Chris@0: try { Chris@0: if ($options['seek']) { Chris@0: $reader->setSeek($options['seek']); Chris@0: } Chris@0: $writer->writeItems($reader, $options['items']); Chris@0: } Chris@0: catch (\Exception $exception) { Chris@0: throw $exception; Chris@0: } Chris@0: Chris@0: // Report back with an array of status information. Chris@0: $report = $writer->getReport(); Chris@0: Chris@0: // Add the seek position to the report. This is useful for the batch Chris@0: // operation. Chris@0: $report['seek'] = $reader->getSeek(); Chris@0: return $report; Chris@0: } Chris@0: Chris@0: }