# Twisted, the Framework of Your Internet # Copyright (C) 2001 Matthew W. Lefkowitz # # This library is free software; you can redistribute it and/or # modify it under the terms of version 2.1 of the GNU Lesser General Public # License as published by the Free Software Foundation. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import time #Twisted imports from twisted.web import html, server, error, widgets from twisted.cred import identity from twisted.persisted import styles #Sibling imports import service class AccountCreationWidget(widgets.Form, styles.Versioned): persistenceVersion = 1 title = "Account Creation" formFields = [ ['string','Username','username',''], ['password','Password','password',''], ] def __init__(self, service): self.service = service def upgradeToVersion1(self): #this object should get garbage collected.. pass def process(self, write, request, submit, **args): if args.has_key("username"): u,p = request.args['username'][0], request.args['password'][0] app = self.service.application part = self.service.createPerspective(u) if part: ident = part.makeIdentity(p) write("Participant Added.") else: write("Duplicate.") class ParticipantInfoWidget(widgets.Widget): def __init__(self, name, svc): self.name = name self.title = "Info for Participant %s" % name self.service = svc self.part = svc.perspectives[name] def display(self, request): return [''' Name: %s
Currently in groups: %s
Current status: %s
''' % (self.part.name, map(lambda x: x.name, self.part.groups), service.statuses[self.part.status])] class Page: "Backwards Compatibility." class ParticipantListWidget(widgets.Gadget, widgets.Widget, styles.Versioned): persistenceVersion = 2 def __init__(self, service): widgets.Gadget.__init__(self) self.service = service self.title = "Participant List" def upgradeToVersion1(self): pass def upgradeToVersion2(self): del self.page def display(self, request): """Get HTML for a directory of participants. """ keys = self.service.perspectives.keys() keys.sort() return [html.linkList(map(lambda key, request=request: (key, key), keys))] def getWidget(self, name, request): """Get info for a particular participant. """ if name in self.service.perspectives.keys(): return ParticipantInfoWidget(name, self.service) else: return error.NoResource("That participant does not exist.") class WordsGadget(widgets.Gadget, widgets.Widget, styles.Versioned): persistenceVersion = 2 title = "Welcome to WebWords" def __init__(self, svc): widgets.Gadget.__init__(self) self.section = "" self.putWidget("create", AccountCreationWidget(svc)) self.putWidget("users", ParticipantListWidget(svc)) def upgradeToVersion1(self): #This object should get garbage collected... pass def upgradeToVersion2(self): del self.page def display(self, request): return [html.linkList([["create", "Create an Account"], ["users", "View the list of Participants"]])] class WebWordsAdminSite(styles.Versioned): persistenceVersion = 2 def upgradeToVersion2(self): self.__class__ = server.Site if hasattr(self, 'service'): self.__init__(WordsGadget(self.service)) del self.service AccountCreation = AccountCreationWidget ParticipantsDirectory = ParticipantListWidget AdminDir = WordsGadget