misc: use custom id in paths (#87322) #1179
|
@ -368,6 +368,40 @@ def test_studio_card_item_link(pub):
|
|||
resp.click('card plop')
|
||||
|
||||
|
||||
def test_backoffice_card_item_link_id_template(pub):
|
||||
user = create_user(pub)
|
||||
CardDef.wipe()
|
||||
carddef = CardDef()
|
||||
carddef.name = 'foo'
|
||||
carddef.fields = [
|
||||
fields.StringField(id='1', label='Test', varname='foo'),
|
||||
fields.StringField(id='2', label='Custom id', varname='custom_id'),
|
||||
]
|
||||
carddef.backoffice_submission_roles = user.roles
|
||||
carddef.workflow_roles = {'_editor': user.roles[0]}
|
||||
carddef.id_template = '{{form_var_custom_id}}'
|
||||
carddef.digest_templates = {'default': 'card {{ form_var_foo }}'}
|
||||
carddef.store()
|
||||
carddef.data_class().wipe()
|
||||
|
||||
card = carddef.data_class()()
|
||||
card.data = {'1': 'plop', '2': 'test'}
|
||||
card.just_created()
|
||||
card.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/data/foo/')
|
||||
assert [x.attrib['href'] for x in resp.pyquery('table a')] == ['test/']
|
||||
resp = resp.click('Add')
|
||||
resp.form['f1'] = 'blah'
|
||||
resp.form['f2'] = 'blah'
|
||||
resp = resp.form.submit('submit')
|
||||
assert resp.location.endswith('/backoffice/data/foo/blah/')
|
||||
resp = resp.follow()
|
||||
resp = app.get('/backoffice/data/foo/')
|
||||
assert [x.attrib['href'] for x in resp.pyquery('table a')] == ['blah/', 'test/']
|
||||
|
||||
|
||||
def test_backoffice_cards_import_data_from_csv(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@ class ApiFormPageMixin:
|
|||
if not self.is_webhook:
|
||||
self.check_access()
|
||||
try:
|
||||
formdata = self.formdef.data_class().get(component)
|
||||
formdata = self.formdef.data_class().get_by_id(component)
|
||||
except KeyError:
|
||||
raise TraversalError()
|
||||
return ApiFormdataPage(self.formdef, formdata, custom_view=self._view)
|
||||
|
|
|
@ -365,7 +365,7 @@ class CardPage(FormPage):
|
|||
return view_lookup_response
|
||||
|
||||
try:
|
||||
filled = self.formdef.data_class().get(component)
|
||||
filled = self.formdef.data_class().get_by_id(component)
|
||||
except KeyError:
|
||||
raise errors.TraversalError()
|
||||
return CardBackOfficeStatusPage(self.formdef, filled, parent_view=self)
|
||||
|
|
|
@ -3286,7 +3286,7 @@ class FormPage(Directory, TempfileDirectoryMixin):
|
|||
return view_lookup_response
|
||||
|
||||
try:
|
||||
filled = self.formdef.data_class().get(component)
|
||||
filled = self.formdef.data_class().get_by_id(component)
|
||||
except KeyError:
|
||||
raise errors.TraversalError()
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ from quixote.errors import RequestError
|
|||
from quixote.html import htmltext
|
||||
from quixote.http_request import Upload
|
||||
|
||||
from wcs.sql_criterias import And, Contains, Intersects
|
||||
from wcs.sql_criterias import And, Contains, Equal, Intersects
|
||||
|
||||
from .qommon import _, misc
|
||||
from .qommon.evalutils import make_datetime
|
||||
|
@ -360,6 +360,15 @@ class FormData(StorableObject):
|
|||
value = self.get_natural_key()
|
||||
return str(value) if value is not None else None
|
||||
|
||||
@classmethod
|
||||
def get_by_id(cls, value):
|
||||
if cls._formdef.id_template:
|
||||
try:
|
||||
return cls.select([Equal('id_display', str(value))], limit=1)[0]
|
||||
except IndexError:
|
||||
raise KeyError(value)
|
||||
return cls.get(value)
|
||||
|
||||
def get_user(self):
|
||||
if self.user_id and self.user_id != 'ultra-user':
|
||||
return get_publisher().user_class.get(self.user_id, ignore_errors=True)
|
||||
|
@ -874,14 +883,14 @@ class FormData(StorableObject):
|
|||
def get_url(self, backoffice=False, include_category=False, language=None):
|
||||
return '%s%s/' % (
|
||||
self.formdef.get_url(backoffice=backoffice, include_category=include_category, language=language),
|
||||
self.id,
|
||||
self.identifier,
|
||||
)
|
||||
|
||||
def get_backoffice_url(self):
|
||||
return self.get_url(backoffice=True)
|
||||
|
||||
def get_api_url(self):
|
||||
return '%s%s/' % (self.formdef.get_api_url(), self.id)
|
||||
return '%s%s/' % (self.formdef.get_api_url(), self.identifier)
|
||||
|
||||
def get_file_base_url(self):
|
||||
return '%sdownload' % self.get_url()
|
||||
|
|
|
@ -344,7 +344,7 @@ class FormDefUI:
|
|||
classes.append('criticality-level')
|
||||
style = ' style="border-left-color: %s;"' % level.colour
|
||||
|
||||
link = str(filled.id) + '/'
|
||||
link = str(filled.identifier) + '/'
|
||||
data = ' data-link="%s"' % link
|
||||
if filled.anonymised:
|
||||
data += ' data-anonymised="true"'
|
||||
|
|
Loading…
Reference in New Issue