summaryrefslogtreecommitdiff
path: root/chimere/actions.py
blob: 8ce3e2a2abbbd5738353e255f92d261447208e07 (plain)
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