events.pm: show previous and next event

When retrieving individual events, the previous and the following event are determined
according to the current filters to allow navigation between events.
This commit is contained in:
Milan
2021-04-11 16:28:33 +02:00
parent a304e73145
commit 103e27969b
5 changed files with 93 additions and 24 deletions

View File

@@ -7,6 +7,7 @@ no warnings 'redefine';
use Data::Dumper;
use MIME::Base64();
use Encode();
use Storable 'dclone';
use DBI();
use template();
@@ -52,6 +53,50 @@ sub get_cached_or_render($$$) {
return $response;
}
sub get_prev{
my ($config, $event) = @_;
my $params = {
till_date => time::check_date($event->{start}),
till_time => time::check_time($event->{start}),
archive => 'all',
order => 'desc',
limit => 1,
};
my $request = {
url => $ENV{QUERY_STRING},
params => {
original => $params,
checked => events::check_params( $config, $params ),
}
};
$request->{params}->{checked}->{stop_nav} = 1;
my $results = events::get( $config, $request );
return $results->[0];
}
sub get_next{
my ($config, $event) = @_;
my $params = {
from_date => time::check_date($event->{end}),
from_time => time::check_time($event->{end}),
archive => 'all',
order => 'asc',
limit => 1,
};
my $request = {
url => $ENV{QUERY_STRING},
params => {
original => $params,
checked => events::check_params( $config, $params ),
},
};
$request->{params}->{checked}->{stop_nav} = 1;
my $results = events::get( $config, $request );
return $results->[0];
}
sub get($$);
sub get($$) {
my ($config, $request) = @_;
@@ -64,6 +109,16 @@ sub get($$) {
#$results = events::add_recordings($dbh, $config, $request, $results);
$results = events::modify_results( $dbh, $config, $request, $results );
# get prev and next event
if ( @$results==1
and !$request->{params}->{checked}->{stop_nav} #< prevent recursion!
and my $event_id = $request->{params}->{original}->{event_id}
){
my $event = $results->[0];
$event->{prev_event_id} = get_prev($config, $event)->{event_id};
$event->{next_event_id} = get_next($config, $event)->{event_id};
}
return $results;
}