/** * Create the pending versions for the versionable provided * * @param VersionableInterface[] $versionables */ public function persistPendingVersions(array $versionables) { $author = $this->versionManager->getUsername(); $context = $this->versionContext->getContextInfo(); $pendingVersions = []; foreach ($versionables as $versionable) { $changeset = $this->normalizer->normalize($versionable, 'csv', ['versioning' => true]); $pendingVersions[] = $this->versionBuilder->createPendingVersion($versionable, $author, $changeset, $context); } if (count($pendingVersions) > 0) { $this->batchInsertPendingVersions($pendingVersions); } }
/** * Build a version from a versionable entity * * @param object $versionable * @param array $changeset * * @return Version[] */ public function buildVersion($versionable, array $changeset = []) { $createdVersions = []; $event = $this->eventDispatcher->dispatch(BuildVersionEvents::PRE_BUILD, new BuildVersionEvent()); if (null !== $event && null !== $event->getUsername()) { $this->username = $event->getUsername(); } if ($this->realTimeVersioning) { $manager = $this->registry->getManagerForClass(ClassUtils::getClass($versionable)); $manager->refresh($versionable); $createdVersions = $this->buildPendingVersions($versionable); $builtVersions = array_filter($createdVersions, function ($version) { return count($version->getChangeset()) > 0; }); if (!empty($builtVersions)) { $previousVersion = end($builtVersions); } else { $previousVersion = $this->getNewestLogEntry($versionable); } $createdVersions[] = $this->versionBuilder->buildVersion($versionable, $this->username, $previousVersion, $this->versionContext->getContextInfo(ClassUtils::getClass($versionable))); if (null !== $previousVersion) { $manager->detach($previousVersion); } } else { $createdVersions[] = $this->versionBuilder->createPendingVersion($versionable, $this->username, $changeset, $this->versionContext->getContextInfo(ClassUtils::getClass($versionable))); } return $createdVersions; }
/** * Build a version from a versionable entity * * @param object $versionable * @param array $changeset * * @return Version[] */ public function buildVersion($versionable, array $changeset = array()) { $createdVersions = []; if ($this->realTimeVersioning) { $this->registry->getManagerForClass(ClassUtils::getClass($versionable))->refresh($versionable); $createdVersions = $this->buildPendingVersions($versionable); $builtVersions = array_filter($createdVersions, function ($version) { return count($version->getChangeset()) > 0; }); if (!empty($builtVersions)) { $previousVersion = end($builtVersions); } else { $previousVersion = $this->getNewestLogEntry($versionable); } $createdVersions[] = $this->versionBuilder->buildVersion($versionable, $this->username, $previousVersion, $this->context); } else { $createdVersions[] = $this->versionBuilder->createPendingVersion($versionable, $this->username, $changeset, $this->context); } return $createdVersions; }