diff --git a/lib/classes/JsonApi/Schemas/CourseMember.php b/lib/classes/JsonApi/Schemas/CourseMember.php index e68264072c8e1bb8cec2389771095b59bbd88b83..4a69d4e1793fe8c0f52831a8eeabfa62cad525b7 100644 --- a/lib/classes/JsonApi/Schemas/CourseMember.php +++ b/lib/classes/JsonApi/Schemas/CourseMember.php @@ -30,7 +30,6 @@ class CourseMember extends SchemaProvider if ($this->currentUser) { if (MembershipAuthority::canIndexMembershipsOfUser($this->currentUser, $membership->user)) { - # TODO: $attributes['notification'] = (int) $membership->notification; $attributes['visible'] = $membership->visible; } if (CourseAuthority::canEditCourse($this->currentUser, $membership->course)) { @@ -49,16 +48,18 @@ class CourseMember extends SchemaProvider $relationships = []; if ($isPrimary) { + $course = \Course::build(['id' => $membership['seminar_id']], false); $relationships[self::REL_COURSE] = [ self::RELATIONSHIP_LINKS => [ - Link::RELATED => $this->createLinkToResource($membership->course) + Link::RELATED => $this->createLinkToResource($course) ], self::RELATIONSHIP_DATA => $membership->course, ]; + $user = \User::build(['id' => $membership['user_id']], false); $relationships[self::REL_USER] = [ self::RELATIONSHIP_LINKS => [ - Link::RELATED => $this->createLinkToResource($membership->user) + Link::RELATED => $this->createLinkToResource($user) ], self::RELATIONSHIP_DATA => $membership->user, ]; diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js index 4bf0dfb1b1ac53556806768b9851f2001c87da99..8a4326f0fa6848ea123a74612d64be07cf0282e4 100755 --- a/resources/vue/store/courseware/courseware.module.js +++ b/resources/vue/store/courseware/courseware.module.js @@ -886,48 +886,28 @@ export const actions = { ); }, - async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) { - const parent = { - type: 'users', - id: userId, - }; - const relationship = 'course-memberships'; - const options = { - include: 'course', - }; - await dispatch('loadRelatedPaginated', { - type: 'course-memberships', - parent, - relationship, - options - }); - - const memberships = rootGetters['course-memberships/related']({ - parent, - relationship, - }); - let isTeacher = false; - memberships.forEach((membership) => { - if (getters.courseware.attributes['editing-permission-level'] === 'dozent') { - if ( - membership.attributes.permission === 'dozent' && - state.context.id === membership.relationships.course.data.id - ) { - isTeacher = true; - } - } - if (getters.courseware.attributes['editing-permission-level'] === 'tutor') { - if ( - (membership.attributes.permission === 'dozent' || - membership.attributes.permission === 'tutor') && - state.context.id === membership.relationships.course.data.id - ) { - isTeacher = true; + loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) { + const membershipId = `${state.context.id}_${userId}`; + + return dispatch('course-memberships/loadById', { id: membershipId }) + .then(() => { + const membership = rootGetters['course-memberships/byId']({ id: membershipId }); + const editingLevel = getters.courseware.attributes['editing-permission-level']; + const membershipPermission = membership.attributes.permission; + + let isTeacher = false; + if (editingLevel === 'dozent') { + isTeacher = membershipPermission === 'dozent'; + } else if (editingLevel === 'tutor') { + isTeacher = membershipPermission === 'dozent' || membershipPermission === 'tutor'; } - } - }); - return commit('setUserIsTeacher', isTeacher); + commit('setUserIsTeacher', isTeacher); + }) + .catch((error) => { + console.error(`Could not find course membership for ${membershipId}.`); + commit('setUserIsTeacher', false); + }); }, loadFeedback({ dispatch }, blockId) {