|
- <?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 Symfony\Component\EventDispatcher\EventSubscriberInterface;
- use Symfony\Component\HttpKernel\KernelEvents;
-
- class SiteSettingEventSubscriber implements EventSubscriberInterface
- {
- protected $em;
- protected $siteSettingDefinition;
- protected $siteSettingFactory;
- protected $siteSettingRepository;
- protected $siteRepository;
- protected $siteFactory;
-
- public function __construct(
- EntityManagerInterface $em,
- SiteSettingRepository $siteSettingRepository,
- SiteRepository $siteRepository,
- SiteSettingDefinitionInterface $siteSettingDefinition,
- SiteSettingFactory $siteSettingFactory,
- SiteFactory $siteFactory
- ) {
- $this->em = $em;
- $this->siteSettingDefinition = $siteSettingDefinition;
- $this->siteSettingFactory = $siteSettingFactory;
- $this->siteSettingRepository = $siteSettingRepository;
- $this->siteRepository = $siteRepository;
- $this->siteFactory = $siteFactory;
- }
-
- public static function getSubscribedEvents()
- {
- return [
- KernelEvents::CONTROLLER => ['initSettings']
- ];
- }
-
- public function initSettings()
- {
- $site = $this->getSiteDefault();
- if (!$site) {
- $site = $this->siteFactory->create('default');
- $this->em->persist($site);
- $this->em->flush($site);
- }
-
- $settings = $this->siteSettingDefinition->getSettings();
- $factory = $this->siteSettingFactory;
-
- foreach ($settings as $category => $settingList) {
- foreach ($settingList as $settingName => $setting) {
- $entitySetting = $site->getSetting($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->em->persist($entitySetting);
- } else {
- if ($entitySetting->getValue() === null
- && isset($setting['default'])
- && $setting['default'] !== null) {
- $methodSetValue = 'set' . ucfirst($setting['field']);
- $entitySetting->$methodSetValue($setting['default']);
- $this->em->update($entitySetting);
- }
- }
- }
- }
-
-
- $this->em->flush();
- }
-
- public function getSiteDefault()
- {
- return $this->siteRepository->findOneByDevAlias('default');
- }
-
- }
|