/** * Takes post data and prepares it for setting the membership on the group. * Adds and removes users to group based on a form's userMembershipData * @return boolean. True if membership was set successfully. */ public static function setMembershipFromForm($form, $group) { assert('$group instanceof Group'); assert('$form instanceof GroupUserMembershipForm'); $removedUsers = array(); $addedUsers = array(); foreach ($group->users as $index => $user) { if (empty($form->userMembershipData[$user->id])) { $group->users->removeByIndex($index); $removedUsers[] = $user; } } $users = GroupUserMembershipFormUtil::makeUsersFromUserMembershipData($form->userMembershipData); foreach ($users as $user) { if (!$group->users->contains($user)) { $group->users->add($user); $addedUsers[] = $user; } } $group->save(); foreach ($removedUsers as $user) { ReadPermissionsOptimizationUtil::userRemovedFromGroup($group, $user); } foreach ($addedUsers as $user) { ReadPermissionsOptimizationUtil::userAddedToGroup($group, $user); } return true; }
/** * @param Group $group * @param User $user */ public static function userAddedToGroup(Group $group, User $user) { ReadPermissionsOptimizationUtil::userAddedToGroup($group, $user); AllPermissionsOptimizationCache::forgetAll(); }