diff options
author | Daniel Friesel <derf@finalrewind.org> | 2022-07-11 22:09:26 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2022-07-11 22:09:26 +0200 |
commit | 5eab0c14f4feb5b369d9e1605f0d1f8ba413bb6e (patch) | |
tree | 3ffda5aa6573903c8dccd429d873b0b86e8b0ff4 /lib/Travelynx/Model/Users.pm | |
parent | 4deb0bde0b36a175922bb0b274087f1b19762c4c (diff) |
optionally link to external departure boards where sensible (WiP)
Diffstat (limited to 'lib/Travelynx/Model/Users.pm')
-rw-r--r-- | lib/Travelynx/Model/Users.pm | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/lib/Travelynx/Model/Users.pm b/lib/Travelynx/Model/Users.pm index 3d19831..061bb33 100644 --- a/lib/Travelynx/Model/Users.pm +++ b/lib/Travelynx/Model/Users.pm @@ -10,6 +10,13 @@ use 5.020; use DateTime; +my @sb_templates = ( + undef, + [ 'DBF', 'https://dbf.finalrewind.org/{name}' ], + [ 'marudor.de', 'https://marudor.de/{name}' ], + [ 'NVM', 'https://nvm.finalrewind.org/board/{eva}' ], +); + sub new { my ( $class, %opt ) = @_; @@ -286,7 +293,7 @@ sub get_data { my $user = $db->select( 'users', - 'id, name, status, public_level, email, ' + 'id, name, status, public_level, email, external_services, ' . 'extract(epoch from registered_at) as registered_at_ts, ' . 'extract(epoch from last_seen) as last_seen_ts, ' . 'extract(epoch from deletion_requested) as deletion_requested_ts', @@ -294,11 +301,17 @@ sub get_data { )->hash; if ($user) { return { - id => $user->{id}, - name => $user->{name}, - status => $user->{status}, - is_public => $user->{public_level}, - email => $user->{email}, + id => $user->{id}, + name => $user->{name}, + status => $user->{status}, + is_public => $user->{public_level}, + email => $user->{email}, + sb_name => $user->{external_services} + ? $sb_templates[ $user->{external_services} & 0x07 ][0] + : undef, + sb_template => $user->{external_services} + ? $sb_templates[ $user->{external_services} & 0x07 ][1] + : undef, registered_at => DateTime->from_epoch( epoch => $user->{registered_at_ts}, time_zone => 'Europe/Berlin' @@ -478,6 +491,24 @@ sub use_history { } } +sub use_external_services { + my ( $self, %opt ) = @_; + my $db = $opt{db} // $self->{pg}->db; + my $uid = $opt{uid}; + my $value = $opt{set}; + + if ($value) { + if ( $value < 0 or $value > 3 ) { + $value = 0; + } + $db->update( 'users', { external_services => $value }, { id => $uid } ); + } + else { + return $db->select( 'users', ['external_services'], { id => $uid } ) + ->hash->{external_services}; + } +} + sub get_webhook { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; |