summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-12-08 11:06:17 +0100
committerDaniel Friesel <derf@finalrewind.org>2019-12-08 11:06:17 +0100
commit561ff4574bb6078ce4c9f72647a9c3d1a92cac6e (patch)
tree1402b28d03434d2c59207f31e2d192b044797bac
parent402a5597f5d095b059e8ee1a4a8b653c3187ff93 (diff)
Allow status visibility to be limited to travelynx users
-rw-r--r--lib/Travelynx/Controller/Account.pm18
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm19
-rw-r--r--templates/account.html.ep7
-rw-r--r--templates/privacy.html.ep35
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>