Make portfolia viewable by all teachers of class / student
This commit is contained in:
parent
d856cd9a92
commit
76fcb8b468
|
|
@ -16,10 +16,11 @@ class Project(TitleSlugDescriptionModel, GraphqlNodeMixin):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
def is_viewable_by(self, user: User):
|
def is_viewable_by(self, user: User) -> bool:
|
||||||
return user.id == self.student.id or (
|
# This should be filtered by self.school_class.get_teachers() but in the real data (and the test data)
|
||||||
self.final and self.student.get_teacher().id == user.id
|
# school_class is always None. Like this a teacher could see project from a different class.
|
||||||
)
|
teachers_ids = set([teacher.id for teacher in self.student.get_teachers()])
|
||||||
|
return user.id == self.student.id or (self.final and user.id in teachers_ids)
|
||||||
|
|
||||||
|
|
||||||
class ProjectEntry(models.Model):
|
class ProjectEntry(models.Model):
|
||||||
|
|
|
||||||
|
|
@ -76,13 +76,13 @@ class User(AbstractUser):
|
||||||
def users_in_active_school_class(self):
|
def users_in_active_school_class(self):
|
||||||
return self.selected_class.users.all() if self.selected_class is not None else []
|
return self.selected_class.users.all() if self.selected_class is not None else []
|
||||||
|
|
||||||
def get_teacher(self):
|
def get_teachers(self):
|
||||||
if self.is_teacher():
|
teachers = []
|
||||||
return self
|
for school_class in self.school_classes.all():
|
||||||
elif self.school_classes.count() > 0:
|
teachers.extend(school_class.get_teachers())
|
||||||
return self.school_classes.first().get_teacher()
|
return teachers
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def is_teacher(self):
|
def is_teacher(self):
|
||||||
return self.user_roles.filter(role__key='teacher').exists()
|
return self.user_roles.filter(role__key='teacher').exists()
|
||||||
|
|
@ -226,8 +226,8 @@ class SchoolClass(GroupWithCode, GraphqlNodeMixin):
|
||||||
def is_user_in_schoolclass(self, user):
|
def is_user_in_schoolclass(self, user):
|
||||||
return user.is_superuser or user.school_classes.filter(pk=self.id).count() > 0
|
return user.is_superuser or user.school_classes.filter(pk=self.id).count() > 0
|
||||||
|
|
||||||
def get_teacher(self):
|
def get_teachers(self):
|
||||||
return self.users.filter(user_roles__role__key='teacher').first()
|
return list(self.users.filter(user_roles__role__key='teacher'))
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
if self.code == '': # '' can't be unique, so we null it
|
if self.code == '': # '' can't be unique, so we null it
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ class ModifySchoolClassTest(SkillboxTestCase):
|
||||||
self.assertEqual(SchoolClass.objects.count(), 3)
|
self.assertEqual(SchoolClass.objects.count(), 3)
|
||||||
school_class = get_object(SchoolClass, id)
|
school_class = get_object(SchoolClass, id)
|
||||||
self.assertEqual(school_class.name, class_name)
|
self.assertEqual(school_class.name, class_name)
|
||||||
self.assertEqual(school_class.get_teacher(), self.teacher)
|
self.assertEqual(school_class.get_teachers(), [self.teacher])
|
||||||
self.assertEqual(self.teacher.selected_class.name, class_name)
|
self.assertEqual(self.teacher.selected_class.name, class_name)
|
||||||
|
|
||||||
def test_create_school_class_duplicate_name_fail(self):
|
def test_create_school_class_duplicate_name_fail(self):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue