From 24b69accdf409fdef4b768b5c6018e9cf0363d26 Mon Sep 17 00:00:00 2001 From: Adam Schubert Date: Sun, 6 Oct 2019 02:20:22 +0200 Subject: [PATCH] Migrate to use FileStructureLink --- .../DirectoryPictureForm.php | 7 +- .../Gallery/PictureForm/PictureForm.php | 16 +++- .../Gallery/PictureGrid/PictureGrid.php | 4 +- .../Gallery/Gallery/Detail/detail.latte | 5 +- .../Gallery/Gallery/Overview/overview.latte | 11 ++- .../Console/MigrateLinkGalleryCommand.php | 84 +++++++++++++++++++ src/Dravencms/Gallery/DI/console.neon | 3 +- src/Dravencms/Gallery/Gallery.php | 3 + .../Model/Gallery/Entities/Picture.php | 63 +++++++++----- .../Gallery/Repository/PictureRepository.php | 14 +++- 10 files changed, 175 insertions(+), 35 deletions(-) create mode 100644 src/Dravencms/Gallery/Console/MigrateLinkGalleryCommand.php diff --git a/src/Dravencms/AdminModule/Components/Gallery/DirectoryPictureForm/DirectoryPictureForm.php b/src/Dravencms/AdminModule/Components/Gallery/DirectoryPictureForm/DirectoryPictureForm.php index 0b3a815..412f0f5 100644 --- a/src/Dravencms/AdminModule/Components/Gallery/DirectoryPictureForm/DirectoryPictureForm.php +++ b/src/Dravencms/AdminModule/Components/Gallery/DirectoryPictureForm/DirectoryPictureForm.php @@ -22,6 +22,7 @@ use Dravencms\Components\BaseControl\BaseControl; use Dravencms\Components\BaseForm\BaseFormFactory; +use Dravencms\Model\File\Entities\StructureFileLink; use Dravencms\Model\File\Repository\StructureFileRepository; use Dravencms\Model\File\Repository\StructureRepository; use Dravencms\Model\Gallery\Entities\Gallery; @@ -176,8 +177,10 @@ public function editFormSucceeded(Form $form) $name = $structureFile->getId().'-'.$structureFile->getName(); $identifier = md5($name.microtime().rand().$structureFile->getFile()->getSum()); - - $picture = new Picture($this->gallery, $structureFile, $identifier, $values->isActive, false); + + $structureFileLink = new StructureFileLink(\Dravencms\Gallery\Gallery::PLUGIN_NAME, $structureFile, true, true); + $this->entityManager->persist($structureFileLink); + $picture = new Picture($this->gallery, $structureFileLink, $identifier, $values->isActive, false); $picture->setTags($tags); $this->entityManager->persist($picture); diff --git a/src/Dravencms/AdminModule/Components/Gallery/PictureForm/PictureForm.php b/src/Dravencms/AdminModule/Components/Gallery/PictureForm/PictureForm.php index 05be982..7b74935 100644 --- a/src/Dravencms/AdminModule/Components/Gallery/PictureForm/PictureForm.php +++ b/src/Dravencms/AdminModule/Components/Gallery/PictureForm/PictureForm.php @@ -25,6 +25,7 @@ use Dravencms\File\File; use Dravencms\Model\File\Entities\Structure; +use Dravencms\Model\File\Entities\StructureFileLink; use Dravencms\Model\File\Repository\StructureFileRepository; use Dravencms\Model\File\Repository\StructureRepository; use Dravencms\Model\Gallery\Entities\Gallery; @@ -249,9 +250,20 @@ public function editFormSucceeded(Form $form) $picture->setIsActive($values->isActive); $picture->setIsPrimary($values->isPrimary); $picture->setPosition($values->position); - $picture->setStructureFile($structureFile); + + if ($picture->getStructureFileLink()) { + $existingStructureFile = $picture->getStructureFileLink(); + $existingStructureFile->setStructureFile($structureFile); + + } else { + $existingStructureFile = new StructureFileLink(\Dravencms\Gallery\Gallery::PLUGIN_NAME, $structureFile, true, true); + } + + $this->entityManager->persist($existingStructureFile); } else { - $picture = new Picture($this->gallery, $structureFile, $values->identifier, $values->isActive, $values->isPrimary); + $structureFileLink = new StructureFileLink(\Dravencms\Gallery\Gallery::PLUGIN_NAME, $structureFile, true, true); + $this->entityManager->persist($structureFileLink); + $picture = new Picture($this->gallery, $structureFileLink, $values->identifier, $values->isActive, $values->isPrimary); } $picture->setTags($tags); diff --git a/src/Dravencms/AdminModule/Components/Gallery/PictureGrid/PictureGrid.php b/src/Dravencms/AdminModule/Components/Gallery/PictureGrid/PictureGrid.php index ed21e3f..8e1df8d 100644 --- a/src/Dravencms/AdminModule/Components/Gallery/PictureGrid/PictureGrid.php +++ b/src/Dravencms/AdminModule/Components/Gallery/PictureGrid/PictureGrid.php @@ -108,9 +108,9 @@ public function createComponentGrid($name) ->setAlign('center') ->setRenderer(function ($row) use($grid){ /** @var Picture $row */ - if ($haveImage = $row->getStructureFile()) { + if ($haveImage = $row->getStructureFileLink()) { $img = Html::el('img'); - $img->src = $this->imagePipe->request($haveImage->getFile(), '200x'); + $img->src = $this->imagePipe->request($haveImage->getStructureFile()->getFile(), '200x'); } else { $img = ''; } diff --git a/src/Dravencms/FrontModule/Components/Gallery/Gallery/Detail/detail.latte b/src/Dravencms/FrontModule/Components/Gallery/Gallery/Detail/detail.latte index ae190cd..d8cd7cb 100644 --- a/src/Dravencms/FrontModule/Components/Gallery/Gallery/Detail/detail.latte +++ b/src/Dravencms/FrontModule/Components/Gallery/Gallery/Detail/detail.latte @@ -11,8 +11,9 @@
diff --git a/src/Dravencms/FrontModule/Components/Gallery/Gallery/Overview/overview.latte b/src/Dravencms/FrontModule/Components/Gallery/Gallery/Overview/overview.latte index 909c08f..5caf052 100644 --- a/src/Dravencms/FrontModule/Components/Gallery/Gallery/Overview/overview.latte +++ b/src/Dravencms/FrontModule/Components/Gallery/Gallery/Overview/overview.latte @@ -4,13 +4,16 @@
{if $gallery->getPrimaryPicture()->count()} - {var $picture = $gallery->getPrimaryPicture()[0]->getStructureFile()} + {var $picture = $gallery->getPrimaryPicture()[0]} + {var $structureFile = ($picture->getStructureFileLink() ? $picture->getStructureFileLink()->getStructureFile(): null)} {elseif $gallery->getPictures()->count()} - {var $picture = $gallery->getPictures()[0]->getStructureFile()} + {var $picture = $gallery->getPictures()[0]} + {var $structureFile = ($picture->getStructureFileLink() ? $picture->getStructureFileLink()->getStructureFile(): null)} {else} - {var $picture = null} + {var $structureFile = null} {/if} - {$galleryTranslation->getName()} + + {$galleryTranslation->getName()}

{$galleryTranslation->getName()}

diff --git a/src/Dravencms/Gallery/Console/MigrateLinkGalleryCommand.php b/src/Dravencms/Gallery/Console/MigrateLinkGalleryCommand.php new file mode 100644 index 0000000..91ce657 --- /dev/null +++ b/src/Dravencms/Gallery/Console/MigrateLinkGalleryCommand.php @@ -0,0 +1,84 @@ +entityManager = $entityManager; + $this->pictureRepository = $pictureRepository; + } + + /** + * + */ + protected function configure(): void + { + $this->setName('gallery:gallery:migrate-link') + ->setDescription('Migrate from direct fileStructure usage to fileStructureLink'); + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @return int|null + * @throws \GuzzleHttp\Exception\GuzzleException + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + try { + $migrated = 0; + foreach ($this->pictureRepository->getAll() AS $picture) { + if ($picture->getStructureFile() && !$picture->getStructureFileLink()) { + $structureFileLink = new StructureFileLink(Gallery::PLUGIN_NAME, $picture->getStructureFile(), true, true); + $picture->setStructureFileLink($structureFileLink); + $picture->setStructureFile(null); + $this->entityManager->persist($structureFileLink); + $this->entityManager->persist($picture); + $migrated++; + } + } + + $this->entityManager->flush(); + $output->writeLn(sprintf('%s pictures has been migrated!', $migrated)); + return 0; // zero return code means everything is ok + + } catch (\Exception $e) { + $output->writeLn('' . $e->getMessage() . ''); + return 1; // non-zero return code means error + } + } +} \ No newline at end of file diff --git a/src/Dravencms/Gallery/DI/console.neon b/src/Dravencms/Gallery/DI/console.neon index 7d9c063..c917faf 100644 --- a/src/Dravencms/Gallery/DI/console.neon +++ b/src/Dravencms/Gallery/DI/console.neon @@ -1 +1,2 @@ -- Dravencms\Gallery\Console\CleanGalleryCommand \ No newline at end of file +- Dravencms\Gallery\Console\CleanGalleryCommand +- Dravencms\Gallery\Console\MigrateLinkGalleryCommand \ No newline at end of file diff --git a/src/Dravencms/Gallery/Gallery.php b/src/Dravencms/Gallery/Gallery.php index 2f3fee3..0f2d670 100644 --- a/src/Dravencms/Gallery/Gallery.php +++ b/src/Dravencms/Gallery/Gallery.php @@ -11,6 +11,9 @@ class Gallery { use Nette\SmartObject; + + const PLUGIN_NAME = 'gallery'; + public function __construct() { } diff --git a/src/Dravencms/Model/Gallery/Entities/Picture.php b/src/Dravencms/Model/Gallery/Entities/Picture.php index 5eb1105..ca12c0f 100644 --- a/src/Dravencms/Model/Gallery/Entities/Picture.php +++ b/src/Dravencms/Model/Gallery/Entities/Picture.php @@ -3,6 +3,7 @@ use Doctrine\Common\Collections\Criteria; use Dravencms\Model\File\Entities\StructureFile; +use Dravencms\Model\File\Entities\StructureFileLink; use Dravencms\Model\Locale\Entities\ILocale; use Dravencms\Model\Tag\Entities\Tag; use Doctrine\Common\Collections\ArrayCollection; @@ -58,6 +59,13 @@ class Picture */ private $structureFile; + /** + * @var StructureFileLink + * @ORM\ManyToOne(targetEntity="\Dravencms\Model\File\Entities\StructureFileLink") + * @ORM\JoinColumn(name="structure_file_link_id", referencedColumnName="id") + */ + private $structureFileLink; + /** * @var Gallery * @Gedmo\SortableGroup @@ -91,18 +99,18 @@ class Picture /** * Picture constructor. * @param Gallery $gallery - * @param StructureFile $structureFile + * @param StructureFileLink $structureFileLink * @param $identifier * @param bool $isActive * @param bool $isPrimary */ - public function __construct(Gallery $gallery, StructureFile $structureFile, $identifier, $isActive = true, $isPrimary = false) + public function __construct(Gallery $gallery, StructureFileLink $structureFileLink, string $identifier, bool $isActive = true, bool $isPrimary = false) { $this->identifier = $identifier; $this->gallery = $gallery; $this->isActive = $isActive; $this->isPrimary = $isPrimary; - $this->structureFile = $structureFile; + $this->structureFileLink = $structureFileLink; $this->tags = new ArrayCollection(); $this->translations = new ArrayCollection(); @@ -111,7 +119,7 @@ public function __construct(Gallery $gallery, StructureFile $structureFile, $ide /** * @param string $identifier */ - public function setIdentifier($identifier) + public function setIdentifier(string $identifier): void { $this->identifier = $identifier; } @@ -119,15 +127,15 @@ public function setIdentifier($identifier) /** * @param boolean $isActive */ - public function setIsActive($isActive) + public function setIsActive(bool $isActive): void { $this->isActive = $isActive; } /** - * @param mixed $position + * @param int $position */ - public function setPosition($position) + public function setPosition(int $position): void { $this->position = $position; } @@ -135,15 +143,23 @@ public function setPosition($position) /** * @param StructureFile $structureFile */ - public function setStructureFile(StructureFile $structureFile) + public function setStructureFile(StructureFile $structureFile = null): void { $this->structureFile = $structureFile; } + /** + * @param StructureFileLink $structureFileLink + */ + public function setStructureFileLink(StructureFileLink $structureFileLink): void + { + $this->structureFileLink = $structureFileLink; + } + /** * @param boolean $isPrimary */ - public function setIsPrimary($isPrimary) + public function setIsPrimary(bool $isPrimary): void { $this->isPrimary = $isPrimary; } @@ -151,7 +167,7 @@ public function setIsPrimary($isPrimary) /** * @param Tag $tag */ - public function addTag(Tag $tag) + public function addTag(Tag $tag): void { if ($this->tags->contains($tag)) { @@ -164,7 +180,7 @@ public function addTag(Tag $tag) /** * @param Tag $tag */ - public function removeTag(Tag $tag) + public function removeTag(Tag $tag): void { if (!$this->tags->contains($tag)) { @@ -178,7 +194,7 @@ public function removeTag(Tag $tag) * * @param ArrayCollection $tags */ - public function setTags(ArrayCollection $tags) + public function setTags(ArrayCollection $tags): void { //Remove all not in foreach($this->tags AS $tag) @@ -202,7 +218,7 @@ public function setTags(ArrayCollection $tags) /** * @return boolean */ - public function isActive() + public function isActive(): bool { return $this->isActive; } @@ -210,25 +226,34 @@ public function isActive() /** * @return boolean */ - public function isPrimary() + public function isPrimary(): bool { return $this->isPrimary; } /** - * @return mixed + * @return int */ - public function getPosition() + public function getPosition(): int { return $this->position; } /** * @return StructureFile + * @deprecated Use getStructureFileLink()->getStructureFile() */ public function getStructureFile() { - return $this->structureFile; + return ($this->structureFileLink ? $this->structureFileLink->getStructureFile() : $this->structureFile); + } + + /** + * @return StructureFileLink + */ + public function getStructureFileLink() + { + return $this->structureFileLink; } /** @@ -242,7 +267,7 @@ public function getTags() /** * @return Gallery */ - public function getGallery() + public function getGallery(): Gallery { return $this->gallery; } @@ -258,7 +283,7 @@ public function getTranslations() /** * @return string */ - public function getIdentifier() + public function getIdentifier(): string { return $this->identifier; } diff --git a/src/Dravencms/Model/Gallery/Repository/PictureRepository.php b/src/Dravencms/Model/Gallery/Repository/PictureRepository.php index ea1933c..364f98b 100644 --- a/src/Dravencms/Model/Gallery/Repository/PictureRepository.php +++ b/src/Dravencms/Model/Gallery/Repository/PictureRepository.php @@ -32,7 +32,7 @@ public function __construct(EntityManager $entityManager) * @param $id * @return mixed|null|Picture */ - public function getOneById($id) + public function getOneById(int $id) { return $this->pictureRepository->find($id); } @@ -41,11 +41,19 @@ public function getOneById($id) * @param $id * @return Picture[] */ - public function getById($id) + public function getById(int $id) { return $this->pictureRepository->findBy(['id' => $id]); } + /** + * @return Picture[] + */ + public function getAll() + { + return $this->pictureRepository->findAll(); + } + /** * @param Gallery $gallery * @return \Kdyby\Doctrine\QueryBuilder @@ -66,7 +74,7 @@ public function getPictureQueryBuilder(Gallery $gallery) * @return mixed * @throws \Doctrine\ORM\NonUniqueResultException */ - public function isIdentifierFree($identifier, Gallery $gallery, Picture $pictureIgnore = null) + public function isIdentifierFree(string $identifier, Gallery $gallery, Picture $pictureIgnore = null) { $qb = $this->pictureRepository->createQueryBuilder('p') ->select('p')