merchantStore = $merchantStore; $this->merchantSettingDefinition = $merchantSettingDefinition; $this->merchantSettingFactory = $merchantSettingFactory; $this->sectionSettingDefinition = $sectionSettingDefinition; $this->sectionSettingFactory = $sectionSettingFactory; } public function initMerchantSettings() { $merchants = $this->merchantStore->get(); $this->initSettingsGeneric( $this->merchantSettingDefinition->getSettings(), $merchants, $this->merchantSettingFactory ); } public function initSectionSettings() { $merchants = $this->merchantStore->get(); foreach($merchants as $merchant) { $this->initSettingsGeneric( $this->sectionSettingDefinition->getSettings(), $merchant->getSections(), $this->sectionSettingFactory ); } } protected function initSettingsGeneric($settings, $entities, $factory) { if($entities) { foreach ($entities as $entity) { $this->entityManager->refresh($entity); foreach ($settings as $category => $settingList) { foreach ($settingList as $settingName => $setting) { $entitySetting = $this->settingSolver->getSetting($entity, $settingName); if (!$entitySetting) { // gestion du cas des SectionSetting spécifiques à une section $createEntitySetting = true; if ($entity instanceof SectionInterface && isset($setting['section']) && $setting['section'] != $entity) { $createEntitySetting = false; } if ($createEntitySetting) { $text = null; $date = null; $file = null; $valueDefault = isset($setting['default']) ? $this->settingSolver->getDefaultValue($entity, $setting['default']) : null; if ($setting['field'] == 'text') { $text = $valueDefault; } elseif ($setting['field'] == 'date') { $date = $valueDefault; } elseif ($setting['field'] == 'file') { $file = $valueDefault; } $entitySetting = $factory->create($entity, $setting['name'], $text, $date, $file); $this->entityManager->create($entitySetting); } } else { if ($this->settingSolver->getValue($entitySetting) === null && isset($setting['default']) && $setting['default'] !== null) { $valueDefault = $this->settingSolver->getDefaultValue($entity, $setting['default']); if($valueDefault) { $methodSetValue = 'set' . ucfirst($setting['field']); $entitySetting->$methodSetValue($valueDefault); $this->entityManager->update($entitySetting); } } } } } } $this->entityManager->flush(); } } }