App-SD

 view release on metacpan or  search on metacpan

lib/App/SD/Server/Dispatcher.pm  view on Meta::CPAN

    }
    $components->child('None' => label => 'None', url => '/component/');

    $tickets->child( all => label => 'All' => url => '/tickets/all');
    $self->server->page_nav->child( create => label => 'New ticket', url => '/ticket/new') unless($self->server->static);
    $self->server->page_nav->child( home => label => 'Home', url => '/');


    next_rule;

};


under { method => 'POST' } => sub {
    # reject edits from non-localhost
    on qr'.' => sub {
        my $self = shift;
        if ( $self->server->cgi->remote_host() ne '127.0.0.1' ) {
            $self->server->_send_401;
        }
        else {
            next_rule;
        }
    };
    on qr'^/ticket/([\w\d-]+)/edit$' => sub { shift->server->_send_redirect( to => '/ticket/' . $1 ); };
    on qr'^/(?!records)$' => sub { shift->server->_send_redirect( to => $1 ); };
};


under { method => 'GET' } => sub {
    on qr'^/static/sd/(.*)$' => sub { shift->server->send_static_file($1)};
    on qr'^/(milestone|component|status)/([\w\d-]*)$' => sub {
        my $name = $1;
        my $type = $2;
        shift->show_template( $name => $type );
    };
   
    on qr'^/history/?(\d*)/?$' => sub {my  $since = $1; shift->show_template('history', $since)};
    on qr'^/tickets/all$' => sub {shift->show_template('all_tickets')};
    under qr'^/ticket/' => sub {
        on '' => sub {
            my $self = shift;
            if ( my $id = $self->server->cgi->param('id') ) {
                $self->server->_send_redirect( to => "/ticket/$id/view" );
            } else {
                next_rule;
            }
        };

        on 'new'             => sub { shift->show_template('new_ticket') };
        on qr'^([\w\d-]+)/?' => sub {
            my $self = shift;
            my $id = $1;

            my $ticket = App::SD::Model::Ticket->new(
                app_handle => $self->server->app_handle,
                handle     => $self->server->app_handle->handle
            );
            $ticket->load(($id =~ /^\d+$/ ? 'luid' : 'uuid') =>$id);
            if (!$ticket->luid) {
                $self->server->_send_404(); #redirect( to => "/error/ticket_does_not_exist");
            } else {
                next_rule;
            }
        };
        on qr'^([\w\d-]+)/?$'    => sub { shift->server->_send_redirect( to => "/ticket/$1/view" ) };
        on qr'^([\w\d-]+)/edit$' => sub { shift->show_template( 'edit_ticket', $1 ) };
        on qr'^([\w\d-]+)/history$' => sub { shift->show_template( 'show_ticket_history', $1 ) };
        on qr'^([\w\d-]+)/view$'    => sub { shift->show_template( 'show_ticket', $1 ) };
    };
};

redispatch_to 'Prophet::Server::Dispatcher';


sub show_template {
    if(ref($_[0])) { 
        # called in oo context. do it now
        my $self = shift;
        my $template = shift;
        $self->server->show_template($template, @_);
    } else {

    my $template = shift;
    return sub {
        my $self = shift;
        $self->server->show_template($template, @_);
    };
    }
}

1;



( run in 1.181 second using v1.01-cache-2.11-cpan-39bf76dae61 )