parent
97ac7fb7bd
commit
95019e376a
@ -0,0 +1,64 @@ |
||||
import urwid |
||||
from csc.apps.urwid.widgets import * |
||||
from csc.apps.urwid.window import * |
||||
|
||||
from csc.adm import accounts, members |
||||
from csc.common.excep import InvalidArgument |
||||
|
||||
class ChangeMember(WizardPanel): |
||||
def __init__(self, state, data): |
||||
state['data'] = data |
||||
WizardPanel.__init__(self, state) |
||||
def init_widgets(self): |
||||
self.userid = WordEdit("Username: ") |
||||
|
||||
data = self.state['data'] |
||||
self.widgets = [ |
||||
urwid.Text( "%s %s Member" % (data['type'], data['name']) ), |
||||
urwid.Divider(), |
||||
self.userid, |
||||
] |
||||
def check(self): |
||||
self.state['userid'] = self.userid.get_edit_text() |
||||
if self.state['userid']: |
||||
if not members.connected(): members.connect() |
||||
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'] |
||||
type = data['type'].lower() |
||||
failed = [] |
||||
for group in data['groups']: |
||||
try: |
||||
members.change_group_member(type, group, self.state['userid']) |
||||
except: |
||||
failed.append(group) |
||||
if len(failed) == 0: |
||||
self.headtext.set_text("%s succeeded" % data['type']) |
||||
self.midtext.set_text("Congratulations, the group modification " |
||||
"has succeeded.") |
||||
else: |
||||
self.headtext.set_text("%s partially succeeded" % data['type']) |
||||
self.midtext.set_text("Failed to %s member to %s for the " |
||||
"following groups: %s. This may indicate an attempt to add a " |
||||
"duplicate group member or to delete a non-present group " |
||||
"member." % (data['type'].lower(), data['name'], |
||||
', '.join(failed))) |
@ -0,0 +1,83 @@ |
||||
import urwid |
||||
from csc.apps.urwid.widgets import * |
||||
from csc.apps.urwid.window import * |
||||
|
||||
from csc.adm import accounts, members |
||||
from csc.common.excep import InvalidArgument |
||||
|
||||
position_data = [ |
||||
('president', 'President'), |
||||
('vice-president', 'Vice-president'), |
||||
('treasurer', 'Treasurer'), |
||||
('secretary', 'Secretary'), |
||||
('sysadmin', 'System Administrator'), |
||||
('librarian', 'Librarian'), |
||||
('imapd', 'Imapd'), |
||||
('webmaster', 'Web Master'), |
||||
] |
||||
|
||||
class IntroPage(WizardPanel): |
||||
def init_widgets(self): |
||||
self.widgets = [ |
||||
urwid.Text( "Managing Positions" ), |
||||
urwid.Divider(), |
||||
urwid.Text( "Enter a username for each position. If a position is " |
||||
"held by multiple people, enter a comma-separated " |
||||
"list of usernames. If a position is held by nobody " |
||||
"leave the username blank." ), |
||||
] |
||||
def focusable(self): |
||||
return False |
||||
|
||||
class InfoPage(WizardPanel): |
||||
def init_widgets(self): |
||||
if not members.connected(): members.connect() |
||||
self.widgets = [ |
||||
urwid.Text( "Positions" ), |
||||
urwid.Divider(), |
||||
] |
||||
positions = members.list_positions() |
||||
self.position_widgets = {} |
||||
for (position, text) in position_data: |
||||
widget = WordEdit("%s: " % text) |
||||
if position in positions: |
||||
widget.set_edit_text(','.join(positions[position].keys())) |
||||
else: |
||||
widget.set_edit_text('') |
||||
self.position_widgets[position] = widget |
||||
self.widgets.append(widget) |
||||
|
||||
def parse(self, entry): |
||||
if len(entry) == 0: |
||||
return [] |
||||
return entry.split(',') |
||||
|
||||
def check(self): |
||||
self.state['positions'] = {} |
||||
for (position, widget) in self.position_widgets.iteritems(): |
||||
self.state['positions'][position] = \ |
||||
self.parse(widget.get_edit_text()) |
||||
clear_status() |
||||
|
||||
class EndPage(WizardPanel): |
||||
def init_widgets(self): |
||||
old = members.list_positions() |
||||
self.headtext = urwid.Text("") |
||||
self.midtext = urwid.Text("") |
||||
|
||||
self.widgets = [ |
||||
self.headtext, |
||||
urwid.Divider(), |
||||
self.midtext, |
||||
] |
||||
def focusable(self): |
||||
return False |
||||
def activate(self): |
||||
for (position, info) in self.state['positions'].iteritems(): |
||||
members.set_position(position, info) |
||||
self.headtext.set_text("Positions Updated") |
||||
self.midtext.set_text("Congratulations, positions have been updated. " |
||||
"You should rebuild the website in order to update the Positions " |
||||
"page.") |
||||
def check(self): |
||||
pop_window() |
Loading…
Reference in new issue