/** * Checks if the given task completely includes the other * * @param Task $other Other task * @return bool */ public function includes(self $other) { return array_intersect_key($this->items, $other->items) == $other->items && $this->scope->includes($other->scope); }
private function fetchRelatedObjects(ObjectRef $givenObjectRef, QueryContext $queryContext, Scope $scope, $skipBinaries, DOMDocument $domDoc, DOMNode $xmlElement, array &$xmlElementsWithState, array &$allFetchedObjects) { $hasTerminatedObjects = FALSE; $mySQLi = $this->schema->getMySQLi(); $givenEntity = $givenObjectRef->getEntity(); foreach ($givenEntity->getRelationships() as $relationship) { $otherEntity = $relationship->getOppositeEntity($givenEntity); // Ignore relationships with link-entities. if ($otherEntity->isObjectEntity()) { // Determine the scope of the related object to be fetched. $scopeUnitTag = NULL; if ($relationship->getOwnerEntity() == $givenEntity) { $scopeUnitTag = Scope::TAG_COMPONENTS; } else { if ($relationship->getOwnerEntity() == $otherEntity) { $scopeUnitTag = Scope::TAG_OWNERS; } else { $scopeUnitTag = Scope::TAG_ASSOCIATES; } } if ($scope->includes($scopeUnitTag) != Scope::INCLUDES_NONE) { $subScope = $scope->getSubScope($scopeUnitTag); // Fetch ObjectRefs to each related entity... $fetchedObjectRefs = array(); $hasTerminatedObjects |= $givenObjectRef->fetchRelatedObjectRefsOfEntity($mySQLi, $otherEntity, $queryContext, $subScope, $fetchedObjectRefs); // ...and then fetch each non-terminated entity. foreach ($fetchedObjectRefs as $fetchedObjectRef) { $this->fetchObjects($fetchedObjectRef->getEntity(), $fetchedObjectRef->getId(), $queryContext, $subScope, $skipBinaries, $domDoc, $xmlElement, $xmlElementsWithState, $allFetchedObjects); } } } } return $hasTerminatedObjects; }