Projet

Général

Profil

Télécharger (16,5 ko) Statistiques
| Branche: | Tag: | Révision:

root / extra / modules / admin.py @ e008d4d6

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.admin.menu import *
10
from wcs.roles import get_user_roles
11

    
12
from qommon import errors, get_cfg
13
from qommon.form import *
14

    
15
from wcs.formdef import FormDef
16
from wcs.categories import Category
17

    
18
from events import get_default_event_tags
19
import re
20
from abelium_domino_ui import AbeliumDominoDirectory
21

    
22
class AdminRootDirectory(wcs.admin.root.RootDirectory):
23
    def __init__(self):
24
        self._q_exports = wcs.admin.root.RootDirectory._q_exports
25
        self.menu_items[-1] = ('/', N_('Au Quotidien'))
26

    
27
    def _q_index(self):
28
        from wcs.admin.menu import html_top
29
        html_top('/')
30
        r = TemplateIO(html=True)
31
        r += htmltext('<p>%s</p>') % _('Welcome on Au Quotidien administration interface')
32
        # XXX: add links to documentation, "this is based on w.c.s., a free
33
        # software project", etc.
34
        return r.getvalue()
35

    
36

    
37
class PanelDirectory(Directory):
38
    _q_exports = ['', 'update', 'announces', 'permissions', 'event_keywords',
39
            'announce_themes', 'drupal', 'ezldap', 'strongbox', 'clicrdv', 'domino']
40
    label = N_('Control Panel')
41

    
42
    domino = AbeliumDominoDirectory()
43

    
44
    def _q_index(self):
45
        html_top('panel', _('Control Panel'))
46
        get_response().breadcrumb.append(('panel', _('Control Panel')))
47

    
48
        r = TemplateIO(html=True)
49
        r += htmltext('<ul>')
50
        r += htmltext('<li><a href="announces">%s</a></li>') % _('Announces Options')
51
        r += htmltext('<li><a href="permissions">%s</a></li>') % _('Permissions')
52
        r += htmltext('<li><a href="event_keywords">%s</a></li>') % _('Event Keywords')
53
        r += htmltext('<li><a href="announce_themes">%s</a></li>') % _('Announce Themes')
54
        if get_publisher().has_site_option('drupal'):
55
            r += htmltext('<li><a href="drupal">%s</a></li>') % _('Drupal Integration')
56
        if get_publisher().has_site_option('ezldap'):
57
            r += htmltext('<li><a href="ezldap">%s</a></li>') % _('eZ publish / LDAP Integration')
58
        if get_publisher().has_site_option('strongbox'):
59
            r += htmltext('<li><a href="strongbox">%s</a></li>') % _('Strongbox Support')
60
        if get_publisher().has_site_option('clicrdv'):
61
            r += htmltext('<li><a href="clicrdv">%s</a></li>') % _('ClicRDV Integration')
62
        if get_publisher().has_site_option('domino'):
63
            r += htmltext('<li><a href="domino">%s</a></li>') % _('Abelium Domino Integration')
64
        r += htmltext('</ul>')
65
        return r.getvalue()
66

    
67
    def _verify_mask(self, form):
68
        if form.is_submitted():
69
            if not re.match("[0-9Xx]*$", form.get('mobile_mask') or ''):
70
                form.set_error('mobile_mask', _('Invalid value'))
71
            else:
72
                string_value = form.get_widget('mobile_mask').value
73
                if string_value:
74
                    form.get_widget('mobile_mask').value = string_value.upper()
75

    
76
    def announces(self):
77
        announces_cfg = get_cfg('announces', {})
78
        sms_cfg = get_cfg('sms', {})
79
        form = Form(enctype='multipart/form-data')
80
        hint = ""
81
        if sms_cfg.get('mode','') in ("none",""):
82
            hint = htmltext(_('You must also <a href="%s">configure your SMS provider</a>') % "../settings/sms")
83

    
84
        form.add(CheckboxWidget, 'sms_support', title = _('SMS support'),
85
                hint = hint, value = announces_cfg.get('sms_support', 0))
86
        form.add(StringWidget, 'mobile_mask', title = _('Mask for mobile numbers'),
87
                hint = _('example: 06XXXXXXXX'),
88
                value = announces_cfg.get('mobile_mask',''))
89
        form.add_submit('submit', _('Submit'))
90
        form.add_submit('cancel', _('Cancel'))
91

    
92
        self._verify_mask(form)
93

    
94
        if form.get_widget('cancel').parse():
95
            return redirect('.')
96

    
97
        if not form.is_submitted() or form.has_errors():
