diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-02-12 23:34:01 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-06 15:48:16 +0200 |
commit | 5a12bcce1cfad8fcf93f902bc9e4c82c4a53ee14 (patch) | |
tree | 3077178cc426d37b558913dda1240974ba99e36f | |
parent | 0b5e08da0814e9cf65e3b9410d330be79a87a3db (diff) | |
download | Ishtar-5a12bcce1cfad8fcf93f902bc9e4c82c4a53ee14.tar.bz2 Ishtar-5a12bcce1cfad8fcf93f902bc9e4c82c4a53ee14.zip |
Add a new reset wizard action available from main templates (refs #2282)
-rw-r--r-- | archaeological_files/views.py | 13 | ||||
-rw-r--r-- | archaeological_operations/views.py | 17 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/wizard/default_wizard.html | 2 | ||||
-rw-r--r-- | ishtar_common/urls.py | 1 | ||||
-rw-r--r-- | ishtar_common/views.py | 14 | ||||
-rw-r--r-- | ishtar_common/wizards.py | 7 |
6 files changed, 54 insertions, 0 deletions
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 @@ <div id='validation-bar'> <input type="submit" id="submit_form" name='validate' value="{% trans "Validate" %}"/> {% if next_steps %}<input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans "Validate and end" %}"/>{% endif %} + <input type="button" id="reset_wizards" name='cancel' value="{% trans "Cancel" %}" onclick="window.location='{% url 'reset_wizards' %}';"/> </div> </div> </form> 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<page>\d+)/)?$', 'person_merge', name='person_merge'), url(r'organization_merge/(?:(?P<page>\d+)/)?$', 'organization_merge', name='organization_merge'), + url(r'reset/$', 'reset_wizards', name='reset_wizards'), url(r'(?P<action_slug>' + 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 @@ -620,6 +620,13 @@ class Wizard(NamedUrlWizardView): 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__) storage = get_storage(cls.storage_name, prefix, request, |