From b80613b8a8dad252960d90f6a03227503e2ba133 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Tue, 19 Nov 2019 19:46:21 +0100 Subject: allow route input when adding journeys manually (#26) --- lib/Travelynx.pm | 46 ++++++++++++++++++++++++++--------- lib/Travelynx/Controller/Traveling.pm | 6 ++++- templates/add_journey.html.ep | 6 +++++ templates/journey.html.ep | 6 +++++ 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 741af2a..f13dd60 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -304,6 +304,39 @@ sub startup { return ( undef, 'Unbekannter Zielbahnhof' ); } + my @route = ( [ $dep_station->[1], {}, undef ] ); + + if ( $opt{route} ) { + my @unknown_stations; + for my $station ( @{ $opt{route} } ) { + my $station_info = get_station($station); + if ( not $station_info ) { + push( @unknown_stations, $station ); + } + push( @route, [ $station_info->[1], {}, undef ] ); + } + + if ( @unknown_stations == 1 ) { + return ( undef, + "Unbekannter Unterwegshalt: $unknown_stations[0]" ); + } + elsif (@unknown_stations) { + return ( undef, + 'Unbekannte Unterwegshalte: ' + . join( ', ', @unknown_stations ) ); + } + } + + push( @route, [ $arr_station->[1], {}, undef ] ); + + if ( $route[0][0] eq $route[1][0] ) { + shift(@route); + } + + if ( $route[-2][0] eq $route[-1][0] ) { + pop(@route); + } + my $entry = { user_id => $uid, train_type => $opt{train_type}, @@ -326,18 +359,7 @@ sub startup { checkout_time => $now, edited => 0x3fff, cancelled => $opt{cancelled} ? 1 : 0, - route => JSON->new->encode( - [ - [ - $dep_station->[1], undef, - $opt{sched_departure}->epoch, - ], - [ - $arr_station->[1], $opt{sched_arrival}->epoch, - undef - ] - ] - ), + route => JSON->new->encode( \@route ), }; if ( $opt{comment} ) { diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index f0f1879..c8f975f 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -803,10 +803,14 @@ sub add_journey_form { $opt{rt_departure} //= $opt{sched_departure}; $opt{rt_arrival} //= $opt{sched_arrival}; - for my $key (qw(dep_station arr_station cancelled comment)) { + for my $key (qw(dep_station arr_station route cancelled comment)) { $opt{$key} = $self->param($key); } + if ( $opt{route} ) { + $opt{route} = [ split( qr{\r?\n\r?}, $opt{route} ) ]; + } + my $db = $self->pg->db; my $tx = $db->begin; diff --git a/templates/add_journey.html.ep b/templates/add_journey.html.ep index 58cd68b..c3bc01c 100644 --- a/templates/add_journey.html.ep +++ b/templates/add_journey.html.ep @@ -76,6 +76,12 @@ +
+
+ %= text_area 'route', id => 'route', class => 'materialize-textarea' + +
+
%= text_field 'comment' diff --git a/templates/journey.html.ep b/templates/journey.html.ep index 9b7ad9c..7be4f78 100644 --- a/templates/journey.html.ep +++ b/templates/journey.html.ep @@ -113,6 +113,9 @@ % else { ? % } + % if ($journey->{edited} & 0x0010) { + ∗ + % } @@ -174,6 +177,9 @@ % else { <%= $station->[0] %> % } + % if ($journey->{edited} & 0x0010) { + ∗ + % }
% } -- cgit v1.2.3