98
            get_response().breadcrumb.append(('panel', _('Control Panel')))
99
            get_response().breadcrumb.append(('announces', _('Announces Options')))
100
            html_top('panel', _('Announces Options'))
101
            r = TemplateIO(html=True)
102
            r += htmltext('<h2>%s</h2>') % _('Announces Options')
103
            r += form.render()
104
            return r.getvalue()
105
        else:
106
            from wcs.admin.settings import cfg_submit
107
            cfg_submit(form, 'announces', ('sms_support','mobile_mask'))
108
            return redirect('.')
109

    
110
    def permissions(self):
111
        permissions_cfg = get_cfg('aq-permissions', {})
112
        form = Form(enctype='multipart/form-data')
113
        form.add(SingleSelectWidget, 'forms', title = _('Admin role for forms'),
114
                value = permissions_cfg.get('forms', None),
115
                options = [(None, _('Nobody'))] + get_user_roles())
116
        form.add(SingleSelectWidget, 'events', title = _('Admin role for events'),
117
                value = permissions_cfg.get('events', None),
118
                options = [(None, _('Nobody'))] + get_user_roles())
119
        form.add(SingleSelectWidget, 'links', title = _('Admin role for links'),
120
                value = permissions_cfg.get('links', None),
121
                options = [(None, _('Nobody'))] + get_user_roles())
122
        form.add(SingleSelectWidget, 'announces', title = _('Admin role for announces'),
123
                value = permissions_cfg.get('announces', None),
124
                options = [(None, _('Nobody'))] + get_user_roles())
125
        form.add(SingleSelectWidget, 'payments', title = _('Admin role for payments'),
126
                value = permissions_cfg.get('payments', None),
127
                options = [(None, _('Nobody'))] + get_user_roles())
128
        form.add(SingleSelectWidget, 'strongbox', title = _('Admin role for strongbox'),
129
                value = permissions_cfg.get('strongbox', None),
130
                options = [(None, _('Nobody'))] + get_user_roles())
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(('panel', _('Control Panel')))
139
            get_response().breadcrumb.append(('permissions', _('Permissions')))
140
            html_top('panel', _('Permissions'))
141
            r = TemplateIO(html=True)
142
            r += htmltext('<h2>%s</h2>') % _('Permissions')
143
            r += form.render()
144
            return r.getvalue()
145
        else:
146
            from wcs.admin.settings import cfg_submit
147
            cfg_submit(form, 'aq-permissions',
148
                        ('forms', 'events', 'links', 'announces', 'payments', 'strongbox'))
149
            return redirect('.')
150

    
151
    def event_keywords(self):
152
        misc_cfg = get_cfg('misc', {})
153
        form = Form(enctype='multipart/form-data')
154
        form.add(WidgetList, 'event_tags', title = _('Event Keywords'),
155
                value = misc_cfg.get('event_tags', get_default_event_tags()),
156
                elemnt_type = StringWidget,
157
                add_element_label = _('Add Keyword'),
158
                element_kwargs = {str('render_br'): False, str('size'): 30})
159

    
160
        form.add_submit('submit', _('Submit'))
161
        form.add_submit('cancel', _('Cancel'))
162

    
163
        if form.get_widget('cancel').parse():
164
            return redirect('.')
165

    
166
        if not form.is_submitted() or form.has_errors():
167
            get_response().breadcrumb.append(('panel', _('Control Panel')))
168
            get_response().breadcrumb.append(('event_keywords', _('Event Keywords')))
169
            html_top('panel', _('Event Keywords'))
170
            r = TemplateIO(html=True)
171
            r += htmltext('<h2>%s</h2>') % _('Event Keywords')
172
            r += form.render()
173
            return r.getvalue()
174
        else:
175
            from wcs.admin.settings import cfg_submit
176
            cfg_submit(form, 'misc', ('event_tags',))
177
            return redirect('.')
178

    
179
    def announce_themes(self):
180
        misc_cfg = get_cfg('misc', {})
181
        form = Form(enctype='multipart/form-data')
182
        form.add(WidgetList, 'announce_themes', title = _('Announce Themes'),
183
                value = misc_cfg.get('announce_themes', []),
184
                elemnt_type = StringWidget,
185
                add_element_label = _('Add Theme'),
186
                element_kwargs = {str('render_br'): False, str('size'): 30})
187

    
188
        form.add_submit('submit', _('Submit'))
189
        form.add_submit('cancel', _('Cancel'))
190

    
191
        if form.get_widget('cancel').parse():
192
            return redirect('.')
