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('@interviewContent').within(() => {
|
||||||
cy.get('.bookmark-actions__edit-note').click();
|
cy.get('.bookmark-actions__edit-note').click();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get('[data-cy=bookmark-note]').within(() => {
|
cy.get('[data-cy=bookmark-note]').within(() => {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<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">
|
<div class="class-selection__selected-class selected-class" @click="showPopover = !showPopover">
|
||||||
<p class="selected-class__text">Klasse: {{currentClassSelection.name}}</p>
|
<p class="selected-class__text">Klasse: {{currentClassSelection.name}}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -47,7 +47,8 @@
|
||||||
selectedClass: {
|
selectedClass: {
|
||||||
id: ''
|
id: ''
|
||||||
},
|
},
|
||||||
permissions: []
|
permissions: [],
|
||||||
|
schoolClasses: []
|
||||||
},
|
},
|
||||||
showPopover: false
|
showPopover: false
|
||||||
}
|
}
|
||||||
|
|
@ -78,14 +79,11 @@
|
||||||
currentClassSelection() {
|
currentClassSelection() {
|
||||||
let currentClass = this.schoolClasses.find(schoolClass => {
|
let currentClass = this.schoolClasses.find(schoolClass => {
|
||||||
return schoolClass.id === this.me.selectedClass.id
|
return schoolClass.id === this.me.selectedClass.id
|
||||||
})
|
});
|
||||||
return currentClass || this.schoolClasses[0];
|
return currentClass || this.schoolClasses[0];
|
||||||
},
|
},
|
||||||
schoolClasses() {
|
schoolClasses() {
|
||||||
return this.$getRidOfEdges(this.me.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
|
import graphene
|
||||||
|
from django.db.models import Q
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
|
|
@ -85,24 +86,20 @@ class ChapterNode(DjangoObjectType):
|
||||||
def resolve_content_blocks(self, info, **kwargs):
|
def resolve_content_blocks(self, info, **kwargs):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
school_classes = user.school_classes.values_list('pk')
|
school_classes = user.school_classes.values_list('pk')
|
||||||
by_parent = ContentBlock.get_by_parent(self).prefetch_related(
|
|
||||||
'visible_for').prefetch_related(
|
by_parent = ContentBlock.get_by_parent(self) \
|
||||||
'hidden_for')
|
.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
|
if user.has_perm('users.can_manage_school_class_content'): # teacher
|
||||||
publisher_content_blocks = by_parent.filter(user_created=False)
|
return by_parent.filter(default_blocks | owned_by_user)
|
||||||
user_created_content_blocks = by_parent.filter(user_created=True, owner=user)
|
|
||||||
else: # student
|
else: # student
|
||||||
publisher_content_blocks = by_parent.filter(user_created=False).exclude(
|
return by_parent.filter(default_blocks | teacher_created_and_visible)
|
||||||
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)
|
|
||||||
|
|
||||||
def resolve_bookmark(self, info, **kwags):
|
def resolve_bookmark(self, info, **kwags):
|
||||||
return ChapterBookmark.objects.filter(
|
return ChapterBookmark.objects.filter(
|
||||||
|
|
@ -234,24 +231,6 @@ class BookNode(DjangoObjectType):
|
||||||
return Topic.get_by_parent(self)
|
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):
|
class BookQuery(object):
|
||||||
book = relay.Node.Field(BookNode)
|
book = relay.Node.Field(BookNode)
|
||||||
topic = graphene.Field(TopicNode, slug=graphene.String())
|
topic = graphene.Field(TopicNode, slug=graphene.String())
|
||||||
|
|
@ -287,7 +266,6 @@ class BookQuery(object):
|
||||||
elif slug is not None:
|
elif slug is not None:
|
||||||
module = Module.objects.get(slug=slug)
|
module = Module.objects.get(slug=slug)
|
||||||
|
|
||||||
|
|
||||||
return module
|
return module
|
||||||
|
|
||||||
def resolve_topic(self, info, **kwargs):
|
def resolve_topic(self, info, **kwargs):
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
from django.db.models import Q
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
|
|
@ -29,17 +30,14 @@ class ObjectiveGroupNode(DjangoObjectType):
|
||||||
user = info.context.user
|
user = info.context.user
|
||||||
school_classes = user.school_classes.values_list('pk')
|
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
|
if user.has_perm('users.can_manage_school_class_content'): # teacher
|
||||||
publisher_objectives = self.objectives.filter(owner=None)
|
return self.objectives.filter(objectives_from_publisher | objectives_from_user)
|
||||||
user_created_objectives = self.objectives.filter(owner=user)
|
|
||||||
else: # student
|
else: # student
|
||||||
publisher_objectives = self.objectives.filter(owner=None).exclude(
|
return self.objectives.filter(objectives_from_publisher | objectives_from_teacher)
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectiveNode(DjangoObjectType):
|
class ObjectiveNode(DjangoObjectType):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue