Projet

Général

Profil

0001-backoffice-list-almost-all-formdata-in-360-user-view.patch

Frédéric Péters, 07 décembre 2015 22:48

Télécharger (9,25 ko)

Voir les différences:

Subject: [PATCH] backoffice: list (almost) all formdata in 360 user view
 (#9011)

Formdata that are not viewable by the user are displayed but not linked, but
it's possible to mark some formdefs as never appearing in 360 user view.
 tests/test_backoffice_pages.py      | 20 +++++++++++++++++++
 wcs/admin/forms.py                  | 17 +++++++++++++++--
 wcs/backoffice/management.py        | 38 +++++++++++++++++++++++++++----------
 wcs/formdef.py                      |  4 ++--
 wcs/qommon/static/css/dc2/admin.css |  4 ++++
 5 files changed, 69 insertions(+), 14 deletions(-)
tests/test_backoffice_pages.py
1434 1434
    resp = app.get('/backoffice/management/users/%s/' % user.id)
1435 1435
    for item in to_match:
1436 1436
        assert item in resp.body
1437
    count_li = resp.body.count('<li')
1438

  
1439
    # check list items are displayed, without links, if we cannot view them.
1440
    formdef = FormDef.get_by_urlname('form-title')
1441
    formdef.workflow_roles['_receiver'] = 'XXX'
1442
    formdef.store()
1443
    formdef.data_class().rebuild_security()
1444

  
1445
    resp = app.get('/backoffice/management/users/%s/' % user.id)
1446
    for item in to_match:
1447
        assert not item in resp.body # not linked
1448
    assert resp.body.count('<li') == count_li
1449

  
1450
    # mark formdef so it's not listed in 360 view
1451
    formdef.skip_from_360_view = True
1452
    formdef.store()
1453

  
1454
    # check formdatas are no longer part of the page
1455
    resp = app.get('/backoffice/management/users/%s/' % user.id)
1456
    assert resp.body.count('<li') == (count_li - 2)
1437 1457

  
1438 1458
def test_360_user_view_tracking_code(pub):
1439 1459
    if not pub.is_using_postgresql():
wcs/admin/forms.py
134 134
class OptionsDirectory(Directory):
135 135
    _q_exports = ['confirmation', 'private_status', 'only_allow_one',
136 136
            'always_advertise', 'tracking_code', 'online_status', 'captcha',
137
            'description', 'keywords', 'category']
137
            'description', 'keywords', 'category', ('360_view', 'p_360_view')]
138 138

  
139 139
    def __init__(self, formdef):
140 140
        self.formdef = formdef
......
181 181
                value=self.formdef.has_captcha)
182 182
        return self.handle(form, _('CAPTCHA'))
183 183

  
184
    def p_360_view(self):
185
        form = Form(enctype='multipart/form-data')
186
        form.add(CheckboxWidget, 'skip_from_360_view',
187
                title=_('Skip from 360 view'),
188
                value=self.formdef.skip_from_360_view)
189
        return self.handle(form, _('Skip from 360 view'))
190

  
184 191
    def online_status(self):
185 192
        form = Form(enctype='multipart/form-data')
186 193
        form.add(CheckboxWidget, 'disabled',
......
232 239
                    'enable_tracking_codes', 'private_status_and_history',
233 240
                    'always_advertise', 'disabled_redirection',
234 241
                    'publication_date', 'expiration_date', 'has_captcha',
235
                    'description', 'keywords', 'category_id']
242
                    'description', 'keywords', 'category_id',
243
                    'skip_from_360_view']
236 244
            for f in attrs:
237 245
                widget = form.get_widget(f)
238 246
                if widget:
......
440 448
                    self.formdef.always_advertise and
441 449
                    C_('display to unlogged|Enabled') or C_('display to unlogged|Disabled'))
442 450

  
451
        r += add_option_line('options/360_view',
452
                _('Skip from 360 view'),
453
                self.formdef.skip_from_360_view and
454
                C_('skip from 360 view|Enabled') or C_('skip from 360 view|Disabled'))
455

  
443 456
        r += add_option_line('options/tracking_code',
444 457
                _('Tracking Code'),
445 458
                self.formdef.enable_tracking_codes and
wcs/backoffice/management.py
42 42
from qommon.form import *
43 43
from qommon.sms import SMS
44 44
from qommon.storage import (Equal, NotEqual, LessOrEqual, GreaterOrEqual, Or,
45
        Intersects, ILike, FtsMatch)
45
        Intersects, ILike, FtsMatch, Contains)
