From 044d5a8d01d7a393ebacf22c66bdd0cef67344eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= <danxuliu@gmail.com>
Date: Tue, 13 Mar 2018 07:29:12 +0100
Subject: [PATCH] Inject public IGroupManager instead of private GroupManager
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The public "IGroupManager" service returned by the dependency injection
system is automatically initialized with an "OC\Group\Database" backend.
However, no backend is automatically set in private "GroupManager"
instances. Therefore, a private "GroupManager" instance does not work as
expected when initialized through the dependency injection system.

Due to that this commit reverts a previous change in which the public
"IGroupManager" was replaced by a private "GroupManager" instance. That
change was needed when strict types were set, as "getSubAdmin()" is not
part of "IGroupManager" API, so the type had to be changed to
"GroupManager". Until a better solution is found strict types are
disabled again to be able to inject "IGroupManager" and also use
"getSubAdmin()".

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
---
 settings/Controller/ChangePasswordController.php | 10 ++++++----
 settings/Controller/UsersController.php          | 10 ++++++----
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/settings/Controller/ChangePasswordController.php b/settings/Controller/ChangePasswordController.php
index 208178d567d..7dbdbac0239 100644
--- a/settings/Controller/ChangePasswordController.php
+++ b/settings/Controller/ChangePasswordController.php
@@ -1,5 +1,7 @@
 <?php
-declare(strict_types=1);
+// FIXME: disabled for now to be able to inject IGroupManager and also use
+// getSubAdmin()
+//declare(strict_types=1);
 /**
  *
  *
@@ -27,12 +29,12 @@ declare(strict_types=1);
  */
 namespace OC\Settings\Controller;
 
-use OC\Group\Manager as GroupManager;
 use OC\HintException;
 use OC\User\Session;
 use OCP\App\IAppManager;
 use OCP\AppFramework\Controller;
 use OCP\AppFramework\Http\JSONResponse;
+use OCP\IGroupManager;
 use OCP\IL10N;
 use OCP\IRequest;
 use OCP\IUser;
@@ -50,7 +52,7 @@ class ChangePasswordController extends Controller {
 	/** @var IL10N */
 	private $l;
 
-	/** @var GroupManager */
+	/** @var IGroupManager */
 	private $groupManager;
 
 	/** @var Session */
@@ -64,7 +66,7 @@ class ChangePasswordController extends Controller {
 								string $userId,
 								IUserManager $userManager,
 								IUserSession $userSession,
-								GroupManager $groupManager,
+								IGroupManager $groupManager,
 								IAppManager $appManager,
 								IL10N $l) {
 		parent::__construct($appName, $request);
diff --git a/settings/Controller/UsersController.php b/settings/Controller/UsersController.php
index df89c2ec1a7..956403f143c 100644
--- a/settings/Controller/UsersController.php
+++ b/settings/Controller/UsersController.php
@@ -1,5 +1,7 @@
 <?php
-declare(strict_types=1);
+// FIXME: disabled for now to be able to inject IGroupManager and also use
+// getSubAdmin()
+//declare(strict_types=1);
 /**
  * @copyright Copyright (c) 2016, ownCloud, Inc.
  *
@@ -40,7 +42,6 @@ namespace OC\Settings\Controller;
 use OC\Accounts\AccountManager;
 use OC\AppFramework\Http;
 use OC\ForbiddenException;
-use OC\Group\Manager as GroupManager;
 use OC\HintException;
 use OC\Settings\Mailer\NewUserMailHelper;
 use OC\Security\IdentityProof\Manager;
@@ -52,6 +53,7 @@ use OCP\Files\Config\IUserMountCache;
 use OCP\Encryption\IEncryptionModule;
 use OCP\Encryption\IManager;
 use OCP\IConfig;
+use OCP\IGroupManager;
 use OCP\IL10N;
 use OCP\ILogger;
 use OCP\IRequest;
@@ -77,7 +79,7 @@ class UsersController extends Controller {
 	private $isAdmin;
 	/** @var IUserManager */
 	private $userManager;
-	/** @var GroupManager */
+	/** @var IGroupManager */
 	private $groupManager;
 	/** @var IConfig */
 	private $config;
@@ -113,7 +115,7 @@ class UsersController extends Controller {
 	public function __construct(string $appName,
 								IRequest $request,
 								IUserManager $userManager,
-								GroupManager $groupManager,
+								IGroupManager $groupManager,
 								IUserSession $userSession,
 								IConfig $config,
 								bool $isAdmin,
-- 
GitLab