OpenSlides/openslides/projector/api.py
2012-06-11 13:43:48 +02:00

135 lines
3.3 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.projector.api
~~~~~~~~~~~~~~~~~~~~~~~~
Useful functions for the projector app.
:copyright: 2011, 2012 by OpenSlides team, see AUTHORS.
:license: GNU GPL, see LICENSE for more details.
"""
from django.template.loader import render_to_string
from config.models import config
from projector import SLIDE, Slide, Widget
def split_sid(sid):
try:
data = sid.split('-')
except AttributeError:
return None
if len(data) == 2:
model = data[0]
id = data[1]
return (model, id)
if len(data) == 1:
try:
return (SLIDE[data[0]].key, None)
except KeyError:
return None
return None
def get_slide_from_sid(sid, element=False):
try:
key, id = split_sid(sid)
except TypeError:
return None
if id is not None:
try:
object = SLIDE[key].model.objects.get(pk=id)
except SLIDE[key].model.DoesNotExist:
return None
if element:
return object
return object.slide()
try:
return SLIDE[key].func()
except KeyError:
return None
def get_active_slide(only_sid=False):
"""
Returns the active slide. If no slide is active, or it can not find an Item,
it raise an error
if only_sid is True, returns only the id of this item. Returns None if not Item
is active. Does not Raise Item.DoesNotExist
"""
sid = config["presentation"]
if only_sid:
return sid
return get_slide_from_sid(sid)
def set_active_slide(sid):
config["presentation"] = sid
def register_slidemodel(model, model_name=None, control_template=None, weight=0):
#TODO: Warn if there already is a slide with this prefix
if model_name is None:
model_name = model.prefix
if control_template is None:
control_template = 'projector/default_control_slidemodel.html'
category = model.__module__.split('.')[0]
SLIDE[model_name] = Slide(
model_slide=True,
model=model,
category=category,
key=model.prefix,
model_name=model_name,
control_template=control_template,
weight=weight,
)
def register_slidefunc(key, func, control_template=None, weight=0, name=''):
#TODO: Warn if there already is a slide with this prefix
if control_template is None:
control_template = 'projector/default_control_slidefunc.html'
category = func.__module__.split('.')[0]
SLIDE[key] = Slide(
model_slide=False,
func=func,
category=category,
key=key,
control_template=control_template,
weight=weight,
name=name,
)
def projector_message_set(message, sid=None):
from models import ProjectorOverlay
config['projector_message'] = message
try:
overlay = ProjectorOverlay.objects.get(def_name='Message')
except ProjectorOverlay.DoesNotExist:
overlay = ProjectorOverlay(def_name='Message', active=True)
print "hier mal ein ", sid
overlay.sid=sid
overlay.save()
def projector_message_delete():
config['projector_message'] = ''
def get_model_widget(name, model):
return Widget(
name=name,
template='projector/model_widget.html',
context={
'slides': model.objects.all(),
}
)