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

« back to all changes in this revision

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

  • Committer: matt.giuca
  • Date: 2009-02-25 04:44:54 UTC
  • Revision ID: svn-v4:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:1209
userdb/users.sql: Fixed two syntax errors. Jeepers!

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
import inspect
21
21
import os.path
 
22
import urllib
22
23
 
23
24
import genshi.template
24
25
 
25
26
from ivle.webapp.media import media_url
 
27
from ivle.webapp.core import Plugin as CorePlugin
26
28
from ivle.webapp.base.views import BaseView
27
 
from ivle.webapp.base.plugins import OverlayPlugin
 
29
from ivle.webapp.base.plugins import ViewPlugin, OverlayPlugin
28
30
from ivle.webapp.errors import HTTPError, Unauthorized
29
31
import ivle.conf
30
32
import ivle.util
39
41
    template = 'template.html'
40
42
    plugin_scripts = {}
41
43
    plugin_styles = {}
 
44
    allow_overlays = True
42
45
    overlay_blacklist = []
43
46
 
44
47
    def __init__(self, req, **kwargs):
56
59
        # view.
57
60
        app_template = os.path.join(os.path.dirname(
58
61
                        inspect.getmodule(self).__file__), self.template) 
59
 
        req.write_html_head_foot = False
60
62
        loader = genshi.template.TemplateLoader(".", auto_reload=True)
61
63
        tmpl = loader.load(app_template)
62
64
        app = tmpl.generate(viewctx)
72
74
        # Global template
73
75
        ctx = genshi.template.Context()
74
76
        # XXX: Leave this here!! (Before req.styles is read)
75
 
        ctx['overlays'] = self.render_overlays(req)
76
 
        ctx['app_styles'] = req.styles
77
 
        ctx['scripts'] = req.scripts
 
77
        ctx['overlays'] = self.render_overlays(req) if req.user else []
 
78
 
 
79
        ctx['styles'] = [media_url(req, CorePlugin, 'ivle.css')]
 
80
        ctx['styles'] += req.styles
 
81
 
 
82
        ctx['scripts'] = [media_url(req, CorePlugin, path) for path in
 
83
                           ('util.js', 'json2.js', 'md5.js')]
 
84
        ctx['scripts'] += req.scripts
 
85
 
78
86
        ctx['scripts_init'] = req.scripts_init
79
87
        ctx['app_template'] = app
80
88
        self.populate_headings(req, ctx)
98
106
            ctx['login'] = None
99
107
            ctx['logged_in'] = False
100
108
        ctx['publicmode'] = req.publicmode
101
 
        ctx['apps_in_tabs'] = []
102
109
        if hasattr(self, 'help'):
103
110
            ctx['help_path'] = self.help
104
 
        for urlname in ivle.conf.apps.apps_in_tabs:
105
 
            new_app = {}
106
 
            app = ivle.conf.apps.app_url[urlname]
107
 
            new_app['this_app'] = hasattr(self, 'appname') \
108
 
                                  and urlname == self.appname
109
 
            if app.icon:
110
 
                new_app['has_icon'] = True
111
 
                icon_dir = ivle.conf.apps.app_icon_dir
112
 
                icon_url = ivle.util.make_path(os.path.join(icon_dir, app.icon))
113
 
                new_app['icon_url'] = icon_url
114
 
                if new_app['this_app']:
115
 
                    ctx['favicon'] = icon_url
116
 
            else:
117
 
                new_app['has_icon'] = False
118
 
            new_app['path'] = ivle.util.make_path(urlname)
119
 
            new_app['desc'] = app.desc
120
 
            new_app['name'] = app.name
121
 
            ctx['apps_in_tabs'].append(new_app)
122
 
            
 
111
 
 
112
        ctx['apps_in_tabs'] = []
 
113
        for plugin in req.config.plugin_index[ViewPlugin]:
 
114
            if not hasattr(plugin, 'tabs'):
 
115
                continue
 
116
 
 
117
            for tab in plugin.tabs:
 
118
                # tab is a tuple: name, title, desc, icon, path
 
119
                new_app = {}
 
120
                new_app['this_app'] = hasattr(self, 'appname') \
 
121
                                      and tab[0] == self.appname
 
122
 
 
123
                # Icon name
 
124
                if tab[3] is not None:
 
125
                    new_app['has_icon'] = True
 
126
                    icon_url = media_url(req, plugin, tab[3])
 
127
                    new_app['icon_url'] = icon_url
 
128
                    if new_app['this_app']:
 
129
                        ctx['favicon'] = icon_url
 
130
                else:
 
131
                    new_app['has_icon'] = False
 
132
                new_app['path'] = ivle.util.make_path(tab[4])
 
133
                new_app['desc'] = tab[2]
 
134
                new_app['name'] = tab[1]
 
135
                new_app['weight'] = tab[5]
 
136
                ctx['apps_in_tabs'].append(new_app)
 
137
 
 
138
        ctx['apps_in_tabs'].sort(key=lambda tab: tab['weight'])
 
139
 
123
140
    def render_overlays(self, req):
124
141
        """Generate XML streams for the overlays.
125
142
        
127
144
        scripts_init.
128
145
        """
129
146
        overlays = []
130
 
        for plugin in req.plugin_index[OverlayPlugin]:
 
147
        if not self.allow_overlays:
 
148
            return overlays
 
149
 
 
150
        for plugin in req.config.plugin_index[OverlayPlugin]:
131
151
            for overclass in plugin.overlays:
132
152
                if overclass in self.overlay_blacklist:
133
153
                    continue
168
188
 
169
189
    def __init__(self, req, exception):
170
190
        super(XHTMLUnauthorizedView, self).__init__(req, exception)
 
191
 
171
192
        if req.user is None:
172
193
            # Not logged in. Redirect to login page.
173
 
            req.throw_redirect('/') # XXX: Need proper URL.
 
194
            if req.uri == '/':
 
195
                query_string = ''
 
196
            else:
 
197
                query_string = '?url=' + urllib.quote(req.uri, safe="/~")
 
198
            req.throw_redirect('/+login' + query_string)
174
199
 
175
200
        req.status = 403