def action_post(request): method = request.params.get('_method', None) dbh = get_dbhandler() if method == 'delete': group_ids = [ int(x) for x in request.params.getall('group-ids') ] groups = dbh.get_group( group_ids ) if len(groups) == 0: return Response(modal_error) return Response( modal_delete( title = 'Deleting Group(s)', content = literal( 'You are going to delete the following group(s):' '<ul>' + ''.join( '<li>%s | %s</li>' % (g.name, len(g.users)) for g in groups ) + '</ul>' ), request = request ), request = request ) elif method == 'delete/confirm': group_ids = [ int(x) for x in request.params.getall('group-ids') ] group_names = [] for group in dbh.get_group( group_ids ): group_names.append( group.name ) dbh.session().delete(group) dbh.session().flush() request.session.flash( ('success', 'Group %s has been deleted successfully' % ','.join( group_names ))) return HTTPFound( location = request.referrer or request.route_url( 'rhombus.group')) raise RuntimeError('FATAL - programming ERROR')
def role_action(request): method = request.params.get('_method', None) dbh = get_dbhandler() if request.POST and method == 'add-role': roleadd_id = int(request.params.get('roleadd_id')) group_id = int(request.params.get('group_id')) ek = dbh.EK.get(roleadd_id, dbh.session()) group = dbh.get_group(group_id) ek_key = ek.key group_name = group.name try: group.roles.append( ek ) dbh.session().flush( [group] ) request.session.flash( ('success', 'Role %s has been added to group %s.' % (ek_key, group_name)) ) except exc.IntegrityError: request.session.flash( ('warning', 'Role %s is already in the group %s.' % (ek_key, group_name)) ) return HTTPFound( location = request.referrer or request.route_url('rhombus.group')) elif request.POST and method == 'delete': role_ids = [ int(x) for x in request.params.getall('role-ids') ] group_id = int(request.params.get('group_id')) eks = [ dbh.EK.get(role_id, dbh.session()) for role_id in role_ids ] if len(eks) == 0: return Response(modal_error) return Response( modal_delete( title = 'Removing Role(s)', content = literal( 'You are going to remove the following role(s) from group:' '<ul>' + ''.join( '<li>%s</li>' % ek.key for ek in eks ) + '</ul>' ), request = request ), request = request ) elif request.POST and method == 'delete/confirm': role_ids = [ int(x) for x in request.params.getall('role-ids') ] group_id = int(request.params.get('group_id')) eks = [ dbh.EK.get(role_id, dbh.session()) for role_id in role_ids ] group = dbh.get_group(group_id) removes = [] for ek in eks: group.roles.remove( ek ) removes.append( ek.key ) dbh.session.flush([group]) request.session.flash( ('success', 'Role(s) %s has been removed successfully' % '; '.join( removes ))) return HTTPFound( location = request.referrer or request.route_url( 'rhombus.group')) raise RuntimeError('FATAL - programming ERROR')
def user_action(request): method = request.params.get('_method', None) dbh = get_dbhandler() if request.POST and method == 'add-member': useradd_id = int(request.params.get('useradd_id')) group_id = int(request.params.get('group_id')) role = request.params.get('useradd_role').upper() user = dbh.get_user(useradd_id) group = dbh.get_group(group_id) user_login = user.login group_name = group.name try: ug = dbh.UserGroup(user, group, role) dbh.session().flush( [ug] ) request.session.flash( ('success', 'User %s has been added to group %s as %s.' % (user_login, group_name, { 'A': 'an admin', 'M': 'a member'}[role]) ) ) except exc.IntegrityError: request.session.flash( ('warning', 'User %s is already in the group %s.' % (user_login, group_name)) ) return HTTPFound( location = request.referrer or request.route_url('rhombus.group')) elif request.POST and method == 'delete': user_ids = [ int(x) for x in request.params.getall('user-ids') ] group_id = int(request.params.get('group_id')) usergroups = dbh.UserGroup.query(dbh.session()).filter( dbh.UserGroup.user_id.in_( user_ids), dbh.UserGroup.group_id == group_id) if usergroups.count() == 0: return Response(modal_error) return Response( modal_delete( title = 'Removing Member(s)', content = literal( 'You are going to remove the following user(s) from group:' '<ul>' + ''.join( '<li>%s</li>' % ug.user.render() for ug in usergroups ) + '</ul>' ), request = request ), request = request ) elif request.POST and method == 'delete/confirm': user_ids = [ int(x) for x in request.params.getall('user-ids') ] group_id = int(request.params.get('group_id')) usergroups = dbh.UserGroup.query(dbh.session()).filter( dbh.UserGroup.user_id.in_( user_ids), dbh.UserGroup.group_id == group_id) logins = [] for ug in usergroups: logins.append( ug.user.render() ) dbh.session().delete( ug ) dbh.session.flush() request.session.flash( ('success', 'User(s) %s has been removed successfully' % '; '.join( logins ))) return HTTPFound( location = request.referrer or request.route_url( 'rhombus.group')) raise RuntimeError('FATAL - programming ERROR')