/** * @param Group $group * @param int $offset */ private function syncGroupUsers(Group $group, $offset = 0) { $this->logger->info(' - Processing users for Group `' . $group->getName() . '` ' . $offset . ' to ' . ($offset + self::BATCH_SIZE) . '...'); $ldapUsers = $this->ldap->findGroupUsers($group->getReference(), $offset, self::BATCH_SIZE); $grouphubUsers = $this->api->findGroupUsers($group, $offset, self::BATCH_SIZE); // Nothing to sync, or done syncing if (count($ldapUsers) === 0 && count($grouphubUsers) === 0) { $this->logger->info(' - Done syncing Group users!'); return; } $index = $grouphubUsers->synchronize($ldapUsers, true); $this->logger->info(' -- Going to add ' . count($grouphubUsers->getAddedElements()) . ' users for Group to Grouphub...'); foreach ($grouphubUsers->getAddedElements() as $element) { /** @var User $element */ $user = $this->api->findUserByReference($element->getReference()); if (!$user) { $this->logger->warning(' -- Skipping user with ref ' . $element->getReference() . ' because it cannot be found in the API?!?'); continue; } try { $this->api->addGroupUser($group->getId(), $user->getId()); } catch (\Exception $e) { $this->logger->warning(' -- Failed adding user with ref ' . $element->getReference() . ' message: ' . $e->getMessage()); } } $this->logger->info(' -- Going to remove ' . count($grouphubUsers->getRemovedElements()) . ' users for Group from Grouphub...'); foreach ($grouphubUsers->getRemovedElements() as $element) { /** @var User $element */ $this->api->removeGroupUser($group->getId(), $element->getId()); } $this->syncGroupUsers($group, $offset + $index + 1); }
/** * @param int $groupId * @param int $userId * @param string $message */ public function requestMembership($groupId, $userId, $message) { $this->client->addGroupUser($groupId, $userId, Membership::ROLE_PROSPECT, $message); }