2020-09-06 09:08:37 +10:00

91 lines
3.3 KiB
Python

from django.shortcuts import render, get_object_or_404, redirect, resolve_url
from markdown2 import markdown
from datetime import datetime
from . import models, forms
from .decorators import check_allowed
import logging
logger = logging.getLogger(__name__)
def forbidden(request):
return render(request, 'interface/forbidden.html', {})
def register(request):
code = ''
try:
code = request.POST.get('code', request.GET['code'])
passphrase = request.POST.get('passphrase')
ensemble = models.Ensemble.objects.get(code=code)
if ensemble.password != passphrase:
raise ValueError("Incorrect passphase")
request.session['ensemble'] = ensemble.pk
return redirect('my_projects')
except:
logger.exception("Registration failed")
return render(request, 'interface/register.html', {'code': code})
@check_allowed
def my_projects(request):
ensemble = get_object_or_404(models.Ensemble, pk=request.ensemble_id)
context = {'ensemble': ensemble}
return render(request, 'interface/project_list.html', context)
@check_allowed
def project_page(request, project_id):
project = get_object_or_404(models.Project, pk=project_id, ensemble_id=request.ensemble_id)
context = {'project': project}
return render(request, 'interface/project.html', context)
@check_allowed
def wiki_page(request, project_id, wiki_id):
wiki = get_object_or_404(models.WikiPage, pk=wiki_id, project=project_id, project__ensemble=request.ensemble_id)
context = {'project': wiki.project, 'wiki': wiki, 'wiki_html': markdown(wiki.markdown)}
return render(request, 'interface/wiki.html', context)
@check_allowed
def submission(request, project_id):
project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id)
if request.method == 'POST':
form = forms.SubmissionForm(request.POST)
if form.is_valid():
s = form.save(commit=False)
s.project_id = project_id
s.save()
redirect = request.build_absolute_uri(resolve_url('complete_submission', project_id=project.pk, submission_id=s.pk))
upload = project.presigned_post(s.generate_key(),
fields={'success_action_redirect': redirect},
conditions=[["starts-with", "$success_action_redirect", ""]])
context = {'upload': upload, 'project': project, 'submission': s}
return render(request, 'interface/upload.html', context)
else:
form = forms.SubmissionForm()
context = {'project': project, 'form': form}
return render(request, 'interface/submission.html', context)
@check_allowed
def cancel_submission(request, project_id, submission_id):
project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id)
submission = project.submissions.get(pk=submission_id)
submission.delete()
return redirect('project', project_id=project_id)
@check_allowed
def complete_submission(request, project_id, submission_id):
project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id)
s = project.all_submissions.get(pk=submission_id)
s.complete = True
s.key = request.GET['key']
s.save()
return redirect('project', project_id=project_id)