diff --git a/lib/Listener/UserDeletedListener.php b/lib/Listener/UserDeletedListener.php index 17a589f4c5f..229616ecb74 100644 --- a/lib/Listener/UserDeletedListener.php +++ b/lib/Listener/UserDeletedListener.php @@ -24,15 +24,19 @@ namespace OCA\Talk\Listener; use OCA\Talk\Manager; +use OCA\Talk\Model\Attendee; +use OCA\Talk\Service\PollService; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\User\Events\UserDeletedEvent; class UserDeletedListener implements IEventListener { private Manager $manager; + private PollService $pollService; - public function __construct(Manager $manager) { + public function __construct(Manager $manager, PollService $pollService) { $this->manager = $manager; + $this->pollService = $pollService; } public function handle(Event $event): void { @@ -43,5 +47,7 @@ public function handle(Event $event): void { $user = $event->getUser(); $this->manager->removeUserFromAllRooms($user); + + $this->pollService->neutralizeDeletedUser(Attendee::ACTOR_USERS, $user->getUID()); } } diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php index 78cdb87fc80..10f6cdda186 100644 --- a/lib/Service/PollService.php +++ b/lib/Service/PollService.php @@ -333,4 +333,24 @@ public function updateDisplayNameForActor(string $actorType, string $actorId, st ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); $update->executeStatement(); } + + public function neutralizeDeletedUser(string $actorType, string $actorId): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_polls') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter('deleted_users')) + ->set('actor_id', $update->createNamedParameter('deleted_users')) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_poll_votes') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter('deleted_users')) + ->set('actor_id', $update->createNamedParameter('deleted_users')) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } } diff --git a/src/components/AvatarWrapper/AvatarWrapperSmall.vue b/src/components/AvatarWrapper/AvatarWrapperSmall.vue index 952450dd8e1..9c88832ad24 100644 --- a/src/components/AvatarWrapper/AvatarWrapperSmall.vue +++ b/src/components/AvatarWrapper/AvatarWrapperSmall.vue @@ -28,6 +28,11 @@
+
+ X +