76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.utils import translation
|
|
from django.conf import settings
|
|
from django.http import JsonResponse
|
|
from django.contrib.admin.views.decorators import staff_member_required
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth import logout
|
|
from .models import Classroom, Subject, Teacher, Student
|
|
from .forms import StudentRegistrationForm
|
|
|
|
def index(request):
|
|
# Fetch levels with their related subjects using prefetch_related for efficiency
|
|
levels = Classroom.objects.prefetch_related('subjects').all()
|
|
|
|
context = {
|
|
'levels': levels,
|
|
}
|
|
return render(request, 'core/index.html', context)
|
|
|
|
def set_language(request, lang_code):
|
|
next_url = request.GET.get('next', '/')
|
|
response = redirect(next_url)
|
|
|
|
if lang_code in [lang[0] for lang in settings.LANGUAGES]:
|
|
translation.activate(lang_code)
|
|
if hasattr(request, 'session'):
|
|
request.session['_language'] = lang_code
|
|
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
|
|
|
|
return response
|
|
|
|
def subject_detail(request, pk):
|
|
subject = get_object_or_404(Subject, pk=pk)
|
|
return render(request, 'core/subject_detail.html', {'subject': subject})
|
|
|
|
@staff_member_required
|
|
def get_subjects_by_level(request):
|
|
level_id = request.GET.get('level_id') or request.GET.get('classroom_id')
|
|
if not level_id:
|
|
return JsonResponse([], safe=False)
|
|
subjects = Subject.objects.filter(classroom_id=level_id).values('id', 'name_en', 'name_ar')
|
|
return JsonResponse(list(subjects), safe=False)
|
|
|
|
def get_classroom_subjects(request):
|
|
"""Public endpoint for registration form"""
|
|
classroom_id = request.GET.get('classroom_id')
|
|
if not classroom_id:
|
|
return JsonResponse([], safe=False)
|
|
subjects = Subject.objects.filter(classroom_id=classroom_id).values('id', 'name_en', 'price')
|
|
return JsonResponse(list(subjects), safe=False)
|
|
|
|
def register_student(request):
|
|
if request.method == 'POST':
|
|
form = StudentRegistrationForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
student = form.save()
|
|
# Redirect to success page or login
|
|
return redirect('index') # Placeholder
|
|
else:
|
|
form = StudentRegistrationForm()
|
|
|
|
return render(request, 'core/registration.html', {'form': form})
|
|
|
|
@login_required
|
|
def profile(request):
|
|
try:
|
|
student_profile = request.user.student_profile
|
|
except Student.DoesNotExist:
|
|
student_profile = None
|
|
|
|
return render(request, 'core/profile.html', {'student_profile': student_profile})
|
|
|
|
def custom_logout(request):
|
|
logout(request)
|
|
return redirect('index')
|