Esempio n. 1
0
 /**
  * Check if reverse relation can be created
  *
  * @param ConfigProvider $extendProvider
  * @param array          $relation
  * @param string         $relationKey
  *
  * @return bool
  *
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 protected function isAvailableRelation(ConfigProvider $extendProvider, array $relation, $relationKey)
 {
     /** @var FieldConfigId|false $fieldId */
     $fieldId = $relation['field_id'];
     /** @var FieldConfigId $targetFieldId */
     $targetFieldId = $relation['target_field_id'];
     if (!$relation['assign'] || !$targetFieldId) {
         if (!$targetFieldId) {
             return false;
         }
         // additional check for revers relation of manyToOne field type
         $targetEntityConfig = $extendProvider->getConfig($targetFieldId->getClassName());
         if (false === (!$relation['assign'] && !$fieldId && $targetFieldId && $targetFieldId->getFieldType() == RelationTypeBase::MANY_TO_ONE && $targetEntityConfig->get('relation') && $targetEntityConfig->get('relation')[$relationKey]['assign'])) {
             return false;
         }
     }
     if ($fieldId && $extendProvider->hasConfigById($fieldId) && $extendProvider->getConfigById($fieldId)->is('state', ExtendScope::STATE_DELETE)) {
         return false;
     }
     if ($targetFieldId && !$extendProvider->hasConfig($targetFieldId->getClassName(), $targetFieldId->getFieldName())) {
         return false;
     }
     return true;
 }