Projet

Général

Profil

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

root / extra / modules / admin.py @ c182b1ab

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 errors, get_cfg
12
from qommon.form import *
13

    
14
import wcs.admin.settings
15
from wcs.formdef import FormDef
16
from wcs.categories import Category
17
from qommon.backoffice.menu import html_top
18

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

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

    
28
    def get_intro_text(self):
29
        return _('Welcome on Publik administration interface')
30

    
31

    
32
class PanelDirectory(Directory):
33
    _q_exports = ['', 'update', 'announces', 'permissions', 'event_keywords',
34
            'announce_themes', 'strongbox', 'clicrdv', 'domino']
35
    label = N_('Control Panel')
36

    
37
    domino = AbeliumDominoDirectory()
38

    
39
    def _verify_mask(self, form):
40
        if form.is_submitted():
41
            if not re.match("[0-9Xx]*$", form.get('mobile_mask') or ''):
42
                form.set_error('mobile_mask', _('Invalid value'))
43
            else:
44
                string_value = form.get_widget('mobile_mask').value
45
                if string_value:
46
                    form.get_widget('mobile_mask').value = string_value.upper()
47

    
48
    def announces(self):
49
        announces_cfg = get_cfg('announces', {})
50
        sms_cfg = get_cfg('sms', {})
51
        form = Form(enctype='multipart/form-data')
52
        hint = ""
53
        if sms_cfg.get('mode','') in ("none",""):
54
            hint = htmltext(_('You must also <a href="%s">configure your SMS provider</a>') % "../settings/sms")
55

    
56
        form.add(CheckboxWidget, 'sms_support', title = _('SMS support'),
57
                hint = hint, value = announces_cfg.get('sms_support', 0))
58
        form.add(StringWidget, 'mobile_mask', title = _('Mask for mobile numbers'),
59
                hint = _('example: 06XXXXXXXX'),
60
                value = announces_cfg.get('mobile_mask',''))
61
        form.add_submit('submit', _('Submit'))
62
        form.add_submit('cancel', _('Cancel'))
63

    
64
        self._verify_mask(form)
65

    
66
        if form.get_widget('cancel').parse():
67
            return redirect('..')
68

    
69
        if not form.is_submitted() or form.has_errors():
70
            get_response().breadcrumb.append(('aq/announces', _('Announces Options')))
71
            html_top('settings', _('Announces Options'))
72
            r = TemplateIO(html=True)
73
            r += htmltext('<h2>%s</h2>') % _('Announces Options')
74
            r += form.render()
75
            return r.getvalue()
76
        else:
77
            from wcs.admin.settings import cfg_submit
78
            cfg_submit(form, 'announces', ('sms_support','mobile_mask'))
79
            return redirect('..')
80

    
81
    def permissions(self):
82
        permissions_cfg = get_cfg('aq-permissions', {})
83
        form = Form(enctype='multipart/form-data')
84
        form.add(SingleSelectWidget, 'forms', title = _('Admin role for forms'),
85
                value = permissions_cfg.get('forms', None),
86
                options = [(None, _('Nobody'), None)] + get_user_roles())
87
        form.add(SingleSelectWidget, 'events', title = _('Admin role for events'),
88
                value = permissions_cfg.get('events', None),
89
                options = [(None, _('Nobody'), None)] + get_user_roles())
90
        form.add(SingleSelectWidget, 'links', title = _('Admin role for links'),
91
                value = permissions_cfg.get('links', None),
92
                options = [(None, _('Nobody'), None)] + get_user_roles())
93
        form.add(SingleSelectWidget, 'announces', title = _('Admin role for announces'),
94
                value = permissions_cfg.get('announces', None),
95
                options = [(None, _('Nobody'), None)] + get_user_roles())
96
        form.add(SingleSelectWidget, 'payments', title = _('Admin role for payments'),
97
                value = permissions_cfg.get('payments', None),
98
                options = [(None, _('Nobody'), None)] + get_user_roles())
99
        form.add(SingleSelectWidget, 'strongbox', title = _('Admin role for strongbox'),
100
                value = permissions_cfg.get('strongbox', None),
101
                options = [(None, _('Nobody'), None)] + get_user_roles())
