Allow comments to be entered while still in transit
This commit is contained in:
parent
119f0a6b7d
commit
094c536eb4
4 changed files with 146 additions and 4 deletions
|
@ -777,6 +777,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 ) = @_;
|
||||
|
@ -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');
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
<div class="card-content">
|
||||
<i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i>
|
||||
<span class="card-title">Eingecheckt in <%= $journey->{train_type} %> <%= $journey->{train_no} %></span>
|
||||
% if ($journey->{comment}) {
|
||||
<p><%= $journey->{comment} %>.</p>
|
||||
% }
|
||||
<p>
|
||||
<div class="center-align countdown"
|
||||
data-journey="<%= $journey->{real_departure}->epoch %>;<%= <%= $journey->{real_arrival}->epoch %>"
|
||||
|
@ -216,9 +219,16 @@
|
|||
% }
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<a class="action-undo blue-text" data-id="in_transit" style="margin-right: 0;">
|
||||
<i class="material-icons left">undo</i> Rückgängig
|
||||
</a>
|
||||
% if ($journey->{arr_name}) {
|
||||
<a style="margin-right: 0;" href="/journey/comment">
|
||||
<i class="material-icons left">comment</i> Kommentar
|
||||
</a>
|
||||
% }
|
||||
% else {
|
||||
<a class="action-undo blue-text" data-id="in_transit" style="margin-right: 0;">
|
||||
<i class="material-icons left">undo</i> Checkin Rückgängig
|
||||
</a>
|
||||
% }
|
||||
% if (defined $journey->{arrival_countdown} and $journey->{arrival_countdown} <= 0) {
|
||||
<a
|
||||
class="action-checkout right"
|
||||
|
@ -276,6 +286,11 @@
|
|||
auschecken</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<a class="action-undo blue-text" data-id="in_transit" style="margin-right: 0;">
|
||||
<i class="material-icons left">undo</i> Checkin Rückgängig
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
% }
|
||||
</div>
|
||||
|
|
59
templates/edit_comment.html.ep
Normal file
59
templates/edit_comment.html.ep
Normal file
|
@ -0,0 +1,59 @@
|
|||
<h1>Zugfahrt kommentieren</h1>
|
||||
% if ($error or not $journey->{checked_in}) {
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<div class="card caution-color">
|
||||
<div class="card-content white-text">
|
||||
<span class="card-title">Fehler</span>
|
||||
<p>Du bist gerade nicht eingecheckt. Vergangene Zugfahrten
|
||||
kannst du über die Editierfunktion in der History
|
||||
kommentieren.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
% }
|
||||
% else {
|
||||
%= form_for '/journey/comment' => (method => 'POST') => begin
|
||||
%= csrf_field
|
||||
%= hidden_field 'dep_ts' => param('dep_ts')
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
<p>
|
||||
Eintrag zu
|
||||
<b><%= $journey->{train_type} %> <%= $journey->{train_no} %></b>
|
||||
von
|
||||
<b><%= $journey->{dep_name} %></b>
|
||||
nach
|
||||
<b><%= $journey->{arr_name} // 'irgendwo' %></b>
|
||||
am
|
||||
<b><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></b>
|
||||
</p>
|
||||
% if (current_user()->{is_public} & 0x04) {
|
||||
<p>
|
||||
Der hier eingetragene Text ist als Teil deines Nutzerstatus
|
||||
öffentlich sichtbar.
|
||||
</p>
|
||||
% }
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s12">
|
||||
%= text_field 'comment'
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col s6 m6 l6 center-align">
|
||||
<a href="/" class="waves-effect waves-light btn">
|
||||
Abbrechen
|
||||
</a>
|
||||
</div>
|
||||
<div class="col s6 m6 l6 center-align">
|
||||
<button class="btn waves-effect waves-light" type="submit" name="action" value="save">
|
||||
Speichern
|
||||
<i class="material-icons right">send</i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
%= end
|
||||
% }
|
Loading…
Reference in a new issue