dao = $dao; $this->grouperConfig = $grouperConfig; } public function saveUser(User $user) { $primarySpecified = true; // If new user if ($user->id === null) { $primarySpecified = false; $user->id = $this->dao->createUser(); } foreach ($user->identities as $identity) { if ($identity->id === null) { $identity->id = $this->dao->insertIdentity($identity, $user->id); if (!$primarySpecified) { $this->dao->setPrimaryIdentity($user->id, $identity->id); $identity->primary = true; } } } } public function findUserByIdentity($type, $identifier) { return $this->dao->findUserByIdentity($type, $identifier); } public function joinUsers($userId1, $userId2) { if ($this->grouperConfig !== null) { $gc = new GrouperClient($this->grouperConfig); $grouperUser1 = 'RAP:' . $userId1; $grouperUser2 = 'RAP:' . $userId2; $groupsToMove = $gc->getSubjectGroups($grouperUser2); $privilegesMap = $gc->getSubjectPrivileges($grouperUser2); // Adding memberships $gc->addMemberships($grouperUser1, $groupsToMove); // Adding privileges foreach ($privilegesMap as $groupName => $privileges) { $gc->assignPrivileges($grouperUser1, $groupName, $privileges); } // Removing privileges foreach ($privilegesMap as $groupName => $privileges) { $gc->removePrivileges($grouperUser2, $groupName, $privileges); } // Removing memberships $gc->removeMemberships($grouperUser2, $groupsToMove); } $this->dao->joinUsers($userId1, $userId2); } }