/** * @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 Group $group * * @return string */ private function getAdminGroupReference(Group $group) { $pos = strpos($group->getReference(), ','); return substr($group->getReference(), 0, $pos) . '_admins,' . $this->adminGroupsDn; }
/** * @inheritdoc * * @param Group $other */ public function compareTo($other) { $ref1 = strtoupper($this->getReference()); $ref2 = strtoupper($other->getReference()); $c = new \Collator('en'); return $c->compare($ref1, $ref2); }
/** * @param Group $group * * @return array */ public function normalizeGroup(Group $group) { return ['reference' => $group->getReference(), 'name' => $group->getName(), 'description' => $group->getDescription(), 'type' => $group->getType(), 'owner' => $group->getOwnerId(), 'parent' => $group->getParentId()]; }