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')