Add labels to main menu

Most of CEO is restricted to office staff or worse, but anyone can run
it. This add labels to make necessary privileges clear to the user.
This commit is contained in:
Michael Spang 2009-08-23 15:40:20 -04:00
parent 5dc46021c5
commit 0413dcaaa4
2 changed files with 55 additions and 11 deletions

View File

@ -1,4 +1,4 @@
import sys, random, urwid.curses_display import os, grp, pwd, sys, random, urwid.curses_display
from ceo.urwid.widgets import * from ceo.urwid.widgets import *
from ceo.urwid.window import * from ceo.urwid.window import *
from ceo.urwid import newmember, renew, info, search, positions, groups, \ from ceo.urwid import newmember, renew, info, search, positions, groups, \
@ -143,26 +143,60 @@ def change_shell(data):
shell.EndPage shell.EndPage
], (50, 20)) ], (50, 20))
def run(): def check_group(group):
menu = make_menu([ try:
me = pwd.getpwuid(os.getuid()).pw_name
return me in grp.getgrnam(group).gr_mem
except KeyError:
pass
def top_menu():
office_only = [
("New Member", new_member, None), ("New Member", new_member, None),
("New Club Rep", new_club_user, None), ("New Club Rep", new_club_user, None),
("Renew Membership", renew_member, None), ("Renew Membership", renew_member, None),
("Renew Club Rep", renew_club_user, None), ("Renew Club Rep", renew_club_user, None),
("New Club", new_club, None), ("New Club", new_club, None),
("Display Member", display_member, None), ("Library", library.library, None),
("Change Shell", change_shell, None), ("Databases", databases.databases, None),
("Search", search_members, None), ]
syscom_only = [
("Manage Club or Group Members", manage_group, None), ("Manage Club or Group Members", manage_group, None),
("Manage Positions", manage_positions, None), ("Manage Positions", manage_positions, None),
("Manage Office Staff", groups.group_members, office_data), ("Manage Office Staff", groups.group_members, office_data),
("Manage Systems Committee", groups.group_members, syscom_data), ("Manage Systems Committee", groups.group_members, syscom_data),
("Library", library.library, None), ]
("Databases", databases.databases, None), unrestricted = [
("Display Member", display_member, None),
("Change Shell", change_shell, None),
("Search", search_members, None),
]
footer = [
("Exit", raise_abort, None), ("Exit", raise_abort, None),
]) ]
push_window( menu, program_name() ) menu = None
event_loop( ui )
# reorder the menu for convenience
if not check_group('office') and not check_group('syscom'):
menu = labelled_menu([
('Unrestricted', unrestricted),
('Office Staff', office_only),
('Systems Committee', syscom_only),
(None, footer)
])
else:
menu = labelled_menu([
('Office Staff', office_only),
('Unrestricted', unrestricted),
('Systems Committee', syscom_only),
(None, footer)
])
return menu
def run():
push_window(top_menu(), program_name())
event_loop(ui)
def start(): def start():
ui.run_wrapper( run ) ui.run_wrapper( run )

View File

@ -11,6 +11,16 @@ def make_menu(items):
items = [ urwid.AttrWrap( ButtonText( cb, data, txt ), 'menu', 'selected') for (txt, cb, data) in items ] items = [ urwid.AttrWrap( ButtonText( cb, data, txt ), 'menu', 'selected') for (txt, cb, data) in items ]
return urwid.ListBox( items ) return urwid.ListBox( items )
def labelled_menu(itemses):
widgets = []
for label, items in itemses:
if label:
widgets.append(urwid.Text(label))
widgets += (urwid.AttrWrap(ButtonText(cb, data, txt), 'menu', 'selected') for (txt, cb, data) in items)
widgets.append(urwid.Divider())
widgets.pop()
return urwid.ListBox(widgets)
def push_wizard(name, pages, dimensions=(50, 10)): def push_wizard(name, pages, dimensions=(50, 10)):
state = {} state = {}
wiz = Wizard() wiz = Wizard()