summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar/furnitures/forms.py3
-rw-r--r--ishtar/furnitures/urls.py7
-rw-r--r--ishtar/furnitures/views.py76
-rw-r--r--ishtar/templates/base.html2
-rw-r--r--ishtar/templates/file_wizard.html4
5 files changed, 76 insertions, 16 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py
index 077964484..33a58cbfd 100644
--- a/ishtar/furnitures/forms.py
+++ b/ishtar/furnitures/forms.py
@@ -55,7 +55,8 @@ class FileWizard(SessionWizard):
previous_steps = []
for stp in self.base_steps:
if stp == step:
- return Context({'previous_steps':previous_steps})
+ return Context({'previous_steps':previous_steps,
+ 'current_step':stp})
previous_steps.append(stp)
return Context({'previous_steps':previous_steps})
diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py
index 9c09c323d..0b3cd6c16 100644
--- a/ishtar/furnitures/urls.py
+++ b/ishtar/furnitures/urls.py
@@ -30,6 +30,9 @@ for section in menu.childs:
actions = r"|".join(actions)
urlpatterns += patterns('ishtar.furnitures.views',
- url(BASE_URL + r'(?P<action>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/' +\
- r'((?P<obj_id>\d)/)?$', 'action', name='action'),
+ url(BASE_URL + r'(?P<action_slug>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/' +\
+ r'(?P<obj_id>\d)/$', 'action', name='action_bounded_form'),
+ url(BASE_URL + r'(?P<action_slug>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/$',
+ 'action', name='action_form'),
+ url(BASE_URL + r'(?P<action_slug>' + actions + r')/$', 'action', name='action'),
)
diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py
index 96e84cc6f..5ea71cc86 100644
--- a/ishtar/furnitures/views.py
+++ b/ishtar/furnitures/views.py
@@ -23,7 +23,7 @@ Furnitures views
from django.http import HttpResponse
from django.template import RequestContext
-from django.shortcuts import render_to_response
+from django.shortcuts import render_to_response, redirect
from django.utils.translation import ugettext, ugettext_lazy as _
from ishtar import settings
@@ -37,24 +37,80 @@ def index(request):
dct = {}
return render_to_response('index.html', dct,
context_instance=RequestContext(request))
-def action(request, action, obj_id=None, *args, **kwargs):
+
+def check_permission(request, action_slug, obj_id=None):
+ if obj_id:
+ return menu.items[action_slug].is_available(request.user, obj_id)
+ return menu.items[action_slug].can_be_available(request.user)
+
+'''
+def base_action(request, action_slug, obj_id=None, *args, **kwargs):
"""
- Action management
+ Basic action management
"""
- if obj_id and not menu.items[action].is_available(request.user, obj_id) or \
- not menu.items[action].can_be_available(request.user):
+ if not check_permission(request, action_slug, obj_id):
not_permitted_msg = ugettext(u"Operation not permitted.")
return HttpResponse(not_permitted_msg)
- request.session['CURRENT_ACTION'] = action
+ request.session['CURRENT_ACTION'] = action_slug
+ associated_wizard = action_slug + '_wizard'
+ dct = {}
+ print base_action
globals_dct = globals()
- if action in globals_dct:
+ if associated_wizard in globals_dct:
+ wizard = globals_dct[associated_wizard]
+ current_step = None
+ if wizard.id in request.session \
+ and 'current_step' in request.session[wizard.id] \
+ and request.session[wizard.id]['current_step']:
+ current_step = request.session[wizard.id]['current_step'].slug
+ else:
+ current_step = wizard.base_steps[0].slug
+ return action(request, action_slug, obj_id=obj_id, *args, **kwargs)
+ if obj_id:
+ return redirect('action', action_slug, current_step, obj_id)
+ return redirect('action', action_slug, current_step)
+
+ if action_slug in globals_dct:
return globals_dct[action](request, dct, obj_id, *args, **kwargs)
return render_to_response('index.html', dct,
context_instance=RequestContext(request))
+'''
+
+def action(request, action_slug, obj_id=None, *args, **kwargs):
+ """
+ Action management
+ """
+ if not check_permission(request, action_slug, obj_id):
+ not_permitted_msg = ugettext(u"Operation not permitted.")
+ return HttpResponse(not_permitted_msg)
+ request.session['CURRENT_ACTION'] = action_slug
+ associated_wizard = action_slug + '_wizard'
+ dct = {}
+ globals_dct = globals()
+ if associated_wizard in globals_dct:
+ wizard = globals_dct[associated_wizard]
+ if ('slug' not in kwargs or not kwargs['slug']):
+ current_step = None
+ if wizard.id in request.session \
+ and 'current_step' in request.session[wizard.id] \
+ and request.session[wizard.id]['current_step']:
+ current_step = request.session[wizard.id]['current_step'].slug
+ else:
+ current_step = wizard.base_steps[0].slug
+ return redirect('action_form', action_slug, current_step)
+ elif wizard.id in request.session:
+ for step in wizard.base_steps:
+ if step.slug == kwargs['slug']:
+ request.session[wizard.id]['current_step'] = step
+ if action_slug in globals_dct:
+ return globals_dct[action_slug](request, dct, obj_id, *args, **kwargs)
+ return render_to_response('index.html', dct,
+ context_instance=RequestContext(request))
-file_wizard = FileWizard([Step('1', _(u"General"), FileForm1),
- Step('2', _(u"Localisation"), FileForm2)])
+file_creation_wizard = FileWizard([
+ Step('general', _(u"General"), FileForm1),
+ Step('localisation', _(u"Localisation"), FileForm2)])
def file_creation(request, dct, obj_id, *args, **kwargs):
- return file_wizard(request, *args, **kwargs)
+ return file_creation_wizard(request, *args, **kwargs)
diff --git a/ishtar/templates/base.html b/ishtar/templates/base.html
index 97d3fda7e..12954a70d 100644
--- a/ishtar/templates/base.html
+++ b/ishtar/templates/base.html
@@ -36,7 +36,7 @@
{% if section.available %}<li>{{section.label}}
<ul>
{% for menu_item in section.childs %}{%if menu_item.available%}
- <li{%ifequal menu_item.idx CURRENT_ACTION%} class='selected'{%endifequal%}><a href='{% url action menu_item.idx 1%}'>{{menu_item.label}}</a></li>
+ <li{%ifequal menu_item.idx CURRENT_ACTION%} class='selected'{%endifequal%}><a href='{% url action menu_item.idx%}'>{{menu_item.label}}</a></li>
{%endif%}{% endfor %}
</ul>
</li>{%endif%}
diff --git a/ishtar/templates/file_wizard.html b/ishtar/templates/file_wizard.html
index 4ac4644e6..99719920c 100644
--- a/ishtar/templates/file_wizard.html
+++ b/ishtar/templates/file_wizard.html
@@ -4,9 +4,9 @@
{% block content %}
<ul id='form_path'>
{% for step in extra_context.previous_steps %}
- <li>&raquo; <a href='{%url action CURRENT_ACTION step.slug%}'>Step {{step.slug}}</a></li>
+ <li>&raquo; <a href='{%url action_form CURRENT_ACTION step.slug%}'>{{step.label}}</a></li>
{% endfor %}
- <li class='current'>&raquo; <a href='{%url action CURRENT_ACTION current_step.slug%}'>Step {{current_step.slug}}</a></li>
+ <li class='current'>&raquo; <a href='{%url action_form CURRENT_ACTION extra_context.current_step.slug%}'>{{extra_context.current_step.label}}</a></li>
</ul>
<form action="." method="post">{% csrf_token %}
<table>