use OCP\AppFramework\App;
use OCP\AppFramework\IAppContainer;
use OCP\Files\Config\IUserMountCache;
+use OCP\IGroup;
use OCP\IUser;
use Symfony\Component\EventDispatcher\GenericEvent;
$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());
+ }
+ );
}
/**
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();
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']);
}