102
        form.add_submit('submit', _('Submit'))
103
        form.add_submit('cancel', _('Cancel'))
104

    
105
        if form.get_widget('cancel').parse():
106
            return redirect('..')
107

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

    
121
    def event_keywords(self):
122
        misc_cfg = get_cfg('misc', {})
123
        form = Form(enctype='multipart/form-data')
124
        form.add(WidgetList, 'event_tags', title = _('Event Keywords'),
125
                value = misc_cfg.get('event_tags', get_default_event_tags()),
126
                elemnt_type = StringWidget,
127
                add_element_label = _('Add Keyword'),
128
                element_kwargs = {str('render_br'): False, str('size'): 30})
129

    
130
        form.add_submit('submit', _('Submit'))
131
        form.add_submit('cancel', _('Cancel'))
132

    
133
        if form.get_widget('cancel').parse():
134
            return redirect('..')
135

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

    
148
    def announce_themes(self):
149
        misc_cfg = get_cfg('misc', {})
150
        form = Form(enctype='multipart/form-data')
151
        form.add(WidgetList, 'announce_themes', title = _('Announce Themes'),
152
                value = misc_cfg.get('announce_themes', []),
153
                elemnt_type = StringWidget,
154
                add_element_label = _('Add Theme'),
155
                element_kwargs = {str('render_br'): False, str('size'): 30})
156

    
157
        form.add_submit('submit', _('Submit'))
158
        form.add_submit('cancel', _('Cancel'))
159

    
160
        if form.get_widget('cancel').parse():
161
            return redirect('..')
162

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

    
175
    def strongbox(self):
176
        if not get_publisher().has_site_option('strongbox'):
177
            raise errors.TraversalError()
178
        misc_cfg = get_cfg('misc', {})
179
        form = Form(enctype='multipart/form-data')
180
        form.add(CheckboxWidget, 'aq-strongbox', title=_('Strongbox Support'),
181
                value=misc_cfg.get('aq-strongbox'), required=False)
182

    
183
        form.add_submit('submit', _('Submit'))
184
        form.add_submit('cancel', _('Cancel'))
185

    
186
        if form.get_widget('cancel').parse():
187
            return redirect('..')
188

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

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

    
218
        form.add_submit('submit', _('Submit'))
219
        form.add_submit('cancel', _('Cancel'))
220

    
221
        if form.get_widget('cancel').parse():
222
            return redirect('..')
223

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

    
255

    
256
class SettingsDirectory(wcs.admin.settings.SettingsDirectory):
257
    def _q_index(self):
258
        r = TemplateIO(html=True)
259
        r += htmltext(super(SettingsDirectory, self)._q_index())
260
        r += htmltext('<div class="splitcontent-right">')
261
        r += htmltext('<div class="bo-block">')
262
        r += htmltext('<h2>%s</h2>') % _('Extra Options')
263
        r += htmltext('<ul>')
264
        r += htmltext('<li><a href="aq/announces">%s</a></li>') % _('Announces Options')
265
        r += htmltext('<li><a href="aq/permissions">%s</a></li>') % _('Permissions')
266
        r += htmltext('<li><a href="aq/event_keywords">%s</a></li>') % _('Event Keywords')
267
        r += htmltext('<li><a href="aq/announce_themes">%s</a></li>') % _('Announce Themes')
268
        if get_publisher().has_site_option('strongbox'):
269
            r += htmltext('<li><a href="aq/strongbox">%s</a></li>') % _('Strongbox Support')
270
        if get_publisher().has_site_option('clicrdv'):
271
            r += htmltext('<li><a href="aq/clicrdv">%s</a></li>') % _('ClicRDV Integration')
272
        if get_publisher().has_site_option('domino'):
273
            r += htmltext('<li><a href="aq/domino">%s</a></li>') % _('Abelium Domino Integration')
274
        r += htmltext('</ul>')
275
        r += htmltext('</div')
276
        r += htmltext('</div')
277
        return r.getvalue()
278

    
279
    def _q_lookup(self, component):
280
        if component == 'aq':
281
            return PanelDirectory()
282
        return super(SettingsDirectory, self)._q_lookup(component)
283

    
284
import categories_admin
(7-7/30)