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

« back to all changes in this revision

Viewing changes to www/apps/help/__init__.py

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE
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
 
# App: help
19
 
# Author: Matt Giuca
20
 
# Date: 12/12/2007
21
 
 
22
 
# This is an IVLE application.
23
 
# A sample / testing application for IVLE.
24
 
 
25
 
import os
26
 
import copy
27
 
 
28
 
from ivle import util
29
 
import ivle.conf
30
 
 
31
 
import genshi
32
 
import genshi.template
33
 
 
34
 
# TODO: Nicer 404 errors
35
 
 
36
 
def handle(req):
37
 
    """Handler for the Help application."""
38
 
    (appurl, subpath) = util.split_path(req.path)
39
 
 
40
 
    if appurl is None:
41
 
        show_help_menu(req)
42
 
    else:
43
 
        # app must be valid and have help available
44
 
        if appurl not in ivle.conf.apps.app_url:
45
 
            req.throw_error(req.HTTP_NOT_FOUND)
46
 
        app = ivle.conf.apps.app_url[appurl]
47
 
        if not app.hashelp:
48
 
            req.throw_error(req.HTTP_NOT_FOUND)
49
 
        # subpath must be empty, for now, as there is only one help file per app
50
 
        if subpath != "":
51
 
            req.throw_error(req.HTTP_NOT_FOUND)
52
 
        show_help_app(req, app)
53
 
 
54
 
def show_help_menu(req):
55
 
    """Show the help menu."""
56
 
    # Set request attributes
57
 
    req.content_type = "text/html"
58
 
    req.write_html_head_foot = True
59
 
 
60
 
    ctx = genshi.template.Context()
61
 
 
62
 
    # Write a list of links to all apps with help modules
63
 
    ctx['apps'] = []
64
 
    # Tab apps, in order of tabs
65
 
    for appurl in ivle.conf.apps.apps_in_tabs:
66
 
        app = ivle.conf.apps.app_url[appurl]
67
 
        if app.hashelp:
68
 
            new_app = {}
69
 
            new_app['appurl'] = os.path.join(util.make_path("help"), appurl)
70
 
            new_app['name'] = app.name
71
 
            ctx['apps'].append(new_app)
72
 
    # Terms of Service
73
 
    ctx['tos'] = util.make_path("tos")
74
 
 
75
 
    loader = genshi.template.TemplateLoader(".", auto_reload=True)
76
 
    tmpl = loader.load(util.make_local_path("apps/help/template.html"))
77
 
    req.write(tmpl.generate(ctx).render('html')) #'xhtml', doctype='xhtml'))
78
 
 
79
 
def show_help_app(req, app):
80
 
    """Show help for an application."""
81
 
    helpfile = os.path.join(util.make_local_path("apps"), app.dir, "help.html")
82
 
 
83
 
    # Set request attributes
84
 
    req.content_type = "text/html"
85
 
    req.write_html_head_foot = True
86
 
    req.styles = ["media/help/help.css"]
87
 
 
88
 
    # Start writing data
89
 
    req.write('<div id="ivle_padding">\n')
90
 
    req.write("<h1>Help - %s</h1>\n" % app.name)
91
 
 
92
 
    # Print out the contents of the HTML help file
93
 
    req.sendfile(helpfile)
94
 
    req.write('</div>\n')