mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-19 18:24:39 +00:00
Import all settings
This commit is contained in:
parent
042771be39
commit
4671d85df7
@ -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):
|
||||
|
||||
@ -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}')
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user