11b6e68fe1
Django admin login to be used. Thus we should be able to upgrade to Django2.0
165 lines
5.9 KiB
Python
165 lines
5.9 KiB
Python
from django.shortcuts import render
|
|
from django.contrib.auth.decorators import permission_required, login_required
|
|
from django.views.decorators.http import require_http_methods
|
|
from django.views.decorators.csrf import ensure_csrf_cookie
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.core.mail import send_mail
|
|
from django.conf import settings
|
|
from django.utils.translation import ugettext as _
|
|
from django.forms.models import model_to_dict
|
|
|
|
import logging
|
|
import html
|
|
|
|
from members.views.utils import *
|
|
from members.tables import RequestTable
|
|
from members.forms import ApplicationForm
|
|
from members.views import error_view
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.read_application', raise_exception=True)
|
|
def application_list(request, *args, **kwargs):
|
|
"""List member applications not yet processed."""
|
|
applications = Request.objects.all()
|
|
application_count = len(applications)
|
|
table = RequestTable(applications,
|
|
request=request,
|
|
exclude=['id'],
|
|
attrs={'class': 'table table-bordered table-hover'})
|
|
|
|
table.paginate(page=request.GET.get('page', 1), per_page=25)
|
|
table_html = convert_table_to_html(table, request)
|
|
context = {
|
|
'table': table_html,
|
|
'application_count': application_count,
|
|
'notification': request.GET.get('notification', None)
|
|
}
|
|
return render(request, 'application_list.html', context)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.change_request', raise_exception=True)
|
|
def application_edit(request, *args, **kwargs):
|
|
"""Edit member request information."""
|
|
i = kwargs.pop('index', None)
|
|
if i is None:
|
|
return error_view(request, _('No application id specified'))
|
|
else:
|
|
application = Request.objects.get(id=i)
|
|
form = ApplicationForm(instance=application)
|
|
return render(
|
|
request,
|
|
'application_edit.html',
|
|
{'application_id': i, 'form': form})
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.add_member', raise_exception=True)
|
|
def application_accept(request, *args, **kwargs):
|
|
"""Accept application."""
|
|
id = request.POST.get('id', None)
|
|
if id is not None:
|
|
application = Request.objects.get(id=id)
|
|
else:
|
|
return error_view(request, _("Application missing 'id' field."))
|
|
|
|
form = ApplicationForm(request.POST, instance=application)
|
|
if form.is_valid():
|
|
try:
|
|
application = form.save()
|
|
|
|
if Member.objects.filter(email=application.email).exists():
|
|
return error_view(request, _(
|
|
'Email {} is already in use by a member. Application cannot be accepted.'
|
|
).format(application.email))
|
|
|
|
member = application.to_member()
|
|
member.save()
|
|
application.delete()
|
|
|
|
logging.info(
|
|
"Accepted application in member "
|
|
"register with the following info: {}"
|
|
.format(form))
|
|
notification = "{} {}.".format(_("Successfully accepted application"),
|
|
str(application))
|
|
return HttpResponseRedirect(
|
|
'/members/list?notification={}'.format(html.escape(notification)))
|
|
except Exception as ex:
|
|
logging.exception('Exception while accepting application')
|
|
return error_view(request, str(ex))
|
|
else:
|
|
logging.info(form)
|
|
return error_view(request, form.errors)
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.delete_request', raise_exception=True)
|
|
def application_delete(request, *args, **kwargs):
|
|
"""Delete member application."""
|
|
try:
|
|
id = request.POST['id']
|
|
except KeyError:
|
|
return error_view(request, _('No application id specified'))
|
|
|
|
try:
|
|
application = Request.objects.get(id=id)
|
|
notification = "{} {}.".format(_("Successfully deleted application"),
|
|
str(application))
|
|
application.delete()
|
|
logging.info(
|
|
"Delete application in member register with the following id: {}"
|
|
.format(id))
|
|
return HttpResponseRedirect(
|
|
'/members/applications?notification={}'
|
|
.format(html.escape(notification)))
|
|
except:
|
|
return error_view(request, _('Could not delete application object'))
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["GET"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.delete_request', raise_exception=True)
|
|
def application_delete_confirm(request, *args, **kwargs):
|
|
"""Confirm application deletion."""
|
|
i = kwargs.pop('index', None)
|
|
if i is None:
|
|
return error_view(request, _('No application id specified'))
|
|
else:
|
|
application = Request.objects.get(id=i)
|
|
form = ApplicationForm(instance=application)
|
|
return render(request,
|
|
'application_delete_confirm.html',
|
|
{'application_id': i, 'form': form})
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
def application_form(request, *args, **kwargs):
|
|
"""Render member application form."""
|
|
form = ApplicationForm()
|
|
return render(request, 'application_index.html', {'form': form})
|
|
|
|
|
|
@ensure_csrf_cookie
|
|
@require_http_methods(["POST"])
|
|
@login_required(login_url='/admin/login')
|
|
@permission_required('members.delete_request', raise_exception=True)
|
|
def application_submit(request, *args, **kwargs):
|
|
"""Submit member application"""
|
|
form = ApplicationForm(request.POST)
|
|
if form.is_valid():
|
|
form.save()
|
|
return render(request, 'application_success.html', {})
|
|
else:
|
|
return error_view(request, form.errors)
|