package MojoMojo::Controller::Root; use parent 'Catalyst::Controller'; __PACKAGE__->config->{namespace} = ''; =head1 NAME MojoMojo::Controller::Root =head1 ACTIONS =head2 begin (builtin) TODO =cut sub begin : Private { my ( $self, $c ) = @_; if($c->sessionid && $c->session->{lang}) { $c->languages([$c->session->{lang}]); } else { $c->languages([$c->pref('default_lang')]) if $c->pref('default_lang'); } if ( $c->stash->{path} ) { my ( $path_pages, $proto_pages ) = $c->model('DBIC::Page')->path_pages( $c->stash->{path} ); @{ $c->stash }{qw/ path_pages proto_pages /} = ( $path_pages, $proto_pages ); $c->stash->{page} = $path_pages->[ @$path_pages - 1 ]; $c->stash->{user} = $c->user->obj() if $c->user_exists && $c->user; } } =head2 default (global) Default action - display the error page (message.tt), for example when a nonexistent action was requested (like C). =cut sub default : Path { my ( $self, $c ) = @_; $c->res->status(404); $c->stash->{message} = $c->loc( 'The requested URL was not found: x', '' . $c->stash->{pre_hacked_uri} . '' ); $c->stash->{template} = 'message.tt'; } =head2 set_lang (Re)set language of current session. =cut sub set_lang :Global { my ($self,$c) = @_; $c->session->{lang}=$c->req->params->{lang}; $c->res->redirect($c->req->params->{redir}); } =head2 render Finally, use ActionClass RenderView to render the content. =cut sub render : ActionClass('RenderView') { my ($self) = shift; my ($c) = @_; $c->stash->{path} ||= '/'; } =head2 end (builtin) At the end of any request, forward to view unless there is a template or response, then render the template. If param 'die' is passed, show a debug screen. =cut sub end : Private { my ( $self, $c ) = @_; my $theme=$c->pref('theme'); # if theme doesn't exist if ( ! -d $c->path_to('root','static','themes',$theme)) { $theme='default'; $c->pref('theme',$theme); } $c->stash->{additional_template_paths} = [ $c->path_to('root','themes',$theme) ]; $c->req->uri->path( $c->stash->{pre_hacked_uri}->path ) if ref $c->stash->{pre_hacked_uri}; $c->forward('render'); } =head2 auto Runs for all requests, checks if user is in need of validation, and intercepts the request if so. =cut sub auto : Private { my ( $self, $c ) = @_; if ( $c->pref('enforce_login') ) { # allow a few actions if ( grep $c->action->name eq $_, qw/login logout recover_pass register/ ) { return 1; } if ( !$c->user_exists ) { $c->res->redirect( $c->uri_for('/.login') ); } } return 1 unless $c->stash->{user}; return 1 if $c->stash->{user}->active != -1; return 1 if $c->req->action eq 'logout'; $c->stash->{template} = 'user/validate.tt'; } sub exit : Local { my ($self, $c) = @_; if ($ENV{MOJOMOJO_EXIT_OK}) { exit(0); } else { # $c->stash( template => 'error.tt' ); $c->res->status (403); # forbidden $c->res->body('EXIT NOT OK'); $c->detach(); } } =head1 AUTHOR Marcus Ramberg =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;