App-SD

 view release on metacpan or  search on metacpan

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

package App::SD::Server::Dispatcher;
use Prophet::Server::Dispatcher -base;



on qr'.' => sub {
    my $self = shift;
    my $result = $self->server->result->get('create-ticket');
        if ( $result &&  $result->success ) {
            $self->server->_send_redirect( to => '/ticket/' . $result->record_uuid );
    } else {
        next_rule;
    }
};

on qr'.' => sub {
    my $self = shift;
    $self->server->page_nav->child( history => label => 'History', url => '/history');
    my $tickets = $self->server->page_nav->child( tickets => label => 'Tickets', url => '/');
    $tickets->child( go => label => '<form method="GET" action="/ticket/"><a href="#">Show ticket # <input type=text name=id size=3></a></form>', escape_label => 0) unless($self->server->static);


    my $milestones = $tickets->child( milestones => label => 'Milestones', url => '/milestones');
    my $items = $self->server->app_handle->setting( label => 'milestones' )->get();
    foreach my $item (@$items) {
        my $m = $milestones->child( $item => label => $item, url => '/milestone/'.$item);
        #$m->child('all' => label => 'All', url => '/milestone/'.$item.'/all');
        #$m->child('mine' => label => 'Mine', url => '/milestone/'.$item.'/mine');
        #$m->child('closed' => label => 'Closed', url => '/milestone/'.$item.'/closed');
    }
        $milestones->child( none => label => 'None', url => '/milestone/');
    
    my $components = $tickets->child( components => label => 'Components', url => '/components');
    my $component_list = $self->server->app_handle->setting( label => 'components' )->get();
    foreach my $item (@$component_list) {
        my $c= $components->child( $item => label => $item, url => '/component/'.$item);
        #$c->child('all' => label => 'All', url => '/component/'.$item.'/all');
        #$c->child('mine' => label => 'Mine', url => '/component/'.$item.'/mine');
        #$c->child('closed' => label => 'Closed', url => '/component/'.$item.'/closed');


    }
    $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')};



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