示例#1
0
 /**
  * @param Group  $group
  * @param string $filename
  */
 public function exportGroupMembers(Group $group, $filename)
 {
     $handle = fopen($filename, 'w+');
     fputcsv($handle, ['Role', 'Id', 'Login name', 'First name', 'Last name', 'Email'], ';');
     $memberships = $this->membershipManager->findGroupMemberships($group->getId(), null, 0, 9999);
     foreach ($memberships as $membership) {
         $user = $membership->getUser();
         fputcsv($handle, [$membership->getRole(), $user->getId(), $user->getLoginName(), $user->getFirstName(), $user->getLastName(), $user->getEmail()], ';');
     }
     fclose($handle);
 }
示例#2
0
 /**
  * @inheritdoc
  *
  * @param Group $subject
  */
 protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
 {
     /** @var User $user */
     $user = $token->getUser();
     if (!$user instanceof User) {
         return false;
     }
     // A user is allowed to edit his own membership of grouphub groups
     if ($subject->getType() === Group::TYPE_GROUPHUB) {
         return true;
     }
     return false;
 }
示例#3
0
 /**
  * @inheritdoc
  *
  * @param Group $subject
  */
 protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
 {
     /** @var User $user */
     $user = $token->getUser();
     if (!$user instanceof User) {
         return false;
     }
     if ($subject->getOwnerId() == $user->getId()) {
         return true;
     }
     $membership = $this->membershipManager->findUserMembershipOfGroup($subject->getId(), $user->getId());
     if (!$membership) {
         return false;
     }
     if ($attribute === 'EDIT' && $membership->getRole() === Membership::ROLE_ADMIN) {
         return true;
     }
     return false;
 }
示例#4
0
 /**
  * @param Group $group
  * @param int   $offset
  */
 private function syncGrouphubGroupAdmins(Group $group, $offset = 0)
 {
     if (!$this->syncAdmins) {
         return;
     }
     $this->logger->info(' - Processing admins for GrouphubGroup `' . $group->getName() . '` ' . $offset . ' to ' . ($offset + self::BATCH_SIZE) . '...');
     $this->ldap->addAdminGroupIfNotExists($group);
     $grouphubAdmins = $this->api->findGroupUsers($group, $offset, self::BATCH_SIZE, Membership::ROLE_ADMIN);
     $ldapAdmins = $this->ldap->findGroupAdmins($group, $offset, self::BATCH_SIZE);
     if (count($grouphubAdmins) === 0 && count($ldapAdmins) === 0) {
         $this->logger->info(' - Done syncing GroupHubGroup admins!');
         return;
     }
     $index = $ldapAdmins->synchronize($grouphubAdmins, true);
     $this->logger->info(' -- Going to add ' . count($ldapAdmins->getAddedElements()) . ' admins for GrouphubGroup to LDAP...');
     foreach ($ldapAdmins->getAddedElements() as $element) {
         /** @var User $element */
         $this->ldap->addGroupAdmin($group, $element->getReference());
     }
     $this->logger->info(' -- Going to remove ' . count($ldapAdmins->getRemovedElements()) . ' admins for GrouphubGroup from LDAP...');
     foreach ($ldapAdmins->getRemovedElements() as $element) {
         /** @var User $element */
         $this->ldap->removeGroupAdmin($group, $element->getReference());
     }
     $this->syncGrouphubGroupAdmins($group, $offset + $index + 1);
 }
示例#5
0
 /**
  * @param Group  $group
  * @param int    $offset
  * @param int    $limit
  * @param string $role
  *
  * @return SynchronizableSequence
  */
 public function findGroupUsers(Group $group, $offset = 0, $limit = 100, $role = null)
 {
     // New group, so no Users yet
     if ($group->getId() === null) {
         return new SynchronizableSequence([]);
     }
     $data = $this->guzzle->get('groups/' . $group->getId() . '/users', ['query' => ['offset' => $offset, 'limit' => $limit, 'sort' => 'reference', 'role' => $role]]);
     $data = $this->decode($data->getBody());
     return $this->normalizer->denormalizeGroupUsers($data);
 }
示例#6
0
 /**
  * @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);
 }
示例#7
0
 /**
  * @param Group $group
  *
  * @return string
  */
 private function getGroupCN(Group $group)
 {
     $cn = str_replace(['"', '/', '\\', '[', ']', ':', ';', '|', '=', ',', '+', '*', '?', '<', '>'], '', $group->getName());
     $maxLength = 64 - 1 - strlen($group->getId()) - strlen($this->mapping['group']['name_prefix']);
     $cn = substr($cn, 0, $maxLength);
     $cn = $this->mapping['group']['name_prefix'] . strtolower($cn) . '_' . $group->getId();
     return $cn;
 }
示例#8
0
 /**
  * @param Group $group
  *
  * @return string
  */
 private function getAdminGroupReference(Group $group)
 {
     $pos = strpos($group->getReference(), ',');
     return substr($group->getReference(), 0, $pos) . '_admins,' . $this->adminGroupsDn;
 }
示例#9
0
 /**
  * @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()];
 }