* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ declare(strict_types=1); namespace PrestaShop\Module\PsxDesign\Repository; if (!defined('_PS_VERSION_')) { exit; } use Doctrine\ORM\EntityManagerInterface; use Exception; use PrestaShop\Module\PsxDesign\DTO\PsxDesignLogoTextData; use PrestaShop\Module\PsxDesign\Entity\PsxdesignLogo; use PrestaShop\Module\PsxDesign\Exception\PsxDesignException; use PrestaShop\Module\PsxDesign\Exception\PsxDesignLogoImportException; class PsxdesignLogoRepository { private const IMAGE_TYPE = 'image'; /** * @var EntityManagerInterface */ private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @param string $logoDestination * @param string $uploadType * @param bool $active * @param bool $useHeader * * @return int * * @throws PsxDesignLogoImportException */ public function insertLogoImage(string $logoDestination, string $uploadType, bool $active = true, bool $useHeader = false): int { $logo = new PsxDesignLogo(); $logo->setLogoType($uploadType) ->setLogoDestination($logoDestination) ->setLogoType(self::IMAGE_TYPE) ->setStyle('') ->setColor('') ->setFont('') ->setFontSize(0) ->setText('') ->setActive($active) ->setUseHeaderLogo($useHeader); try { $this->entityManager->persist($logo); $this->entityManager->flush(); } catch (Exception $e) { throw new PsxDesignLogoImportException('Inserting logo image failed', PsxDesignLogoImportException::INSERT_LOGO_FAILED); } return $logo->getId(); } /** * @param string $logoDestination * @param string $uploadType * @param bool $active * @param bool $useHeader * * @return int * * @throws PsxDesignException */ public function updateLogoImage(string $logoDestination, string $uploadType, bool $active = true, bool $useHeader = false): int { /** @var PsxdesignLogo|null $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => $logoDestination, 'active' => $active]); if (empty($logo)) { return $this->insertLogoImage($logoDestination, $uploadType); } $logo->setLogoType($uploadType) ->setLogoDestination($logoDestination) ->setLogoType(self::IMAGE_TYPE) ->setStyle('') ->setColor('') ->setFont('') ->setFontSize(0) ->setText('') ->setActive($active) ->setUseHeaderLogo($useHeader); $this->entityManager->persist($logo); $this->entityManager->flush(); return $logo->getId(); } /** * @return PsxdesignLogo[] */ public function getActiveLogos(): array { return $this->entityManager->getRepository(PsxdesignLogo::class)->findBy(['active' => true]); } public function getHeaderLogo(): ?PsxdesignLogo { /* @var PsxdesignLogo|null $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => 'header', 'active' => true]); if (empty($logo)) { return null; } return $logo; } /** * @return PsxdesignLogo|null */ public function getInvoiceLogo(): ?PsxdesignLogo { /* @var PsxdesignLogo|null $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => 'invoice', 'active' => true]); if (empty($logo)) { return null; } return $logo; } /** * @return PsxdesignLogo|null */ public function getEmailLogo(): ?PsxdesignLogo { /* @var PsxdesignLogo $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => 'email', 'active' => true]); if (empty($logo)) { return null; } return $logo; } /** * @param string $uploadType * @param bool $active * @param bool $useHeader * * @return int * * @throws PsxDesignLogoImportException */ public function insertLogoTextImage(PsxDesignLogoTextData $logoTextData, string $uploadType = 'text', bool $active = true, bool $useHeader = false): int { $logo = new PsxDesignLogo(); $logo ->setLogoDestination($logoTextData->getDestination()->getValue()) ->setLogoType($uploadType) ->setText($logoTextData->getText()) ->setFontSize($logoTextData->getSize()) ->setColor($logoTextData->getColor()) ->setFont($logoTextData->getFamily()) ->setStyle($logoTextData->getStyle()->getValue()) ->setActive($active) ->setUseHeaderLogo($useHeader); try { $this->entityManager->persist($logo); $this->entityManager->flush(); } catch (Exception $e) { throw new PsxDesignLogoImportException('Inserting logo image failed', PsxDesignLogoImportException::INSERT_LOGO_FAILED); } return $logo->getId(); } /** * @param string $uploadType * @param bool $active * @param bool $useHeader * * @return int * * @throws PsxDesignException */ public function updateLogoTextImage(PsxDesignLogoTextData $logoTextData, string $uploadType = 'text', bool $active = true, bool $useHeader = false): int { /** @var PsxdesignLogo|null $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => $logoTextData->getDestination()->getValue(), 'active' => $active]); if (empty($logo)) { return $this->insertLogoTextImage($logoTextData, $uploadType); } $logo ->setLogoDestination($logoTextData->getDestination()->getValue()) ->setLogoType($uploadType) ->setText($logoTextData->getText()) ->setFontSize($logoTextData->getSize()) ->setColor($logoTextData->getColor()) ->setFont($logoTextData->getFamily()) ->setStyle($logoTextData->getStyle()->getValue()) ->setActive($active) ->setUseHeaderLogo($useHeader); $this->entityManager->persist($logo); $this->entityManager->flush(); return $logo->getId(); } /** * @return void */ public function disableAllUseHeader(): void { $logos = $this->getActiveLogos(); /** @var array $logos */ foreach ($logos as $logo) { $this->entityManager->persist($logo); $logo->setUseHeaderLogo(false); } $this->entityManager->flush(); } public function useSameAsHeaderLogo(string $destination) { /** @var PsxdesignLogo $headerLogo */ $headerLogo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => 'header']); /** @var PsxdesignLogo|null $logo */ $logo = $this->entityManager->getRepository(PsxdesignLogo::class)->findOneBy(['logoDestination' => $destination]); if (empty($logo)) { $logo = new PsxdesignLogo(); } $logo ->setLogoType($headerLogo->getLogoType()) ->setLogoDestination($destination) ->setText($headerLogo->getText()) ->setFont($headerLogo->getFont()) ->setUseHeaderLogo(true) ->setFontSize($headerLogo->getFontSize()) ->setColor($headerLogo->getColor()) ->setStyle($headerLogo->getStyle()) ->setActive(true); $this->entityManager->persist($logo); $this->entityManager->flush(); } }