/**
  * 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;
 }