Source code for boardinghouse.contrib.invite.views

from django.views import generic

from .forms import AcceptForm, DeclineForm, InvitePersonForm
from .models import Invitation


class UserMixin(object):
    def get_form_kwargs(self):
        kwargs = super(UserMixin, self).get_form_kwargs()
        kwargs.update(user=self.request.user)
        return kwargs


[docs]class InvitePerson(UserMixin, generic.CreateView): form_class = InvitePersonForm template_name = 'invite/new.html' # Hmm. We really need a reverse_lazy here, methinks. success_url = '/admin/invite/invitation/'
invite_person = InvitePerson.as_view() class InvitationMixin(object): redeemed_template_name = 'invite/redeemed.html' expired_template_name = 'invite/expired.html' def get_object(self): return Invitation.objects.get(**self.kwargs) def get_template_names(self): if self.object.redeemed: return self.redeemed_template_name if self.object.expired: return self.expired_template_name return [self.template_name] class ViewInvitation(InvitationMixin, generic.DetailView): template_name = 'invite/view.html' view_invitation = ViewInvitation.as_view() class AcceptInvitation(ViewInvitation): template_name = 'invite/confirm.html' def post(self, request, *args, **kwargs): return self.get(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(AcceptInvitation, self).get_context_data(**kwargs) # Need to do this, in case RequestContext is not in context processors. context['logged_in'] = not self.request.user.is_anonymous() return context # Maybe have the accept-with-this-account, login-and-accept, register-new-account forms as options? accept_invitation = AcceptInvitation.as_view()
[docs]class ConfirmInvitation(InvitationMixin, UserMixin, generic.UpdateView): form_class = AcceptForm success_url = '/admin/invite/invitation/'
confirm_invitation = ConfirmInvitation.as_view() class LoginAndAcceptView(object): pass class RegisterAndAcceptView(object): pass
[docs]class DeclineInvitation(InvitationMixin, generic.UpdateView): form_class = DeclineForm success_url = '/admin/invite/invitation/'
decline_invitation = DeclineInvitation.as_view() class PendingReceivedInvitations(generic.ListView): template_name = 'invite/list.html' def get_queryset(self): return Invitation.objects.for_email(self.request.user.email).pending() pending_received_invitations = PendingReceivedInvitations.as_view() class PendingSentInvitations(generic.ListView): template_name = 'invite/list.html' def get_queryset(self): return self.request.user.sent_invitations.pending() pending_sent_invitations = PendingSentInvitations.as_view() class RedeemedOrExpiredInvitations(generic.ListView): template_name = 'invite/list.html' def get_queryset(self): return self.request.user.sent_invitations.not_pending() redeemed_or_expired_invitations = RedeemedOrExpiredInvitations.as_view()