139 lines
4.3 KiB
Perl
Executable File
139 lines
4.3 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
no warnings 'redefine';
|
|
use utf8;
|
|
use feature 'state';
|
|
|
|
use config();
|
|
use params();
|
|
use db();
|
|
use events();
|
|
use time();
|
|
use aggregator();
|
|
use markup();
|
|
use log();
|
|
|
|
if ( $0 =~ /aggregate.*?\.cgi$/ ) {
|
|
binmode STDOUT, ":encoding(UTF-8)";
|
|
|
|
my $params = {};
|
|
my $r = shift;
|
|
if ( ref($r) eq '' ) {
|
|
unshift @ARGV, $r;
|
|
for my $arg (@ARGV) {
|
|
my ( $key, $value ) = split( /\=/, $arg, 2 );
|
|
$params->{$key} = $value;
|
|
}
|
|
} else {
|
|
( my $cgi, $params, my $error ) = params::get($r);
|
|
}
|
|
|
|
my $config = config::getFromScriptLocation();
|
|
my $base_dir = $config->{locations}->{base_dir};
|
|
|
|
my $output_header = '';
|
|
if ( exists $ENV{REQUEST_URI} && $ENV{REQUEST_URI} ne '' ) {
|
|
$output_header .= "Content-type:text/html; charset=UTF-8;\n\n";
|
|
}
|
|
|
|
$params->{exclude_locations} = 1;
|
|
$params->{exclude_projects} = 1;
|
|
$params->{exclude_event_images} = 1;
|
|
$params->{ro} = 1;
|
|
$params->{recordings} = 1;
|
|
|
|
my $request = {
|
|
url => $ENV{QUERY_STRING},
|
|
params => {
|
|
original => $params,
|
|
checked => aggregator::check_params( $config, $params ),
|
|
},
|
|
};
|
|
$params = $request->{params}->{checked};
|
|
|
|
my $content = load_file( $base_dir . './index.html' );
|
|
|
|
#replace HTML escaped calcms_title span by unescaped one
|
|
$content =~
|
|
s/\<\;span id\="\;calcms_title"\;\>\;[^\&]*\<\;\/span\>\;/\<span id=\"calcms_title\" \>\<\/span\>/g;
|
|
|
|
my $list = aggregator::get_list( $config, $request );
|
|
|
|
my $menu = { content => '' };
|
|
|
|
$list->{day} = '' unless defined $list->{day};
|
|
$list->{day} = $params->{date} if ( defined $params->{date} ) && ( $params->{date} ne '' );
|
|
$list->{day} = $params->{from_date} if ( defined $params->{from_date} ) && ( $params->{from_date} ne '' );
|
|
$list->{day} = 'today' if $list->{day} eq '';
|
|
|
|
$params->{recordings} = 0;
|
|
$menu = aggregator::get_menu( $config, $request, $list->{day}, $list->{results} );
|
|
|
|
my $calendar = aggregator::get_calendar( $config, $request, $list->{day} );
|
|
my $newest_comments = aggregator::get_newest_comments( $config, $request );
|
|
|
|
#build results list
|
|
my $output = {};
|
|
$output->{calcms_menu} = \$menu->{content};
|
|
$output->{calcms_list} = \$list->{content};
|
|
$output->{calcms_calendar} = \$calendar->{content};
|
|
$output->{calcms_newest_comments} = \$newest_comments->{content};
|
|
|
|
my $url = $list->{url};
|
|
my $js = qq{
|
|
set('preloaded','1');
|
|
set('last_list_url','$url');
|
|
};
|
|
$content =~ s/\/\/\s*(calcms_)?preload/$js/;
|
|
|
|
#insert results into page
|
|
for my $key ( keys %$output ) {
|
|
my $val = ${ $output->{$key} };
|
|
my $start = index( $val, "<body>" );
|
|
if ( $start != -1 ) {
|
|
$val = substr( $val, $start + length('<body>') );
|
|
}
|
|
my $end = index( $val, "</body>" );
|
|
if ( $end != -1 ) {
|
|
$val = substr( $val, 0, $end );
|
|
}
|
|
$content =~ s/(<(div|span)\s+id="$key".*?>).*?(<\/(div|span)>)/$1$val$3/g;
|
|
}
|
|
|
|
#replace whole element span with id="calcms_title" by value
|
|
$list->{project_title} = '' unless defined $list->{project_title};
|
|
$content =~ s/(<(div|span)\s+id="calcms_title".*?>).*?(<\/(div|span)>)/$list->{project_title}/g;
|
|
|
|
my $title = join ' - ', grep {defined $_ and $_ ne ''} (
|
|
$list->{'series_name'}, $list->{'title'},
|
|
$list->{'location'}, 'Programm ' . $list->{project_title}
|
|
);
|
|
$content =~ s/(<title>)(.*?)(<\/title>)/$1$title$3/;
|
|
|
|
$js = '';
|
|
if ( ( defined $list->{event_id} ) && ( $list->{event_id} ne '' ) ) {
|
|
$js .= qq{showCommentsByEventIdOrEventStart('$list->{event_id}','$list->{start_datetime}')};
|
|
}
|
|
|
|
$content =~ s/startCalcms\(\)\;/$js/gi;
|
|
print $output_header;
|
|
print $content;
|
|
$content = undef;
|
|
}
|
|
|
|
sub load_file {
|
|
my ($filename) = @_;
|
|
state $cache;
|
|
my $cached = $cache->{$filename};
|
|
return $cached->{content} if defined $cached and $cached->{updated} > time - 60;
|
|
open my $fh, '<:utf8', $filename or return qq{cannot load '$filename'};
|
|
local $/ = undef;
|
|
my $content = <$fh>;
|
|
close $fh or return qq{cannot load '$filename'};
|
|
$cache->{$filename} = {updated => time, content => $content};
|
|
return $content;
|
|
}
|
|
|