source: waeup/branches/ulif-rewrite/src/waeup/app.py @ 4084

Last change on this file since 4084 was 4084, checked in by uli, 15 years ago

Make use of the new factories.

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1import grok
2import re
3from zope.app.authentication.authentication import PluggableAuthentication
4from zope.app.security.interfaces import IAuthentication
5from zope.component import getUtility, getMultiAdapter, createObject
6from zope.interface import Interface
7
8from waeup.interfaces import (IUniversity, IStudentContainer, IHostelContainer,
9                              IFacultyContainer)
10from waeup.viewlets import MainArea, LeftSidebar, Index, Manage, FormWrapMixin
11from waeup.authentication import setup_authentication
12
13class University(grok.Application, grok.Container):
14    """A university.
15    """
16    grok.implements(IUniversity)
17    # Setup authentication for this app. Note: this is only
18    # initialized, when a new instance of this app is created.
19    grok.local_utility(
20        PluggableAuthentication, provides = IAuthentication,
21        setup = setup_authentication)
22
23    def __init__(self, name=u'Sample University', **kw):
24        super(University, self).__init__(**kw)
25        self.name = name
26        self.setup()
27
28    def setup(self):
29        self.students = createObject(u'waeup.StudentContainer')
30        self.hostels = createObject(u'waeup.HostelContainer')
31        self.faculties = createObject(u'waeup.FacultyContainer')
32
33    def traverse(self, name):
34        # If someone requests a subobject 'faculties', we return our
35        # `faculties` attribute.
36        if name == 'faculties':
37            return self.faculties
38        elif name == 'hostels':
39            return self.hostels
40        elif name == 'students':
41            return self.students
42        return None
43       
44       
45class ManageForm(grok.EditForm):
46    """Manage the basic properties of a `University` instance.
47    """
48
49    form_fields = grok.AutoFields(IUniversity)
50    grok.require('waeup.manageUniversity')
51
52    @grok.action('Save')
53    def save(self, **data):
54        self.applyData(self.context, **data)
55        return
56   
57    @grok.action('Save and return')
58    def saveAndReturn(self, **data):
59        self.applyData(self.context, **data)
60        self.redirect(self.url(self.context))
61        return
62
63    @grok.action('Cancel')
64    def cancel(self, **data):
65        self.redirect(self.url(self.context))
66        return
67
68class ManageUniversity(Manage):
69    grok.name('manage')
70    grok.context(IUniversity)
71    grok.require('waeup.manageUniversity')
72
73    def render(self, *args, **kw):
74        return super(ManageUniversity, self).render(*args, **kw)
75   
76class ManageUniversityMain(FormWrapMixin, grok.Viewlet):
77    """A viewlet that renders the `ManageForm`.
78    """
79    grok.viewletmanager(MainArea)
80    grok.context(IUniversity)
81    grok.view(Manage)
82    grok.require('waeup.manageUniversity')
83   
84    formview_name = 'manageform' # The name of the formview we want to
85                                 # be rendered in this viewlet.
86
87class Content(grok.Viewlet):
88    grok.viewletmanager(MainArea)
89    grok.context(IUniversity)
90    grok.view(Index)
91
92class ManageLink(grok.Viewlet):
93    grok.viewletmanager(LeftSidebar)
94    grok.context(IUniversity)
95    grok.view(Index)
96    grok.order(5)
97    # This link is only displayed, if the user is
98    # allowed to use it!
99    grok.require('waeup.manageUniversity')
100   
101    def render(self):
102        return u'<div class="portlet"><a href="manage">Settings</a></div>'
103
104class ManageFacultiesLink(grok.Viewlet):
105    grok.viewletmanager(LeftSidebar)
106    grok.context(IUniversity)
107    grok.view(Index)
108    grok.order(6)
109    # This is so cool! This link is only displayed, when the user is
110    # allowed to use it!
111    grok.require('waeup.manageUniversity')
112   
113    def render(self):
114        return u'<div class="portlet"><a href="faculties">Manage faculties</a></div>'
Note: See TracBrowser for help on using the repository browser.