diff options
author | Daniel Friesel <derf@finalrewind.org> | 2020-09-04 18:38:35 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2020-09-04 18:38:35 +0200 |
commit | 7eb5f967f2d85ea3a7846353fbaf666e3a0e2bc5 (patch) | |
tree | 5072bd80f44589de6781a640d5d564f035c4ef33 | |
parent | 482fa975b5f50064deb57b651019908c17b71f47 (diff) |
profile: limit history to four weeks by default
-rw-r--r-- | lib/Travelynx/Controller/Account.pm | 9 | ||||
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 34 | ||||
-rw-r--r-- | templates/account.html.ep | 20 | ||||
-rw-r--r-- | templates/privacy.html.ep | 83 | ||||
-rw-r--r-- | templates/profile.html.ep | 2 |
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') |