mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-02-04 08:13:38 +00:00
Also make expert mode a separate page rather than part of a mixture of forms in configure page.
80 lines
2.4 KiB
Python
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)
|