def post( self, group_id ): ur = UserRepository() gr = GroupRepository() user = self.get_current_user() group = gr.fetch(group_id) gr.get_group_maintainer(group) user_group_ids = [ g.id for g in gr.get_groups_of_user(user.id) ] supergroups = gr.get_supergroup_list(group_id) # TODO: Add logic to prevent user from leaving if they're in a subgroup # of the current group. group_root = gr.get_user_group_tree(user.id, long(group_id)) # The group must be a non-root group to consider removal. Also, the user # cannot be in any of the subgroups. if len(supergroups) != 0 and len(group_root.subgroups) == 0: supergroup = supergroups[-1] # Case 1: User requested group deletion (user is maintainer + empty). if group.maintainerId == user.id and gr.get_group_size(group.id) == 1: gr.remove(group) self.redirect( "/group/" + str(supergroup.id) ) return # Case 2: User requested to leave the group (user is in group). if group.id in user_group_ids: user.groups = [ gid for gid in user_group_ids if gid != group.id ] ur.persist(user) self.redirect( "/group/" + str(supergroup.id) ) return self.redirect( "/group/" + str(group_id) )
def _in_group(self, user, group): group_repo = GroupRepository() user_groups = group_repo.get_groups_of_user(user.id) group_repo.close() if not user_groups or not any(g.id == group.id for g in user_groups): print "User is not a member of group (" + group.id + ")" return False return True