@ -77,7 +77,7 @@ class Manager extends PublicEmitter implements IGroupManager {
/** @var \OC\Group\Group[] */
/** @var \OC\Group\Group[] */
private $cachedGroups = [];
private $cachedGroups = [];
/** @var \OC\Group\Group [] */
/** @var (string[]) [] */
private $cachedUserGroups = [];
private $cachedUserGroups = [];
/** @var \OC\SubAdmin */
/** @var \OC\SubAdmin */
@ -276,25 +276,18 @@ class Manager extends PublicEmitter implements IGroupManager {
* @return \OC\Group\Group[]
* @return \OC\Group\Group[]
*/
*/
public function getUserIdGroups($uid) {
public function getUserIdGroups($uid) {
if (isset($this->cachedUserGroups[$uid])) {
return $this->cachedUserGroups[$uid];
}
$groups = [];
$groups = [];
foreach ($this->backends as $backend) {
$groupIds = $backend->getUserGroups($uid);
foreach ($this->getUserIdGroupIds($uid) as $groupId) {
if (is_array($groupIds)) {
$aGroup = $this->get($groupId);
foreach ($groupIds as $groupId) {
if ($aGroup instanceof IGroup) {
$aGroup = $this->get($groupId);
$groups[$groupId] = $aGroup;
if ($aGroup instanceof IGroup) {
} else {
$groups[$groupId] = $aGroup;
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
} else {
$this->logger->debug('User "' . $uid . '" belongs to deleted group: "' . $groupId . '"', ['app' => 'core']);
}
}
}
}
}
}
$this->cachedUserGroups[$uid] = $groups;
return $this->cachedUserGroups[$uid] ;
return $groups;
}
}
/**
/**
@ -320,7 +313,7 @@ class Manager extends PublicEmitter implements IGroupManager {
* @return bool if in group
* @return bool if in group
*/
*/
public function isInGroup($userId, $group) {
public function isInGroup($userId, $group) {
return array_key_exists($group, $this->getUserIdGroups($userId)) ;
return array_search($group, $this->getUserIdGroupIds($userId)) !== false ;
}
}
/**
/**
@ -330,9 +323,25 @@ class Manager extends PublicEmitter implements IGroupManager {
* @return array with group ids
* @return array with group ids
*/
*/
public function getUserGroupIds(IUser $user) {
public function getUserGroupIds(IUser $user) {
return array_map(function ($value) {
return $this->getUserIdGroupIds($user->getUID());
return (string)$value;
}
}, array_keys($this->getUserGroups($user)));
/**
* @param string $uid the user id
* @return GroupInterface[]
*/
private function getUserIdGroupIds($uid) {
if (!isset($this->cachedUserGroups[$uid])) {
$groups = [];
foreach ($this->backends as $backend) {
if ($groupIds = $backend->getUserGroups($uid)) {
$groups = array_merge($groups, $groupIds);
}
}
$this->cachedUserGroups[$uid] = $groups;
}
return $this->cachedUserGroups[$uid];
}
}
/**
/**