0001-backoffice-display-card-selected-in-item-field-as-li.patch
tests/test_backoffice_pages.py | ||
---|---|---|
5323 | 5323 |
assert 'HELLO WORLD 2' in resp.text |
5324 | 5324 | |
5325 | 5325 |
def test_carddata_management(pub, studio): |
5326 |
CardDef.wipe() |
|
5326 | 5327 |
user = create_user(pub) |
5327 | 5328 |
app = login(get_app(pub)) |
5328 | 5329 |
resp = app.get('/backoffice/') |
... | ... | |
5333 | 5334 |
fields.StringField(id='1', label='Test', type='string', varname='foo'), |
5334 | 5335 |
] |
5335 | 5336 |
carddef.store() |
5337 |
carddef.data_class().wipe() |
|
5336 | 5338 | |
5337 | 5339 |
resp = app.get('/backoffice/') |
5338 | 5340 |
assert not 'Cards' in resp.text |
... | ... | |
5370 | 5372 |
resp = app.get('/backoffice/data/') |
5371 | 5373 |
resp = resp.click('foo') |
5372 | 5374 |
assert resp.text.count('<tr') == 2 # header + row of data |
5375 | ||
5376 |
def test_studio_card_item_link(pub, studio): |
|
5377 |
user = create_user(pub) |
|
5378 |
CardDef.wipe() |
|
5379 |
carddef = CardDef() |
|
5380 |
carddef.name = 'foo' |
|
5381 |
carddef.fields = [ |
|
5382 |
fields.StringField(id='1', label='Test', type='string', varname='foo'), |
|
5383 |
] |
|
5384 |
carddef.backoffice_submission_roles = user.roles |
|
5385 |
carddef.workflow_roles = {'_editor': user.roles[0]} |
|
5386 |
carddef.digest_template = 'card {{form_var_foo}}' |
|
5387 |
carddef.store() |
|
5388 |
carddef.data_class().wipe() |
|
5389 | ||
5390 |
card = carddef.data_class()() |
|
5391 |
card.data = {'1': 'plop'} |
|
5392 |
card.store() |
|
5393 | ||
5394 |
carddef2 = CardDef() |
|
5395 |
carddef2.name = 'bar' |
|
5396 |
carddef2.fields = [ |
|
5397 |
fields.ItemField(id='1', label='Test', type='item', |
|
5398 |
data_source={'type': 'carddef:foo', 'value': ''}), |
|
5399 |
] |
|
5400 |
carddef2.backoffice_submission_roles = user.roles |
|
5401 |
carddef2.workflow_roles = {'_editor': user.roles[0]} |
|
5402 |
carddef2.store() |
|
5403 |
carddef2.data_class().wipe() |
|
5404 | ||
5405 |
app = login(get_app(pub)) |
|
5406 |
resp = app.get('/backoffice/data/') |
|
5407 |
resp = resp.click('bar') |
|
5408 |
resp = resp.click('Add') |
|
5409 |
resp.form['f1'] = card.id |
|
5410 |
resp = resp.form.submit('submit') |
|
5411 |
assert resp.location.endswith('/backoffice/data/bar/1/') |
|
5412 |
resp = resp.follow() |
|
5413 |
resp = resp.click('card plop') |
|
5414 |
assert '<div class="value">plop</div>' in resp |
|
5415 | ||
5416 |
# look without access rights |
|
5417 |
carddef.backoffice_submission_roles = None |
|
5418 |
carddef.workflow_roles = {'_editor': None} |
|
5419 |
carddef.store() |
|
5420 |
resp = app.get('/backoffice/data/bar/1/') |
|
5421 |
with pytest.raises(IndexError): |
|
5422 |
resp.click('card plop') |
wcs/fields.py | ||
---|---|---|
1363 | 1363 | |
1364 | 1364 |
return data_source.get_display_value(value) |
1365 | 1365 | |
1366 |
def get_view_short_value(self, value, max_len=30): |
|
1367 |
return super(ItemField, self).get_view_value(value) |
|
1368 | ||
1369 |
def get_view_value(self, value, value_id=None): |
|
1370 |
value = super(ItemField, self).get_view_value(value) |
|
1371 |
if not (value_id and |
|
1372 |
get_request() and |
|
1373 |
get_request().is_in_backoffice() and |
|
1374 |
self.data_source and |
|
1375 |
self.data_source.get('type', '').startswith('carddef:')): |
|
1376 |
return value |
|
1377 |
from wcs.carddef import CardDef |
|
1378 |
carddef = CardDef.get_by_urlname(self.data_source['type'][8:]) |
|
1379 |
carddata = carddef.data_class().get(value_id) |
|
1380 |
if not carddef.is_user_allowed_read(get_request().user, carddata): |
|
1381 |
return value |
|
1382 |
return htmltext('<a href="%s">' % carddata.get_url(backoffice=True)) + htmltext('%s</a>') % value |
|
1383 | ||
1366 | 1384 |
def add_to_view_form(self, form, value = None): |
1367 | 1385 |
real_value = value |
1368 | 1386 |
label_value = '' |
... | ... | |
1575 | 1593 |
def convert_value_to_str(self, value): |
1576 | 1594 |
return value |
1577 | 1595 | |
1578 |
def get_view_value(self, value): |
|
1596 |
def get_view_value(self, value, **kwargs):
|
|
1579 | 1597 |
if type(value) is str: # == display_value |
1580 | 1598 |
return value |
1581 | 1599 |
if value: |
wcs/forms/common.py | ||
---|---|---|
394 | 394 |
pages = [] |
395 | 395 |
current_page_fields = [] |
396 | 396 | |
397 |
def get_value(f): |
|
397 |
def get_value_info(f): |
|
398 |
# return the selected value and an optional dictionary that will be |
|
399 |
# passed to get_view_value() to provide additional details. |
|
400 |
value_details = {} |
|
398 | 401 |
if f.id not in self.filled.data: |
399 | 402 |
value = None |
400 | 403 |
else: |
401 | 404 |
if f.store_display_value and ('%s_display' % f.id) in self.filled.data: |
402 | 405 |
value = self.filled.data['%s_display' % f.id] |
406 |
value_details['value_id'] = self.filled.data[f.id] |
|
403 | 407 |
else: |
404 | 408 |
value = self.filled.data[f.id] |
405 | 409 | |
406 | 410 |
if value is None or value == '': |
407 | 411 |
value = None |
408 |
return value
|
|
412 |
return (value, value_details)
|
|
409 | 413 | |
410 | 414 |
for i, f in enumerate(fields): |
411 | 415 |
if f.type == 'page': |
... | ... | |
429 | 433 |
if not f.include_in_summary_page: |
430 | 434 |
continue |
431 | 435 | |
432 |
value = get_value(f)
|
|
436 |
value, value_details = get_value_info(f)
|
|
433 | 437 |
if value is None and not (f.required and include_unset_required_fields): |
434 | 438 |
continue |
435 | 439 | |
436 |
current_page_fields.append({'field': f, 'value': value}) |
|
440 |
current_page_fields.append({'field': f, 'value': value, 'value_details': value_details})
|
|
437 | 441 | |
438 | 442 |
if not pages: |
439 | 443 |
fields = [x['field'] for x in current_page_fields] |
... | ... | |
477 | 481 |
css_classes.append(f.extra_css_class) |
478 | 482 |
r += htmltext('<div class="%s">' % ' '.join(css_classes)) |
479 | 483 |
r += htmltext('<span class="label">%s</span> ') % f.label |
480 |
value = get_value(f)
|
|
484 |
value, value_details = get_value_info(f)
|
|
481 | 485 |
if value is None: |
482 | 486 |
r += htmltext('<div class="value"><i>%s</i></div>') % _('Not set') |
483 | 487 |
else: |
484 | 488 |
r += htmltext('<div class="value">') |
485 |
s = f.get_view_value(value) |
|
489 |
s = f.get_view_value(value, **value_details)
|
|
486 | 490 |
s = s.replace(str('[download]'), str('%sdownload' % form_url)) |
487 | 491 |
r += s |
488 | 492 |
r += htmltext('</div>') |
489 |
- |