By default the configuration cached by the mod_perl2 instance. You can disable cache by setting cache/config=0. You should disable cache only if you have multiple calcms instances running on the same mod_perl2 server with different configuration. The Location of the configuration will be determined by config module now.
170 lines
5.0 KiB
Perl
Executable File
170 lines
5.0 KiB
Perl
Executable File
#! /usr/bin/perl -w
|
|
|
|
use warnings "all";
|
|
use strict;
|
|
|
|
use CGI qw(header param Vars);
|
|
|
|
use db();
|
|
use events();
|
|
use time();
|
|
use aggregator();
|
|
use markup();
|
|
use log();
|
|
use config();
|
|
|
|
if ( $0 =~ /aggregate.*?\.cgi$/ ) {
|
|
binmode STDOUT, ":encoding(UTF-8)";
|
|
|
|
#(my $cgi, my $params, my $error)=params::get($r);
|
|
my $cgi = new CGI();
|
|
my %params = $cgi->Vars();
|
|
my $params = \%params;
|
|
|
|
my $config = config::getFromScriptLocation();
|
|
|
|
my $debug = $config->{system}->{debug};
|
|
my $mem_debug = $config->{system}->{debug_memory};
|
|
my $base_dir = $config->{locations}->{base_dir};
|
|
|
|
#my $cgi=new CGI();
|
|
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;
|
|
|
|
# $output_header.='<!DOCTYPE html>'."\n";
|
|
my $request = {
|
|
url => $ENV{QUERY_STRING},
|
|
params => {
|
|
original => $params,
|
|
checked => aggregator::check_params( $config, $params ),
|
|
},
|
|
};
|
|
$params = $request->{params}->{checked};
|
|
|
|
my $mem = 0;
|
|
|
|
#get result from cache
|
|
my $cache = aggregator::get_cache( $config, $request );
|
|
|
|
if ( ( defined $cache->{content} ) && ( $cache->{content} ne '' ) ) {
|
|
my $content = $cache->{content};
|
|
print $output_header;
|
|
print $content;
|
|
return;
|
|
}
|
|
|
|
my $content = load_file( $base_dir . './index.html' );
|
|
$content = $$content || '';
|
|
|
|
#replace HTML escaped calcms_title span by unescaped one
|
|
$content =~ s/\<\;span id\="\;calcms_title"\;\>\;[^\&]*\<\;\/span\>\;/\<span id=\"calcms_title\" \>\<\/span\>/g;
|
|
|
|
# print $content;
|
|
|
|
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 '';
|
|
|
|
$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 );
|
|
|
|
#my $newest_comments={};
|
|
#db::disconnect($request) if (defined $request && defined $request->{connection});
|
|
#print STDERR "$list->{project_title}\n";
|
|
|
|
#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};
|
|
|
|
# $output->{calcms_categories} = load_file($base_dir.'/cache/categories.html');
|
|
# $output->{calcms_series_names} = load_file($base_dir.'/cache/series_names.html');
|
|
# $output->{calcms_programs} = load_file($base_dir.'/cache/programs.html');
|
|
|
|
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 $values = [];
|
|
for my $value ( $list->{'program'}, $list->{'series_name'}, $list->{'title'}, $list->{'location'}, $list->{'project_title'} ) {
|
|
next unless defined $value;
|
|
next if $value eq '';
|
|
push @$values, $value;
|
|
}
|
|
|
|
my $title = join( ' - ', @$values );
|
|
|
|
$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;
|
|
|
|
#replace link to uncompressed or compressed drupal (first link in <head>)
|
|
my @parts = split( /<\/head>/, $content );
|
|
$parts[0] =~ s|/misc/jquery.js|/agenda_files/js/jquery.js|;
|
|
$parts[0] =~ s|/sites/default/files/js/[a-z0-9\_]+\.js|/agenda_files/js/jquery.js|;
|
|
$content = join( '</head>', @parts );
|
|
|
|
print $output_header;
|
|
print $content;
|
|
|
|
if ( $config->{cache}->{use_cache} eq '1' ) {
|
|
$cache->{content} = $content;
|
|
cache::save($cache);
|
|
}
|
|
|
|
# $config=undef;
|
|
$content = undef;
|
|
$cache = undef;
|
|
}
|
|
|
|
sub load_file {
|
|
my $filename = shift;
|
|
my $content = "cannot load '$filename'";
|
|
open my $FILE, '<:utf8', $filename or return \$content;
|
|
$content = join( "", (<$FILE>) );
|
|
close $FILE;
|
|
return \$content;
|
|
}
|
|
|