mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
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.
This commit is contained in:
parent
fe56ef3761
commit
c05c3ba3c8
@ -44,6 +44,9 @@ class Config(PagePlugin):
|
|||||||
|
|
||||||
self.register_page("sys.config")
|
self.register_page("sys.config")
|
||||||
|
|
||||||
|
self.menu = cfg.html_root.sys.menu.add_item(_('Configure'), 'icon-cog',
|
||||||
|
'/sys/config', 10)
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
@require()
|
@require()
|
||||||
def index(self):
|
def index(self):
|
||||||
|
|||||||
@ -1,73 +1,79 @@
|
|||||||
import os
|
|
||||||
import cherrypy
|
import cherrypy
|
||||||
try:
|
from django import forms
|
||||||
import simplejson as json
|
|
||||||
except ImportError:
|
|
||||||
import json
|
|
||||||
from gettext import gettext as _
|
from gettext import gettext as _
|
||||||
from filedict import FileDict
|
|
||||||
from modules.auth import require
|
from modules.auth import require
|
||||||
from plugin_mount import PagePlugin, FormPlugin
|
from plugin_mount import PagePlugin
|
||||||
import cfg
|
import cfg
|
||||||
from forms import Form
|
import util
|
||||||
from model import User
|
|
||||||
from util import *
|
|
||||||
|
|
||||||
class experts(FormPlugin, PagePlugin):
|
|
||||||
url = ["/sys/config"]
|
|
||||||
order = 10
|
|
||||||
|
|
||||||
def help(self, *args, **kwargs):
|
class ExpertsForm(forms.Form): # pylint: disable-msg=W0232
|
||||||
side = _(#"""<strong>Expert Mode</strong>
|
"""Form to configure expert mode"""
|
||||||
"""
|
|
||||||
<p>The %(box)s can be administered in two modes, 'basic'
|
|
||||||
and 'expert'. Basic mode hides a lot of features and
|
|
||||||
configuration options that most users will never need to think
|
|
||||||
about. Expert mode allows you to get into the details.</p>
|
|
||||||
|
|
||||||
<p>Most users can operate the %(box)s by configuring the
|
expert_mode = forms.BooleanField(
|
||||||
limited number of options visible in Basic mode. For the sake
|
label=_('Expert Mode'), required=False)
|
||||||
of simplicity and ease of use, we hid most of %(product)s's
|
|
||||||
less frequently used options. But if you want more
|
|
||||||
sophisticated features, you can enable Expert mode, and
|
|
||||||
%(product)s will present more advanced menu options.</p>
|
|
||||||
|
|
||||||
<p>You should be aware that it might be possible to render
|
# XXX: Only present due to issue with submitting empty form
|
||||||
your %(box)s inaccessible via Expert mode options.</p>
|
dummy = forms.CharField(label='Dummy', initial='dummy',
|
||||||
""" % {'box':cfg.box_name, 'product':cfg.product_name})
|
widget=forms.HiddenInput())
|
||||||
|
|
||||||
return side
|
|
||||||
|
|
||||||
def main(self, expert=None, message='', **kwargs):
|
class Experts(PagePlugin):
|
||||||
"""Note that kwargs contains '':"submit" if this is coming
|
"""Expert forms page"""
|
||||||
from a submitted form. If kwargs is empty, it's a fresh form
|
order = 60
|
||||||
with no user input, which means it should just reflect the
|
|
||||||
state of the stored data."""
|
|
||||||
if not kwargs and expert == None:
|
|
||||||
expert = cfg.users.expert()
|
|
||||||
cfg.log("Expert mode is %s" % expert)
|
|
||||||
form = Form(title=_("Expert Mode"),
|
|
||||||
action=cfg.server_dir + "/sys/config/experts",
|
|
||||||
name="expert_mode_form",
|
|
||||||
message=message )
|
|
||||||
form.html(self.help())
|
|
||||||
form.checkbox(_("Expert Mode"), name="expert", checked=expert)
|
|
||||||
form.submit(_("Submit"))
|
|
||||||
return form.render()
|
|
||||||
|
|
||||||
def process_form(self, expert='', *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
user = cfg.users.get()
|
PagePlugin.__init__(self, *args, **kwargs)
|
||||||
|
self.register_page('sys.config.expert')
|
||||||
|
|
||||||
message = 'settings unchanged'
|
cfg.html_root.sys.config.menu.add_item(_('Expert mode'), 'icon-cog',
|
||||||
|
'/sys/config/expert', 10)
|
||||||
|
|
||||||
if expert:
|
@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']:
|
if not 'expert' in user['groups']:
|
||||||
user['groups'].append('expert')
|
user['groups'].append('expert')
|
||||||
message = "enabled"
|
message = ('success', _('Expert mode enabled'))
|
||||||
else:
|
else:
|
||||||
if 'expert' in user['groups']:
|
if 'expert' in user['groups']:
|
||||||
user['groups'].remove('expert')
|
user['groups'].remove('expert')
|
||||||
message = "disabled"
|
message = ('success', _('Expert mode disabled'))
|
||||||
|
|
||||||
cfg.users.set(user)
|
cfg.users.set(user['username'], user)
|
||||||
return "Expert mode %s." % message
|
messages.append(message)
|
||||||
|
|||||||
@ -13,7 +13,6 @@ class Sys(PagePlugin):
|
|||||||
PagePlugin.__init__(self, *args, **kwargs)
|
PagePlugin.__init__(self, *args, **kwargs)
|
||||||
self.register_page("sys")
|
self.register_page("sys")
|
||||||
self.menu = cfg.main_menu.add_item(_("System"), "icon-cog", "/sys", 100)
|
self.menu = cfg.main_menu.add_item(_("System"), "icon-cog", "/sys", 100)
|
||||||
self.menu.add_item(_("Configure"), "icon-cog", "/sys/config", 10)
|
|
||||||
self.menu.add_item(_("Users and Groups"), "icon-user", "/sys/users", 15)
|
self.menu.add_item(_("Users and Groups"), "icon-user", "/sys/users", 15)
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
|
|||||||
34
modules/installed/system/templates/expert_mode.html
Normal file
34
modules/installed/system/templates/expert_mode.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{% extends "login_nav.html" %}
|
||||||
|
{% load bootstrap %}
|
||||||
|
|
||||||
|
{% block main_block %}
|
||||||
|
|
||||||
|
{% for severity, message in messages %}
|
||||||
|
<div class='alert alert-{{ severity }}'>{{ message }}</div>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<p>The {{ cfg.box_name }} can be administered in two modes, 'basic'
|
||||||
|
and 'expert'. Basic mode hides a lot of features and configuration
|
||||||
|
options that most users will never need to think about. Expert mode
|
||||||
|
allows you to get into the details.</p>
|
||||||
|
|
||||||
|
<p>Most users can operate the {{ cfg.box_name }} by configuring the
|
||||||
|
limited number of options visible in Basic mode. For the sake of
|
||||||
|
simplicity and ease of use, we hid most of {{ cfg.product_name }}'s
|
||||||
|
less frequently used options. But if you want more sophisticated
|
||||||
|
features, you can enable Expert mode, and {{ cfg.product_name }}
|
||||||
|
will present more advanced menu options.</p>
|
||||||
|
|
||||||
|
<p>You should be aware that it might be possible to render your
|
||||||
|
{{ cfg.box_name }} inaccessible via Expert mode options.</p>
|
||||||
|
|
||||||
|
<form class="form" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
|
||||||
|
{{ form|bootstrap }}
|
||||||
|
|
||||||
|
<input type="submit" class="btn-primary" value="Submit"/>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
Loading…
x
Reference in New Issue
Block a user