backoffice: warn on slug change on card model/form import (#57034) #972

Merged
fpeters merged 1 commits from wip/57034-warn-on-slug-change into main 2024-01-12 14:57:31 +01:00
4 changed files with 26 additions and 1 deletions

View File

@ -1543,7 +1543,10 @@ def test_form_import(pub):
resp = app.get('/backoffice/forms/')
resp = resp.click(href='import')
resp.forms[0]['file'] = Upload('formdef.wcs', formdef_xml)
resp = resp.forms[0].submit()
resp = resp.forms[0].submit().follow()
assert 'This form has been successfully imported.' in resp.text
assert 'The form identifier (form-title) was already used by another form.' in resp.text
assert 'A new one has been generated (form-title-1).' in resp.text
assert FormDef.count() == 2
assert FormDef.get(1).url_name == 'form-title'
assert FormDef.get(2).url_name == 'form-title-1'

View File

@ -1802,6 +1802,10 @@ class FormsDirectory(AccessControlled, Directory):
'you should nevertheless check everything is ok. '
'Do note it is disabled by default.'
)
import_slug_change = _(
'The form identifier (%(slug)s) was already used by another form. '
'A new one has been generated (%(newslug)s).'
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@ -1995,6 +1999,17 @@ class FormsDirectory(AccessControlled, Directory):
form.set_error('file', msg)
raise ValueError()
if hasattr(formdef, '_import_orig_slug'):
get_session().message = (
'warning',
'%s %s'
% (
get_session().message[1],
self.import_slug_change
% {'slug': formdef._import_orig_slug, 'newslug': formdef.url_name},
),
)
self.imported_formdef = formdef
formdef.disabled = True
formdef.store()

View File

@ -184,6 +184,10 @@ class CardsDirectory(FormsDirectory):
'Imported card model contained errors and has been automatically fixed, '
'you should nevertheless check everything is ok. '
)
import_slug_change = _(
'The card model identifier (%(slug)s) was already used by another card model. '
'A new one has been generated (%(newslug)s).'
)
def get_extra_index_context_data(self):
context = super().get_extra_index_context_data()

View File

@ -1392,6 +1392,7 @@ class FormDef(StorableObject):
except KeyError:
pass
else:
formdef._import_orig_slug = formdef.url_name
formdef.url_name = formdef.get_new_url_name()
# check if all field id are unique
@ -1864,6 +1865,8 @@ class FormDef(StorableObject):
del odict['fields']
if '_custom_views' in odict:
del odict['_custom_views']
if '_import_orig_slug' in odict:
del odict['_import_orig_slug']
return odict
def __setstate__(self, dict):