106 lines
3.8 KiB
Python
106 lines
3.8 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):
|
|
|
|
request.ensemble_id = request.session.get('ensemble')
|
|
registered = request.session.setdefault('registered', {})
|
|
|
|
if request.method == "POST":
|
|
form = forms.CodeForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
|
|
data = form.cleaned_data;
|
|
ensemble = models.Ensemble.objects.get(code=data['code'].replace('-', ''))
|
|
|
|
|
|
if ensemble.passphrase == data['passphrase']:
|
|
request.session['ensemble'] = ensemble.pk
|
|
registered[ensemble.code] = ensemble.pk
|
|
return redirect('my_projects')
|
|
|
|
else:
|
|
form = forms.CodeForm(initial=request.GET)
|
|
|
|
current = models.Ensemble.objects.filter(pk__in=registered.values())
|
|
|
|
return render(request, 'interface/register.html', {'form': form, 'current': current})
|
|
|
|
|
|
@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()
|
|
|
|
data = form.cleaned_data
|
|
request.session['name'] = data['name']
|
|
request.session['instrument'] = data['instrument']
|
|
|
|
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:
|
|
initial = { k: request.session.get(k) for k in ('name', 'instrument') }
|
|
form = forms.SubmissionForm(initial=initial)
|
|
|
|
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.all_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) |