diff options
author | Daniel Friesel <derf@finalrewind.org> | 2019-12-06 21:40:51 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2019-12-06 21:40:51 +0100 |
commit | 094c536eb475b02a26f65769d6ff460d270ef454 (patch) | |
tree | db36d0265b764825775d23c5edf591ec07252739 /lib | |
parent | 119f0a6b7d92db63c4dbab3e65dda34285c007e0 (diff) |
Allow comments to be entered while still in transit
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/Travelynx.pm | 25 | ||||
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 45 |
2 files changed, 69 insertions, 1 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 8a308db..c0ddf83 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -778,6 +778,25 @@ sub startup { ); $self->helper( + 'update_in_transit_comment' => sub { + my ( $self, $comment ) = @_; + my $uid = $self->current_user->{id}; + + my $status = $self->pg->db->select( 'in_transit', ['user_data'], + { user_id => $uid } )->expand->hash; + if ( not $status ) { + return; + } + $status->{user_data}{comment} = $comment; + $self->pg->db->update( + 'in_transit', + { user_data => JSON->new->encode( $status->{user_data} ) }, + { user_id => $uid } + ); + } + ); + + $self->helper( 'update_journey_part' => sub { my ( $self, $db, $journey_id, $key, $value ) = @_; my $rows; @@ -2652,6 +2671,7 @@ sub startup { route_after => \@route_after, messages => $in_transit->{messages}, extra_data => $in_transit->{data}, + comment => $in_transit->{user_data}{comment}, }; my @parsed_messages; @@ -2818,7 +2838,7 @@ sub startup { order_by => { -desc => 'journey_id' }, limit => 1 } - )->hash; + )->expand->hash; if ($latest) { my $ts = $latest->{checkout_ts}; @@ -2843,6 +2863,7 @@ sub startup { arr_ds100 => $latest->{arr_ds100}, arr_name => $latest->{arr_name}, arr_platform => $latest->{arr_platform}, + comment => $latest->{user_data}{comment}, }; } @@ -3129,6 +3150,7 @@ sub startup { $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/comment')->to('traveling#comment_form'); $authed_r->get('/journey/:id')->to('traveling#journey_details'); $authed_r->get('/s/*station')->to('traveling#station'); $authed_r->get('/confirm_mail/:token')->to('account#confirm_mail'); @@ -3137,6 +3159,7 @@ sub startup { $authed_r->post('/account/insight')->to('account#insight'); $authed_r->post('/history/map')->to('traveling#map_history'); $authed_r->post('/journey/add')->to('traveling#add_journey_form'); + $authed_r->post('/journey/comment')->to('traveling#comment_form'); $authed_r->post('/journey/edit')->to('traveling#edit_journey'); $authed_r->post('/journey/passenger_rights/*filename') ->to('passengerrights#generate'); diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index c8ba024..f41d8df 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -673,6 +673,51 @@ sub journey_details { } +sub comment_form { + my ($self) = @_; + my $dep_ts = $self->param('dep_ts'); + my $status = $self->get_user_status; + + if ( not $status->{checked_in} ) { + $self->render( + 'edit_comment', + error => 'notfound', + journey => {} + ); + } + elsif ( not $dep_ts ) { + $self->param( dep_ts => $status->{sched_departure}->epoch ); + $self->param( comment => $status->{comment} ); + $self->render( + 'edit_comment', + error => undef, + journey => $status + ); + } + elsif ( $self->validation->csrf_protect->has_error('csrf_token') ) { + $self->render( + 'edit_comment', + error => undef, + journey => $status + ); + } + elsif ( $dep_ts != $status->{sched_departure}->epoch ) { + + # TODO find and update appropriate past journey (if it exists) + $self->param( comment => $status->{comment} ); + $self->render( + 'edit_comment', + error => undef, + journey => $status + ); + } + else { + $self->app->log->debug("set comment"); + $self->update_in_transit_comment( $self->param('comment') ); + $self->redirect_to('/'); + } +} + sub edit_journey { my ($self) = @_; my $journey_id = $self->param('journey_id'); |