111 lines
4.1 KiB
Python
111 lines
4.1 KiB
Python
import os
|
|
import random
|
|
from django import get_version as django_version
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.contrib.auth import login, authenticate, logout
|
|
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib import messages
|
|
from django import forms
|
|
from .models import Profile, Photo
|
|
from django.utils import timezone
|
|
from django.contrib.auth.models import User
|
|
|
|
class WarwickRegistrationForm(UserCreationForm):
|
|
email = forms.EmailField(required=True, help_text="Enter your @warwick.ac.uk email address")
|
|
|
|
def clean_email(self):
|
|
email = self.cleaned_data.get('email')
|
|
if not email.endswith("@warwick.ac.uk"):
|
|
raise forms.ValidationError("You must use a @warwick.ac.uk email address to register.")
|
|
if User.objects.filter(email=email).exists():
|
|
raise forms.ValidationError("This email is already in use.")
|
|
return email
|
|
|
|
def save(self, commit=True):
|
|
user = super().save(commit=False)
|
|
user.email = self.cleaned_data['email']
|
|
if commit:
|
|
user.save()
|
|
return user
|
|
|
|
class ProfileEditForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Profile
|
|
fields = ['course', 'year', 'location', 'looking_for', 'bio']
|
|
widgets = {
|
|
'course': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. Computer Science'}),
|
|
'year': forms.Select(attrs={'class': 'form-select'}),
|
|
'location': forms.Select(attrs={'class': 'form-select'}),
|
|
'looking_for': forms.Select(attrs={'class': 'form-select'}),
|
|
'bio': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Tell others a bit about yourself...'}),
|
|
}
|
|
|
|
def home(request):
|
|
if request.user.is_authenticated:
|
|
return redirect('dashboard')
|
|
return render(request, "core/index.html")
|
|
|
|
def register(request):
|
|
if request.method == 'POST':
|
|
form = WarwickRegistrationForm(request.POST)
|
|
if form.is_valid():
|
|
user = form.save()
|
|
login(request, user)
|
|
messages.success(request, "Welcome to Warwick Connect! Please complete your profile.")
|
|
return redirect('profile_edit')
|
|
else:
|
|
form = WarwickRegistrationForm()
|
|
return render(request, 'core/register.html', {'form': form})
|
|
|
|
@login_required
|
|
def profile_edit(request):
|
|
profile = request.user.profile
|
|
if request.method == 'POST':
|
|
form = ProfileEditForm(request.POST, instance=profile)
|
|
if form.is_valid():
|
|
form.save()
|
|
messages.success(request, "Profile updated successfully!")
|
|
return redirect('dashboard')
|
|
else:
|
|
form = ProfileEditForm(instance=profile)
|
|
return render(request, 'core/profile_edit.html', {'form': form, 'profile': profile})
|
|
|
|
@login_required
|
|
def dashboard(request):
|
|
all_profiles = Profile.objects.exclude(user=request.user)
|
|
|
|
if not request.user.profile.is_subscribed:
|
|
profiles_list = list(all_profiles)
|
|
if len(profiles_list) > 12:
|
|
visible_profiles = random.sample(profiles_list, 12)
|
|
locked_profiles = [p for p in profiles_list if p not in visible_profiles]
|
|
else:
|
|
visible_profiles = profiles_list
|
|
locked_profiles = []
|
|
else:
|
|
visible_profiles = all_profiles
|
|
locked_profiles = []
|
|
|
|
context = {
|
|
'visible_profiles': visible_profiles,
|
|
'locked_profiles': locked_profiles,
|
|
'is_subscribed': request.user.profile.is_subscribed,
|
|
}
|
|
return render(request, 'core/dashboard.html', context)
|
|
|
|
def login_view(request):
|
|
if request.method == 'POST':
|
|
form = AuthenticationForm(request, data=request.POST)
|
|
if form.is_valid():
|
|
user = form.get_user()
|
|
login(request, user)
|
|
return redirect('dashboard')
|
|
else:
|
|
form = AuthenticationForm()
|
|
return render(request, 'core/login.html', {'form': form})
|
|
|
|
def logout_view(request):
|
|
logout(request)
|
|
return redirect('home')
|