Projet

Général

Profil

Télécharger (5,59 ko) Statistiques
| Branche: | Révision:

root / larpe / trunk / template.ptl @ 8843f79b

1
from cStringIO import StringIO
2
import os
3

    
4
from quixote import get_session, get_request, get_response, get_publisher
5
import ezt
6

    
7
import misc
8
from users import User
9

    
10

    
11
DEFAULT_TEMPLATE_EZT = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
13
<html xmlns="http://www.w3.org/1999/xhtml">
14
  <head>
15
    <title>[page_title]</title>
16
    <link rel="stylesheet" type="text/css" href="[css]"/>
17
    [script]
18
  </head>
19
  <body[if-any onload] onload="[onload]"[end]>
20
    <div id="page">
21
    <div id="top"> <h1>[if-any title][title][else][org_name][end]</h1> </div>
22
    <div id="main-content">
23
    [prelude]
24
    [if-any breadcrumb]<p id="breadcrumb">[breadcrumb]</p>[end]
25
    [body]
26
    </div>
27
    <div id="footer"><p id="lasso">Powered by Lasso</p></div>
28
    </div>
29
  </body>
30
</html>"""
31

    
32
ADMIN_TEMPLATE_EZT = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
33
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
34
<html xmlns="http://www.w3.org/1999/xhtml">
35
  <head>
36
    <title>[page_title]</title>
37
    <link rel="stylesheet" type="text/css" href="[css]"/>
38
    [script]
39
  </head>
40
  <body>
41
  <div id="header">[header_menu]</div>
42
  <div id="main-content">
43
    [user_info]
44
    [if-any breadcrumb]
45
    <p id="breadcrumb">[breadcrumb]</p>
46
    [end]
47
    <h1>[subtitle]</h1>
48

    
49
    [body]
50

    
51
  </div>
52
  <div id="footer">
53
   <p id="lasso">Powered by Lasso</p>
54
  </div>
55
 </body>
56
</html>"""
57

    
58

    
59
default_template = ezt.Template()
60
default_template.parse(DEFAULT_TEMPLATE_EZT)
61

    
62
admin_template = ezt.Template()
63
admin_template.parse(ADMIN_TEMPLATE_EZT)
64

    
65

    
66
def html_top(title = None, onload = None, script = None, default_org = 'WCS',
67
        force_ignore_user = False):
68
    get_response().filter.update(locals())
69

    
70

    
71
def error_page [html] (error_message, error_title = None, exception = None):
72
    if not error_title:
73
        error_title = _('Error')
74
    script = None
75
    if exception:
76
        scripts = ['/js/prototype.js', '/js/scriptaculous/scriptaculous.js']
77
        script = '\n'.join(
78
                ['<script src="%s" type="text/javascript"></script>' % x for x in scripts])
79

    
80
    html_top(error_title, script = script)
81
    '<div class="error-page">'
82
    '<p>%s</p>' % error_message
83
    if exception and get_publisher().logger.error_email:
84
        '<p>%s</p>' % _('It has been sent to the site administrator for analyse.')
85
    if exception:
86
        '''<p><a href="#" onclick="new Effect.SlideDown('exception'); '''
87
        '''this.style.display = 'none'; return false;">%s</a></p>''' % _('View Error Details')
88
        '<pre id="exception" style="display: none;"><code>%s</code></pre>' % exception
89
    '</div>'
90

    
91

    
92
def decorate(body, response):
93
    body = str(body)
94
    kwargs = {}
95
    for k, v in response.filter.items():
96
        if v:
97
            kwargs[k] = str(v)
98
    onload = kwargs.get('onload')
99
    org_name = misc.cfg.get('sp', {}).get('organization_name', kwargs.get('default_org'))
100
    current_theme = misc.cfg.get('branding', {}).get('theme', 'default')
101
    include_user = misc.cfg.get('misc', {}).get('include-user-details', False)
102
    if kwargs.get('title'):
103
        title = kwargs.get('title')
104
        page_title = '%s - %s' % (org_name, title)
105
        title_or_orgname = title
106
    else:
107
        page_title = org_name
108
        title = None
109
        title_or_orgname = org_name
110
    script = kwargs.get('script') or ''
111

    
112
    if response.filter.get('admin_ezt'):
113
        header_menu = kwargs.get('header_menu')
114
        user_info = kwargs.get('user_info')
115
        page_title = kwargs.get('sitetitle') + kwargs.get('title', '')
116
        subtitle = kwargs.get('subtitle')
117
        css = get_request().environ['SCRIPT_NAME'] + '/css/dc2/larpe-admin.css'
118
        script = kwargs.get('scripts')
119
        generate_breadcrumb = True
120
        template = admin_template
121
    else:
122
        if current_theme == 'default':
123
            css = '/css/larpe.css'
124
        else:
125
            css = '/themes/%s/larpe.css' % current_theme
126

    
127
        prelude = ''
128
        if include_user and not kwargs.get('force_ignore_user'):
129
            session = get_session()
130
            if session and session.user and not str(session.user).startswith(str('anonymous-')):
131
                try:
132
                    user = User.get(session.user)
133
                except (KeyError, ValueError):
134
                    pass
135
                else:
136
                    prelude = '<p id="prelude">%s</p>' % (_('Logged in as %s.') % user.name)
137

    
138

    
139

    
140
        template_ezt = misc.cfg.get('branding', {}).get('template')
141
        if not template_ezt:
142
            # the theme can provider a default template
143
            filename = os.path.join(get_publisher().data_dir, 'themes', current_theme, 'template.ezt')
144
            if os.path.exists(filename):
145
                template_ezt = file(filename).read()
146
        if template_ezt:
147
            generate_breadcrumb = ('[breadcrumb]' in template_ezt)
148
            template = ezt.Template()
149
            template.parse(template_ezt)
150
        else:
151
            generate_breadcrumb = True
152
            template = default_template
153

    
154
    if generate_breadcrumb:
155
        breadcrumb = ''
156
        if hasattr(response, 'breadcrumb') and response.breadcrumb:
157
            s = []
158
            path = get_request().environ['SCRIPT_NAME'] + '/'
159
            for component, label in response.breadcrumb:
160
                if component.startswith('http'):
161
                    s.append('<a href="%s">%s</a>' % (component, label))
162
                    continue
163
                s.append('<a href="%s%s">%s</a>' % (path, component, label))
164
                path += component
165
            breadcrumb = ' > '.join(s)
166

    
167
    fd = StringIO()
168
    template.generate(fd, locals())
169
    return fd.getvalue()
(19-19/20)