source: server/trunk/web/lib/Sophie/Controller/Root.pm @ 265

Last change on this file since 265 was 265, checked in by nanardon, 13 years ago
  • add statistics page (with graph)
File size: 2.7 KB
Line 
1package Sophie::Controller::Root;
2use Moose;
3use namespace::autoclean;
4
5BEGIN { extends 'Catalyst::Controller' }
6
7#
8# Sets the actions in this controller to be registered with no prefix
9# so they function identically to actions created in MyApp.pm
10#
11__PACKAGE__->config(namespace => '');
12
13=head1 NAME
14
15Sophie::Controller::Root - Root Controller for Sophie
16
17=head1 DESCRIPTION
18
19[enter your description here]
20
21=head1 METHODS
22
23=cut
24
25sub begin : Private {
26    my ( $self, $c ) = @_;
27
28    if ($c->req->path =~ m:[^/]+\/+$:) {
29        my $path = $c->req->path;
30        $path =~ s:/*$::;
31        $c->res->redirect($c->uri_for("/$path"));
32        return;
33    }
34
35    if (!$c->stash->{sitepath}) {
36        my @path;
37        my @reqpath = split('/', $c->req->path);
38        foreach (@reqpath) {
39            push(@path, $_);
40            push(@{ $c->stash->{sitepath} }, { path => $c->uri_for('/', @path),
41                    name => $_ || '*' });
42        }
43    }
44
45    if (($c->req->query_keywords || '') =~ /([^\w]|^)json([^\w]|$)/ ||
46        exists($c->req->params ->{json})) {
47        $c->stash->{current_view} = 'Json';
48    }
49    if (($c->req->query_keywords || '') =~ /([^\w]|^)ajax([^\w]|$)/ ||
50        exists($c->req->params ->{ajax})) {
51        $c->stash->{current_view} = 'Ajax';
52    }
53
54    if ($c->action =~ m/^admin\//) {
55        if (!($c->user_exists && $c->check_user_roles($c->user, 'Admin'))) {
56            $c->go('/login/index');
57        }
58    }
59
60    $c->delete_expired_sessions;
61}
62
63=head2 index
64
65The root page (/)
66
67=cut
68
69sub index :Path :Args(0) {
70    my ( $self, $c ) = @_;
71
72    $c->stash->{metarevisite} = 1;
73    $c->stash->{xmlrpc} = $c->forward(
74        '/search/rpms/bydate',
75        [
76            {
77                src => 1,
78                rows => 20,
79            },
80            1
81        ]
82    ); 
83}
84
85sub robots :Path('/robots.txt') {
86    my ($self, $c) = @_;
87
88    $c->serve_static_file($c->path_to('root', 'static', 'robots.txt'));
89}
90
91=head2 default
92
93Standard 404 error page
94
95=cut
96
97sub default :Path {
98    my ( $self, $c ) = @_;
99    $c->go('/404/index');
100}
101
102=head2 end
103
104Attempt to render a view, if needed.
105
106=cut
107
108sub _end : ActionClass('RenderView') {}
109
110sub  end : Private {
111    my ( $self, $c ) = @_;
112    if (!$c->stash->{current_view}) {
113        if (ref($c->stash->{xmlrpc}) eq 'HASH' &&
114            $c->stash->{xmlrpc}{graph}) {
115            $c->stash->{current_view} = 'GD';
116        }
117    }
118    if (!$c->req->xmlrpc->method) {
119        $c->forward('_end');
120    }
121    $c->stash->{data} = $c->stash->{xmlrpc};
122    $c->model('Base')->storage->dbh->rollback;
123}
124
125=head1 AUTHOR
126
127Olivier Thauvin
128
129=head1 LICENSE
130
131This library is free software. You can redistribute it and/or modify
132it under the same terms as Perl itself.
133
134=cut
135
136__PACKAGE__->meta->make_immutable;
137
1381;
Note: See TracBrowser for help on using the repository browser.