numerous updates
This commit is contained in:
+104
-30
@@ -20,6 +20,10 @@ from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.mail import send_mail
|
||||
from django.core.mail import EmailMessage
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
class Plane(models.Model):
|
||||
plane = models.CharField(max_length=200, unique=True)
|
||||
@@ -138,13 +142,9 @@ class ExamBase(models.Model):
|
||||
|
||||
user_scores = models.JSONField(default=dict)
|
||||
|
||||
# Is this actually used?
|
||||
cid_users = GenericRelation("generic.CidUserExam")
|
||||
|
||||
# time_limit = models.IntegerField(
|
||||
# help_text="Exam time limit (in seconds). Default is 2100 secondse (35 minutes)",
|
||||
# default=2100,
|
||||
# )
|
||||
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
@@ -189,49 +189,85 @@ class ExamBase(models.Model):
|
||||
authors = [i for i in self.author.all()]
|
||||
return authors
|
||||
|
||||
def check_cid_user(self, cid, passcode, request=None):
|
||||
def check_cid_user(self, cid, passcode, request=None, user_id=None):
|
||||
if request is not None and request.user.is_superuser:
|
||||
return True
|
||||
|
||||
if self.valid_users.exists():
|
||||
if not self.valid_cid_users.exists() and not self.valid_user_users.exists():
|
||||
return True
|
||||
|
||||
user = self.valid_users.filter(cid=cid).first()
|
||||
if user_id is not None:
|
||||
if self.valid_user_users.filter(pk=user_id).exists():
|
||||
return True
|
||||
|
||||
if not user or user.passcode != passcode:
|
||||
return False
|
||||
if self.valid_cid_users.exists():
|
||||
|
||||
return True
|
||||
cid_user = self.valid_cid_users.filter(cid=cid).first()
|
||||
|
||||
def get_or_create_cid_user_exam(self, cid_user, start_time=None):
|
||||
if cid_user and cid_user.passcode == passcode:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
return False
|
||||
|
||||
def get_or_create_cid_user_exam(self, cid_user=None, user_user=None, start_time=None):
|
||||
content_type = ContentType.objects.get_for_model(self)
|
||||
c = CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, cid_user=cid_user
|
||||
).first()
|
||||
if c:
|
||||
return c
|
||||
|
||||
if cid_user is not None:
|
||||
c = CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, cid_user=cid_user
|
||||
).first()
|
||||
if c:
|
||||
return c
|
||||
|
||||
if user_user is not None:
|
||||
c = CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, user_user=cid_user
|
||||
).first()
|
||||
if c:
|
||||
return c
|
||||
|
||||
|
||||
if start_time is None:
|
||||
start_time = timezone.now()
|
||||
new = CidUserExam(
|
||||
content_type=content_type,
|
||||
object_id=self.pk,
|
||||
cid_user=cid_user,
|
||||
start_time=start_time,
|
||||
)
|
||||
|
||||
|
||||
if cid_user is not None:
|
||||
new = CidUserExam(
|
||||
content_type=content_type,
|
||||
object_id=self.pk,
|
||||
cid_user=cid_user,
|
||||
start_time=start_time,
|
||||
)
|
||||
|
||||
if user_user is not None:
|
||||
new = CidUserExam(
|
||||
content_type=content_type,
|
||||
object_id=self.pk,
|
||||
user_user=user_user,
|
||||
start_time=start_time,
|
||||
)
|
||||
|
||||
new.save()
|
||||
return new
|
||||
|
||||
def get_cid_user_exams(self, cid_user=None):
|
||||
def get_cid_user_exams(self, cid_user=None, user_user=None):
|
||||
content_type = ContentType.objects.get_for_model(self)
|
||||
if cid_user is None:
|
||||
if cid_user is None and user_user is None:
|
||||
return CidUserExam.objects.filter(
|
||||
content_type=content_type,
|
||||
object_id=self.pk,
|
||||
)
|
||||
else:
|
||||
return CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, cid_user=cid_user
|
||||
)
|
||||
if cid_user is not None:
|
||||
return CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, cid_user=cid_user
|
||||
)
|
||||
else:
|
||||
return CidUserExam.objects.filter(
|
||||
content_type=content_type, object_id=self.pk, user_user=user_user
|
||||
)
|
||||
|
||||
def get_cid_user_score(self, cid_user):
|
||||
c = str(cid_user)
|
||||
@@ -482,7 +518,8 @@ class CidUserExam(models.Model):
|
||||
start_time = models.DateTimeField(blank=True, null=True)
|
||||
end_time = models.DateTimeField(blank=True, null=True)
|
||||
|
||||
cid_user = models.ForeignKey(CidUser, on_delete=models.CASCADE)
|
||||
cid_user = models.ForeignKey(CidUser, on_delete=models.CASCADE, blank=True, null=True, related_name="cid_userexam")
|
||||
user_user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True, related_name="user_userexam")
|
||||
|
||||
manual_submission = models.BooleanField(default=False)
|
||||
|
||||
@@ -501,5 +538,42 @@ class CidUserGroup(models.Model):
|
||||
return s
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse("generic:group_update", kwargs={"pk": self.pk})
|
||||
return reverse("generic:cid_group_update", kwargs={"pk": self.pk})
|
||||
|
||||
|
||||
class UserUserGroup(models.Model):
|
||||
name = models.CharField(blank=True, max_length=50)
|
||||
archive = models.BooleanField(default=False)
|
||||
|
||||
users = models.ManyToManyField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
blank=True,
|
||||
related_name="user_groups"
|
||||
)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return str(self.name)
|
||||
|
||||
def GetGroupUsers(self):
|
||||
users = self.users.all()
|
||||
|
||||
s = ", ".join([f"{user.id} - {user.username} ({user.email})" for user in users])
|
||||
return s
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse("generic:user_group_update", kwargs={"pk": self.pk})
|
||||
|
||||
|
||||
class UserProfile(models.Model):
|
||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||
supervisor_email = models.EmailField(blank=True)
|
||||
supervisor_name = models.CharField(max_length=100, blank=True)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
UserProfile.objects.create(user=instance)
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def save_user_profile(sender, instance, **kwargs):
|
||||
instance.profile.save()
|
||||
Reference in New Issue
Block a user