Exemplo n.º 1
0
 /**
  * @param string $sourceEntityClass
  * @param string $targetEntityClass
  * @param string $associationKind
  */
 public function createManyToManyAssociation($sourceEntityClass, $targetEntityClass, $associationKind)
 {
     $relationName = ExtendHelper::buildAssociationName($targetEntityClass, $associationKind);
     $entityConfigProvider = $this->configManager->getProvider('entity');
     $targetEntityConfig = $entityConfigProvider->getConfig($targetEntityClass);
     $label = $targetEntityConfig->get('label', false, ConfigHelper::getTranslationKey('entity', 'label', $targetEntityClass, $relationName));
     $description = ConfigHelper::getTranslationKey('entity', 'description', $targetEntityClass, $relationName);
     $targetEntityPrimaryKeyColumns = $this->getPrimaryKeyColumnNames($targetEntityClass);
     // add relation to owning entity
     $this->relationBuilder->addManyToManyRelation($this->configManager->getProvider('extend')->getConfig($sourceEntityClass), $targetEntityClass, $relationName, $targetEntityPrimaryKeyColumns, $targetEntityPrimaryKeyColumns, $targetEntityPrimaryKeyColumns, ['extend' => ['without_default' => true], 'entity' => ['label' => $label, 'description' => $description], 'view' => ['is_displayable' => true], 'form' => ['is_enabled' => true]]);
 }
Exemplo n.º 2
0
 /**
  * @param string $sourceEntityClass
  * @param string $targetEntityClass
  * @param string $associationKind
  */
 public function createManyToManyAssociation($sourceEntityClass, $targetEntityClass, $associationKind)
 {
     $relationName = ExtendHelper::buildAssociationName($targetEntityClass, $associationKind);
     $extendConfigProvider = $this->configManager->getProvider('extend');
     $targetEntityPrimaryKeyColumns = $this->getPrimaryKeyColumnNames($targetEntityClass);
     // add relation to owning entity
     $this->relationBuilder->addManyToManyRelation($extendConfigProvider->getConfig($sourceEntityClass), $targetEntityClass, $relationName, $targetEntityPrimaryKeyColumns, $targetEntityPrimaryKeyColumns, $targetEntityPrimaryKeyColumns);
     // update attributes for new association
     $fieldConfig = $extendConfigProvider->getConfig($sourceEntityClass, $relationName);
     if ($fieldConfig->is('state', ExtendScope::STATE_NEW)) {
         $targetEntityConfig = $this->configManager->getProvider('entity')->getConfig($targetEntityClass);
         $this->relationBuilder->updateFieldConfigs($sourceEntityClass, $relationName, ['extend' => ['without_default' => true], 'entity' => ['label' => $this->getAssociationLabel('plural_label', $sourceEntityClass, $relationName, $targetEntityConfig), 'description' => $this->getAssociationLabel('description', $sourceEntityClass, $relationName, $targetEntityConfig)], 'view' => ['is_displayable' => true], 'form' => ['is_enabled' => true]]);
     }
 }
