pyceo-broken/ceo/urwid/groups.py

136 lines
4.4 KiB
Python
Raw Permalink Normal View History

import urwid
from ceo import members
from ceo.urwid import search
from ceo.urwid.widgets import *
from ceo.urwid.window import *
2007-11-15 05:28:58 -05:00
2007-11-27 19:27:03 -05:00
def change_group_member(data):
2007-12-12 01:15:12 -05:00
push_wizard("%s %s Member" % (data["action"], data["name"]), [
(ChangeMember, data),
EndPage,
2007-11-27 19:27:03 -05:00
])
def list_group_members(data):
mlist = members.list_group( data["group"] ).values()
search.member_list( mlist )
def group_members(data):
add_data = data.copy()
2007-12-12 01:15:12 -05:00
add_data['action'] = 'Add'
2007-11-27 19:27:03 -05:00
remove_data = data.copy()
2007-12-12 01:15:12 -05:00
remove_data['action'] = 'Remove'
menu = make_menu([
2007-11-27 19:27:03 -05:00
("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),
])
push_window(menu, "Manage %s" % data["name"])
2007-11-27 19:27:03 -05:00
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")
2007-11-27 19:27:03 -05:00
]
def focusable(self):
return False
class InfoPage(WizardPanel):
def init_widgets(self):
2007-12-18 01:24:58 -05:00
self.group = LdapWordEdit(csclub_uri, csclub_base, 'uid',
"Club or Group: ")
2007-11-27 19:27:03 -05:00
self.widgets = [
urwid.Text( "Club or Group Information"),
urwid.Divider(),
self.group,
]
def check(self):
group = self.group.get_edit_text()
# check if group is valid
if not group or not members.get_group(group):
set_status("Group not found")
self.focus_widget(self.group)
return True
2007-11-27 19:27:03 -05:00
data = {
"name" : group,
"group" : group,
2008-01-25 20:23:04 -05:00
"groups" : [],
2007-11-27 19:27:03 -05:00
}
# Office Staff and Syscom get added to more groups
if group == "syscom":
data["name"] = "Systems Committee"
data["groups"] = [ "office", "staff", "adm", "src" ]
elif group == "office":
data["name"] = "Office Staff"
data["groups"] = [ "cdrom", "audio", "video", "www" ]
2007-12-12 03:33:09 -05:00
group_members(data)
2007-11-27 19:27:03 -05:00
2007-11-15 05:28:58 -05:00
class ChangeMember(WizardPanel):
def __init__(self, state, data):
state['data'] = data
WizardPanel.__init__(self, state)
def init_widgets(self):
2007-12-18 01:24:58 -05:00
self.userid = LdapWordEdit(csclub_uri, csclub_base, 'uid',
"Username: ")
2007-11-15 05:28:58 -05:00
data = self.state['data']
self.widgets = [
2007-12-12 01:15:12 -05:00
urwid.Text( "%s %s Member" % (data['action'], data['name']) ),
2007-11-15 05:28:58 -05:00
urwid.Divider(),
self.userid,
]
def check(self):
self.state['userid'] = self.userid.get_edit_text()
if self.state['userid']:
self.state['member'] = members.get(self.userid.get_edit_text())
if not self.state['member']:
set_status("Member not found")
self.focus_widget(self.userid)
return True
clear_status()
class EndPage(WizardPanel):
def init_widgets(self):
self.headtext = urwid.Text("")
self.midtext = urwid.Text("")
self.widgets = [
self.headtext,
urwid.Divider(),
self.midtext,
]
def focusable(self):
return False
def check(self):
pop_window()
def activate(self):
data = self.state['data']
2007-12-12 01:15:12 -05:00
action = data['action'].lower()
2007-11-15 05:28:58 -05:00
failed = []
2008-01-07 13:55:47 -05:00
for group in data['groups'] + [data['group']]:
2007-11-15 05:28:58 -05:00
try:
2007-12-12 01:15:12 -05:00
members.change_group_member(action, group, self.state['userid'])
2007-12-18 01:49:13 -05:00
except ldap.LDAPError:
2007-11-15 05:28:58 -05:00
failed.append(group)
if len(failed) == 0:
2007-12-12 01:15:12 -05:00
self.headtext.set_text("%s succeeded" % data['action'])
2007-11-15 05:28:58 -05:00
self.midtext.set_text("Congratulations, the group modification "
"has succeeded.")
else:
2007-12-18 01:49:13 -05:00
self.headtext.set_text("%s Results" % data['action'])
2007-11-15 05:28:58 -05:00
self.midtext.set_text("Failed to %s member to %s for the "
"following groups: %s. This may indicate an attempt to add a "
2007-12-18 01:37:44 -05:00
"duplicate group member or to delete a member that was not in "
2008-01-07 13:45:21 -05:00
"the group." % (data['action'].lower(), data['name'],
2007-11-15 05:28:58 -05:00
', '.join(failed)))