src/Organization/EventSubscriber/CopyMemberSettingsOnJoinSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\Organization\EventSubscriber;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Harmonizely\Model\Member;
  6. use Harmonizely\Organization\Copier\UserSettingsCopier;
  7. use Harmonizely\Organization\OrganizationEvents;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\EventDispatcher\GenericEvent;
  10. /**
  11.  * When an existing user accepts an organization invitation that requested
  12.  * cloning settings from another user, perform the copy at accept time and
  13.  * replace the invitee's own settings. The source user is stored on the Member
  14.  * at invite time (see ExistingUserMemberInviter). New users are handled at
  15.  * invite time instead, so they never reach this path (CY1SMDV1-578).
  16.  */
  17. final class CopyMemberSettingsOnJoinSubscriber implements EventSubscriberInterface
  18. {
  19.     private UserSettingsCopier $userSettingsCopier;
  20.     private EntityManagerInterface $entityManager;
  21.     public function __construct(
  22.         UserSettingsCopier $userSettingsCopier,
  23.         EntityManagerInterface $entityManager
  24.     ) {
  25.         $this->userSettingsCopier $userSettingsCopier;
  26.         $this->entityManager $entityManager;
  27.     }
  28.     /**
  29.      * @return string[]
  30.      */
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [
  34.             OrganizationEvents::MEMBER_POST_JOIN => 'memberPostJoin',
  35.         ];
  36.     }
  37.     public function memberPostJoin(GenericEvent $event): void
  38.     {
  39.         /** @var Member $member */
  40.         $member $event->getSubject();
  41.         $fromUser $member->getCopyFromUser();
  42.         if (null === $fromUser) {
  43.             return;
  44.         }
  45.         $this->userSettingsCopier->copy($fromUser$member->getUser(), falsetrue);
  46.         $member->setCopyFromUser(null);
  47.         $this->entityManager->flush();
  48.     }
  49. }