<?php
/*
* Author: Dominik Piekarski <code@dompie.de>
* Created at: 2020/08/12 11:20
*/
declare(strict_types=1);
namespace App\Subscriber\User\Registration;
use App\Entity\Member;
use App\Event\User\MemberCreatedEvent;
use App\Service\ActivityFeedService;
use App\Service\Property\MemberPropertyService;
use App\Service\User\AccountService;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MemberCreatedSubscriber implements EventSubscriberInterface
{
protected ActivityFeedService $service;
protected MemberPropertyService $mps;
protected LoggerInterface $logger;
public function __construct(ActivityFeedService $service, MemberPropertyService $mps, LoggerInterface $logger)
{
$this->service = $service;
$this->mps = $mps;
$this->logger = $logger;
}
public static function getSubscribedEvents(): array
{
return [
MemberCreatedEvent::class => [
['onMemberCreated', 0],
],
];
}
public function onMemberCreated(MemberCreatedEvent $event)
{
$this->createUsernameChangeProperty($event->getMember());
}
private function createUsernameChangeProperty(Member $member): void
{
try {
$this->mps->createPropertyEntity($member, AccountService::PROPERTY_ACCOUNT_USERNAME_CHANGE_PERMITTED, 1);
return;
} catch (\Throwable $t) {
$this->logger->error($t->getMessage().PHP_EOL.$t->getTraceAsString());
}
$property = $this->mps->getPropertyForMember($member, AccountService::PROPERTY_ACCOUNT_USERNAME_CHANGE_PERMITTED);
try {
$this->mps->updatePropertyValue($property, 1);
} catch (\Throwable $t) {
$this->logger->error($t->getMessage().PHP_EOL.$t->getTraceAsString());
}
}
}