193

    
194
        if not form.is_submitted() or form.has_errors():
195
            get_response().breadcrumb.append(('panel', _('Control Panel')))
196
            get_response().breadcrumb.append(('announce_themes', _('Announce Themes')))
197
            html_top('panel', _('Announce Themes'))
198
            r = TemplateIO(html=True)
199
            r += htmltext('<h2>%s</h2>') % _('Announce Themes')
200
            r += form.render()
201
            return r.getvalue()
202
        else:
203
            from wcs.admin.settings import cfg_submit
204
            cfg_submit(form, 'misc', ('announce_themes',))
205
            return redirect('.')
206

    
207
    def drupal(self):
208
        if not get_publisher().has_site_option('drupal'):
209
            raise errors.TraversalError()
210
        misc_cfg = get_cfg('misc', {})
211
        form = Form(enctype='multipart/form-data')
212
        form.add(StringWidget, 'aq-drupal-ip', title=_('IP Address of Drupal'),
213
                value=misc_cfg.get('aq-drupal-ip'), required=False,
214
                hint=_('Empty for disabled authentication'))
215

    
216
        form.add_submit('submit', _('Submit'))
217
        form.add_submit('cancel', _('Cancel'))
218

    
219
        if form.get_widget('cancel').parse():
220
            return redirect('.')
221

    
222
        if not form.is_submitted() or form.has_errors():
223
            get_response().breadcrumb.append(('panel', _('Control Panel')))
224
            get_response().breadcrumb.append(('drupal', _('Drupal Integration')))
225
            html_top('panel', _('Drupal Integration'))
226
            r = TemplateIO(html=True)
227
            r += htmltext('<h2>%s</h2>') % _('Drupal Integration')
228
            r += form.render()
229
            return r.getvalue()
230
        else:
231
            from wcs.admin.settings import cfg_submit
232
            cfg_submit(form, 'misc', ('aq-drupal-ip',))
233
            return redirect('.')
234

    
235
    def ezldap(self):
236
        if not get_publisher().has_site_option('ezldap'):
237
            raise errors.TraversalError()
238
        misc_cfg = get_cfg('misc', {})
239
        form = Form(enctype='multipart/form-data')
240
        form.add(StringWidget, 'aq-ezldap-url', title=_('LDAP URL'),
241
                value=misc_cfg.get('aq-ezldap-url'), required=False,
242
                hint=_('Empty to disable eZ/LDAP support'))
243
        form.add(StringWidget, 'aq-ezldap-binddn', title=_('LDAP Admin Bind DN'),
244
                value=misc_cfg.get('aq-ezldap-binddn'), required=False)
245
        form.add(PasswordWidget, 'aq-ezldap-bindpassword', title=_('LDAP Admin Bind Password'),
246
                value=misc_cfg.get('aq-ezldap-bindpassword'), required=False)
247
        form.add(StringWidget, 'aq-ezldap-basedn', title=_('LDAP Base DN'),
248
                value=misc_cfg.get('aq-ezldap-basedn'), required=False)
249
        form.add(StringWidget, 'aq-ezldap-dntemplate', title=_('LDAP DN Template'),
250
                value=misc_cfg.get('aq-ezldap-dntemplate'), required=False)
251
        form.add(StringWidget, 'aq-ezldap-ip', title=_('Use Auth-DN header only from this IP'),
252
                value=misc_cfg.get('aq-ezldap-ip'), required=False,
253
                hint=_('Empty to disable IP filtering'))
254

    
255
        form.add_submit('submit', _('Submit'))
256
        form.add_submit('cancel', _('Cancel'))
257

    
258
        if form.get_widget('cancel').parse():
259
            return redirect('.')
260

    
261
        if not form.is_submitted() or form.has_errors():
262
            get_response().breadcrumb.append(('panel', _('Control Panel')))
263
            get_response().breadcrumb.append(('ezldap', _('eZ publish / LDAP Integration')))
264
            html_top('panel', _('eZ publish / LDAP Integration'))
265
            r = TemplateIO(html=True)
266
            r += htmltext('<h2>%s</h2>') % _('eZ publish / LDAP Integration')
267
            r += form.render()
268
            return r.getvalue()
269
        else:
270
            from wcs.admin.settings import cfg_submit
271
            cfg_submit(form, 'misc', ('aq-ezldap-url',
272
                        'aq-ezldap-binddn', 'aq-ezldap-bindpassword',
273
                        'aq-ezldap-basedn', 'aq-ezldap-dntemplate',
274
                        'aq-ezldap-ip'))
