/** * Bulk generates and inserts full version records for the provided versionable entities * in MongoDB. * Return an array of ids of documents that have really changed since the last version. * * @param array $versionables * * @return array */ public function bulkPersist(array $versionables) { $versions = []; $changedDocIds = []; $author = VersionManager::DEFAULT_SYSTEM_USER; $event = $this->eventDispatcher->dispatch(BuildVersionEvents::PRE_BUILD, new BuildVersionEvent()); if (null !== $event && null !== $event->getUsername()) { $author = $event->getUsername(); } foreach ($versionables as $versionable) { $previousVersion = $this->getPreviousVersion($versionable); $context = $this->versionContext->getContextInfo(get_class($versionable)); $newVersion = $this->versionBuilder->buildVersion($versionable, $author, $previousVersion, $context); if (count($newVersion->getChangeSet()) > 0) { $versions[] = $newVersion; $changedDocIds[] = $versionable->getId(); } if (null !== $previousVersion) { $this->documentManager->detach($previousVersion); } } $mongodbVersions = []; foreach ($versions as $version) { $mongodbVersions[] = $this->normalizer->normalize($version, VersionNormalizer::FORMAT); } if (count($mongodbVersions) > 0) { $collection = $this->documentManager->getDocumentCollection($this->versionClass); $collection->batchInsert($mongodbVersions); } return $changedDocIds; }
/** * {@inheritdoc} * * If a versionable contains no change (i.e. has nothing in its changeset) no version will be built for it. */ public function buildVersions(array $versionables) { $author = VersionManager::DEFAULT_SYSTEM_USER; $event = $this->eventDispatcher->dispatch(BuildVersionEvents::PRE_BUILD, new BuildVersionEvent()); if (null !== $event && null !== $event->getUsername()) { $author = $event->getUsername(); } $versions = []; foreach ($versionables as $versionable) { $context = $this->versionContext->getContextInfo(ClassUtils::getClass($versionable)); $previousVersion = $this->getPreviousVersion($versionable); $newVersion = $this->versionBuilder->buildVersion($versionable, $author, $previousVersion, $context); if (0 < count($newVersion->getChangeSet())) { $versions[] = $newVersion; } if (null !== $previousVersion) { $this->documentManager->detach($previousVersion); } } return $versions; }
/** * @return Folder[] */ function methodB() { $a = $this->getFolder('a'); $b = $this->getFolder('b'); foreach ($a->getFiles() as $file) { if ($file->getOrder() === 1) { $a->removeFile($file); $this->dm->detach($file); $b->addFile($file); $this->dm->flush(); $this->dm->clear(); return array($a, $b); } } throw new \RuntimeException('Test folder A has run out of files!'); }