MetaModels\DcGeneral\Dca\Builder\Builder::calculateConditionsWithVariants PHP Method

calculateConditionsWithVariants() protected method

Parse the correct conditions for a MetaModel with variant support.
protected calculateConditionsWithVariants ( MetaModels\DcGeneral\DataDefinition\IMetaModelDataDefinition $container, ContaoCommunityAlliance\DcGeneral\DataDefinition\Definition\ModelRelationshipDefinitionInterface $definition ) : void
$container MetaModels\DcGeneral\DataDefinition\IMetaModelDataDefinition The data container.
$definition ContaoCommunityAlliance\DcGeneral\DataDefinition\Definition\ModelRelationshipDefinitionInterface The relationship container.
return void
    protected function calculateConditionsWithVariants(IMetaModelDataDefinition $container, $definition)
    {
        // Basic conditions.
        $this->addHierarchicalConditions($container, $definition);
        $this->addParentCondition($container, $definition);
        // Conditions for metamodels variants.
        $relationship = $this->getRootCondition($container, $definition);
        $relationship->setSetters(array_merge_recursive(array(array('property' => 'varbase', 'value' => '1')), $relationship->getSetters()));
        $builder = FilterBuilder::fromArrayForRoot((array) $relationship->getFilterArray())->getFilter();
        $builder->andPropertyEquals('varbase', 1);
        $relationship->setFilterArray($builder->getAllAsArray());
        $setter = array(array('to_field' => 'varbase', 'value' => '0'), array('to_field' => 'vargroup', 'from_field' => 'vargroup'));
        $inverse = array();
        /** @var ParentChildConditionInterface $relationship */
        $relationship = $definition->getChildCondition($container->getName(), $container->getName());
        if ($relationship === null) {
            $relationship = new ParentChildCondition();
            $relationship->setSourceName($container->getName())->setDestinationName($container->getName());
            $definition->addChildCondition($relationship);
        } else {
            $setter = array_merge_recursive($setter, $relationship->getSetters());
            $inverse = array_merge_recursive($inverse, $relationship->getInverseFilterArray());
        }
        $relationship->setFilterArray(FilterBuilder::fromArray($relationship->getFilterArray())->getFilter()->getBuilder()->encapsulateOr()->andRemotePropertyEquals('vargroup', 'vargroup')->andRemotePropertyEquals('vargroup', 'id')->andRemotePropertyEquals('varbase', 0, true)->getAllAsArray())->setSetters($setter)->setInverseFilterArray($inverse);
    }