1
<html xmlns="http://www.w3.org/1999/xhtml"
2
xmlns:py="http://genshi.edgewall.org/">
4
<title>${context.subject.name} (${context.semester.year} semester ${context.semester.semester})</title>
7
<h1>${context.subject.name}</h1>
8
<div id="ivle_padding">
9
<div class="contextactions">
10
<a py:if="'edit' in permissions"
12
href="${req.publisher.generate(context, OfferingEdit)}">
15
<a py:if="'enrol' in permissions"
17
href="${req.publisher.generate(context, None, ('+enrolments', '+new'))}">
22
<div py:if="context.description" style="margin-bottom: 1em;">
23
<div style="margin-bottom: 0.5em;">${context.description}</div>
24
<a py:if="context.url" class="webaction" href="${context.url}">Home page</a>
27
<div py:if="'edit' in permissions or context.projects.count() > 0"
30
<py:choose test="context.projects.count()">
32
There are no projects for this offering.
35
<ul class="paddedlist">
36
<li py:for="project in context.projects"
37
py:attrs="{'class': 'project closed'}
38
if project.has_deadline_passed(req.user)
39
else {'class': 'project'}"
40
py:with="principal = project.project_set.get_submission_principal(req.user)">
41
<py:choose test="project.url not in (None, '')">
42
<a py:when="True" href="${project.url}">${project.name}</a>
43
<span py:otherwise="">${project.name}</span>
46
<span py:content="format_submission_principal(req.user, principal)" /> –
47
<!-- XXX This deadline does not take the student's extensions into account. -->
48
<span title="${'Closed' if project.has_deadline_passed(req.user) else 'Due'}: ${format_datetime(project.deadline)}">
49
${'closed' if project.has_deadline_passed(req.user) else 'due'} ${format_datetime_short(project.deadline)}
51
<py:if test="principal is not None"
52
py:with="submissions = project.get_submissions_for_principal(principal)">
54
<py:choose test="submissions.count()">
59
py:with="latest = submissions.last()"
60
title="Submitted: ${format_datetime(latest.date_submitted)}">
61
last submitted ${format_datetime_short(latest.date_submitted)}
62
<a class="verifyaction" href="${latest.get_verify_url(req.user)}">Verify</a>
68
<py:if test="'view_project_submissions' in permissions">
70
<a class="verifyaction" href="${req.publisher.generate(project)}">View submissions</a>
71
<a py:if="project.project_set.is_group" class="manageaction"
72
href="${req.publisher.generate(project.project_set, GroupsView)}">Manage groups</a>
76
<py:if test="context.get_open_projects_for_user(req.user).count() > 0">
78
To submit to a project that has not yet closed, use the file
79
browser to navigate to the file or directory that you wish to
80
submit, click “More actions...”,
81
“Submit”, and then select the correct project.
84
If the project to which you intend to submit is not listed,
85
ensure that you are in the correct directory, or a subdirectory
86
thereof. For solo projects, you must be inside the subject's
87
“mywork” directory. For group projects, you must be
88
inside the directory for the assigned group.
91
You may resubmit a project as you wish until the deadline, but
92
a new submission will overwrite any made earlier.
98
<a py:if="'edit' in permissions"
100
href="${req.publisher.generate(context, None, '+projects')}">
105
<div py:if="'edit_worksheets' in permissions or context.worksheets.count() > 0"
106
class="majorsection">
108
<py:choose test="context.worksheets.count()">
110
There are no worksheets for this offering.
111
<a class="addaction" href="${req.publisher.generate(context, None, ('+worksheets', '+new'))}">Create one now</a>
113
<div py:otherwise="">
114
<ul id="tutorial-toc">
115
<py:for each="worksheet in worksheets">
117
<!-- Can't generate a URL directly to the worksheet, since this is a fake worksheet. -->
118
<a href="${req.publisher.generate(context)}/+worksheets/${worksheet.id}">${worksheet.name}</a>
119
<py:if test="worksheet.assessable">
121
<li class="${worksheet.complete_class}">
122
Completed ${worksheet.mand_done}/${worksheet.total}${worksheet.optional_message}
129
<py:if test="exercises_total > 0">
131
<li class="${worksheets_complete_class}">
132
Total exercises completed: ${exercises_done}/${exercises_total} (${exercises_pct}%)
136
<span style="font-weight: bold;">Mark:</span> ${worksheet_mark}/${worksheet_max_mark}
139
<span py:if="'edit_worksheets' in permissions">
140
<a class="manageaction" href="${req.publisher.generate(context, None, ('+worksheets', '+edit'))}"> Manage worksheets</a>
142
<a class="manageaction" href="/+exercises">Manage exercises</a>