summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-03-03 22:35:20 +0100
committerDaniel Friesel <derf@finalrewind.org>2019-03-03 22:35:20 +0100
commit40fe8db0c4dd2eb1208cdc6bdfb2868c84def489 (patch)
tree22c87a1be18acc011577c66b949b1a36c962e44a
parent41076aafd5f3590490b64816116d7803d4744ff9 (diff)
Add account info and data export
-rwxr-xr-xindex.pl54
-rw-r--r--templates/account.html.ep27
-rw-r--r--templates/layouts/default.html.ep1
3 files changed, 82 insertions, 0 deletions
diff --git a/index.pl b/index.pl
index 3f070ff..71ecd92 100755
--- a/index.pl
+++ b/index.pl
@@ -34,6 +34,8 @@ my %action_type = (
undo => 3,
);
+my @action_types = (qw(checkin checkout undo));
+
app->plugin(
authentication => {
autoload_user => 1,
@@ -754,6 +756,58 @@ post '/action' => sub {
}
};
+get '/a/account' => sub {
+ my ($self) = @_;
+
+ $self->render('account');
+};
+
+get '/a/export.json' => sub {
+ my ($self) = @_;
+ my $uid = $self->get_user_id;
+ my $query = $self->app->get_all_actions_query;
+
+ $query->execute($uid);
+
+ my @entries;
+
+ while ( my @row = $query->fetchrow_array ) {
+ my (
+ $action, $raw_ts, $ds100, $name,
+ $train_type, $train_line, $train_no, $train_id,
+ $raw_sched_ts, $raw_real_ts, $raw_route, $raw_messages
+ ) = @row;
+
+ $name = decode( 'UTF-8', $name );
+ $raw_route = decode( 'UTF-8', $raw_route );
+ $raw_messages = decode( 'UTF-8', $raw_messages );
+ push(
+ @entries,
+ {
+ action => $action_types[ $action - 1 ],
+ action_ts => $raw_ts,
+ station_ds100 => $ds100,
+ station_name => $name,
+ train_type => $train_type,
+ train_line => $train_line,
+ train_no => $train_no,
+ train_id => $train_id,
+ scheduled_ts => $raw_sched_ts,
+ realtime_ts => $raw_real_ts,
+ messages => $raw_messages
+ ? [ map { [ split(qr{:}) ] } split( qr{[|]}, $raw_messages ) ]
+ : undef,
+ route => $raw_route ? [ split( qr{[|]}, $raw_route ) ]
+ : undef,
+ }
+ );
+ }
+
+ $self->render(
+ json => [@entries],
+ );
+};
+
get '/a/history' => sub {
my ($self) = @_;
diff --git a/templates/account.html.ep b/templates/account.html.ep
new file mode 100644
index 0000000..e734ee0
--- /dev/null
+++ b/templates/account.html.ep
@@ -0,0 +1,27 @@
+<h1>Account</h1>
+<div class="row">
+ <table class="striped">
+ <tr>
+ <th scope="row">Name</th>
+ <td><%= get_user_name() %></td>
+ </tr>
+ <tr>
+ <th scope="row">Mail</th>
+ <td>fnord@example.org</td>
+ </tr>
+ <tr>
+ <th scope="row">Registriert am</th>
+ <td>01.01.1970 00:00</td>
+ </tr>
+ </table>
+</div>
+
+<h1>Export</h1>
+
+<div class="row">
+ <div class="col s12">
+ <ul>
+ <li><a href="/a/export.json">Rohdaten</a> (Kein API-Ersatz, das Format kann sich jederzeit ändern)</li>
+ </ul>
+ </div>
+</div>
diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep
index ffbb5ef..264928a 100644
--- a/templates/layouts/default.html.ep
+++ b/templates/layouts/default.html.ep
@@ -22,6 +22,7 @@
<a href="/" class="brand-logo left">travelynx</a>
<ul id="nav-mobile" class="right">
<li class="<%= navbar_class('/a/history') %>"><a href='/a/history' title="History"><i class="material-icons">history</i></a></li>
+ <li class="<%= navbar_class('/a/account') %>"><a href="/a/account" title="Account"><i class="material-icons left">account_circle</i><%= get_user_name() %></a></li>
<li class="<%= navbar_class('/x/about') %>"><a href='/x/about' title="About"><i class="material-icons">info_outline</i></a></li>
</ul>
</div>