Nenhuma Descrição

SegmentSaveController.php 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace MailPoet\Segments\DynamicSegments;
  3. if (!defined('ABSPATH')) exit;
  4. use InvalidArgumentException;
  5. use MailPoet\Entities\SegmentEntity;
  6. use MailPoet\Segments\SegmentsRepository;
  7. class SegmentSaveController {
  8. /** @var SegmentsRepository */
  9. private $segmentsRepository;
  10. /** @var FilterDataMapper */
  11. private $filterDataMapper;
  12. public function __construct(
  13. SegmentsRepository $segmentsRepository,
  14. FilterDataMapper $filterDataMapper
  15. ) {
  16. $this->segmentsRepository = $segmentsRepository;
  17. $this->filterDataMapper = $filterDataMapper;
  18. }
  19. public function save(array $data = []): SegmentEntity {
  20. $id = isset($data['id']) ? (int)$data['id'] : null;
  21. $name = $data['name'] ?? '';
  22. $description = $data['description'] ?? '';
  23. $filtersData = $this->filterDataMapper->map($data);
  24. $this->checkSegmentUniqueName($name, $id);
  25. return $this->segmentsRepository->createOrUpdate($name, $description, SegmentEntity::TYPE_DYNAMIC, $filtersData, $id);
  26. }
  27. private function checkSegmentUniqueName(string $name, ?int $id): void {
  28. if (!$this->segmentsRepository->isNameUnique($name, $id)) {
  29. throw new InvalidArgumentException("Segment with name: '{$name}' already exists.");
  30. }
  31. }
  32. }