91 lines
3.3 KiB
Python
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) |