protected function execute(InputInterface $input, OutputInterface $output) { $folder = $input->getArgument('folder'); if (strpos($folder, '.') !== false) { throw new \RuntimeException('Dots are not allowed.'); } $folder = $this->container->getParameter('directories.project_root') . DIRECTORY_SEPARATOR . $folder; if (!is_dir($folder)) { throw new \RuntimeException(sprintf('Invalid directory [%s].'), $folder); } $registry = new HandlerRegistry(); $registry->addSubscribingHandler(new DateHandler()); $registry->addSubscribingHandler(new SupraPathHandler()); $dumper = new ORMDumper($this->container->getDoctrine()->getManager(), $registry, new Map(array('yml' => new SupraYamlFixtureGenerator()))); $dumper->setDumpMultipleFiles(false); $dumper->dump($folder, 'yml'); //dump files $entityManager = $this->container->getDoctrine()->getManager(); $fileStorage = $this->container['cms.file_storage']; /* @var $fileStorage FileStorage */ foreach ($entityManager->getRepository(File::CN())->findAll() as $file) { /* @var $file File */ if ($fileStorage->fileExists($file)) { copy($fileStorage->getFilesystemPath($file), $this->getFileTemporaryName($file, $folder)); } if ($file instanceof Image) { foreach ($file->getImageSizeCollection() as $imageSize) { /* @var $imageSize ImageSize */ $imageSizePath = $fileStorage->getImagePath($file, $imageSize->getName()); if (is_file($imageSizePath)) { copy($imageSizePath, $this->getImageSizeTemporaryName($imageSize, $folder)); } } } } }
/** * Searches for a File entity by ID. * * @param string $fileId * @return null|File */ public function findFile($fileId) { return $this->find($fileId, File::CN()); }
protected function execute(InputInterface $input, OutputInterface $output) { $dataFolder = $this->container->getParameter('directories.project_root') . DIRECTORY_SEPARATOR . $input->getArgument('folder'); if (!is_dir($dataFolder)) { throw new \RuntimeException(sprintf('The directory [%s] does not exists.', $dataFolder)); } $dataFile = $dataFolder . DIRECTORY_SEPARATOR . 'fixtures.yml'; if (!is_file($dataFile)) { throw new \RuntimeException(sprintf('The fixtures file [%s] does not exists.', $dataFile)); } $entityManager = $this->container->getDoctrine()->getManager(); /* @var $entityManager EntityManager */ $entityManager->beginTransaction(); $entities = array('CmsAuthentication:User', 'CmsAuthentication:Group', 'CmsAuthentication:AbstractUser', 'CmsAuthentication:UserPreference', 'CmsAuthentication:UserPreferencesCollection', 'Cms:ApplicationLocalizationParameter', 'Cms:BlockPropertyMetadata', 'Cms:ReferencedElement\\ReferencedElementAbstract', 'Cms:ReferencedElement\\ImageReferencedElement', 'Cms:ReferencedElement\\LinkReferencedElement', 'Cms:ReferencedElement\\MediaReferencedElement', 'Cms:BlockProperty', 'Cms:Abstraction\\Block', 'Cms:Abstraction\\PlaceHolder', 'Cms:LocalizationTag', 'Cms:Abstraction\\Localization', 'Cms:Abstraction\\RedirectTarget', 'Cms:PageLocalizationPath', 'Cms:Page', 'Cms:GroupPage', 'Cms:EditLock', 'Cms:TemplateLayout', 'Cms:Template', 'Cms:Abstraction\\AbstractPage', 'Cms:FileProperty', 'Cms:ImageSize', 'Cms:Image', 'Cms:File', 'Cms:Folder', 'Cms:FilePath', 'Cms:Abstraction\\File'); if ($input->getOption('clear')) { $auditManager = $this->container['entity_audit.manager']; /* @var $auditManager AuditManager */ $metadata = array(); foreach ($entities as $name) { $classMetadata = $entityManager->getClassMetadata($name); $metadata[] = $classMetadata; if ($auditManager->getMetadataFactory()->isAudited($classMetadata->name)) { $tableName = $auditManager->getConfiguration()->getTablePrefix() . $classMetadata->getTableName() . $auditManager->getConfiguration()->getTableSuffix(); $entityManager->getConnection()->executeQuery(sprintf('DELETE FROM %s ', $tableName))->execute(); } } $entityManager->getConnection()->executeQuery(sprintf('DELETE FROM %s ', $auditManager->getConfiguration()->getRevisionTableName()))->execute(); $schemaTool = new SchemaTool($entityManager); $schemaTool->dropSchema($metadata); $schemaTool->createSchema($metadata); } $evtManager = $entityManager->getEventManager(); foreach ($evtManager->getListeners() as $event => $listeners) { foreach ($listeners as $listener) { if ($listener instanceof PagePathGeneratorListener || $listener instanceof FilePathChangeListener || $listener instanceof NestedSetListener || $listener instanceof ImageSizeCreatorListener) { $evtManager->removeEventListener($event, $listener); } } } Fixtures::load($dataFile, $entityManager, array('persist_once' => true)); $entityManager->flush(); // 'publish' pages $entityManager->createQuery(sprintf('UPDATE %s l SET l.publishedRevision = 1', Localization::CN()))->execute(); $fileStorage = $this->getFileStorage(); foreach ($entityManager->getRepository(File::CN())->findAll() as $file) { /* @var $file File */ $tmpName = $this->getFileTemporaryName($file, $dataFolder); if (is_file($tmpName)) { $this->ensureFileDirectoryExists($file); copy($tmpName, $fileStorage->getFilesystemPath($file)); } if ($file instanceof Image) { foreach ($file->getImageSizeCollection() as $imageSize) { /* @var $imageSize ImageSize */ $tmpName = $this->getImageSizeTemporaryName($imageSize, $dataFolder); if (is_file($tmpName)) { $this->ensureImageSizeDirectoryExists($file, $imageSize->getName()); copy($tmpName, $fileStorage->getImagePath($file, $imageSize->getName())); } } } } $entityManager->commit(); }