Merged develop into feature/rename-caching-middleware
This commit is contained in:
commit
519bf71cbb
|
|
@ -37,7 +37,9 @@ class CompetenceCertificateQuery(object):
|
||||||
course_session_user = CourseSessionUser.objects.filter(
|
course_session_user = CourseSessionUser.objects.filter(
|
||||||
user__id=user_id
|
user__id=user_id
|
||||||
).first()
|
).first()
|
||||||
if not can_view_profile(info.context.user, course_session_user):
|
if course_session_user is None or not can_view_profile(
|
||||||
|
info.context.user, course_session_user
|
||||||
|
):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
setattr(info.context, "assignment_user_ids", user_ids) # noqa: B010
|
setattr(info.context, "assignment_user_ids", user_ids) # noqa: B010
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ from vbv_lernwelt.course_session.models import (
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
|
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
|
||||||
from vbv_lernwelt.iam.permissions import has_course_access
|
from vbv_lernwelt.iam.permissions import has_course_access
|
||||||
|
from vbv_lernwelt.learning_mentor.models import AgentParticipantRelation
|
||||||
from vbv_lernwelt.learnpath.graphql.types import LearningPathObjectType
|
from vbv_lernwelt.learnpath.graphql.types import LearningPathObjectType
|
||||||
from vbv_lernwelt.learnpath.models import Circle, CourseProfile
|
from vbv_lernwelt.learnpath.models import Circle, CourseProfile
|
||||||
|
|
||||||
|
|
@ -248,13 +249,10 @@ class CourseSessionObjectType(DjangoObjectType):
|
||||||
def resolve_edoniq_tests(self, info):
|
def resolve_edoniq_tests(self, info):
|
||||||
return CourseSessionEdoniqTest.objects.filter(course_session=self)
|
return CourseSessionEdoniqTest.objects.filter(course_session=self)
|
||||||
|
|
||||||
def resolve_users(self, info):
|
def resolve_users(self: CourseSession, info):
|
||||||
course_session_users_resolved: List[CourseSessionUserObjectsType] = []
|
course_session_users_resolved: List[CourseSessionUserObjectsType] = []
|
||||||
|
|
||||||
# happy path, members and experts
|
def _add_course_session_user(course_session_user):
|
||||||
for course_session_user in CourseSessionUser.objects.filter(
|
|
||||||
course_session_id=self.id
|
|
||||||
).distinct():
|
|
||||||
course_session_users_resolved.append(
|
course_session_users_resolved.append(
|
||||||
CourseSessionUserObjectsType(
|
CourseSessionUserObjectsType(
|
||||||
id=course_session_user.id, # noqa
|
id=course_session_user.id, # noqa
|
||||||
|
|
@ -276,43 +274,103 @@ class CourseSessionObjectType(DjangoObjectType):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# workaround for supervisor
|
me_csu = CourseSessionUser.objects.filter(
|
||||||
# add supervisor to the list of users (as expert)
|
course_session=self, user=info.context.user
|
||||||
course_session_id = self.id # noqa
|
).first()
|
||||||
user = info.context.user # noqa
|
if me_csu:
|
||||||
|
_add_course_session_user(me_csu)
|
||||||
|
|
||||||
if CourseSessionGroup.objects.filter(
|
if self.course.configuration.is_vv:
|
||||||
course_session=course_session_id, supervisor=user
|
# VBV-708: only add users, which have a relation with the current user
|
||||||
).exists():
|
for rel in AgentParticipantRelation.objects.filter(
|
||||||
if course_session := CourseSession.objects.filter(
|
participant__course_session=self, agent=info.context.user
|
||||||
id=course_session_id
|
):
|
||||||
).first():
|
if rel.participant_id not in [
|
||||||
circles = (
|
user.id for user in course_session_users_resolved
|
||||||
course_session.course.get_learning_path()
|
]:
|
||||||
.get_descendants()
|
_add_course_session_user(rel.participant)
|
||||||
.live()
|
|
||||||
.specific()
|
|
||||||
.exact_type(Circle)
|
|
||||||
)
|
|
||||||
|
|
||||||
course_session_users_resolved.append(
|
if self.course.configuration.is_uk:
|
||||||
CourseSessionUserObjectsType(
|
# happy path, members and experts
|
||||||
id=f"{user.id}-as-ephemeral-supervisor", # noqa
|
if me_csu:
|
||||||
user_id=user.id, # noqa
|
for course_session_user in CourseSessionUser.objects.filter(
|
||||||
first_name=user.first_name, # noqa
|
course_session_id=self.id
|
||||||
last_name=user.last_name, # noqa
|
).distinct():
|
||||||
email=user.email, # noqa
|
if course_session_user.id not in [
|
||||||
avatar_url=user.avatar_url, # noqa
|
user.id for user in course_session_users_resolved
|
||||||
role=CourseSessionUser.Role.EXPERT, # noqa
|
]:
|
||||||
circles=[ # noqa
|
_add_course_session_user(course_session_user)
|
||||||
CourseSessionUserExpertCircleType( # noqa
|
else:
|
||||||
id=circle.id, # noqa
|
# VBV-708: user has only "AgentParticipantRole" and is not in the list of users
|
||||||
title=circle.title, # noqa
|
for rel in AgentParticipantRelation.objects.filter(
|
||||||
slug=circle.slug, # noqa
|
participant__course_session=self, agent=info.context.user
|
||||||
)
|
):
|
||||||
for circle in circles
|
if rel.participant_id not in [
|
||||||
],
|
user.id for user in course_session_users_resolved
|
||||||
|
]:
|
||||||
|
_add_course_session_user(rel.participant)
|
||||||
|
|
||||||
|
# workaround for supervisor
|
||||||
|
# add supervisor to the list of users (as expert)
|
||||||
|
course_session_id = self.id # noqa
|
||||||
|
user = info.context.user # noqa
|
||||||
|
|
||||||
|
if CourseSessionGroup.objects.filter(
|
||||||
|
course_session=course_session_id, supervisor=user
|
||||||
|
).exists():
|
||||||
|
if course_session := CourseSession.objects.filter(
|
||||||
|
id=course_session_id
|
||||||
|
).first():
|
||||||
|
circles = (
|
||||||
|
course_session.course.get_learning_path()
|
||||||
|
.get_descendants()
|
||||||
|
.live()
|
||||||
|
.specific()
|
||||||
|
.exact_type(Circle)
|
||||||
|
)
|
||||||
|
|
||||||
|
course_session_users_resolved.append(
|
||||||
|
CourseSessionUserObjectsType(
|
||||||
|
id=f"{user.id}-as-ephemeral-supervisor", # noqa
|
||||||
|
user_id=user.id, # noqa
|
||||||
|
first_name=user.first_name, # noqa
|
||||||
|
last_name=user.last_name, # noqa
|
||||||
|
email=user.email, # noqa
|
||||||
|
avatar_url=user.avatar_url, # noqa
|
||||||
|
role=CourseSessionUser.Role.EXPERT, # noqa
|
||||||
|
circles=[ # noqa
|
||||||
|
CourseSessionUserExpertCircleType( # noqa
|
||||||
|
id=circle.id, # noqa
|
||||||
|
title=circle.title, # noqa
|
||||||
|
slug=circle.slug, # noqa
|
||||||
|
)
|
||||||
|
for circle in circles
|
||||||
|
],
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
|
||||||
|
|
||||||
return course_session_users_resolved
|
return course_session_users_resolved
|
||||||
|
|
||||||
|
def _add_course_session_user(
|
||||||
|
self, course_session_user, course_session_users_resolved
|
||||||
|
):
|
||||||
|
course_session_users_resolved.append(
|
||||||
|
CourseSessionUserObjectsType(
|
||||||
|
id=course_session_user.id, # noqa
|
||||||
|
user_id=course_session_user.user.id, # noqa
|
||||||
|
first_name=course_session_user.user.first_name, # noqa
|
||||||
|
last_name=course_session_user.user.last_name, # noqa
|
||||||
|
email=course_session_user.user.email, # noqa
|
||||||
|
avatar_url=course_session_user.user.avatar_url, # noqa
|
||||||
|
role=course_session_user.role, # noqa
|
||||||
|
circles=[ # noqa
|
||||||
|
CourseSessionUserExpertCircleType( # noqa
|
||||||
|
id=circle.id, # noqa
|
||||||
|
title=circle.title, # noqa
|
||||||
|
slug=circle.slug, # noqa
|
||||||
|
)
|
||||||
|
for circle in course_session_user.expert.all() # noqa
|
||||||
|
],
|
||||||
|
optional_attendance=course_session_user.optional_attendance, # noqa
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue