profile: limit history to four weeks by default

This commit is contained in:
Daniel Friesel 2020-09-04 18:38:35 +02:00
parent 482fa975b5
commit 7eb5f967f2
5 changed files with 99 additions and 49 deletions

View file

@ -261,6 +261,13 @@ sub privacy {
$public_level &= ~0x30; $public_level &= ~0x30;
} }
if ( $self->param('history_age') eq 'infinite' ) {
$public_level |= 0x40;
}
else {
$public_level &= ~0x40;
}
$self->users->set_privacy( $self->users->set_privacy(
uid => $user->{id}, uid => $user->{id},
level => $public_level level => $public_level
@ -281,6 +288,8 @@ sub privacy {
: $public_level & 0x20 ? 'extern' : $public_level & 0x20 ? 'extern'
: 'private' : 'private'
); );
$self->param(
history_age => $public_level & 0x40 ? 'infinite' : 'month' );
$self->render( 'privacy', name => $user->{name} ); $self->render( 'privacy', name => $user->{name} );
} }
} }

View file

@ -160,12 +160,32 @@ sub public_profile {
) )
{ {
my $status = $self->get_user_status( $user->{id} ); my $status = $self->get_user_status( $user->{id} );
my @journeys;
if ( $user->{public_level} & 0x40 ) {
@journeys = $self->journeys->get(
uid => $user->{id},
limit => 10,
with_datetime => 1
);
}
else {
my $now = DateTime->now( time_zone => 'Europe/Berlin' );
my $month_ago = $now->clone->subtract( weeks => 4 );
@journeys = $self->journeys->get(
uid => $user->{id},
limit => 10,
with_datetime => 1,
after => $month_ago,
before => $now
);
}
$self->render( $self->render(
'profile', 'profile',
name => $name, name => $name,
uid => $user->{id}, uid => $user->{id},
public_level => $user->{public_level}, public_level => $user->{public_level},
journey => $status, journey => $status,
journeys => [@journeys],
version => $self->app->config->{version} // 'UNKNOWN', version => $self->app->config->{version} // 'UNKNOWN',
); );
} }
@ -207,12 +227,22 @@ sub public_journey_details {
with_polyline => 1, with_polyline => 1,
); );
if ( not( $user->{public_level} & 0x40 ) ) {
my $month_ago = DateTime->now( time_zone => 'Europe/Berlin' )
->subtract( weeks => 4 )->epoch;
if ( $journey and $journey->{rt_dep_ts} < $month_ago ) {
$journey = undef;
}
}
if ($journey) { if ($journey) {
my $map_data = $self->journeys_to_map_data( my $map_data = $self->journeys_to_map_data(
journeys => [$journey], journeys => [$journey],
include_manual => 1, include_manual => 1,
); );
if ( $journey->{user_data}{comment} ) { if ( $journey->{user_data}{comment}
and not $user->{public_level} & 0x04 )
{
delete $journey->{user_data}{comment}; delete $journey->{user_data}{comment};
} }
$self->render( $self->render(
@ -226,7 +256,7 @@ sub public_journey_details {
); );
} }
else { else {
$self->render( 'not_found', ); $self->render('not_found');
} }
} }
else { else {

View file

@ -72,17 +72,23 @@
% elsif ($acc->{is_public} & 0x02) { % elsif ($acc->{is_public} & 0x02) {
Aktueller Status Aktueller Status
% } % }
% if ($acc->{is_public} & 0x04) {
mit Kommentar
% }
% if ($acc->{is_public} & 0x0f and $acc->{is_public} & 0xf0) { % if ($acc->{is_public} & 0x0f and $acc->{is_public} & 0xf0) {
<br/> <br/>
% } % }
% if ($acc->{is_public} & 0x10) { % if ($acc->{is_public} & 0x30) {
Vergangene Fahrten (nur mit Anmeldung) % if ($acc->{is_public} & 0x40) {
Vergangene Fahrten
% }
% else {
Fahrten der letzten vier Wochen
% }
% if ($acc->{is_public} & 0x10) {
(nur mit Anmeldung)
% }
% } % }
% elsif ($acc->{is_public} & 0x20) { % if ($acc->{is_public} & 0x04) {
Vergangene Fahrten <br/>
Kommentare
% } % }
</td> </td>
</tr> </tr>

View file

@ -12,26 +12,22 @@
<h2>Aktueller Status</h2> <h2>Aktueller Status</h2>
<div class="row"> <div class="row">
<div class="input-field col s12"> <div class="input-field col s12">
<div>
<label> <label>
%= radio_button status_level => 'private' %= radio_button status_level => 'private'
<span>Nicht sichtbar</span> <span>Nicht sichtbar</span>
</label> </label>
</div> </div><div>
</div>
<div class="row">
<div class="input-field col s12">
<label> <label>
%= radio_button status_level => 'intern' %= radio_button status_level => 'intern'
<span>Nur mit Anmeldung</span> <span>Nur mit Anmeldung</span>
</label> </label>
</div> </div><div>
</div>
<div class="row">
<div class="input-field col s12">
<label> <label>
%= radio_button status_level => 'extern' %= radio_button status_level => 'extern'
<span>Öffentlich</span> <span>Öffentlich</span>
</label> </label>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -39,63 +35,72 @@
Hier kannst du auswählen, ob dein aktueller Status unter <a Hier kannst du auswählen, ob dein aktueller Status unter <a
href="/status/<%= $name %>">/status/<%= $name %></a> sowie <a href="/status/<%= $name %>">/status/<%= $name %></a> sowie <a
href="/p/<%= $name %>">/p/<%= $name %></a> abrufbar ist. href="/p/<%= $name %>">/p/<%= $name %></a> abrufbar ist.
Wenn du eingecheckt bist, werden dort Zug, Start- und Zielstation, Wenn du eingecheckt bist, werden dort Zug, Start- und Zielstation
Abfahrts- und Ankunftszeit gezeigt; andernfalls lediglich der sowie Abfahrts- und Ankunftszeit gezeigt, andernfalls lediglich der
Zielbahnhof der letzten Reise. Wann die letzte Reise beendet wurde, Zielbahnhof der letzten Reise. Wann die letzte Reise beendet wurde,
wird nur angegeben, wenn deine vergangenen Zugfahrten sichtbar sind wird nur angegeben, wenn deine vergangenen Zugfahrten sichtbar sind
(siehe unten). (siehe unten).
</div> </div>
</div> </div>
<div class="row">
<div class="input-field col s12">
<label>
%= check_box public_comment => 1
<span>Mit Kommentar</span>
</label>
</div>
</div>
<div class="row">
<div class="col s12">
Wenn aktiv, wird in deinem aktuellen Status auch der optionale
Freitext-Kommentar der Zugfahrt gezeigt. Wenn du gerade nicht
eingecheckt bist oder dein aktueller Status nicht öffentlich ist,
hat dieses Feld keine Auswirkungen.
</div>
</div>
<h2>Vergangene Zugfahrten</h2> <h2>Vergangene Zugfahrten</h2>
<div class="row"> <div class="row">
<div class="input-field col s12"> <div class="input-field col s12 m6 l6">
<div>
<label> <label>
%= radio_button history_level => 'private' %= radio_button history_level => 'private'
<span>Nicht sichtbar</span> <span>Nicht sichtbar</span>
</label> </label>
</div> </div><div>
</div>
<div class="row">
<div class="input-field col s12">
<label> <label>
%= radio_button history_level => 'intern' %= radio_button history_level => 'intern'
<span>Nur mit Anmeldung</span> <span>Nur mit Anmeldung</span>
</label> </label>
</div> </div><div>
</div>
<div class="row">
<div class="input-field col s12">
<label> <label>
%= radio_button history_level => 'extern' %= radio_button history_level => 'extern'
<span>Öffentlich</span> <span>Öffentlich</span>
</label> </label>
</div>
</div>
<div class="input-field col s12 m6 l6">
<div>
<label>
%= radio_button history_age => 'month'
<span>Letzte vier Wochen</span>
</label>
</div><div>
<label>
%= radio_button history_age => 'infinite'
<span>Alle Fahrten</span>
</label>
</div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col s12"> <div class="col s12">
Diese Einstellung bestimmt die Sichtbarkeit deiner vergangenen Diese Einstellung bestimmt die Sichtbarkeit deiner vergangenen
Zugfahrten mit allen dazu bekannten Details (Abfahrt, Ankunft, Zugfahrten mit allen dazu bekannten Details (Abfahrt, Ankunft,
Wagenreihung u.a.). Die letzten zehn Fahrten werden unter <a Wagenreihung u.a.). Bis zu zehn deiner Fahrten werden unter <a
href="/p/<%= $name %>">/p/<%= $name %></a> aufgelistet und verlinkt, href="/p/<%= $name %>">/p/<%= $name %></a> aufgelistet und verlinkt,
ältere Fahrten sind jedoch weiterhin über /p/<%= $name %>/j/ID dort nicht eingetragene Fahrten sind jedoch weiterhin über /p/<%=
zugänglich. Da die ID (mit Lücken) aufsteigend vergeben wird, sind $name %>/j/ID zugänglich. Da die ID (mit Lücken) aufsteigend vergeben
effektiv alle deiner vergangenen Fahrten öffentlich. wird, sind effektiv alle deiner vergangenen Fahrten (oder alle Fahrten
der letzten vier Wochen) öffentlich.
</div>
</div>
<h2>Sonstiges</h2>
<div class="row">
<div class="input-field col s12">
<label>
%= check_box public_comment => 1
<span>Kommentare anzeigen</span>
</label>
</div>
</div>
<div class="row">
<div class="col s12">
Wenn aktiv, sind von dir eingetragene Freitext-Kommentare in deinem
aktuellen Status sowie bei deinen vergangenen Zugfahrten sichtbar.
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View file

@ -23,7 +23,7 @@
<h2>Letzte Fahrten von <%= $name %></h1> <h2>Letzte Fahrten von <%= $name %></h1>
</div> </div>
</div> </div>
%= include '_history_trains', date_format => '%d.%m.%Y', link_prefix => "/p/${name}/j/", journeys => [journeys->get(uid => $uid, limit => 10, with_datetime => 1)]; %= include '_history_trains', date_format => '%d.%m.%Y', link_prefix => "/p/${name}/j/", journeys => $journeys;
% } % }
%= include '_footer', version => stash('version') %= include '_footer', version => stash('version')