From 350ef6ef7ab30122b46d7e6ef8a00295b28191aa Mon Sep 17 00:00:00 2001 From: David Bartley Date: Tue, 27 Nov 2007 19:27:03 -0500 Subject: [PATCH] Add group/club management --- pylib/csc/apps/urwid/groups.py | 67 ++++++++++++++++++++++++++++++++++ pylib/csc/apps/urwid/main.py | 26 ++++++------- 2 files changed, 79 insertions(+), 14 deletions(-) diff --git a/pylib/csc/apps/urwid/groups.py b/pylib/csc/apps/urwid/groups.py index 80ee9df..4641083 100644 --- a/pylib/csc/apps/urwid/groups.py +++ b/pylib/csc/apps/urwid/groups.py @@ -1,10 +1,77 @@ import urwid from csc.apps.urwid.widgets import * from csc.apps.urwid.window import * +import csc.apps.urwid.search as search from csc.adm import accounts, members from csc.common.excep import InvalidArgument +def menu_items(items): + return [ urwid.AttrWrap( ButtonText( cb, data, txt ), 'menu', 'selected') for (txt, cb, data) in items ] + +def change_group_member(data): + push_wizard("%s %s Member" % (data["type"], data["name"]), [ + (groups.ChangeMember, data), + groups.EndPage, + ]) + +def list_group_members(data): + mlist = members.list_group( data["group"] ).values() + search.member_list( mlist ) + +def group_members(data): + add_data = data.copy() + add_data['type'] = 'Add' + remove_data = data.copy() + remove_data['type'] = 'Remove' + menu = [ + ("Add %s member" % data["name"].lower(), + change_group_member, add_data), + ("Remove %s member" % data["name"].lower(), + change_group_member, remove_data), + ("List %s members" % data["name"].lower(), list_group_members, data), + ("Back", raise_back, None), + ] + + listbox = urwid.ListBox( menu_items( menu ) ) + push_window(listbox, "Manage %s" % data["name"]) + +class IntroPage(WizardPanel): + def init_widgets(self): + self.widgets = [ + urwid.Text( "Managing Club or Group" ), + urwid.Divider(), + urwid.Text( "Adding a member to a club will also grant them " + "access to the club's files and allow them to " + "become_club." + "\n\n" + "Do not manage office and syscom related groups using " + "this interface. Instead use the \"Manage Office " + "Staff\" and \"Manage Systems Committee\" entries " + "from the main menu." ) + ] + def focusable(self): + return False + +class InfoPage(WizardPanel): + def init_widgets(self): + self.group = WordEdit("Club or Group: ") + self.widgets = [ + urwid.Text( "Club or Group Information"), + urwid.Divider(), + self.group, + ] + def check(self): + group = self.group.get_edit_text() + # TODO - check that group is valid + group_name = group # TODO + data = { + "name" : group, + "group" : group_name, + "groups" : [group], + } + group_members(data) + class ChangeMember(WizardPanel): def __init__(self, state, data): state['data'] = data diff --git a/pylib/csc/apps/urwid/main.py b/pylib/csc/apps/urwid/main.py index 8ea09aa..e061cc2 100644 --- a/pylib/csc/apps/urwid/main.py +++ b/pylib/csc/apps/urwid/main.py @@ -9,6 +9,7 @@ import csc.apps.urwid.info as info import csc.apps.urwid.search as search import csc.apps.urwid.positions as positions import csc.apps.urwid.groups as groups +from csc.apps.urwid.error import * from csc.adm import accounts, members, terms from csc.common.excep import InvalidArgument @@ -71,6 +72,7 @@ def main_menu(): ("Create Club Account", new_club, None), ("Display Member", display_member, None), ("Search", search_members, None), + ("Manage Club or Group Members", manage_group, None), ("Manage Positions", manage_positions, None), ("Manage Office Staff", group_members, office_data), ("Manage Systems Committee", group_members, syscom_data), @@ -107,6 +109,12 @@ def new_club(*args, **kwargs): (newmember.EndPage, "club"), ], (60, 15)) +def manage_group(*args, **kwargs): + push_wizard("Manage Club or Group Members", [ + groups.IntroPage, + groups.InfoPage, + ], (60, 15)) + def renew_member(*args, **kwargs): push_wizard("Renew Membership", [ renew.IntroPage, @@ -156,27 +164,17 @@ def group_members(data): remove_data['type'] = 'Remove' menu = [ ("Add %s member" % data["name"].lower(), - change_group_member, add_data), + groups.change_group_member, add_data), ("Remove %s member" % data["name"].lower(), - change_group_member, remove_data), - ("List %s members" % data["name"].lower(), list_group_members, data), + groups.change_group_member, remove_data), + ("List %s members" % data["name"].lower(), + groups.list_group_members, data), ("Back", raise_back, None), ] listbox = urwid.ListBox( menu_items( menu ) ) push_window(listbox, "Manage %s" % data["name"]) -def change_group_member(data): - push_wizard("%s %s Member" % (data["type"], data["name"]), [ - (groups.ChangeMember, data), - groups.EndPage, - ]) - -def list_group_members(data): - if not members.connected(): members.connect() - mlist = members.list_group( data["group"] ).values() - search.member_list( mlist ) - def run(): push_window( main_menu(), program_name() ) event_loop( ui )