Sunil Mohan Adapa c05c3ba3c8 Convert expert mode page into Django form
Also make expert mode a separate page rather than part of a mixture
of forms in configure page.
2014-05-11 12:10:27 +05:30

80 lines
2.4 KiB
Python

import cherrypy
from django import forms
from gettext import gettext as _
from modules.auth import require
from plugin_mount import PagePlugin
import cfg
import util
class ExpertsForm(forms.Form): # pylint: disable-msg=W0232
"""Form to configure expert mode"""
expert_mode = forms.BooleanField(
label=_('Expert Mode'), required=False)
# XXX: Only present due to issue with submitting empty form
dummy = forms.CharField(label='Dummy', initial='dummy',
widget=forms.HiddenInput())
class Experts(PagePlugin):
"""Expert forms page"""
order = 60
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page('sys.config.expert')
cfg.html_root.sys.config.menu.add_item(_('Expert mode'), 'icon-cog',
'/sys/config/expert', 10)
@cherrypy.expose
@require()
def index(self, **kwargs):
"""Serve the configuration form"""
status = self.get_status()
cfg.log.info('Args - %s' % kwargs)
form = None
messages = []
if kwargs:
form = ExpertsForm(kwargs, prefix='experts')
# pylint: disable-msg=E1101
if form.is_valid():
self._apply_changes(form.cleaned_data, messages)
status = self.get_status()
form = ExpertsForm(initial=status, prefix='experts')
else:
form = ExpertsForm(initial=status, prefix='experts')
return util.render_template(template='expert_mode',
title=_('Expert Mode'), form=form,
messages=messages)
@staticmethod
def get_status():
"""Return the current status"""
return {'expert_mode': cfg.users.expert()}
@staticmethod
def _apply_changes(new_status, messages):
"""Apply expert mode configuration"""
message = ('info', _('Settings unchanged'))
user = cfg.users.current()
if new_status['expert_mode']:
if not 'expert' in user['groups']:
user['groups'].append('expert')
message = ('success', _('Expert mode enabled'))
else:
if 'expert' in user['groups']:
user['groups'].remove('expert')
message = ('success', _('Expert mode disabled'))
cfg.users.set(user['username'], user)
messages.append(message)