Projet

Général

Profil

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

root / auquotidien / modules / admin.py @ 80784d04

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
        if get_publisher().has_site_option('auquotidien-events'):
89
            form.add(SingleSelectWidget, 'events', title = _('Admin role for events'),
90
                    value = permissions_cfg.get('events', None),
91
                    options = [(None, _('Nobody'), None)] + get_user_roles())
92
        if get_publisher().has_site_option('auquotidien-links'):
93
            form.add(SingleSelectWidget, 'links', title = _('Admin role for links'),
94
                    value = permissions_cfg.get('links', None),
95
                    options = [(None, _('Nobody'), None)] + get_user_roles())
96
        if get_publisher().has_site_option('auquotidien-announces'):
97
            form.add(SingleSelectWidget, 'announces', title = _('Admin role for announces'),
98
                    value = permissions_cfg.get('announces', None),
99
                    options = [(None, _('Nobody'), None)] + get_user_roles())
100
        if get_publisher().has_site_option('auquotidien-payments'):
101
            form.add(SingleSelectWidget, 'payments', title = _('Admin role for payments'),
102
                    value = permissions_cfg.get('payments', None),
103
                    options = [(None, _('Nobody'), None)] + get_user_roles())
104
        if get_publisher().has_site_option('auquotidien-strongbox'):
105
            form.add(SingleSelectWidget, 'strongbox', title = _('Admin role for strongbox'),
106
                    value = permissions_cfg.get('strongbox', None),
107
                    options = [(None, _('Nobody'), None)] + get_user_roles())
108
        form.add_submit('submit', _('Submit'))
109
        form.add_submit('cancel', _('Cancel'))
110

    
111
        if form.get_widget('cancel').parse():
112
            return redirect('..')
113

    
114
        if not form.is_submitted() or form.has_errors():
115
            get_response().breadcrumb.append(('aq/permissions', _('Permissions')))
116
            html_top('settings', _('Permissions'))
117
            r = TemplateIO(html=True)
118
            r += htmltext('<h2>%s</h2>') % _('Permissions')
119
            r += form.render()
120
            return r.getvalue()
121
        else:
122
            from wcs.admin.settings import cfg_submit
123
            cfg_submit(form, 'aq-permissions',
124
                        ('forms', 'events', 'links', 'announces', 'payments', 'strongbox'))
125
            return redirect('..')
126

    
127
    def event_keywords(self):
128
        misc_cfg = get_cfg('misc', {})
129
        form = Form(enctype='multipart/form-data')
130
        form.add(WidgetList, 'event_tags', title = _('Event Keywords'),
131
                value = misc_cfg.get('event_tags', get_default_event_tags()),
132
                elemnt_type = StringWidget,
133
                add_element_label = _('Add Keyword'),
134
                element_kwargs = {str('render_br'): False, str('size'): 30})
135

    
136
        form.add_submit('submit', _('Submit'))
137
        form.add_submit('cancel', _('Cancel'))
138

    
139
        if form.get_widget('cancel').parse():
140
            return redirect('..')
141

    
142
        if not form.is_submitted() or form.has_errors():
143
            get_response().breadcrumb.append(('aq/event_keywords', _('Event Keywords')))
144
            html_top('settings', _('Event Keywords'))
145
            r = TemplateIO(html=True)
146
            r += htmltext('<h2>%s</h2>') % _('Event Keywords')
147
            r += form.render()
148
            return r.getvalue()
149
        else:
150
            from wcs.admin.settings import cfg_submit
151
            cfg_submit(form, 'misc', ('event_tags',))
152
            return redirect('..')
153

    
154
    def announce_themes(self):
155
        misc_cfg = get_cfg('misc', {})
156
        form = Form(enctype='multipart/form-data')
157
        form.add(WidgetList, 'announce_themes', title = _('Announce Themes'),
158
                value = misc_cfg.get('announce_themes', []),
159
                elemnt_type = StringWidget,
160
                add_element_label = _('Add Theme'),
161
                element_kwargs = {str('render_br'): False, str('size'): 30})
162

    
163
        form.add_submit('submit', _('Submit'))
164
        form.add_submit('cancel', _('Cancel'))
165

    
166
        if form.get_widget('cancel').parse():
167
            return redirect('..')
168

    
169
        if not form.is_submitted() or form.has_errors():
170
            get_response().breadcrumb.append(('aq/announce_themes', _('Announce Themes')))
171
            html_top('settings', _('Announce Themes'))
172
            r = TemplateIO(html=True)
173
            r += htmltext('<h2>%s</h2>') % _('Announce Themes')
174
            r += form.render()
175
            return r.getvalue()
176
        else:
177
            from wcs.admin.settings import cfg_submit
178
            cfg_submit(form, 'misc', ('announce_themes',))
179
            return redirect('..')
180

    
181
    def strongbox(self):
182
        if not get_publisher().has_site_option('strongbox'):
183
            raise errors.TraversalError()
184
        misc_cfg = get_cfg('misc', {})
185
        form = Form(enctype='multipart/form-data')
186
        form.add(CheckboxWidget, 'aq-strongbox', title=_('Strongbox Support'),
187
                value=misc_cfg.get('aq-strongbox'), required=False)
188

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

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

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

    
207
    def clicrdv(self):
208
        if not get_publisher().has_site_option('clicrdv'):
