summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-04-30 23:23:49 +0200
committerDaniel Friesel <derf@finalrewind.org>2019-04-30 23:23:49 +0200
commitf0d61a4083d677e115040357f4ee6eb40fb817f9 (patch)
tree560d072ebb8ff3e2bb2150b31f8a23ae28f469e9 /lib
parentddea9abc6e91d820668825e779faef3efb024665 (diff)
Prepare settings and templates for opt-in public travel status
Diffstat (limited to 'lib')
-rwxr-xr-xlib/Travelynx.pm35
-rw-r--r--lib/Travelynx/Controller/Account.pm22
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm38
3 files changed, 95 insertions, 0 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index b04526a..8760135 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -775,6 +775,38 @@ sub startup {
);
$self->helper(
+ 'get_privacy_by_name' => sub {
+ my ( $self, $name ) = @_;
+
+ my $res = $self->pg->db->select(
+ 'users',
+ [ 'id', 'public_level' ],
+ {
+ name => $name,
+ status => 1
+ }
+ );
+
+ if ( my $user = $res->hash ) {
+ return $user;
+ }
+ return;
+ }
+ );
+
+ $self->helper(
+ 'set_privacy' => sub {
+ my ( $self, $uid, $public_level ) = @_;
+
+ $self->pg->db->update(
+ 'users',
+ { public_level => $public_level },
+ { id => $uid }
+ );
+ }
+ );
+
+ $self->helper(
'mark_for_password_reset' => sub {
my ( $self, $db, $uid, $token ) = @_;
@@ -1696,6 +1728,7 @@ sub startup {
$r->get('/recover/:id/:token')->to('account#recover_password');
$r->get('/register')->to('account#registration_form');
$r->get('/reg/:id/:token')->to('account#verify');
+ $r->get('/status/:name')->to('traveling#user_status');
$r->post('/action')->to('traveling#log_action');
$r->post('/geolocation')->to('traveling#geolocation');
$r->post('/list_departures')->to('traveling#redirect_to_station');
@@ -1715,6 +1748,7 @@ sub startup {
);
$authed_r->get('/account')->to('account#account');
+ $authed_r->get('/account/privacy')->to('account#privacy');
$authed_r->get('/ajax/status_card.html')->to('traveling#status_card');
$authed_r->get('/cancelled')->to('traveling#cancelled');
$authed_r->get('/change_password')->to('account#password_form');
@@ -1728,6 +1762,7 @@ sub startup {
$authed_r->get('/journey/:id')->to('traveling#journey_details');
$authed_r->get('/s/*station')->to('traveling#station');
$authed_r->get('/confirm_mail/:token')->to('account#confirm_mail');
+ $authed_r->post('/account/privacy')->to('account#privacy');
$authed_r->post('/journey/add')->to('traveling#add_journey_form');
$authed_r->post('/journey/edit')->to('traveling#edit_journey');
$authed_r->post('/change_password')->to('account#change_password');
diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm
index e4b385c..44babfa 100644
--- a/lib/Travelynx/Controller/Account.pm
+++ b/lib/Travelynx/Controller/Account.pm
@@ -208,6 +208,28 @@ sub do_logout {
$self->redirect_to('/login');
}
+sub privacy {
+ my ($self) = @_;
+
+ my $user = $self->current_user;
+ my $public_level = $user->{is_public};
+
+ if ( $self->param('action') and $self->param('action') eq 'save' ) {
+ if ( $self->param('public_status') ) {
+ $public_level |= 0x02;
+ }
+ else {
+ $public_level &= ~0x02;
+ }
+ $self->set_privacy( $user->{id}, $public_level );
+ }
+ else {
+ $self->param( public_status => $public_level & 0x02 ? 1 : 0 );
+ }
+
+ $self->render( 'privacy', name => $user->{name} );
+}
+
sub change_mail {
my ($self) = @_;
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index 81b3a70..cf704ec 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -25,6 +25,44 @@ sub homepage {
}
}
+sub user_status {
+ my ($self) = @_;
+
+ my $name = $self->stash('name');
+ my $user = $self->get_privacy_by_name($name);
+
+ if ( $user and ( $user->{public_level} & 0x02 ) ) {
+ my $status = $self->get_user_status( $user->{id} );
+ $self->render(
+ 'user_status',
+ name => $name,
+ journey => $status
+ );
+ }
+ else {
+ $self->render('not_found');
+ }
+}
+
+sub public_status_card {
+ my ($self) = @_;
+
+ my $name = $self->stash('name');
+ my $user = $self->get_privacy_by_name($name);
+
+ if ( $user and ( $user->{public_level} & 0x02 ) ) {
+ my $status = $self->get_user_status( $user->{id} );
+ $self->render(
+ '_public_status_card',
+ name => $name,
+ journey => $status
+ );
+ }
+ else {
+ $self->render('not_found');
+ }
+}
+
sub status_card {
my ($self) = @_;
my $status = $self->get_user_status;