/** * Checks if the given constraint is applied or not * * @param Options $options * @param string|null $constraintName Can be: null, 'add', 'delete' * * @return bool */ protected function isDisabled($options, $constraintName = null) { /** @var ConfigIdInterface $configId */ $configId = $options['config_id']; $className = $configId->getClassName(); if (empty($className)) { return false; } $fieldName = $this->typeHelper->getFieldName($configId); if (empty($fieldName)) { return false; } $enumCode = $this->typeHelper->getEnumCode($className, $fieldName); if (!empty($enumCode)) { if ($options['config_is_new']) { // a new field reuses public enum return true; } if ($constraintName) { $enumValueClassName = ExtendHelper::buildEnumValueClassName($enumCode); if ($this->typeHelper->isImmutable('enum', $enumValueClassName, null, $constraintName)) { // is immutable return true; } } } return false; }
/** * Checks if the form type should be read-only or not * * @param Options $options * * @return bool */ protected function isReadOnly($options) { /** @var ConfigIdInterface $configId */ $configId = $options['config_id']; $className = $configId->getClassName(); if (empty($className)) { return false; } $fieldName = $this->typeHelper->getFieldName($configId); if (empty($fieldName)) { return false; } if ($this->typeHelper->isSystem($className, $fieldName)) { // it is a system field return true; } $enumCode = $this->typeHelper->getEnumCode($className, $fieldName); if (!empty($enumCode)) { if ($options['config_is_new']) { // a new field reuses public enum return true; } $enumValueClassName = ExtendHelper::buildEnumValueClassName($enumCode); if ($this->typeHelper->isImmutable('enum', $enumValueClassName, null, 'public')) { // is immutable return true; } if ($this->typeHelper->hasOtherReferences($enumCode, $className, $fieldName)) { // an enum is reused by other fields return true; } } return false; }
public function testGetPublicEnumTypes() { $config1 = new Config(new EntityConfigId('extend', 'Test\\EnumValue1')); $config1->set('is_extend', true); $config1->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config1->set('state', ExtendScope::STATE_ACTIVE); $config2 = new Config(new EntityConfigId('extend', 'Test\\EnumValue2')); $config2->set('is_extend', true); $config2->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config2->set('state', ExtendScope::STATE_UPDATE); $config3 = new Config(new EntityConfigId('extend', 'Test\\EnumValue2')); $config3->set('is_extend', true); $config3->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config3->set('state', ExtendScope::STATE_NEW); $config4 = new Config(new EntityConfigId('extend', 'Test\\EnumValue2')); $config4->set('is_extend', true); $config4->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config4->set('state', ExtendScope::STATE_DELETE); $config5 = new Config(new EntityConfigId('extend', 'Test\\EnumValue1')); $config5->set('is_extend', true); $config5->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config5->set('state', ExtendScope::STATE_ACTIVE); $config6 = new Config(new EntityConfigId('extend', 'Test\\Entity6')); $config7 = new Config(new EntityConfigId('extend', 'Test\\EnumValue2')); $config7->set('is_extend', true); $config7->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config7->set('state', ExtendScope::STATE_ACTIVE); $config7->set('is_deleted', true); $config8 = new Config(new EntityConfigId('extend', 'Test\\EnumValue8')); $config8->set('is_extend', true); $config8->set('inherit', ExtendHelper::BASE_ENUM_VALUE_CLASS); $config8->set('state', ExtendScope::STATE_ACTIVE); $configs = [$config1, $config2, $config3, $config4, $config5, $config6, $config7, $config8]; $enumConfig1 = new Config(new EntityConfigId('enum', 'Test\\EnumValue1')); $enumConfig1->set('public', true); $enumConfig1->set('code', 'test_enum1'); $enumConfig1->set('multiple', true); $enumConfig2 = new Config(new EntityConfigId('enum', 'Test\\EnumValue2')); $enumConfig2->set('public', true); $enumConfig2->set('code', 'test_enum2'); $enumConfig5 = new Config(new EntityConfigId('enum', 'Test\\EnumValue3')); $enumConfig5->set('code', 'test_enum5'); $enumConfig8 = new Config(new EntityConfigId('enum', 'Test\\EnumValue8')); $enumConfig8->set('code', 'test_enum8'); $extendConfigProvider = $this->getConfigProviderMock(); $enumConfigProvider = $this->getConfigProviderMock(); $this->configManager->expects($this->exactly(2))->method('getProvider')->will($this->returnValueMap([['enum', $enumConfigProvider], ['extend', $extendConfigProvider]])); $extendConfigProvider->expects($this->once())->method('getConfigs')->with(null, true)->will($this->returnValue($configs)); $enumConfigProvider->expects($this->exactly(4))->method('getConfig')->will($this->returnValueMap([['Test\\EnumValue1', null, $enumConfig1], ['Test\\EnumValue2', null, $enumConfig2], ['Test\\EnumValue5', null, $enumConfig5], ['Test\\EnumValue8', null, $enumConfig8]])); $this->assertEquals(['test_enum1' => 'multiEnum||test_enum1', 'test_enum2' => 'enum||test_enum2'], $this->typeHelper->getPublicEnumTypes()); }
/** * Checks if the form type should be read-only or not * * @param Options $options * * @return bool */ protected function isReadOnly($options) { /** @var ConfigIdInterface $configId */ $configId = $options['config_id']; $className = $configId->getClassName(); if (empty($className)) { return false; } $fieldName = $this->typeHelper->getFieldName($configId); if (empty($fieldName)) { return false; } // check if new field reuses a public enum if ($options['config_is_new'] && $this->typeHelper->hasEnumCode($className, $fieldName)) { return true; } return false; }