forked from public/pyceo
158 lines
5.8 KiB
Python
158 lines
5.8 KiB
Python
import urwid, ldap
|
|
from ceo import members, terms, ldapi
|
|
from ceo.urwid.widgets import *
|
|
from ceo.urwid.window import *
|
|
|
|
class IntroPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.widgets = [
|
|
urwid.Text( "Renewing Membership" ),
|
|
urwid.Divider(),
|
|
urwid.Text( "CSC membership is $2.00 per term. You may pre-register "
|
|
"for future terms if desired." )
|
|
]
|
|
def focusable(self):
|
|
return False
|
|
|
|
class ClubUserIntroPage(IntroPage):
|
|
def init_widgets(self):
|
|
self.widgets = [
|
|
urwid.Text( "Renewing Club User Account" ),
|
|
urwid.Divider(),
|
|
urwid.Text( "In order for clubs to maintain websites hosted by "
|
|
"the Computer Science Club, they need access to our "
|
|
"machines. We grant accounts to club users at no charge "
|
|
"in order to provide this access. Registering a user "
|
|
"in this way grants one term of free access to our "
|
|
"machines, without any other membership privileges "
|
|
"(they can't vote, hold office, etc). If such a user "
|
|
"decides to join, use the Renew Membership option." )
|
|
]
|
|
|
|
class UserPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.userid = LdapWordEdit(csclub_uri, csclub_base, 'uid',
|
|
"Username: ")
|
|
|
|
self.widgets = [
|
|
urwid.Text( "Member Information" ),
|
|
urwid.Divider(),
|
|
self.userid,
|
|
]
|
|
def check(self):
|
|
self.state['userid'] = self.userid.get_edit_text()
|
|
self.state['member'] = None
|
|
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
|
|
|
|
class TermPage(WizardPanel):
|
|
def __init__(self, state, utype='member'):
|
|
self.utype = utype
|
|
WizardPanel.__init__(self, state)
|
|
def init_widgets(self):
|
|
self.start = SingleEdit("Start: ")
|
|
self.count = SingleIntEdit("Count: ")
|
|
|
|
self.widgets = [
|
|
urwid.Text( "Terms to Register" ),
|
|
urwid.Divider(),
|
|
self.start,
|
|
self.count,
|
|
]
|
|
def activate(self):
|
|
if not self.start.get_edit_text():
|
|
self.terms = self.state['member'].get('term', [])
|
|
self.nmterms = self.state['member'].get('nonMemberTerm', [])
|
|
|
|
if self.utype == 'member':
|
|
self.start.set_edit_text( terms.next_unregistered( self.terms ) )
|
|
else:
|
|
self.start.set_edit_text( terms.next_unregistered( self.terms + self.nmterms ) )
|
|
|
|
self.count.set_edit_text( "1" )
|
|
def check(self):
|
|
try:
|
|
self.state['terms'] = terms.interval( self.start.get_edit_text(), self.count.value() )
|
|
except Exception, e:
|
|
self.focus_widget( self.start )
|
|
set_status( "Invalid start term" )
|
|
return True
|
|
for term in self.state['terms']:
|
|
if self.utype == 'member':
|
|
already = term in self.terms
|
|
else:
|
|
already = term in self.terms or term in self.nmterms
|
|
|
|
if already:
|
|
self.focus_widget( self.start )
|
|
set_status( "Already registered for " + term )
|
|
return True
|
|
if len(self.state['terms']) == 0:
|
|
self.focus_widget(self.count)
|
|
set_status( "Registering for zero terms?" )
|
|
return True
|
|
|
|
class PayPage(WizardPanel):
|
|
def init_widgets(self):
|
|
self.midtext = urwid.Text("")
|
|
|
|
self.widgets = [
|
|
urwid.Text("Membership Fee"),
|
|
urwid.Divider(),
|
|
self.midtext,
|
|
]
|
|
def focusable(self):
|
|
return False
|
|
def activate(self):
|
|
regterms = self.state['terms']
|
|
plural = "term"
|
|
if len(self.state['terms']) > 1:
|
|
plural = "terms"
|
|
self.midtext.set_text("You are registering for %d %s, and owe the "
|
|
"Computer Science Club $%d.00 in membership fees. "
|
|
"Please deposit the money in the safe before "
|
|
"continuing. " % ( len(regterms), plural, len(regterms * 2)))
|
|
|
|
class EndPage(WizardPanel):
|
|
def __init__(self, state, utype='member'):
|
|
self.utype = utype
|
|
WizardPanel.__init__(self, state)
|
|
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 activate(self):
|
|
problem = None
|
|
try:
|
|
self.headtext.set_text("Registration Succeeded")
|
|
if self.utype == 'member':
|
|
members.register( self.state['userid'], self.state['terms'] )
|
|
self.midtext.set_text("The member has been registered for the following "
|
|
"terms: " + ", ".join(self.state['terms']) + ".")
|
|
else:
|
|
members.register_nonmember( self.state['userid'], self.state['terms'] )
|
|
self.midtext.set_text("The club user has been registered for the following "
|
|
"terms: " + ", ".join(self.state['terms']) + ".")
|
|
except ldap.LDAPError, e:
|
|
problem = ldapi.format_ldaperror(e)
|
|
except members.MemberException, e:
|
|
problem = str(e)
|
|
if problem:
|
|
self.headtext.set_text("Failed to Register")
|
|
self.midtext.set_text("You may refund any fees paid or retry. "
|
|
"The error was:\n\n%s" % problem)
|
|
|
|
def check(self):
|
|
pop_window()
|