extend with group deletion handling
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
0172fb7aad
commit
54d9df2681
2 changed files with 25 additions and 6 deletions
|
@ -63,6 +63,7 @@ use OCA\Files_External\Lib\Backend\DAV;
|
|||
use OCA\Files_External\Lib\Backend\FTP;
|
||||
use OCA\Files_External\Lib\Backend\Local;
|
||||
use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\IGroup;
|
||||
use OCP\IUser;
|
||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||
|
||||
|
@ -110,6 +111,16 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide
|
|||
$config->modifyMountsOnUserDelete($user->getUID());
|
||||
}
|
||||
);
|
||||
$dispatcher->addListener(
|
||||
IGroup::class . '::postDelete',
|
||||
function (GenericEvent $event) {
|
||||
/** @var IGroup $group */
|
||||
$group = $event->getSubject();
|
||||
/** @var DBConfigService $config */
|
||||
$config = $this->getContainer()->query(DBConfigService::class);
|
||||
$config->modifyMountsOnGroupDelete($group->getGID());
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -114,15 +114,23 @@ class DBConfigService {
|
|||
return $this->getMountsFromQuery($query);
|
||||
}
|
||||
|
||||
public function modifyMountsOnUserDelete(string $uid) {
|
||||
public function modifyMountsOnUserDelete(string $uid): void {
|
||||
$this->modifyMountsOnDelete($uid, self::APPLICABLE_TYPE_USER);
|
||||
}
|
||||
|
||||
public function modifyMountsOnGroupDelete(string $gid): void {
|
||||
$this->modifyMountsOnDelete($gid, self::APPLICABLE_TYPE_GROUP);
|
||||
}
|
||||
|
||||
protected function modifyMountsOnDelete(string $applicableId, int $applicableType): void {
|
||||
$builder = $this->connection->getQueryBuilder();
|
||||
$query = $builder->select(['a.mount_id', $builder->func()->count('a.mount_id', 'count')])
|
||||
->from('external_applicable', 'a')
|
||||
->rightJoin('a', 'external_applicable', 'b', $builder->expr()->eq('a.mount_id', 'b.mount_id'))
|
||||
->where($builder->expr()->andX( // mounts for user
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_USER, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->eq('a.value', $builder->createNamedParameter($uid))
|
||||
)
|
||||
->where($builder->expr()->andX(
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter($applicableType, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->eq('a.value', $builder->createNamedParameter($applicableId))
|
||||
)
|
||||
)
|
||||
->groupBy(['a.mount_id']);
|
||||
$stmt = $query->execute();
|
||||
|
@ -131,7 +139,7 @@ class DBConfigService {
|
|||
|
||||
foreach ($result as $row) {
|
||||
if((int)$row['count'] > 1) {
|
||||
$this->removeApplicable($row['mount_id'], self::APPLICABLE_TYPE_USER, $uid);
|
||||
$this->removeApplicable($row['mount_id'], $applicableType, $applicableId);
|
||||
} else {
|
||||
$this->removeMount($row['mount_id']);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue