mirror of https://github.com/sualko/cloud_bbb
parent
a81d97a6e5
commit
dd99275f16
|
@ -12,12 +12,14 @@ use \OCA\BigBlueButton\Event\RoomCreatedEvent;
|
|||
use \OCA\BigBlueButton\Event\RoomDeletedEvent;
|
||||
use \OCA\BigBlueButton\Event\RoomShareCreatedEvent;
|
||||
use \OCA\BigBlueButton\Event\RoomShareDeletedEvent;
|
||||
use \OCA\BigBlueButton\Listener\UserDeletedListener;
|
||||
use \OCA\BigBlueButton\Middleware\HookMiddleware;
|
||||
use \OCA\BigBlueButton\Middleware\JoinMiddleware;
|
||||
use \OCP\AppFramework\App;
|
||||
use \OCP\EventDispatcher\IEventDispatcher;
|
||||
use \OCP\IConfig;
|
||||
use \OCP\Settings\IManager as ISettingsManager;
|
||||
use \OCP\User\Events\UserDeletedEvent;
|
||||
|
||||
if ((@include_once __DIR__ . '/../../vendor/autoload.php') === false) {
|
||||
throw new \Exception('Cannot include autoload. Did you run install dependencies using composer?');
|
||||
|
@ -31,17 +33,9 @@ class Application extends App {
|
|||
|
||||
$container = $this->getContainer();
|
||||
|
||||
/* @var IEventDispatcher $eventDispatcher */
|
||||
/* @var IEventDispatcher $dispatcher */
|
||||
$dispatcher = $container->query(IEventDispatcher::class);
|
||||
$dispatcher->addServiceListener(RoomCreatedEvent::class, RoomListener::class);
|
||||
$dispatcher->addServiceListener(RoomDeletedEvent::class, RoomListener::class);
|
||||
|
||||
$dispatcher->addServiceListener(RoomShareCreatedEvent::class, RoomShareListener::class);
|
||||
$dispatcher->addServiceListener(RoomShareDeletedEvent::class, RoomShareListener::class);
|
||||
|
||||
$dispatcher->addServiceListener(MeetingStartedEvent::class, MeetingListener::class);
|
||||
$dispatcher->addServiceListener(MeetingEndedEvent::class, MeetingListener::class);
|
||||
$dispatcher->addServiceListener(RecordingReadyEvent::class, MeetingListener::class);
|
||||
$this->registerServiceListener($dispatcher);
|
||||
|
||||
$container->registerMiddleWare(JoinMiddleware::class);
|
||||
$container->registerMiddleWare(HookMiddleware::class);
|
||||
|
@ -74,4 +68,18 @@ class Application extends App {
|
|||
];
|
||||
});
|
||||
}
|
||||
|
||||
private function registerServiceListener(IEventDispatcher $dispatcher) {
|
||||
$dispatcher->addServiceListener(RoomCreatedEvent::class, RoomListener::class);
|
||||
$dispatcher->addServiceListener(RoomDeletedEvent::class, RoomListener::class);
|
||||
|
||||
$dispatcher->addServiceListener(RoomShareCreatedEvent::class, RoomShareListener::class);
|
||||
$dispatcher->addServiceListener(RoomShareDeletedEvent::class, RoomShareListener::class);
|
||||
|
||||
$dispatcher->addServiceListener(MeetingStartedEvent::class, MeetingListener::class);
|
||||
$dispatcher->addServiceListener(MeetingEndedEvent::class, MeetingListener::class);
|
||||
$dispatcher->addServiceListener(RecordingReadyEvent::class, MeetingListener::class);
|
||||
|
||||
$dispatcher->addServiceListener(UserDeletedEvent::class, UserDeletedListener::class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,6 +44,18 @@ class RoomShareMapper extends QBMapper {
|
|||
return $this->findEntity($qb);
|
||||
}
|
||||
|
||||
public function findByUserId(string $userId): array {
|
||||
/* @var $qb IQueryBuilder */
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('bbb_room_shares')
|
||||
->where($qb->expr()->eq('share_with', $qb->createNamedParameter($userId)))
|
||||
->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(RoomShare::SHARE_TYPE_USER, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
/** @var array<RoomShare> */
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<RoomShare>
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
|
||||
namespace OCA\BigBlueButton\Listener;
|
||||
|
||||
use OCA\BigBlueButton\Service\RoomService;
|
||||
use OCA\BigBlueButton\Service\RoomShareService;
|
||||
use OCP\Activity\IManager as IActivityManager;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\User\Events\UserDeletedEvent;
|
||||
|
||||
class UserDeletedListener implements IEventListener {
|
||||
|
||||
/** @var IActivityManager */
|
||||
private $activityManager;
|
||||
|
||||
/** @var RoomService */
|
||||
private $roomService;
|
||||
|
||||
/** @var RoomShareService */
|
||||
private $shareService;
|
||||
|
||||
public function __construct(
|
||||
IActivityManager $activityManager,
|
||||
RoomService $roomService,
|
||||
RoomShareService $shareService) {
|
||||
$this->activityManager = $activityManager;
|
||||
$this->roomService = $roomService;
|
||||
$this->shareService = $shareService;
|
||||
}
|
||||
|
||||
public function handle(Event $event): void {
|
||||
if (!($event instanceof UserDeletedEvent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$userId = $event->getUser()->getUID();
|
||||
$rooms = $this->roomService->findAll($userId, [], []);
|
||||
|
||||
$this->deleteSharesByUserId($userId);
|
||||
|
||||
foreach ($rooms as $room) {
|
||||
$this->deleteSharesByRoomId($room->getId());
|
||||
|
||||
$this->roomService->delete($room->getId());
|
||||
}
|
||||
}
|
||||
|
||||
private function deleteSharesByRoomId(string $roomId) {
|
||||
$shares = $this->shareService->findAll($roomId);
|
||||
|
||||
foreach ($shares as $share) {
|
||||
$this->shareService->delete($share->getId());
|
||||
}
|
||||
}
|
||||
|
||||
private function deleteSharesByUserId(string $userId) {
|
||||
$shares = $this->shareService->findByUserId($userId);
|
||||
|
||||
foreach ($shares as $share) {
|
||||
$this->shareService->delete($share->getId());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -32,6 +32,10 @@ class RoomShareService {
|
|||
return $this->mapper->findAll($roomId);
|
||||
}
|
||||
|
||||
public function findByUserId(string $userId): array {
|
||||
return $this->mapper->findByUserId($userId);
|
||||
}
|
||||
|
||||
private function handleException(Exception $e): void {
|
||||
if ($e instanceof DoesNotExistException ||
|
||||
$e instanceof MultipleObjectsReturnedException) {
|
||||
|
|
Loading…
Reference in New Issue