/** * Post submit event handler * * @param FormEvent $event * * @SuppressWarnings(PHPMD.NPathComplexity) */ public function postSubmit(FormEvent $event) { $form = $event->getForm(); $configModel = $form->getConfig()->getOption('config_model'); if (!$configModel instanceof FieldConfigModel) { return; } if (!in_array($configModel->getType(), ['enum', 'multiEnum'])) { return; } if (!$form->isValid()) { return; } $data = $event->getData(); $enumConfig = $configModel->toArray('enum'); $enumName = $this->getValue($data['enum'], 'enum_name'); $enumCode = $this->getValue($enumConfig, 'enum_code'); if (empty($enumCode)) { $enumCode = $enumName !== null ? ExtendHelper::buildEnumCode($enumName) : ExtendHelper::generateEnumCode($configModel->getEntity()->getClassName(), $configModel->getFieldName()); } $locale = $this->translator->getLocale(); $enumValueClassName = ExtendHelper::buildEnumValueClassName($enumCode); $enumConfigProvider = $this->configManager->getProvider('enum'); if ($enumConfigProvider->hasConfig($enumValueClassName)) { // existing enum if ($configModel->getId()) { if ($enumName !== null) { $this->enumSynchronizer->applyEnumNameTrans($enumCode, $enumName, $locale); } $enumOptions = $this->getValue($data['enum'], 'enum_options'); if ($enumOptions !== null) { $this->enumSynchronizer->applyEnumOptions($enumValueClassName, $enumOptions, $locale); } $enumPublic = $this->getValue($data['enum'], 'enum_public'); if ($enumPublic !== null) { $this->enumSynchronizer->applyEnumEntityOptions($enumValueClassName, $enumPublic); } } unset($data['enum']['enum_name']); unset($data['enum']['enum_options']); unset($data['enum']['enum_public']); $event->setData($data); } else { // new enum $this->sortOptions($data['enum']['enum_options']); $data['enum']['enum_locale'] = $locale; $event->setData($data); } }
public function testApplyEnumNameTransNoTransForDefaultLocale() { $enumCode = 'test_enum'; $enumName = 'Test Enum New'; $locale = Translation::DEFAULT_LOCALE; $this->translator->expects($this->once())->method('trans')->with(ExtendHelper::getEnumTranslationKey('label', $enumCode), [], null, $locale)->will($this->returnValue(ExtendHelper::getEnumTranslationKey('label', $enumCode))); $em = $this->getMockBuilder('Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock(); $this->doctrine->expects($this->once())->method('getManagerForClass')->with(Translation::ENTITY_NAME)->will($this->returnValue($em)); $transRepo = $this->getMockBuilder('Oro\\Bundle\\TranslationBundle\\Entity\\Repository\\TranslationRepository')->disableOriginalConstructor()->getMock(); $em->expects($this->once())->method('getRepository')->with(Translation::ENTITY_NAME)->will($this->returnValue($transRepo)); $transLabelObj = new \stdClass(); $transPluralLabelObj = new \stdClass(); $transDescriptionObj = new \stdClass(); $transRepo->expects($this->at(0))->method('saveValue')->with(ExtendHelper::getEnumTranslationKey('label', $enumCode), $enumName, $locale, TranslationRepository::DEFAULT_DOMAIN, Translation::SCOPE_UI)->will($this->returnValue($transLabelObj)); $transRepo->expects($this->at(1))->method('saveValue')->with(ExtendHelper::getEnumTranslationKey('plural_label', $enumCode), $enumName, $locale, TranslationRepository::DEFAULT_DOMAIN, Translation::SCOPE_UI)->will($this->returnValue($transPluralLabelObj)); $transRepo->expects($this->at(2))->method('saveValue')->with(ExtendHelper::getEnumTranslationKey('description', $enumCode), '', $locale, TranslationRepository::DEFAULT_DOMAIN, Translation::SCOPE_UI)->will($this->returnValue($transDescriptionObj)); $em->expects($this->once())->method('flush')->with($this->identicalTo([$transLabelObj, $transPluralLabelObj, $transDescriptionObj])); $this->dbTranslationMetadataCache->expects($this->once())->method('updateTimestamp')->with($locale); $this->synchronizer->applyEnumNameTrans($enumCode, $enumName, $locale); }