Add default sorting of widgets. Fix #493
This commit is contained in:
parent
611c743364
commit
a50617676a
|
@ -72,4 +72,5 @@ def get_personal_info_widget(request):
|
||||||
template='account/personal_info_widget.html',
|
template='account/personal_info_widget.html',
|
||||||
context=personal_info_context,
|
context=personal_info_context,
|
||||||
permission_required=None,
|
permission_required=None,
|
||||||
default_column=1)
|
default_column=1,
|
||||||
|
default_weight=80)
|
||||||
|
|
|
@ -593,11 +593,15 @@ def get_widgets(request):
|
||||||
'items': Item.objects.all(),
|
'items': Item.objects.all(),
|
||||||
'summary': config['presentation_argument'] == 'summary',
|
'summary': config['presentation_argument'] == 'summary',
|
||||||
'speakers': config['presentation_argument'] == 'show_list_of_speakers'},
|
'speakers': config['presentation_argument'] == 'show_list_of_speakers'},
|
||||||
permission_required='projector.can_manage_projector'),
|
permission_required='projector.can_manage_projector',
|
||||||
|
default_column=1,
|
||||||
|
default_weight=20),
|
||||||
|
|
||||||
Widget(
|
Widget(
|
||||||
request,
|
request,
|
||||||
name='append_to_list_of_speakers',
|
name='append_to_list_of_speakers',
|
||||||
display_name=_('List of speakers'),
|
display_name=_('List of speakers'),
|
||||||
template='agenda/speaker_widget.html',
|
template='agenda/speaker_widget.html',
|
||||||
permission_required='agenda.can_be_speaker')]
|
permission_required='agenda.can_be_speaker',
|
||||||
|
default_column=1,
|
||||||
|
default_weight=30)]
|
||||||
|
|
|
@ -641,4 +641,6 @@ def get_widgets(request):
|
||||||
display_name=_('Elections'),
|
display_name=_('Elections'),
|
||||||
template='assignment/widget.html',
|
template='assignment/widget.html',
|
||||||
context={'assignments': Assignment.objects.all()},
|
context={'assignments': Assignment.objects.all()},
|
||||||
permission_required='projector.can_manage_projector')]
|
permission_required='projector.can_manage_projector',
|
||||||
|
default_column=1,
|
||||||
|
default_weight=50)]
|
||||||
|
|
|
@ -837,4 +837,6 @@ def get_widgets(request):
|
||||||
display_name=_('Motions'),
|
display_name=_('Motions'),
|
||||||
template='motion/widget.html',
|
template='motion/widget.html',
|
||||||
context={'motions': Motion.objects.all()},
|
context={'motions': Motion.objects.all()},
|
||||||
permission_required='projector.can_manage_projector')]
|
permission_required='projector.can_manage_projector',
|
||||||
|
default_column=1,
|
||||||
|
default_weight=40)]
|
||||||
|
|
|
@ -564,7 +564,8 @@ def get_user_widget(request):
|
||||||
template='participant/user_widget.html',
|
template='participant/user_widget.html',
|
||||||
context={'users': User.objects.all()},
|
context={'users': User.objects.all()},
|
||||||
permission_required='projector.can_manage_projector',
|
permission_required='projector.can_manage_projector',
|
||||||
default_column=1)
|
default_column=1,
|
||||||
|
default_weight=60)
|
||||||
|
|
||||||
|
|
||||||
def get_group_widget(request):
|
def get_group_widget(request):
|
||||||
|
@ -579,4 +580,5 @@ def get_group_widget(request):
|
||||||
template='participant/group_widget.html',
|
template='participant/group_widget.html',
|
||||||
context={'groups': Group.objects.all()},
|
context={'groups': Group.objects.all()},
|
||||||
permission_required='projector.can_manage_projector',
|
permission_required='projector.can_manage_projector',
|
||||||
default_column=1)
|
default_column=1,
|
||||||
|
default_weight=70)
|
||||||
|
|
|
@ -128,21 +128,23 @@ def get_all_widgets(request, session=False):
|
||||||
The session flag decides whether to return only the widgets which are
|
The session flag decides whether to return only the widgets which are
|
||||||
active, that means that they are mentioned in the session.
|
active, that means that they are mentioned in the session.
|
||||||
"""
|
"""
|
||||||
widgets = SortedDict()
|
all_module_widgets = []
|
||||||
session_widgets = request.session.get('widgets', {})
|
|
||||||
for app in settings.INSTALLED_APPS:
|
for app in settings.INSTALLED_APPS:
|
||||||
try:
|
try:
|
||||||
mod = import_module(app + '.views')
|
mod = import_module(app + '.views')
|
||||||
except ImportError:
|
except ImportError:
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
modul_widgets = mod.get_widgets(request)
|
module_widgets = mod.get_widgets(request)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
continue
|
continue
|
||||||
|
all_module_widgets.extend(module_widgets)
|
||||||
for widget in modul_widgets:
|
all_module_widgets.sort(key=lambda widget: widget.default_weight)
|
||||||
if (widget.permission_required is None or
|
session_widgets = request.session.get('widgets', {})
|
||||||
request.user.has_perm(widget.permission_required)):
|
widgets = SortedDict()
|
||||||
if not session or session_widgets.get(widget.get_name(), True):
|
for widget in all_module_widgets:
|
||||||
widgets[widget.get_name()] = widget
|
if (widget.permission_required is None or
|
||||||
|
request.user.has_perm(widget.permission_required)):
|
||||||
|
if not session or session_widgets.get(widget.get_name(), True):
|
||||||
|
widgets[widget.get_name()] = widget
|
||||||
return widgets
|
return widgets
|
||||||
|
|
|
@ -116,7 +116,8 @@ class Widget(object):
|
||||||
Class for a Widget for the Projector-Tab.
|
Class for a Widget for the Projector-Tab.
|
||||||
"""
|
"""
|
||||||
def __init__(self, request, name, html=None, template=None, context={},
|
def __init__(self, request, name, html=None, template=None, context={},
|
||||||
permission_required=None, display_name=None, default_column=1):
|
permission_required=None, display_name=None, default_column=1,
|
||||||
|
default_weight=0):
|
||||||
self.name = name
|
self.name = name
|
||||||
if display_name is None:
|
if display_name is None:
|
||||||
self.display_name = name.capitalize()
|
self.display_name = name.capitalize()
|
||||||
|
@ -132,9 +133,9 @@ class Widget(object):
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
else:
|
else:
|
||||||
raise OpenSlidesError('A Widget must have either a html or a template argument.')
|
raise OpenSlidesError('A Widget must have either a html or a template argument.')
|
||||||
|
|
||||||
self.permission_required = permission_required
|
self.permission_required = permission_required
|
||||||
self.default_column = default_column
|
self.default_column = default_column
|
||||||
|
self.default_weight = default_weight
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return self.name.lower()
|
return self.name.lower()
|
||||||
|
|
|
@ -383,7 +383,8 @@ def get_widgets(request):
|
||||||
template='projector/welcome_widget.html',
|
template='projector/welcome_widget.html',
|
||||||
context={'welcometext': config['welcome_text']},
|
context={'welcometext': config['welcome_text']},
|
||||||
permission_required='projector.can_see_dashboard',
|
permission_required='projector.can_see_dashboard',
|
||||||
default_column=1))
|
default_column=1,
|
||||||
|
default_weight=10))
|
||||||
|
|
||||||
# Projector live view widget
|
# Projector live view widget
|
||||||
widgets.append(Widget(
|
widgets.append(Widget(
|
||||||
|
@ -392,7 +393,8 @@ def get_widgets(request):
|
||||||
display_name=_('Projector live view'),
|
display_name=_('Projector live view'),
|
||||||
template='projector/live_view_widget.html',
|
template='projector/live_view_widget.html',
|
||||||
permission_required='projector.can_see_projector',
|
permission_required='projector.can_see_projector',
|
||||||
default_column=2))
|
default_column=2,
|
||||||
|
default_weight=10))
|
||||||
|
|
||||||
# Overlay widget
|
# Overlay widget
|
||||||
overlays = []
|
overlays = []
|
||||||
|
@ -407,6 +409,7 @@ def get_widgets(request):
|
||||||
template='projector/overlay_widget.html',
|
template='projector/overlay_widget.html',
|
||||||
permission_required='projector.can_manage_projector',
|
permission_required='projector.can_manage_projector',
|
||||||
default_column=2,
|
default_column=2,
|
||||||
|
default_weight=20,
|
||||||
context=context))
|
context=context))
|
||||||
|
|
||||||
# Custom slide widget
|
# Custom slide widget
|
||||||
|
@ -419,6 +422,7 @@ def get_widgets(request):
|
||||||
'slides': ProjectorSlide.objects.all().order_by('weight'),
|
'slides': ProjectorSlide.objects.all().order_by('weight'),
|
||||||
'welcomepage_is_active': not bool(config["presentation"])},
|
'welcomepage_is_active': not bool(config["presentation"])},
|
||||||
permission_required='projector.can_manage_projector',
|
permission_required='projector.can_manage_projector',
|
||||||
default_column=2))
|
default_column=2,
|
||||||
|
default_weight=30))
|
||||||
|
|
||||||
return widgets
|
return widgets
|
||||||
|
|
Loading…
Reference in New Issue