1
|
import os
|
2
|
|
3
|
from quixote import get_publisher, redirect
|
4
|
from quixote.directory import Directory
|
5
|
from quixote.html import htmltext, TemplateIO
|
6
|
|
7
|
import wcs.admin.root
|
8
|
import wcs.root
|
9
|
from wcs.roles import get_user_roles
|
10
|
|
11
|
from qommon import _
|
12
|
from qommon import errors, get_cfg
|
13
|
from qommon.form import *
|
14
|
|
15
|
import wcs.admin.settings
|
16
|
from wcs.formdef import FormDef
|
17
|
from wcs.categories import Category
|
18
|
from qommon.backoffice.menu import html_top
|
19
|
|
20
|
from events import get_default_event_tags
|
21
|
import re
|
22
|
from abelium_domino_ui import AbeliumDominoDirectory
|
23
|
|
24
|
class AdminRootDirectory(wcs.admin.root.RootDirectory):
|
25
|
def __init__(self):
|
26
|
self._q_exports = wcs.admin.root.RootDirectory._q_exports
|
27
|
self.menu_items[-1] = ('/', N_('Publik'))
|
28
|
|
29
|
def get_intro_text(self):
|
30
|
return _('Welcome on Publik administration interface')
|
31
|
|
32
|
|
33
|
class PanelDirectory(Directory):
|
34
|
_q_exports = ['', 'update', 'announces', 'permissions', 'event_keywords',
|
35
|
'announce_themes', 'strongbox', 'clicrdv', 'domino']
|
36
|
label = N_('Control Panel')
|
37
|
|
38
|
domino = AbeliumDominoDirectory()
|
39
|
|
40
|
def _verify_mask(self, form):
|
41
|
if form.is_submitted():
|
42
|
if not re.match("[0-9Xx]*$", form.get('mobile_mask') or ''):
|
43
|
form.set_error('mobile_mask', _('Invalid value'))
|
44
|
else:
|
45
|
string_value = form.get_widget('mobile_mask').value
|
46
|
if string_value:
|
47
|
form.get_widget('mobile_mask').value = string_value.upper()
|
48
|
|
49
|
def announces(self):
|
50
|
announces_cfg = get_cfg('announces', {})
|
51
|
sms_cfg = get_cfg('sms', {})
|
52
|
form = Form(enctype='multipart/form-data')
|
53
|
hint = ""
|
54
|
if sms_cfg.get('mode','') in ("none",""):
|
55
|
hint = htmltext(_('You must also <a href="%s">configure your SMS provider</a>') % "../settings/sms")
|
56
|
|
57
|
form.add(CheckboxWidget, 'sms_support', title = _('SMS support'),
|
58
|
hint = hint, value = announces_cfg.get('sms_support', 0))
|
59
|
form.add(StringWidget, 'mobile_mask', title = _('Mask for mobile numbers'),
|
60
|
hint = _('example: 06XXXXXXXX'),
|
61
|
value = announces_cfg.get('mobile_mask',''))
|
62
|
form.add_submit('submit', _('Submit'))
|
63
|
form.add_submit('cancel', _('Cancel'))
|
64
|
|
65
|
self._verify_mask(form)
|
66
|
|
67
|
if form.get_widget('cancel').parse():
|
68
|
return redirect('..')
|
69
|
|
70
|
if not form.is_submitted() or form.has_errors():
|
71
|
get_response().breadcrumb.append(('aq/announces', _('Announces Options')))
|
72
|
html_top('settings', _('Announces Options'))
|
73
|
r = TemplateIO(html=True)
|
74
|
r += htmltext('<h2>%s</h2>') % _('Announces Options')
|
75
|
r += form.render()
|
76
|
return r.getvalue()
|
77
|
else:
|
78
|
from wcs.admin.settings import cfg_submit
|
79
|
cfg_submit(form, 'announces', ('sms_support','mobile_mask'))
|
80
|
return redirect('..')
|
81
|
|
82
|
def permissions(self):
|
83
|
permissions_cfg = get_cfg('aq-permissions', {})
|
84
|
form = Form(enctype='multipart/form-data')
|
85
|
form.add(SingleSelectWidget, 'forms', title = _('Admin role for forms'),
|
86
|
value = permissions_cfg.get('forms', None),
|
87
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
88
|
form.add(SingleSelectWidget, 'events', title = _('Admin role for events'),
|
89
|
value = permissions_cfg.get('events', None),
|
90
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
91
|
form.add(SingleSelectWidget, 'links', title = _('Admin role for links'),
|
92
|
value = permissions_cfg.get('links', None),
|
93
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
94
|
form.add(SingleSelectWidget, 'announces', title = _('Admin role for announces'),
|
95
|
value = permissions_cfg.get('announces', None),
|
96
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
97
|
form.add(SingleSelectWidget, 'payments', title = _('Admin role for payments'),
|
98
|
value = permissions_cfg.get('payments', None),
|
99
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
100
|
form.add(SingleSelectWidget, 'strongbox', title = _('Admin role for strongbox'),
|
101
|
value = permissions_cfg.get('strongbox', None),
|
102
|
options = [(None, _('Nobody'), None)] + get_user_roles())
|
103
|
form.add_submit('submit', _('Submit'))
|
104
|
form.add_submit('cancel', _('Cancel'))
|
105
|
|
106
|
if form.get_widget('cancel').parse():
|
107
|
return redirect('..')
|
108
|
|
109
|
if not form.is_submitted() or form.has_errors():
|
110
|
get_response().breadcrumb.append(('aq/permissions', _('Permissions')))
|
111
|
html_top('settings', _('Permissions'))
|
112
|
r = TemplateIO(html=True)
|
113
|
r += htmltext('<h2>%s</h2>') % _('Permissions')
|
114
|
r += form.render()
|
115
|
return r.getvalue()
|
116
|
else:
|
117
|
from wcs.admin.settings import cfg_submit
|
118
|
cfg_submit(form, 'aq-permissions',
|
119
|
('forms', 'events', 'links', 'announces', 'payments', 'strongbox'))
|
120
|
return redirect('..')
|
121
|
|
122
|
def event_keywords(self):
|
123
|
misc_cfg = get_cfg('misc', {})
|
124
|
form = Form(enctype='multipart/form-data')
|
125
|
form.add(WidgetList, 'event_tags', title = _('Event Keywords'),
|
126
|
value = misc_cfg.get('event_tags', get_default_event_tags()),
|
127
|
elemnt_type = StringWidget,
|
128
|
add_element_label = _('Add Keyword'),
|
129
|
element_kwargs = {str('render_br'): False, str('size'): 30})
|
130
|
|
131
|
form.add_submit('submit', _('Submit'))
|
132
|
form.add_submit('cancel', _('Cancel'))
|
133
|
|
134
|
if form.get_widget('cancel').parse():
|
135
|
return redirect('..')
|
136
|
|
137
|
if not form.is_submitted() or form.has_errors():
|
138
|
get_response().breadcrumb.append(('aq/event_keywords', _('Event Keywords')))
|
139
|
html_top('settings', _('Event Keywords'))
|
140
|
r = TemplateIO(html=True)
|
141
|
r += htmltext('<h2>%s</h2>') % _('Event Keywords')
|
142
|
r += form.render()
|
143
|
return r.getvalue()
|
144
|
else:
|
145
|
from wcs.admin.settings import cfg_submit
|
146
|
cfg_submit(form, 'misc', ('event_tags',))
|
147
|
return redirect('..')
|
148
|
|
149
|
def announce_themes(self):
|
150
|
misc_cfg = get_cfg('misc', {})
|
151
|
form = Form(enctype='multipart/form-data')
|
152
|
form.add(WidgetList, 'announce_themes', title = _('Announce Themes'),
|
153
|
value = misc_cfg.get('announce_themes', []),
|
154
|
elemnt_type = StringWidget,
|
155
|
add_element_label = _('Add Theme'),
|
156
|
element_kwargs = {str('render_br'): False, str('size'): 30})
|
157
|
|
158
|
form.add_submit('submit', _('Submit'))
|
159
|
form.add_submit('cancel', _('Cancel'))
|
160
|
|
161
|
if form.get_widget('cancel').parse():
|
162
|
return redirect('..')
|
163
|
|
164
|
if not form.is_submitted() or form.has_errors():
|
165
|
get_response().breadcrumb.append(('aq/announce_themes', _('Announce Themes')))
|
166
|
html_top('settings', _('Announce Themes'))
|
167
|
r = TemplateIO(html=True)
|
168
|
r += htmltext('<h2>%s</h2>') % _('Announce Themes')
|
169
|
r += form.render()
|
170
|
return r.getvalue()
|
171
|
else:
|
172
|
from wcs.admin.settings import cfg_submit
|
173
|
cfg_submit(form, 'misc', ('announce_themes',))
|
174
|
return redirect('..')
|
175
|
|
176
|
def strongbox(self):
|
177
|
if not get_publisher().has_site_option('strongbox'):
|
178
|
raise errors.TraversalError()
|
179
|
misc_cfg = get_cfg('misc', {})
|
180
|
form = Form(enctype='multipart/form-data')
|
181
|
form.add(CheckboxWidget, 'aq-strongbox', title=_('Strongbox Support'),
|
182
|
value=misc_cfg.get('aq-strongbox'), required=False)
|
183
|
|
184
|
form.add_submit('submit', _('Submit'))
|
185
|
form.add_submit('cancel', _('Cancel'))
|
186
|
|
187
|
if form.get_widget('cancel').parse():
|
188
|
return redirect('..')
|
189
|
|
190
|
if not form.is_submitted() or form.has_errors():
|
191
|
get_response().breadcrumb.append(('aq/strongbox', _('Strongbox Support')))
|
192
|
html_top('settings', _('Strongbox Support'))
|
193
|
r = TemplateIO(html=True)
|
194
|
r += htmltext('<h2>%s</h2>') % _('Strongbox Support')
|
195
|
r += form.render()
|
196
|
return r.getvalue()
|
197
|
else:
|
198
|
from wcs.admin.settings import cfg_submit
|
199
|
cfg_submit(form, 'misc', ('aq-strongbox',))
|
200
|
return redirect('..')
|
201
|
|
202
|
def clicrdv(self):
|
203
|
if not get_publisher().has_site_option('clicrdv'):
|
204
|
raise errors.TraversalError()
|
205
|
misc_cfg = get_cfg('misc', {})
|
206
|
form = Form(enctype='multipart/form-data')
|
207
|
form.add(SingleSelectWidget, 'aq-clicrdv-server', title=_('ClicRDV Server'),
|
208
|
value=misc_cfg.get('aq-clicrdv-server', 'sandbox.clicrdv.com'), required=True,
|
209
|
options=[(str('www.clicrdv.com'), _('Production Server')),
|
210
|
(str('sandbox.clicrdv.com'), _('Sandbox Server'))])
|
211
|
form.add(StringWidget, 'aq-clicrdv-api-key', title=_('API Key'),
|
212
|
value=misc_cfg.get('aq-clicrdv-api-key'), required=False,
|
213
|
size=40, hint=_('Empty to disable ClicRDV support'))
|
214
|
form.add(StringWidget, 'aq-clicrdv-api-username', title=_('Username'),
|
215
|
value=misc_cfg.get('aq-clicrdv-api-username'), required=False)
|
216
|
form.add(StringWidget, 'aq-clicrdv-api-password', title=_('Password'),
|
217
|
value=misc_cfg.get('aq-clicrdv-api-password'), required=False)
|
218
|
|
219
|
form.add_submit('submit', _('Submit'))
|
220
|
form.add_submit('cancel', _('Cancel'))
|
221
|
|
222
|
if form.get_widget('cancel').parse():
|
223
|
return redirect('..')
|
224
|
|
225
|
if not form.is_submitted() or form.has_errors():
|
226
|
get_response().breadcrumb.append(('aq/clicrdv', _('ClicRDV Integration')))
|
227
|
html_top('settings', _('ClicRDV Integration'))
|
228
|
r = TemplateIO(html=True)
|
229
|
r += htmltext('<h2>%s</h2>') % _('ClicRDV Integration')
|
230
|
r += form.render()
|
231
|
r += htmltext('<p>%s</p>') % _('Available Interventions: ')
|
232
|
try:
|
233
|
from clicrdv import get_all_intervention_sets
|
234
|
intervention_sets = get_all_intervention_sets()
|
235
|
r += htmltext('<ul>')
|
236
|
for s in intervention_sets:
|
237
|
r += htmltext('<li><strong>clicrdv_get_interventions_in_set(%s)</strong> - %s') % (
|
238
|
s['id'], s['name'])
|
239
|
r += htmltext('<ul>')
|
240
|
for n, intervention in s['interventions']:
|
241
|
r += htmltext('<li>%s (id: %s)</li>') % (intervention, n)
|
242
|
r += htmltext('</ul></li>')
|
243
|
r += htmltext('</ul>')
|
244
|
except Exception, e:
|
245
|
r += htmltext('<p>%s (%s)</p>') % (
|
246
|
_('Cannot access to ClicRDV service'), str(e))
|
247
|
return r.getvalue()
|
248
|
else:
|
249
|
from wcs.admin.settings import cfg_submit
|
250
|
cfg_submit(form, 'misc', ('aq-clicrdv-server',
|
251
|
'aq-clicrdv-api-key',
|
252
|
'aq-clicrdv-api-username',
|
253
|
'aq-clicrdv-api-password'))
|
254
|
return redirect('..')
|
255
|
|
256
|
|
257
|
class SettingsDirectory(wcs.admin.settings.SettingsDirectory):
|
258
|
def _q_index(self):
|
259
|
r = TemplateIO(html=True)
|
260
|
r += htmltext(super(SettingsDirectory, self)._q_index())
|
261
|
r += htmltext('<div class="splitcontent-right">')
|
262
|
r += htmltext('<div class="bo-block">')
|
263
|
r += htmltext('<h2>%s</h2>') % _('Extra Options')
|
264
|
r += htmltext('<ul>')
|
265
|
r += htmltext('<li><a href="aq/announces">%s</a></li>') % _('Announces Options')
|
266
|
r += htmltext('<li><a href="aq/permissions">%s</a></li>') % _('Permissions')
|
267
|
r += htmltext('<li><a href="aq/event_keywords">%s</a></li>') % _('Event Keywords')
|
268
|
r += htmltext('<li><a href="aq/announce_themes">%s</a></li>') % _('Announce Themes')
|
269
|
if get_publisher().has_site_option('strongbox'):
|
270
|
r += htmltext('<li><a href="aq/strongbox">%s</a></li>') % _('Strongbox Support')
|
271
|
if get_publisher().has_site_option('clicrdv'):
|
272
|
r += htmltext('<li><a href="aq/clicrdv">%s</a></li>') % _('ClicRDV Integration')
|
273
|
if get_publisher().has_site_option('domino'):
|
274
|
r += htmltext('<li><a href="aq/domino">%s</a></li>') % _('Abelium Domino Integration')
|
275
|
r += htmltext('</ul>')
|
276
|
r += htmltext('</div>')
|
277
|
r += htmltext('</div>')
|
278
|
return r.getvalue()
|
279
|
|
280
|
def _q_lookup(self, component):
|
281
|
if component == 'aq':
|
282
|
return PanelDirectory()
|
283
|
return super(SettingsDirectory, self)._q_lookup(component)
|
284
|
|
285
|
import categories_admin
|