/** * 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 * @param $form * @param $group * @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]) && !$user->isSystemUser && !$user->isRootUser) { $removedUsers[] = $user; } } foreach ($removedUsers as $user) { $group->users->remove($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) { AllPermissionsOptimizationUtil::userRemovedFromGroup($group, $user); } foreach ($addedUsers as $user) { AllPermissionsOptimizationUtil::userAddedToGroup($group, $user); } if (!empty($removedUsers)) { ReadPermissionsSubscriptionUtil::userRemovedFromGroup(); } if (!empty($addedUsers)) { ReadPermissionsSubscriptionUtil::userAddedToGroup(); } return true; }