providerLoader = $providerLoader; $this->providerRegistry = $providerRegistry; } private function getProvider(string $providerId, IUser $user): IProvider { $providers = $this->providerLoader->getProviders($user); if (!isset($providers[$providerId])) { throw new InvalidProviderException($providerId); } return $providers[$providerId]; } /** * Try to enable the provider with the given id for the given user * * @param IUser $user * * @return bool whether the provider supports this operation */ public function tryEnableProviderFor(string $providerId, IUser $user): bool { $provider = $this->getProvider($providerId, $user); if ($provider instanceof IActivatableByAdmin) { $provider->enableFor($user); $this->providerRegistry->enableProviderFor($provider, $user); return true; } else { return false; } } /** * Try to disable the provider with the given id for the given user * * @param IUser $user * * @return bool whether the provider supports this operation */ public function tryDisableProviderFor(string $providerId, IUser $user): bool { $provider = $this->getProvider($providerId, $user); if ($provider instanceof IDeactivatableByAdmin) { $provider->disableFor($user); $this->providerRegistry->disableProviderFor($provider, $user); return true; } else { return false; } } }