Merge pull request #1574 from normanjaeckel/Slides
Added list slides for motions and assignments.
This commit is contained in:
commit
2b727cc617
@ -10,11 +10,39 @@ from .views import ItemViewSet
|
||||
|
||||
class ItemListSlide(ProjectorElement):
|
||||
"""
|
||||
Slide definitions for the agenda.
|
||||
Slide definitions for Item model.
|
||||
|
||||
This is only for list slides.
|
||||
|
||||
Set 'id' to None to get a list slide of all root items. Set 'id' to an
|
||||
integer to get a list slide of the children of the metioned item.
|
||||
|
||||
Additionally set 'tree' to True to get also children of children.
|
||||
"""
|
||||
name = 'agenda/agenda'
|
||||
name = 'agenda/item-list'
|
||||
|
||||
def get_context(self):
|
||||
pk = self.config_entry.get('id')
|
||||
if pk is None:
|
||||
# Root list slide.
|
||||
context = {'tree': self.config_entry.get('tree', False)}
|
||||
else:
|
||||
# Children slide.
|
||||
if not Item.objects.filter(pk=pk).exists():
|
||||
raise ProjectorException(_('Item does not exist.'))
|
||||
context = {'id': pk, 'tree': self.config_entry.get('tree', False)}
|
||||
return context
|
||||
|
||||
def get_requirements(self, config_entry):
|
||||
pk = config_entry.get('id', 'tree')
|
||||
if pk is None or self.config_entry.get('tree', False):
|
||||
# Root list slide or slide with tree.
|
||||
yield ProjectorRequirement(
|
||||
view_class=ItemViewSet,
|
||||
view_action='tree')
|
||||
|
||||
# Root list slide and children list slide.
|
||||
# Related objects like users and tags are not unlocked.
|
||||
yield ProjectorRequirement(
|
||||
view_class=ItemViewSet,
|
||||
view_action='list')
|
||||
@ -24,13 +52,17 @@ class ItemDetailSlide(ProjectorElement):
|
||||
"""
|
||||
Slide definitions for Item model.
|
||||
|
||||
To activate this slide as list of speakers slide, set 'list_of_speakers'
|
||||
true.
|
||||
This is only for detail slides. You have to set 'id'.
|
||||
|
||||
To activate a detail slide as list of speakers slide, set 'id' and set
|
||||
'list_of_speakers' true.
|
||||
"""
|
||||
name = 'agenda/item'
|
||||
name = 'agenda/item-detail'
|
||||
|
||||
def get_context(self):
|
||||
pk = self.config_entry.get('id')
|
||||
if pk is None:
|
||||
raise ProjectorException(_('Id must not be None.'))
|
||||
if not Item.objects.filter(pk=pk).exists():
|
||||
raise ProjectorException(_('Item does not exist.'))
|
||||
return {'id': pk, 'list_of_speakers': self.config_entry.get('list_of_speakers', False)}
|
||||
@ -38,6 +70,7 @@ class ItemDetailSlide(ProjectorElement):
|
||||
def get_requirements(self, config_entry):
|
||||
pk = config_entry.get('id')
|
||||
if pk is not None:
|
||||
# Detail slide.
|
||||
try:
|
||||
item = Item.objects.get(pk=pk)
|
||||
except Item.DoesNotExist:
|
||||
|
@ -8,21 +8,35 @@ from .models import Assignment
|
||||
from .views import AssignmentViewSet
|
||||
|
||||
|
||||
class AssignmentDetailSlide(ProjectorElement):
|
||||
class AssignmentSlide(ProjectorElement):
|
||||
"""
|
||||
Slide definitions for assignment model.
|
||||
Slide definitions for Assignment model.
|
||||
|
||||
Set 'id' to get a detail slide. Omit it to get a list slide.
|
||||
"""
|
||||
name = 'assignments/assignment'
|
||||
|
||||
def get_context(self):
|
||||
pk = self.config_entry.get('id')
|
||||
if pk is None:
|
||||
# List slide.
|
||||
context = None
|
||||
else:
|
||||
# Detail slide.
|
||||
if not Assignment.objects.filter(pk=pk).exists():
|
||||
raise ProjectorException(_('Assignment does not exist.'))
|
||||
return {'id': pk}
|
||||
context = {'id': pk}
|
||||
return context
|
||||
|
||||
def get_requirements(self, config_entry):
|
||||
pk = config_entry.get('id')
|
||||
if pk is not None:
|
||||
if pk is None:
|
||||
# List slide. Related objects like users and tags are not unlocked.
|
||||
yield ProjectorRequirement(
|
||||
view_class=AssignmentViewSet,
|
||||
view_action='list')
|
||||
else:
|
||||
# Detail slide.
|
||||
try:
|
||||
assignment = Assignment.objects.get(pk=pk)
|
||||
except Assignment.DoesNotExist:
|
||||
|
@ -6,6 +6,10 @@ class MediafileAppConfig(AppConfig):
|
||||
verbose_name = 'OpenSlides Mediafiles'
|
||||
|
||||
def ready(self):
|
||||
# Load projector elements.
|
||||
# Do this by just importing all from these files.
|
||||
from . import projector # noqa
|
||||
|
||||
# Import all required stuff.
|
||||
from openslides.utils.rest_api import router
|
||||
from .views import MediafileViewSet
|
||||
|
32
openslides/mediafiles/projector.py
Normal file
32
openslides/mediafiles/projector.py
Normal file
@ -0,0 +1,32 @@
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from openslides.core.exceptions import ProjectorException
|
||||
from openslides.utils.projector import ProjectorElement, ProjectorRequirement
|
||||
|
||||
from .models import Mediafile
|
||||
from .views import MediafileViewSet
|
||||
|
||||
|
||||
class MediafileSlide(ProjectorElement):
|
||||
"""
|
||||
Slide definitions for Mediafile model.
|
||||
"""
|
||||
name = 'mediafiles/mediafile'
|
||||
|
||||
def get_context(self):
|
||||
pk = self.config_entry.get('id')
|
||||
try:
|
||||
mediafile = Mediafile.objects.get(pk=pk)
|
||||
except Mediafile.DoesNotExist:
|
||||
raise ProjectorException(_('File does not exist.'))
|
||||
if not (mediafile.is_presentable and mediafile.filetype == 'application/pdf'):
|
||||
raise ProjectorException(_('File is not presentable.'))
|
||||
return {'id': pk}
|
||||
|
||||
def get_requirements(self, config_entry):
|
||||
pk = config_entry.get('id')
|
||||
if pk is not None:
|
||||
yield ProjectorRequirement(
|
||||
view_class=MediafileViewSet,
|
||||
view_action='retrieve',
|
||||
pk=str(pk))
|
@ -8,21 +8,35 @@ from .models import Motion
|
||||
from .views import CategoryViewSet, MotionViewSet, WorkflowViewSet
|
||||
|
||||
|
||||
class MotionDetailSlide(ProjectorElement):
|
||||
class MotionSlide(ProjectorElement):
|
||||
"""
|
||||
Slide definitions for motion model.
|
||||
Slide definitions for Motion model.
|
||||
|
||||
Set 'id' to get a detail slide. Omit it to get a list slide.
|
||||
"""
|
||||
name = 'motions/motion'
|
||||
|
||||
def get_context(self):
|
||||
pk = self.config_entry.get('id')
|
||||
if pk is None:
|
||||
# List slide.
|
||||
context = None
|
||||
else:
|
||||
# Detail slide.
|
||||
if not Motion.objects.filter(pk=pk).exists():
|
||||
raise ProjectorException(_('Motion does not exist.'))
|
||||
return {'id': pk}
|
||||
context = {'id': pk}
|
||||
return context
|
||||
|
||||
def get_requirements(self, config_entry):
|
||||
pk = config_entry.get('id')
|
||||
if pk is not None:
|
||||
if pk is None:
|
||||
# List slide. Related objects like users and tags are not unlocked.
|
||||
yield ProjectorRequirement(
|
||||
view_class=MotionViewSet,
|
||||
view_action='list')
|
||||
else:
|
||||
# Detail slide.
|
||||
try:
|
||||
motion = Motion.objects.get(pk=pk)
|
||||
except Motion.DoesNotExist:
|
||||
|
Loading…
Reference in New Issue
Block a user