extend with group deletion handling

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
Arthur Schiwon 2019-11-13 12:28:23 +01:00
parent be85d00a38
commit 4baab51f4c
No known key found for this signature in database
GPG Key ID: 7424F1874854DF23
2 changed files with 25 additions and 6 deletions

View File

@ -64,6 +64,7 @@ use OCA\Files_External\Service\BackendService;
use OCP\AppFramework\App;
use OCP\AppFramework\IAppContainer;
use OCP\Files\Config\IUserMountCache;
use OCP\IGroup;
use OCP\IUser;
use Symfony\Component\EventDispatcher\GenericEvent;
@ -111,6 +112,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());
}
);
}
/**

View File

@ -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']);
}