46 46

  
47 47
from wcs.forms.backoffice import FormDefUI
48 48
from wcs.forms.common import FormStatusPage
......
158 158
        get_response().breadcrumb.append(('%s/' % self.user.id, self.user.display_name))
159 159
        html_top('management', _('Management'))
160 160
        # display list of open formdata for the user
161
        user_roles = [logged_users_role().id] + (get_request().user.roles or [])
161
        formdefs = [x for x in FormDef.select() if not x.skip_from_360_view]
162
        user_roles = set([logged_users_role().id] + (get_request().user.roles or []))
162 163
        criterias = [Equal('is_at_endpoint', False),
163 164
                     Equal('user_id', str(self.user.id)),
164
                     Intersects('concerned_roles_array', user_roles),
165
                     Contains('formdef_id', [x.id for x in formdefs]),
165 166
                    ]
166 167
        from wcs import sql
167 168
        formdatas = sql.AnyFormData.select(criterias, order_by='receipt_time')
168 169

  
170
        criterias = [Equal('is_at_endpoint', False),
171
                     Equal('user_id', str(self.user.id)),
172
                     Intersects('concerned_roles_array', user_roles),
173
                    ]
174
        viewable_formdatas = sql.AnyFormData.select(criterias)
175
        viewable_formdatas_ids = {}
176
        for viewable_formdata in viewable_formdatas:
177
            viewable_formdatas_ids[(viewable_formdata.formdef.id, viewable_formdata.id)] = True
178

  
169 179
        r = TemplateIO(html=True)
170 180
        r += get_session().display_message()
171 181

  
......
209 219
                        cat_formdatas = formdata_by_category[cat.id]
210 220
                else:
211 221
                    cat_formdatas = formdatas
212
                r += htmltext('<ul class="biglist">')
222
                r += htmltext('<ul class="biglist c-360-user-view">')
213 223
                for formdata in cat_formdatas:
214 224
                    status = formdata.get_status()
215 225
                    if status:
......
218 228
                        status_label = _('Unknown')
219 229
                    submit_date = misc.strftime.strftime(
220 230
                            misc.date_format(), formdata.receipt_time)
221
                    r += htmltext('<li><a href="%s">%s, '
222
                                  '<span class="datetime">%s</span> '
223
                                  '<span class="status">(%s)</span></a>' % (
224
                            formdata.get_url(backoffice=True),
225
                            formdata.formdef.name,
226
                            submit_date, status_label))
231
                    formdata_key_id = (formdata.formdef.id, formdata.id)
232
                    if formdata_key_id in viewable_formdatas_ids:
233
                        r += htmltext('<li><a href="%s">%s, '
234
                                      '<span class="datetime">%s</span> '
235
                                      '<span class="status">(%s)</span></a>' % (
236
                                formdata.get_url(backoffice=True),
237
                                formdata.formdef.name,
238
                                submit_date, status_label))
239
                    else:
240
                        r += htmltext('<li><span>%s, '
241
                                      '<span class="datetime">%s</span> '
242
                                      '<span class="status">(%s)</span></span>' % (
243
                                formdata.formdef.name,
244
                                submit_date, status_label))
227 245
                    if formdata.formdef.enable_tracking_codes:
228 246
                        r += htmltext('<p class="commands">')
229 247
                        r += command_icon('sendcode/%s/%s' %
wcs/formdef.py
85 85
    publication_date = None
86 86
    expiration_date = None
87 87
    has_captcha = False
88

  
88
    skip_from_360_view = False
89 89
    private_status_and_history = False
90 90

  
91 91
    last_modification_time = None
......
100 100
    BOOLEAN_ATTRIBUTES = ['discussion', 'detailed_emails', 'disabled',
101 101
            'only_allow_one', 'enable_tracking_codes',
102 102
            'always_advertise', 'private_status_and_history',
103
            'has_captcha']
103
            'has_captcha', 'skip_from_360_view']
104 104

  
105 105
    def migrate(self):
106 106
        changed = False
wcs/qommon/static/css/dc2/admin.css
1166 1166
ul.apps {
1167 1167
	margin-left: 1em;
1168 1168
}
1169

  
1170
.c-360-user-view li > span {
1171
	padding-left: 1ex;
1172
}
1169
-