From 96b8337aa18ec199c925883dfb5d85bc310270b6 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 12 Feb 2015 23:34:01 +0100 Subject: Add a new reset wizard action available from main templates (refs #2282) --- archaeological_files/views.py | 13 +++++++++++++ archaeological_operations/views.py | 17 +++++++++++++++++ .../templates/ishtar/wizard/default_wizard.html | 2 ++ ishtar_common/urls.py | 1 + ishtar_common/views.py | 14 ++++++++++++++ ishtar_common/wizards.py | 7 +++++++ 6 files changed, 54 insertions(+) diff --git a/archaeological_files/views.py b/archaeological_files/views.py index c414ba858..180e8211a 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -215,3 +215,16 @@ file_administrativeactfile_deletion_wizard = \ label=_(u"File: administrative act deletion"), url_name='file_administrativeactfile_deletion',) +def reset_wizards(request): + for wizard_class, url_name in ( + (FileWizard, 'file_creation'), + (FileModificationWizard, 'file_modification'), + (FileClosingWizard, 'file_modification'), + (FileDeletionWizard, 'file_deletion'), + (FileAdministrativeActWizard, 'file_administrativeactfile'), + (FileEditAdministrativeActWizard, + 'file_administrativeactfile_modification_wizard'), + (AdministrativeActDeletionWizard, + 'file_administrativeactfile_deletion_wizard'), + ): + wizard_class.session_reset(request, url_name) diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py index 25ca61f30..0a161947b 100644 --- a/archaeological_operations/views.py +++ b/archaeological_operations/views.py @@ -389,3 +389,20 @@ def administrativeactfile_document(request, operation=True): operation=operation) return render_to_response('ishtar/administrativeact_document.html', dct, context_instance=RequestContext(request)) + +def reset_wizards(request): + for wizard_class, url_name in ( + (OperationWizard, 'operation_creation'), + (OperationModificationWizard, 'operation_modification'), + (OperationClosingWizard, 'operation_closing'), + (OperationDeletionWizard, 'operation_deletion_wizard'), + (OperationSourceWizard, 'operation_source_creation'), + (OperationSourceWizard, 'operation_source_modification'), + (OperationSourceDeletionWizard, 'operation_source_deletion'), + (OperationAdministrativeActWizard, 'operation_administrativeactop'), + (OperationEditAdministrativeActWizard, + 'operation_administrativeactop_modification'), + (AdministrativeActDeletionWizard, + 'operation_administrativeactop_deletion'), + ): + wizard_class.session_reset(request, url_name) diff --git a/ishtar_common/templates/ishtar/wizard/default_wizard.html b/ishtar_common/templates/ishtar/wizard/default_wizard.html index 3f2f3943e..2eb62457b 100644 --- a/ishtar_common/templates/ishtar/wizard/default_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/default_wizard.html @@ -1,5 +1,6 @@ {% extends "base.html" %} {% load i18n range table_form %} +{% load url from future %} {% block extra_head %} {{form.media}} {% endblock %} @@ -43,6 +44,7 @@
{% if next_steps %}{% endif %} +
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 0c4059eeb..10a397fe0 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -123,6 +123,7 @@ urlpatterns += patterns('ishtar_common.views', url(r'person_merge/(?:(?P\d+)/)?$', 'person_merge', name='person_merge'), url(r'organization_merge/(?:(?P\d+)/)?$', 'organization_merge', name='organization_merge'), + url(r'reset/$', 'reset_wizards', name='reset_wizards'), url(r'(?P' + actions + r')/$', 'action', name='action'), ) diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 1885493b1..7b2fffcef 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -832,6 +832,20 @@ def dashboard_main_detail(request, item_name): return render_to_response('ishtar/dashboards/dashboard_main_detail.html', dct, context_instance=RequestContext(request)) +def reset_wizards(request): + # dynamicaly execute each reset_wizards of each ishtar app + for app in settings.INSTALLED_APPS: + if app == 'ishtar_common': + # no need for infinite recursion + continue + try: + module = __import__(app) + except ImportError: + continue + if hasattr(module, 'views') and hasattr(module.views, 'reset_wizards'): + module.views.reset_wizards(request) + return redirect(reverse('start')) + ITEM_PER_PAGE = 20 def merge_action(model, form, key): def merge(request, page=1): diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 2ad3635d7..1e515d13e 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -619,6 +619,13 @@ class Wizard(NamedUrlWizardView): form_key + '-0-' + key #only check if the first field is available return key in request.session[storage.prefix]['step_data'][form_key] + @classmethod + def session_reset(cls, request, url_name): + prefix = url_name + normalize_name(cls.__name__) + storage = get_storage(cls.storage_name, prefix, request, + getattr(cls, 'file_storage', None)) + storage.reset() + @classmethod def session_set_value(cls, request, form_key, key, value, reset=False): prefix = form_key.split('-')[1] + normalize_name(cls.__name__) -- cgit v1.2.3