~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/base/xhtml.py

  • Committer: William Grant
  • Date: 2009-06-24 10:47:04 UTC
  • Revision ID: grantw@unimelb.edu.au-20090624104704-614jru0retkt5h5q
Kill Request.unmake_path.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from ivle.webapp.base.views import BaseView
29
29
from ivle.webapp.base.plugins import ViewPlugin, OverlayPlugin
30
30
from ivle.webapp.errors import HTTPError, Unauthorized
31
 
from ivle.webapp.publisher import NoPath
32
 
from ivle.webapp.breadcrumbs import Breadcrumber
33
31
 
34
32
class XHTMLView(BaseView):
35
33
    """
39
37
    """
40
38
 
41
39
    template = 'template.html'
 
40
 
 
41
    plugin_scripts = {}
 
42
    plugin_styles = {}
 
43
    scripts_init = []
 
44
 
42
45
    allow_overlays = True
43
 
    breadcrumb_text = None
44
 
 
45
 
    def __init__(self, *args, **kwargs):
46
 
        super(XHTMLView, self).__init__(*args, **kwargs)
47
 
 
48
 
        self.overlay_blacklist = []
49
 
 
50
 
        self.plugin_scripts = {}
51
 
        self.plugin_styles = {}
52
 
        self.scripts_init = []
53
 
 
54
 
        self.extra_breadcrumbs = []
55
 
        self.overlay_blacklist = []
56
 
 
57
 
    def get_context_ancestry(self, req):
58
 
        return req.publisher.get_ancestors(self.context)
 
46
    overlay_blacklist = []
 
47
 
 
48
    def __init__(self, req, **kwargs):
 
49
        for key in kwargs:
 
50
            setattr(self, key, kwargs[key])
59
51
 
60
52
    def filter(self, stream, ctx):
61
53
        return stream
104
96
        ctx['scripts_init'] = self.scripts_init + overlay_bits[3]
105
97
        ctx['app_template'] = app
106
98
        ctx['title_img'] = media_url(req, CorePlugin,
107
 
                                     "images/chrome/root-breadcrumb.png")
108
 
        try:
109
 
            ancestry = self.get_context_ancestry(req)
110
 
        except NoPath:
111
 
            ancestry = []
112
 
 
113
 
        crumber = Breadcrumber(req)
114
 
 
115
 
        ctx['breadcrumbs'] = []
116
 
        if not req.publicmode:
117
 
            for ancestor in ancestry:
118
 
                crumb = crumber.crumb(ancestor)
119
 
                if crumb is None:
120
 
                    continue
121
 
 
122
 
                if hasattr(crumb, 'extra_breadcrumbs_before'):
123
 
                    ctx['breadcrumbs'].extend(crumb.extra_breadcrumbs_before)
124
 
                ctx['breadcrumbs'].append(crumb)
125
 
                if hasattr(crumb, 'extra_breadcrumbs_after'):
126
 
                    ctx['breadcrumbs'].extend(crumb.extra_breadcrumbs_after)
127
 
 
128
 
            # If the view has specified text for a breadcrumb, add one.
129
 
            if self.breadcrumb_text:
130
 
                ctx['breadcrumbs'].append(ViewBreadcrumb(req, self))
131
 
 
132
 
            # Allow the view to add its own fake breadcrumbs.
133
 
            ctx['breadcrumbs'].extend(self.extra_breadcrumbs)
134
 
 
 
99
                                     "images/chrome/title.png")
135
100
        self.populate_headings(req, ctx)
136
101
        tmpl = loader.load(os.path.join(os.path.dirname(__file__), 
137
102
                                                        'ivle-headings.html'))
163
128
                continue
164
129
 
165
130
            for tab in plugin.tabs:
166
 
                # tab is a tuple: name, title, desc, icon, path, weight, admin
167
 
                # (Admin is optional, defaults to false)
 
131
                # tab is a tuple: name, title, desc, icon, path
168
132
                new_app = {}
169
133
                new_app['this_app'] = hasattr(self, 'tab') \
170
134
                                      and tab[0] == self.tab
178
142
                        ctx['favicon'] = icon_url
179
143
                else:
180
144
                    new_app['has_icon'] = False
181
 
                # The following check is here, so it is AFTER setting the
182
 
                # icon, but BEFORE actually installing the tab in the menu
183
 
                if len(tab) > 6 and tab[6]:
184
 
                    # Admin-only tab
185
 
                    if not (req.user and req.user.admin):
186
 
                        break
187
145
                new_app['path'] = req.make_path(tab[4])
188
146
                new_app['desc'] = tab[2]
189
147
                new_app['name'] = tab[1]
235
193
class XHTMLErrorView(XHTMLView):
236
194
    template = 'xhtmlerror.html'
237
195
 
238
 
    def __init__(self, req, context, lastobj):
239
 
        super(XHTMLErrorView, self).__init__(req, context)
240
 
        self.lastobj = lastobj
241
 
 
242
 
    def get_context_ancestry(self, req):
243
 
        return req.publisher.get_ancestors(self.lastobj)
 
196
    def __init__(self, req, exception):
 
197
        self.context = exception
244
198
 
245
199
    def populate(self, req, ctx):
246
 
        ctx['req'] = req
247
200
        ctx['exception'] = self.context
248
 
        req.headers_out['X-IVLE-Error'] = self.context.message
249
201
 
250
202
class XHTMLUnauthorizedView(XHTMLErrorView):
251
203
    template = 'xhtmlunauthorized.html'
252
204
 
253
 
    def __init__(self, req, exception, lastobj):
254
 
        super(XHTMLUnauthorizedView, self).__init__(req, exception, lastobj)
 
205
    def __init__(self, req, exception):
 
206
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
255
207
 
256
 
        if not req.publicmode and req.user is None:
 
208
        if req.user is None:
257
209
            # Not logged in. Redirect to login page.
258
210
            if req.uri == '/':
259
211
                query_string = ''
262
214
            req.throw_redirect('/+login' + query_string)
263
215
 
264
216
        req.status = 403
265
 
 
266
 
class ViewBreadcrumb(object):
267
 
    def __init__(self, req, context):
268
 
        self.req = req
269
 
        self.context = context
270
 
 
271
 
    @property
272
 
    def text(self):
273
 
        return self.context.breadcrumb_text