209
            raise errors.TraversalError()
210
        misc_cfg = get_cfg('misc', {})
211
        form = Form(enctype='multipart/form-data')
212
        form.add(SingleSelectWidget, 'aq-clicrdv-server', title=_('ClicRDV Server'),
213
                value=misc_cfg.get('aq-clicrdv-server', 'sandbox.clicrdv.com'), required=True,
214
                options=[(str('www.clicrdv.com'), _('Production Server')),
215
                         (str('sandbox.clicrdv.com'), _('Sandbox Server'))])
216
        form.add(StringWidget, 'aq-clicrdv-api-key', title=_('API Key'),
217
                value=misc_cfg.get('aq-clicrdv-api-key'), required=False,
218
                size=40, hint=_('Empty to disable ClicRDV support'))
219
        form.add(StringWidget, 'aq-clicrdv-api-username', title=_('Username'),
220
                value=misc_cfg.get('aq-clicrdv-api-username'), required=False)
221
        form.add(StringWidget, 'aq-clicrdv-api-password', title=_('Password'),
222
                value=misc_cfg.get('aq-clicrdv-api-password'), required=False)
223

    
224
        form.add_submit('submit', _('Submit'))
225
        form.add_submit('cancel', _('Cancel'))
226

    
227
        if form.get_widget('cancel').parse():
228
            return redirect('..')
229

    
230
        if not form.is_submitted() or form.has_errors():
231
            get_response().breadcrumb.append(('aq/clicrdv', _('ClicRDV Integration')))
232
            html_top('settings', _('ClicRDV Integration'))
233
            r = TemplateIO(html=True)
234
            r += htmltext('<h2>%s</h2>') % _('ClicRDV Integration')
235
            r += form.render()
236
            r += htmltext('<p>%s</p>') % _('Available Interventions: ')
237
            try:
238
                from clicrdv import get_all_intervention_sets
239
                intervention_sets = get_all_intervention_sets()
240
                r += htmltext('<ul>')
241
                for s in intervention_sets:
242
                    r += htmltext('<li><strong>clicrdv_get_interventions_in_set(%s)</strong> - %s') % (
243
                            s['id'], s['name'])
244
                    r += htmltext('<ul>')
245
                    for n, intervention in s['interventions']:
246
                        r += htmltext('<li>%s (id: %s)</li>') % (intervention, n)
247
                    r += htmltext('</ul></li>')
248
                r += htmltext('</ul>')
249
            except Exception, e:
250
                r += htmltext('<p>%s (%s)</p>') % (
251
                        _('Cannot access to ClicRDV service'), str(e))
252
            return r.getvalue()
253
        else:
254
            from wcs.admin.settings import cfg_submit
255
            cfg_submit(form, 'misc', ('aq-clicrdv-server',
256
                                      'aq-clicrdv-api-key',
257
                                      'aq-clicrdv-api-username',
258
                                      'aq-clicrdv-api-password'))
259
            return redirect('..')
260

    
261

    
262
class SettingsDirectory(wcs.admin.settings.SettingsDirectory):
263
    def _q_index(self):
264
        if not (get_publisher().has_site_option('auquotidien-announces') or
265
                get_publisher().has_site_option('auquotidien-links') or
266
                get_publisher().has_site_option('auquotidien-events') or
267
                get_publisher().has_site_option('auquotidien-payments') or
268
                get_publisher().has_site_option('auquotidien-strongvox')):
269
            return super(SettingsDirectory, self)._q_index()
270
        r = TemplateIO(html=True)
271
        r += htmltext(super(SettingsDirectory, self)._q_index())
272
        r += htmltext('<div class="splitcontent-right">')
273
        r += htmltext('<div class="bo-block">')
274
        r += htmltext('<h2>%s</h2>') % _('Extra Options')
275
        r += htmltext('<ul>')
276
        if get_publisher().has_site_option('auquotidien-announces'):
277
            r += htmltext('<li><a href="aq/announces">%s</a></li>') % _('Announces Options')
278
        r += htmltext('<li><a href="aq/permissions">%s</a></li>') % _('Permissions')
279
        if get_publisher().has_site_option('auquotidien-events'):
280
            r += htmltext('<li><a href="aq/event_keywords">%s</a></li>') % _('Event Keywords')
281
        if get_publisher().has_site_option('auquotidien-announces'):
282
            r += htmltext('<li><a href="aq/announce_themes">%s</a></li>') % _('Announce Themes')
283
        if get_publisher().has_site_option('strongbox'):
284
            r += htmltext('<li><a href="aq/strongbox">%s</a></li>') % _('Strongbox Support')
285
        if get_publisher().has_site_option('clicrdv'):
286
            r += htmltext('<li><a href="aq/clicrdv">%s</a></li>') % _('ClicRDV Integration')
287
        if get_publisher().has_site_option('domino'):
288
            r += htmltext('<li><a href="aq/domino">%s</a></li>') % _('Abelium Domino Integration')
289
        r += htmltext('</ul>')
290
        r += htmltext('</div>')
291
        r += htmltext('</div>')
292
        return r.getvalue()
293

    
294
    def _q_lookup(self, component):
295
        if component == 'aq':
296
            return PanelDirectory()
297
        return super(SettingsDirectory, self)._q_lookup(component)
298

    
299
import categories_admin
(7-7/27)