Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / root.py @ dde732e5

History | View | Annotate | Download (3.67 KB)

1 49c8da1d Thomas ANDREJAK
# -*- coding: utf-8 -*-
2 20367931 Thomas ANDREJAK
# vim:set expandtab tabstop=4 shiftwidth=4: 
3 49c8da1d Thomas ANDREJAK
"""Main Controller"""
4
5 977b981c Thomas ANDREJAK
from tg import expose, flash, require, url, request, redirect, config
6 49c8da1d Thomas ANDREJAK
7
from pylons.i18n import ugettext as _, lazy_ugettext as l_
8
from catwalk.tg2 import Catwalk
9
from repoze.what import predicates
10
11
from vigiboard.lib.base import BaseController
12 20367931 Thomas ANDREJAK
from vigiboard.model import DBSession 
13 49c8da1d Thomas ANDREJAK
from vigiboard.controllers.error import ErrorController
14
from vigiboard import model
15
from vigiboard.controllers.secure import SecureController
16
17
__all__ = ['RootController']
18
19
class RootController(BaseController):
20
    """
21
    The root controller for the vigiboard application.
22
    
23
    All the other controllers and WSGI applications should be mounted on this
24
    controller. For example::
25
    
26
        panel = ControlPanelController()
27
        another_app = AnotherWSGIApplication()
28
    
29
    Keep in mind that WSGI applications shouldn't be mounted directly: They
30
    must be wrapped around with :class:`tg.controllers.WSGIAppController`.
31
    
32
    """
33
    secc = SecureController()
34
    
35
    admin = Catwalk(model, DBSession)
36
    
37
    error = ErrorController()
38
39 977b981c Thomas ANDREJAK
    # on charge les controleurs souhaité en dynamique
40
    def __init__(self) :
41
        super(RootController,self).__init__()
42
        
43
        for mod in config['vigilo_mods']:
44
            try :
45
                mymod = __import__(
46
                    'vigiboard.controllers.' + mod + '_ctl',globals(), locals(), [mod + 'Controller'],-1)
47 dde732e5 Thomas ANDREJAK
                setattr(self,mod,getattr(mymod,mod + 'Controller')())
48 977b981c Thomas ANDREJAK
            except:
49 dde732e5 Thomas ANDREJAK
                pass
50 20367931 Thomas ANDREJAK
51 49c8da1d Thomas ANDREJAK
    @expose('vigiboard.templates.index')
52
    def index(self):
53
        """Handle the front-page."""
54
        return dict(page='index')
55
56
    @expose('vigiboard.templates.about')
57
    def about(self):
58
        """Handle the 'about' page."""
59
        return dict(page='about')
60
61
    @expose('vigiboard.templates.authentication')
62
    def auth(self):
63
        """Display some information about auth* on this application."""
64
        return dict(page='auth')
65
66
    @expose('vigiboard.templates.index')
67
    @require(predicates.has_permission('manage', msg=l_('Only for managers')))
68
    def manage_permission_only(self, **kw):
69
        """Illustrate how a page for managers only works."""
70
        return dict(page='managers stuff')
71
72
    @expose('vigiboard.templates.index')
73
    @require(predicates.is_user('editor', msg=l_('Only for the editor')))
74
    def editor_user_only(self, **kw):
75
        """Illustrate how a page exclusive for the editor works."""
76
        return dict(page='editor stuff')
77
78
    @expose('vigiboard.templates.login')
79
    def login(self, came_from=url('/')):
80
        """Start the user login."""
81
        login_counter = request.environ['repoze.who.logins']
82
        if login_counter > 0:
83
            flash(_('Wrong credentials'), 'warning')
84
        return dict(page='login', login_counter=str(login_counter),
85
                    came_from=came_from)
86
    
87
    @expose()
88
    def post_login(self, came_from=url('/')):
89
        """
90
        Redirect the user to the initially requested page on successful
91
        authentication or redirect her back to the login page if login failed.
92
        
93
        """
94
        if not request.identity:
95
            login_counter = request.environ['repoze.who.logins'] + 1
96
            redirect(url('/login', came_from=came_from, __logins=login_counter))
97
        userid = request.identity['repoze.who.userid']
98
        flash(_('Welcome back, %s!') % userid)
99
        redirect(came_from)
100
101
    @expose()
102
    def post_logout(self, came_from=url('/')):
103
        """
104
        Redirect the user to the initially requested page on logout and say
105
        goodbye as well.
106
        
107
        """
108
        flash(_('We hope to see you soon!'))
109
        redirect(came_from)