Esempio n. 1
0
 /**
  * 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;
 }