You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

148 lines
5.2 KiB

<<<<<<< HEAD
from django.contrib import admin
from django.contrib.auth.forms import UserChangeForm, UsernameField
=======
# 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
>>>>>>> develop
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
<<<<<<< HEAD
from django.contrib import admin
from django.urls import path, reverse
from django.shortcuts import render, redirect
from django.contrib import messages
=======
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
>>>>>>> develop
from apps.account.models import ProfessorUser
<<<<<<< HEAD
@admin.register(ProfessorUser)
class ProfessorUserAdmin(UserAdmin, AjaxDatatable):
list_display = (
'device_id', 'email', 'fullname', 'user_type','last_login', 'date_joined',
=======
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',
>>>>>>> develop
)
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):
<<<<<<< HEAD
if not change:
obj.set_password(form.cleaned_data['password1'])
obj.user_type = User.UserType.PROFESSOR
super().save_model(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
# اضافه کردن نقش professor بدون حذف نقش‌های قبلی
existing_user.add_role('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()
# 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.add_role('professor')
super().save_model(request, obj, form, change)
>>>>>>> develop
@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