Neos\ContentRepository\Domain\Repository\NodeDataRepository::filterNodeDataByBestMatchInContext PHP Method

filterNodeDataByBestMatchInContext() protected method

protected filterNodeDataByBestMatchInContext ( array $nodeDataObjects, Workspace $workspace, array $dimensions, boolean $includeRemovedNodes = false ) : array
$nodeDataObjects array
$workspace Neos\ContentRepository\Domain\Model\Workspace
$dimensions array
$includeRemovedNodes boolean Should removed nodes be included in the result (defaults to FALSE)
return array
    protected function filterNodeDataByBestMatchInContext(array $nodeDataObjects, Workspace $workspace, array $dimensions, $includeRemovedNodes = false)
    {
        $workspaces = $this->collectWorkspaceAndAllBaseWorkspaces($workspace);
        $nonPersistedNodes = [];
        $nodeIdentifier = [];
        /** @var NodeData $nodeData */
        foreach ($nodeDataObjects as $nodeData) {
            $nodeIdentifier[] = $nodeData->getIdentifier();
            while ($workspace !== null) {
                /** @var $node NodeData */
                foreach ($this->addedNodes as $node) {
                    if ($node->getIdentifier() === $nodeData->getIdentifier() && $node->matchesWorkspaceAndDimensions($workspace, $dimensions) && $node->isInternal() === false) {
                        $nonPersistedNodes[] = $node;
                    }
                }
                $workspace = $workspace->getBaseWorkspace();
            }
        }
        $queryBuilder = $this->createQueryBuilder($workspaces);
        if ($dimensions !== null) {
            $this->addDimensionJoinConstraintsToQueryBuilder($queryBuilder, $dimensions);
        } else {
            $dimensions = [];
        }
        if ($includeRemovedNodes === false) {
            $queryBuilder->andWhere('n.movedTo IS NULL OR n.removed = FALSE');
        } else {
            $queryBuilder->andWhere('n.movedTo IS NULL');
        }
        $queryBuilder->andWhere('n.identifier IN (:identifier)')->setParameter('identifier', $nodeIdentifier);
        $query = $queryBuilder->getQuery();
        $nodes = $query->getResult();
        $foundNodes = array_merge($nodes, $nonPersistedNodes);
        $foundNodes = $this->reduceNodeVariantsByWorkspacesAndDimensions($foundNodes, $workspaces, $dimensions);
        $foundNodes = $this->filterRemovedNodes($foundNodes, $includeRemovedNodes);
        /** @var NodeData $nodeData */
        return array_filter($nodeDataObjects, function (NodeData $nodeData) use($foundNodes) {
            return isset($foundNodes[$nodeData->getIdentifier()]) && $foundNodes[$nodeData->getIdentifier()] === $nodeData;
        });
    }