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

« back to all changes in this revision

Viewing changes to www/dispatch/html.py

  • Committer: Matt Giuca
  • Date: 2010-07-22 02:12:36 UTC
  • mfrom: (1812.1.13 late-submit)
  • Revision ID: matt.giuca@gmail.com-20100722021236-k8kt4cqdtywzpk24
Merge from trunk late-submit.
Students may now submit projects after the deadline, but they are warned that the submission is late.
Lecturers are now given data on which submissions were made late, and how many days.
(LP: #598346)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE - Informatics Virtual Learning Environment
2
 
# Copyright (C) 2007-2008 The University of Melbourne
3
 
#
4
 
# This program is free software; you can redistribute it and/or modify
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
 
 
18
 
# Module: dispatch.html
19
 
# Author: Matt Giuca
20
 
# Date: 12/12/2007
21
 
 
22
 
# Provides functions for writing the dispatch-generated HTML header and footer
23
 
# content (the common parts of the HTML pages shared across the entire site).
24
 
# Does not include the login page. See login.py.
25
 
 
26
 
import os.path
27
 
 
28
 
import conf
29
 
import conf.apps
30
 
from common import util
31
 
 
32
 
def write_html_head(req):
33
 
    """Writes the HTML header, given a request object.
34
 
 
35
 
    req: An IVLE request object. Reads attributes such as title. Also used to
36
 
    write to."""
37
 
 
38
 
    # Write the XHTML opening and head element
39
 
    # Note the inline JavaScript, which provides the client with constants
40
 
    # derived from the server configuration.
41
 
    if req.title != None:
42
 
        titlepart = ' - ' + req.title
43
 
    else:
44
 
        titlepart = ''
45
 
    req.write("""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
46
 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
47
 
<html xmlns="http://www.w3.org/1999/xhtml">
48
 
<head>
49
 
  <title>IVLE%s</title>
50
 
  <meta http-equiv="Content-Type" content="%s; charset=utf-8" />
51
 
  <script type="text/javascript">
52
 
    root_dir = "%s";
53
 
  </script>
54
 
  <link rel="stylesheet" type="text/css" href="%s" />
55
 
""" % (titlepart, req.content_type,
56
 
        repr(conf.root_dir)[1:-1],
57
 
        util.make_path('media/common/ivle.css')))
58
 
 
59
 
    # Write any app-specific style and script links
60
 
    for style in req.styles:
61
 
        req.write('  <link rel="stylesheet" type="text/css" href="%s" />\n'
62
 
            % util.make_path(style))
63
 
    for script in req.scripts:
64
 
        req.write('  <script type="text/javascript" src="%s" />\n'
65
 
            % util.make_path(script))
66
 
 
67
 
    req.write("</head>\n\n")
68
 
 
69
 
    # Open the body element and write a bunch of stuff there (the header)
70
 
    req.write("""<body>
71
 
<div id="ivleheader">
72
 
  <h1>IVLE</h1>
73
 
  <h2>Informatics Virtual Learning Environment</h2>
74
 
""")
75
 
 
76
 
    if req.username:
77
 
        req.write('  <p class="userhello">Welcome, <span '
78
 
            'class="username">%s</span> |\n'
79
 
            '    <a href="%s">Help</a> |\n'
80
 
            '    <a href="%s">Logout</a>\n'
81
 
            '  </p>\n' %
82
 
            (req.username, get_help_url(req), util.make_path('logout')))
83
 
    else:
84
 
        req.write('  <p class="userhello">Not logged in.</p>')
85
 
 
86
 
    # If the "debuginfo" app is installed, display a warning to the admin to
87
 
    # make sure it is removed in production.
88
 
    if "debuginfo" in conf.apps.app_url:
89
 
        req.write("  <p><small>Warning: debuginfo is enabled. Remove this "
90
 
            "app from conf.apps.app_url when placed into production."
91
 
            "</small></p>\n")
92
 
 
93
 
    if req.username:
94
 
        # Only print app tabs if logged in
95
 
        print_apps_list(req, req.app)
96
 
    req.write('</div>\n<div id="ivlebody">\n')
97
 
 
98
 
def write_html_foot(req):
99
 
    """Writes the HTML footer, given a request object.
100
 
 
101
 
    req: An IVLE request object. Written to.
102
 
    """
103
 
    req.write("</div>\n</body>\n</html>\n")
104
 
 
105
 
def get_help_url(req):
106
 
    """Gets the help URL most relevant to this page, to place as the
107
 
    "help" link at the top of the page."""
108
 
    if req.app == 'help':
109
 
        # We're already in help. Link to the exact current page
110
 
        # instead of the generic help page.
111
 
        return req.uri
112
 
    if conf.apps.app_url[req.app].hashelp:
113
 
        help_path = os.path.join('help', req.app)
114
 
    else:
115
 
        help_path = 'help'
116
 
    return util.make_path(help_path)
117
 
 
118
 
def print_apps_list(file, thisapp):
119
 
    """Prints all app tabs, as a UL. Prints a list item for each app that has
120
 
    a tab.
121
 
 
122
 
    file: Object with a "write" method - ie. the request object.
123
 
    Reads from: conf
124
 
    """
125
 
    file.write('  <ul class="apptabs">\n')
126
 
 
127
 
    for urlname in conf.apps.apps_in_tabs:
128
 
        app = conf.apps.app_url[urlname]
129
 
        if urlname == thisapp:
130
 
            li_attr = ' class="thisapp"'
131
 
        else:
132
 
            li_attr = ''
133
 
        file.write('    <li%s>' % li_attr)
134
 
        if app.icon:
135
 
            file.write('<img src="%s" alt="" /> ' %
136
 
                util.make_path(os.path.join(conf.apps.app_icon_dir,
137
 
                app.icon)))
138
 
        file.write('<a href="%s">%s</a></li>\n'
139
 
            % (util.make_path(urlname), app.name))
140
 
 
141
 
    file.write('  </ul>\n')