From bfcf56f05a72091dc4136c577f321ade3b22107f Mon Sep 17 00:00:00 2001 From: Milan Date: Sun, 8 Jul 2018 22:46:29 +0200 Subject: [PATCH] separate time conditions --- lib/calcms/events.pm | 2760 +++++++++++++++++++++--------------------- 1 file changed, 1397 insertions(+), 1363 deletions(-) diff --git a/lib/calcms/events.pm b/lib/calcms/events.pm index 970692b..ad8a10e 100644 --- a/lib/calcms/events.pm +++ b/lib/calcms/events.pm @@ -17,22 +17,22 @@ use project; use studios; require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - init - get_cached_or_render - get - modify_results - get_query - render - get_running_event_id - delete - check_params - configure_cache - get_duration - calc_dates - get_keys - add_recordings + init + get_cached_or_render + get + modify_results + get_query + render + get_running_event_id + delete + check_params + configure_cache + get_duration + calc_dates + get_keys + add_recordings ); our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); @@ -41,973 +41,1003 @@ sub init { sub get_cached_or_render { - # my $response=$_[0]; - my $config = $_[1]; - my $request = $_[2]; + # my $response=$_[0]; + my $config = $_[1]; + my $request = $_[2]; - my $params = $request->{params}->{checked}; - my $debug = $config->{system}->{debug}; + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - my $cache = {}; - if ( $config->{cache}->{use_cache} == 1 ) { - events::configure_cache($config); - $cache = cache::load( $config, $params ); - log::write( $config, 'cache', $cache->{action} ); - if ( defined $cache->{content} ) { - $_[0] = $cache->{content}; - return; - } - } + my $cache = {}; + if ( $config->{cache}->{use_cache} == 1 ) { + events::configure_cache($config); + $cache = cache::load( $config, $params ); + log::write( $config, 'cache', $cache->{action} ); + if ( defined $cache->{content} ) { + $_[0] = $cache->{content}; + return; + } + } - my $results = events::get( $config, $request ); - events::render( $_[0], $config, $request, $results ); + my $results = events::get( $config, $request ); + events::render( $_[0], $config, $request, $results ); - #write to cache - if ( $config->{cache}->{use_cache} == 1 ) { + #write to cache + if ( $config->{cache}->{use_cache} == 1 ) { - #todo:put out reference only - log::write( $config, 'cache', $cache ); - $cache->{content} = $_[0]; - cache::save($cache); - } - log::mem( $config, 'events not_cached' ) if ( $debug > 2 ); - return $_[0]; + #todo:put out reference only + log::write( $config, 'cache', $cache ); + $cache->{content} = $_[0]; + cache::save($cache); + } + log::mem( $config, 'events not_cached' ) if ( $debug > 2 ); + return $_[0]; } sub get { - my $config = shift; - my $request = shift; + my $config = shift; + my $request = shift; - my $debug = $config->{system}->{debug}; + my $debug = $config->{system}->{debug}; - my $dbh = db::connect( $config, $request ); + my $dbh = db::connect( $config, $request ); - ( my $query, my $bind_values ) = events::get_query( $dbh, $config, $request ); + ( my $query, my $bind_values ) = events::get_query( $dbh, $config, $request ); - #print STDERR Dumper($query).Dumper($bind_values)."\n"; + #print STDERR Dumper($query).Dumper($bind_values)."\n"; - my $results = db::get( $dbh, $$query, $bind_values ); + my $results = db::get( $dbh, $$query, $bind_values ); #$results = events::add_recordings($dbh, $config, $request, $results); - #print STDERR Dumper($results); - $results = events::modify_results( $dbh, $config, $request, $results ); + #print STDERR Dumper($results); + $results = events::modify_results( $dbh, $config, $request, $results ); - return $results; + return $results; } sub modify_results { - my $dbh = shift; - my $config = shift; - my $request = shift; - my $results = shift; + my $dbh = shift; + my $config = shift; + my $request = shift; + my $results = shift; - my $params = $request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my $running_event_id = 0; - my $projects = {}; - my $studios = {}; + my $running_event_id = 0; + my $projects = {}; + my $studios = {}; - # print $running_event_id." ".$running_events->[0]->{start}." ".$running_events->[0]->{title} if ($debug ne''); - my $time_diff = ''; - if ( scalar @$results > 0 ) { - $results->[0]->{__first__} = 1; - $results->[-1]->{__last__} = 1; - $running_event_id = events::get_running_event_id($dbh); - } + # print $running_event_id." ".$running_events->[0]->{start}." ".$running_events->[0]->{title} if ($debug ne''); + my $time_diff = ''; + if ( scalar @$results > 0 ) { + $results->[0]->{__first__} = 1; + $results->[-1]->{__last__} = 1; + $running_event_id = events::get_running_event_id($dbh); + } - if ( ( defined $params->{template} ) && ( $params->{template} =~ /\.xml/ ) ) { - $time_diff = time::utc_offset( $config->{date}->{time_zone} ); - $time_diff =~ s/(\d\d)(\d\d)/$1\:$2/g; - } + if ( ( defined $params->{template} ) && ( $params->{template} =~ /\.xml/ ) ) { + $time_diff = time::utc_offset( $config->{date}->{time_zone} ); + $time_diff =~ s/(\d\d)(\d\d)/$1\:$2/g; + } - my $previous_result = { start_date => '' }; - my $counter = 1; - for my $result (@$results) { - if ( defined $params->{template} ) { - if ( $params->{template} =~ /\.ics$/ ) { - $result->{content_ical} = - markup::plain_to_ical( $result->{content} ); - $result->{title_ical} = - markup::plain_to_ical( $result->{title} ); - $result->{user_title_ical} = - markup::plain_to_ical( $result->{user_title} ); - $result->{excerpt_ical} = - markup::plain_to_ical( $result->{excerpt} ); - $result->{user_excerpt_ical} = - markup::plain_to_ical( $result->{user_excerpt} ); - $result->{series_name} = - markup::plain_to_ical( $result->{series_name} ); - $result->{created_at} =~ s/ /T/gi; - $result->{created_at} =~ s/[\:\-]//gi; - $result->{modified_at} =~ s/ /T/gi; - $result->{modified_at} =~ s/[\:\-]//gi; + my $previous_result = { start_date => '' }; + my $counter = 1; + for my $result (@$results) { + if ( defined $params->{template} ) { + if ( $params->{template} =~ /\.ics$/ ) { + $result->{content_ical} = + markup::plain_to_ical( $result->{content} ); + $result->{title_ical} = + markup::plain_to_ical( $result->{title} ); + $result->{user_title_ical} = + markup::plain_to_ical( $result->{user_title} ); + $result->{excerpt_ical} = + markup::plain_to_ical( $result->{excerpt} ); + $result->{user_excerpt_ical} = + markup::plain_to_ical( $result->{user_excerpt} ); + $result->{series_name} = + markup::plain_to_ical( $result->{series_name} ); + $result->{created_at} =~ s/ /T/gi; + $result->{created_at} =~ s/[\:\-]//gi; + $result->{modified_at} =~ s/ /T/gi; + $result->{modified_at} =~ s/[\:\-]//gi; - } elsif ( $params->{template} =~ /\.atom\.xml/ ) { - $result->{excerpt} = '' unless defined( $result->{excerpt} ); - $result->{excerpt} = "lass dich ueberraschen" - if ( $result->{excerpt} eq '' ); + } elsif ( $params->{template} =~ /\.atom\.xml/ ) { + $result->{excerpt} = '' unless defined( $result->{excerpt} ); + $result->{excerpt} = "lass dich ueberraschen" + if ( $result->{excerpt} eq '' ); - # $result->{excerpt} =markup::plain_to_xml($result->{excerpt}); - # $result->{title} =markup::plain_to_xml($result->{title}); - # $result->{series_name} =markup::plain_to_xml($result->{series_name}); - # $result->{program} =markup::plain_to_xml($result->{program}); + # $result->{excerpt} =markup::plain_to_xml($result->{excerpt}); + # $result->{title} =markup::plain_to_xml($result->{title}); + # $result->{series_name} =markup::plain_to_xml($result->{series_name}); + # $result->{program} =markup::plain_to_xml($result->{program}); - $result->{created_at} =~ s/ /T/gi; - $result->{created_at} .= $time_diff; - $result->{modified_at} =~ s/ /T/gi; - $result->{modified_at} .= $time_diff; - } elsif ( $params->{template} =~ /\.rss\.xml/ ) { - $result->{excerpt} = '' unless defined( $result->{excerpt} ); - $result->{excerpt} = "lass dich ueberraschen" - if ( $result->{excerpt} eq '' ); + $result->{created_at} =~ s/ /T/gi; + $result->{created_at} .= $time_diff; + $result->{modified_at} =~ s/ /T/gi; + $result->{modified_at} .= $time_diff; + } elsif ( $params->{template} =~ /\.rss\.xml/ ) { + $result->{excerpt} = '' unless defined( $result->{excerpt} ); + $result->{excerpt} = "lass dich ueberraschen" + if ( $result->{excerpt} eq '' ); - # $result->{excerpt} =markup::plain_to_xml($result->{excerpt}); - # $result->{title} =markup::plain_to_xml($result->{title}); - # $result->{series_name} =markup::plain_to_xml($result->{series_name}); - # $result->{program} =markup::plain_to_xml($result->{program}); - #print STDERR "created:$result->{created_at} modified:$result->{modified_at}\n"; - $result->{modified_at} = - time::datetime_to_rfc822( $result->{modified_at} ); - if ( $result->{created_at} =~ /[1-9]/ ) { - $result->{created_at} = - time::datetime_to_rfc822( $result->{created_at} ); - } else { - $result->{created_at} = $result->{modified_at}; - } + # $result->{excerpt} =markup::plain_to_xml($result->{excerpt}); + # $result->{title} =markup::plain_to_xml($result->{title}); + # $result->{series_name} =markup::plain_to_xml($result->{series_name}); + # $result->{program} =markup::plain_to_xml($result->{program}); + #print STDERR "created:$result->{created_at} modified:$result->{modified_at}\n"; + $result->{modified_at} = + time::datetime_to_rfc822( $result->{modified_at} ); + if ( $result->{created_at} =~ /[1-9]/ ) { + $result->{created_at} = + time::datetime_to_rfc822( $result->{created_at} ); + } else { + $result->{created_at} = $result->{modified_at}; + } - } - } - $result->{series_name} ||= ''; - $result->{series_name} = '' if $result->{series_name} eq '_single_'; + } + } + $result->{series_name} ||= ''; + $result->{series_name} = '' if $result->{series_name} eq '_single_'; - $result->{rerun} = '' unless defined $result->{rerun}; + $result->{rerun} = '' unless defined $result->{rerun}; - if ( $result->{title} =~ /\#(\d+)([a-z])?\s*$/ ) { - $result->{episode} = $1 unless defined $result->{episode}; - $result->{rerun} = $2 || '' unless ( $result->{rerun} =~ /\d/ ); - $result->{title} =~ s/\#\d+[a-z]?\s*$//; - $result->{title} =~ s/\s+$//; - } - $result->{rerun} = '' if ( $result->{rerun} eq '0' ); + if ( $result->{title} =~ /\#(\d+)([a-z])?\s*$/ ) { + $result->{episode} = $1 unless defined $result->{episode}; + $result->{rerun} = $2 || '' unless ( $result->{rerun} =~ /\d/ ); + $result->{title} =~ s/\#\d+[a-z]?\s*$//; + $result->{title} =~ s/\s+$//; + } + $result->{rerun} = '' if ( $result->{rerun} eq '0' ); - if ( ( defined $result->{recurrence_count} ) - && ( $result->{recurrence_count} > 0 ) ) - { - $result->{recurrence_count_alpha} = - markup::base26( $result->{recurrence_count} + 1 ); - $result->{recurrence_id} = $result->{recurrence}; - } else { - $result->{recurrence_count_alpha} = ''; - $result->{recurrence_count} = ''; - } + if ( ( defined $result->{recurrence_count} ) + && ( $result->{recurrence_count} > 0 ) ) + { + $result->{recurrence_count_alpha} = + markup::base26( $result->{recurrence_count} + 1 ); + $result->{recurrence_id} = $result->{recurrence}; + } else { + $result->{recurrence_count_alpha} = ''; + $result->{recurrence_count} = ''; + } - # set title keys - my $keys = get_keys($result); - for my $key ( keys %$keys ) { - $result->{$key} = $keys->{$key}; - } + # set title keys + my $keys = get_keys($result); + for my $key ( keys %$keys ) { + $result->{$key} = $keys->{$key}; + } - $result = calc_dates( $config, $result, $params, $previous_result, $time_diff ); + $result = calc_dates( $config, $result, $params, $previous_result, $time_diff ); - $result->{event_uri} = ''; - if ( ( defined $result->{program} ) && ( $result->{program} ne '' ) ) { - $result->{event_uri} .= $result->{program}; - $result->{event_uri} .= '-' - if ( ( $result->{series_name} ne '' ) - || ( $result->{title} ne '' ) ); - } - if ( $result->{series_name} ne '' ) { - $result->{event_uri} .= $result->{series_name}; - $result->{event_uri} .= '-' if ( $result->{title} ne '' ); - } - $result->{event_uri} .= $result->{title} if ( $result->{title} ne '' ); - $result->{event_uri} =~ s/\#/Nr./g; - $result->{event_uri} =~ s/\&/und/g; - $result->{event_uri} =~ s/\//\%2f/g; - $result->{event_uri} =~ s/[?]//g; + $result->{event_uri} = ''; + if ( ( defined $result->{program} ) && ( $result->{program} ne '' ) ) { + $result->{event_uri} .= $result->{program}; + $result->{event_uri} .= '-' + if ( ( $result->{series_name} ne '' ) + || ( $result->{title} ne '' ) ); + } + if ( $result->{series_name} ne '' ) { + $result->{event_uri} .= $result->{series_name}; + $result->{event_uri} .= '-' if ( $result->{title} ne '' ); + } + $result->{event_uri} .= $result->{title} if ( $result->{title} ne '' ); + $result->{event_uri} =~ s/\#/Nr./g; + $result->{event_uri} =~ s/\&/und/g; + $result->{event_uri} =~ s/\//\%2f/g; + $result->{event_uri} =~ s/[?]//g; - $result->{rds_title} = $result->{event_uri}; - $result->{rds_title} =~ s/[^a-zA-Z0-9\-]/\_/gi; - $result->{rds_title} =~ s/\_{2,99}/\_/gi; - $result->{rds_title} = substr( $result->{rds_title}, 0, 63 ); + $result->{rds_title} = $result->{event_uri}; + $result->{rds_title} =~ s/[^a-zA-Z0-9\-]/\_/gi; + $result->{rds_title} =~ s/\_{2,99}/\_/gi; + $result->{rds_title} = substr( $result->{rds_title}, 0, 63 ); - #$result->{event_id}=$result->{id}; + #$result->{event_id}=$result->{id}; - $result->{base_url} = $request->{base_url}; - $result->{base_domain} = $config->{locations}->{base_domain}; - $result->{static_files_url} = $config->{locations}->{static_files_url}; - $result->{source_base_url} = $config->{locations}->{source_base_url}; - $result->{cache_base_url} = $config->{cache}->{base_url}; + $result->{base_url} = $request->{base_url}; + $result->{base_domain} = $config->{locations}->{base_domain}; + $result->{static_files_url} = $config->{locations}->{static_files_url}; + $result->{source_base_url} = $config->{locations}->{source_base_url}; + $result->{cache_base_url} = $config->{cache}->{base_url}; - $result->{is_running} = 1 - if ( $running_event_id eq $result->{event_id} ); - $result->{one_comment} = 1 if ( $result->{comment_count} == 1 ); - $result->{no_comment} = 1 if ( $result->{comment_count} == 0 ); + $result->{is_running} = 1 + if ( $running_event_id eq $result->{event_id} ); + $result->{one_comment} = 1 if ( $result->{comment_count} == 1 ); + $result->{no_comment} = 1 if ( $result->{comment_count} == 0 ); - #fix image url - #$params->{exclude_event_images}=0 unless defined $params->{exclude_event_images}; - #if ($params->{exclude_event_images}==1){ - # if ( (defined $config->{permissions}->{hide_event_images}) && ($config->{permissions}->{hide_event_images} eq '1') ){ - # $result->{image} = $result->{series_image}; + #fix image url + #$params->{exclude_event_images}=0 unless defined $params->{exclude_event_images}; + #if ($params->{exclude_event_images}==1){ + # if ( (defined $config->{permissions}->{hide_event_images}) && ($config->{permissions}->{hide_event_images} eq '1') ){ + # $result->{image} = $result->{series_image}; # $result->{image_label} = $result->{series_image_label}; - # } + # } #} - - if ( defined $result->{image} ) { - my $url = $config->{locations}->{local_media_url}||''; - my $image = $result->{image}; - $result->{thumb_url} = $url.'/thumbs/'.$image; - $result->{icon_url} = $url.'/icons/'.$image; - $result->{image_url} = $url.'/images/'.$image; - } - if ( defined $result->{series_image} ) { - my $url = $config->{locations}->{local_media_url}||''; - my $image = $result->{series_image}; - $result->{series_thumb_url} = $url.'/thumbs/'.$image; - $result->{series_icon_url} = $url.'/icons/'.$image; - $result->{series_image_url} = $url.'/images/'.$image; - } + if ( defined $result->{image} ) { + my $url = $config->{locations}->{local_media_url} || ''; + my $image = $result->{image}; + $result->{thumb_url} = $url . '/thumbs/' . $image; + $result->{icon_url} = $url . '/icons/' . $image; + $result->{image_url} = $url . '/images/' . $image; + } - $result->{location_css} = $result->{location} || ''; - $result->{location_css} = lc( $result->{location_css} ); - $result->{location_css} =~ s/\.//g; - $result->{location_css} =~ s/\s//g; - $result->{ 'location_label_' . $result->{location_css} } = 1; + if ( defined $result->{series_image} ) { + my $url = $config->{locations}->{local_media_url} || ''; + my $image = $result->{series_image}; + $result->{series_thumb_url} = $url . '/thumbs/' . $image; + $result->{series_icon_url} = $url . '/icons/' . $image; + $result->{series_image_url} = $url . '/images/' . $image; + } - # add project by name - my $project_name = $result->{project}; - if ( defined $project_name ) { + $result->{location_css} = $result->{location} || ''; + $result->{location_css} = lc( $result->{location_css} ); + $result->{location_css} =~ s/\.//g; + $result->{location_css} =~ s/\s//g; + $result->{ 'location_label_' . $result->{location_css} } = 1; - #print STDERR "found project:$project_name\n"; - unless ( defined $projects->{$project_name} ) { - my $results = project::get( $config, { name => $project_name } ); - $projects->{$project_name} = $results->[0] || {}; - } - my $project = $projects->{$project_name}; - for my $key ( keys %$project ) { - $result->{ 'project_' . $key } = $project->{$key}; - } - } else { - print STDERR "events::get - unknown project for event $result->{id}\n"; - } + # add project by name + my $project_name = $result->{project}; + if ( defined $project_name ) { - #if project_id is set add columns from project (cached) - my $project_id = $result->{project_id}; - if ( defined $project_id ) { - unless ( defined $projects->{$project_id} ) { - my $results = project::get( $config, { project_id => $project_id } ); - $projects->{$project_id} = $results->[0] || {}; - } - my $project = $projects->{$project_id}; - for my $key ( keys %$project ) { - $result->{ 'project_' . $key } = $project->{$key}; - } - } + #print STDERR "found project:$project_name\n"; + unless ( defined $projects->{$project_name} ) { + my $results = project::get( $config, { name => $project_name } ); + $projects->{$project_name} = $results->[0] || {}; + } + my $project = $projects->{$project_name}; + for my $key ( keys %$project ) { + $result->{ 'project_' . $key } = $project->{$key}; + } + } else { + print STDERR "events::get - unknown project for event $result->{id}\n"; + } - #if studio_id is set add columns from studio (cached) - my $studio_id = $result->{studio_id}; - if ( defined $studio_id ) { - unless ( defined $studios->{$studio_id} ) { - my $results = studios::get( $config, { studio_id => $studio_id } ); - $studios->{$studio_id} = $results->[0] || {}; - } - my $studio = $studios->{$studio_id}; - for my $key ( keys %$studio ) { - $result->{ 'studio_' . $key } = $studio->{$key}; - } - } + #if project_id is set add columns from project (cached) + my $project_id = $result->{project_id}; + if ( defined $project_id ) { + unless ( defined $projects->{$project_id} ) { + my $results = project::get( $config, { project_id => $project_id } ); + $projects->{$project_id} = $results->[0] || {}; + } + my $project = $projects->{$project_id}; + for my $key ( keys %$project ) { + $result->{ 'project_' . $key } = $project->{$key}; + } + } - #$result->{'project_title'}=$project->{title} if (defined $project->{title} && $project->{title} ne ''); + #if studio_id is set add columns from studio (cached) + my $studio_id = $result->{studio_id}; + if ( defined $studio_id ) { + unless ( defined $studios->{$studio_id} ) { + my $results = studios::get( $config, { studio_id => $studio_id } ); + $studios->{$studio_id} = $results->[0] || {}; + } + my $studio = $studios->{$studio_id}; + for my $key ( keys %$studio ) { + $result->{ 'studio_' . $key } = $studio->{$key}; + } + } - #print STDERR "project:'$project_name'\n"; - #print STDERR "title:'$result->{project_title}'\n"; - #use Data::Dumper;print STDERR Dumper($result); + #$result->{'project_title'}=$project->{title} if (defined $project->{title} && $project->{title} ne ''); - for my $name ( keys %{ $config->{mapping}->{events} } ) { - my $val = ''; - if ( ( defined $name ) - && ( defined $config->{mapping}->{events}->{$name} ) - && ( defined $result->{$name} ) ) - { - $val = $config->{mapping}->{events}->{$name}->{ $result->{$name} } - || ''; - $result->{ $name . '_mapped' } = $val if ( $val ne '' ); - } - } + #print STDERR "project:'$project_name'\n"; + #print STDERR "title:'$result->{project_title}'\n"; + #use Data::Dumper;print STDERR Dumper($result); - #for my $name (keys %{$config->{controllers}}){ - # $result->{"controller_$name"}=$config->{controllers}->{$name}; - #} + for my $name ( keys %{ $config->{mapping}->{events} } ) { + my $val = ''; + if ( ( defined $name ) + && ( defined $config->{mapping}->{events}->{$name} ) + && ( defined $result->{$name} ) ) + { + $val = $config->{mapping}->{events}->{$name}->{ $result->{$name} } + || ''; + $result->{ $name . '_mapped' } = $val if ( $val ne '' ); + } + } - $previous_result = $result; + #for my $name (keys %{$config->{controllers}}){ + # $result->{"controller_$name"}=$config->{controllers}->{$name}; + #} - #print "Content-type:text/text\n\n"; - #use Data::Dumper;print STDERR Dumper($result); - $result->{ 'counter_' . $counter } = 1; - $counter++; + $previous_result = $result; - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(list|details)/ ) ){ - if ( ( defined $result->{excerpt} ) && ( length($result->{excerpt}) > 250) ){ - $result->{excerpt} = substr($result->{excerpt}, 0, 250).'...'; - } + #print "Content-type:text/text\n\n"; + #use Data::Dumper;print STDERR Dumper($result); + $result->{ 'counter_' . $counter } = 1; + $counter++; - if ( (defined $result->{user_excerpt}) && (length($result->{user_excerpt}) > 250) ){ - $result->{user_excerpt} = substr($result->{user_excerpt}, 0, 250).'...'; - } - } + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(list|details)/ ) ) + { + if ( ( defined $result->{excerpt} ) && ( length( $result->{excerpt} ) > 250 ) ) { + $result->{excerpt} = substr( $result->{excerpt}, 0, 250 ) . '...'; + } - #build content - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /\.html/ ) ) - { - if ( defined $result->{content} ) { - $result->{content} = - markup::fix_line_ends( $result->{content} ); - $result->{content} = - markup::creole_to_html( $result->{content} ); - $result->{html_content} = $result->{content}; + if ( ( defined $result->{user_excerpt} ) && ( length( $result->{user_excerpt} ) > 250 ) ) { + $result->{user_excerpt} = substr( $result->{user_excerpt}, 0, 250 ) . '...'; + } + } - } - if ( defined $result->{topic} ) { - $result->{topic} = markup::fix_line_ends( $result->{topic} ); - $result->{topic} = markup::creole_to_html( $result->{topic} ); - $result->{html_topic} = $result->{topic}; - } - } + #build content + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /\.html/ ) ) + { + if ( defined $result->{content} ) { + $result->{content} = + markup::fix_line_ends( $result->{content} ); + $result->{content} = + markup::creole_to_html( $result->{content} ); + $result->{html_content} = $result->{content}; - #detect if images are in content or topic field - my $image_in_text = 0; - $image_in_text = 1 - if ( ( defined $result->{content} ) - && ( $result->{content} =~ /{topic} ) - && ( $result->{topic} =~ /{no_image_in_text} = 1 if $image_in_text == 0; + } + if ( defined $result->{topic} ) { + $result->{topic} = markup::fix_line_ends( $result->{topic} ); + $result->{topic} = markup::creole_to_html( $result->{topic} ); + $result->{html_topic} = $result->{topic}; + } + } - if ( - ( defined $params->{template} ) - && ( ( $params->{template} =~ /event_perl\.txt$/ ) - || ( $params->{template} =~ /event_file_export\.txt$/ ) ) + #detect if images are in content or topic field + my $image_in_text = 0; + $image_in_text = 1 + if ( ( defined $result->{content} ) + && ( $result->{content} =~ /{topic} ) + && ( $result->{topic} =~ /{no_image_in_text} = 1 if $image_in_text == 0; - ) - { - for my $key ( keys %$result ) { - $result->{$key} =~ s/\|/\\\|/g if ( defined $result->{$key} ); - } + if ( + ( defined $params->{template} ) + && ( ( $params->{template} =~ /event_perl\.txt$/ ) + || ( $params->{template} =~ /event_file_export\.txt$/ ) ) - # $result->{content}='no'; - } + ) + { + for my $key ( keys %$result ) { + $result->{$key} =~ s/\|/\\\|/g if ( defined $result->{$key} ); + } - } # end for results - add_recurrence_dates( $config, $results ); - return $results; + # $result->{content}='no'; + } + + } # end for results + add_recurrence_dates( $config, $results ); + return $results; } sub add_recurrence_dates { - my $config = shift; - my $results = shift; + my $config = shift; + my $results = shift; - # get unique list of recurrence ids from results - my $recurrence_dates = {}; - for my $result (@$results) { - next unless defined $result->{recurrence}; - next if $result->{recurrence} == 0; - $recurrence_dates->{ $result->{recurrence} } = 0; - } + # get unique list of recurrence ids from results + my $recurrence_dates = {}; + for my $result (@$results) { + next unless defined $result->{recurrence}; + next if $result->{recurrence} == 0; + $recurrence_dates->{ $result->{recurrence} } = 0; + } - my @event_ids = keys %$recurrence_dates; - return if @event_ids == 0; + my @event_ids = keys %$recurrence_dates; + return if @event_ids == 0; - # query start date of recurrences - my $conditions = []; - my $bind_values = []; - for my $id (@event_ids) { - push @$conditions, '?'; - push @$bind_values, $id; - } - $conditions = join( ',', @$conditions ); + # query start date of recurrences + my $conditions = []; + my $bind_values = []; + for my $id (@event_ids) { + push @$conditions, '?'; + push @$bind_values, $id; + } + $conditions = join( ',', @$conditions ); - my $query = qq{ + my $query = qq{ select id event_id, start from calcms_events where id in ($conditions) }; - #print STDERR Dumper($query); - #return; - my $dbh = db::connect($config); - my $events = db::get( $dbh, $query, $bind_values ); + #print STDERR Dumper($query); + #return; + my $dbh = db::connect($config); + my $events = db::get( $dbh, $query, $bind_values ); - # store start dates by recurrence id - for my $event (@$events) { - $recurrence_dates->{ $event->{event_id} } = $event->{start}; - } + # store start dates by recurrence id + for my $event (@$events) { + $recurrence_dates->{ $event->{event_id} } = $event->{start}; + } - # set start dates to results - for my $result (@$results) { - next unless defined $result->{recurrence}; - next if $result->{recurrence} == 0; - $result->{recurrence_date} = - $recurrence_dates->{ $result->{recurrence} }; - } + # set start dates to results + for my $result (@$results) { + next unless defined $result->{recurrence}; + next if $result->{recurrence} == 0; + $result->{recurrence_date} = + $recurrence_dates->{ $result->{recurrence} }; + } - #print STDERR Dumper($recurrence_dates); + #print STDERR Dumper($recurrence_dates); } sub calc_dates { - my $config = shift; - my $result = shift; - my $params = shift || {}; - my $previous_result = shift || {}; - my $time_diff = shift || ''; + my $config = shift; + my $result = shift; + my $params = shift || {}; + my $previous_result = shift || {}; + my $time_diff = shift || ''; - $result->{utc_offset} = $time_diff; - $result->{time_zone} = $config->{date}->{time_zone}; - my $language = $config->{date}->{language} || 'en'; + $result->{utc_offset} = $time_diff; + $result->{time_zone} = $config->{date}->{time_zone}; + my $language = $config->{date}->{language} || 'en'; - $result->{start_datetime} = $result->{start}; - $result->{start_datetime} =~ s/ /T/gi; - if ( $result->{start_datetime} =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)T(\d\d)\:(\d\d)/ ) { - $result->{start_year} = $1; - $result->{start_month} = $2; - $result->{start_day} = $3; - $result->{start_hour} = $4; - $result->{start_minute} = $5; - } + $result->{start_datetime} = $result->{start}; + $result->{start_datetime} =~ s/ /T/gi; + if ( $result->{start_datetime} =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)T(\d\d)\:(\d\d)/ ) { + $result->{start_year} = $1; + $result->{start_month} = $2; + $result->{start_day} = $3; + $result->{start_hour} = $4; + $result->{start_minute} = $5; + } - unless ( defined $result->{day} ) { - my $d = time::datetime_to_array( $result->{start} ); - my $hour = $d->[3]; - if ( ( defined $hour ) && ( $hour < 6 ) ) { - $result->{day} = time::add_days_to_date( $result->{start}, -1 ); - } else { - $result->{day} = time::datetime_to_date( $result->{start} ); - } - } - unless ( defined $result->{start_date} ) { - $result->{start_date} = time::datetime_to_date( $result->{start} ); - } - unless ( defined $result->{end_date} ) { - $result->{end_date} = time::datetime_to_date( $result->{end} ); - } + unless ( defined $result->{day} ) { + my $d = time::datetime_to_array( $result->{start} ); + my $hour = $d->[3]; + if ( ( defined $hour ) && ( $hour < 6 ) ) { + $result->{day} = time::add_days_to_date( $result->{start}, -1 ); + } else { + $result->{day} = time::datetime_to_date( $result->{start} ); + } + } + unless ( defined $result->{start_date} ) { + $result->{start_date} = time::datetime_to_date( $result->{start} ); + } + unless ( defined $result->{end_date} ) { + $result->{end_date} = time::datetime_to_date( $result->{end} ); + } - $result->{dtstart} = $result->{start_datetime}; - $result->{dtstart} =~ s/[\:\-]//gi; + $result->{dtstart} = $result->{start_datetime}; + $result->{dtstart} =~ s/[\:\-]//gi; - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(\.txt|\.json)/ ) ) - { - $result->{start_utc_epoch} = time::datetime_to_utc( $result->{start_datetime}, $config->{date}->{time_zone} ); - } - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(\.xml)/ ) ) - { - $result->{start_datetime_utc} = time::datetime_to_utc_datetime( $result->{start_datetime}, $config->{date}->{time_zone} ); - } + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(\.txt|\.json)/ ) ) + { + $result->{start_utc_epoch} = time::datetime_to_utc( $result->{start_datetime}, $config->{date}->{time_zone} ); + } + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(\.xml)/ ) ) + { + $result->{start_datetime_utc} = time::datetime_to_utc_datetime( $result->{start_datetime}, $config->{date}->{time_zone} ); + } - $result->{end_datetime} = $result->{end}; - $result->{end_datetime} =~ s/ /T/gi; + $result->{end_datetime} = $result->{end}; + $result->{end_datetime} =~ s/ /T/gi; - $result->{dtend} = $result->{end_datetime}; - $result->{dtend} =~ s/[\:\-]//gi; + $result->{dtend} = $result->{end_datetime}; + $result->{dtend} =~ s/[\:\-]//gi; - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(\.txt|\.json)/ ) ) - { - $result->{end_utc_epoch} = time::datetime_to_utc( $result->{end_datetime}, $config->{date}->{time_zone} ); - } - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(\.xml)/ ) ) - { - $result->{end_datetime_utc} = time::datetime_to_utc_datetime( $result->{end_datetime}, $config->{date}->{time_zone} ); - } + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(\.txt|\.json)/ ) ) + { + $result->{end_utc_epoch} = time::datetime_to_utc( $result->{end_datetime}, $config->{date}->{time_zone} ); + } + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(\.xml)/ ) ) + { + $result->{end_datetime_utc} = time::datetime_to_utc_datetime( $result->{end_datetime}, $config->{date}->{time_zone} ); + } - if ( ( defined $previous_result ) - && ( defined $previous_result->{start_date} ) - && ( $result->{start_date} ne $previous_result->{start_date} ) ) - { - $result->{is_first_of_day} = 1; - $previous_result->{is_last_of_day} = 1; - } + if ( ( defined $previous_result ) + && ( defined $previous_result->{start_date} ) + && ( $result->{start_date} ne $previous_result->{start_date} ) ) + { + $result->{is_first_of_day} = 1; + $previous_result->{is_last_of_day} = 1; + } - $result->{start_date_name} = - time::date_format( $result->{start_date}, $language ); - $result->{end_date_name} = - time::date_format( $result->{end_date}, $language ); + $result->{start_date_name} = + time::date_format( $result->{start_date}, $language ); + $result->{end_date_name} = + time::date_format( $result->{end_date}, $language ); - if ( $result->{start} =~ /(\d\d\:\d\d)\:\d\d/ ) { - $result->{start_time_name} = $1; - $result->{start_time} = $1; - } + if ( $result->{start} =~ /(\d\d\:\d\d)\:\d\d/ ) { + $result->{start_time_name} = $1; + $result->{start_time} = $1; + } - if ( $result->{end} =~ /(\d\d\:\d\d)\:\d\d/ ) { - $result->{end_time_name} = $1; - $result->{end_time} = $1; - } + if ( $result->{end} =~ /(\d\d\:\d\d)\:\d\d/ ) { + $result->{end_time_name} = $1; + $result->{end_time} = $1; + } - if ( defined $result->{weekday} ) { - my $language = $config::config->{date}->{language} || 'en'; + if ( defined $result->{weekday} ) { + my $language = $config::config->{date}->{language} || 'en'; - #my $weekdays=time::get_weekdays(); - my $weekday_index = $time::weekday_index->{ $result->{weekday} . '' } || 0; - $result->{weekday_name} = - $time::names->{$language}->{weekdays}->[$weekday_index]; - $result->{weekday_short_name} = - $time::names->{$language}->{weekdays_abbr}->[$weekday_index]; - } - return $result; + #my $weekdays=time::get_weekdays(); + my $weekday_index = $time::weekday_index->{ $result->{weekday} . '' } || 0; + $result->{weekday_name} = + $time::names->{$language}->{weekdays}->[$weekday_index]; + $result->{weekday_short_name} = + $time::names->{$language}->{weekdays_abbr}->[$weekday_index]; + } + return $result; } -sub add_recordings{ - my $dbh = shift; - my $config = shift; - my $request = shift; - my $events = shift; +sub add_recordings { + my $dbh = shift; + my $config = shift; + my $request = shift; + my $events = shift; -# print STDERR Dumper($results); + # print STDERR Dumper($results); return $events unless defined $events; my $params = $request->{params}->{checked}; return $events unless defined $params; return $events unless defined $params->{recordings}; - my @ids=(); - my $eventsById={}; + my @ids = (); + my $eventsById = {}; + #my $events = $results; - - for my $event (@$events){ + + for my $event (@$events) { my $eventId = $event->{event_id}; push @ids, $eventId; $eventsById->{$eventId} = $event; } + my $qms = join( ', ', ( map { '?' } @$events ) ); + my $bindValues = join( ', ', ( map { $_->{event_id} } @$events ) ); - my $qms = join( ', ', (map { '?' } @$events)); - my $bindValues = join( ', ', (map { $_->{event_id} } @$events)); - - my $query = qq{ + my $query = qq{ select * from calcms_audio_recordings where event_id in ($qms) order by created_at; }; - $dbh = db::connect($config) unless defined $dbh; - my $recordings = db::get( $dbh, $query, $bindValues ); + $dbh = db::connect($config) unless defined $dbh; + my $recordings = db::get( $dbh, $query, $bindValues ); + #print STDERR Dumper($recordings); - for my $entry (@$recordings){ + for my $entry (@$recordings) { my $eventId = $entry->{event_id}; - my $event = $eventsById->{$eventId}; + my $event = $eventsById->{$eventId}; push @{ $event->{recordings} }, $entry; } - - return $events; + + return $events; } -# if recordings is set in params, recordings date and path will be included -sub get_query { - my $dbh = shift; - my $config = shift; - my $request = shift; +sub getDateRange { + my $config = shift; + $config->{date}->{day_starting_hour}; +} - my $params = $request->{params}->{checked}; - my $debug = $config->{system}->{debug}; +sub getDateQueryConditions { + my $config = shift; + my $params = shift; + my $bind_values = shift; - $params->{recordings} = '' unless defined $params->{recordings}; + # conditions by date + my $date_conds = []; - my $bind_values = []; - my $where_cond = []; - my $order_cond = ''; - my $limit_cond = ''; + #date, today, tomorrow, yesterday + my $date = ''; + $date = time::date_cond( $params->{date} ) if ( $params->{date} ne '' ); - if ( $params->{event_id} ne '' ) { + my $from_date = ''; + $from_date = time::date_cond( $params->{from_date} ) + if ( $params->{from_date} ne '' ); - # conditions by event id - push @$where_cond, 'e.id=?'; - $bind_values = [ $params->{event_id} ]; + my $till_date = ''; + $till_date = time::date_cond( $params->{till_date} ) + if ( $params->{till_date} ne '' ); - #filter by published, default=1 to see published only, set published='all' to see all - my $published = $params->{published} || '1'; - if ( ( $published eq '0' ) || ( $published eq '1' ) ) { - push @$where_cond, 'published=?'; - push @$bind_values, $published; - } + my $from_time = ''; + $from_time = time::time_cond( $params->{from_time} ) + if ( $params->{from_time} ne '' ); - my $draft = $params->{draft} || '0'; - if ( ( $draft eq '0' ) || ( $draft eq '1' ) ) { - push @$where_cond, 'draft=?'; - push @$bind_values, $draft; - } + my $till_time = ''; + $till_time = time::time_cond( $params->{till_time} ) + if ( $params->{till_time} ne '' ); - } else { + my $date_range_include = $params->{date_range_include}; - # conditions by date - my @date_conds = (); + #from_time is defined + if ( ( $params->{from_date} ne '' ) && ( $params->{from_time} ne '' ) ) { + my $datetime = time::datetime_cond( $from_date . 'T' . $from_time ); + if ( $datetime ne '' ) { + if ( $date_range_include eq '1' ) { + push @$date_conds, ' end > ? '; + push @$bind_values, $datetime; + $from_date = ''; + } else { + push @$date_conds, ' start >= ? '; + push @$bind_values, $datetime; + $from_date = ''; + } + } + } - #date, today, tomorrow, yesterday - my $date = ''; - $date = time::date_cond( $params->{date} ) if ( $params->{date} ne '' ); + #till_time is defined + if ( ( $params->{till_date} ne '' ) && ( $params->{till_time} ne '' ) ) { + my $datetime = time::datetime_cond( $till_date . 'T' . $till_time ); + if ( $datetime ne '' ) { + push @$date_conds, ' start < ? '; + push @$bind_values, $datetime; + $till_date = ''; + } + } - my $from_date = ''; - $from_date = time::date_cond( $params->{from_date} ) - if ( $params->{from_date} ne '' ); + #time is defined + if ( ( defined $params->{time} ) + && ( $params->{time} ne '' ) + && ( $params->{time} ne 'now' ) + && ( $params->{time} ne 'future' ) ) + { + my $time = time::time_cond( $params->{time} ); + if ( $time ne '' ) { + push @$date_conds, ' time(start) = ? '; + push @$bind_values, $time; + } + return $date_conds; + } - my $till_date = ''; - $till_date = time::date_cond( $params->{till_date} ) - if ( $params->{till_date} ne '' ); - - my $from_time = ''; - $from_time = time::time_cond( $params->{from_time} ) - if ( $params->{from_time} ne '' ); - - my $till_time = ''; - $till_time = time::time_cond( $params->{till_time} ) - if ( $params->{till_time} ne '' ); - - my $date_range_include = $params->{date_range_include}; - - #from_time is defined - if ( ( $params->{from_date} ne '' ) && ( $params->{from_time} ne '' ) ) { - my $datetime = time::datetime_cond( $from_date . 'T' . $from_time ); - if ( $datetime ne '' ) { - if ( $date_range_include eq '1' ) { - push @date_conds, ' end > ? '; - push @$bind_values, $datetime; - $from_date = ''; - } else { - push @date_conds, ' start >= ? '; - push @$bind_values, $datetime; - $from_date = ''; - } - } - } - - #till_time is defined - if ( ( $params->{till_date} ne '' ) && ( $params->{till_time} ne '' ) ) { - my $datetime = time::datetime_cond( $till_date . 'T' . $till_time ); - if ( $datetime ne '' ) { - push @date_conds, ' start < ? '; - push @$bind_values, $datetime; - $till_date = ''; - } - } - - #time is defined - if ( ( defined $params->{time} ) - && ( $params->{time} ne '' ) - && ( $params->{time} ne 'now' ) - && ( $params->{time} ne 'future' ) ) - { - my $time = time::time_cond( $params->{time} ); - if ( $time ne '' ) { - push @date_conds, ' time(start) = ? '; - push @$bind_values, $time; - } - } - - #event is not over - if ( ( defined $params->{time} ) && ( $params->{time} eq 'now' ) ) { - push @date_conds, qq{ + #event is not over + elsif ( ( defined $params->{time} ) && ( $params->{time} eq 'now' ) ) { + push @$date_conds, qq{ ( ( unix_timestamp(end) > unix_timestamp(now() ) ) and ( unix_timestamp(start) <= unix_timestamp(now() ) ) ) }; - - } elsif ( ( defined $params->{time} ) && ( $params->{time} eq 'future' ) ) { - push @date_conds, qq{ + return $date_conds; + } elsif ( ( defined $params->{time} ) && ( $params->{time} eq 'future' ) ) { + push @$date_conds, qq{ ( ( unix_timestamp(end) > unix_timestamp(now() ) ) and ( unix_timestamp(end) - unix_timestamp(now() ) ) < 7*24*3600 ) }; + return $date_conds; + } elsif ( $date ne '' ) { + if ( $date eq 'today' ) { + my $date = time::get_event_date($config); + if ( $date ne '' ) { + push @$date_conds, ' ( start_date = ? ) '; + push @$bind_values, $date; + } - } elsif ( $date ne '' ) { - if ( $date eq 'today' ) { - my $date = time::get_event_date($config); - if ( $date ne '' ) { - push @date_conds, ' ( start_date = ? ) '; - push @$bind_values, $date; - } + } else { - } else { - if ( $date ne '' ) { - push @date_conds, ' ( start_date = ? ) '; - push @$bind_values, $date; - } - } - } else { - if ( $from_date ne '' ) { - if ( $date_range_include eq '1' ) { + #push @$date_conds, ' ( start_date = ? ) '; + #push @$bind_values, $date; + my $start = time::datetime_cond( $date . 'T00:00:00' ); + if ( $start ne '' ) { + $start = time::add_hours_to_datetime( $start, $config->{date}->{day_starting_hour} ); + my $end = time::add_hours_to_datetime( $start, 24 ); - # end is after start - push @date_conds, ' ( end_date >= ? )'; - push @$bind_values, $from_date; - } else { - push @date_conds, ' ( start_date >= ? ) '; - push @$bind_values, $from_date; - } - } + if ( $date_range_include eq '1' ) { + push @$date_conds, ' end > ? '; + push @$bind_values, $start; + } else { + push @$date_conds, ' start >= ? '; + push @$bind_values, $start; + } - if ( $till_date ne '' ) { - if ( $date_range_include eq '1' ) { + if ( $end ne '' ) { + push @$date_conds, ' start < ? '; + push @$bind_values, $end; + } + } + } + return $date_conds; + } else { + if ( $from_date ne '' ) { + if ( $date_range_include eq '1' ) { - # start is before end - push @date_conds, ' ( start_date <= ? )'; - push @$bind_values, $till_date; - } else { - push @date_conds, ' ( end_date <= ? ) '; - push @$bind_values, $till_date; - } - } + # end is after start + push @$date_conds, ' ( end_date >= ? )'; + push @$bind_values, $from_date; + } else { + push @$date_conds, ' ( start_date >= ? ) '; + push @$bind_values, $from_date; + } + } - if ( $params->{weekday} ne '' ) { - my $weekday = $params->{weekday}; - $weekday += 1; - $weekday -= 7 if ( $weekday > 7 ); - push @date_conds, ' (dayofweek(start_date)= ?) '; - push @$bind_values, $weekday; - } + if ( $till_date ne '' ) { + if ( $date_range_include eq '1' ) { - if ( $params->{archive} eq 'past' ) { - my $date = time::get_event_date($config); - if ( $date ne '' ) { - push @date_conds, ' ( start_date < ? ) '; - push @$bind_values, $date; - } + # start is before end + push @$date_conds, ' ( start_date <= ? )'; + push @$bind_values, $till_date; + } else { + push @$date_conds, ' ( end_date <= ? ) '; + push @$bind_values, $till_date; + } + } - } elsif ( $params->{archive} eq 'future' ) { - my $date = time::get_event_date($config); - if ( $date ne '' ) { - push @date_conds, ' ( start_date >= ? ) '; - push @$bind_values, $date; - } - } + if ( $params->{weekday} ne '' ) { + my $weekday = $params->{weekday}; + $weekday += 1; + $weekday -= 7 if ( $weekday > 7 ); + push @$date_conds, ' (dayofweek(start_date)= ?) '; + push @$bind_values, $weekday; + } - } + if ( $params->{archive} eq 'past' ) { + my $date = time::get_event_date($config); + if ( $date ne '' ) { + push @$date_conds, ' ( start_date < ? ) '; + push @$bind_values, $date; + } - if ( ( defined $params->{time_of_day} ) - && ( $params->{time_of_day} ne '' ) ) - { - push @date_conds, ' ( time_of_day = ? ) '; - push @$bind_values, $params->{time_of_day}; + } elsif ( $params->{archive} eq 'future' ) { + my $date = time::get_event_date($config); + if ( $date ne '' ) { + push @$date_conds, ' ( start_date >= ? ) '; + push @$bind_values, $date; + } + } - } + } - my $date_cond = join " and ", @date_conds; - push @$where_cond, $date_cond if ( $date_cond ne '' ); - } + return $date_conds; - # location - my $location_cond = ''; - if ( $params->{location} ne '' ) { - my $location = ( split( /\,/, $params->{location} ) )[0]; - $location =~ s/[^a-zA-Z0-9]/%/g; - $location =~ s/%{2,99}/%/g; - if ( $location ne '' ) { - $location_cond = ' location like ? '; - push @$bind_values, $location; - } - } +} - # exclude location - my $exclude_location_cond = ''; - if ( $params->{exclude_locations} eq '1' ) { - if ( $params->{locations_to_exclude} ne '' ) { - my @locations_to_exclude = split( /,/, $params->{locations_to_exclude} ); - $exclude_location_cond = 'location not in (' . join( ",", map { '?' } @locations_to_exclude ) . ')'; - for my $location (@locations_to_exclude) { - $location =~ s/^\s+//g; - $location =~ s/\s+$//g; - push @$bind_values, $location; - } - } - } +# if recordings is set in params, recordings date and path will be included +sub get_query { + my $dbh = shift; + my $config = shift; + my $request = shift; - # exclude project - my $exclude_project_cond = ''; - if ( $params->{exclude_projects} eq '1' ) { - if ( $params->{projects_to_exclude} ne '' ) { - my @projects_to_exclude = split( /,/, $params->{projects_to_exclude} ); - $exclude_project_cond = 'project not in (' . join( ",", map { '?' } @projects_to_exclude ) . ')'; - for my $project (@projects_to_exclude) { - $project =~ s/^\s+//g; - $project =~ s/\s+$//g; - push @$bind_values, $project; - } - } - } + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - #filter for category - my $category_cond = ''; - if ( $params->{category} ne '' ) { - my $category = ( split( /\,/, $params->{category} ) )[0]; - $category =~ s/[^a-zA-Z0-9]/%/g; - $category =~ s/%{2,99}/%/g; - if ( $category ne '' ) { - $category_cond = qq{ + $params->{recordings} = '' unless defined $params->{recordings}; + + my $bind_values = []; + my $where_cond = []; + my $order_cond = ''; + my $limit_cond = ''; + + if ( $params->{event_id} ne '' ) { + + # conditions by event id + push @$where_cond, 'e.id=?'; + $bind_values = [ $params->{event_id} ]; + + #filter by published, default=1 to see published only, set published='all' to see all + my $published = $params->{published} || '1'; + if ( ( $published eq '0' ) || ( $published eq '1' ) ) { + push @$where_cond, 'published=?'; + push @$bind_values, $published; + } + + my $draft = $params->{draft} || '0'; + if ( ( $draft eq '0' ) || ( $draft eq '1' ) ) { + push @$where_cond, 'draft=?'; + push @$bind_values, $draft; + } + + } else { + + my $date_conds = getDateQueryConditions( $config, $params, $bind_values ); + my $date_cond = join " and ", @$date_conds; + + push @$where_cond, $date_cond if ( $date_cond ne '' ); + } + + # location + my $location_cond = ''; + if ( $params->{location} ne '' ) { + my $location = ( split( /\,/, $params->{location} ) )[0]; + $location =~ s/[^a-zA-Z0-9]/%/g; + $location =~ s/%{2,99}/%/g; + if ( $location ne '' ) { + $location_cond = ' location like ? '; + push @$bind_values, $location; + } + } + + # exclude location + my $exclude_location_cond = ''; + if ( $params->{exclude_locations} eq '1' ) { + if ( $params->{locations_to_exclude} ne '' ) { + my @locations_to_exclude = split( /,/, $params->{locations_to_exclude} ); + $exclude_location_cond = 'location not in (' . join( ",", map { '?' } @locations_to_exclude ) . ')'; + for my $location (@locations_to_exclude) { + $location =~ s/^\s+//g; + $location =~ s/\s+$//g; + push @$bind_values, $location; + } + } + } + + # exclude project + my $exclude_project_cond = ''; + if ( $params->{exclude_projects} eq '1' ) { + if ( $params->{projects_to_exclude} ne '' ) { + my @projects_to_exclude = split( /,/, $params->{projects_to_exclude} ); + $exclude_project_cond = 'project not in (' . join( ",", map { '?' } @projects_to_exclude ) . ')'; + for my $project (@projects_to_exclude) { + $project =~ s/^\s+//g; + $project =~ s/\s+$//g; + push @$bind_values, $project; + } + } + } + + #filter for category + my $category_cond = ''; + if ( $params->{category} ne '' ) { + my $category = ( split( /\,/, $params->{category} ) )[0]; + $category =~ s/[^a-zA-Z0-9]/%/g; + $category =~ s/%{2,99}/%/g; + if ( $category ne '' ) { + $category_cond = qq{ id in( select event_id from calcms_categories where name like ? ) }; - } - push @$bind_values, $category; - } + } + push @$bind_values, $category; + } - my $series_name_cond = ''; - if ( ( defined $params->{series_name} ) - && ( $params->{series_name} ne '' ) ) - { - my $series_name = ( split( /\,/, $params->{series_name} ) )[0]; - $series_name =~ s/[^a-zA-Z0-9]/%/g; - $series_name =~ s/%{2,99}/%/g; - if ( $series_name ne '' ) { - $series_name_cond = ' series_name like ? '; - push @$bind_values, $series_name; - } - } + my $series_name_cond = ''; + if ( ( defined $params->{series_name} ) + && ( $params->{series_name} ne '' ) ) + { + my $series_name = ( split( /\,/, $params->{series_name} ) )[0]; + $series_name =~ s/[^a-zA-Z0-9]/%/g; + $series_name =~ s/%{2,99}/%/g; + if ( $series_name ne '' ) { + $series_name_cond = ' series_name like ? '; + push @$bind_values, $series_name; + } + } - #filter for tags - my $tag_cond = ''; - if ( ( defined $params->{tag} ) && ( $params->{tag} ne '' ) ) { - my @tags = ( split( /\,/, $params->{tag} ) ); - if ( scalar @tags > 0 ) { - my $tags = join ",", ( map { '?' } @tags ); - for my $tag (@tags) { - push @$bind_values, $tag; - } - $tag_cond = qq{ + #filter for tags + my $tag_cond = ''; + if ( ( defined $params->{tag} ) && ( $params->{tag} ne '' ) ) { + my @tags = ( split( /\,/, $params->{tag} ) ); + if ( scalar @tags > 0 ) { + my $tags = join ",", ( map { '?' } @tags ); + for my $tag (@tags) { + push @$bind_values, $tag; + } + $tag_cond = qq{ id in( select event_id from calcms_tags where name in($tags) ) }; - } - } - $tag_cond = ''; + } + } + $tag_cond = ''; - my $title_cond = ''; - if ( ( defined $params->{title} ) && ( $params->{title} ne '' ) ) { - my $title = ( split( /\,/, $params->{title} ) )[0]; - $title =~ s/[^a-zA-Z0-9]/%/g; - $title =~ s/%{2,99}/%/g; - $title =~ s/^\%//; - $title =~ s/\%$//; - $title = '%' . $title . '%'; - if ( $title ne '' ) { - $title_cond = ' title like ? '; - push @$bind_values, $title; - } - } + my $title_cond = ''; + if ( ( defined $params->{title} ) && ( $params->{title} ne '' ) ) { + my $title = ( split( /\,/, $params->{title} ) )[0]; + $title =~ s/[^a-zA-Z0-9]/%/g; + $title =~ s/%{2,99}/%/g; + $title =~ s/^\%//; + $title =~ s/\%$//; + $title = '%' . $title . '%'; + if ( $title ne '' ) { + $title_cond = ' title like ? '; + push @$bind_values, $title; + } + } - my $search_cond = ''; - if ( ( defined $params->{search} ) && ( $params->{search} ne '' ) ) { - my $search = lc $params->{search}; + my $search_cond = ''; + if ( ( defined $params->{search} ) && ( $params->{search} ne '' ) ) { + my $search = lc $params->{search}; $search =~ s/(?=[\\%_])/\\/g; - $search =~ s/^[\%\s]+//; - $search =~ s/[\%\s]+$//; - if ( $search ne '' ) { - $search = '%' . $search . '%'; - my @attr = ( 'title', 'series_name', 'excerpt', 'category', 'content', 'topic' ); - $search_cond = "(" . join( " or ", map { 'lower(' . $_ . ') like ?' } @attr ) . ")"; - for my $attr (@attr) { - push @$bind_values, $search; - } - } - } + $search =~ s/^[\%\s]+//; + $search =~ s/[\%\s]+$//; + if ( $search ne '' ) { + $search = '%' . $search . '%'; + my @attr = ( 'title', 'series_name', 'excerpt', 'category', 'content', 'topic' ); + $search_cond = "(" . join( " or ", map { 'lower(' . $_ . ') like ?' } @attr ) . ")"; + for my $attr (@attr) { + push @$bind_values, $search; + } + } + } + #print STDERR $search_cond."\n"; - my $project_cond = ''; + my $project_cond = ''; - # if ($filter_by_project eq'1'){ - my $project = undef; #$params->{default_project}; - $project = $params->{project} - if ( ( defined $params->{project} ) && ( $params->{project} ne '' ) ); - my $project_name = ''; - $project_name = $project->{name} - if ( ( defined $project ) - && ( defined $project->{name} ) - && ( $project->{name} ne '' ) ); - if ( ( $project_name ne '' ) && ( $project_name ne 'all' ) ) { - $project_cond = '(project=?)'; - push @$bind_values, $project_name; - } + # if ($filter_by_project eq'1'){ + my $project = undef; #$params->{default_project}; + $project = $params->{project} + if ( ( defined $params->{project} ) && ( $params->{project} ne '' ) ); + my $project_name = ''; + $project_name = $project->{name} + if ( ( defined $project ) + && ( defined $project->{name} ) + && ( $project->{name} ne '' ) ); + if ( ( $project_name ne '' ) && ( $project_name ne 'all' ) ) { + $project_cond = '(project=?)'; + push @$bind_values, $project_name; + } - # } + # } - #filter by published, default =1, set to 'all' to see all - my $published_cond = ''; - my $published = $params->{published} || '1'; - if ( ( $published eq '0' ) || ( $published eq '1' ) ) { - $published_cond = 'published=?'; - push @$bind_values, $published; - } + #filter by published, default =1, set to 'all' to see all + my $published_cond = ''; + my $published = $params->{published} || '1'; + if ( ( $published eq '0' ) || ( $published eq '1' ) ) { + $published_cond = 'published=?'; + push @$bind_values, $published; + } - #filter by draft, default =1, set to 'all' to see all - my $draft_cond = ''; - my $draft = $params->{draft} || '0'; - if ( ( $draft eq '0' ) || ( $draft eq '1' ) ) { - $draft_cond = 'draft=?'; - push @$bind_values, $draft; - } + #filter by draft, default =1, set to 'all' to see all + my $draft_cond = ''; + my $draft = $params->{draft} || '0'; + if ( ( $draft eq '0' ) || ( $draft eq '1' ) ) { + $draft_cond = 'draft=?'; + push @$bind_values, $draft; + } - my $disable_event_sync_cond = ''; - my $disable_event_sync = $params->{disable_event_sync} || ''; - if ( ( $disable_event_sync eq '0' ) || ( $disable_event_sync eq '1' ) ) { - $disable_event_sync_cond = 'disable_event_sync=?'; - push @$bind_values, $disable_event_sync; - } + my $disable_event_sync_cond = ''; + my $disable_event_sync = $params->{disable_event_sync} || ''; + if ( ( $disable_event_sync eq '0' ) || ( $disable_event_sync eq '1' ) ) { + $disable_event_sync_cond = 'disable_event_sync=?'; + push @$bind_values, $disable_event_sync; + } - #print STDERR $disable_event_sync_cond." ".$bind_values->[-1]."\n"; + #print STDERR $disable_event_sync_cond." ".$bind_values->[-1]."\n"; - #combine date, location, category, series_name, tag, search and project + #combine date, location, category, series_name, tag, search and project - push @$where_cond, $location_cond if ( $location_cond =~ /\S/ ); - push @$where_cond, $exclude_location_cond - if ( $exclude_location_cond =~ /\S/ ); - push @$where_cond, $exclude_project_cond - if ( $exclude_project_cond =~ /\S/ ); - push @$where_cond, $category_cond if ( $category_cond =~ /\S/ ); - push @$where_cond, $series_name_cond if ( $series_name_cond =~ /\S/ ); - push @$where_cond, $tag_cond if ( $tag_cond =~ /\S/ ); - push @$where_cond, $title_cond if ( $title_cond =~ /\S/ ); - push @$where_cond, $search_cond if ( $search_cond =~ /\S/ ); - push @$where_cond, $project_cond if ( $project_cond =~ /\S/ ); - push @$where_cond, $published_cond if ( $published_cond =~ /\S/ ); - push @$where_cond, $draft_cond if ( $draft_cond =~ /\S/ ); - push @$where_cond, $disable_event_sync_cond - if ( $disable_event_sync_cond ne '' ); + push @$where_cond, $location_cond if ( $location_cond =~ /\S/ ); + push @$where_cond, $exclude_location_cond + if ( $exclude_location_cond =~ /\S/ ); + push @$where_cond, $exclude_project_cond + if ( $exclude_project_cond =~ /\S/ ); + push @$where_cond, $category_cond if ( $category_cond =~ /\S/ ); + push @$where_cond, $series_name_cond if ( $series_name_cond =~ /\S/ ); + push @$where_cond, $tag_cond if ( $tag_cond =~ /\S/ ); + push @$where_cond, $title_cond if ( $title_cond =~ /\S/ ); + push @$where_cond, $search_cond if ( $search_cond =~ /\S/ ); + push @$where_cond, $project_cond if ( $project_cond =~ /\S/ ); + push @$where_cond, $published_cond if ( $published_cond =~ /\S/ ); + push @$where_cond, $draft_cond if ( $draft_cond =~ /\S/ ); + push @$where_cond, $disable_event_sync_cond + if ( $disable_event_sync_cond ne '' ); - #print STDERR Dumper($where_cond); + #print STDERR Dumper($where_cond); - #order is forced - if ( $params->{order} eq 'asc' ) { - $order_cond = 'order by start'; - } elsif ( $params->{order} eq 'desc' ) { - $order_cond = 'order by start desc'; - } else { + #order is forced + if ( $params->{order} eq 'asc' ) { + $order_cond = 'order by start'; + } elsif ( $params->{order} eq 'desc' ) { + $order_cond = 'order by start desc'; + } else { - #derivate order from archive flag - if ( $params->{archive} eq 'past' ) { - $order_cond = 'order by start desc'; - } else { - $order_cond = 'order by start'; - } - } + #derivate order from archive flag + if ( $params->{archive} eq 'past' ) { + $order_cond = 'order by start desc'; + } else { + $order_cond = 'order by start'; + } + } - if ( ( defined $params->{limit} ne '' ) && ( $params->{limit} ne '' ) ) { - $limit_cond = 'limit ' . $params->{limit}; - } + if ( ( defined $params->{limit} ne '' ) && ( $params->{limit} ne '' ) ) { + $limit_cond = 'limit ' . $params->{limit}; + } - my $query = qq{ + my $query = qq{ select date(e.start) start_date ,date(e.end) end_date @@ -1050,179 +1080,183 @@ sub get_query { ,e.disable_event_sync ,e.episode }; - my $template = $params->{template} || ''; + my $template = $params->{template} || ''; - $query .= ',e.excerpt' unless ( $template =~ /menu/ ); + $query .= ',e.excerpt' unless ( $template =~ /menu/ ); - # $query.=',e.project' unless ($template=~/menu/ || $template=~/list/); + # $query.=',e.project' unless ($template=~/menu/ || $template=~/list/); - my $get = $params->{get} || ''; - unless ( $get eq 'no_content' ) { - if ( $template =~ /\.html/ ) { - unless ( $template =~ /menu/ || $template =~ /list/ ) { - $query .= ', e.content, e.topic, e.html_content, e.html_topic'; + my $get = $params->{get} || ''; + unless ( $get eq 'no_content' ) { + if ( $template =~ /\.html/ ) { + unless ( $template =~ /menu/ || $template =~ /list/ ) { + $query .= ', e.content, e.topic, e.html_content, e.html_topic'; - #$query.=',html_content content, html_topic topic' ; - } - } else { - unless ( $template =~ /menu/ || $template =~ /list/ ) { - $query .= ', e.content, e.topic, e.html_content, e.html_topic'; - } - } - } + #$query.=',html_content content, html_topic topic' ; + } + } else { + unless ( $template =~ /menu/ || $template =~ /list/ ) { + $query .= ', e.content, e.topic, e.html_content, e.html_topic'; + } + } + } - # add project id and series id - if ( ( $params->{project_id} ne '' ) || ( $params->{studio_id} ne '' ) ) { - if ( $params->{project_id} ne '' ) { - push @$where_cond, 'se.project_id=?'; - push @$bind_values, $params->{project_id}; - $query .= ', se.project_id'; - } - if ( $params->{studio_id} ne '' ) { - push @$where_cond, 'se.studio_id=?'; - push @$bind_values, $params->{studio_id}; - $query .= ', se.studio_id'; - } - #push @$where_cond, 'se.event_id=e.id'; - } + # add project id and series id + if ( ( $params->{project_id} ne '' ) || ( $params->{studio_id} ne '' ) ) { + if ( $params->{project_id} ne '' ) { + push @$where_cond, 'se.project_id=?'; + push @$bind_values, $params->{project_id}; + $query .= ', se.project_id'; + } + if ( $params->{studio_id} ne '' ) { + push @$where_cond, 'se.studio_id=?'; + push @$bind_values, $params->{studio_id}; + $query .= ', se.studio_id'; + } - # add recordings field and conditions - if ($params->{recordings} eq '1' ) { - $query .= ', ar.path'; - $query .= ', ar.size'; - $query .= ', ar.created_by uploaded_by'; - $query .= ', ar.modified_at uploaded_at'; - #push @$where_cond, 'e.id=ar.event_id'; - } - - $query .= "\n from"; - - # add tables - if ( ( $params->{project_id} ne '' ) || ( $params->{studio_id} ne '' ) ) { - # prepent series_events - $query .= "\n calcms_series_events se inner join calcms_events e on se.event_id=e.id"; - }else{ - $query .= "\n calcms_events e"; - } + #push @$where_cond, 'se.event_id=e.id'; + } - # add recordings table - if ( $params->{recordings} eq '1' ) { - $query .= "\n left join calcms_audio_recordings ar on e.id=ar.event_id"; - } + # add recordings field and conditions + if ( $params->{recordings} eq '1' ) { + $query .= ', ar.path'; + $query .= ', ar.size'; + $query .= ', ar.created_by uploaded_by'; + $query .= ', ar.modified_at uploaded_at'; - if ( scalar @$where_cond > 0 ) { - $query .= "\nwhere " . join( ' and ', @$where_cond ); - } + #push @$where_cond, 'e.id=ar.event_id'; + } - $query .= "\n" . $order_cond if ( $order_cond ne '' ); - $query .= "\n" . $limit_cond if ( $limit_cond ne '' ); + $query .= "\n from"; - #print STDERR Dumper($query).Dumper($bind_values)."\n"; + # add tables + if ( ( $params->{project_id} ne '' ) || ( $params->{studio_id} ne '' ) ) { - return ( \$query, $bind_values ); + # prepent series_events + $query .= "\n calcms_series_events se inner join calcms_events e on se.event_id=e.id"; + } else { + $query .= "\n calcms_events e"; + } + + # add recordings table + if ( $params->{recordings} eq '1' ) { + $query .= "\n left join calcms_audio_recordings ar on e.id=ar.event_id"; + } + + if ( scalar @$where_cond > 0 ) { + $query .= "\nwhere " . join( ' and ', @$where_cond ); + } + + $query .= "\n" . $order_cond if ( $order_cond ne '' ); + $query .= "\n" . $limit_cond if ( $limit_cond ne '' ); + + #print STDERR Dumper($query).Dumper($bind_values)."\n"; + + return ( \$query, $bind_values ); } sub render { - # my $response = $_[0]; - my $config = $_[1]; - my $request = $_[2]; - my $results = $_[3]; - my $root_params = $_[4]; + # my $response = $_[0]; + my $config = $_[1]; + my $request = $_[2]; + my $results = $_[3]; + my $root_params = $_[4]; - my $params = $request->{params}->{checked}; - if ( ref($root_params) eq 'HASH' ) { - for my $param ( keys %$root_params ) { - $params->{$param} = $root_params->{$param}; - } - } - my $debug = $config->{system}->{debug}; + my $params = $request->{params}->{checked}; + if ( ref($root_params) eq 'HASH' ) { + for my $param ( keys %$root_params ) { + $params->{$param} = $root_params->{$param}; + } + } + my $debug = $config->{system}->{debug}; - my %template_parameters = %$params; - my $template_parameters = \%template_parameters; - $template_parameters->{events} = $results; - $template_parameters->{debug} = $debug; - $template_parameters->{server_cache} = $config->{cache}->{server_cache} - if ( $config->{cache}->{server_cache} ); - $template_parameters->{use_client_cache} = $config->{cache}->{use_client_cache} - if ( $config->{cache}->{use_client_cache} ); + my %template_parameters = %$params; + my $template_parameters = \%template_parameters; + $template_parameters->{events} = $results; + $template_parameters->{debug} = $debug; + $template_parameters->{server_cache} = $config->{cache}->{server_cache} + if ( $config->{cache}->{server_cache} ); + $template_parameters->{use_client_cache} = $config->{cache}->{use_client_cache} + if ( $config->{cache}->{use_client_cache} ); - if ( scalar @$results > 0 ) { - my $result = $results->[0]; - $template_parameters->{event_id} = $result->{event_id}; - $template_parameters->{event_dtstart} = $result->{dtstart}; - } + if ( scalar @$results > 0 ) { + my $result = $results->[0]; + $template_parameters->{event_id} = $result->{event_id}; + $template_parameters->{event_dtstart} = $result->{dtstart}; + } - # $template_parameters->{print} =1 if ($params->{print} eq '1'); - $template_parameters->{base_url} = $config->{locations}->{base_url}; - $template_parameters->{base_domain} = $config->{locations}->{base_domain}; - $template_parameters->{cache_base_url} = $config->{cache}->{base_url}; - $template_parameters->{modified_at} = time::time_to_datetime( time() ); - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(\.xml)/ ) ) - { - $template_parameters->{modified_at_datetime_utc} = - time::datetime_to_utc_datetime( $template_parameters->{modified_at}, $config->{date}->{time_zone} ); - } + # $template_parameters->{print} =1 if ($params->{print} eq '1'); + $template_parameters->{base_url} = $config->{locations}->{base_url}; + $template_parameters->{base_domain} = $config->{locations}->{base_domain}; + $template_parameters->{cache_base_url} = $config->{cache}->{base_url}; + $template_parameters->{modified_at} = time::time_to_datetime( time() ); + if ( ( defined $params->{template} ) + && ( $params->{template} =~ /(\.xml)/ ) ) + { + $template_parameters->{modified_at_datetime_utc} = + time::datetime_to_utc_datetime( $template_parameters->{modified_at}, $config->{date}->{time_zone} ); + } - #$template_parameters->{tags} = $tags; + #$template_parameters->{tags} = $tags; - if ( @$results == 0 ) { - if ( ( $params->{search} ne '' ) - || ( $params->{category} ne '' ) - || ( $params->{series_name} ne '' ) ) - { - $template_parameters->{no_search_result} = '1'; - } else { - $template_parameters->{no_result} = '1'; - } - } else { - if ( ( !defined $params->{event_id} ) || ( $params->{event_id} eq '' ) ) { - $template_parameters->{event_count} = @$results . ''; - $template_parameters->{first_of_list} = $results->[0]->{event_id}; - } - my $start = $results->[0]->{start_datetime} || ''; - if ( $start =~ /(\d{4}\-\d{2})/ ) { - $template_parameters->{month} = $1; - } - } + if ( @$results == 0 ) { + if ( ( $params->{search} ne '' ) + || ( $params->{category} ne '' ) + || ( $params->{series_name} ne '' ) ) + { + $template_parameters->{no_search_result} = '1'; + } else { + $template_parameters->{no_result} = '1'; + } + } else { + if ( ( !defined $params->{event_id} ) || ( $params->{event_id} eq '' ) ) { + $template_parameters->{event_count} = @$results . ''; + $template_parameters->{first_of_list} = $results->[0]->{event_id}; + } + my $start = $results->[0]->{start_datetime} || ''; + if ( $start =~ /(\d{4}\-\d{2})/ ) { + $template_parameters->{month} = $1; + } + } - my $time_diff = time::utc_offset( $config->{date}->{time_zone} ); - $time_diff =~ s/(\d\d)(\d\d)/$1\:$2/g; - $template_parameters->{time_zone} = $config->{date}->{time_zone}; - $template_parameters->{utc_offset} = $time_diff; + my $time_diff = time::utc_offset( $config->{date}->{time_zone} ); + $time_diff =~ s/(\d\d)(\d\d)/$1\:$2/g; + $template_parameters->{time_zone} = $config->{date}->{time_zone}; + $template_parameters->{utc_offset} = $time_diff; - if ( $params->{template} =~ /\.atom\.xml/ ) { - $template_parameters->{modified_at} =~ s/ /T/gi; - $template_parameters->{modified_at} .= $time_diff; - } elsif ( $params->{template} =~ /\.rss\.xml/ ) { - $template_parameters->{modified_at} = - time::datetime_to_rfc822( $template_parameters->{modified_at} ); - } elsif ( $params->{template} =~ /\.txt/ ) { - $template_parameters->{modified_at_utc} = - time::datetime_to_utc( $template_parameters->{modified_at}, $config->{date}->{time_zone} ); - } + if ( $params->{template} =~ /\.atom\.xml/ ) { + $template_parameters->{modified_at} =~ s/ /T/gi; + $template_parameters->{modified_at} .= $time_diff; + } elsif ( $params->{template} =~ /\.rss\.xml/ ) { + $template_parameters->{modified_at} = + time::datetime_to_rfc822( $template_parameters->{modified_at} ); + } elsif ( $params->{template} =~ /\.txt/ ) { + $template_parameters->{modified_at_utc} = + time::datetime_to_utc( $template_parameters->{modified_at}, $config->{date}->{time_zone} ); + } - my $project = $params->{default_project}; - foreach my $key ( keys %$project ) { - $template_parameters->{ 'project_' . $key } = $project->{$key}; - } - $template_parameters->{ 'project_' . $project->{name} } = 1 - if ( $project->{name} ne '' ); + my $project = $params->{default_project}; + foreach my $key ( keys %$project ) { + $template_parameters->{ 'project_' . $key } = $project->{$key}; + } + $template_parameters->{ 'project_' . $project->{name} } = 1 + if ( $project->{name} ne '' ); - $template_parameters->{controllers} = $config->{controllers}; - $template_parameters->{hide_event_images}=1 if (defined $config->{permissions}->{hide_event_images}) && ($config->{permissions}->{hide_event_images} == 1); + $template_parameters->{controllers} = $config->{controllers}; + $template_parameters->{hide_event_images} = 1 + if ( defined $config->{permissions}->{hide_event_images} ) && ( $config->{permissions}->{hide_event_images} == 1 ); - # use Data::Dumper;print STDERR Dumper($template_parameters)."\n"; + # use Data::Dumper;print STDERR Dumper($template_parameters)."\n"; template::process( $_[0], $params->{template}, $template_parameters ); - return $_[0]; + return $_[0]; } sub get_running_event_id { - my $dbh = shift; + my $dbh = shift; - my $query = qq{ + my $query = qq{ select id event_id, start, title from calcms_events where @@ -1238,108 +1272,106 @@ sub get_running_event_id { limit 1 }; - my $running_events = db::get( $dbh, $query ); - my @running_events = @$running_events; + my $running_events = db::get( $dbh, $query ); + my @running_events = @$running_events; - return $running_events->[0]->{event_id} if ( scalar @running_events > 0 ); - return 0; + return $running_events->[0]->{event_id} if ( scalar @running_events > 0 ); + return 0; } # add filters to query sub setDefaultEventConditions { - my $config = shift; - my $conditions = $_[0]; - my $bind_values = $_[1]; + my $config = shift; + my $conditions = $_[0]; + my $bind_values = $_[1]; my $options = $_[2]; - $options={} unless defined $options; + $options = {} unless defined $options; - # exclude projects - if ( - ( defined $options->{exclude_projects} ) + # exclude projects + if ( ( defined $options->{exclude_projects} ) && ( $options->{exclude_projects} == 1 ) && ( defined $config->{filter} ) - && ( defined $config->{filter}->{projects_to_exclude} ) ) - { - my @projects_to_exclude = - split( /,/, $config->{filter}->{projects_to_exclude} ); - push @$conditions, 'project not in (' . join( ",", map { '?' } @projects_to_exclude ) . ')'; - for my $project (@projects_to_exclude) { - push @$bind_values, $project; - } - } + && ( defined $config->{filter}->{projects_to_exclude} ) ) + { + my @projects_to_exclude = + split( /,/, $config->{filter}->{projects_to_exclude} ); + push @$conditions, 'project not in (' . join( ",", map { '?' } @projects_to_exclude ) . ')'; + for my $project (@projects_to_exclude) { + push @$bind_values, $project; + } + } - # exclude locations - if ( - ( defined $options->{exclude_locations} ) + # exclude locations + if ( ( defined $options->{exclude_locations} ) && ( $options->{exclude_locations} == 1 ) - && ( defined $config->{filter} ) - && ( defined $config->{filter}->{locations_to_exclude} ) ) - { - my @locations_to_exclude = - split( /,/, $config->{filter}->{locations_to_exclude} ); - push @$conditions, 'location not in (' . join( ",", map { '?' } @locations_to_exclude ) . ')'; - for my $location (@locations_to_exclude) { - push @$bind_values, $location; - } - } + && ( defined $config->{filter} ) + && ( defined $config->{filter}->{locations_to_exclude} ) ) + { + my @locations_to_exclude = + split( /,/, $config->{filter}->{locations_to_exclude} ); + push @$conditions, 'location not in (' . join( ",", map { '?' } @locations_to_exclude ) . ')'; + for my $location (@locations_to_exclude) { + push @$bind_values, $location; + } + } } # for local use only or add support for exclude_projects and exclude_locations sub getEventById { - my $dbh = shift; - my $config = shift; - my $event_id = shift; + my $dbh = shift; + my $config = shift; + my $event_id = shift; my $options = shift; - $dbh = db::connect($config) unless defined $dbh; + $dbh = db::connect($config) unless defined $dbh; - my $conditions = []; - my $bind_values = []; + my $conditions = []; + my $bind_values = []; - push @$conditions, "id=?"; - push @$bind_values, $event_id; + push @$conditions, "id=?"; + push @$bind_values, $event_id; - setDefaultEventConditions( $config, $conditions, $bind_values, $options ); - $conditions = join( ' and ', @$conditions ); + setDefaultEventConditions( $config, $conditions, $bind_values, $options ); + $conditions = join( ' and ', @$conditions ); - my $query = qq{ + my $query = qq{ select * from calcms_events where $conditions }; - my $events = db::get( $dbh, $query, $bind_values ); - return $events; + my $events = db::get( $dbh, $query, $bind_values ); + return $events; } sub get_next_event_of_series { - my $dbh = shift; - my $config = shift; + my $dbh = shift; + my $config = shift; my $options = shift; my $eventId = $options->{event_id}; return undef unless defined $eventId; - $dbh = db::connect($config) unless defined $dbh; + $dbh = db::connect($config) unless defined $dbh; - my $events = getEventById( $dbh, $config, $eventId, $options ); - return undef unless scalar(@$events) == 1; - my $event = $events->[0]; + my $events = getEventById( $dbh, $config, $eventId, $options ); + return undef unless scalar(@$events) == 1; + my $event = $events->[0]; - my $conditions = []; - my $bind_values = []; + my $conditions = []; + my $bind_values = []; - push @$conditions, "start>?"; - push @$bind_values, $event->{start}; + push @$conditions, "start>?"; + push @$bind_values, $event->{start}; - push @$conditions, "series_name=?"; - push @$bind_values, $event->{series_name}; + push @$conditions, "series_name=?"; + push @$bind_values, $event->{series_name}; - setDefaultEventConditions( $config, $conditions, $bind_values, $options ); - $conditions = join( ' and ', @$conditions ); + setDefaultEventConditions( $config, $conditions, $bind_values, $options ); + $conditions = join( ' and ', @$conditions ); - my $query = qq{ + my $query = qq{ select id from calcms_events where $conditions @@ -1347,495 +1379,497 @@ sub get_next_event_of_series { limit 1 }; - $events = db::get( $dbh, $query, $bind_values ); - return undef unless @$events == 1; + $events = db::get( $dbh, $query, $bind_values ); + return undef unless @$events == 1; - return $events->[0]->{id}; + return $events->[0]->{id}; } sub get_previous_event_of_series { - my $dbh = shift; - my $config = shift; - my $options = shift; + my $dbh = shift; + my $config = shift; + my $options = shift; my $eventId = $options->{event_id}; return undef unless defined $eventId; - $dbh = db::connect($config) unless defined $dbh; - my $events = getEventById( $dbh, $config, $eventId, $options ); - return undef unless scalar(@$events) == 1; - my $event = $events->[0]; + $dbh = db::connect($config) unless defined $dbh; + my $events = getEventById( $dbh, $config, $eventId, $options ); + return undef unless scalar(@$events) == 1; + my $event = $events->[0]; - my $conditions = []; - my $bind_values = []; + my $conditions = []; + my $bind_values = []; - push @$conditions, "start{start}; + push @$conditions, "start{start}; - push @$conditions, "series_name=?"; - push @$bind_values, $event->{series_name}; + push @$conditions, "series_name=?"; + push @$bind_values, $event->{series_name}; - setDefaultEventConditions( $config, $conditions, $bind_values, $options ); - $conditions = join( ' and ', @$conditions ); + setDefaultEventConditions( $config, $conditions, $bind_values, $options ); + $conditions = join( ' and ', @$conditions ); - my $query = qq{ + my $query = qq{ select id from calcms_events where $conditions order by start desc limit 1 }; - $events = db::get( $dbh, $query, $bind_values ); + $events = db::get( $dbh, $query, $bind_values ); - return undef unless scalar(@$events) == 1; - return $events->[0]->{id}; + return undef unless scalar(@$events) == 1; + return $events->[0]->{id}; } +# used by calendar sub get_by_date_range { - my $dbh = shift; - my $config = shift; - my $start_date = shift; - my $end_date = shift; + my $dbh = shift; + my $config = shift; + my $start_date = shift; + my $end_date = shift; my $options = shift; - my $conditions = []; - push @$conditions, 'start_date between ? and ?'; - my $bind_values = [ $start_date, $end_date ]; + my $conditions = []; + push @$conditions, 'start_date between ? and ?'; + my $bind_values = [ $start_date, $end_date ]; - setDefaultEventConditions( $config, $conditions, $bind_values, $options ); + setDefaultEventConditions( $config, $conditions, $bind_values, $options ); - $conditions = join( ' and ', @$conditions ); + $conditions = join( ' and ', @$conditions ); - my $query = qq{ + my $query = qq{ select start_date from calcms_events where $conditions group by start_date }; - my $events = db::get( $dbh, $query, $bind_values ); + my $events = db::get( $dbh, $query, $bind_values ); - return $events; + return $events; } sub get_by_image { - my $dbh = shift; - my $config = shift; - my $filename = shift; + my $dbh = shift; + my $config = shift; + my $filename = shift; - #$filename=$dbh->quote('%'.$filename.'%'); + #$filename=$dbh->quote('%'.$filename.'%'); - #$filename='%'.$filename.'%'; - my $query = qq{ + #$filename='%'.$filename.'%'; + my $query = qq{ select * from calcms_events where content like ? order by start desc limit 1 }; - my $bind_values = [ '%' . $filename . '%' ]; + my $bind_values = [ '%' . $filename . '%' ]; - my $events = db::get( $dbh, $query, $bind_values ); + my $events = db::get( $dbh, $query, $bind_values ); - # print STDERR Dumper($events); - return undef if ( @$events == 0 ); - return $events->[0]; + # print STDERR Dumper($events); + return undef if ( @$events == 0 ); + return $events->[0]; } sub delete { - return; - my $request = shift; - my $config = shift; - my $event_id = shift; + return; + my $request = shift; + my $config = shift; + my $event_id = shift; - my $params = $request->{params}->{checked}; - my $debug = $config->{system}->{debug}; + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - my $dbh = db::connect($config); + my $dbh = db::connect($config); - my $query = 'delete from calcms_events where id=?'; - db::put( $dbh, $query, [$event_id] ); + my $query = 'delete from calcms_events where id=?'; + db::put( $dbh, $query, [$event_id] ); - $query = 'delete from calcms_categories where id=?'; - db::put( $dbh, $query, [$event_id] ); + $query = 'delete from calcms_categories where id=?'; + db::put( $dbh, $query, [$event_id] ); - $query = 'delete from calcms_tags where id=?'; - db::put( $dbh, $query, [$event_id] ); + $query = 'delete from calcms_tags where id=?'; + db::put( $dbh, $query, [$event_id] ); - $query = 'delete from calcms_series_events where event_id=?'; - db::put( $dbh, $query, [$event_id] ); + $query = 'delete from calcms_series_events where event_id=?'; + db::put( $dbh, $query, [$event_id] ); } #TODO: add location to cache map sub configure_cache { - my $config = shift; - my $debug = $config->{system}->{debug}; + my $config = shift; + my $debug = $config->{system}->{debug}; - my $date_pattern = $cache::date_pattern; - my $controllers = $config->{controllers}; + my $date_pattern = $cache::date_pattern; + my $controllers = $config->{controllers}; - cache::init(); - cache::add_map( '', 'index.html' ); + cache::init(); + cache::add_map( '', 'index.html' ); - my $name = ''; - my $extension = ''; - my $templates = $config->{templates}->{events}; + my $name = ''; + my $extension = ''; + my $templates = $config->{templates}->{events}; - for my $template (@$templates) { - if ( $template =~ /^(.+)\.([^\.]+)$/ ) { - $name = $1; - $extension = $2; - } - cache::add_map( 'template=' . $template, $controllers->{events} . '/' . $name . '.' . $extension ); - cache::add_map( 'template=' . $template . '&date=today', $controllers->{events} . '/' . $template . '_today.' . $extension ); - cache::add_map( 'template=' . $template . '&date=' . $date_pattern, - $controllers->{events} . '/' . $name . '_date_$1-$2-$3.' . $extension ); - cache::add_map( 'template=' . $template . '&time=now', $controllers->{events} . '/' . $template . '_now.html' ); - cache::add_map( 'template=' . $template . '&time=now&limit=(\d+)', - $controllers->{events} . '/' . $name . '_now_limit_$1.' . $extension ); - cache::add_map( - 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern, - $controllers->{events} . '/' . $name . '_from_$1-$2-$3_till_$4_$5_$6.' . $extension - ); - cache::add_map( - 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern . '&weekday=(\d)', - $controllers->{events} . '/' . $template . '_from_$1-$2-$3_till_$4_$5_$6_weekday_$7.' . $extension - ); - cache::add_map( - 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern . '&limit=(\d)', - $controllers->{events} . '/' . $template . '_from_$1-$2-$3_till_$4_$5_$6_limit_$7.' . $extension - ); - cache::add_map( 'template=' . $template . '&weekday=(\d)', $controllers->{events} . '/' . $name . '_weekday_$1.' . $extension ); - cache::add_map( 'template=' . $template . '&event_id=(\d+)', $controllers->{event} . '/' . $name . '_page_$1.' . $extension ); - } + for my $template (@$templates) { + if ( $template =~ /^(.+)\.([^\.]+)$/ ) { + $name = $1; + $extension = $2; + } + cache::add_map( 'template=' . $template, $controllers->{events} . '/' . $name . '.' . $extension ); + cache::add_map( 'template=' . $template . '&date=today', $controllers->{events} . '/' . $template . '_today.' . $extension ); + cache::add_map( 'template=' . $template . '&date=' . $date_pattern, + $controllers->{events} . '/' . $name . '_date_$1-$2-$3.' . $extension ); + cache::add_map( 'template=' . $template . '&time=now', $controllers->{events} . '/' . $template . '_now.html' ); + cache::add_map( 'template=' . $template . '&time=now&limit=(\d+)', + $controllers->{events} . '/' . $name . '_now_limit_$1.' . $extension ); + cache::add_map( + 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern, + $controllers->{events} . '/' . $name . '_from_$1-$2-$3_till_$4_$5_$6.' . $extension + ); + cache::add_map( + 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern . '&weekday=(\d)', + $controllers->{events} . '/' . $template . '_from_$1-$2-$3_till_$4_$5_$6_weekday_$7.' . $extension + ); + cache::add_map( + 'template=' . $template . '&from_date=' . $date_pattern . '&till_date=' . $date_pattern . '&limit=(\d)', + $controllers->{events} . '/' . $template . '_from_$1-$2-$3_till_$4_$5_$6_limit_$7.' . $extension + ); + cache::add_map( 'template=' . $template . '&weekday=(\d)', $controllers->{events} . '/' . $name . '_weekday_$1.' . $extension ); + cache::add_map( 'template=' . $template . '&event_id=(\d+)', $controllers->{event} . '/' . $name . '_page_$1.' . $extension ); + } } sub get_duration { - my $config = shift; - my $event = shift; - my $timezone = $config->{date}->{time_zone}; - my $start = time::get_datetime( $event->{start}, $timezone ); - my $end = time::get_datetime( $event->{end}, $timezone ); - #my $seconds = $end->subtract($start)->in_units("minutes"); - #return $seconds; - return undef unless defined $start; - return undef unless defined $end; - my $duration = $end->epoch() - $start->epoch(); - #print STDERR "duration=$duration, end=".$end->datetime()." start=".$start->datetime()."\n"; - return $duration / 60; + my $config = shift; + my $event = shift; + my $timezone = $config->{date}->{time_zone}; + my $start = time::get_datetime( $event->{start}, $timezone ); + my $end = time::get_datetime( $event->{end}, $timezone ); + + #my $seconds = $end->subtract($start)->in_units("minutes"); + #return $seconds; + return undef unless defined $start; + return undef unless defined $end; + my $duration = $end->epoch() - $start->epoch(); + + #print STDERR "duration=$duration, end=".$end->datetime()." start=".$start->datetime()."\n"; + return $duration / 60; } sub check_params { - my $config = shift; - my $params = shift; + my $config = shift; + my $params = shift; - #define running at - my $running_at = $params->{running_at} || ''; - if ( ( defined $running_at ) && ( $running_at ne '' ) ) { - my $run_date = time::check_date($running_at); - my $run_time = time::check_time($running_at); - if ( ( $run_date ne '' ) && ( $run_time ne '' ) ) { - $params->{till_date} = $run_date; - $params->{till_time} = $run_time; - $params->{order} = 'asc'; - $params->{limit} = 1; - $params->{archive} = 'all'; - } - } + #define running at + my $running_at = $params->{running_at} || ''; + if ( ( defined $running_at ) && ( $running_at ne '' ) ) { + my $run_date = time::check_date($running_at); + my $run_time = time::check_time($running_at); + if ( ( $run_date ne '' ) && ( $run_time ne '' ) ) { + $params->{till_date} = $run_date; + $params->{till_time} = $run_time; + $params->{order} = 'asc'; + $params->{limit} = 1; + $params->{archive} = 'all'; + } + } - #set time - my $time = time::check_time( $params->{time} ); - my $from_time = time::check_time( $params->{from_time} ); - my $till_time = time::check_time( $params->{till_time} ); + #set time + my $time = time::check_time( $params->{time} ); + my $from_time = time::check_time( $params->{from_time} ); + my $till_time = time::check_time( $params->{till_time} ); - #set date - my $date = ''; - my $from_date = time::check_date( $params->{from_date} ); - my $till_date = time::check_date( $params->{till_date} ); - if ( ( $from_date eq '' ) && ( $till_date eq '' ) ) { - $date = time::check_date( $params->{date} ); - } + #set date + my $date = ''; + my $from_date = time::check_date( $params->{from_date} ); + my $till_date = time::check_date( $params->{till_date} ); + if ( ( $from_date eq '' ) && ( $till_date eq '' ) ) { + $date = time::check_date( $params->{date} ); + } - #set date interval (including) - my $date_range_include = 0; - $date_range_include = 1 - if ( defined $params->{date_range_include} ) - && ( $params->{date_range_include} eq '1' ); + #set date interval (including) + my $date_range_include = 0; + $date_range_include = 1 + if ( defined $params->{date_range_include} ) + && ( $params->{date_range_include} eq '1' ); - my $order = ''; - if ( defined $params->{order} ) { - $order = 'desc' if ( $params->{order} eq 'desc' ); - $order = 'asc' if ( $params->{order} eq 'asc' ); - } + my $order = ''; + if ( defined $params->{order} ) { + $order = 'desc' if ( $params->{order} eq 'desc' ); + $order = 'asc' if ( $params->{order} eq 'asc' ); + } - my $weekday = $params->{weekday} || ''; + my $weekday = $params->{weekday} || ''; - if ( ( defined $weekday ) && ( $weekday ne '' ) ) { - if ( $weekday =~ /\d/ ) { - $weekday = int($weekday); - log::error( $config, 'invalid weekday' ) - if ( $weekday < 1 || $weekday > 7 ); - } else { - log::error( $config, 'invalid weekday' ); - } - } + if ( ( defined $weekday ) && ( $weekday ne '' ) ) { + if ( $weekday =~ /\d/ ) { + $weekday = int($weekday); + log::error( $config, 'invalid weekday' ) + if ( $weekday < 1 || $weekday > 7 ); + } else { + log::error( $config, 'invalid weekday' ); + } + } - my $time_of_day = $params->{time_of_day} || ''; - my $found = 0; - if ( defined $time_of_day ) { - for my $key ( 'night', 'morning', 'noon', 'afternoon', 'evening' ) { - $found = 1 if ( $key eq $time_of_day ); - } - log::error( $config, 'invalid time_of_day' ) - if ( ( $time_of_day ne '' ) && ( $found == 0 ) ); - } + my $time_of_day = $params->{time_of_day} || ''; + my $found = 0; + if ( defined $time_of_day ) { + for my $key ( 'night', 'morning', 'noon', 'afternoon', 'evening' ) { + $found = 1 if ( $key eq $time_of_day ); + } + log::error( $config, 'invalid time_of_day' ) + if ( ( $time_of_day ne '' ) && ( $found == 0 ) ); + } - my $tag = $params->{tag} || ''; - if ( ( defined $tag ) && ( $tag ne '' ) ) { - log::error( $config, "invalid tag" ) if ( $tag =~ /\s/ ); - log::error( $config, "invalid tag" ) if ( $tag =~ /\;/ ); - $tag =~ s/\'//gi; - } + my $tag = $params->{tag} || ''; + if ( ( defined $tag ) && ( $tag ne '' ) ) { + log::error( $config, "invalid tag" ) if ( $tag =~ /\s/ ); + log::error( $config, "invalid tag" ) if ( $tag =~ /\;/ ); + $tag =~ s/\'//gi; + } - my $category = $params->{category} || ''; - if ( ( defined $category ) && ( $category ne '' ) ) { - log::error( $config, "invalid category" ) if ( $category =~ /\;/ ); - $category =~ s/^\s+//gi; - $category =~ s/\s+$//gi; - $category =~ s/\'//gi; - } + my $category = $params->{category} || ''; + if ( ( defined $category ) && ( $category ne '' ) ) { + log::error( $config, "invalid category" ) if ( $category =~ /\;/ ); + $category =~ s/^\s+//gi; + $category =~ s/\s+$//gi; + $category =~ s/\'//gi; + } - my $series_name = $params->{series_name} || ''; - if ( ( defined $series_name ) && ( $series_name ne '' ) ) { - log::error( $config, "invalid series_name" ) - if ( $series_name =~ /\;/ ); - $series_name =~ s/^\s+//gi; - $series_name =~ s/\s+$//gi; - $series_name =~ s/\'//gi; - } + my $series_name = $params->{series_name} || ''; + if ( ( defined $series_name ) && ( $series_name ne '' ) ) { + log::error( $config, "invalid series_name" ) + if ( $series_name =~ /\;/ ); + $series_name =~ s/^\s+//gi; + $series_name =~ s/\s+$//gi; + $series_name =~ s/\'//gi; + } - my $title = $params->{title} || ''; - if ( ( defined $title ) && ( $title ne '' ) ) { - log::error( $config, "invalid title" ) if ( $title =~ /\;/ ); - $title =~ s/^\s+//gi; - $title =~ s/\s+$//gi; - $title =~ s/\'//gi; - } + my $title = $params->{title} || ''; + if ( ( defined $title ) && ( $title ne '' ) ) { + log::error( $config, "invalid title" ) if ( $title =~ /\;/ ); + $title =~ s/^\s+//gi; + $title =~ s/\s+$//gi; + $title =~ s/\'//gi; + } - my $location = $params->{location} || ''; - if ( ( defined $location ) && ( $location ne '' ) ) { - log::error( $config, "invalid location" ) if ( $location =~ /\;/ ); - $location =~ s/^\s+//gi; - $location =~ s/\s+$//gi; - $location =~ s/\'//gi; - } + my $location = $params->{location} || ''; + if ( ( defined $location ) && ( $location ne '' ) ) { + log::error( $config, "invalid location" ) if ( $location =~ /\;/ ); + $location =~ s/^\s+//gi; + $location =~ s/\s+$//gi; + $location =~ s/\'//gi; + } - #if no location is set, use exclude location filter from default config - my $locations_to_exclude = ''; - if ( ( $location eq '' ) - && ( defined $config->{filter} ) - && ( defined $config->{filter}->{locations_to_exclude} ) ) - { - $locations_to_exclude = $config->{filter}->{locations_to_exclude} || ''; - $locations_to_exclude =~ s/\s+/ /g; - } + #if no location is set, use exclude location filter from default config + my $locations_to_exclude = ''; + if ( ( $location eq '' ) + && ( defined $config->{filter} ) + && ( defined $config->{filter}->{locations_to_exclude} ) ) + { + $locations_to_exclude = $config->{filter}->{locations_to_exclude} || ''; + $locations_to_exclude =~ s/\s+/ /g; + } - my $projects_to_exclude = ''; - if ( ( defined $config->{filter} ) - && ( defined $config->{filter}->{projects_to_exclude} ) ) - { - $projects_to_exclude = $config->{filter}->{projects_to_exclude} || ''; - $projects_to_exclude =~ s/\s+/ /g; - } + my $projects_to_exclude = ''; + if ( ( defined $config->{filter} ) + && ( defined $config->{filter}->{projects_to_exclude} ) ) + { + $projects_to_exclude = $config->{filter}->{projects_to_exclude} || ''; + $projects_to_exclude =~ s/\s+/ /g; + } + #enable exclude locations filter + my $exclude_locations = 0; + $exclude_locations = 1 if ( defined $params->{exclude_locations} ) && ( $params->{exclude_locations} eq '1' ); - #enable exclude locations filter - my $exclude_locations = 0; - $exclude_locations = 1 if ( defined $params->{exclude_locations} ) && ( $params->{exclude_locations} eq '1' ) ; + my $exclude_projects = 0; + $exclude_projects = 1 if ( defined $params->{exclude_projects} ) && ( $params->{exclude_projects} eq '1' ); - my $exclude_projects = 0; - $exclude_projects = 1 if ( defined $params->{exclude_projects} ) && ( $params->{exclude_projects} eq '1' ) ; + my $exclude_event_images = 0; + $exclude_event_images = 1 if ( defined $params->{exclude_event_images} ) && ( $params->{exclude_event_images} eq '1' ); - my $exclude_event_images = 0; - $exclude_event_images = 1 if ( defined $params->{exclude_event_images} ) && ( $params->{exclude_event_images} eq '1' ) ; + #show future events by default + my $archive = 'future'; + if ( defined $params->{archive} ) { + $archive = 'all' if ( $params->{archive} eq 'all' ); + $archive = 'past' if ( $params->{archive} eq 'gone' ); + $archive = 'future' if ( $params->{archive} eq 'coming' ); + } - #show future events by default - my $archive = 'future'; - if ( defined $params->{archive} ) { - $archive = 'all' if ( $params->{archive} eq 'all' ); - $archive = 'past' if ( $params->{archive} eq 'gone' ); - $archive = 'future' if ( $params->{archive} eq 'coming' ); - } + my $disable_event_sync = ''; + if ( ( defined $params->{disable_event_sync} ) + && ( $params->{disable_event_sync} =~ /([01])/ ) ) + { + $disable_event_sync = $1; + } - my $disable_event_sync = ''; - if ( ( defined $params->{disable_event_sync} ) - && ( $params->{disable_event_sync} =~ /([01])/ ) ) - { - $disable_event_sync = $1; - } + #show all on defined timespans + if ( ( $from_date ne '' ) && ( $till_date ne '' ) ) { + $archive = 'all'; + } - #show all on defined timespans - if ( ( $from_date ne '' ) && ( $till_date ne '' ) ) { - $archive = 'all'; - } + my $event_id = $params->{event_id} || ''; + if ( ( defined $event_id ) && ( $event_id ne '' ) ) { + if ( $event_id =~ /(\d+)/ ) { + $event_id = $1; + } else { + log::error( $config, "invalid event_id" ); + } + } - my $event_id = $params->{event_id} || ''; - if ( ( defined $event_id ) && ( $event_id ne '' ) ) { - if ( $event_id =~ /(\d+)/ ) { - $event_id = $1; - } else { - log::error( $config, "invalid event_id" ); - } - } + my $get = 'all'; + $get = 'no_content' + if ( ( defined $params->{get} ) && ( $params->{get} eq 'no_content' ) ); - my $get = 'all'; - $get = 'no_content' - if ( ( defined $params->{get} ) && ( $params->{get} eq 'no_content' ) ); + my $search = $params->{search} || ''; + if ( ( defined $search ) && ( $search ne '' ) ) { + $search = substr( $search, 0, 100 ); + $search =~ s/^\s+//gi; + $search =~ s/\s+$//gi; + } - my $search = $params->{search} || ''; - if ( ( defined $search ) && ( $search ne '' ) ) { - $search = substr( $search, 0, 100 ); - $search =~ s/^\s+//gi; - $search =~ s/\s+$//gi; - } + #print STDERR $params->{template}."\n"; + my $template = '.html'; + if ( ( defined $params->{template} ) && ( $params->{template} eq 'no' ) ) { + $template = 'no'; + } else { + $template = template::check( $params->{template}, 'event_list.html' ); + } - #print STDERR $params->{template}."\n"; - my $template = '.html'; - if ( ( defined $params->{template} ) && ($params->{template} eq 'no') ) { - $template = 'no'; - } else { - $template = template::check( $params->{template}, 'event_list.html' ); - } + my $limit_config = $config->{permissions}->{result_limit} || 100; + my $limit = $params->{limit} || $limit_config; + log::error( $config, 'invalid limit!' ) if ( $limit =~ /\D/ ); + $limit = $limit_config if ( $limit_config < $limit ); - my $limit_config = $config->{permissions}->{result_limit} || 100; - my $limit = $params->{limit} || $limit_config; - log::error( $config, 'invalid limit!' ) if ( $limit =~ /\D/ ); - $limit = $limit_config if ( $limit_config < $limit ); + #read project from configuration file + my $project_name = $config->{project} || ''; + log::error( $config, 'no default project configured' ) + if ( $project_name eq '' ); - #read project from configuration file - my $project_name = $config->{project} || ''; - log::error( $config, 'no default project configured' ) - if ( $project_name eq '' ); + #get default project + my $default_project = undef; + my $projects = project::get( $config, { name => $project_name } ); + log::error( $config, "no configuration found for project '$project_name'" ) + unless ( scalar(@$projects) == 1 ); + $default_project = $projects->[0]; - #get default project - my $default_project = undef; - my $projects = project::get( $config, { name => $project_name } ); - log::error( $config, "no configuration found for project '$project_name'" ) - unless ( scalar(@$projects) == 1 ); - $default_project = $projects->[0]; + # get project from parameter (by name) + my $project = ''; + if ( ( defined $params->{project} ) + && ( $params->{project} =~ /\w+/ ) + && ( $params->{project} ne 'all' ) ) + { + my $project_name = $params->{project}; + my $projects = project::get( $config, { name => $project_name } ); + log::error( $config, 'invalid project ' . $project_name ) + unless scalar(@$projects) == 1; + $project = $projects->[0]; + } - # get project from parameter (by name) - my $project = ''; - if ( ( defined $params->{project} ) - && ( $params->{project} =~ /\w+/ ) - && ( $params->{project} ne 'all' ) ) - { - my $project_name = $params->{project}; - my $projects = project::get( $config, { name => $project_name } ); - log::error( $config, 'invalid project ' . $project_name ) - unless scalar(@$projects) == 1; - $project = $projects->[0]; - } + $project_name = $params->{project_name} || ''; + my $studio_name = $params->{studio_name} || ''; - $project_name = $params->{project_name} || ''; - my $studio_name = $params->{studio_name} || ''; + my $project_id = $params->{project_id} || ''; + my $studio_id = $params->{studio_id} || ''; - my $project_id = $params->{project_id} || ''; - my $studio_id = $params->{studio_id} || ''; + my $debug = $params->{debug} || ''; + if ( $debug =~ /([a-z\_\,]+)/ ) { + $debug = $1; + } - my $debug = $params->{debug} || ''; - if ( $debug =~ /([a-z\_\,]+)/ ) { - $debug = $1; - } + my $json_callback = $params->{json_callback} || ''; + if ( $json_callback ne '' ) { + $json_callback =~ s/[^a-zA-Z0-9\_]//g; + } - my $json_callback = $params->{json_callback} || ''; - if ( $json_callback ne '' ) { - $json_callback =~ s/[^a-zA-Z0-9\_]//g; - } + # use relative links + my $extern = 0; + $extern = 1 if ( defined $params->{extern} ) && ( $params->{extern} eq '1' ); - # use relative links - my $extern = 0; - $extern = 1 if ( defined $params->{extern} ) && ( $params->{extern} eq '1' ); - - my $recordings = 0; - $recordings = 1 if ( defined $params->{recordings} ) && ( $params->{recordings} eq '1' ); + my $recordings = 0; + $recordings = 1 if ( defined $params->{recordings} ) && ( $params->{recordings} eq '1' ); - my $checked = { - date => $date, - time => $time, - time_of_day => $time_of_day, - from_date => $from_date, - till_date => $till_date, - date_range_include => $date_range_include, - from_time => $from_time, - till_time => $till_time, - weekday => $weekday, - limit => $limit, - template => $template, - location => $location, - category => $category, - series_name => $series_name, - tag => $tag, - title => $title, - event_id => $event_id, - search => $search, - debug => $debug, - archive => $archive, - order => $order, - project => $project, - default_project => $default_project, - project_name => $project_name, - project_id => $project_id, - studio_name => $studio_name, - studio_id => $studio_id, - json_callback => $json_callback, - get => $get, - locations_to_exclude => $locations_to_exclude, - projects_to_exclude => $projects_to_exclude, - exclude_locations => $exclude_locations, - exclude_projects => $exclude_projects, - exclude_event_images => $exclude_event_images, - disable_event_sync => $disable_event_sync, - extern => $extern, - recordings => $recordings, - }; + my $checked = { + date => $date, + time => $time, + time_of_day => $time_of_day, + from_date => $from_date, + till_date => $till_date, + date_range_include => $date_range_include, + from_time => $from_time, + till_time => $till_time, + weekday => $weekday, + limit => $limit, + template => $template, + location => $location, + category => $category, + series_name => $series_name, + tag => $tag, + title => $title, + event_id => $event_id, + search => $search, + debug => $debug, + archive => $archive, + order => $order, + project => $project, + default_project => $default_project, + project_name => $project_name, + project_id => $project_id, + studio_name => $studio_name, + studio_id => $studio_id, + json_callback => $json_callback, + get => $get, + locations_to_exclude => $locations_to_exclude, + projects_to_exclude => $projects_to_exclude, + exclude_locations => $exclude_locations, + exclude_projects => $exclude_projects, + exclude_event_images => $exclude_event_images, + disable_event_sync => $disable_event_sync, + extern => $extern, + recordings => $recordings, + }; - #print STDERR Dumper($checked); - return $checked; + #print STDERR Dumper($checked); + return $checked; } sub get_keys { - my $event = shift; + my $event = shift; - my $program = $event->{program} || ''; - my $series_name = $event->{series_name} || ''; - my $title = $event->{title} || ''; - my $user_title = $event->{user_title} || ''; - my $episode = $event->{episode} || ''; - my $recurrence_count_alpha = $event->{recurrence_count_alpha} || ''; + my $program = $event->{program} || ''; + my $series_name = $event->{series_name} || ''; + my $title = $event->{title} || ''; + my $user_title = $event->{user_title} || ''; + my $episode = $event->{episode} || ''; + my $recurrence_count_alpha = $event->{recurrence_count_alpha} || ''; - my $skey = ''; - $skey .= $series_name if $series_name ne ''; - $skey .= ' - ' - if ( $series_name ne '' ) - && ( ( $title ne '' ) || ( $user_title ne '' ) ); + my $skey = ''; + $skey .= $series_name if $series_name ne ''; + $skey .= ' - ' + if ( $series_name ne '' ) + && ( ( $title ne '' ) || ( $user_title ne '' ) ); - my $tkey = ''; - $tkey = $title if $title ne ''; - $tkey .= ': ' if ( $title ne '' ) && ( $user_title ne '' ); - $tkey .= $user_title if $user_title ne ''; - $tkey .= ' #' . $episode if $episode ne ''; - $tkey .= $recurrence_count_alpha if $recurrence_count_alpha ne ''; + my $tkey = ''; + $tkey = $title if $title ne ''; + $tkey .= ': ' if ( $title ne '' ) && ( $user_title ne '' ); + $tkey .= $user_title if $user_title ne ''; + $tkey .= ' #' . $episode if $episode ne ''; + $tkey .= $recurrence_count_alpha if $recurrence_count_alpha ne ''; - my $pkey = ''; - $pkey = ' (' . $program . ')' if $program ne ''; + my $pkey = ''; + $pkey = ' (' . $program . ')' if $program ne ''; - return { - key => $skey . $tkey . $pkey, - full_title => $skey . $tkey . $pkey, - full_title_no_series => $tkey . $pkey, - full_title_no_program => $skey . $tkey, - full_title_no_program_no_series => $tkey - }; + return { + key => $skey . $tkey . $pkey, + full_title => $skey . $tkey . $pkey, + full_title_no_series => $tkey . $pkey, + full_title_no_program => $skey . $tkey, + full_title_no_program_no_series => $tkey + }; } #do not delete last line!