96 lines
3.8 KiB
Python
96 lines
3.8 KiB
Python
from django.shortcuts import render, redirect
|
|
from django.urls import reverse_lazy
|
|
from django.views.generic.edit import CreateView
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
|
|
from django.contrib.auth import views as auth_views
|
|
from .forms import InvitationCodeForm, CustomUserCreationForm, CustomUserChangeForm, PlayerCreationForm
|
|
from .models import CustomUser, InvitationCode
|
|
import uuid
|
|
|
|
def invitation_code_view(request):
|
|
if request.method == 'POST':
|
|
form = InvitationCodeForm(request.POST)
|
|
if form.is_valid():
|
|
code = form.cleaned_data['code']
|
|
request.session['invitation_code'] = code
|
|
return redirect('register')
|
|
else:
|
|
form = InvitationCodeForm()
|
|
return render(request, 'accounts/invitation_code.html', {'form': form})
|
|
|
|
def register_view(request):
|
|
invitation_code_str = request.session.get('invitation_code')
|
|
if not invitation_code_str:
|
|
return redirect('invitation_code')
|
|
|
|
try:
|
|
invitation_code = InvitationCode.objects.get(code=invitation_code_str)
|
|
if not invitation_code.is_valid():
|
|
# Handle invalid code, maybe redirect with a message
|
|
return redirect('invitation_code')
|
|
except InvitationCode.DoesNotExist:
|
|
return redirect('invitation_code')
|
|
|
|
|
|
if request.method == 'POST':
|
|
form = CustomUserCreationForm(request.POST)
|
|
if form.is_valid():
|
|
user = form.save(commit=False)
|
|
user.set_password(form.cleaned_data['password'])
|
|
user.save()
|
|
invitation_code.is_active = False
|
|
invitation_code.user = user
|
|
invitation_code.save()
|
|
# Log the user in and redirect to the dashboard
|
|
return redirect('login') # Or wherever you want to redirect after registration
|
|
else:
|
|
form = CustomUserCreationForm()
|
|
return render(request, 'accounts/register.html', {'form': form})
|
|
|
|
@login_required
|
|
def edit_profile(request):
|
|
if request.method == 'POST':
|
|
form = CustomUserChangeForm(request.POST, instance=request.user)
|
|
if form.is_valid():
|
|
form.save()
|
|
return redirect('edit_profile') # Or wherever you want to redirect
|
|
else:
|
|
form = CustomUserChangeForm(instance=request.user)
|
|
return render(request, 'accounts/edit_profile.html', {'form': form})
|
|
|
|
class HeadCoachCheckMixin(UserPassesTestMixin):
|
|
def test_func(self):
|
|
return self.request.user.is_superuser or self.request.user.coached_teams.exists()
|
|
|
|
class PlayerCreateView(LoginRequiredMixin, HeadCoachCheckMixin, CreateView):
|
|
model = CustomUser
|
|
form_class = PlayerCreationForm
|
|
template_name = 'accounts/player_form.html'
|
|
success_url = reverse_lazy('dashboard')
|
|
|
|
def form_valid(self, form):
|
|
# Create player user
|
|
player = form.save(commit=False)
|
|
player.is_active = False # Player can only login after using invitation code
|
|
player.save()
|
|
|
|
# Create invitation code for player
|
|
InvitationCode.objects.create(code=str(uuid.uuid4()), user=player)
|
|
|
|
# Create parent users and invitation codes
|
|
for email_field in ['parent1_email', 'parent2_email']:
|
|
email = form.cleaned_data.get(email_field)
|
|
if email:
|
|
parent_user = CustomUser.objects.filter(email=email).first()
|
|
if not parent_user:
|
|
parent_user = CustomUser.objects.create(email=email, username=email, is_active=False)
|
|
InvitationCode.objects.create(code=str(uuid.uuid4()), user=parent_user)
|
|
|
|
return redirect(self.success_url)
|
|
|
|
class MyLoginView(auth_views.LoginView):
|
|
def get(self, request, *args, **kwargs):
|
|
if request.user.is_authenticated:
|
|
return redirect('dashboard')
|
|
return super().get(request, *args, **kwargs) |