diff options
Diffstat (limited to 'lib/Travelynx')
| -rw-r--r-- | lib/Travelynx/Command/database.pm | 14 | ||||
| -rw-r--r-- | lib/Travelynx/Controller/Account.pm | 23 | ||||
| -rw-r--r-- | lib/Travelynx/Model/Users.pm | 43 | 
3 files changed, 74 insertions, 6 deletions
| diff --git a/lib/Travelynx/Command/database.pm b/lib/Travelynx/Command/database.pm index e84cf54..32522be 100644 --- a/lib/Travelynx/Command/database.pm +++ b/lib/Travelynx/Command/database.pm @@ -1069,6 +1069,20 @@ my @migrations = (  			}  		);  	}, + +	# v24 -> v25 +	# travelynx 1.23 adds optional links to external services, e.g. +	# DBF or marudor.de departure boards +	sub { +		my ($db) = @_; +		$db->query( +			qq{ +				alter table users add column external_services smallint; +				comment on column users.external_services is 'Which external service to use for stationboard or routing links'; +				update schema_version set version = 25; +			} +		); +	},  );  sub setup_db { diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm index 97ea8ad..f4f05d9 100644 --- a/lib/Travelynx/Controller/Account.pm +++ b/lib/Travelynx/Controller/Account.pm @@ -375,6 +375,29 @@ sub insight {  } +sub services { +	my ($self) = @_; +	my $user = $self->current_user; + +	if ( $self->param('action') and $self->param('action') eq 'save' ) { +		my $sb    = $self->param('stationboard'); +		my $value = 0; +		if ( $sb =~ m{ ^ \d+ $ }x and $sb >= 0 and $sb <= 3 ) { +			$value = int($sb); +		} +		$self->users->use_external_services( +			uid => $user->{id}, +			set => $value +		); +		$self->flash( success => 'external' ); +		$self->redirect_to('account'); +	} + +	$self->param( stationboard => +		  $self->users->use_external_services( uid => $user->{id} ) ); +	$self->render('use_external_links'); +} +  sub webhook {  	my ($self) = @_; diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm index 3d19831..061bb33 100644 --- a/lib/Travelynx/Model/Users.pm +++ b/lib/Travelynx/Model/Users.pm @@ -10,6 +10,13 @@ use 5.020;  use DateTime; +my @sb_templates = ( +	undef, +	[ 'DBF',        'https://dbf.finalrewind.org/{name}' ], +	[ 'marudor.de', 'https://marudor.de/{name}' ], +	[ 'NVM',        'https://nvm.finalrewind.org/board/{eva}' ], +); +  sub new {  	my ( $class, %opt ) = @_; @@ -286,7 +293,7 @@ sub get_data {  	my $user = $db->select(  		'users', -		'id, name, status, public_level, email, ' +		'id, name, status, public_level, email, external_services, '  		  . 'extract(epoch from registered_at) as registered_at_ts, '  		  . 'extract(epoch from last_seen) as last_seen_ts, '  		  . 'extract(epoch from deletion_requested) as deletion_requested_ts', @@ -294,11 +301,17 @@ sub get_data {  	)->hash;  	if ($user) {  		return { -			id            => $user->{id}, -			name          => $user->{name}, -			status        => $user->{status}, -			is_public     => $user->{public_level}, -			email         => $user->{email}, +			id        => $user->{id}, +			name      => $user->{name}, +			status    => $user->{status}, +			is_public => $user->{public_level}, +			email     => $user->{email}, +			sb_name   => $user->{external_services} +			? $sb_templates[ $user->{external_services} & 0x07 ][0] +			: undef, +			sb_template => $user->{external_services} +			? $sb_templates[ $user->{external_services} & 0x07 ][1] +			: undef,  			registered_at => DateTime->from_epoch(  				epoch     => $user->{registered_at_ts},  				time_zone => 'Europe/Berlin' @@ -478,6 +491,24 @@ sub use_history {  	}  } +sub use_external_services { +	my ( $self, %opt ) = @_; +	my $db    = $opt{db} // $self->{pg}->db; +	my $uid   = $opt{uid}; +	my $value = $opt{set}; + +	if ($value) { +		if ( $value < 0 or $value > 3 ) { +			$value = 0; +		} +		$db->update( 'users', { external_services => $value }, { id => $uid } ); +	} +	else { +		return $db->select( 'users', ['external_services'], { id => $uid } ) +		  ->hash->{external_services}; +	} +} +  sub get_webhook {  	my ( $self, %opt ) = @_;  	my $db  = $opt{db} // $self->{pg}->db; | 
