Simplify the logic of visible content blocks for students
This commit is contained in:
parent
542c7c6d84
commit
12f3b2d9a7
|
|
@ -27,7 +27,6 @@ describe('Survey', () => {
|
|||
|
||||
cy.get('@interviewContent').within(() => {
|
||||
cy.get('.bookmark-actions__edit-note').click();
|
||||
|
||||
});
|
||||
|
||||
cy.get('[data-cy=bookmark-note]').within(() => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="class-selection" v-if="isTeacher">
|
||||
<div class="class-selection" v-if="currentClassSelection">
|
||||
<div class="class-selection__selected-class selected-class" @click="showPopover = !showPopover">
|
||||
<p class="selected-class__text">Klasse: {{currentClassSelection.name}}</p>
|
||||
</div>
|
||||
|
|
@ -47,7 +47,8 @@
|
|||
selectedClass: {
|
||||
id: ''
|
||||
},
|
||||
permissions: []
|
||||
permissions: [],
|
||||
schoolClasses: []
|
||||
},
|
||||
showPopover: false
|
||||
}
|
||||
|
|
@ -78,14 +79,11 @@
|
|||
currentClassSelection() {
|
||||
let currentClass = this.schoolClasses.find(schoolClass => {
|
||||
return schoolClass.id === this.me.selectedClass.id
|
||||
})
|
||||
});
|
||||
return currentClass || this.schoolClasses[0];
|
||||
},
|
||||
schoolClasses() {
|
||||
return this.$getRidOfEdges(this.me.schoolClasses);
|
||||
},
|
||||
isTeacher() {
|
||||
return this.me.permissions.includes('users.can_manage_school_class_content');
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import graphene
|
||||
from django.db.models import Q
|
||||
from graphene import relay
|
||||
from graphene_django import DjangoObjectType
|
||||
from graphene_django.filter import DjangoFilterConnectionField
|
||||
|
|
@ -85,24 +86,20 @@ class ChapterNode(DjangoObjectType):
|
|||
def resolve_content_blocks(self, info, **kwargs):
|
||||
user = info.context.user
|
||||
school_classes = user.school_classes.values_list('pk')
|
||||
by_parent = ContentBlock.get_by_parent(self).prefetch_related(
|
||||
'visible_for').prefetch_related(
|
||||
'hidden_for')
|
||||
|
||||
by_parent = ContentBlock.get_by_parent(self) \
|
||||
.prefetch_related('visible_for') \
|
||||
.prefetch_related('hidden_for')
|
||||
|
||||
# don't filter the hidden blocks on the server any more, we do this on the client now, as they are not secret
|
||||
default_blocks = Q(user_created=False)
|
||||
owned_by_user = Q(user_created=True, owner=user)
|
||||
teacher_created_and_visible = Q(Q(user_created=True) & Q(visible_for__in=school_classes))
|
||||
|
||||
if user.has_perm('users.can_manage_school_class_content'): # teacher
|
||||
publisher_content_blocks = by_parent.filter(user_created=False)
|
||||
user_created_content_blocks = by_parent.filter(user_created=True, owner=user)
|
||||
return by_parent.filter(default_blocks | owned_by_user)
|
||||
else: # student
|
||||
publisher_content_blocks = by_parent.filter(user_created=False).exclude(
|
||||
hidden_for__in=school_classes)
|
||||
|
||||
self_created_content_blocks = by_parent.filter(user_created=True, owner=user)
|
||||
|
||||
user_created_content_blocks = by_parent.filter(user_created=True,
|
||||
visible_for__in=school_classes).union(
|
||||
self_created_content_blocks)
|
||||
|
||||
return publisher_content_blocks.union(user_created_content_blocks)
|
||||
return by_parent.filter(default_blocks | teacher_created_and_visible)
|
||||
|
||||
def resolve_bookmark(self, info, **kwags):
|
||||
return ChapterBookmark.objects.filter(
|
||||
|
|
@ -234,24 +231,6 @@ class BookNode(DjangoObjectType):
|
|||
return Topic.get_by_parent(self)
|
||||
|
||||
|
||||
# todo: do we need this?
|
||||
# class FilteredChapterNode(DjangoObjectType):
|
||||
# content_blocks = DjangoFilterConnectionField(ContentBlockNode)
|
||||
#
|
||||
# class Meta:
|
||||
# model = Chapter
|
||||
# only_fields = [
|
||||
# 'slug', 'title', 'description',
|
||||
# ]
|
||||
# filter_fields = [
|
||||
# 'slug', 'title',
|
||||
# ]
|
||||
# interfaces = (relay.Node,)
|
||||
#
|
||||
# def resolve_content_blocks(self, *args, **kwargs):
|
||||
# return ContentBlock.get_by_parent(self)
|
||||
|
||||
|
||||
class BookQuery(object):
|
||||
book = relay.Node.Field(BookNode)
|
||||
topic = graphene.Field(TopicNode, slug=graphene.String())
|
||||
|
|
@ -287,7 +266,6 @@ class BookQuery(object):
|
|||
elif slug is not None:
|
||||
module = Module.objects.get(slug=slug)
|
||||
|
||||
|
||||
return module
|
||||
|
||||
def resolve_topic(self, info, **kwargs):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import graphene
|
||||
from django.db.models import Q
|
||||
from graphene import relay
|
||||
from graphene_django import DjangoObjectType
|
||||
from graphene_django.filter import DjangoFilterConnectionField
|
||||
|
|
@ -29,17 +30,14 @@ class ObjectiveGroupNode(DjangoObjectType):
|
|||
user = info.context.user
|
||||
school_classes = user.school_classes.values_list('pk')
|
||||
|
||||
objectives_from_publisher = Q(owner=None)
|
||||
objectives_from_user = Q(owner=user)
|
||||
objectives_from_teacher = Q(owner__isnull=False, visible_for__in=school_classes)
|
||||
|
||||
if user.has_perm('users.can_manage_school_class_content'): # teacher
|
||||
publisher_objectives = self.objectives.filter(owner=None)
|
||||
user_created_objectives = self.objectives.filter(owner=user)
|
||||
return self.objectives.filter(objectives_from_publisher | objectives_from_user)
|
||||
else: # student
|
||||
publisher_objectives = self.objectives.filter(owner=None).exclude(
|
||||
hidden_for__in=school_classes)
|
||||
|
||||
user_created_objectives = self.objectives.filter(owner__isnull=False,
|
||||
visible_for__in=school_classes)
|
||||
|
||||
return publisher_objectives.union(user_created_objectives)
|
||||
return self.objectives.filter(objectives_from_publisher | objectives_from_teacher)
|
||||
|
||||
|
||||
class ObjectiveNode(DjangoObjectType):
|
||||
|
|
|
|||
Loading…
Reference in New Issue