Skip to content

Commit 63fd038

Browse files
committed
Blacklisted
1 parent 97a55d6 commit 63fd038

File tree

7 files changed

+139
-16
lines changed

7 files changed

+139
-16
lines changed

src/Domain/Identity/Repository/UserBlacklistRepository.php

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/Domain/Identity/Model/UserBlacklist.php renamed to src/Domain/Subscription/Model/UserBlacklist.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpList\Core\Domain\Identity\Model;
5+
namespace PhpList\Core\Domain\Subscription\Model;
66

77
use DateTime;
88
use Doctrine\ORM\Mapping as ORM;
99
use PhpList\Core\Domain\Common\Model\Interfaces\DomainModel;
10-
use PhpList\Core\Domain\Identity\Repository\UserBlacklistRepository;
10+
use PhpList\Core\Domain\Subscription\Repository\UserBlacklistRepository;
1111

1212
#[ORM\Entity(repositoryClass: UserBlacklistRepository::class)]
1313
#[ORM\Table(name: 'phplist_user_blacklist')]
@@ -21,6 +21,9 @@ class UserBlacklist implements DomainModel
2121
#[ORM\Column(name: 'added', type: 'datetime', nullable: true)]
2222
private ?DateTime $added = null;
2323

24+
#[ORM\OneToOne(targetEntity: UserBlacklistData::class, mappedBy: 'email')]
25+
private ?UserBlacklistData $blacklistData = null;
26+
2427
public function getEmail(): string
2528
{
2629
return $this->email;
@@ -42,4 +45,9 @@ public function setAdded(?DateTime $added): self
4245
$this->added = $added;
4346
return $this;
4447
}
48+
49+
public function getBlacklistData(): ?UserBlacklistData
50+
{
51+
return $this->blacklistData;
52+
}
4553
}

src/Domain/Identity/Model/UserBlacklistData.php renamed to src/Domain/Subscription/Model/UserBlacklistData.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpList\Core\Domain\Identity\Model;
5+
namespace PhpList\Core\Domain\Subscription\Model;
66

77
use Doctrine\ORM\Mapping as ORM;
88
use PhpList\Core\Domain\Common\Model\Interfaces\DomainModel;
9-
use PhpList\Core\Domain\Identity\Repository\UserBlacklistDataRepository;
9+
use PhpList\Core\Domain\Subscription\Repository\UserBlacklistDataRepository;
1010

1111
#[ORM\Entity(repositoryClass: UserBlacklistDataRepository::class)]
1212
#[ORM\Table(name: 'phplist_user_blacklist_data')]

src/Domain/Subscription/Repository/SubscriberRepository.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,18 @@ public function findSubscriberWithSubscriptions(int $id): ?Subscriber
127127
->getQuery()
128128
->getOneOrNullResult();
129129
}
130+
131+
public function isEmailBlacklisted(string $email): bool
132+
{
133+
$qb = $this->getEntityManager()->createQueryBuilder();
134+
135+
$qb->select('u.email')
136+
->from(Subscriber::class, 'u')
137+
->where('u.email = :email')
138+
->andWhere('u.blacklisted = 1')
139+
->setParameter('email', $email)
140+
->setMaxResults(1);
141+
142+
return !($qb->getQuery()->getOneOrNullResult() === null);
143+
}
130144
}

src/Domain/Identity/Repository/UserBlacklistDataRepository.php renamed to src/Domain/Subscription/Repository/UserBlacklistDataRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace PhpList\Core\Domain\Identity\Repository;
5+
namespace PhpList\Core\Domain\Subscription\Repository;
66

77
use PhpList\Core\Domain\Common\Repository\AbstractRepository;
88

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Subscription\Repository;
6+
7+
use PhpList\Core\Domain\Common\Repository\AbstractRepository;
8+
use PhpList\Core\Domain\Subscription\Model\UserBlacklist;
9+
use PhpList\Core\Domain\Subscription\Model\UserBlacklistData;
10+
11+
class UserBlacklistRepository extends AbstractRepository
12+
{
13+
public function getBlacklistInfoByEmail(string $email): ?array
14+
{
15+
$qb = $this->getEntityManager()->createQueryBuilder();
16+
17+
$qb->select('ub.email, ub.added, ubd.data AS reason')
18+
->from(UserBlacklist::class, 'ub')
19+
->innerJoin(UserBlacklistData::class, 'ubd', 'WITH', 'ub.email = ubd.email')
20+
->where('ub.email = :email')
21+
->setParameter('email', $email)
22+
->setMaxResults(1);
23+
24+
return $qb->getQuery()->getOneOrNullResult();
25+
}
26+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Subscription\Service\Manager;
6+
7+
use PhpList\Core\Domain\Subscription\Model\Subscriber;
8+
use PhpList\Core\Domain\Subscription\Model\UserBlacklist;
9+
use PhpList\Core\Domain\Subscription\Model\UserBlacklistData;
10+
use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository;
11+
use PhpList\Core\Domain\Subscription\Repository\UserBlacklistRepository;
12+
13+
class SubscriberBlacklistManager
14+
{
15+
public function __construct(
16+
private readonly SubscriberRepository $subscriberRepository,
17+
private readonly UserBlacklistRepository $userBlacklistRepository,
18+
) {
19+
}
20+
21+
public function isEmailBlacklisted(string $email): bool
22+
{
23+
return $this->subscriberRepository->isEmailBlacklisted($email);
24+
}
25+
26+
public function getBlacklistInfo(string $email): ?Subscriber
27+
{
28+
return $this->userBlacklistRepository->findBlacklistedByEmail($email);
29+
}
30+
// 095-38-25-55
31+
public function addEmailToBlacklist(string $email, ?string $reasonData = null): void
32+
{
33+
$existing = $this->getBlacklistInfo($email);
34+
if ($existing) {
35+
return;
36+
}
37+
38+
$blacklistEntry = new UserBlacklist();
39+
$blacklistEntry->setEmail($email);
40+
$blacklistEntry->setAdded(new \DateTime());
41+
42+
$entityManager->persist($blacklistEntry);
43+
44+
if ($reasonData !== null) {
45+
$blacklistData = new UserBlacklistData();
46+
$blacklistData->setEmail($email);
47+
$blacklistData->setName('reason'); // or a relevant name
48+
$blacklistData->setData($reasonData);
49+
$entityManager->persist($blacklistData);
50+
}
51+
52+
$entityManager->flush();
53+
}
54+
55+
public function removeEmailFromBlacklist(string $email)
56+
{
57+
$entityManager = $this->entityManager;
58+
59+
$blacklistEntry = $entityManager->getRepository(UserBlacklist::class)->find($email);
60+
if ($blacklistEntry) {
61+
$entityManager->remove($blacklistEntry);
62+
}
63+
64+
$blacklistData = $entityManager->getRepository(UserBlacklistData::class)->find($email);
65+
if ($blacklistData) {
66+
$entityManager->remove($blacklistData);
67+
}
68+
69+
// Also, update the user record
70+
$userRepo = $entityManager->getRepository(Subscriber::class);
71+
$user = $userRepo->findOneBy(['email' => $email]);
72+
if ($user) {
73+
$user->setBlacklisted(false);
74+
}
75+
76+
$entityManager->flush();
77+
}
78+
79+
public function getBlacklistReason(string $email): ?string
80+
{
81+
$repository = $this->entityManager->getRepository(UserBlacklistData::class);
82+
$data = $repository->findOneBy(['email' => $email]);
83+
return $data ? $data->getData() : null;
84+
}
85+
86+
}

0 commit comments

Comments
 (0)