summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2020-09-04 18:38:35 +0200
committerDaniel Friesel <derf@finalrewind.org>2020-09-04 18:38:35 +0200
commit7eb5f967f2d85ea3a7846353fbaf666e3a0e2bc5 (patch)
tree5072bd80f44589de6781a640d5d564f035c4ef33
parent482fa975b5f50064deb57b651019908c17b71f47 (diff)
profile: limit history to four weeks by default
-rw-r--r--lib/Travelynx/Controller/Account.pm9
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm34
-rw-r--r--templates/account.html.ep20
-rw-r--r--templates/privacy.html.ep83
-rw-r--r--templates/profile.html.ep2
5 files changed, 99 insertions, 49 deletions
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm
index 10200a6..c68a22c 100644
--- a/lib/Travelynx/Controller/Account.pm
+++ b/lib/Travelynx/Controller/Account.pm
@@ -261,6 +261,13 @@ sub privacy {
$public_level &= ~0x30;
}
+ if ( $self->param('history_age') eq 'infinite' ) {
+ $public_level |= 0x40;
+ }
+ else {
+ $public_level &= ~0x40;
+ }
+
$self->users->set_privacy(
uid => $user->{id},
level => $public_level
@@ -281,6 +288,8 @@ sub privacy {
: $public_level & 0x20 ? 'extern'
: 'private'
);
+ $self->param(
+ history_age => $public_level & 0x40 ? 'infinite' : 'month' );
$self->render( 'privacy', name => $user->{name} );
}
}
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index 33b3118..24edaa3 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -160,12 +160,32 @@ sub public_profile {
)
{
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(
'profile',
name => $name,
uid => $user->{id},
public_level => $user->{public_level},
journey => $status,
+ journeys => [@journeys],
version => $self->app->config->{version} // 'UNKNOWN',
);
}
@@ -207,12 +227,22 @@ sub public_journey_details {
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) {
my $map_data = $self->journeys_to_map_data(
journeys => [$journey],
include_manual => 1,
);
- if ( $journey->{user_data}{comment} ) {
+ if ( $journey->{user_data}{comment}
+ and not $user->{public_level} & 0x04 )
+ {
delete $journey->{user_data}{comment};
}
$self->render(
@@ -226,7 +256,7 @@ sub public_journey_details {
);
}
else {
- $self->render( 'not_found', );
+ $self->render('not_found');
}
}
else {
diff --git a/templates/account.html.ep b/templates/account.html.ep
index 7bc725f..9b049a3 100644
--- a/templates/account.html.ep
+++ b/templates/account.html.ep
@@ -72,17 +72,23 @@
% elsif ($acc->{is_public} & 0x02) {
Aktueller Status
% }
- % if ($acc->{is_public} & 0x04) {
- mit Kommentar
- % }
% if ($acc->{is_public} & 0x0f and $acc->{is_public} & 0xf0) {
<br/>
% }
- % if ($acc->{is_public} & 0x10) {
- Vergangene Fahrten (nur mit Anmeldung)
+ % if ($acc->{is_public} & 0x30) {
+ % 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) {
- Vergangene Fahrten
+ % if ($acc->{is_public} & 0x04) {
+ <br/>
+ Kommentare
% }
</td>
</tr>
diff --git a/templates/privacy.html.ep b/templates/privacy.html.ep
index 98dc068..b5f3bb3 100644
--- a/templates/privacy.html.ep
+++ b/templates/privacy.html.ep
@@ -12,26 +12,22 @@
<h2>Aktueller Status</h2>
<div class="row">
<div class="input-field col s12">
+ <div>
<label>
%= radio_button status_level => 'private'
<span>Nicht sichtbar</span>
</label>
- </div>
- </div>
- <div class="row">
- <div class="input-field col s12">
+ </div><div>
<label>
%= radio_button status_level => 'intern'
<span>Nur mit Anmeldung</span>
</label>
- </div>
- </div>
- <div class="row">
- <div class="input-field col s12">
+ </div><div>
<label>
%= radio_button status_level => 'extern'
<span>Öffentlich</span>
</label>
+ </div>
</div>
</div>
<div class="row">
@@ -39,63 +35,72 @@
Hier kannst du auswählen, ob dein aktueller Status unter <a
href="/status/<%= $name %>">/status/<%= $name %></a> sowie <a
href="/p/<%= $name %>">/p/<%= $name %></a> abrufbar ist.
- Wenn du eingecheckt bist, werden dort Zug, Start- und Zielstation,
- Abfahrts- und Ankunftszeit gezeigt; andernfalls lediglich der
+ Wenn du eingecheckt bist, werden dort Zug, Start- und Zielstation
+ sowie Abfahrts- und Ankunftszeit gezeigt, andernfalls lediglich der
Zielbahnhof der letzten Reise. Wann die letzte Reise beendet wurde,
wird nur angegeben, wenn deine vergangenen Zugfahrten sichtbar sind
(siehe unten).
</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>
<div class="row">
- <div class="input-field col s12">
+ <div class="input-field col s12 m6 l6">
+ <div>
<label>
%= radio_button history_level => 'private'
<span>Nicht sichtbar</span>
</label>
- </div>
- </div>
- <div class="row">
- <div class="input-field col s12">
+ </div><div>
<label>
%= radio_button history_level => 'intern'
<span>Nur mit Anmeldung</span>
</label>
- </div>
- </div>
- <div class="row">
- <div class="input-field col s12">
+ </div><div>
<label>
%= radio_button history_level => 'extern'
<span>Öffentlich</span>
</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 class="row">
<div class="col s12">
Diese Einstellung bestimmt die Sichtbarkeit deiner vergangenen
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,
- ältere Fahrten sind jedoch weiterhin über /p/<%= $name %>/j/ID
- zugänglich. Da die ID (mit Lücken) aufsteigend vergeben wird, sind
- effektiv alle deiner vergangenen Fahrten öffentlich.
+ dort nicht eingetragene Fahrten sind jedoch weiterhin über /p/<%=
+ $name %>/j/ID zugänglich. Da die ID (mit Lücken) aufsteigend vergeben
+ 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 class="row">
diff --git a/templates/profile.html.ep b/templates/profile.html.ep
index 1755303..6a8d67d 100644
--- a/templates/profile.html.ep
+++ b/templates/profile.html.ep
@@ -23,7 +23,7 @@
<h2>Letzte Fahrten von <%= $name %></h1>
</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')