from django.shortcuts import render, redirect from django.contrib.auth.decorators import login_required from django.views.generic import ListView from django.contrib import messages from django.contrib.auth.models import User from .forms import ( UserUpdateForm, StudentUpdateForm, TeacherUpdateForm, ClassCreationForm, ) from api.models import Student, Teacher, Class, Assignment # Create your views here. @login_required() def home (request): try: student = request.user.student return render(request, "skoolos/home.html", {'classes': student.confirmed.all(), 'isTeacher': False}) except Student.DoesNotExist: pass try: teacher = request.user.teacher return render(request, "skoolos/home.html", {'classes': teacher.classes.all(), 'isTeacher': True}) except Teacher.DoesNotExist: pass return render(request, "skoolos/home.html") @login_required() def profile (request): pass @login_required() def classDetail (request, id): classObj = Class.objects.get(id=id) try: student = request.user.student except Student.DoesNotExist: pass else: if classObj.confirmed.filter(user=student.user).count() != 1: return redirect('/') else: return render(request, "skoolos/class_detail.html", {'class': classObj,'assignments': classObj.assignments.all(), 'teachers': classObj.classes.all(), 'isTeacher': False}) try: teacher = request.user.teacher except Teacher.DoesNotExist: pass else: if teacher.classes.filter(id=classObj.id).count() != 1: return redirect('/') else: return render(request, "skoolos/class_detail.html", {'class': classObj,'assignments': classObj.assignments.all(), 'teachers': classObj.classes.all(), 'isTeacher': True}) return redirect('/') @login_required() def profile (request): try: student = request.user.student return student_profile(request) except Student.DoesNotExist: pass try: teacher = request.user.teacher return teacher_profile(request) except Teacher.DoesNotExist: pass return redirect("/") def student_profile (request): if request.method == "POST": userForm = UserUpdateForm(request.POST, instance=request.user) profileForm = StudentUpdateForm(request.POST, instance=request.user.student) if userForm.is_valid() and profileForm.is_valid(): userForm.save() profileForm.save() messages.success(request, "Your account has been updated!") return redirect('profile') else: userForm = UserUpdateForm(instance=request.user) profileForm = StudentUpdateForm(instance=request.user.student) context = { 'userForm': userForm, 'profileForm': profileForm, 'classes': request.user.student.confirmed.all(), 'isTeacher': False, } return render(request, 'skoolos/profile_student.html', context) def teacher_profile (request): if request.method == "POST": userForm = UserUpdateForm(request.POST, instance=request.user) profileForm = TeacherUpdateForm(request.POST, instance=request.user.teacher) if userForm.is_valid() and profileForm.is_valid(): userForm.save() profileForm.save() messages.success(request, "Your account has been updated!") return redirect('profile') else: userForm = UserUpdateForm(instance=request.user) profileForm = TeacherUpdateForm(instance=request.user.teacher) context = { 'userForm': userForm, 'profileForm': profileForm, 'classes': request.user.teacher.classes.all(), 'isTeacher': True, } return render(request, 'skoolos/profile_teacher.html', context) @login_required() def createClass (request): try: teacher = request.user.teacher except Teacher.DoesNotExist: pass else: return createClassHelper(request) return redirect('/') def createClassHelper(request): teacher = request.user.teacher if request.method == "POST": classForm = ClassCreationForm(request.POST) if classForm.is_valid(): cleaned_data = classForm.clean() print(cleaned_data) newClass = classForm.save(commit=False) newClass.owner = request.user newClass.teacher = request.user.username newClass.name = cleaned_data['subject'].replace(' ', '')[:8].lower() + str(cleaned_data['period']) + "_" + teacher.user.username.lower() newClass.save() classObj = classForm.save_m2m() messages.success(request, cleaned_data['subject'].capitalize() + " has been created!") print (newClass) teacher.classes.add(newClass) for student in newClass.unconfirmed.all(): if student.added_to == "": student.added_to = newClass.name else: student.added_to = student.added_to + "," + newClass.name student.save() return redirect('home') else: classForm = ClassCreationForm() context = { 'teacher': teacher, 'classes': teacher.classes.all(), 'classForm': classForm } return render(request, "skoolos/createClass.html", context)