173 lines
4.6 KiB
Perl
Executable File
173 lines
4.6 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
no warnings 'redefine';
|
|
|
|
use Data::Dumper;
|
|
|
|
use params();
|
|
use db();
|
|
use markup();
|
|
use log();
|
|
use config();
|
|
use template();
|
|
use project();
|
|
|
|
binmode STDOUT, ":utf8";
|
|
|
|
my $r = shift;
|
|
( my $cgi, my $params, my $error ) = params::get($r);
|
|
my $config = config::getFromScriptLocation();
|
|
|
|
#get request
|
|
my $request = {
|
|
url => $ENV{QUERY_STRING},
|
|
params => {
|
|
original => $params,
|
|
checked => check_params( $config, $params )
|
|
},
|
|
};
|
|
|
|
$params = $request->{params}->{checked};
|
|
|
|
#connect
|
|
my $dbh = db::connect($config);
|
|
|
|
#fill template
|
|
my $template_parameters = {};
|
|
$template_parameters->{projects} = getProjects( $dbh, $config, $params );
|
|
|
|
#output template
|
|
my $template = $params->{template};
|
|
my $out = '';
|
|
template::process( $config, $out, $params->{template}, $template_parameters );
|
|
print $out;
|
|
|
|
$out = undef;
|
|
|
|
sub getProjects {
|
|
my $dbh = shift;
|
|
my $config = shift;
|
|
my $params = shift;
|
|
|
|
my $prev_series_names = undef;
|
|
my $projects = project::get_sorted($config);
|
|
|
|
my $excludedProjects = {};
|
|
if ( defined $config->{filter}->{projects_to_exclude} ) {
|
|
for my $project ( split( /\,/, $config->{filter}->{projects_to_exclude} ) ) {
|
|
$project =~ s/^\s+//g;
|
|
$project =~ s/\s+$//g;
|
|
$excludedProjects->{$project} = 1;
|
|
}
|
|
}
|
|
|
|
my $results = [];
|
|
for my $project (@$projects) {
|
|
next if defined $excludedProjects->{ $project->{name} };
|
|
|
|
my $series_names = getSeriesNames( $dbh, $config, $project->{name}, $params );
|
|
$project->{isEmpty} = 1 if scalar(@$series_names) == 0;
|
|
$project->{series_names} = $series_names;
|
|
|
|
$project->{js_name} = $project->{name};
|
|
$project->{js_name} =~ s/[^a-zA-Z\_0-9]/\_/g;
|
|
$project->{js_name} =~ s/\_+/\_/g;
|
|
|
|
#mark last series_name entry of all non empty projects
|
|
if ( ( defined $series_names ) && ( scalar @$series_names > 0 ) ) {
|
|
$series_names->[-1]->{last} = 1;
|
|
$prev_series_names->[-1]->{last} = 0
|
|
if ( defined $prev_series_names ) && ( scalar @$prev_series_names > 0 );
|
|
$prev_series_names = $series_names;
|
|
}
|
|
push @$results, $project;
|
|
}
|
|
return $results;
|
|
}
|
|
|
|
sub getSeriesNames {
|
|
my $dbh = shift;
|
|
my $config = shift;
|
|
my $project = shift;
|
|
my $params = shift;
|
|
|
|
my $bind_values = [];
|
|
|
|
my @conds = ();
|
|
if ( defined $config->{filter}->{locations_to_exclude} ) {
|
|
my @exclude = ();
|
|
for my $location ( split( /\,/, $config->{filter}->{locations_to_exclude} ) ) {
|
|
$location =~ s/^\s+//g;
|
|
$location =~ s/\s+$//g;
|
|
push @exclude, '?';
|
|
push @$bind_values, $location;
|
|
}
|
|
push @conds, 'location not in (' . join( ',', @exclude ) . ')';
|
|
}
|
|
|
|
if ( defined $config->{filter}->{projects_to_exclude} ) {
|
|
my @exclude = ();
|
|
for my $project ( split( /\,/, $config->{filter}->{projects_to_exclude} ) ) {
|
|
$project =~ s/^\s+//g;
|
|
$project =~ s/\s+$//g;
|
|
push @exclude, '?';
|
|
push @$bind_values, $project;
|
|
}
|
|
push @conds, 'project not in (' . join( ',', @exclude ) . ')';
|
|
}
|
|
|
|
if ( ( $project ne '' ) && ( $project ne 'all' ) ) {
|
|
push @conds, 'project=?';
|
|
push @$bind_values, $project;
|
|
}
|
|
|
|
if ( ( $params->{search} ne '' ) ) {
|
|
push @conds, 'series_name like ?';
|
|
push @$bind_values, '%' . $params->{search} . '%';
|
|
}
|
|
|
|
my $where = '';
|
|
if ( scalar @conds > 0 ) {
|
|
$where = 'where ' . join( ' and ', @conds );
|
|
}
|
|
|
|
my $query = qq{
|
|
select series_name, count(series_name) sum
|
|
from calcms_events
|
|
$where
|
|
group by series_name
|
|
order by series_name
|
|
};
|
|
|
|
my $series_names = db::get( $dbh, $query, $bind_values );
|
|
|
|
for my $series (@$series_names) {
|
|
$series->{series_name} = '' unless defined $series->{series_name};
|
|
$series->{series_name} =~ s/\"//g;
|
|
$series->{series_name} = 'ohne' if $series->{series_name} eq '';
|
|
$series->{series_name} = 'Einzelsendung' if $series->{series_name} eq '_single_';
|
|
}
|
|
|
|
return $series_names;
|
|
}
|
|
|
|
sub check_params {
|
|
my $config = shift;
|
|
my $params = shift;
|
|
|
|
my $template = template::check( $config, $params->{template}, 'series_names.html' );
|
|
|
|
my $search = $params->{q} || $params->{search} || $params->{term} || '';
|
|
if ( $search =~ /([a-z0-9A-Z\_\,]+)/ ) {
|
|
$search = $1;
|
|
}
|
|
|
|
return {
|
|
template => $template,
|
|
search => $search,
|
|
};
|
|
}
|
|
|