/** * 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; }
/** * @dataProvider isSystemProvider */ public function testIsSystem($owner, $expected, $fieldName = null) { $className = 'Test\\Entity'; $config = new Config($this->getMock('Oro\\Bundle\\EntityConfigBundle\\Config\\Id\\ConfigIdInterface')); $config->set('owner', $owner); $configProvider = $this->getConfigProviderMock(); $this->configManager->expects($this->once())->method('getProvider')->with('extend')->will($this->returnValue($configProvider)); $configProvider->expects($this->once())->method('hasConfig')->with($className, $fieldName)->will($this->returnValue(true)); $configProvider->expects($this->once())->method('getConfig')->with($className, $fieldName)->will($this->returnValue($config)); $this->assertEquals($expected, $this->typeHelper->isSystem($className, $fieldName)); }