/**
  * 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;
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
 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());
 }
Example #4
0
 /**
  * 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;
 }