From 186157fb626465508a5eee51264bd76aa8a5d4b8 Mon Sep 17 00:00:00 2001 From: Isabelle Date: Fri, 8 May 2026 11:53:03 +0200 Subject: [PATCH] Remove languages,make the link not required, add hook displayHeroBanner --- is_imageslider/config/common.yml | 157 +++++++++--------- is_imageslider/is_imageslider.php | 1 + .../ImageSliderFormDataHandler.php | 28 ++-- is_imageslider/src/Form/ImageSliderType.php | 43 ++--- .../Provider/ImageSliderFormDataProvider.php | 20 ++- .../vendor/composer/autoload_classmap.php | 1 + .../vendor/composer/autoload_static.php | 1 + 7 files changed, 126 insertions(+), 125 deletions(-) diff --git a/is_imageslider/config/common.yml b/is_imageslider/config/common.yml index 6c1acad..9b52af4 100644 --- a/is_imageslider/config/common.yml +++ b/is_imageslider/config/common.yml @@ -1,91 +1,96 @@ parameters: - is_imageslider_images_directory: '%kernel.project_dir%/modules/is_imageslider/img/' - is_imageslider_module_uri: !php/const _MODULE_DIR_ - is_imageslider_images_uri: '%is_imageslider_module_uri%is_imageslider/img/' - is_imageslider_placeholder_img: '/modules/is_imageslider/views/img/placeholder.jpeg' + is_imageslider_images_directory: "%kernel.project_dir%/modules/is_imageslider/img/" + is_imageslider_module_uri: !php/const _MODULE_DIR_ + is_imageslider_images_uri: "%is_imageslider_module_uri%is_imageslider/img/" + is_imageslider_placeholder_img: "/modules/is_imageslider/views/img/placeholder.jpeg" services: - _defaults: - public: true + _defaults: + public: true - oksydan.is_imageslider.module: - class: Is_imageslider - factory: [ 'Module', 'getInstanceByName' ] - public: false - arguments: - - 'is_imageslider' + oksydan.is_imageslider.module: + class: Is_imageslider + factory: ["Module", "getInstanceByName"] + public: false + arguments: + - "is_imageslider" - oksydan.is_imageslider.repository.image_slider: - class: Oksydan\IsImageslider\Repository\ImageSliderRepository - public: true - factory: ['@doctrine.orm.default_entity_manager', getRepository] - arguments: - - Oksydan\IsImageslider\Entity\ImageSlider + oksydan.is_imageslider.repository.image_slider: + class: Oksydan\IsImageslider\Repository\ImageSliderRepository + public: true + factory: ["@doctrine.orm.default_entity_manager", getRepository] + arguments: + - Oksydan\IsImageslider\Entity\ImageSlider - oksydan.is_imageslider.repository.hook_module_repository: - class: Oksydan\IsImageslider\Repository\HookModuleRepository - public: true - arguments: - - '@doctrine.dbal.default_connection' - - '%database_prefix%' + oksydan.is_imageslider.repository.hook_module_repository: + class: Oksydan\IsImageslider\Repository\HookModuleRepository + public: true + arguments: + - "@doctrine.dbal.default_connection" + - "%database_prefix%" - oksydan.is_imageslider.presenter.image_slide_presenter: - class: Oksydan\IsImageslider\Presenter\ImageSlidePresenter - public: true - arguments: - - '%is_imageslider_images_uri%' - - '%is_imageslider_images_directory%' - - "@=service('prestashop.adapter.legacy.context').getContext()" + oksydan.is_imageslider.presenter.image_slide_presenter: + class: Oksydan\IsImageslider\Presenter\ImageSlidePresenter + public: true + arguments: + - "%is_imageslider_images_uri%" + - "%is_imageslider_images_directory%" + - "@=service('prestashop.adapter.legacy.context').getContext()" - oksydan.is_imageslider.configuration.slider_configuration: - class: Oksydan\IsImageslider\Configuration\SliderConfiguration - public: true + oksydan.is_imageslider.configuration.slider_configuration: + class: Oksydan\IsImageslider\Configuration\SliderConfiguration + public: true - oksydan.is_imageslider.hook.abstract_hook: - class: Oksydan\IsImageslider\Hook\AbstractHook - public: true - arguments: - - '@oksydan.is_imageslider.module' - - "@=service('prestashop.adapter.legacy.context').getContext()" + oksydan.is_imageslider.hook.abstract_hook: + class: Oksydan\IsImageslider\Hook\AbstractHook + public: true + arguments: + - "@oksydan.is_imageslider.module" + - "@=service('prestashop.adapter.legacy.context').getContext()" - oksydan.is_imageslider.hook.abstract_display_hook: - class: Oksydan\IsImageslider\Hook\AbstractDisplayHook - parent: 'oksydan.is_imageslider.hook.abstract_hook' - public: true - arguments: - - '@oksydan.is_imageslider.configuration.slider_configuration' + oksydan.is_imageslider.hook.abstract_display_hook: + class: Oksydan\IsImageslider\Hook\AbstractDisplayHook + parent: "oksydan.is_imageslider.hook.abstract_hook" + public: true + arguments: + - "@oksydan.is_imageslider.configuration.slider_configuration" - oksydan.is_imageslider.hook.abstract_cacheable_display_hook: - class: Oksydan\IsImageslider\Hook\AbstractCacheableDisplayHook - parent: 'oksydan.is_imageslider.hook.abstract_display_hook' - public: true - arguments: - - '@oksydan.is_imageslider.repository.image_slider' - - '@oksydan.is_imageslider.presenter.image_slide_presenter' - - '@oksydan.is_imageslider.cache.template_cache' + oksydan.is_imageslider.hook.abstract_cacheable_display_hook: + class: Oksydan\IsImageslider\Hook\AbstractCacheableDisplayHook + parent: "oksydan.is_imageslider.hook.abstract_display_hook" + public: true + arguments: + - "@oksydan.is_imageslider.repository.image_slider" + - "@oksydan.is_imageslider.presenter.image_slide_presenter" + - "@oksydan.is_imageslider.cache.template_cache" - oksydan.is_imageslider.hook.display_home: - class: Oksydan\IsImageslider\Hook\DisplayHome - parent: 'oksydan.is_imageslider.hook.abstract_cacheable_display_hook' - public: true + oksydan.is_imageslider.hook.display_home: + class: Oksydan\IsImageslider\Hook\DisplayHome + parent: "oksydan.is_imageslider.hook.abstract_cacheable_display_hook" + public: true - oksydan.is_imageslider.hook.display_header: - class: Oksydan\IsImageslider\Hook\DisplayHeader - parent: 'oksydan.is_imageslider.hook.abstract_cacheable_display_hook' - public: true + oksydan.is_imageslider.hook.display_hero_slider: + class: Oksydan\IsImageslider\Hook\DisplayHome + parent: "oksydan.is_imageslider.hook.abstract_cacheable_display_hook" + public: true - # Modification of the module into a widget - oksydan.is_imageslider.hook.widget_capability: - class: Oksydan\IsImageslider\Hook\WidgetCapability - parent: 'oksydan.is_imageslider.hook.abstract_cacheable_display_hook' - public: true + oksydan.is_imageslider.hook.display_header: + class: Oksydan\IsImageslider\Hook\DisplayHeader + parent: "oksydan.is_imageslider.hook.abstract_cacheable_display_hook" + public: true - oksydan.is_imageslider.cache.template_cache: - class: Oksydan\IsImageslider\Cache\TemplateCache - public: true - arguments: - - '@oksydan.is_imageslider.module' - - "@=service('prestashop.adapter.legacy.context').getContext()" - - '@oksydan.is_imageslider.repository.hook_module_repository' - - '@prestashop.adapter.legacy.configuration' - - '@oksydan.is_imageslider.repository.image_slider' + # Modification of the module into a widget + oksydan.is_imageslider.hook.widget_capability: + class: Oksydan\IsImageslider\Hook\WidgetCapability + parent: "oksydan.is_imageslider.hook.abstract_cacheable_display_hook" + public: true + + oksydan.is_imageslider.cache.template_cache: + class: Oksydan\IsImageslider\Cache\TemplateCache + public: true + arguments: + - "@oksydan.is_imageslider.module" + - "@=service('prestashop.adapter.legacy.context').getContext()" + - "@oksydan.is_imageslider.repository.hook_module_repository" + - "@prestashop.adapter.legacy.configuration" + - "@oksydan.is_imageslider.repository.image_slider" diff --git a/is_imageslider/is_imageslider.php b/is_imageslider/is_imageslider.php index eeb897a..5ea351f 100644 --- a/is_imageslider/is_imageslider.php +++ b/is_imageslider/is_imageslider.php @@ -56,6 +56,7 @@ class Is_imageslider extends Module implements WidgetInterface parent::install() && $this->registerHook('displayHeader') && $this->registerHook('displayHome') + && $this->registerHook('displayHeroSlider') && $this->getInstaller()->createTables(); } diff --git a/is_imageslider/src/Form/DataHandler/ImageSliderFormDataHandler.php b/is_imageslider/src/Form/DataHandler/ImageSliderFormDataHandler.php index 273c22a..136d0cb 100644 --- a/is_imageslider/src/Form/DataHandler/ImageSliderFormDataHandler.php +++ b/is_imageslider/src/Form/DataHandler/ImageSliderFormDataHandler.php @@ -79,6 +79,9 @@ class ImageSliderFormDataHandler implements FormDataHandlerInterface $imageSlide->setPosition($this->imageSliderRepository->getHighestPosition() + 1); $this->addAssociatedShops($imageSlide, $data['shop_association'] ?? null); + $uploadedImage = !empty($data['image']) ? $this->uploadFile($data['image']) : null; + $uploadedImageMobile = !empty($data['image_mobile']) ? $this->uploadFile($data['image_mobile']) : null; + foreach ($this->languages as $language) { $langId = (int) $language['id_lang']; $lang = $this->langRepository->findOneById($langId); @@ -87,16 +90,16 @@ class ImageSliderFormDataHandler implements FormDataHandlerInterface $imageSliderLang ->setLang($lang) ->setTitle($data['title'][$langId] ?? '') - ->setUrl($data['url'][$langId] ?? '') + ->setUrl($data['url'] ?? '') ->setLegend($data['legend'][$langId] ?? '') ->setDescription($data['description'][$langId] ?? ''); - if (!empty($data['image'][$langId])) { - $imageSliderLang->setImage($this->uploadFile($data['image'][$langId])); + if ($uploadedImage !== null) { + $imageSliderLang->setImage($uploadedImage); } - if (!empty($data['image_mobile'][$langId])) { - $imageSliderLang->setImageMobile($this->uploadFile($data['image_mobile'][$langId])); + if ($uploadedImageMobile !== null) { + $imageSliderLang->setImageMobile($uploadedImageMobile); } $imageSlide->addImageSliderLang($imageSliderLang); @@ -122,6 +125,9 @@ class ImageSliderFormDataHandler implements FormDataHandlerInterface $imageSlide->setDisplayTo($data['display_to'] ?? new \DateTime()); $this->addAssociatedShops($imageSlide, $data['shop_association'] ?? null); + $uploadedImage = !empty($data['image']) ? $this->uploadFile($data['image']) : null; + $uploadedImageMobile = !empty($data['image_mobile']) ? $this->uploadFile($data['image_mobile']) : null; + foreach ($this->languages as $language) { $langId = (int) $language['id_lang']; $imageSliderLang = $imageSlide->getImageSliderLangByLangId($langId); @@ -136,22 +142,22 @@ class ImageSliderFormDataHandler implements FormDataHandlerInterface $imageSliderLang ->setTitle($data['title'][$langId] ?? '') - ->setUrl($data['url'][$langId] ?? '') + ->setUrl($data['url'] ?? '') ->setLegend($data['legend'][$langId] ?? '') ->setDescription($data['description'][$langId] ?? ''); - if (!empty($data['image'][$langId])) { + if ($uploadedImage !== null) { if ($imageSliderLang->getImage() !== null) { $this->eraseFile($imageSliderLang->getImage()); } - $imageSliderLang->setImage($this->uploadFile($data['image'][$langId])); + $imageSliderLang->setImage($uploadedImage); } - if (!empty($data['image_mobile'][$langId])) { - if ($imageSliderLang->getImage() !== null) { + if ($uploadedImageMobile !== null) { + if ($imageSliderLang->getImageMobile() !== null) { $this->eraseFile($imageSliderLang->getImageMobile()); } - $imageSliderLang->setImageMobile($this->uploadFile($data['image_mobile'][$langId])); + $imageSliderLang->setImageMobile($uploadedImageMobile); } if ($newImageSliderLang) { diff --git a/is_imageslider/src/Form/ImageSliderType.php b/is_imageslider/src/Form/ImageSliderType.php index 6c37ffc..dde2c01 100644 --- a/is_imageslider/src/Form/ImageSliderType.php +++ b/is_imageslider/src/Form/ImageSliderType.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Oksydan\IsImageslider\Form; use Oksydan\IsImageslider\Translations\TranslationDomains; -use Oksydan\IsImageslider\Type\TranslatableFile; use PrestaShopBundle\Form\Admin\Type\FormattedTextareaType; use PrestaShopBundle\Form\Admin\Type\ImagePreviewType; use PrestaShopBundle\Form\Admin\Type\ShopChoiceTreeType; @@ -63,37 +62,25 @@ class ImageSliderType extends TranslatorAwareType } $builder - ->add('image_preview', TranslatableType::class, [ - 'type' => ImagePreviewType::class, + ->add('image_preview', ImagePreviewType::class, [ 'label' => $this->trans('Image preview', TranslationDomains::TRANSLATION_DOMAIN_ADMIN), - 'locales' => $this->locales, 'required' => false, ]) - ->add('image', TranslatableFile::class, [ - 'type' => FileType::class, + ->add('image', FileType::class, [ 'label' => $this->trans('Image', TranslationDomains::TRANSLATION_DOMAIN_ADMIN), - 'locales' => $this->locales, - 'options' => [ - 'data_class' => null, - 'constraints' => $imageConstrains, - ], - 'required' => true, + 'data_class' => null, + 'constraints' => $imageConstrains, + 'required' => !$isEdit, ]) - ->add('image_mobile_preview', TranslatableType::class, [ - 'type' => ImagePreviewType::class, + ->add('image_mobile_preview', ImagePreviewType::class, [ 'label' => $this->trans('Image mobile preview', TranslationDomains::TRANSLATION_DOMAIN_ADMIN), - 'locales' => $this->locales, 'required' => false, ]) - ->add('image_mobile', TranslatableFile::class, [ - 'type' => FileType::class, + ->add('image_mobile', FileType::class, [ 'label' => $this->trans('Image mobile', TranslationDomains::TRANSLATION_DOMAIN_ADMIN), - 'locales' => $this->locales, - 'options' => [ - 'data_class' => null, - 'constraints' => $imageConstrains, - ], - 'required' => true, + 'data_class' => null, + 'constraints' => $imageConstrains, + 'required' => false, ]) ->add('title', TranslatableType::class, [ 'type' => TextType::class, @@ -107,15 +94,11 @@ class ImageSliderType extends TranslatorAwareType 'locales' => $this->locales, 'required' => false, ]) - ->add('url', TranslatableType::class, [ - 'type' => TextType::class, + ->add('url', TextType::class, [ 'label' => $this->trans('Link', TranslationDomains::TRANSLATION_DOMAIN_ADMIN), - 'locales' => $this->locales, 'required' => true, - 'options' => [ - 'constraints' => [ - new NotBlank(), - ], + 'constraints' => [ + new NotBlank(), ], ]) ->add('description', TranslatableType::class, [ diff --git a/is_imageslider/src/Form/Provider/ImageSliderFormDataProvider.php b/is_imageslider/src/Form/Provider/ImageSliderFormDataProvider.php index 80c69e4..b7ba2ec 100644 --- a/is_imageslider/src/Form/Provider/ImageSliderFormDataProvider.php +++ b/is_imageslider/src/Form/Provider/ImageSliderFormDataProvider.php @@ -77,16 +77,20 @@ class ImageSliderFormDataProvider implements FormDataProviderInterface $slideData['display_from'] = $imageSlide->getDisplayFrom(); $slideData['display_to'] = $imageSlide->getDisplayTo(); + $firstLang = true; foreach ($imageSlide->getSliderLangs() as $imageSlideLang) { $slideData['title'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getTitle(); $slideData['legend'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getLegend(); - $slideData['url'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getUrl(); $slideData['description'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getDescription(); - $slideData['image'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getImage(); - $slideData['image_mobile'][$imageSlideLang->getLang()->getId()] = $imageSlideLang->getImageMobile(); - $slideData['image_preview'][$imageSlideLang->getLang()->getId()] = $this->imagesliderImageThumbProvider->getPath($imageSlideLang->getImage()) ?? $this->placeholderImage; - $slideData['image_mobile_preview'][$imageSlideLang->getLang()->getId()] = $this->imagesliderImageThumbProvider->getPath($imageSlideLang->getImageMobile()) ?? $this->placeholderImage; + if ($firstLang) { + $slideData['url'] = $imageSlideLang->getUrl(); + $slideData['image'] = $imageSlideLang->getImage(); + $slideData['image_mobile'] = $imageSlideLang->getImageMobile(); + $slideData['image_preview'] = $this->imagesliderImageThumbProvider->getPath($imageSlideLang->getImage()) ?? $this->placeholderImage; + $slideData['image_mobile_preview'] = $this->imagesliderImageThumbProvider->getPath($imageSlideLang->getImageMobile()) ?? $this->placeholderImage; + $firstLang = false; + } } return $slideData; @@ -113,11 +117,11 @@ class ImageSliderFormDataProvider implements FormDataProviderInterface public function getDefaultData(): array { return [ - 'image_preview' => $this->getImagePreviewPlaceholder(), - 'image_mobile_preview' => $this->getImagePreviewPlaceholder(), + 'image_preview' => $this->placeholderImage, + 'image_mobile_preview' => $this->placeholderImage, 'title' => [], 'legend' => [], - 'url' => [], + 'url' => '', 'description' => [], 'active' => false, 'display_from' => new \DateTime(), diff --git a/is_imageslider/vendor/composer/autoload_classmap.php b/is_imageslider/vendor/composer/autoload_classmap.php index 46e662e..a5ac107 100644 --- a/is_imageslider/vendor/composer/autoload_classmap.php +++ b/is_imageslider/vendor/composer/autoload_classmap.php @@ -31,6 +31,7 @@ return array( 'Oksydan\\IsImageslider\\Hook\\AbstractHook' => $baseDir . '/src/Hook/AbstractHook.php', 'Oksydan\\IsImageslider\\Hook\\DisplayHeader' => $baseDir . '/src/Hook/DisplayHeader.php', 'Oksydan\\IsImageslider\\Hook\\DisplayHome' => $baseDir . '/src/Hook/DisplayHome.php', + 'Oksydan\\IsImageslider\\Hook\\DisplayHeroSlider' => $baseDir . '/src/Hook/DisplayHeroSlider.php', 'Oksydan\\IsImageslider\\Hook\\HookInterface' => $baseDir . '/src/Hook/HookInterface.php', 'Oksydan\\IsImageslider\\Hook\\WidgetCapability' => $baseDir . '/src/Hook/WidgetCapability.php', 'Oksydan\\IsImageslider\\Installer\\ActionDatabaseAbstract' => $baseDir . '/src/Installer/ActionDatabaseAbstract.php', diff --git a/is_imageslider/vendor/composer/autoload_static.php b/is_imageslider/vendor/composer/autoload_static.php index 042e59e..478df8b 100644 --- a/is_imageslider/vendor/composer/autoload_static.php +++ b/is_imageslider/vendor/composer/autoload_static.php @@ -46,6 +46,7 @@ class ComposerStaticInit9ba08c95d0af82fb7a45da2b6d8d15e0 'Oksydan\\IsImageslider\\Hook\\AbstractHook' => __DIR__ . '/../..' . '/src/Hook/AbstractHook.php', 'Oksydan\\IsImageslider\\Hook\\DisplayHeader' => __DIR__ . '/../..' . '/src/Hook/DisplayHeader.php', 'Oksydan\\IsImageslider\\Hook\\DisplayHome' => __DIR__ . '/../..' . '/src/Hook/DisplayHome.php', + 'Oksydan\\IsImageslider\\Hook\\DisplayHeroSlider' => __DIR__ . '/../..' . '/src/Hook/DisplayHeroSlider.php', 'Oksydan\\IsImageslider\\Hook\\HookInterface' => __DIR__ . '/../..' . '/src/Hook/HookInterface.php', 'Oksydan\\IsImageslider\\Hook\\WidgetCapability' => __DIR__ . '/../..' . '/src/Hook/WidgetCapability.php', 'Oksydan\\IsImageslider\\Installer\\ActionDatabaseAbstract' => __DIR__ . '/../..' . '/src/Installer/ActionDatabaseAbstract.php',