<?php | |||||
namespace Lc\SovBundle\Builder\Setting; | |||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Lc\SovBundle\Definition\SiteSettingDefinition; | |||||
use Lc\SovBundle\Factory\Setting\SiteSettingFactory; | |||||
use Lc\SovBundle\Repository\Site\SiteStore; | |||||
use Lc\SovBundle\Solver\Setting\SettingSolver; | |||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | |||||
class SettingBuilder | |||||
{ | |||||
protected EntityManagerInterface $entityManager; | |||||
protected SettingSolver $settingSolver; | |||||
protected SiteStore $siteStore; | |||||
protected SiteSettingDefinition $siteSettingDefinition; | |||||
protected SiteSettingFactory $siteSettingFactory; | |||||
public function __construct( | |||||
EntityManagerInterface $entityManager, | |||||
SettingSolver $settingSolver, | |||||
SiteStore $siteStore, | |||||
SiteSettingDefinition $siteSettingDefinition, | |||||
SiteSettingFactory $siteSettingFactory | |||||
) { | |||||
$this->entityManager = $entityManager; | |||||
$this->settingSolver = $settingSolver; | |||||
$this->siteStore = $siteStore; | |||||
$this->siteSettingDefinition = $siteSettingDefinition; | |||||
$this->siteSettingFactory = $siteSettingFactory; | |||||
} | |||||
public function initSiteSettings() | |||||
{ | |||||
$site = $this->siteStore->getOneByDevAlias('default'); | |||||
if ($site) { | |||||
$settings = $this->siteSettingDefinition->getSettings(); | |||||
foreach ($settings as $category => $settingList) { | |||||
foreach ($settingList as $settingName => $setting) { | |||||
$entitySetting = $this->settingSolver->getSetting($site, $settingName); | |||||
if (!$entitySetting) { | |||||
$text = null; | |||||
$date = null; | |||||
$file = null; | |||||
$fieldValue = isset($setting['default']) ? $setting['default'] : null; | |||||
if ($setting['field'] == 'text') { | |||||
$text = $fieldValue; | |||||
} | |||||
if ($setting['field'] == 'date') { | |||||
$date = $fieldValue; | |||||
} | |||||
if ($setting['field'] == 'file') { | |||||
$file = $fieldValue; | |||||
} | |||||
$entitySetting = $this->siteSettingFactory->create( | |||||
$site, | |||||
$setting['name'], | |||||
$text, | |||||
$date, | |||||
$file | |||||
); | |||||
$this->entityManager->create($entitySetting); | |||||
} else { | |||||
$methodGetValue = 'get' . ucfirst($setting['field']); | |||||
if ($entitySetting->$methodGetValue() === null | |||||
&& isset($setting['default']) | |||||
&& $setting['default'] !== null) { | |||||
$methodSetValue = 'set' . ucfirst($setting['field']); | |||||
$entitySetting->$methodSetValue($setting['default']); | |||||
$this->entityManager->update($entitySetting); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
$this->entityManager->flush(); | |||||
} else { | |||||
throw new NotFoundHttpException('Le site par défaut n\'existe pas.'); | |||||
} | |||||
} | |||||
} |
<?php | |||||
namespace Lc\SovBundle\Command; | |||||
use Lc\SovBundle\Builder\Setting\SettingBuilder; | |||||
use Symfony\Component\Console\Command\Command; | |||||
use Symfony\Component\Console\Input\InputInterface; | |||||
use Symfony\Component\Console\Output\OutputInterface; | |||||
use Symfony\Component\Console\Style\SymfonyStyle; | |||||
class SiteSettingInitCommand extends Command | |||||
{ | |||||
protected static $defaultName = 'setting:site:init'; | |||||
protected static $defaultDescription = 'Initialise les SiteSetting.'; | |||||
protected SettingBuilder $settingBuilder; | |||||
public function __construct(string $name = null, SettingBuilder $settingBuilder) | |||||
{ | |||||
parent::__construct($name); | |||||
$this->settingBuilder = $settingBuilder; | |||||
} | |||||
/** | |||||
* {@inheritdoc} | |||||
*/ | |||||
protected function execute(InputInterface $input, OutputInterface $output) | |||||
{ | |||||
$this->io = new SymfonyStyle($input, $output); | |||||
$this->settingBuilder->initSiteSettings(); | |||||
$this->io->success('Les SiteSetting ont bien été initialisées.'); | |||||
return Command::SUCCESS; | |||||
} | |||||
} |
<?php | |||||
namespace Lc\SovBundle\EventSubscriber; | |||||
use Doctrine\ORM\EntityManagerInterface; | |||||
use Lc\SovBundle\Definition\SiteSettingDefinitionInterface; | |||||
use Lc\SovBundle\Factory\Setting\SiteSettingFactory; | |||||
use Lc\SovBundle\Factory\Site\SiteFactory; | |||||
use Lc\SovBundle\Repository\Setting\SiteSettingRepository; | |||||
use Lc\SovBundle\Repository\Site\SiteRepository; | |||||
use Lc\SovBundle\Repository\Site\SiteStore; | |||||
use Lc\SovBundle\Solver\Setting\SettingSolver; | |||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |||||
use Symfony\Component\HttpKernel\KernelEvents; | |||||
class SiteSettingEventSubscriber implements EventSubscriberInterface | |||||
{ | |||||
protected EntityManagerInterface $entityManager; | |||||
protected SiteSettingDefinitionInterface $siteSettingDefinition; | |||||
protected SiteSettingFactory $siteSettingFactory; | |||||
protected SiteSettingRepository $siteSettingRepository; | |||||
protected SiteStore $siteStore; | |||||
protected SiteFactory $siteFactory; | |||||
protected SettingSolver $settingSolver; | |||||
public function __construct( | |||||
EntityManagerInterface $entityManager, | |||||
SiteSettingRepository $siteSettingRepository, | |||||
SiteStore $siteStore, | |||||
SiteSettingDefinitionInterface $siteSettingDefinition, | |||||
SiteSettingFactory $siteSettingFactory, | |||||
SiteFactory $siteFactory, | |||||
SettingSolver $settingSolver | |||||
) { | |||||
$this->entityManager = $entityManager; | |||||
$this->siteSettingDefinition = $siteSettingDefinition; | |||||
$this->siteSettingFactory = $siteSettingFactory; | |||||
$this->siteSettingRepository = $siteSettingRepository; | |||||
$this->siteStore = $siteStore; | |||||
$this->siteFactory = $siteFactory; | |||||
$this->settingSolver = $settingSolver; | |||||
} | |||||
public static function getSubscribedEvents() | |||||
{ | |||||
return [ | |||||
KernelEvents::CONTROLLER => ['initSettings'] | |||||
]; | |||||
} | |||||
public function initSettings() | |||||
{ | |||||
$site = $this->getSiteDefault(); | |||||
if (!$site) { | |||||
$site = $this->siteFactory->create('default'); | |||||
$this->entityManager->persist($site); | |||||
$this->entityManager->flush($site); | |||||
} | |||||
$settings = $this->siteSettingDefinition->getSettings(); | |||||
$factory = $this->siteSettingFactory; | |||||
foreach ($settings as $category => $settingList) { | |||||
foreach ($settingList as $settingName => $setting) { | |||||
$entitySetting = $this->settingSolver->getSetting($site, $settingName); | |||||
if (!$entitySetting) { | |||||
$text = null; | |||||
$date = null; | |||||
$file = null; | |||||
$fieldValue = isset($setting['default']) ? $setting['default'] : null; | |||||
if($setting['field'] == 'text') { | |||||
$text = $fieldValue; | |||||
} | |||||
if($setting['field'] == 'date') { | |||||
$date = $fieldValue; | |||||
} | |||||
if($setting['field'] == 'file') { | |||||
$file = $fieldValue; | |||||
} | |||||
$entitySetting = $factory->create($site, $setting['name'], $text, $date, $file); | |||||
$this->entityManager->persist($entitySetting); | |||||
} else { | |||||
$methodGetValue = 'get' . ucfirst($setting['field']); | |||||
if ($entitySetting->$methodGetValue() === null | |||||
&& isset($setting['default']) | |||||
&& $setting['default'] !== null) { | |||||
$methodSetValue = 'set' . ucfirst($setting['field']); | |||||
$entitySetting->$methodSetValue($setting['default']); | |||||
$this->entityManager->update($entitySetting); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
$this->entityManager->flush(); | |||||
} | |||||
public function getSiteDefault() | |||||
{ | |||||
return $this->siteStore->getOneByDevAlias('default'); | |||||
} | |||||
} |
'text', | 'text', | ||||
CKEditorType::class, | CKEditorType::class, | ||||
[ | [ | ||||
'label' => $label | |||||
'label' => $label, | |||||
'attr' => [ | |||||
'class' => 'field-text_editor' | |||||
] | |||||
] | ] | ||||
); | ); | ||||
} elseif ($settingType == 'select') { | } elseif ($settingType == 'select') { |
<script src="{{ asset(js_asset) }}"></script> | <script src="{{ asset(js_asset) }}"></script> | ||||
{% endfor %} | {% endfor %} | ||||
<script type="text/javascript"> | |||||
var CKEDITOR_BASEPATH = "{{ ckeditor_base_path("/bundles/fosckeditor/") }}"; | |||||
</script> | |||||
<script type="text/javascript" src="{{ asset('bundles/fosckeditor/ckeditor.js') }}"></script> | |||||
{% for webpack_encore_entry in form.vars.ea_crud_form.assets.webpackEncoreAssets %} | {% for webpack_encore_entry in form.vars.ea_crud_form.assets.webpackEncoreAssets %} | ||||
{{ ea_call_function_if_exists('encore_entry_script_tags', webpack_encore_entry) }} | {{ ea_call_function_if_exists('encore_entry_script_tags', webpack_encore_entry) }} | ||||
{% endfor %} | {% endfor %} |
<link rel="stylesheet" href="{{ asset(css_asset) }}"> | <link rel="stylesheet" href="{{ asset(css_asset) }}"> | ||||
{% endfor %} | {% endfor %} | ||||
{% for webpack_encore_entry in ea.assets.webpackEncoreAssets ?? [] %} | {% for webpack_encore_entry in ea.assets.webpackEncoreAssets ?? [] %} | ||||
{{ ea_call_function_if_exists('encore_entry_link_tags', webpack_encore_entry) }} | {{ ea_call_function_if_exists('encore_entry_link_tags', webpack_encore_entry) }} | ||||
{% endfor %} | {% endfor %} | ||||
<link rel="stylesheet" href="{{ asset('bundles/easyadmin/app-custom-rtl.css') }}"> | <link rel="stylesheet" href="{{ asset('bundles/easyadmin/app-custom-rtl.css') }}"> | ||||
{% endif %} #} | {% endif %} #} | ||||
{# CKEditor #} | |||||
<script type="text/javascript"> | |||||
var CKEDITOR_BASEPATH = "{{ ckeditor_base_path("/bundles/fosckeditor/") }}"; | |||||
</script> | |||||
<script type="text/javascript" src="{{ asset('bundles/fosckeditor/ckeditor.js') }}"></script> | |||||
{% block configured_head_contents %} | {% block configured_head_contents %} | ||||
{% for htmlContent in ea.assets.headContents ?? [] %} | {% for htmlContent in ea.assets.headContents ?? [] %} | ||||
{{ htmlContent|raw }} | {{ htmlContent|raw }} |