summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit96b8337aa18ec199c925883dfb5d85bc310270b6 (patch)
tree3077178cc426d37b558913dda1240974ba99e36f
parent63f117d7585f999d7f6c0667c47bfdc3ec8db3af (diff)
downloadIshtar-96b8337aa18ec199c925883dfb5d85bc310270b6.tar.bz2
Ishtar-96b8337aa18ec199c925883dfb5d85bc310270b6.zip
Add a new reset wizard action available from main templates (refs #2282)
-rw-r--r--archaeological_files/views.py13
-rw-r--r--archaeological_operations/views.py17
-rw-r--r--ishtar_common/templates/ishtar/wizard/default_wizard.html2
-rw-r--r--ishtar_common/urls.py1
-rw-r--r--ishtar_common/views.py14
-rw-r--r--ishtar_common/wizards.py7
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,