/** * @param FieldConfigModel $configModel * @return array */ protected function writeItem(FieldConfigModel $configModel) { $className = $configModel->getEntity()->getClassName(); $fieldName = $configModel->getFieldName(); $state = ExtendScope::STATE_UPDATE; if (!$this->configManager->hasConfig($className, $fieldName)) { $this->configManager->createConfigFieldModel($className, $fieldName, $configModel->getType()); $state = ExtendScope::STATE_NEW; } $translations = []; foreach ($this->configManager->getProviders() as $provider) { $scope = $provider->getScope(); $data = $configModel->toArray($scope); if (!$data) { continue; } $translations = array_merge($translations, $this->processData($provider, $provider->getConfig($className, $fieldName), $data, $state)); } $this->setExtendData($className, $fieldName, $state); $this->updateEntityState($className); if ($state === ExtendScope::STATE_UPDATE && in_array($configModel->getType(), ['enum', 'multiEnum'], true)) { $this->setEnumData($configModel->toArray('enum'), $className, $fieldName); } return $translations; }
public function testFieldConfigModel() { $fieldName = 'testField'; $fieldType = 'integer'; $entityModel = new EntityConfigModel('Test\\TestClass'); $fieldModel = new FieldConfigModel($fieldName, $fieldType); $fieldModel->setEntity($entityModel); $this->assertEmpty($fieldModel->getId()); $this->assertEquals($fieldName, $fieldModel->getFieldName()); $this->assertEquals($fieldType, $fieldModel->getType()); $this->assertSame($entityModel, $fieldModel->getEntity()); $fieldName1 = 'testField'; $fieldType1 = 'integer'; $fieldModel->setFieldName($fieldName1); $fieldModel->setType($fieldType1); $this->assertEquals($fieldName1, $fieldModel->getFieldName()); $this->assertEquals($fieldType1, $fieldModel->getType()); }
public function test() { $this->assertEquals('test', $this->configField->getFieldName($this->configField->setFieldName('test'))); $this->assertEquals('string', $this->configField->getType($this->configField->setType('string'))); $this->assertEquals('Acme\\Bundle\\DemoBundle\\Entity\\TestAccount', $this->configEntity->getClassName($this->configEntity->setClassName('Acme\\Bundle\\DemoBundle\\Entity\\TestAccount'))); /** test ConfigField set/getEntity */ $this->configField->setEntity($this->configEntity); $this->assertEquals($this->configEntity, $this->configField->getEntity()); /** test ConfigField getOptions */ $this->assertInstanceOf('\\Doctrine\\Common\\Collections\\ArrayCollection', $this->configField->getOptions()); /** test ConfigEntity addField */ $this->configEntity->addField($this->configField); $this->assertEquals($this->configField, $this->configEntity->getField('test')); /** test ConfigEntity setFields */ $this->configEntity->setFields(array($this->configField)); $this->assertEquals(array($this->configField), $this->configEntity->getFields()); /** test ConfigValue */ $this->configValue->setCode('is_extend')->setScope('extend')->setValue(true)->setField($this->configField); $this->assertEquals(array('code' => 'is_extend', 'scope' => 'extend', 'value' => true, 'serializable' => false), $this->configValue->toArray()); /** test Config setValues() */ $this->configEntity->setValues(array($this->configValue)); $this->assertEquals($this->configValue, $this->configEntity->getValue('is_extend', 'extend')); }
public function testFieldConfigModel() { $fieldName = 'testField'; $fieldType = 'integer'; $entityModel = new EntityConfigModel('Test\\TestClass'); $fieldModel = new FieldConfigModel($fieldName, $fieldType); $fieldModel->setEntity($entityModel); $this->assertEmpty($fieldModel->getId()); $this->assertEquals($fieldName, $fieldModel->getFieldName()); $this->assertEquals($fieldType, $fieldModel->getType()); $this->assertSame($entityModel, $fieldModel->getEntity()); $fieldName1 = 'testField'; $fieldType1 = 'integer'; $fieldModel->setFieldName($fieldName1); $fieldModel->setType($fieldType1); $this->assertEquals($fieldName1, $fieldModel->getFieldName()); $this->assertEquals($fieldType1, $fieldModel->getType()); $this->assertCount(0, $fieldModel->getOptions()); $optionSet = new OptionSet(); $fieldModel->setOptions(new ArrayCollection([$optionSet])); $this->assertCount(1, $fieldModel->getOptions()); $this->assertSame($optionSet, $fieldModel->getOptions()->first()); }
/** * @return string */ public function getFieldType() { return $this->configModel->getType(); }
/** * @param FieldConfigModel $entity * @return array */ protected function validateEntityFields(FieldConfigModel $entity) { $errors = []; $fieldProperties = $this->fieldTypeProvider->getFieldProperties($entity->getType()); foreach ($fieldProperties as $scope => $properties) { $scopeData = $entity->toArray($scope); foreach ($properties as $code => $config) { if (!isset($scopeData[$code])) { continue; } if ($scope === 'enum') { foreach ($scopeData[$code] as $key => $enumFields) { $result = $this->strategyHelper->validateEntity(EnumValue::createFromArray($enumFields)); if ($result) { $errors[] = sprintf('%s.%s.%s: %s', $scope, $code, $key, implode(' ', $result)); } } } elseif (isset($config['constraints'])) { $result = $this->strategyHelper->validateEntity($scopeData[$code], $this->constraintFactory->parse($config['constraints'])); if ($result) { $errors[] = sprintf('%s.%s: %s', $scope, $code, implode(' ', $result)); } } } } return $errors; }
/** * @param FieldConfigModel $model * @param array $options */ protected function updateModelConfig(FieldConfigModel $model, array $options) { $fieldProperties = $this->fieldTypeProvider->getFieldProperties($model->getType()); foreach ($fieldProperties as $scope => $properties) { $values = []; foreach ($properties as $code => $config) { if (!isset($options[$scope][$code])) { continue; } $value = $this->denormalizeFieldValue(isset($config['options']) ? $config['options'] : [], $options[$scope][$code], $model->getType()); if ($value !== null) { $values[$code] = $value; } } $model->fromArray($scope, $values, []); } }
/** * Gets config id for the given model * * @param EntityConfigModel|FieldConfigModel $model * @param string $scope * @return ConfigIdInterface */ public function getConfigIdByModel($model, $scope) { if ($model instanceof FieldConfigModel) { return new FieldConfigId($scope, $model->getEntity()->getClassName(), $model->getFieldName(), $model->getType()); } else { return new EntityConfigId($scope, $model->getClassName()); } }