Commit d75351b3 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Use POST requests to modify data

parent 31986892
Loading
Loading
Loading
Loading
+53 −30
Original line number Diff line number Diff line
@@ -181,6 +181,10 @@ app->attr(
sub epoch_to_dt {
	my ($epoch) = @_;

	# Bugs (and user errors) may lead to undefined timestamps. Set them to
	# 1970-01-01 to avoid crashing and show obviously wrong data instead.
	$epoch //= 0;

	return DateTime->from_epoch(
		epoch     => $epoch,
		time_zone => 'Europe/Berlin'
@@ -479,10 +483,7 @@ helper 'get_user_status' => sub {

	if ( @{$rows} ) {
		my $now = DateTime->now( time_zone => 'Europe/Berlin' );
		my $ts = DateTime->from_epoch(
			epoch     => $rows->[0][1],
			time_zone => 'Europe/Berlin'
		);
		my $ts = epoch_to_dt( $rows->[0][1] );
		my $checkin_station_name = $rows->[0][3];
		my @route = split( qr{[|]}, $rows->[0][8] // q{} );
		my @route_after;
@@ -529,41 +530,63 @@ get '/' => sub {
	$self->render('landingpage');
};

get '/a/checkin' => sub {
post '/action' => sub {
	my ($self) = @_;
	my $station  = $self->param('station');
	my $train_id = $self->param('train');
	my $params = $self->req->json;

	if ( not exists $params->{action} ) {
		$params = $self->req->params->to_hash;
	}

	if ( not $params->{action} ) {
		$self->render(
			json   => {},
			status => 400,
		);
		return;
	}

	my $station = $params->{station};

	my ( $train, $error ) = $self->checkin( $station, $train_id );
	if ( $params->{action} eq 'checkin' ) {

		my ( $train, $error )
		  = $self->checkin( $params->{station}, $params->{train}, );

		if ($error) {
			$self->render(
			'checkin',
				json => {
					success => 0,
					error   => $error,
			train => undef
				},
			);
		}
		else {
			$self->render(
			'checkin',
			error => undef,
			train => $train
				json => {
					success => 1,
				},
			);
		}
};

get '/a/checkout' => sub {
	my ($self)  = @_;
	my $station = $self->param('station');
	my $force   = $self->param('force');

	my $error = $self->checkout( $station, $force );
	}
	elsif ( $params->{action} eq 'checkout' ) {
		my $error = $self->checkout( $params->{station}, $params->{force}, );

		if ($error) {
		$self->render( 'checkout', error => $error );
			$self->render(
				json => {
					success => 0,
					error   => $error,
				},
			);
		}
		else {
		$self->redirect_to("/${station}");
			$self->render(
				json => {
					success => 1,
				},
			);
		}
	}
};

+26 −0
Original line number Diff line number Diff line
$(document).ready(function() {
	$('.action-checkin').click(function() {
		var link = $(this);
		req = {
			action: 'checkin',
			station: link.data('station'),
			train: link.data('train'),
		};
		link.replaceWith('<div class="progress"><div class="indeterminate"></div></div>');
		$.post('/action', req, function(data) {
			$(location).attr('href', '/');
		});
	});
	$('.action-checkout').click(function() {
		var link = $(this);
		req = {
			action: 'checkout',
			station: link.data('station'),
			force: link.data('force'),
		};
		link.replaceWith('<div class="progress"><div class="indeterminate"></div></div>');
		$.post('/action', req, function(data) {
			$(location).attr('href', '/' + req.station);
		});
	});
});

templates/checkin.html.ep

deleted100644 → 0
+0 −54
Original line number Diff line number Diff line
% if ($error) {
	<div class="row">
		<div class="col s12 m6">
			<div class="card red darken-4">
				<div class="card-content white-text">
					<span class="card-title">I am Error</span>
					<p><%= $error %></p>
				</div>
				<div class="card-action">
					% if (param('station')) {
						<a href="/<%= param('station') %>">Zurück zu den Abfahrten</a>
					% }
					% else {
						<a href="/">Zur Hauptseite</a>
					% }
			</div>
		</div>
	</div>
% }
% else {
	<div class="row">
		<div class="col s12">
			<div class="card green darken-4">
				<div class="card-content white-text">
					<span class="card-title">Eingecheckt in <%= $train->line %></span>
					<p>Abfahrt um <%= $train->sched_departure->strftime('%H:%M') %>
						% if ($train->departure_delay) {
							+<%= $train->departure_delay %>
						% }
					</p>
				</div>
			</div>
		</div>
	</div>
	<div class="row">
		<div class="col s12">
			Weitere Route:
		</div>
	</div>
	<div class="row">
		<div class="col s12">
			<table>
				<tbody>
					% for my $station ($train->route_post) {
						<tr>
							<td><%= $station %></td>
							<td><a href="/a/checkout?station=<%= $station %>">hier auschecken</a></td>
						</tr>
					% }
				</tbody>
			</table>
		</div>
	</div>
% }

templates/checkout.html.ep

deleted100644 → 0
+0 −31
Original line number Diff line number Diff line
% if ($error) {
	<div class="row">
		<div class="col s12 m6">
			<div class="card red darken-4">
				<div class="card-content white-text">
					<span class="card-title">I am Error</span>
					<p><%= $error %></p>
				</div>
				<div class="card-action">
					<a href="/a/checkout?station=<%= param('station') %>&amp;force=1">Ohne Echtzeitdaten auschecken</a>
					% if (param('station')) {
						<a href="/<%= param('station') %>">Zurück zu den Abfahrten</a>
					% }
					% else {
						<a href="/">Zur Hauptseite</a>
					% }
			</div>
		</div>
	</div>
% }
% else {
	<div class="row">
		<div class="col s12">
			<div class="card green darken-4">
				<div class="card-content white-text">
					<span class="card-title">Erfolgreich ausgecheckt</span>
				</div>
			</div>
		</div>
	</div>
% }
+5 −3
Original line number Diff line number Diff line
@@ -9,7 +9,9 @@
						ab <%= $status->{station_name} %></p>
				</div>
				<div class="card-action">
					<a href="/a/checkout?station=<%= $ds100 %>">Hier auschecken</a>
					<a class="action-checkout" data-station="<%= $ds100 %>">
						Hier auschecken
					</a>
				</div>
			</div>
		% }
@@ -28,12 +30,12 @@
			% for my $result (@{$results}) {
				<tr>
					<td>
						<a href="/a/checkin?station=<%= $ds100 %>&amp;train=<%= $result->train_id %>" title="Check In">
						<a class="action-checkin" data-station="<%= $ds100 %>" data-train="<%= $result->train_id %>">
							<%= $result->line %>
						</a>
					</td>
					<td>
						<a href="/a/checkin?station=<%= $ds100 %>&amp;train=<%= $result->train_id %>" title="Check In">
						<a class="action-checkin" data-station="<%= $ds100 %>" data-train="<%= $result->train_id %>">
							<%= $result->destination %>
						</a>
					</td>
Loading