Skip to content

Commit

Permalink
fix empty draft data behaviour
Browse files Browse the repository at this point in the history
  • Loading branch information
solverat committed Aug 9, 2024
1 parent 949231f commit 22415ae
Showing 1 changed file with 66 additions and 37 deletions.
103 changes: 66 additions & 37 deletions src/Manager/ElementMetaDataManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -152,54 +152,38 @@ public function saveElementData(

// remove empty meta data
if ($sanitizedData === null) {
if ($elementMetaData->getId() > 0) {
$this->entityManager->remove($elementMetaData);
$this->entityManager->flush();
}

return;
}

$elementMetaData->setData($sanitizedData);
if ($releaseType === ElementMetaDataInterface::RELEASE_TYPE_DRAFT) {

$this->entityManager->persist($elementMetaData);
$this->entityManager->flush();
}

private function determinateElementMetaEntity(
string $elementType,
int $elementId,
string $integratorName,
string $releaseType = ElementMetaDataInterface::RELEASE_TYPE_PUBLIC
): ?ElementMetaDataInterface {
// if draft, we still persist an empty element
// to determinate reset when publish state is incoming

$hasDraft = $this->elementMetaDataExistsWithReleaseType($elementType, $elementId, ElementMetaDataInterface::RELEASE_TYPE_DRAFT);
if (
$elementMetaData->getId() > 0 ||
$this->elementMetaDataExistsWithReleaseType($elementType, $elementId, ElementMetaDataInterface::RELEASE_TYPE_PUBLIC, $integratorName)
) {
$this->persistElementMetaData($elementMetaData, []);
}

if ($releaseType === ElementMetaDataInterface::RELEASE_TYPE_PUBLIC && $hasDraft === true) {
return;
}

// delete draft
$this->deleteElementData($elementType, $elementId, ElementMetaDataInterface::RELEASE_TYPE_DRAFT);
if ($elementMetaData->getId() > 0) {
$this->entityManager->remove($elementMetaData);
$this->entityManager->flush();
}

return $this->elementMetaDataRepository->findByIntegrator($elementType, $elementId, $integratorName, $releaseType);
return;
}

return $this->elementMetaDataRepository->findByIntegrator($elementType, $elementId, $integratorName, $releaseType);
$this->persistElementMetaData($elementMetaData, $sanitizedData);
}

private function elementMetaDataExistsWithReleaseType(string $elementType, int $elementId, string $releaseType): bool
private function persistElementMetaData(ElementMetaDataInterface $elementMetaData, array $data): void
{
$qb = $this->elementMetaDataRepository->getQueryBuilder();

return $qb
->select('COUNT(e.id)')
->andWhere('e.elementType = :elementType')
->andWhere('e.elementId = :elementId')
->andWhere('e.releaseType = :releaseType')
->setParameter('elementType', $elementType)
->setParameter('elementId', $elementId)
->setParameter('releaseType', $releaseType)
->getQuery()
->getSingleScalarResult() > 0;
$elementMetaData->setData($data);
$this->entityManager->persist($elementMetaData);
$this->entityManager->flush();
}

public function generatePreviewDataForElement(string $elementType, int $elementId, string $integratorName, ?string $template, array $data): array
Expand Down Expand Up @@ -323,4 +307,49 @@ protected function getDocumentLegacyData(int $documentId): ?array
'hasTitleDescriptionIntegrator' => $hasTitleDescriptionIntegrator !== false
];
}

private function determinateElementMetaEntity(
string $elementType,
int $elementId,
string $integratorName,
string $releaseType = ElementMetaDataInterface::RELEASE_TYPE_PUBLIC
): ?ElementMetaDataInterface {

$hasDraft = $this->elementMetaDataExistsWithReleaseType($elementType, $elementId, ElementMetaDataInterface::RELEASE_TYPE_DRAFT);

if ($releaseType === ElementMetaDataInterface::RELEASE_TYPE_PUBLIC && $hasDraft === true) {

// delete draft
$this->deleteElementData($elementType, $elementId, ElementMetaDataInterface::RELEASE_TYPE_DRAFT);

return $this->elementMetaDataRepository->findByIntegrator($elementType, $elementId, $integratorName, $releaseType);
}

return $this->elementMetaDataRepository->findByIntegrator($elementType, $elementId, $integratorName, $releaseType);
}

private function elementMetaDataExistsWithReleaseType(string $elementType, int $elementId, string $releaseType, ?string $integratorName = null): bool
{
$qb = $this->elementMetaDataRepository->getQueryBuilder();

$qb
->select('COUNT(e.id)')
->andWhere('e.elementType = :elementType')
->andWhere('e.elementId = :elementId')
->andWhere('e.releaseType = :releaseType')
->setParameter('elementType', $elementType)
->setParameter('elementId', $elementId)
->setParameter('releaseType', $releaseType);

if ($integratorName !== null) {
$qb
->andWhere('e.integrator = :integratorName')
->setParameter('integratorName', $integratorName);
}

return $qb
->getQuery()
->getSingleScalarResult() > 0;
}

}

0 comments on commit 22415ae

Please sign in to comment.