Exemplo n.º 3
0
 /**
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function testAddManyToManyRelationForAlreadyExistRelationWithOptions()
 {
     $relationName = 'testRelation';
     $relationKey = 'manyToMany|Test\\SourceEntity|Test\\TargetEntity|testRelation';
     $targetTitleFieldName = 'field1';
     $targetDetailedFieldName = 'field2';
     $targetGridFieldName = 'field3';
     $extendConfig = new Config(new EntityConfigId('extend', self::SOURCE_CLASS));
     $extendConfig->set('relation', [$relationKey => []]);
     $extendFieldConfig = new Config(new FieldConfigId('extend', self::SOURCE_CLASS, $relationName, 'manyToMany'));
     $testFieldConfig = new Config(new FieldConfigId('test', self::SOURCE_CLASS, $relationName, 'manyToOne'));
     $expectedExtendFieldConfig = new Config($extendFieldConfig->getId());
     $expectedExtendFieldConfig->setValues(['owner' => ExtendScope::OWNER_CUSTOM, 'is_extend' => true, 'relation_key' => $relationKey, 'target_entity' => self::TARGET_CLASS, 'target_title' => [$targetTitleFieldName], 'target_detailed' => [$targetDetailedFieldName], 'target_grid' => [$targetGridFieldName]]);
     $expectedTestFieldConfig = new Config($testFieldConfig->getId());
     $expectedTestFieldConfig->setValues(['test_attr' => 123]);
     $fieldConfigModel = $this->getMockBuilder('Oro\\Bundle\\EntityConfigBundle\\Entity\\FieldConfigModel')->disableOriginalConstructor()->getMock();
     $this->configManager->expects($this->once())->method('hasConfigFieldModel')->with(self::SOURCE_CLASS, $relationName)->will($this->returnValue(true));
     $this->configManager->expects($this->never())->method('createConfigFieldModel');
     $this->configManager->expects($this->once())->method('getConfigFieldModel')->with(self::SOURCE_CLASS, $relationName)->will($this->returnValue($fieldConfigModel));
     $fieldConfigModel->expects($this->once())->method('getType')->will($this->returnValue('manyToMany'));
     $this->configManager->expects($this->never())->method('changeFieldType');
     $extendConfigProvider = $this->getConfigProviderMock();
     $extendConfigProvider->expects($this->once())->method('getConfig')->with(self::SOURCE_CLASS, $relationName)->will($this->returnValue($extendFieldConfig));
     $extendConfigProvider->expects($this->once())->method('persist')->with($this->identicalTo($extendFieldConfig));
     $testConfigProvider = $this->getConfigProviderMock();
     $testConfigProvider->expects($this->once())->method('getConfig')->with(self::SOURCE_CLASS, $relationName)->will($this->returnValue($testFieldConfig));
     $testConfigProvider->expects($this->once())->method('persist')->with($this->identicalTo($testFieldConfig));
     $this->configManager->expects($this->any())->method('getProvider')->will($this->returnValueMap([['extend', $extendConfigProvider], ['test', $testConfigProvider]]));
     $this->builder->addManyToManyRelation($extendConfig, self::TARGET_CLASS, $relationName, [$targetTitleFieldName], [$targetDetailedFieldName], [$targetGridFieldName], ['extend' => ['owner' => ExtendScope::OWNER_CUSTOM], 'test' => ['test_attr' => 123]]);
     $this->assertEquals($expectedExtendFieldConfig, $extendFieldConfig);
     $this->assertEquals($expectedTestFieldConfig, $testFieldConfig);
 }
 /**
  * {@inheritdoc}
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function preUpdate()
 {
     $enumConfigProvider = $this->configManager->getProvider('enum');
     $extendConfigProvider = $this->configManager->getProvider('extend');
     $entityConfigs = $extendConfigProvider->getConfigs();
     foreach ($entityConfigs as $entityConfig) {
         if (!$entityConfig->is('is_extend')) {
             continue;
         }
         $fieldConfigs = $extendConfigProvider->getConfigs($entityConfig->getId()->getClassName());
         foreach ($fieldConfigs as $fieldConfig) {
             if (!$fieldConfig->in('state', [ExtendScope::STATE_NEW, ExtendScope::STATE_UPDATE])) {
                 continue;
             }
             /** @var FieldConfigId $fieldConfigId */
             $fieldConfigId = $fieldConfig->getId();
             $fieldType = $fieldConfigId->getFieldType();
             if (!in_array($fieldType, ['enum', 'multiEnum'])) {
                 continue;
             }
             // prepare input parameters
             $fieldOptions = [];
             $enumFieldConfig = $enumConfigProvider->getConfig($fieldConfigId->getClassName(), $fieldConfigId->getFieldName());
             $enumCode = $enumFieldConfig->get('enum_code');
             $enumName = $enumFieldConfig->get('enum_name');
             $isPublic = $enumFieldConfig->get('enum_public');
             if (empty($enumCode) && $isPublic && empty($enumName)) {
                 throw new \LogicException(sprintf('Both "enum_code" and "enum_name" cannot be empty for a public enum. Field: %s::%s.', $fieldConfigId->getClassName(), $fieldConfigId->getFieldName()));
             }
             if (empty($enumCode)) {
                 $enumCode = $enumName !== null ? ExtendHelper::buildEnumCode($enumName) : ExtendHelper::generateEnumCode($fieldConfigId->getClassName(), $fieldConfigId->getFieldName());
                 $fieldOptions['enum']['enum_code'] = $enumCode;
             }
             $isMultiple = $this->fieldTypeHelper->getUnderlyingType($fieldType) === RelationType::MANY_TO_MANY;
             $enumValueClassName = ExtendHelper::buildEnumValueClassName($enumCode);
             // create an entity is used to store enum values
             $this->createEnumValueConfigEntityModel($enumValueClassName, $enumCode, $isMultiple, $isPublic);
             // create a relation
             if ($isMultiple) {
                 $fieldOptions['extend']['without_default'] = true;
                 $this->relationBuilder->addManyToManyRelation($entityConfig, $enumValueClassName, $fieldConfigId->getFieldName(), ['name'], ['name'], ['name'], $fieldOptions, $fieldType);
             } else {
                 $this->relationBuilder->addManyToOneRelation($entityConfig, $enumValueClassName, $fieldConfigId->getFieldName(), 'name', $fieldOptions, $fieldType);
             }
         }
     }
 }