/** * @param ExportEventInterface $event * @throws CloseArchiveException * @throws OpenArchiveException * @throws UnavailableArchiveException */ public function onCreateArchive(ExportEventInterface $event) { $archiveName = (string) Uuid::uuid1(); $projectRootDir = realpath($this->projectRootDir); $archivePath = realpath($this->archiveDir) . '/' . $archiveName . '.zip'; $archive = $this->openArchive($archivePath); foreach ($this->exportedCollection as $exportable) { if ($exportable instanceof ExportableInterface) { $exportPath = $projectRootDir . '/' . $exportable->getExportDestination(); if (file_exists($exportPath)) { $exportFile = new \SplFileObject($exportPath); $archive->addFile($exportPath, $exportFile->getFilename()); } else { $this->logger->error(sprintf('Could not find export at "%s"', $exportPath)); // TODO Emit ErrorEvent to be handled later on for more robustness continue; } } } $this->closeArchive($archive, $archivePath); if ($event instanceof JobAwareEventInterface) { if (!file_exists($archivePath)) { throw new UnavailableArchiveException(sprintf('Could not find archive at "%s"', $archivePath), UnavailableArchiveException::DEFAULT_CODE); } /** @var \WeavingTheWeb\Bundle\ApiBundle\Entity\Job $job */ $job = $event->getJob(); $archiveFile = new \SplFileObject($archivePath); $filename = str_replace('.zip', '', $archiveFile->getFilename()); $router = $this->router; $getArchiveUrl = $this->router->generate('weaving_the_web_api_get_archive', ['filename' => $filename], $router::ABSOLUTE_PATH); $job->setOutput($getArchiveUrl); } $this->exportedCollection = []; }
public function declareAsExported(ExportableInterface $perspective) { $this->exportedCollection[] = $perspective; $this->exportEvent->declareAsExported($perspective); }