1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2008-2016 É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
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# See the file COPYING for details.
"""
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
class Action:
def __init__(self, id, path, label, extra_url_args=[]):
self.id, self.path, self.label = id, path, label
self.extra_url_args, self.url = extra_url_args, None
def update_url(self, area_name):
try:
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)
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'))),
),]
if hasattr(settings, 'CHIMERE_DIRECTORY') and settings.CHIMERE_DIRECTORY:
default_actions.append((Action('categories', 'chimere:category-directory',
_('Directory')), []))
if settings.CHIMERE_FEEDS:
default_actions.append((Action('rss', 'chimere:feeds-form',
_('RSS feeds')), []))
if settings.EMAIL_HOST:
default_actions.append((Action('contact', 'chimere:contact',
_('Contact us')), []),)
def actions(area_name=''):
acts = default_actions[:]
for act, childs in default_actions:
act.update_url(area_name)
for child_act in childs:
child_act.update_url(area_name)
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
|