diff options
Diffstat (limited to 'chimere/actions.py')
| -rw-r--r-- | chimere/actions.py | 52 | 
1 files changed, 34 insertions, 18 deletions
| diff --git a/chimere/actions.py b/chimere/actions.py index 8ef5338..824b14f 100644 --- a/chimere/actions.py +++ b/chimere/actions.py @@ -1,6 +1,6 @@  #!/usr/bin/env python  # -*- coding: utf-8 -*- -# Copyright (C) 2008-2010  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2013  Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as @@ -25,41 +25,57 @@ from django.contrib.auth import models  from django.core.urlresolvers import reverse  from django.utils.translation import ugettext_lazy as _ -from models import Page +from chimere.models import Page, Map  class Action: -    def __init__(self, id, path, label, extra_url_args=[]): +    def __init__(self, id, path, label, extra_url_args=[], +                 condition=None):          self.id, self.path, self.label = id, path, label          self.extra_url_args, self.url = extra_url_args, None +        self.condition = condition -    def update_url(self, area_name): +    def update_url(self, map_name):          self.url = reverse(self.path, -             args=[area_name + '/' if area_name else ''] + self.extra_url_args) +             args=[map_name + '/' if map_name else ''] + self.extra_url_args) -default_actions = [(Action('view', 'chimere:index', _('View')), []), -   (Action('contribute', 'chimere:edit', _('Contribute')), +DEFAULT_ACTIONS = [[Action('view', 'chimere:index', _('View')), []], +   [Action('contribute', 'chimere:edit', _('Contribute'), +           condition=lambda user, map_name:bool( +                        Map.getAvailable(user=user, urn=map_name, single=True, +                                         propose=True))),              (Action('edit', 'chimere:edit', _('Add a new point of interest')),               Action('edit-route', 'chimere:editroute', _('Add a new route'))), -   ),] +                    ], +   ]  if settings.CHIMERE_FEEDS: -    default_actions.append((Action('rss', 'chimere:feeds-form', -                                   _('RSS feeds')), [])) +    DEFAULT_ACTIONS.append([Action('rss', 'chimere:feeds-form', +                                   _('RSS feeds')), []])  if settings.EMAIL_HOST: -    default_actions.append((Action('contact', 'chimere:contact', -                                   _('Contact us')), []),) +    DEFAULT_ACTIONS.append([Action('contact', 'chimere:contact', +                                   _('Contact us')), []],) - -def actions(area_name=''): -    acts = default_actions[:] +def actions(user, map_name='', default_actions=DEFAULT_ACTIONS): +    acts, idx = [], -1      for act, childs in default_actions: -        act.update_url(area_name) +        if act.id not in settings.CHIMERE_DEFAULT_ACTIONS: +            continue +        idx += 1 +        if act.condition: +            if not act.condition(user, map_name): +                continue +        act.update_url(map_name)          for child_act in childs: -            child_act.update_url(area_name) +            child_act.update_url(map_name) +        if "CHIMERE_DEFAULT_ACTION_LABEL" in dir(settings): +            if len(settings.CHIMERE_DEFAULT_ACTION_LABEL) > idx: +                act.label = settings.CHIMERE_DEFAULT_ACTION_LABEL[idx] +        acts.append((act, 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) +        act.update_url(map_name)          acts.append((act, [])) +      return acts | 
