status/profile: re-add ability to show latest checkout, if desired

got lost in 1.30.0
This commit is contained in:
Daniel Friesel 2023-03-04 09:03:50 +01:00
parent 9abdaefaf5
commit e1231b88e2
No known key found for this signature in database
GPG key ID: 100D5BFB5166E005
7 changed files with 64 additions and 6 deletions

View file

@ -1609,7 +1609,7 @@ sub startup {
my ( $latest, $latest_cancellation ) = $self->journeys->get_latest( my ( $latest, $latest_cancellation ) = $self->journeys->get_latest(
uid => $uid, uid => $uid,
db => $db db => $db,
); );
if ( $latest_cancellation and $latest_cancellation->{cancelled} ) { if ( $latest_cancellation and $latest_cancellation->{cancelled} ) {
@ -1675,6 +1675,8 @@ sub startup {
arr_name => $latest->{arr_name}, arr_name => $latest->{arr_name},
arr_platform => $latest->{arr_platform}, arr_platform => $latest->{arr_platform},
comment => $latest->{user_data}{comment}, comment => $latest->{user_data}{comment},
visibility => $latest->{visibility},
visibility_str => $latest->{visibility_str},
}; };
} }

View file

@ -464,6 +464,7 @@ sub privacy {
$opt{comments_visible} = $self->param('public_comment') ? 1 : 0; $opt{comments_visible} = $self->param('public_comment') ? 1 : 0;
$opt{past_all} = $self->param('history_age') eq 'infinite' ? 1 : 0; $opt{past_all} = $self->param('history_age') eq 'infinite' ? 1 : 0;
$opt{past_status} = $self->param('past_status') ? 1 : 0;
if ( $self->param('history_level') eq 'intern' ) { if ( $self->param('history_level') eq 'intern' ) {
$opt{past_visible} = 1; $opt{past_visible} = 1;
@ -493,6 +494,7 @@ sub privacy {
: 'private' : 'private'
); );
$self->param( history_age => $user->{past_all} ? 'infinite' : 'month' ); $self->param( history_age => $user->{past_all} ? 'infinite' : 'month' );
$self->param( past_status => $user->{past_status} );
$self->render( 'privacy', name => $user->{name} ); $self->render( 'privacy', name => $user->{name} );
} }
} }

View file

