diff options
author | Daniel Friesel <derf@finalrewind.org> | 2019-12-08 11:06:17 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2019-12-08 11:06:17 +0100 |
commit | 561ff4574bb6078ce4c9f72647a9c3d1a92cac6e (patch) | |
tree | 1402b28d03434d2c59207f31e2d192b044797bac | |
parent | 402a5597f5d095b059e8ee1a4a8b653c3187ff93 (diff) |
Allow status visibility to be limited to travelynx users
-rw-r--r-- | lib/Travelynx/Controller/Account.pm | 18 | ||||
-rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 19 | ||||
-rw-r--r-- | templates/account.html.ep | 7 | ||||
-rw-r--r-- | templates/privacy.html.ep | 35 |
4 files changed, 62 insertions, 17 deletions
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm index 39335b9..cef79a5 100644 --- a/lib/Travelynx/Controller/Account.pm +++ b/lib/Travelynx/Controller/Account.pm @@ -215,15 +215,21 @@ sub privacy { my $public_level = $user->{is_public}; if ( $self->param('action') and $self->param('action') eq 'save' ) { - if ( $self->param('public_status') ) { + if ( $self->param('status_level') eq 'intern' ) { + $public_level |= 0x01; + $public_level &= ~0x02; + } + elsif ( $self->param('status_level') eq 'extern' ) { $public_level |= 0x02; + $public_level &= ~0x01; } else { - $public_level &= ~0x02; + $public_level &= ~0x03; } # public comment with non-public status does not make sense - if ( $self->param('public_comment') and $self->param('public_status') ) + if ( $self->param('public_comment') + and $self->param('status_level') ne 'private' ) { $public_level |= 0x04; } @@ -236,7 +242,11 @@ sub privacy { $self->redirect_to('account'); } else { - $self->param( public_status => $public_level & 0x02 ? 1 : 0 ); + $self->param( + status_level => $public_level & 0x01 ? 'intern' + : $public_level & 0x02 ? 'extern' + : 'private' + ); $self->param( public_comment => $public_level & 0x04 ? 1 : 0 ); $self->render( 'privacy', name => $user->{name} ); } diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 3f8f37e..7b48d28 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -35,7 +35,13 @@ sub user_status { my $ts = $self->stash('ts'); my $user = $self->get_privacy_by_name($name); - if ( $user and ( $user->{public_level} & 0x02 ) ) { + if ( + $user + and ( $user->{public_level} & 0x02 + or + ( $user->{public_level} & 0x01 and $self->is_user_authenticated ) ) + ) + { my $status = $self->get_user_status( $user->{id} ); my %tw_data = ( @@ -81,6 +87,9 @@ sub user_status { twitter => \%tw_data, ); } + elsif ( $user->{public_level} & 0x01 ) { + $self->render( 'login', redirect_to => $self->req->url ); + } else { $self->render('not_found'); } @@ -94,7 +103,13 @@ sub public_status_card { delete $self->stash->{layout}; - if ( $user and ( $user->{public_level} & 0x02 ) ) { + if ( + $user + and ( $user->{public_level} & 0x02 + or + ( $user->{public_level} & 0x01 and $self->is_user_authenticated ) ) + ) + { my $status = $self->get_user_status( $user->{id} ); $self->render( '_public_status_card', diff --git a/templates/account.html.ep b/templates/account.html.ep index 169a760..b3ec52a 100644 --- a/templates/account.html.ep +++ b/templates/account.html.ep @@ -66,10 +66,13 @@ % if ($acc->{is_public} == 0) { <span style="color: #999999;">Keine</span> % } - % if ($acc->{is_public} & 0x02) { + % if ($acc->{is_public} & 0x01) { + Aktueller Status (nur für angemeldete Accounts) + % } + % elsif ($acc->{is_public} & 0x02) { Aktueller Status % } - % if (($acc->{is_public} & 0x06) == 0x06) { + % if ($acc->{is_public} & 0x04) { mit Kommentar % } </td> diff --git a/templates/privacy.html.ep b/templates/privacy.html.ep index b16ee44..e8e6459 100644 --- a/templates/privacy.html.ep +++ b/templates/privacy.html.ep @@ -7,31 +7,48 @@ kennen. </div> </div> -<h2>Öffentliche Daten:</h2> %= form_for '/account/privacy' => (method => 'POST') => begin +<h2>Aktueller Status</h2> %= csrf_field <div class="row"> <div class="input-field col s12"> <label> - %= check_box public_status => 1 - <span>Aktueller Status</span> + %= radio_button status_level => 'private' + <span>Nicht sichtbar</span> + </label> + </div> + </div> + <div class="row"> + <div class="input-field col s12"> + <label> + %= radio_button status_level => 'intern' + <span>Nur für angemeldete Accounts</span> + </label> + </div> + </div> + <div class="row"> + <div class="input-field col s12"> + <label> + %= radio_button status_level => 'extern' + <span>Öffentlich</span> </label> </div> </div> <div class="row"> <div class="col s12"> - Wenn aktiv, ist dein aktueller Status unter <a href="/status/<%= $name - %>">/status/<%= $name %></a> abrufbar. Wenn du eingecheckt bist, - werden dort Zug, Start- und Zielstation, Abfahrts- und Ankunftszeit - gezeigt; andernfalls lediglich der Zielbahnhof der letzten Reise. - Wann die letzte Reise beendet wurde, wird bewusst nicht angegeben. + Hier kannst du auswählen, ob dein aktueller Status unter <a + href="/status/<%= $name %>">/status/<%= $name %></a> abrufbar ist. + Wenn du eingecheckt bist, werden dort Zug, Start- und Zielstation, + Abfahrts- und Ankunftszeit gezeigt; andernfalls lediglich der + Zielbahnhof der letzten Reise. Wann die letzte Reise beendet wurde, + wird bewusst nicht angegeben. </div> </div> <div class="row"> <div class="input-field col s12"> <label> %= check_box public_comment => 1 - <span>Checkin-Kommentar</span> + <span>Mit Kommentar</span> </label> </div> </div> |