Projet

Général

Profil

Télécharger (12,6 ko) Statistiques
| Branche: | Tag: | Révision:

root / auquotidien / modules / admin.py @ 8b02623d

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
(7-7/27)