''' invites when registration is closed ''' from django.contrib.auth.decorators import login_required, permission_required from django.core.paginator import Paginator from django.http import HttpResponseBadRequest from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator from django.views import View from bookwyrm import forms, models from bookwyrm.settings import PAGE_LENGTH # pylint: disable= no-self-use @method_decorator(login_required, name='dispatch') @method_decorator( permission_required('bookwyrm.create_invites', raise_exception=True), name='dispatch') class ManageInvites(View): ''' create invites ''' def get(self, request): ''' invite management page ''' try: page = int(request.GET.get('page', 1)) except ValueError: page = 1 paginated = Paginator(models.SiteInvite.objects.filter( user=request.user ).order_by('-created_date'), PAGE_LENGTH) data = { 'invites': paginated.page(page), 'form': forms.CreateInviteForm(), } return TemplateResponse(request, 'settings/manage_invites.html', data) def post(self, request): ''' creates an invite database entry ''' form = forms.CreateInviteForm(request.POST) if not form.is_valid(): return HttpResponseBadRequest("ERRORS : %s" % (form.errors,)) invite = form.save(commit=False) invite.user = request.user invite.save() paginated = Paginator(models.SiteInvite.objects.filter( user=request.user ).order_by('-created_date'), PAGE_LENGTH) data = { 'invites': paginated.page(1), 'form': form } return TemplateResponse(request, 'settings/manage_invites.html', data) class Invite(View): ''' use an invite to register ''' def get(self, request, code): ''' endpoint for using an invites ''' if request.user.is_authenticated: return redirect('/') invite = get_object_or_404(models.SiteInvite, code=code) data = { 'register_form': forms.RegisterForm(), 'invite': invite, 'valid': invite.valid() if invite else True, } return TemplateResponse(request, 'invite.html', data) # post handling is in views.authentication.Register