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));
                 }
             }
         }
     }
 }
Beispiel #2
0
 /**
  * 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();
 }