djbrown/hbscorez

View on GitHub
src/users/views.py

Summary

Maintainability
A
0 mins
Test Coverage
D
60%
from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.decorators.http import require_POST
from django_registration.backends.activation.views import RegistrationView

from associations.models import Association
from leagues.models import Season
from players.models import Player
from teams.models import Team
from users.forms import LinkForm


class CaptchaRegistrationView(RegistrationView):
    def get_form(self, form_class=None):
        form = super().get_form(form_class=form_class)
        form.init_captcha(self.request)
        return form


@login_required
def profile(request):
    players = Player.objects.filter(user=request.user).order_by("-team__league__season__start_year")
    return render(request=request, template_name="users/profile.html", context={"players": players})


@login_required
def link(request):
    if request.method == "POST":
        form = LinkForm(request.POST)
        team = team_from_request_query(request.POST)
        if form.is_valid():
            player = form.cleaned_data.get("player")
            player.user = request.user
            player.published = True
            player.save()

            profile_url = reverse_lazy("users:profile")
            return HttpResponseRedirect(profile_url)

    else:
        form = LinkForm()
        team = team_from_request_query(request.GET)

    leagues = team.league.district.league_set.filter(season=team.league.season) if team else []

    return render(
        request=request,
        template_name="users/link.html",
        context={
            "form": form,
            "team": team,
            "leagues": leagues,
            "seasons": Season.objects.all(),
            "associations": Association.objects.all(),
        },
    )


@login_required
@require_POST
def unlink(request):
    player_pk = request.POST.get("player")
    if player_pk is not None:
        player = Player.objects.get(pk=player_pk)
        if player.user == request.user:
            player.published = False
            player.save()

    profile_url = reverse_lazy("users:profile")
    return HttpResponseRedirect(profile_url)


def team_from_request_query(query):
    team_bhv_id = query.get("team_bhv_id")
    try:
        return Team.objects.get(bhv_id=team_bhv_id)
    except ObjectDoesNotExist:
        return None


class Link(auth_views.LoginView):
    template_name = "users/login.html"
    redirect_authenticated_user = True


class Login(auth_views.LoginView):
    template_name = "users/login.html"
    redirect_authenticated_user = True


class Logout(auth_views.LogoutView):
    template_name = "users/logout.html"


class PasswordChange(auth_views.PasswordChangeView):
    success_url = reverse_lazy("users:password_change_success")
    template_name = "users/password-change.html"


class PasswordChangeSuccess(auth_views.PasswordChangeDoneView):
    template_name = "users/password-change-success.html"


class PasswordReset(auth_views.PasswordResetView):
    email_template_name = "users/password-reset-email.html"
    subject_template_name = "users/password-reset-email-subject.txt"
    success_url = reverse_lazy("users:password_reset_sent")
    template_name = "users/password-reset.html"


class PasswordResetSent(auth_views.PasswordResetDoneView):
    template_name = "users/password-reset-sent.html"


class PasswordResetChange(auth_views.PasswordResetConfirmView):
    success_url = reverse_lazy("users:password_reset_success")
    template_name = "users/password-reset-change.html"


class PasswordResetSuccess(auth_views.PasswordResetCompleteView):
    template_name = "users/password-reset-success.html"