diff options
Diffstat (limited to 'chimere/actions.py')
| -rw-r--r-- | chimere/actions.py | 61 | 
1 files changed, 46 insertions, 15 deletions
diff --git a/chimere/actions.py b/chimere/actions.py index 8ce3e2a..ecbd07a 100644 --- a/chimere/actions.py +++ b/chimere/actions.py @@ -21,11 +21,11 @@  Actions available in the main interface  """  from django.conf import settings -from django.contrib.auth import models  from django.core.urlresolvers import reverse, NoReverseMatch  from django.utils.translation import ugettext_lazy as _ -from models import Page +from models import Page, Area +  class Action:      def __init__(self, id, path, label, extra_url_args=[]): @@ -34,18 +34,24 @@ class Action:      def update_url(self, area_name):          try: -            self.url = reverse(self.path, -             args=[area_name if area_name else ''] + self.extra_url_args) +            self.url = reverse( +                self.path, +                args=[area_name + '/' if area_name else ''] +                + self.extra_url_args)          except NoReverseMatch:              # backward url management -            self.url = reverse(self.path, -             args=[area_name + '/' if area_name else ''] + self.extra_url_args) +            self.url = reverse( +                self.path, +                args=[area_name if area_name else ''] + self.extra_url_args) -default_actions = [(Action('view', 'chimere:index', _('View')), []), -   (Action('contribute', 'chimere:edit', _('Contribute')), -            (Action('edit', 'chimere:edit', _('Add a new point of interest')), -             Action('edit-route', 'chimere:editroute', _('Add a new route'))), -   ),] +default_actions = [ +    (Action('view', 'chimere:index', _('View')), []), +    (Action('contribute', 'chimere:edit', _('Contribute')), +     (Action('edit-marker', 'chimere:editmarker', +      _('Add a new point of interest')), +      Action('edit-route', 'chimere:editroute', _('Add a new route')), +      Action('edit-polygon', 'chimere:editpolygon', _('Add a new polygon'))), +     )]  if hasattr(settings, 'CHIMERE_DIRECTORY') and settings.CHIMERE_DIRECTORY:      default_actions.append((Action('categories', 'chimere:category-directory', @@ -62,13 +68,38 @@ if settings.EMAIL_HOST:  def actions(area_name=''):      acts = default_actions[:] -    for act, childs in default_actions: -        act.update_url(area_name) +    area, q = None, None +    if area_name: +        q = Area.objects.filter(urn=area_name) +        if not q.count(): +            q = Area.objects.filter(name=area_name) +    if not q or not q.count(): +        q = Area.objects.filter(default=True) +    if q.count(): +        area = q.all()[0] + +    real_acts = [] +    for act, childs in acts: +        real_childs = []          for child_act in childs: +            if area: +                if (child_act.id == 'edit-marker' +                    and not area.allow_point_edition) \ +                    or (child_act.id == 'edit-route' +                        and not area.allow_route_edition) \ +                    or (child_act.id == 'edit-polygon' +                        and not area.allow_polygon_edition): +                    continue +            real_childs.append(child_act) +        if childs and not real_childs: +            continue +        act.update_url(area_name) +        for child_act in real_childs:              child_act.update_url(area_name) +        real_acts.append((act, real_childs))      for page in Page.objects.filter(available=True).order_by('order'):          act = Action(page.mnemonic, 'chimere:extra_page', page.title,                       [page.mnemonic])          act.update_url(area_name) -        acts.append((act, [])) -    return acts +        real_acts.append((act, [])) +    return real_acts  | 
