From 4cc31a2312154edcdd289dcc1865f1d5741fe84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Odwa=C5=BCny?= Date: Thu, 6 Feb 2025 01:40:11 +0100 Subject: [PATCH 1/4] add banner section fixture services --- src/Fixture/BannerSectionFixture.php | 69 +++++++++++++ .../Factory/BannerSectionFixtureFactory.php | 96 +++++++++++++++++++ .../Factory/FixtureFactoryInterface.php | 17 ++++ .../config/services/fixture/fixtures.xml | 14 +++ .../services/fixture/fixtures_factories.xml | 18 ++++ 5 files changed, 214 insertions(+) create mode 100755 src/Fixture/BannerSectionFixture.php create mode 100755 src/Fixture/Factory/BannerSectionFixtureFactory.php create mode 100755 src/Fixture/Factory/FixtureFactoryInterface.php create mode 100644 src/Resources/config/services/fixture/fixtures.xml create mode 100644 src/Resources/config/services/fixture/fixtures_factories.xml diff --git a/src/Fixture/BannerSectionFixture.php b/src/Fixture/BannerSectionFixture.php new file mode 100755 index 0000000..c5e09e0 --- /dev/null +++ b/src/Fixture/BannerSectionFixture.php @@ -0,0 +1,69 @@ +factory->load($options['sections']); + } + + public function getName(): string + { + return 'banner_section'; + } + + protected function configureOptionsNode(ArrayNodeDefinition $optionsNode): void + { + $optionsNode + ->children() + ->arrayNode('sections') + ->prototype('array') + ->children() + ->scalarNode('name')->isRequired()->cannotBeEmpty()->end() + ->scalarNode('code')->isRequired()->cannotBeEmpty()->end() + ->integerNode('width')->defaultNull()->end() + ->integerNode('height')->defaultNull()->end() + ->arrayNode('banners') + ->prototype('array') + ->children() + ->scalarNode('path')->isRequired()->cannotBeEmpty()->end() + ->scalarNode('alt')->defaultNull()->end() + ->scalarNode('filename')->isRequired()->cannotBeEmpty()->end() + ->scalarNode('link')->defaultNull()->end() + ->integerNode('priority')->isRequired()->end() + ->integerNode('clicks')->defaultValue(0)->end() + ->scalarNode('locale')->isRequired()->cannotBeEmpty()->end() + ->arrayNode('ads') + ->prototype('array') + ->children() + ->scalarNode('name')->isRequired()->cannotBeEmpty()->end() + ->booleanNode('enabled')->isRequired()->end() + ->scalarNode('startAt')->isRequired()->cannotBeEmpty()->end() + ->scalarNode('endAt')->isRequired()->cannotBeEmpty()->end() + ->integerNode('priority')->isRequired()->end() + ->scalarNode('code')->isRequired()->cannotBeEmpty()->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ; + } +} diff --git a/src/Fixture/Factory/BannerSectionFixtureFactory.php b/src/Fixture/Factory/BannerSectionFixtureFactory.php new file mode 100755 index 0000000..04b2db8 --- /dev/null +++ b/src/Fixture/Factory/BannerSectionFixtureFactory.php @@ -0,0 +1,96 @@ +sectionFactory->createNew(); + + $section->setCode($fields['code']); + $section->setName($fields['name']); + $section->setHeight($fields['height']); + $section->setWidth($fields['width']); + + $this->sectionRepository->add($section); + + if (($fields['banners'] ?? false) && is_array($fields['banners'])) { + foreach ($fields['banners'] as $bannerData) { + /** @var BannerInterface $banner */ + $banner = $this->bannerFactory->createNew(); + + $banner->setPath($bannerData['path']); + $banner->setAlt($bannerData['alt'] ?? null); + $banner->setFilename($bannerData['filename']); + $banner->setLink($bannerData['link'] ?? null); + $banner->setPriority($bannerData['priority']); + $banner->setClicks($bannerData['clicks'] ?? 0); + + $locale = $this->localeRepository->findOneBy(['code' => $bannerData['locale']]); + + if (!$locale) { + throw new \Exception(sprintf('Locale with code "%s" not found', $bannerData['locale'])); + } + + $banner->setLocale($locale); + + $this->bannerRepository->add($banner); + + if (isset($bannerData['ads']) && is_array($bannerData['ads'])) { + foreach ($bannerData['ads'] as $adData) { + /** @var AdInterface $ad */ + $ad = $this->adFactory->createNew(); + + $ad->setName($adData['name']); + $ad->setEnabled($adData['enabled']); + $ad->setStartAt(new \DateTime($adData['startAt'])); + $ad->setEndAt(new \DateTime($adData['endAt'])); + $ad->setPriority($adData['priority']); + $ad->setCode($adData['code']); + + $this->adRepository->add($ad); + + $banner->addAds($ad); + } + } + } + } + + $banner->setSection($section); + + $this->bannerRepository->add($banner); + } + } +} diff --git a/src/Fixture/Factory/FixtureFactoryInterface.php b/src/Fixture/Factory/FixtureFactoryInterface.php new file mode 100755 index 0000000..37095ae --- /dev/null +++ b/src/Fixture/Factory/FixtureFactoryInterface.php @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/src/Resources/config/services/fixture/fixtures_factories.xml b/src/Resources/config/services/fixture/fixtures_factories.xml new file mode 100644 index 0000000..60f64f6 --- /dev/null +++ b/src/Resources/config/services/fixture/fixtures_factories.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + From 3273d9c870e1f1c37b2defe2432cbf63b5a0d582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Odwa=C5=BCny?= Date: Thu, 6 Feb 2025 01:46:33 +0100 Subject: [PATCH 2/4] update gh build --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46aa0f9..6bba3ca 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -150,7 +150,7 @@ jobs: run: vendor/bin/behat --colors --strict -vvv --no-interaction || vendor/bin/behat --colors --strict -vvv --no-interaction --rerun - name: Upload Behat logs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: failure() with: name: Behat logs From 5c588c3fa9b73c7bfa9de737a652e904ea5c05cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Odwa=C5=BCny?= Date: Thu, 6 Feb 2025 02:18:48 +0100 Subject: [PATCH 3/4] adjust code to phpstan rules --- phpstan.neon | 1 + .../Factory/BannerSectionFixtureFactory.php | 14 ++++++++------ src/Repository/AdRepositoryInterface.php | 3 ++- src/Repository/SectionRepositoryInterface.php | 3 ++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index f7eee75..9bd7de4 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -13,3 +13,4 @@ parameters: ignoreErrors: - '/Parameter #1 \$configuration of method Symfony\\Component\\DependencyInjection\\Extension\\Extension::processConfiguration\(\) expects Symfony\\Component\\Config\\Definition\\ConfigurationInterface, Symfony\\Component\\Config\\Definition\\ConfigurationInterface\|null given\./' + - '#Call to an undefined method Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition::children\(\).#' diff --git a/src/Fixture/Factory/BannerSectionFixtureFactory.php b/src/Fixture/Factory/BannerSectionFixtureFactory.php index 04b2db8..adc2398 100755 --- a/src/Fixture/Factory/BannerSectionFixtureFactory.php +++ b/src/Fixture/Factory/BannerSectionFixtureFactory.php @@ -17,6 +17,7 @@ use BitBag\SyliusBannerPlugin\Repository\AdRepositoryInterface; use BitBag\SyliusBannerPlugin\Repository\BannerRepositoryInterface; use BitBag\SyliusBannerPlugin\Repository\SectionRepositoryInterface; +use Sylius\Component\Locale\Model\LocaleInterface; use Sylius\Component\Resource\Factory\FactoryInterface; use Sylius\Component\Resource\Repository\RepositoryInterface; @@ -53,14 +54,15 @@ public function load(array $data): void $banner->setPath($bannerData['path']); $banner->setAlt($bannerData['alt'] ?? null); - $banner->setFilename($bannerData['filename']); + $banner->setFileName($bannerData['filename']); $banner->setLink($bannerData['link'] ?? null); $banner->setPriority($bannerData['priority']); $banner->setClicks($bannerData['clicks'] ?? 0); + /** @var ?LocaleInterface $locale */ $locale = $this->localeRepository->findOneBy(['code' => $bannerData['locale']]); - if (!$locale) { + if (null === $locale) { throw new \Exception(sprintf('Locale with code "%s" not found', $bannerData['locale'])); } @@ -85,12 +87,12 @@ public function load(array $data): void $banner->addAds($ad); } } - } - } - $banner->setSection($section); + $banner->setSection($section); - $this->bannerRepository->add($banner); + $this->bannerRepository->add($banner); + } + } } } } diff --git a/src/Repository/AdRepositoryInterface.php b/src/Repository/AdRepositoryInterface.php index 65936e1..345fe7a 100644 --- a/src/Repository/AdRepositoryInterface.php +++ b/src/Repository/AdRepositoryInterface.php @@ -12,8 +12,9 @@ namespace BitBag\SyliusBannerPlugin\Repository; use BitBag\SyliusBannerPlugin\Entity\AdInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; -interface AdRepositoryInterface +interface AdRepositoryInterface extends RepositoryInterface { public function findAllActiveAds(): array; diff --git a/src/Repository/SectionRepositoryInterface.php b/src/Repository/SectionRepositoryInterface.php index b83c9dd..7b2994f 100644 --- a/src/Repository/SectionRepositoryInterface.php +++ b/src/Repository/SectionRepositoryInterface.php @@ -13,8 +13,9 @@ use BitBag\SyliusBannerPlugin\Entity\AdInterface; use BitBag\SyliusBannerPlugin\Entity\SectionInterface; +use Sylius\Component\Resource\Repository\RepositoryInterface; -interface SectionRepositoryInterface +interface SectionRepositoryInterface extends RepositoryInterface { public function findAllActiveAdsBanners(string $sectionCode, string $localeCode): ?SectionInterface; From 46f52bb7fbe71499cb70fe29b6aff032e34b5ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Odwa=C5=BCny?= Date: Thu, 6 Feb 2025 02:31:33 +0100 Subject: [PATCH 4/4] ecs --- src/Fixture/BannerSectionFixture.php | 7 +++++++ src/Fixture/Factory/BannerSectionFixtureFactory.php | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Fixture/BannerSectionFixture.php b/src/Fixture/BannerSectionFixture.php index c5e09e0..9ae043c 100755 --- a/src/Fixture/BannerSectionFixture.php +++ b/src/Fixture/BannerSectionFixture.php @@ -1,5 +1,12 @@