Files
piratepoet/lib/Form/FormsRepository.php
Brezo Cordero d9186e4230 Prevent deleting a list if attached to a form
[MAILPOET-3661]
2021-08-16 09:42:08 +02:00

106 lines
2.5 KiB
PHP

<?php
namespace MailPoet\Form;
use MailPoet\Doctrine\Repository;
use MailPoet\Entities\FormEntity;
/**
* @extends Repository<FormEntity>
*/
class FormsRepository extends Repository {
protected function getEntityClassName() {
return FormEntity::class;
}
/**
* @return FormEntity[]
*/
public function findAllNotDeleted(): array {
return $this->entityManager
->createQueryBuilder()
->select('f')
->from(FormEntity::class, 'f')
->where('f.deletedAt IS NULL')
->orderBy('f.updatedAt', 'desc')
->getQuery()
->getResult();
}
public function getNamesOfFormsForSegments(): array {
$allNonDeletedForms = $this->findAllNotDeleted();
$nameMap = [];
foreach ($allNonDeletedForms as $form) {
$blockSegmentsIds = $form->getSettingsSegmentIds();
foreach ($blockSegmentsIds as $blockSegmentId) {
$nameMap[(string)$blockSegmentId][] = $form->getName();
}
}
return $nameMap;
}
public function count(): int {
return (int)$this->doctrineRepository
->createQueryBuilder('f')
->select('count(f.id)')
->getQuery()
->getSingleScalarResult();
}
public function delete(FormEntity $form) {
$this->entityManager->remove($form);
$this->flush();
}
public function trash(FormEntity $form) {
$this->bulkTrash([$form->getId()]);
$this->entityManager->refresh($form);
}
public function restore(FormEntity $form) {
$this->bulkRestore([$form->getId()]);
$this->entityManager->refresh($form);
}
public function bulkTrash(array $ids): int {
if (empty($ids)) {
return 0;
}
return $this->entityManager->createQueryBuilder()
->update(FormEntity::class, 'f')
->set('f.deletedAt', 'CURRENT_TIMESTAMP()')
->where('f.id IN (:ids)')
->setParameter('ids', $ids)
->getQuery()->execute();
}
public function bulkRestore(array $ids): int {
if (empty($ids)) {
return 0;
}
return $this->entityManager->createQueryBuilder()
->update(FormEntity::class, 'f')
->set('f.deletedAt', ':deletedAt')
->where('f.id IN (:ids)')
->setParameter('deletedAt', null)
->setParameter('ids', $ids)
->getQuery()->execute();
}
public function bulkDelete(array $ids): int {
if (empty($ids)) {
return 0;
}
return $this->entityManager->createQueryBuilder()
->delete(FormEntity::class, 'f')
->where('f.id IN (:ids)')
->setParameter('ids', $ids)
->getQuery()->execute();
}
}