0001-forms-add-a-preview-mode-for-disabled-forms-22.patch
tests/test_admin_pages.py | ||
---|---|---|
186 | 186 | |
187 | 187 |
# try changing title |
188 | 188 |
resp = app.get('/backoffice/forms/1/') |
189 |
resp = resp.click(href='title')
|
|
189 |
resp = resp.click('change title')
|
|
190 | 190 |
assert resp.forms[0]['name'].value == 'form title' |
191 | 191 |
resp.forms[0]['name'] = 'new title' |
192 | 192 |
resp = resp.forms[0].submit() |
tests/test_form_pages.py | ||
---|---|---|
625 | 625 | |
626 | 626 |
assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st2')) == 1 |
627 | 627 |
assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st1')) == 1 |
628 | ||
629 |
def test_preview_form(pub): |
|
630 |
user = create_user(pub) |
|
631 | ||
632 |
formdef = create_formdef() |
|
633 |
formdef.data_class().wipe() |
|
634 |
formdef.fields = [] |
|
635 |
formdef.disabled = True |
|
636 |
formdef.store() |
|
637 | ||
638 |
# check the preview page is not accessible to regular users |
|
639 |
get_app(pub).get('/preview/test/', status=403) |
|
640 | ||
641 |
# check it's accessible to admins |
|
642 |
user.is_admin = True |
|
643 |
user.store() |
|
644 |
page = login(get_app(pub), username='foo', password='foo').get('/preview/test/') |
|
645 | ||
646 |
# check no formdata gets stored |
|
647 |
next_page = page.forms[0].submit('submit') |
|
648 |
assert 'Check values then click submit.' in next_page.body |
|
649 |
next_page = next_page.forms[0].submit('submit') |
|
650 |
assert next_page.status_int == 302 |
|
651 |
assert next_page.location == 'http://example.net/preview/test/' |
|
652 |
assert formdef.data_class().count() == 0 |
wcs/admin/forms.py | ||
---|---|---|
381 | 381 |
r += htmltext('</ul>') |
382 | 382 | |
383 | 383 |
r += htmltext('<ul>') |
384 |
if not self.formdef.is_disabled(): |
|
384 |
if self.formdef.is_disabled(): |
|
385 |
r += htmltext('<li><a href="%s">%s</a></li>') % ( |
|
386 |
self.formdef.get_url(preview=True), _('Preview Online')) |
|
387 |
else: |
|
385 | 388 |
r += htmltext('<li><a href="%s">%s</a></li>') % ( |
386 | 389 |
self.formdef.get_url(), _('Display Online')) |
387 | 390 |
if qrcode is not None: |
wcs/formdef.py | ||
---|---|---|
329 | 329 |
return cls.get_on_index(url_name, 'url_name', ignore_migration=ignore_migration) |
330 | 330 |
get_by_urlname = classmethod(get_by_urlname) |
331 | 331 | |
332 |
def get_url(self, backoffice = False):
|
|
332 |
def get_url(self, backoffice=False, preview=False):
|
|
333 | 333 |
if backoffice: |
334 | 334 |
base_url = get_publisher().get_backoffice_url() + '/management' |
335 |
elif preview: |
|
336 |
base_url = get_publisher().get_frontoffice_url() + '/preview' |
|
335 | 337 |
else: |
336 | 338 |
base_url = get_publisher().get_frontoffice_url() |
337 | 339 |
return '%s/%s/' % (base_url, self.url_name) |
wcs/forms/root.py | ||
---|---|---|
437 | 437 |
formdata.status = str('') |
438 | 438 |
get_publisher().substitutions.feed(formdata) |
439 | 439 | |
440 |
def _q_index(self, log_detail = None, editing = None): |
|
441 |
self.check_role() |
|
440 |
def check_disabled(self): |
|
442 | 441 |
if self.formdef.is_disabled(): |
443 | 442 |
if self.formdef.disabled_redirection: |
444 |
url = misc.get_variadic_url(self.formdef.disabled_redirection,
|
|
443 |
return misc.get_variadic_url(self.formdef.disabled_redirection,
|
|
445 | 444 |
get_publisher().substitutions.get_context_variables()) |
446 |
return redirect(url) |
|
447 | 445 |
else: |
448 | 446 |
raise errors.AccessForbiddenError() |
447 |
return False |
|
448 | ||
449 |
def _q_index(self, log_detail = None, editing = None): |
|
450 |
self.check_role() |
|
451 |
if self.check_disabled(): |
|
452 |
return redirect(self.check_disabled()) |
|
449 | 453 | |
450 | 454 |
session = get_session() |
451 | 455 |
wcs/root.py | ||
---|---|---|
51 | 51 |
from roles import Role |
52 | 52 |
from wcs.api import get_user_from_api_query_string, ApiDirectory |
53 | 53 |
from myspace import MyspaceDirectory |
54 |
from forms.preview import PreviewDirectory |
|
54 | 55 | |
55 | 56 | |
56 | 57 |
class CompatibilityDirectory(Directory): |
... | ... | |
194 | 195 |
_q_exports = ['admin', 'backoffice', 'forms', 'login', 'logout', 'token', 'saml', |
195 | 196 |
'ident', 'register', 'afterjobs', 'themes', 'myspace', 'user', 'roles', |
196 | 197 |
'pages', ('tmp-upload', 'tmp_upload'), 'api', '__version__', |
197 |
'tryauth', 'auth'] |
|
198 |
'tryauth', 'auth', 'preview']
|
|
198 | 199 | |
199 | 200 |
api = ApiDirectory() |
200 | 201 |
themes = template.ThemesDirectory() |
... | ... | |
380 | 381 |
register = RegisterDirectory() |
381 | 382 |
ident = IdentDirectory() |
382 | 383 |
afterjobs = AfterJobStatusDirectory() |
384 |
preview = PreviewDirectory() |
|
383 |
- |