views.py
1 |
|
2 |
import datetime |
3 |
from django.urls import reverse # Why? |
4 |
from django.utils.translation import gettext as _ |
5 |
from .models import * |
6 |
from .forms import * |
7 |
import administration |
8 |
from django.contrib.auth.decorators import login_required |
9 |
from joeni.constants import current_academic_year |
10 |
|
11 |
@login_required |
12 |
def index(request): |
13 |
""" Starting page regarding the courses. This serves two specific groups: |
14 |
- Students: Displays all courses that this student has in his/her curriculum |
15 |
for this academic year. Requires the curriculum to be accepted. |
16 |
- Staff: Displays all courses in which the staff member is part of the |
17 |
educating team, or is otherwise related to the course. |
18 |
Users who are not logged in will be sent to the login page. |
19 |
""" |
20 |
template = "courses/index.djhtml" |
21 |
courses = request.user.user_data.current_courses() |
22 |
|
23 |
context = { |
24 |
'courses': courses, |
25 |
} |
26 |
|
27 |
return render(request, template, context) |
28 |
|
29 |
@login_required |
30 |
def course(request, course_slug): |
31 |
template = "courses/course.djhtml" |
32 |
course_ = Course.objects.get(slug_name=course_slug) |
33 |
|
34 |
if request.method == 'POST': |
35 |
uploads = UploadFormSet(request.POST, request.FILES, prefix='uploads') |
36 |
if uploads.is_valid(): |
37 |
uploads.save(commit=False) |
38 |
for new_upload in uploads.new_objects: |
39 |
new_upload.course = course_ |
40 |
uploads.save() |
41 |
request.method = 'GET' |
42 |
return course(request, course_slug) |
43 |
else: |
44 |
uploads = UploadFormSet( |
45 |
queryset=Upload.objects.filter(course=course_).filter(student=request.user), |
46 |
prefix="uploads", |
47 |
) |
48 |
# Check if user can see this page |
49 |
if request.user.user_data.is_student: |
50 |
if course_ not in request.user.user_data.current_courses(): |
51 |
""" I'm currently just redirecting to the index page, but maybe it's |
52 |
just as good to make an announcement that this course cannot be |
53 |
used by this user. """ |
54 |
return index(request) |
55 |
|
56 |
context = { |
57 |
'course': course_, |
58 |
'main_color': course_.color, |
59 |
'announcements': Announcement.objects.filter(course=course_), |
60 |
'assignments': Assignment.objects.filter(course=course_), |
61 |
'course_items': CourseItem.objects.filter(course=course_), |
62 |
'study-groups': StudyGroup.objects.filter(course=course_), |
63 |
#'uploads': Upload.objects.filter(course=course).filter(student=request.user) |
64 |
} |
65 |
if request.user.user_data.is_student: |
66 |
context['upload_form'] = UploadForm() |
67 |
#else: |
68 |
context['student_list'] = administration.models.CourseResult.objects.filter(course_programme__course=course_)#.filter(year=current_academic_year()), |
69 |
# FIXME I disabled the year filter for testing purposes. Enable in deployment. |
70 |
|
71 |
return render(request, template, context) |
72 |
|
73 |
# TODO: Find a way to see if it's possible to require some permissions and to |
74 |
# put them in a decorator |
75 |
#@permission_required |
76 |
@login_required |
77 |
def new_item(request, course_slug): |
78 |
template = "courses/new_item.djhtml" |
79 |
course = Course.objects.get(slug_name=course_slug) |
80 |
|
81 |
if request.user.user_data.is_student or request.user not in course.course_team: |
82 |
# Students can't add new items. Redirect to index |
83 |
# Also redirect people who are not part of the course team |
84 |
redirect('courses-index') |
85 |
# Now able to assume user is allowed to add items to this course |
86 |
|
87 |
context = { |
88 |
'course': course, |
89 |
'announcements': Announcement.objects.filter(course=course), |
90 |
'assignments': Assignment.objects.filter(course=course), |
91 |
'course-items': CourseItem.objects.filter(course=course), |
92 |
'study-groups': StudyGroup.objects.filter(course=course), |
93 |
'uploads': Upload.objects.filter(course=course) |
94 |
} |
95 |
return render(request, template, context) |
96 |
|
97 |
def upload(request): |
98 |
return render(request, template, context) |
99 |
|
100 |
#@create_context # TODO |
101 |
@login_required |
102 |
def course_results(request, course_slug): |
103 |
template = "courses/course_results.djhtml" |
104 |
context = dict() |
105 |
course_ = Course.objects.get(slug_name=course_slug) |
106 |
if request.method == 'POST': |
107 |
course_results = CourseResultFormSet(request.POST, prefix='course_results') |
108 |
if course_results.is_valid(): |
109 |
course_results.save() |
110 |
request.method = 'GET' |
111 |
return course(request, course_slug) |
112 |
else: |
113 |
course_results = CourseResultFormSet( |
114 |
#queryset=administration.models.CourseResult.objects.filter(course_programme__course=course_).filter(year=current_academic_year()), |
115 |
queryset=administration.models.CourseResult.objects.filter(course_programme__course=course_), |
116 |
prefix="course_results", |
117 |
) |
118 |
|
119 |
context['course'] = course_ |
120 |
context['course_results'] = course_results |
121 |
return render(request, template, context) |
122 |
|
123 |
@login_required |
124 |
def course_attendance(request, course_slug): |
125 |
template = "courses/attendance.djhtml" |
126 |
context = dict() |
127 |
course = Course.objects.get(slug_name=course_slug) |
128 |
context['course'] = course |
129 |
context['student_list'] = administration.models.CourseResult.objects.filter(course_programme__course=course)#.filter(year=current_academic_year()), |
130 |
return render(request, template, context) |
131 |
|
132 |
@login_required |
133 |
def edit_course_items(request, course_slug): |
134 |
# TODO Only allow people on the course team to this page! |
135 |
template = "courses/edit_course_items.djhtml" |
136 |
context = dict() |
137 |
course_ = Course.objects.get(slug_name=course_slug) |
138 |
if request.method == 'POST': |
139 |
assignments = AssignmentFormSet(request.POST, prefix='assignments') |
140 |
announcements = AnnouncementFormSet(request.POST, prefix='announcements') |
141 |
course_items = CourseItemFormSet(request.POST, request.FILES, prefix='course_items') |
142 |
#course_results = CourseResultFormSet(request.POST, prefix='course_results') |
143 |
if assignments.is_valid() and announcements.is_valid() and course_items.is_valid(): #and course_results.is_valid(): |
144 |
assignments.save(commit=False) |
145 |
announcements.save(commit=False) |
146 |
course_items.save(commit=False) |
147 |
#course_results.save(commit=False) |
148 |
for new_assignment in assignments.new_objects: |
149 |
new_assignment.course = course_ |
150 |
for new_announcement in announcements.new_objects: |
151 |
new_announcement.course = course_ |
152 |
for new_course_item in course_items.new_objects: |
153 |
new_course_item.course = course_ |
154 |
#for new_course_result in course_results.new_objects: |
155 |
#new_coutse_result.course = course_ |
156 |
assignments.save() |
157 |
announcements.save() |
158 |
course_items.save() |
159 |
#course_results.save() |
160 |
request.method == 'GET' |
161 |
return course(request, course_slug) |
162 |
else: |
163 |
assignments = AssignmentFormSet( |
164 |
queryset=Assignment.objects.filter(course=course_), |
165 |
prefix="assignments", |
166 |
) |
167 |
announcements = AnnouncementFormSet( |
168 |
queryset=Announcement.objects.filter(course=course_), |
169 |
prefix="announcements", |
170 |
) |
171 |
course_items = CourseItemFormSet( |
172 |
queryset=CourseItem.objects.filter(course=course_), |
173 |
prefix="course_items", |
174 |
) |
175 |
#course_results = CourseResultFormSet( |
176 |
#queryset=administration.models.CourseResult.objects.filter(course_programme__course=course_).filter(year=current_academic_year()), |
177 |
#prefix="course_results", |
178 |
#) |
179 |
|
180 |
context['course'] = course_ |
181 |
context['assignments'] = assignments |
182 |
context['announcements'] = announcements |
183 |
context['course_items'] = course_items |
184 |
#context['course_results'] = course_results |
185 |
return render(request, template, context) |
186 |
|
187 |
|
188 |
|
189 |
@login_required |
190 |
def groups(request): |
191 |
pass |
192 |
|
193 |
def fiche(request, course_slug): |
194 |
"""Displays the fiche for the given course. Includes information about all |
195 |
course programs.""" |
196 |
template = "courses/fiche.djhtml" |
197 |
context = dict() |
198 |
course = Course.objects.get(slug_name=course_slug) |
199 |