<?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->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(); | |||||
} | |||||
public function getSiteDefault() | |||||
{ | |||||
return $this->siteStore->getOneByDevAlias('default'); | |||||
} | |||||
} |