6 Commits

7 changed files with 127 additions and 126 deletions

View File

@@ -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"

View File

@@ -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();
}

View File

@@ -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) {

View File

@@ -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;
@@ -16,7 +15,7 @@ use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\Validator\Constraints\NotBlank;
@@ -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, [

View File

@@ -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(),

View File

@@ -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',

View File

@@ -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',