@ -570,7 +570,7 @@ sub user_status {
); );
my $visibility; my $visibility;
if ( $status->{checked_in} ) { if ( $status->{checked_in} or $status->{arr_name} ) {
$visibility $visibility
= $self->compute_effective_visibility( = $self->compute_effective_visibility(
$user->{default_visibility_str}, $user->{default_visibility_str},
@ -589,8 +589,15 @@ sub user_status {
) )
{ {
$status->{checked_in} = 0; $status->{checked_in} = 0;
$status->{arr_name} = undef;
} }
} }
if ( not $status->{checked_in}
and $status->{arr_name}
and not $user->{past_status} )
{
$status->{arr_name} = undef;
}
if ( $status->{checked_in} ) { if ( $status->{checked_in} ) {
$og_data{url} .= '/' . $status->{sched_departure}->epoch; $og_data{url} .= '/' . $status->{sched_departure}->epoch;
@ -640,7 +647,7 @@ sub public_profile {
my $status = $self->get_user_status( $user->{id} ); my $status = $self->get_user_status( $user->{id} );
my $visibility; my $visibility;
if ( $status->{checked_in} ) { if ( $status->{checked_in} or $status->{arr_name} ) {
$visibility $visibility
= $self->compute_effective_visibility( = $self->compute_effective_visibility(
$user->{default_visibility_str}, $user->{default_visibility_str},
@ -659,8 +666,15 @@ sub public_profile {
) )
{ {
$status->{checked_in} = 0; $status->{checked_in} = 0;
$status->{arr_name} = undef;
} }
} }
if ( not $status->{checked_in}
and $status->{arr_name}
and not $user->{past_status} )
{
$status->{arr_name} = undef;
}
my %opt = ( my %opt = (
uid => $user->{id}, uid => $user->{id},
@ -855,7 +869,7 @@ sub public_status_card {
my $status = $self->get_user_status( $user->{id} ); my $status = $self->get_user_status( $user->{id} );
my $visibility; my $visibility;
if ( $status->{checked_in} ) { if ( $status->{checked_in} or $status->{arr_name} ) {
$visibility $visibility
= $self->compute_effective_visibility( = $self->compute_effective_visibility(
$user->{default_visibility_str}, $user->{default_visibility_str},
@ -874,8 +888,15 @@ sub public_status_card {
) )
{ {
$status->{checked_in} = 0; $status->{checked_in} = 0;
$status->{arr_name} = undef;
} }
} }
if ( not $status->{checked_in}
and $status->{arr_name}
and not $user->{past_status} )
{
$status->{arr_name} = undef;
}
$self->render( $self->render(
'_public_status_card', '_public_status_card',

View file

@ -720,6 +720,11 @@ sub get_latest {
} }
)->expand->hash; )->expand->hash;
$latest_successful->{visibility_str}
= $latest_successful->{visibility}
? $visibility_itoa{ $latest_successful->{visibility} }
: 'default';
my $latest = $db->select( my $latest = $db->select(
'journeys_str', 'journeys_str',
'*', '*',
@ -732,6 +737,11 @@ sub get_latest {
} }
)->expand->hash; )->expand->hash;
$latest->{visibility_str}
= $latest->{visibility}
? $visibility_itoa{ $latest->{visibility} }
: 'default';
return ( $latest_successful, $latest ); return ( $latest_successful, $latest );
} }

View file

@ -178,6 +178,7 @@ sub get_privacy_by_name {
comments_visible => $user->{public_level} & 0x80 ? 1 : 0, comments_visible => $user->{public_level} & 0x80 ? 1 : 0,
past_visible => ( $user->{public_level} & 0x300 ) >> 8, past_visible => ( $user->{public_level} & 0x300 ) >> 8,
past_all => $user->{public_level} & 0x400 ? 1 : 0, past_all => $user->{public_level} & 0x400 ? 1 : 0,
past_status => $user->{public_level} & 0x800 ? 1 : 0,
}; };
} }
return; return;
@ -194,7 +195,7 @@ sub set_privacy {
= ( $opt{default_visibility} & 0x7f ) = ( $opt{default_visibility} & 0x7f )
| ( $opt{comments_visible} ? 0x80 : 0x00 ) | ( $opt{comments_visible} ? 0x80 : 0x00 )
| ( ( ( $opt{past_visible} // 0 ) << 8 ) & 0x300 ) | ( ( ( $opt{past_visible} // 0 ) << 8 ) & 0x300 )
| ( $opt{past_all} ? 0x400 : 0 ); | ( $opt{past_all} ? 0x400 : 0 ) | ( $opt{past_status} ? 0x800 : 0 );
} }
$db->update( 'users', { public_level => $public_level }, { id => $uid } ); $db->update( 'users', { public_level => $public_level }, { id => $uid } );
@ -376,6 +377,7 @@ sub get {
comments_visible => $user->{public_level} & 0x80 ? 1 : 0, comments_visible => $user->{public_level} & 0x80 ? 1 : 0,
past_visible => ( $user->{public_level} & 0x300 ) >> 8, past_visible => ( $user->{public_level} & 0x300 ) >> 8,
past_all => $user->{public_level} & 0x400 ? 1 : 0, past_all => $user->{public_level} & 0x400 ? 1 : 0,
past_status => $user->{public_level} & 0x800 ? 1 : 0,
email => $user->{email}, email => $user->{email},
sb_name => $user->{external_services} sb_name => $user->{external_services}
? $sb_templates[ $user->{external_services} & 0x07 ][0] ? $sb_templates[ $user->{external_services} & 0x07 ][0]

View file

@ -173,6 +173,17 @@
<i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i> <i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i>
<span class="card-title"><%= $name %> ist gerade nicht eingecheckt</span> <span class="card-title"><%= $name %> ist gerade nicht eingecheckt</span>
<p> <p>
% if ($journey->{arr_name}) {
Zuletzt gesehen
% if ($journey->{real_arrival}->epoch and ($public_level & 0x20 or ($public_level & 0x10 and is_user_authenticated()))) {
%= $journey->{real_arrival}->strftime('am %d.%m.%Y')
in <b><%= $journey->{arr_name} %></b>
%= $journey->{real_arrival}->strftime('(Ankunft um %H:%M Uhr)')
% }
% else {
in <b><%= $journey->{arr_name} %></b>
% }
% }
</p> </p>
</div> </div>
</div> </div>

View file

@ -64,6 +64,16 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row">
<div class="input-field col s12">
<div>
<label>
%= check_box past_status => 1
<span>Wenn nicht eingecheckt: letztes Fahrtziel unter <a href="/status/<%= $name %>">/status/<%= $name %></a> zeigen, sofern die zugehörige Reise für die aufrufende Person sichtbar ist. Caveat: Die derzeitige Implementierung dieses Features gibt preis, ob deine letzte Fahrt öffentlich / lokal sichtbar war (→ Ziel angegeben) oder nicht (→ kein Ziel angegeben).</span>
</label>
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col s12"> <div class="col s12">
Wenn du (mit passender Sichtbarkeit) eingecheckt bist, werden unter Wenn du (mit passender Sichtbarkeit) eingecheckt bist, werden unter