diff options
| -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> | 
