diff options
Diffstat (limited to 'ishtar')
| -rw-r--r-- | ishtar/furnitures/forms.py | 3 | ||||
| -rw-r--r-- | ishtar/furnitures/urls.py | 7 | ||||
| -rw-r--r-- | ishtar/furnitures/views.py | 76 | ||||
| -rw-r--r-- | ishtar/templates/base.html | 2 | ||||
| -rw-r--r-- | ishtar/templates/file_wizard.html | 4 | 
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>» <a href='{%url action CURRENT_ACTION step.slug%}'>Step {{step.slug}}</a></li> +  <li>» <a href='{%url action_form CURRENT_ACTION step.slug%}'>{{step.label}}</a></li>  {% endfor %} -  <li class='current'>» <a href='{%url action CURRENT_ACTION current_step.slug%}'>Step {{current_step.slug}}</a></li> +  <li class='current'>» <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> | 
