diff options
| -rw-r--r-- | lib/Travelynx/Command/database.pm | 104 | ||||
| -rw-r--r-- | lib/Travelynx/Model/InTransit.pm | 12 | ||||
| -rwxr-xr-x | lib/Travelynx/Model/Journeys.pm | 6 | ||||
| -rw-r--r-- | templates/journey.html.ep | 7 | 
4 files changed, 128 insertions, 1 deletions
| diff --git a/lib/Travelynx/Command/database.pm b/lib/Travelynx/Command/database.pm index d13b2a7..1a56b63 100644 --- a/lib/Travelynx/Command/database.pm +++ b/lib/Travelynx/Command/database.pm @@ -1946,6 +1946,110 @@ my @migrations = (  			}  		);  	}, + +	# v51 -> v52 +	# Explicitly encode backend type; preparation for multiple hAFAS backends +	sub { +		my ($db) = @_; +		$db->query( +			qq{ +				create table backends ( +					id smallserial not null primary key, +					iris bool not null, +					hafas bool not null, +					efa bool not null, +					ris bool not null, +					name varchar(32) not null, +					unique (iris, hafas, efa, ris, name) +				); +				insert into backends (id, iris, hafas, efa, ris, name) values (0, true, false, false, false, ''); +				insert into backends (id, iris, hafas, efa, ris, name) values (1, false, true, false, false, 'DB'); +				alter sequence backends_id_seq restart with 2; +				alter table in_transit add column backend_id smallint references backends (id); +				alter table journeys add column backend_id smallint references backends (id); +				update in_transit set backend_id = 0 where train_id not like '%|%'; +				update journeys set backend_id = 0 where train_id not like '%|%'; +				update in_transit set backend_id = 1 where train_id like '%|%'; +				update journeys set backend_id = 1 where train_id like '%|%'; +				update journeys set backend_id = 1 where train_id = 'manual'; +				alter table in_transit alter column backend_id set not null; +				alter table journeys alter column backend_id set not null; + +				drop view in_transit_str; +				drop view journeys_str; +				create view in_transit_str as select +					user_id, +					backend.iris as is_iris, backend.hafas as is_hafas, +					backend.efa as is_efa, backend.ris as is_ris, +					backend.name as backend_name, +					train_type, train_line, train_no, train_id, +					extract(epoch from checkin_time) as checkin_ts, +					extract(epoch from sched_departure) as sched_dep_ts, +					extract(epoch from real_departure) as real_dep_ts, +					checkin_station_id as dep_eva, +					dep_station.ds100 as dep_ds100, +					dep_station.name as dep_name, +					dep_station.lat as dep_lat, +					dep_station.lon as dep_lon, +					extract(epoch from checkout_time) as checkout_ts, +					extract(epoch from sched_arrival) as sched_arr_ts, +					extract(epoch from real_arrival) as real_arr_ts, +					checkout_station_id as arr_eva, +					arr_station.ds100 as arr_ds100, +					arr_station.name as arr_name, +					arr_station.lat as arr_lat, +					arr_station.lon as arr_lon, +					polyline_id, +					polylines.polyline as polyline, +					visibility, +					coalesce(visibility, users.public_level & 127) as effective_visibility, +					cancelled, route, messages, user_data, +					dep_platform, arr_platform, data +					from in_transit +					left join polylines on polylines.id = polyline_id +					left join users on users.id = user_id +					left join stations as dep_station on checkin_station_id = dep_station.eva +					left join stations as arr_station on checkout_station_id = arr_station.eva +					left join backends as backend on backend_id = backend.id +					; +				create view journeys_str as select +					journeys.id as journey_id, user_id, +					backend.iris as is_iris, backend.hafas as is_hafas, +					backend.efa as is_efa, backend.ris as is_ris, +					backend.name as backend_name, +					train_type, train_line, train_no, train_id, +					extract(epoch from checkin_time) as checkin_ts, +					extract(epoch from sched_departure) as sched_dep_ts, +					extract(epoch from real_departure) as real_dep_ts, +					checkin_station_id as dep_eva, +					dep_station.ds100 as dep_ds100, +					dep_station.name as dep_name, +					dep_station.lat as dep_lat, +					dep_station.lon as dep_lon, +					extract(epoch from checkout_time) as checkout_ts, +					extract(epoch from sched_arrival) as sched_arr_ts, +					extract(epoch from real_arrival) as real_arr_ts, +					checkout_station_id as arr_eva, +					arr_station.ds100 as arr_ds100, +					arr_station.name as arr_name, +					arr_station.lat as arr_lat, +					arr_station.lon as arr_lon, +					polylines.polyline as polyline, +					visibility, +					coalesce(visibility, users.public_level & 127) as effective_visibility, +					cancelled, edited, route, messages, user_data, +					dep_platform, arr_platform +					from journeys +					left join polylines on polylines.id = polyline_id +					left join users on users.id = user_id +					left join stations as dep_station on checkin_station_id = dep_station.eva +					left join stations as arr_station on checkout_station_id = arr_station.eva +					left join backends as backend on backend_id = backend.id +					; +				update schema_version set version = 52; +			} +		); +	}  );  sub sync_stations { diff --git a/lib/Travelynx/Model/InTransit.pm b/lib/Travelynx/Model/InTransit.pm index 0d548c3..09f682f 100644 --- a/lib/Travelynx/Model/InTransit.pm +++ b/lib/Travelynx/Model/InTransit.pm @@ -102,6 +102,8 @@ sub add {  	my $json = JSON->new;  	if ($train) { +		my $backend_id +		  = $db->select( 'backends', ['id'], { iris => 1 } )->hash->{id};  		$db->insert(  			'in_transit',  			{ @@ -127,10 +129,19 @@ sub add {  						: 0  					}  				), +				backend_id => $backend_id,  			}  		);  	}  	elsif ( $journey and $stop ) { +		my $backend_id = $db->select( +			'backends', +			['id'], +			{ +				hafas => 1, +				name  => 'DB' +			} +		)->hash->{id};  		my @route;  		my $product = $journey->product_at( $stop->loc->eva )  		  // $journey->product; @@ -173,6 +184,7 @@ sub add {  				real_departure  => $stop->{rt_dep} // $stop->{sched_dep},  				route           => $json->encode( \@route ),  				data => JSON->new->encode( { rt => $stop->{rt_dep} ? 1 : 0 } ), +				backend_id => $backend_id,  			}  		);  	} diff --git a/lib/Travelynx/Model/Journeys.pm b/lib/Travelynx/Model/Journeys.pm index 97c4681..280922b 100755 --- a/lib/Travelynx/Model/Journeys.pm +++ b/lib/Travelynx/Model/Journeys.pm @@ -218,6 +218,7 @@ sub add {  		edited              => 0x3fff,  		cancelled           => $opt{cancelled} ? 1 : 0,  		route               => JSON->new->encode( \@route ), +		backend_id          => 1,  	};  	if ( $opt{comment} ) { @@ -515,7 +516,7 @@ sub get {  	my @select  	  = ( -		qw(journey_id train_type train_line train_no checkin_ts sched_dep_ts real_dep_ts dep_eva dep_ds100 dep_name dep_lat dep_lon checkout_ts sched_arr_ts real_arr_ts arr_eva arr_ds100 arr_name arr_lat arr_lon cancelled edited route messages user_data visibility effective_visibility) +		qw(journey_id is_iris is_hafas backend_name train_type train_line train_no checkin_ts sched_dep_ts real_dep_ts dep_eva dep_ds100 dep_name dep_lat dep_lon checkout_ts sched_arr_ts real_arr_ts arr_eva arr_ds100 arr_name arr_lat arr_lon cancelled edited route messages user_data visibility effective_visibility)  	  );  	my %where = (  		user_id   => $uid, @@ -573,6 +574,9 @@ sub get {  		my $ref = {  			id                   => $entry->{journey_id}, +			is_iris              => $entry->{is_iris}, +			is_hafas             => $entry->{is_hafas}, +			backend_name         => $entry->{backend_name},  			type                 => $entry->{train_type},  			line                 => $entry->{train_line},  			no                   => $entry->{train_no}, diff --git a/templates/journey.html.ep b/templates/journey.html.ep index f5eebfc..fc2b56d 100644 --- a/templates/journey.html.ep +++ b/templates/journey.html.ep @@ -261,6 +261,13 @@  	% if (stash('polyline_groups')) {  		%= include '_map', station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups')  	% } +	<div class="row"> +		<div class="col s12"> +			Backend: +			<i class="material-icons tiny" aria-hidden="true"><%= $journey->{is_iris} ? 'train' : 'directions' %></i> +			%= $journey->{backend_name} || 'IRIS' +		</div> +	</div>  	% if (not stash('readonly')) {  		% if (stash('with_share')) {  			<div class="row"> | 