275
            return redirect('.')
276

    
277
    def strongbox(self):
278
        if not get_publisher().has_site_option('strongbox'):
279
            raise errors.TraversalError()
280
        misc_cfg = get_cfg('misc', {})
281
        form = Form(enctype='multipart/form-data')
282
        form.add(CheckboxWidget, 'aq-strongbox', title=_('Strongbox Support'),
283
                value=misc_cfg.get('aq-strongbox'), required=False)
284

    
285
        form.add_submit('submit', _('Submit'))
286
        form.add_submit('cancel', _('Cancel'))
287

    
288
        if form.get_widget('cancel').parse():
289
            return redirect('.')
290

    
291
        if not form.is_submitted() or form.has_errors():
292
            get_response().breadcrumb.append(('panel', _('Control Panel')))
293
            get_response().breadcrumb.append(('strongbox', _('Strongbox Support')))
294
            html_top('panel', _('Strongbox Support'))
295
            r = TemplateIO(html=True)
296
            r += htmltext('<h2>%s</h2>') % _('Strongbox Support')
297
            r += form.render()
298
            return r.getvalue()
299
        else:
300
            from wcs.admin.settings import cfg_submit
301
            cfg_submit(form, 'misc', ('aq-strongbox',))
302
            return redirect('.')
303

    
304
    def clicrdv(self):
305
        if not get_publisher().has_site_option('clicrdv'):
306
            raise errors.TraversalError()
307
        misc_cfg = get_cfg('misc', {})
308
        form = Form(enctype='multipart/form-data')
309
        form.add(SingleSelectWidget, 'aq-clicrdv-server', title=_('ClicRDV Server'),
310
                value=misc_cfg.get('aq-clicrdv-server', 'sandbox.clicrdv.com'), required=True,
311
                options=[(str('www.clicrdv.com'), _('Production Server')),
312
                         (str('sandbox.clicrdv.com'), _('Sandbox Server'))])
313
        form.add(StringWidget, 'aq-clicrdv-api-key', title=_('API Key'),
314
                value=misc_cfg.get('aq-clicrdv-api-key'), required=False,
315
                size=40, hint=_('Empty to disable ClicRDV support'))
316
        form.add(StringWidget, 'aq-clicrdv-api-username', title=_('Username'),
317
                value=misc_cfg.get('aq-clicrdv-api-username'), required=False)
318
        form.add(StringWidget, 'aq-clicrdv-api-password', title=_('Password'),
319
                value=misc_cfg.get('aq-clicrdv-api-password'), required=False)
320

    
321
        form.add_submit('submit', _('Submit'))
322
        form.add_submit('cancel', _('Cancel'))
323

    
324
        if form.get_widget('cancel').parse():
325
            return redirect('.')
326

    
327
        if not form.is_submitted() or form.has_errors():
328
            get_response().breadcrumb.append(('panel', _('Control Panel')))
329
            get_response().breadcrumb.append(('clicrdv', _('ClicRDV Integration')))
330
            html_top('panel', _('ClicRDV Integration'))
331
            r = TemplateIO(html=True)
332
            r += htmltext('<h2>%s</h2>') % _('ClicRDV Integration')
333
            r += form.render()
334
            r += htmltext('<p>%s</p>') % _('Available Interventions: ')
335
            try:
336
                from clicrdv import get_all_intervention_sets
337
                intervention_sets = get_all_intervention_sets()
338
                r += htmltext('<ul>')
339
                for s in intervention_sets:
340
                    r += htmltext('<li><strong>clicrdv_get_interventions_in_set(%s)</strong> - %s') % (
341
                            s['id'], s['name'])
342
                    r += htmltext('<ul>')
343
                    for n, intervention in s['interventions']:
344
                        r += htmltext('<li>%s (id: %s)</li>') % (intervention, n)
345
                    r += htmltext('</ul></li>')
346
                r += htmltext('</ul>')
347
            except Exception, e:
348
                r += htmltext('<p>%s (%s)</p>') % (
349
                        _('Cannot access to ClicRDV service'), str(e))
350
            return r.getvalue()
351
        else:
352
            from wcs.admin.settings import cfg_submit
353
            cfg_submit(form, 'misc', ('aq-clicrdv-server',
354
                                      'aq-clicrdv-api-key',
355
                                      'aq-clicrdv-api-username',
356
                                      'aq-clicrdv-api-password'))
357
            return redirect('.')
358

    
359

    
360
AdminRootDirectory.register_page('panel', PanelDirectory())
361

    
362
import categories_admin
363

    
(7-7/33)