From beb17acb8440bb44f1070c2fb3b2e6cf7521f800 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 7 Apr 2019 20:20:37 +0200 Subject: Prepare forms for manual journey entry and editing --- lib/Travelynx.pm | 2 + lib/Travelynx/Controller/Traveling.pm | 58 +++++++++++++++++++++ templates/add_journey.html.ep | 63 +++++++++++++++++++++++ templates/edit_journey.html.ep | 94 +++++++++++++++++++++++++++++++++++ templates/journey.html.ep | 10 ++-- 5 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 templates/add_journey.html.ep create mode 100644 templates/edit_journey.html.ep diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 7cab531..7c1c1df 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -1475,8 +1475,10 @@ qq{select * from pending_mails where email = ? and num_tries > 1;} $authed_r->get('/history')->to('traveling#history'); $authed_r->get('/history/:year')->to('traveling#yearly_history'); $authed_r->get('/history/:year/:month')->to('traveling#monthly_history'); + $authed_r->get('/journey/add')->to('traveling#add_journey_form'); $authed_r->get('/journey/:id')->to('traveling#journey_details'); $authed_r->get('/s/*station')->to('traveling#station'); + $authed_r->post('/journey/edit')->to('traveling#edit_journey'); $authed_r->post('/change_password')->to('account#change_password'); $authed_r->post('/delete')->to('account#delete'); $authed_r->post('/logout')->to('account#do_logout'); diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index bbbc214..83036ba 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -378,6 +378,8 @@ sub journey_details { my ($self) = @_; my ( $uid, $checkout_id ) = split( qr{-}, $self->stash('id') ); + $self->param( journey_id => $checkout_id ); + if ( not( $uid == $self->current_user->{id} and $checkout_id ) ) { $self->render( 'journey', @@ -411,4 +413,60 @@ sub journey_details { ); } +sub edit_journey { + my ($self) = @_; + my $checkout_id = $self->param('journey_id'); + my $uid = $self->current_user->{id}; + + if ( not( $uid == $self->current_user->{id} and $checkout_id ) ) { + $self->render( + 'edit_journey', + error => 'notfound', + journey => {} + ); + return; + } + + my @journeys = $self->get_user_travels( + uid => $uid, + checkout_id => $checkout_id, + ); + if ( @journeys == 0 + or not $journeys[0]{completed} + or $journeys[0]{ids}[1] != $checkout_id ) + { + $self->render( + 'edit_journey', + error => 'notfound', + journey => {} + ); + return; + } + + my $journey = $journeys[0]; + + for my $key (qw(sched_departure rt_departure sched_arrival rt_arrival)) { + if ( $journey->{$key} and $journey->{$key}->epoch ) { + $self->param( + $key => $journey->{$key}->strftime('%d.%m.%Y %H:%M') ); + } + } + + if ( $journey->{route} ) { + $self->param( route => join( "\n", @{ $journey->{route} } ) ); + } + + $self->render( + 'edit_journey', + error => undef, + journey => $journey + ); +} + +sub add_journey_form { + my ($self) = @_; + + $self->render( 'add_journey', error => undef ); +} + 1; diff --git a/templates/add_journey.html.ep b/templates/add_journey.html.ep new file mode 100644 index 0000000..9ef00f5 --- /dev/null +++ b/templates/add_journey.html.ep @@ -0,0 +1,63 @@ +

Zugfahrt eingeben

+% if ($error) { +
+
+
+
+ Ungültige Eingabe +

<%= $error %>

+
+
+
+
+% } +
+
+
    +
  • Eingabe des Zugs als „Zug Typ Nummer“ oder „Zug Nummer“, z.B. + „ICE 100“, „S 1 31133“ oder „ABR RE11 26720“
  • +
  • Zeitangaben im Format DD.MM.YYYY HH:MM
  • +
+
+
+%= form_for '/journey/add' => (method => 'POST') => begin + %= csrf_field +
+
+ %= text_field 'train', id => 'train', class => 'validate', required => undef, pattern => '[0-9a-zA-Z]+ +[0-9a-zA-Z]* *[0-9]+' + +
+
+
+
+ %= text_field 'sched_departure', id => 'sched_departure', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' + +
+
+ %= text_field 'rt_departure', id => 'rt_departure', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' + +
+
+
+
+ %= text_field 'sched_arrival', id => 'sched_arrival', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' + +
+
+ %= text_field 'rt_arrival', id => 'rt_arrival', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' + +
+
+
+
+
+
+ +
+
+
+
+%= end diff --git a/templates/edit_journey.html.ep b/templates/edit_journey.html.ep new file mode 100644 index 0000000..8fdc5b6 --- /dev/null +++ b/templates/edit_journey.html.ep @@ -0,0 +1,94 @@ +% if ($error and $error eq 'notfound') { +
+
+
+
+ Fehler +

Zugfahrt nicht gefunden.

+
+
+
+
+% } +% else { + % if ($error) { +
+
+
+
+ Ungültige Eingabe +

<%= $error %>

+
+
+
+
+ % } + %= form_for '/journey/edit' => (method => 'POST') => begin + %= csrf_field +
+
+

+ Fahrt von + <%= $journey->{from_name} %> + nach + <%= $journey->{to_name} %> + am + <%= $journey->{sched_departure}->strftime('%d.%m.%Y') %> +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
Zug + <%= $journey->{type} %> <%= $journey->{no} %> + % if ($journey->{line}) { + (Linie <%= $journey->{line} %>) + % } +
Geplante Abfahrt + %= text_field 'sched_departure', id => 'sched_departure', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' +
Tatsächliche Abfahrt + %= text_field 'rt_departure', id => 'real_departure', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' +
Geplante Ankunft + %= text_field 'sched_arrival', id => 'sched_arrival', class => 'validate', required => undef, pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' +
Tatsächliche Ankunft + %= text_field 'rt_arrival', id => 'real_arrival', class => 'validate', pattern => '[0-9][0-9]?[.][0-9][0-9]?[.][0-9][0-9][0-9][0-9] +[0-9][0-9]:[0-9][0-9]' +
Route + %= text_area 'route', id => 'route', cols => 40, rows => 20 +
+
+
+
+
+
+
+ +
+
+
+
+ %= end +% } diff --git a/templates/journey.html.ep b/templates/journey.html.ep index 7483a14..3b84d67 100644 --- a/templates/journey.html.ep +++ b/templates/journey.html.ep @@ -129,8 +129,6 @@
-
-
-
+
+ %= form_for '/journey/edit' => (method => 'POST') => begin + %= hidden_field 'journey_id' => param('journey_id') + + %= end
% } -- cgit v1.2.3