diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2023-02-15 20:01:43 +0100 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2023-02-15 20:01:43 +0100 | 
| commit | 978c7b03c2a333eb48b9d223c3a010a35211d1ac (patch) | |
| tree | 058e0158dbc9f23f2ae21d2a2f8b76d8239a4ffe | |
| parent | 1e1c71cfd876b75ead06b019eabe41a01d0eb972 (diff) | |
journey: add share button
| -rwxr-xr-x | lib/Travelynx.pm | 3 | ||||
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 39 | ||||
| -rw-r--r-- | templates/journey.html.ep | 14 | 
3 files changed, 51 insertions, 5 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index c4f6bca..9a9617d 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -2155,7 +2155,8 @@ sub startup {  	$r->get('/ajax/status/#name')->to('traveling#public_status_card');  	$r->get('/ajax/status/:name/:ts')->to('traveling#public_status_card');  	$r->get('/p/:name')->to('traveling#public_profile'); -	$r->get('/p/:name/j/:id')->to('traveling#public_journey_details'); +	$r->get( '/p/:name/j/:id' => 'public_journey' ) +	  ->to('traveling#public_journey_details');  	$r->get('/.well-known/webfinger')->to('account#webfinger');  	$r->post('/api/v1/import')->to('api#import_v1');  	$r->post('/api/v1/travel')->to('api#travel_v1'); diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 80758f3..dd247f3 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -1677,7 +1677,8 @@ sub journey_details {  	my ($self) = @_;  	my $journey_id = $self->stash('id'); -	my $uid = $self->current_user->{id}; +	my $user = $self->current_user; +	my $uid  = $user->{id};  	$self->param( journey_id => $journey_id ); @@ -1704,11 +1705,41 @@ sub journey_details {  			journeys       => [$journey],  			include_manual => 1,  		); +		my $share_text; +		my $with_share = $user->{is_public} & 0x40 ? 1 : 0; +		if ( not $with_share and $user->{is_public} & 0x20 ) { +			my $month_ago = DateTime->now( time_zone => 'Europe/Berlin' ) +			  ->subtract( weeks => 4 )->epoch; +			$with_share = $journey->{rt_dep_ts} > $month_ago ? 1 : 0; +		} + +		if ($with_share) { +			my $delay = 'pünktlich '; +			if ( $journey->{rt_arrival} != $journey->{sched_arrival} ) { +				$delay = sprintf( +					'mit %+d ', +					( +						    $journey->{rt_arrival}->epoch +						  - $journey->{sched_arrival}->epoch +					) / 60 +				); +			} +			$share_text +			  = $journey->{km_route} +			  ? sprintf( '%.0f km', $journey->{km_route} ) +			  : 'Fahrt'; +			$share_text .= sprintf( ' mit %s %s – Ankunft %sum %s', +				$journey->{type}, $journey->{no}, +				$delay,           $journey->{rt_arrival}->strftime('%H:%M') ); +		} +  		$self->render(  			'journey', -			error    => undef, -			journey  => $journey, -			with_map => 1, +			error      => undef, +			journey    => $journey, +			with_map   => 1, +			with_share => $with_share, +			share_text => $share_text,  			%{$map_data},  		);  	} diff --git a/templates/journey.html.ep b/templates/journey.html.ep index a5e04a0..50dcb3e 100644 --- a/templates/journey.html.ep +++ b/templates/journey.html.ep @@ -230,6 +230,20 @@  		%= include '_map', station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups')  	% }  	% if (not stash('readonly')) { +		% if (stash('with_share')) { +			<div class="row"> +				<div class="col s12 m6 l6"> +				</div> +				<div class="col s12 m6 l6 center-align"> +					<a class="btn waves-effect waves-light action-share" +						data-url="<%= url_for('public_journey', name => current_user()->{name}, id => $journey->{id} )->to_abs->scheme('https'); %>" +						data-text="<%= stash('share_text') %>" +						> +						<i class="material-icons left" aria-hidden="true">share</i> Teilen +					</a> +				</div> +			</div> +		% }  		<div class="row hide-on-small-only">  			<div class="col s12 m6 l6 center-align">  				<a class="waves-effect waves-light red btn action-delete" | 
