# This file is no longer used. All admin classes are now in user.pyfrom django.contrib import admin from django.contrib.auth.forms import UserChangeForm, UsernameField, UserCreationForm from django.contrib.auth.admin import UserAdmin from django.utils.translation import gettext_lazy as _ from rest_framework.authtoken.models import TokenProxy from ajaxdatatable.admin import AjaxDatatable from django.contrib import admin from apps.account.models import User from django import forms from django.urls import path, reverse from django.shortcuts import render, redirect from django.contrib import messages from django.contrib.auth.models import Group from phonenumber_field.formfields import PhoneNumberField from apps.account.models import ProfessorUser class ProfessorUserCreationForm(UserCreationForm): phone_number = PhoneNumberField( help_text="Enter the phone number in international format. Example: +989012023212", required=False ) class Meta: model = ProfessorUser fields = ('fullname', 'email', 'phone_number') @admin.register(ProfessorUser) class ProfessorUserAdmin(UserAdmin, AjaxDatatable): add_form = ProfessorUserCreationForm list_display = ( 'email', 'fullname', 'last_login', 'date_joined', ) ordering = 'last_login', readonly_fields = ('date_joined',) exclude = ('password', 'user_permissions') add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('fullname', 'email', 'phone_number',), }), ('other', { 'classes': ('wide',), 'fields': ('avatar', 'info', 'skill'), }), ('Password', { 'classes': ('wide',), 'fields': ('password1', 'password2'), }), ) search_fields = ( 'email', 'fullname', ) fieldsets = ( (_('Personal info'), {'fields': ('fullname', 'email', 'phone_number', 'avatar', 'info', 'skill')}), (_('Permissions'), { 'fields': ('is_active', 'groups', 'password'), }), (_('Important dates'), {'fields': ('last_login', 'date_joined', 'fcm')}), ) def save_model(self, request, obj, form, change): if not change: # Creating a new professor # Check if a user with this email already exists email = form.cleaned_data.get('email') existing_user = User.objects.filter(email=email).first() if existing_user: # If user exists and is already a professor, show error if existing_user.user_type == User.UserType.PROFESSOR: messages.error(request, f"A professor with the email {email} already exists.") return # If user exists but is not a professor, convert them to professor existing_user.user_type = User.UserType.PROFESSOR # Update user fields from form data existing_user.fullname = form.cleaned_data.get('fullname') existing_user.phone_number = form.cleaned_data.get('phone_number') existing_user.avatar = form.cleaned_data.get('avatar') existing_user.info = form.cleaned_data.get('info') existing_user.skill = form.cleaned_data.get('skill') # Set password if provided if 'password1' in form.cleaned_data and form.cleaned_data['password1']: existing_user.set_password(form.cleaned_data['password1']) # Save the user existing_user.save() # Add to professor group professor_group, _ = Group.objects.get_or_create(name="Professor Group") existing_user.groups.add(professor_group) # Show success message messages.success(request, f"The user with email {email} has been converted to a professor.") # Set obj to None to prevent further processing obj = None return else: # New user, set password obj.set_password(form.cleaned_data['password1']) if obj: # Only proceed if obj is not None obj.user_type = User.UserType.PROFESSOR super().save_model(request, obj, form, change) @admin.display(description='Phone Number') def _phone_number(self, obj): return obj.phone_number def get_readonly_fields(self, request, obj=None): """ Restrict the ability to modify groups to superusers only. """ readonly = list(self.readonly_fields) if not request.user.is_superuser: readonly.append('groups') return readonly