|
@@ 378-401 (lines=24) @@
|
| 375 |
|
.replace("#LASTNAME#", user.last_name.strip()) \ |
| 376 |
|
.replace("#COURSENAME#", course.title.strip()) |
| 377 |
|
|
| 378 |
|
|
| 379 |
|
@login_required |
| 380 |
|
@staff_member_required |
| 381 |
|
def mail2all(request, course_id): |
| 382 |
|
course = get_object_or_404(Course, pk=course_id) |
| 383 |
|
# Re-compute list of recipients on every request, for latest updates |
| 384 |
|
students = User.objects.filter(profile__courses__pk=course_id) |
| 385 |
|
maillist = ','.join(students.values_list('email', flat=True)) |
| 386 |
|
|
| 387 |
|
if request.method == "POST": |
| 388 |
|
if 'subject' in request.POST and 'message' in request.POST: |
| 389 |
|
# Initial form submission, render preview |
| 390 |
|
request.session['subject'] = request.POST['subject'] |
| 391 |
|
request.session['message'] = request.POST['message'] |
| 392 |
|
student = students[0] |
| 393 |
|
preview_subject = _replace_placeholders( |
| 394 |
|
request.POST['subject'], student, course) |
| 395 |
|
preview_message = _replace_placeholders( |
| 396 |
|
request.POST['message'], student, course) |
| 397 |
|
return render(request, 'mail_preview.html', |
| 398 |
|
{'preview_subject': preview_subject, |
| 399 |
|
'preview_message': preview_message, |
| 400 |
|
'preview_from': request.user.email, |
| 401 |
|
'course': course}) |
| 402 |
|
elif 'subject' in request.session and 'message' in request.session: |
| 403 |
|
# Positive preview, send it |
| 404 |
|
data = [(_replace_placeholders(request.session['subject'], s, course), |
|
@@ 404-425 (lines=22) @@
|
| 401 |
|
'course': course}) |
| 402 |
|
elif 'subject' in request.session and 'message' in request.session: |
| 403 |
|
# Positive preview, send it |
| 404 |
|
data = [(_replace_placeholders(request.session['subject'], s, course), |
| 405 |
|
_replace_placeholders( |
| 406 |
|
request.session['message'], s, course), |
| 407 |
|
request.user.email, |
| 408 |
|
[s.email]) for s in students] |
| 409 |
|
sent = send_mass_mail(data, fail_silently=True) |
| 410 |
|
messages.add_message(request, messages.INFO, |
| 411 |
|
'%u message(s) sent.' % sent) |
| 412 |
|
return redirect('teacher:index') |
| 413 |
|
|
| 414 |
|
# show empty form in all other cases |
| 415 |
|
mailform = MailForm() |
| 416 |
|
return render(request, 'mail_form.html', {'maillist': maillist, 'course': course, 'mailform': mailform}) |
| 417 |
|
|
| 418 |
|
|
| 419 |
|
@login_required |
| 420 |
|
@staff_member_required |
| 421 |
|
def coursearchive(request, course_id): |
| 422 |
|
''' |
| 423 |
|
Provides all course submissions and their information as archive download. |
| 424 |
|
For archiving purposes, since withdrawn submissions are included. |
| 425 |
|
''' |
| 426 |
|
output = io.BytesIO() |
| 427 |
|
z = zipfile.ZipFile(output, 'w') |
| 428 |
|
|