Import all settings

This commit is contained in:
Adrian Moennich 2014-10-03 11:34:53 +02:00
parent 042771be39
commit 4671d85df7
2 changed files with 41 additions and 11 deletions

View File

@ -18,12 +18,14 @@ from __future__ import unicode_literals
from flask_pluginengine import render_plugin_template
from wtforms import ValidationError
from wtforms.fields.core import BooleanField
from wtforms.fields.simple import TextField, TextAreaField
from wtforms.validators import DataRequired
from indico.core import signals
from indico.core.plugins import IndicoPlugin
from indico.web.forms.base import IndicoForm
from indico.web.forms.fields import PrincipalField, MultipleItemsField
from indico.web.forms.fields import PrincipalField, MultipleItemsField, EmailListField, UnsafePasswordField
from indico.web.forms.widgets import CKEditorWidget
from MaKaC.webinterface.displayMgr import EventMenuEntry
from MaKaC.webinterface.pages.conferences import WPTPLConferenceDisplay, WPXSLConferenceDisplay
@ -34,14 +36,22 @@ from indico_chat.views import WPChatEventPage
class SettingsForm(IndicoForm):
admins = PrincipalField('Administrators')
server = TextField('XMPP server')
muc_server = TextField('XMPP MUC server', description='Usually conference.XMPPSERVER')
how_to_connect = TextAreaField('How to connect', widget=CKEditorWidget(),
description='Text shown below the chatrooms on an event page')
admins = PrincipalField('Administrators', description='Users who can manage chatrooms for all events')
server = TextField('XMPP server', [DataRequired()], description='The hostname of the XMPP server')
muc_server = TextField('XMPP MUC server', [DataRequired()], description="The hostname of the XMPP MUC server")
bot_jid = TextField('Bot JID', [DataRequired()],
description="Jabber ID of the XMPP bot. Can be just a username (in that case the default "
"server is assumed) or a username@server.")
bot_password = UnsafePasswordField('Bot Password', [DataRequired()], description="Password for the bot")
notify_admins = BooleanField('Notify admins', description="Should chat administrators receive email notifications?")
notify_emails = EmailListField('Notification emails',
description="Additional email addresses to sent notifications to (one per line)")
# TODO: log retrieval URL
chat_links = MultipleItemsField('Chatroom links', fields=(('title', 'Title'), ('link', 'Link')),
description='Links to join the chatroom. You can use the placeholders {room} and '
'{server}.')
description="Links to join the chatroom. You can use the placeholders {room} for "
"the room name and {server} for the MUC server.")
how_to_connect = TextAreaField('How to connect', widget=CKEditorWidget(),
description="Text shown below the chatrooms on an event page")
def validate_chat_links(self, field):
for item in field.data:
@ -56,6 +66,13 @@ class ChatPlugin(IndicoPlugin):
"""
settings_form = SettingsForm
settings_form_field_opts = {
'server': {'placeholder': 'jabber.server.tld'},
'muc_server': {'placeholder': 'conference.jabber.server.tld'},
'notify_emails': {'rows': 3, 'cols': 40, 'style': 'width: auto; height: auto;'},
'bot_jid': {'autocomplete': 'off'},
'bot_password': {'autocomplete': 'off'}
}
@property
def default_settings(self):

View File

@ -20,6 +20,7 @@ import re
from indico.core.db import db
from indico.util.console import cformat
from indico.util.string import is_valid_mail
from indico.util.struct.iterables import committing_iterator
from indico_chat.models.chatrooms import Chatroom, ChatroomEventAssociation
@ -49,11 +50,23 @@ class ChatImporter(Importer):
type_opts = self.zodb_root['plugins']['InstantMessaging']._PluginBase__options
opts = self.zodb_root['plugins']['InstantMessaging']._PluginType__plugins['XMPP']._PluginBase__options
host = convert_to_unicode(opts['chatServerHost'].getValue())
ChatPlugin.settings.set('admins', convert_principal_list(opts['admins']))
ChatPlugin.settings.set('server', host)
ChatPlugin.settings.set('muc_server', 'conference.{}'.format(host))
ChatPlugin.settings.set('how_to_connect', opts['ckEditor'].getValue().strip())
ChatPlugin.settings.set('admins', convert_principal_list(opts['admins']))
# TODO: migrate other settings
settings_map = {
'sendMailNotifications': 'notify_admins',
'additionalEmails': 'notify_emails',
'indicoUsername': 'bot_jid',
'indicoPassword': 'bot_password',
'ckEditor': 'how_to_connect'
}
for old, new in settings_map.iteritems():
value = opts[old].getValue()
if isinstance(value, basestring):
value = convert_to_unicode(value).strip()
elif new == 'notify_emails':
value = [email for email in value if is_valid_mail(email, multi=False)]
ChatPlugin.settings.set(new, value)
chat_links = []
for item in type_opts['customLinks'].getValue():
link = item['structure'].replace('[chatroom]', '{room}').replace('[host]', '{server}')