Unverified Commit 57ef3f3c authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

add sorted-history view (experimental, not exposed by link yet)

parent 880f5ae7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3238,6 +3238,7 @@ sub startup {
	$authed_r->get('/history')->to('traveling#history');
	$authed_r->get('/history/commute')->to('traveling#commute');
	$authed_r->get('/history/map')->to('traveling#map_history');
	$authed_r->get('/history/sorted')->to('traveling#sorted_history');
	$authed_r->get('/history/:year')->to('traveling#yearly_history');
	$authed_r->get('/history/:year/review')->to('traveling#year_in_review');
	$authed_r->get('/history/:year/:month')->to('traveling#monthly_history');
+38 −0
Original line number Diff line number Diff line
@@ -1418,6 +1418,44 @@ sub map_history {
	);
}

sub sorted_history {
	my ($self) = @_;

	my $sort_by    = $self->param('sort_by')    || 'delay_arr';
	my $sort_order = $self->param('sort_order') || 'desc';

	my @journeys = $self->journeys->get(
		uid           => $self->current_user->{id},
		with_datetime => 1,
		verbose       => ( $sort_by =~ m{_duration} ? 1 : 0 ),
	);

	my $key = 'delay_arr';
	if ( $sort_by
		=~ m{ ^ (?: delay_arr | delay_dep | sched_duration | rt_duration ) $ }x
	  )
	{
		$key = $sort_by;
	}

	if ( $key =~ m{ _duration }x ) {
		@journeys = grep { defined $_->{$key} } @journeys;
	}

	my $sort_lambda = sub { $a->{$key} <=> $b->{$key} };
	if ( $sort_order eq 'desc' ) {
		$sort_lambda = sub { $b->{$key} <=> $a->{$key} };
	}

	@journeys = sort { &$sort_lambda } @journeys;

	$self->render(
		template => 'sorted_history',
		journeys => \@journeys,
		sort_key => $key,
	);
}

sub json_history {
	my ($self) = @_;

+92 −0
Original line number Diff line number Diff line
<h1>High Scores</h1>

%= form_for '/history/sorted' => begin
	<div class="row">
		<div class="input-field col s12 m12 l6">
			<div>
				<label>
					%= radio_button sort_by => 'delay_arr'
					<span>Verspätung bei Abfahrt</span>
				</label>
			</div>
			<div>
				<label>
					%= radio_button sort_by => 'delay_dep'
					<span>Verspätung bei Ankunft</span>
				</label>
			</div>
			<div>
				<label>
					%= radio_button sort_by => 'sched_duration'
					<span>Geplante Dauer</span>
				</label>
			</div>
			<div>
				<label>
					%= radio_button sort_by => 'rt_duration'
					<span>Tatsächliche Dauer</span>
				</label>
			</div>
		</div>
		<div class="input-field col s12 m12 l6">
			<div>
				<label>
					%= radio_button sort_order => 'desc'
					<span>Absteigend</span>
				</label>
			</div>
			<div>
				<label>
					%= radio_button sort_order => 'asc'
					<span>Aufsteigend</span>
				</label>
			</div>
	</div>
	<div class="row">
		<div class="col s12 m12 l12 center-align">
			<button class="btn waves-effect waves-light" type="submit" name="action" value="show">
				<i class="material-icons left" aria-hidden="true">send</i>
				Anzeigen
			</button>
		</div>
	</div>
%= end

<div class="row">
	<div class="col s12">
		<table class="striped">
			<thead>
				<tr>
					<th>Datum</th>
					<th>Fahrt</th>
					% if ($sort_key =~ m{delay_}) {
						<th>Verspätung</th>
					% }
					% else {
						<th></th>
					% }
				</tr>
			</thead>
			<tbody>
				% for my $journey (@{$journeys}) {
					% my $detail_link = '/journey/' . $journey->{id};
					<tr>
						<td><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></td>
						<td><a href="<%= $detail_link %>">
							<%= $journey->{type} %> <%= $journey->{line} // $journey->{no} %>
							→ <%= $journey->{to_name} %>
						</a></td>
						<td>
							% if ($sort_key =~ m{delay_}) {
								%= sprintf('%+d',  $journey->{$sort_key} / 60)
							% }
							% elsif ($sort_key =~ m{_duration}) {
								%= sprintf('%02d:%02d',  $journey->{$sort_key} / 3600, ($journey->{$sort_key} % 3600) / 60)
							% }
						</td>
					</tr>
				% }
			</tbody>
		</table>
	</div>
</div>