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 |