diff --git a/lib/calcms/UTF8DBI.pm b/lib/calcms/UTF8DBI.pm index 2d070d4..daaff4c 100644 --- a/lib/calcms/UTF8DBI.pm +++ b/lib/calcms/UTF8DBI.pm @@ -4,15 +4,18 @@ use DBI 1.21; use utf8; -use Encode; +use Encode(); + +package UTF8DBI; +use base DBI; -package UTF8DBI; use base DBI; sub _utf8_ { - if (ref $_ eq 'ARRAY') { _utf8_() foreach @$_ } - elsif (ref $_ eq 'HASH' ) { _utf8_() foreach values %$_ } - else { + if ( ref $_ eq 'ARRAY' ) { _utf8_() foreach @$_ } + elsif ( ref $_ eq 'HASH' ) { _utf8_() foreach values %$_ } + else { Encode::_utf8_on($_); - if (Encode::is_utf8($_) && ! Encode::is_utf8($_, 1)) { + if ( Encode::is_utf8($_) && !Encode::is_utf8( $_, 1 ) ) { + #$_ = '⁂malformed-UTF8‼' #die "Malformed utf8 string in database" #print data_string_desc($_)."\n" #data_string_desc(STRING); @@ -21,25 +24,25 @@ sub _utf8_ { #Encode::_utf8_off($_); #Encode::decode_utf8($_); #Encode::encode_utf8($_); - } - }; + } + } $_; -}; +} +package UTF8DBI::db; +use base DBI::db; -package UTF8DBI::db; use base DBI::db; +sub selectrow_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectrow_arrayref(@_) } +sub selectrow_hashref { return UTF8DBI::_utf8_ for shift->SUPER::selectrow_hashref(@_) } +sub selectall_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectall_arrayref(@_) } +sub selectall_hashref { return UTF8DBI::_utf8_ for shift->SUPER::selectall_hashref(@_) } +sub selectcol_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectcol_arrayref(@_) } -sub selectrow_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectrow_arrayref(@_) }; -sub selectrow_hashref { return UTF8DBI::_utf8_ for shift->SUPER::selectrow_hashref (@_) }; -sub selectall_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectall_arrayref(@_) }; -sub selectall_hashref { return UTF8DBI::_utf8_ for shift->SUPER::selectall_hashref (@_) }; -sub selectcol_arrayref { return UTF8DBI::_utf8_ for shift->SUPER::selectcol_arrayref(@_) }; +sub selectrow_array { @{ shift->selectrow_arrayref(@_) } } -sub selectrow_array { @{shift->selectrow_arrayref(@_)} }; +package UTF8DBI::st; +use base DBI::st; - -package UTF8DBI::st; use base DBI::st; - -sub fetch { return UTF8DBI::_utf8_ for shift->SUPER::fetch (@_) }; +sub fetch { return UTF8DBI::_utf8_ for shift->SUPER::fetch(@_) } 1; diff --git a/lib/calcms/aggregator.pm b/lib/calcms/aggregator.pm index 634a4b5..4781e33 100644 --- a/lib/calcms/aggregator.pm +++ b/lib/calcms/aggregator.pm @@ -1,301 +1,292 @@ use warnings "all"; use strict; -use events; -use comments; -use calendar; -use project; +use events(); +use comments(); +use calendar(); +use project(); package aggregator; require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_cache configure_cache put_cache get_list check_params); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_cache configure_cache put_cache get_list check_params); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); #my $cgi=undef; -sub get_list{ - my $config = shift; - my $request=shift; - - my $params=$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; +sub get_list { + my $config = shift; + my $request = shift; - #customize prefiltered request parameters - $request->{params}->{original}->{date}=$request->{params}->{checked}->{date}; - if ($params->{event_id}ne''){ - $request->{params}->{original}->{template}='event_details.html'; - }else{ - $request->{params}->{original}->{template}='event_list.html'; - } - $request->{params}->{checked} = events::check_params($config, $request->{params}->{original}); - log::write($config, 'params',$request->{params}->{checked}) if ($debug); + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - my $content=''; - my $results=events::get($config, $request); - events::render($content, $config, $request, $results); -# calendar::get_cached_or_render($content,$request); + #customize prefiltered request parameters + $request->{params}->{original}->{date} = $request->{params}->{checked}->{date}; + if ( $params->{event_id} ne '' ) { + $request->{params}->{original}->{template} = 'event_details.html'; + } else { + $request->{params}->{original}->{template} = 'event_list.html'; + } + $request->{params}->{checked} = events::check_params( $config, $request->{params}->{original} ); + + my $content = ''; + my $results = events::get( $config, $request ); + events::render( $content, $config, $request, $results ); + # calendar::get_cached_or_render($content,$request); - #set url to embed as last loaded url in javascript - my $date=$params->{date}||''; - $date='heute' if ($params->{date}eq'today'); - $date=$results->[0]->{day} if ($params->{event_id}ne''); - my $url=''; - #$config->{controllers}->{events}.'/'.$date.'/'; - if ($params->{from_date}ne'' && $params->{till_date}ne''){ - $url=$config->{controllers}->{events}.'/'.$params->{from_date}.'/'.$params->{till_date} ; - }else{ - $url=$config->{controllers}->{events}.'/'.$params->{from_date}.'/'.$params->{till_date} ; - } + #set url to embed as last loaded url in javascript + my $date = $params->{date} || ''; + $date = 'heute' if ( $params->{date} eq 'today' ); + $date = $results->[0]->{day} if ( $params->{event_id} ne '' ); + my $url = ''; - #count most projects - my $used_projects={}; - for my $result (@$results){ - my $project=$result->{project_title}||''; - $used_projects->{$project}++; - } - my @used_projects=reverse sort {$used_projects->{$a} <=> $used_projects->{$b}} (keys %$used_projects); - my $most_used_project=$used_projects[0]; - #use Data::Dumper;print STDERR Dumper(\@used_projects); - - return { - day => $results->[0]->{day}, - start_datetime => $results->[0]->{start_datetime}, - event_id => $results->[0]->{event_id}, - program => $results->[0]->{program}, - project_title => $most_used_project, - series_name => $results->[0]->{series_name}, - title => $results->[0]->{title}, - content => $content, - results => $results, - url => $url, - }; + #$config->{controllers}->{events}.'/'.$date.'/'; + if ( $params->{from_date} ne '' && $params->{till_date} ne '' ) { + $url = $config->{controllers}->{events} . '/' . $params->{from_date} . '/' . $params->{till_date}; + } else { + $url = $config->{controllers}->{events} . '/' . $params->{from_date} . '/' . $params->{till_date}; + } + + #count most projects + my $used_projects = {}; + for my $result (@$results) { + my $project = $result->{project_title} || ''; + $used_projects->{$project}++; + } + my @used_projects = reverse sort { $used_projects->{$a} <=> $used_projects->{$b} } ( keys %$used_projects ); + my $most_used_project = $used_projects[0]; + + #use Data::Dumper;print STDERR Dumper(\@used_projects); + + return { + day => $results->[0]->{day}, + start_datetime => $results->[0]->{start_datetime}, + event_id => $results->[0]->{event_id}, + program => $results->[0]->{program}, + project_title => $most_used_project, + series_name => $results->[0]->{series_name}, + title => $results->[0]->{title}, + content => $content, + results => $results, + url => $url, + }; } -sub get_menu{ - my $config = shift; - my $request=shift; - my $date=shift; - my $results=shift; - - my $params=$request->{params}->{checked}; +sub get_menu { + my $config = shift; + my $request = shift; + my $date = shift; + my $results = shift; - #load details only on demand - if ($params->{event_id}ne''){ - $request->{params}->{original}->{template}='event_menu.html'; - $request->{params}->{original}->{event_id}=undef; - $request->{params}->{original}->{date}=$date; - $request->{params}->{checked} =events::check_params($config, $request->{params}->{original}); - $results=events::get($config, $request); - }else{ - $request->{params}->{checked}->{template}=template::check('event_menu.html'); - } + my $params = $request->{params}->{checked}; - #events menu - my $output=''; - events::render($output, $config, $request, $results); + #load details only on demand + if ( $params->{event_id} ne '' ) { + $request->{params}->{original}->{template} = 'event_menu.html'; + $request->{params}->{original}->{event_id} = undef; + $request->{params}->{original}->{date} = $date; + $request->{params}->{checked} = events::check_params( $config, $request->{params}->{original} ); + $results = events::get( $config, $request ); + } else { + $request->{params}->{checked}->{template} = template::check('event_menu.html'); + } - return { - content => $output - }; + #events menu + my $output = ''; + events::render( $output, $config, $request, $results ); + + return { content => $output }; } -sub get_calendar{ - my $config = shift; - my $request=shift; - my $date=shift; - - my $params=$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; +sub get_calendar { + my $config = shift; + my $request = shift; + my $date = shift; - $request->{params}->{original}->{template} = 'calendar.html'; - $request->{params}->{original}->{date} = $date if (defined $date); - $request->{params}->{checked} = calendar::check_params($config, $request->{params}->{original}); - $params = $request->{params}->{checked}; - log::write($config, 'params',$params) if ($debug); + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - #set query string for caching - my $options=[]; - push (@$options,'date='.$params->{date}) if ($params->{date} ne''); - push (@$options,'from_date='.$params->{from_date}) if ($params->{from_date} ne''); - push (@$options,'till_date='.$params->{till_date}) if ($params->{till_date} ne''); - $ENV{QUERY_STRING}=''.join("&",@$options); + $request->{params}->{original}->{template} = 'calendar.html'; + $request->{params}->{original}->{date} = $date if ( defined $date ); + $request->{params}->{checked} = calendar::check_params( $config, $request->{params}->{original} ); + $params = $request->{params}->{checked}; - my $content=''; - calendar::get_cached_or_render($content, $config, $request); + #set query string for caching + my $options = []; + push( @$options, 'date=' . $params->{date} ) if ( $params->{date} ne '' ); + push( @$options, 'from_date=' . $params->{from_date} ) if ( $params->{from_date} ne '' ); + push( @$options, 'till_date=' . $params->{till_date} ) if ( $params->{till_date} ne '' ); + $ENV{QUERY_STRING} = '' . join( "&", @$options ); - return { - content => $content - }; + my $content = ''; + calendar::get_cached_or_render( $content, $config, $request ); + + return { content => $content }; } -sub get_newest_comments{ - my $config = shift; - my $request=shift; +sub get_newest_comments { + my $config = shift; + my $request = shift; - my $params={ - template =>'comments_newest.html', - limit => 10, - type =>'list', - show_max => 3 - }; - $request={ - url => $ENV{QUERY_STRING}, - params => { - original => $params, - checked => comments::check_params($config, $params), - }, - config => $config, - connection => $request->{connection} - }; - my $content=''; - comments::get_cached_or_render($content, $config, $request); - return { - content => $content - }; + my $params = { + template => 'comments_newest.html', + limit => 10, + type => 'list', + show_max => 3 + }; + $request = { + url => $ENV{QUERY_STRING}, + params => { + original => $params, + checked => comments::check_params( $config, $params ), + }, + config => $config, + connection => $request->{connection} + }; + my $content = ''; + comments::get_cached_or_render( $content, $config, $request ); + return { content => $content }; } -sub get_cache{ - my $config = shift; - my $request = shift; +sub get_cache { + my $config = shift; + my $request = shift; - my $params =$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - if ($config->{cache}->{use_cache} == 1){ - configure_cache($config); - log::write($config, 'cache_files',cache::get_map()) if ($debug); - my $cache=cache::load($config, $params); - log::write($config, 'cache_files',$cache->{action}) if ($debug); - return $cache; - } - return{}; + if ( $config->{cache}->{use_cache} == 1 ) { + configure_cache($config); + my $cache = cache::load( $config, $params ); + return $cache; + } + return {}; } -sub configure_cache{ - my $config = shift; +sub configure_cache { + my $config = shift; - cache::init(); - my $controllers=$config->{controllers}; + cache::init(); + my $controllers = $config->{controllers}; - my $date_pattern=$cache::date_pattern; -# cache::add_map('' ,'programm/index.html'); - cache::add_map('date=today' ,'programm/'.$controllers->{events}.'/today.html'); - cache::add_map('date='.$date_pattern ,'programm/'.$controllers->{events}.'/$1-$2-$3.html'); - cache::add_map('from_date='.$date_pattern.'&till_date='.$date_pattern ,'programm/'.$controllers->{events}.'/$1-$2-$3_$4-$5-$6.html'); - cache::add_map('event_id=(\d+)' ,'programm/'.$controllers->{event}.'/$1.html'); + my $date_pattern = $cache::date_pattern; + + # cache::add_map('' ,'programm/index.html'); + cache::add_map( 'date=today', 'programm/' . $controllers->{events} . '/today.html' ); + cache::add_map( 'date=' . $date_pattern, 'programm/' . $controllers->{events} . '/$1-$2-$3.html' ); + cache::add_map( 'from_date=' . $date_pattern . '&till_date=' . $date_pattern, + 'programm/' . $controllers->{events} . '/$1-$2-$3_$4-$5-$6.html' ); + cache::add_map( 'event_id=(\d+)', 'programm/' . $controllers->{event} . '/$1.html' ); } +sub put_cache { + my $config = shift; + my $request = shift; + my $cache = shift; -sub put_cache{ - my $config = shift; - my $request = shift; - my $cache = shift; - - #write to cache - if ($config->{cache}->{use_cache} == 1){ - cache::save($cache); - } + #write to cache + if ( $config->{cache}->{use_cache} == 1 ) { + cache::save($cache); + } } -sub check_params{ - my $config = shift; - my $params = shift; +sub check_params { + my $config = shift; + my $params = shift; - #get start and stop from projects - my $range= project::get_date_range($config); - my $start_date = $range->{start_date}; - my $end_date = $range->{end_date}; - -# my $project_name=$config->{project}||''; -# log::error($config, 'no default project configured') if($project_name eq ''); -# log::error($config, "no configuration found for project '$project_name'") unless(exists($config->{projects}->{$project_name})); -# my $project=$config->{projects}->{$project_name}||''; -# log::erorr($config, 'no configuration found for project') if($project eq''); -# if ((defined $params->{project}) && ($params->{project}=~/(\w+)/)){ -# $project=$config->{projects}->{$1} if exists($config->{projects}->{$1}); -# } + #get start and stop from projects + my $range = project::get_date_range($config); + my $start_date = $range->{start_date}; + my $end_date = $range->{end_date}; - #filter for date - my $date=time::check_date($params->{date}); - #print STDERR $date."\n"; - if ($date eq ''){ - $date=time::time_to_date(time()) ; - } - # - if ($date eq 'today'){ - $date=time::get_event_date($config); - } + #filter for date + my $date = time::check_date( $params->{date} ); -# $date =$config->{date}->{start_date} if ($date lt $config->{date}->{start_date}); -# $date =$config->{date}->{end_date} if ($date gt $config->{date}->{end_date}); - $date =$start_date if $date lt $start_date; - $date =$end_date if $date gt $end_date; + #print STDERR $date."\n"; + if ( $date eq '' ) { + $date = time::time_to_date( time() ); + } + # + if ( $date eq 'today' ) { + $date = time::get_event_date($config); + } - #filter for date -# my $date=time::check_date($params->{date}); - my $time=time::check_time($params->{time}); - if ((defined $params->{today}) && ($params->{today}eq'1')){ - $date =time::time_to_date(time()); - $params->{date}=$date; - }; + # $date =$config->{date}->{start_date} if ($date lt $config->{date}->{start_date}); + # $date =$config->{date}->{end_date} if ($date gt $config->{date}->{end_date}); + $date = $start_date if $date lt $start_date; + $date = $end_date if $date gt $end_date; - my $from_date=time::check_date($params->{from_date}); - my $till_date=time::check_date($params->{till_date}); + #filter for date + # my $date=time::check_date($params->{date}); + my $time = time::check_time( $params->{time} ); + if ( ( defined $params->{today} ) && ( $params->{today} eq '1' ) ) { + $date = time::time_to_date( time() ); + $params->{date} = $date; + } - my $previous_series=$params->{previous_series} || ''; - if(($previous_series)&&($previous_series=~/(\d+)/)){ - $params->{event_id}=events::get_previous_event_of_series(undef, $config, { - event_id => $1, - exclude_projects => 1, - exclude_locations => 1, - }); - } + my $from_date = time::check_date( $params->{from_date} ); + my $till_date = time::check_date( $params->{till_date} ); - my $next_series=$params->{next_series} || ''; - if(($next_series)&&($next_series=~/(\d+)/)){ - $params->{event_id}=events::get_next_event_of_series(undef, $config, { - event_id => $1, - exclude_projects => 1, - exclude_locations => 1, - }); - } + my $previous_series = $params->{previous_series} || ''; + if ( ($previous_series) && ( $previous_series =~ /(\d+)/ ) ) { + $params->{event_id} = events::get_previous_event_of_series( + undef, $config, + { + event_id => $1, + exclude_projects => 1, + exclude_locations => 1, + } + ); + } - my $event_id=$params->{event_id}||''; - unless ($event_id eq''){ - if ($event_id=~/(\d+)/){ - $event_id=$1; - }else{ - log::error($config, "invalid event_id"); - } - } + my $next_series = $params->{next_series} || ''; + if ( ($next_series) && ( $next_series =~ /(\d+)/ ) ) { + $params->{event_id} = events::get_next_event_of_series( + undef, $config, + { + event_id => $1, + exclude_projects => 1, + exclude_locations => 1, + } + ); + } - my $debug=$params->{debug}||''; - if ($debug=~/([a-z\_\,]+)/){ - $debug=$1; - } + my $event_id = $params->{event_id} || ''; + unless ( $event_id eq '' ) { + if ( $event_id =~ /(\d+)/ ) { + $event_id = $1; + } else { + log::error( $config, "invalid event_id" ); + } + } - #set query string for caching - if ((!exists $ENV{QUERY_STRING}) || ($ENV{QUERY_STRING}eq'')){ - my $options=[]; - push (@$options,'date='.$date) if $date ne''; - push (@$options,'from_date='.$from_date) if $from_date ne''; - push (@$options,'till_date='.$till_date) if $till_date ne''; - push (@$options,'event_id='.$event_id) if $event_id ne''; - $ENV{QUERY_STRING}=''.join("&",@$options); - } + my $debug = $params->{debug} || ''; + if ( $debug =~ /([a-z\_\,]+)/ ) { + $debug = $1; + } - return { - date => $date, - time => $time, - from_date => $from_date, - till_date => $till_date, - event_id => $event_id, -# project => $project, - debug => $debug, - }; -; + #set query string for caching + if ( ( !exists $ENV{QUERY_STRING} ) || ( $ENV{QUERY_STRING} eq '' ) ) { + my $options = []; + push( @$options, 'date=' . $date ) if $date ne ''; + push( @$options, 'from_date=' . $from_date ) if $from_date ne ''; + push( @$options, 'till_date=' . $till_date ) if $till_date ne ''; + push( @$options, 'event_id=' . $event_id ) if $event_id ne ''; + $ENV{QUERY_STRING} = '' . join( "&", @$options ); + } + + return { + date => $date, + time => $time, + from_date => $from_date, + till_date => $till_date, + event_id => $event_id, + + # project => $project, + debug => $debug, + }; } #do not delete last line! diff --git a/lib/calcms/audio_recordings.pm b/lib/calcms/audio_recordings.pm index 802251a..5b51cd9 100644 --- a/lib/calcms/audio_recordings.pm +++ b/lib/calcms/audio_recordings.pm @@ -1,18 +1,18 @@ #!/bin/perl - -package audio_recordings; + +package audio_recordings; use warnings "all"; use strict; use Data::Dumper; -use db; +use db(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); # columns: # id, project_id, studio_id, event_id @@ -22,68 +22,68 @@ our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_audio_recordings'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_audio_recordings' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -# get playout entries -sub get{ +# get playout entries +sub get { my $config = shift; my $condition = shift; - return undef unless defined $condition->{project_id}; - return undef unless defined $condition->{studio_id}; + return undef unless defined $condition->{project_id}; + return undef unless defined $condition->{studio_id}; - my $date_range_include=0; - $date_range_include=1 if (defined $condition->{date_range_include}) && ($condition->{date_range_include}==1); + my $date_range_include = 0; + $date_range_include = 1 if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $conditions=[]; - my $bind_values=[]; + my $conditions = []; + my $bind_values = []; - if ((defined $condition->{id}) && ($condition->{id} ne '')){ - push @$conditions, 'id=?'; + if ( ( defined $condition->{id} ) && ( $condition->{id} ne '' ) ) { + push @$conditions, 'id=?'; push @$bind_values, $condition->{id}; } - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @$conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @$conditions, 'project_id=?'; push @$bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @$conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @$conditions, 'studio_id=?'; push @$bind_values, $condition->{studio_id}; } - if ((defined $condition->{event_id}) && ($condition->{event_id} ne '')){ - push @$conditions, 'event_id=?'; + if ( ( defined $condition->{event_id} ) && ( $condition->{event_id} ne '' ) ) { + push @$conditions, 'event_id=?'; push @$bind_values, $condition->{event_id}; } - if ((defined $condition->{path}) && ($condition->{path} ne '')){ - push @$conditions, 'path=?'; + if ( ( defined $condition->{path} ) && ( $condition->{path} ne '' ) ) { + push @$conditions, 'path=?'; push @$bind_values, $condition->{path}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $whereClause=''; - $whereClause=" where ".join(" and ",@$conditions) if (scalar @$conditions>0); + my $whereClause = ''; + $whereClause = " where " . join( " and ", @$conditions ) if ( scalar @$conditions > 0 ); - my $query=qq{ + my $query = qq{ select id ,project_id ,studio_id @@ -104,33 +104,32 @@ sub get{ order by created_at desc }; - #print STDERR Dumper($query).Dumper($bind_values); - my $entries=db::get($dbh, $query, $bind_values); + #print STDERR Dumper($query).Dumper($bind_values); + my $entries = db::get( $dbh, $query, $bind_values ); return $entries; } - # update playout entry if differs to old values -sub update{ - my $config = shift; - my $dbh = shift; - my $entry = shift; - - #print STDERR "update:".Dumper($entry); +sub update { + my $config = shift; + my $dbh = shift; + my $entry = shift; - my $day_start=$config->{date}->{day_starting_hour}; + #print STDERR "update:".Dumper($entry); - my $bind_values=[ - $entry->{path}, $entry->{size}, - $entry->{created_by}, $entry->{created_at}, - $entry->{modified_at} || time::time_to_datetime(time()), - $entry->{processed}, $entry->{mastered}, - $entry->{eventDuration}, $entry->{audioDuration}, - $entry->{rmsLeft}, $entry->{rmsRight}, - $entry->{project_id}, $entry->{studio_id}, $entry->{event_id} - ]; - - my $query=qq{ + my $day_start = $config->{date}->{day_starting_hour}; + + my $bind_values = [ + $entry->{path}, $entry->{size}, + $entry->{created_by}, $entry->{created_at}, + $entry->{modified_at} || time::time_to_datetime( time() ), $entry->{processed}, + $entry->{mastered}, $entry->{eventDuration}, + $entry->{audioDuration}, $entry->{rmsLeft}, + $entry->{rmsRight}, $entry->{project_id}, + $entry->{studio_id}, $entry->{event_id} + ]; + + my $query = qq{ update calcms_audio_recordings set path=?, size=?, created_by=?, created_at=?, @@ -140,64 +139,69 @@ sub update{ rmsLeft=?, rmsRight=? where project_id=? and studio_id=? and event_id=? }; - if (defined $entry->{id}){ - $query.=' and id=?'; - push @$bind_values, $entry->{id}; - } - #print STDERR Dumper($query).Dumper($bind_values); - return db::put($dbh, $query, $bind_values); + if ( defined $entry->{id} ) { + $query .= ' and id=?'; + push @$bind_values, $entry->{id}; + } + + #print STDERR Dumper($query).Dumper($bind_values); + return db::put( $dbh, $query, $bind_values ); } # insert playout entry -sub insert{ - my $config = shift; - my $dbh = shift; - my $entry = shift; +sub insert { + my $config = shift; + my $dbh = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{event_id}; return undef unless defined $entry->{path}; - #print STDERR "insert into audio_recordings:".Dumper($entry); - return db::insert($dbh, 'calcms_audio_recordings', { - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - event_id => $entry->{event_id}, - path => $entry->{path}, - size => $entry->{size}, - created_by => $entry->{created_by}, - eventDuration => $entry->{eventDuration}, - audioDuration => $entry->{audioDuration}, - rmsLeft => $entry->{rmsLeft}, - rmsRight => $entry->{rmsRight}, - processed => $entry->{processed}, - mastered => $entry->{mastered} || '0', - }); + #print STDERR "insert into audio_recordings:".Dumper($entry); + return db::insert( + $dbh, + 'calcms_audio_recordings', + { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + event_id => $entry->{event_id}, + path => $entry->{path}, + size => $entry->{size}, + created_by => $entry->{created_by}, + eventDuration => $entry->{eventDuration}, + audioDuration => $entry->{audioDuration}, + rmsLeft => $entry->{rmsLeft}, + rmsRight => $entry->{rmsRight}, + processed => $entry->{processed}, + mastered => $entry->{mastered} || '0', + } + ); } # delete playout entry -sub delete{ - my $config = shift; +sub delete { + my $config = shift; my $dbh = shift; my $entry = shift; - + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{event_id}; return undef unless defined $entry->{path}; - my $query=qq{ + my $query = qq{ delete from calcms_audio_recordings where project_id=? and studio_id=? and event_id=? and path=? }; my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{event_id}, $entry->{path} ]; - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } -sub error{ +sub error { my $msg = shift; print "ERROR: $msg
\n"; } diff --git a/lib/calcms/auth.pm b/lib/calcms/auth.pm index 32f84c9..b6f19be 100644 --- a/lib/calcms/auth.pm +++ b/lib/calcms/auth.pm @@ -1,279 +1,284 @@ #!/bin/perl use CGI; -#use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use CGI::Session qw(-ip-match); -use CGI::Cookie; +use CGI::Cookie(); + #$CGI::Session::IP_MATCH=1; -package auth; +package auth; use warnings "all"; use strict; use Data::Dumper; -use Authen::Passphrase::BlowfishCrypt; -use time; +use Authen::Passphrase::BlowfishCrypt(); +use time(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_user login logout crypt_password); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_user login logout crypt_password); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); - -my $defaultExpiration=60; -my $tmp_dir='/var/tmp/'; -my $debug=0; +my $defaultExpiration = 60; +my $tmp_dir = '/var/tmp/'; +my $debug = 0; sub debug; -sub get_user{ - my $cgi=shift; - my $config=shift; +sub get_user { + my $cgi = shift; + my $config = shift; - my %parms=$cgi->Vars(); - my $parms=\%parms; + my %parms = $cgi->Vars(); + my $parms = \%parms; - debug("get_user")if ($debug); + debug("get_user") if ($debug); - # login or logout on action - if (defined $parms->{action}){ - if ($parms->{action} eq 'login'){ - my $user=login($cgi, $config, $parms->{user}, $parms->{password}); - $cgi->delete('user','password','uri','action'); + # login or logout on action + if ( defined $parms->{action} ) { + if ( $parms->{action} eq 'login' ) { + my $user = login( $cgi, $config, $parms->{user}, $parms->{password} ); + $cgi->delete( 'user', 'password', 'uri', 'action' ); return $user; - }elsif($parms->{action} eq 'logout'){ + } elsif ( $parms->{action} eq 'logout' ) { logout($cgi); - $cgi->delete('user','password','uri','action'); + $cgi->delete( 'user', 'password', 'uri', 'action' ); return undef; } } - # read session id from cookie - my $session_id=read_cookie($cgi); + # read session id from cookie + my $session_id = read_cookie($cgi); - # login if no cookie found - return show_login_form($parms->{user}, 'Please login') unless defined $session_id; + # login if no cookie found + return show_login_form( $parms->{user}, 'Please login' ) unless defined $session_id; - # read session - my $session=read_session($session_id); + # read session + my $session = read_session($session_id); - # login if user not found - return show_login_form($parms->{user}, 'unknown User') unless defined $session; + # login if user not found + return show_login_form( $parms->{user}, 'unknown User' ) unless defined $session; $parms->{user} = $session->{user}; $parms->{expires} = $session->{expires}; - debug($parms->{expires}); + debug( $parms->{expires} ); return $session->{user}, $session->{expires}; } -sub crypt_password{ - my $password=shift; +sub crypt_password { + my $password = shift; my $ppr = Authen::Passphrase::BlowfishCrypt->new( - cost => 8, + cost => 8, salt_random => 1, - passphrase => $password + passphrase => $password ); - return{ - salt => $ppr->salt_base64, - crypt => $ppr->as_crypt + return { + salt => $ppr->salt_base64, + crypt => $ppr->as_crypt }; } -sub login{ - my $cgi=shift; - my $config=shift; - my $user=shift; - my $password=shift; - debug("login")if ($debug); - +sub login { + my $cgi = shift; + my $config = shift; + my $user = shift; + my $password = shift; + debug("login") if ($debug); + #print STDERR "login $user $password\n"; - my $result = authenticate($config, $user, $password); - #print STDERR Dumper($result); + my $result = authenticate( $config, $user, $password ); - return show_login_form($user,'Could not authenticate you') unless defined $result; - return unless defined $result->{login}eq '1'; + #print STDERR Dumper($result); - my $timeout=$result->{timeout} || $defaultExpiration; - $timeout='+'.$timeout.'m'; + return show_login_form( $user, 'Could not authenticate you' ) unless defined $result; + return unless defined $result->{login} eq '1'; - my $session_id=create_session($user, $password, $timeout); - return $user if(create_cookie($cgi, $session_id, $timeout)); + my $timeout = $result->{timeout} || $defaultExpiration; + $timeout = '+' . $timeout . 'm'; + + my $session_id = create_session( $user, $password, $timeout ); + return $user if ( create_cookie( $cgi, $session_id, $timeout ) ); return undef; } -sub logout{ - my $cgi=shift; - my $session_id=read_cookie($cgi); - debug("logout")if ($debug); - unless(delete_session($session_id)){ - return show_login_form('Cant delete session', 'logged out'); - }; - unless(delete_cookie($cgi)){ - return show_login_form('Cant remove cookie', 'logged out'); +sub logout { + my $cgi = shift; + my $session_id = read_cookie($cgi); + debug("logout") if ($debug); + unless ( delete_session($session_id) ) { + return show_login_form( 'Cant delete session', 'logged out' ); } - my $uri=$ENV{HTTP_REFERER}||''; - $uri=~s/action=logout//g; + unless ( delete_cookie($cgi) ) { + return show_login_form( 'Cant remove cookie', 'logged out' ); + } + my $uri = $ENV{HTTP_REFERER} || ''; + $uri =~ s/action=logout//g; print $cgi->redirect($uri); -# return show_login_form('', 'logged out'); + + # return show_login_form('', 'logged out'); } #read and write data from browser, http://perldoc.perl.org/CGI/Cookie.html -sub create_cookie{ - my $cgi=shift; - my $session_id=shift; - my $timeout=shift; +sub create_cookie { + my $cgi = shift; + my $session_id = shift; + my $timeout = shift; + #debug("create_cookie")if ($debug); my $cookie = CGI::Cookie->new( - -name => 'sessionID', - -value => $session_id, - -expires => $timeout, -# -domain => '.capricorn.com', -# -path => '/agenda/admin/', - -secure => 1 + -name => 'sessionID', + -value => $session_id, + -expires => $timeout, + + # -domain => '.capricorn.com', + # -path => '/agenda/admin/', + -secure => 1 ); - print "Set-Cookie: ",$cookie->as_string,"\n"; - print STDERR "#Set-Cookie: ",$cookie->as_string,"\n"; -# print $cgi->header( -cookie => $cookie ); + print "Set-Cookie: ", $cookie->as_string, "\n"; + print STDERR "#Set-Cookie: ", $cookie->as_string, "\n"; + + # print $cgi->header( -cookie => $cookie ); return 1; } -sub read_cookie{ - my $cgi=shift; +sub read_cookie { + my $cgi = shift; - debug("read_cookie")if ($debug); + debug("read_cookie") if ($debug); my %cookie = CGI::Cookie->fetch; - debug("cookies: ".Dumper(\%cookie))if ($debug); - my $cookie=$cookie{'sessionID'}; - debug("cookie: ".$cookie)if ($debug); - return undef unless (defined $cookie); - my $session_id= $cookie->value || undef; - debug("sid: ".$session_id)if ($debug); + debug( "cookies: " . Dumper( \%cookie ) ) if ($debug); + my $cookie = $cookie{'sessionID'}; + debug( "cookie: " . $cookie ) if ($debug); + return undef unless ( defined $cookie ); + my $session_id = $cookie->value || undef; + debug( "sid: " . $session_id ) if ($debug); return $session_id; - #return $cgi->cookie('sessionID') || undef; -}; -sub delete_cookie{ - my $cgi=shift; + #return $cgi->cookie('sessionID') || undef; +} - debug("delete_cookie")if ($debug); +sub delete_cookie { + my $cgi = shift; + + debug("delete_cookie") if ($debug); my $cookie = $cgi->cookie( - -name => 'sessionID', - -value => '', - -expires => '+1s' + -name => 'sessionID', + -value => '', + -expires => '+1s' ); print $cgi->header( -cookie => $cookie ); return 1; } #read and write server-side session data -sub create_session{ - my $user=shift; - my $password=shift; - my $expiration=shift; +sub create_session { + my $user = shift; + my $password = shift; + my $expiration = shift; - debug("create_session")if ($debug); - my $session = new CGI::Session(undef, undef, {Directory=>$tmp_dir}); + debug("create_session") if ($debug); + my $session = new CGI::Session( undef, undef, { Directory => $tmp_dir } ); $session->expire($expiration); - $session->param("user", $user); - $session->param("pid", $$); -# $session->param("password", $password); + $session->param( "user", $user ); + $session->param( "pid", $$ ); + + # $session->param("password", $password); return $session->id(); } -sub read_session{ - my $session_id=shift; +sub read_session { + my $session_id = shift; - debug("read_session")if $debug; - return undef unless(defined $session_id); + debug("read_session") if $debug; + return undef unless ( defined $session_id ); - debug("read_session2")if $debug; - my $session = new CGI::Session(undef, $session_id, {Directory=>$tmp_dir}); + debug("read_session2") if $debug; + my $session = new CGI::Session( undef, $session_id, { Directory => $tmp_dir } ); return undef unless defined $session; - debug("read_session3")if $debug; + debug("read_session3") if $debug; my $user = $session->param("user") || undef; return undef unless defined $user; - my $expires = time::time_to_datetime($session->param("_SESSION_ATIME")+$session->param("_SESSION_ETIME")); + my $expires = time::time_to_datetime( $session->param("_SESSION_ATIME") + $session->param("_SESSION_ETIME") ); return { - user => $user, - expires => $expires - } + user => $user, + expires => $expires + }; } -sub delete_session{ - my $session_id=shift; +sub delete_session { + my $session_id = shift; - debug("delete_session")if ($debug); - return undef unless(defined $session_id); - my $session = new CGI::Session(undef, $session_id, {Directory=>$tmp_dir}); + debug("delete_session") if ($debug); + return undef unless ( defined $session_id ); + my $session = new CGI::Session( undef, $session_id, { Directory => $tmp_dir } ); $session->delete(); return 1; } - #check user authentication -sub authenticate{ - my $config=shift; - my $user=shift; - my $password=shift; +sub authenticate { + my $config = shift; + my $user = shift; + my $password = shift; - $config->{access}->{write}=0; - my $dbh = db::connect($config); + $config->{access}->{write} = 0; + my $dbh = db::connect($config); my $query = qq{ select * from calcms_users where name=? }; my $bind_values = [$user]; + #print STDERR "query:".Dumper($query).Dumper($bind_values); - my $users = db::get($dbh,$query,$bind_values); + my $users = db::get( $dbh, $query, $bind_values ); + #print STDERR "result:".Dumper($users); - - if (scalar(@$users) != 1){ + + if ( scalar(@$users) != 1 ) { print STDERR "auth: did not find user '$user'\n"; return undef; } + #print STDERR Dumper($users); - my $salt=$users->[0]->{salt}; - my $ppr = Authen::Passphrase::BlowfishCrypt->from_crypt( - $users->[0]->{pass}, - $users->[0]->{salt} - ); + my $salt = $users->[0]->{salt}; + my $ppr = Authen::Passphrase::BlowfishCrypt->from_crypt( $users->[0]->{pass}, $users->[0]->{salt} ); return undef unless $ppr->match($password); - if($users->[0]->{disabled} == 1){ + if ( $users->[0]->{disabled} == 1 ) { print STDERR "user '$user' is disabled\n"; - return undef; - } + return undef; + } - my $timeout = $users->[0]->{session_timeout} || 120; - $timeout =10 if $timeout < 10; - $timeout =12*60 if $timeout > 12*60; + my $timeout = $users->[0]->{session_timeout} || 120; + $timeout = 10 if $timeout < 10; + $timeout = 12 * 60 if $timeout > 12 * 60; - return { - timeout => $timeout, - login => 1 - } + return { + timeout => $timeout, + login => 1 + }; } -sub show_login_form{ - my $user= shift || ''; - my $uri = $ENV{HTTP_REFERER} || ''; - my $message = shift || ''; - my $requestReset = ''; +sub show_login_form { + my $user = shift || ''; + my $uri = $ENV{HTTP_REFERER} || ''; + my $message = shift || ''; + my $requestReset = ''; - if (($user ne '') && ($message ne '')){ - $requestReset = qq{ + if ( ( $user ne '' ) && ( $message ne '' ) ) { + $requestReset = qq{ forgotten }; - } + } - debug("show_login_form")if ($debug); + debug("show_login_form") if ($debug); print qq{Content-type:text/html @@ -375,11 +380,10 @@ sub show_login_form{ return undef; } -sub debug{ - my $message=shift; - print STDERR "$message\n" if $debug>0; +sub debug { + my $message = shift; + print STDERR "$message\n" if $debug > 0; } - #do not delete last line! 1; diff --git a/lib/calcms/cache.pm b/lib/calcms/cache.pm index dc00789..c3af0e5 100644 --- a/lib/calcms/cache.pm +++ b/lib/calcms/cache.pm @@ -1,125 +1,125 @@ use warnings "all"; use strict; -#use Data::Dumper; -use config; -use time; -use log; -use markup; +use config(); +use time(); +use log(); +use markup(); package cache; require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(init add_map get_map get_map_keys load save get_filename escape_regexp escape_regexp_line); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(init add_map get_map get_map_keys load save get_filename escape_regexp escape_regexp_line); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -my $cache_map ={}; -my $cache_map_keys =[]; -my $header_printed =0; +my $cache_map = {}; +my $cache_map_keys = []; +my $header_printed = 0; -our $date_pattern ='(\d{4})\-(\d{2})\-(\d{2})'; -our $datetime_pattern ='(\d{4})\-(\d{2})\-(\d{2})[T\+](\d{2})\:(\d{2})(\:\d{2})?'; +our $date_pattern = '(\d{4})\-(\d{2})\-(\d{2})'; +our $datetime_pattern = '(\d{4})\-(\d{2})\-(\d{2})[T\+](\d{2})\:(\d{2})(\:\d{2})?'; -sub init{ - $cache_map ={}; - $cache_map_keys =[]; - $header_printed =0; +sub init { + $cache_map = {}; + $cache_map_keys = []; + $header_printed = 0; } -sub add_map{ - my $key =$_[0]; - my $value =$_[1]; +sub add_map { + my $key = $_[0]; + my $value = $_[1]; - $key='^'.$key.'$'; - push @$cache_map_keys,$key; - $cache_map->{$key}=$value; + $key = '^' . $key . '$'; + push @$cache_map_keys, $key; + $cache_map->{$key} = $value; } -sub get_map{ +sub get_map { return $cache_map; } -sub get_map_keys{ +sub get_map_keys { return $cache_map_keys; } #get cache from params -sub load{ - my $params=shift; +sub load { + my $params = shift; - my $filename=get_filename($params); + my $filename = get_filename($params); - my $result={ - filename=>$filename - }; + my $result = { filename => $filename }; + + if ( defined $filename ) { + my @file_info = stat($filename); + my $modified = $file_info[9] || ''; + if ( $modified ne '' ) { - if (defined $filename){ - my @file_info=stat($filename); - my $modified=$file_info[9]||''; - if ($modified ne ''){ #file exists - my @now =localtime(time()); - my @modified =localtime($modified); - if ($now[2]==$modified[2]){ + my @now = localtime( time() ); + my @modified = localtime($modified); + if ( $now[2] == $modified[2] ) { + #file is elder than a hour - my $content=log::load_file($filename); - if (defined $content){ - $result->{content} =$content; - $result->{action} ='read'; + my $content = log::load_file($filename); + if ( defined $content ) { + $result->{content} = $content; + $result->{action} = 'read'; return $result; } } } } - $result->{action}='save'; + $result->{action} = 'save'; return $result; } #get filename from params -sub get_filename{ - my $config = shift; +sub get_filename { + my $config = shift; my $params = shift; -# my $url=$ENV{REQUEST_URI}; - my $url=$ENV{QUERY_STRING}||''; - if ($url ne''){ - $url=~s/(^|\&)update\=\d//gi; - $url=~s/(^|\&)debug\=.*//gi; - $url=~s/\?\&/\?/g; - $url=~s/\&{2,99}/\&/g; - $url=~s/\&$//g; - $url=~s/^\/\//\//g; + # my $url=$ENV{REQUEST_URI}; + my $url = $ENV{QUERY_STRING} || ''; + if ( $url ne '' ) { + $url =~ s/(^|\&)update\=\d//gi; + $url =~ s/(^|\&)debug\=.*//gi; + $url =~ s/\?\&/\?/g; + $url =~ s/\&{2,99}/\&/g; + $url =~ s/\&$//g; + $url =~ s/^\/\//\//g; } - foreach my $pattern (@$cache_map_keys){ + foreach my $pattern (@$cache_map_keys) { - my $filename=$url; - log::write($config, 'cache_trace',"look at \"$filename\" for $pattern") if ($config->{system}->{debug}); - if ($filename =~/$pattern/){ - my $m1=$1; - my $m2=$2; - my $m3=$3; - my $m4=$4; - my $m5=$5; - my $m6=$6; - my $m7=$7; - my $m8=$8; -# my $m9=$9; + my $filename = $url; + if ( $filename =~ /$pattern/ ) { + my $m1 = $1; + my $m2 = $2; + my $m3 = $3; + my $m4 = $4; + my $m5 = $5; + my $m6 = $6; + my $m7 = $7; + my $m8 = $8; - my $result=$cache_map->{$pattern}; + # my $m9=$9; - $filename=~s/$pattern/$result/; - $filename=~s/\$1/$m1/ if (defined $m1); - $filename=~s/\$2/$m2/ if (defined $m2); - $filename=~s/\$3/$m3/ if (defined $m3); - $filename=~s/\$4/$m4/ if (defined $m4); - $filename=~s/\$5/$m5/ if (defined $m5); - $filename=~s/\$6/$m6/ if (defined $m6); - $filename=~s/\$7/$m7/ if (defined $m7); - $filename=~s/\$8/$m8/ if (defined $m8); -# $filename=~s/\$9/$m9/ if (defined $m9); - $filename=$config->{cache}->{cache_dir}.$filename; + my $result = $cache_map->{$pattern}; + + $filename =~ s/$pattern/$result/; + $filename =~ s/\$1/$m1/ if ( defined $m1 ); + $filename =~ s/\$2/$m2/ if ( defined $m2 ); + $filename =~ s/\$3/$m3/ if ( defined $m3 ); + $filename =~ s/\$4/$m4/ if ( defined $m4 ); + $filename =~ s/\$5/$m5/ if ( defined $m5 ); + $filename =~ s/\$6/$m6/ if ( defined $m6 ); + $filename =~ s/\$7/$m7/ if ( defined $m7 ); + $filename =~ s/\$8/$m8/ if ( defined $m8 ); + + # $filename=~s/\$9/$m9/ if (defined $m9); + $filename = $config->{cache}->{cache_dir} . $filename; return $filename; } } @@ -127,53 +127,51 @@ sub get_filename{ } #deprecated: set file from params -sub set{ - my $params=shift; - my $content=shift; +sub set { + my $params = shift; + my $content = shift; - my $filename=get_filename($params); - my $cache={ + my $filename = get_filename($params); + my $cache = { filename => $filename, content => $content }; -# print $filename.":file\n"; - if (defined $filename){ + # print $filename.":file\n"; + + if ( defined $filename ) { cache::save($cache); } } +sub save { + my $cache = shift; -sub save{ - my $cache=shift; + return if ( $cache->{action} ne 'save' ); + return if ( ( !defined $cache->{filename} ) || ( $cache->{filename} eq '' ) ); - return if ($cache->{action}ne'save'); - return if ((!defined $cache->{filename}) || ($cache->{filename}eq'')); - - log::save_file($cache->{filename},$cache->{content}); + log::save_file( $cache->{filename}, $cache->{content} ); chmod 0664, $cache->{filename}; } - -sub escape_regexp{ - my $reg_exp=shift; - $reg_exp=~s/([\^\$\\(\)\[\]\{\}\|\/\*\+\.\-\&\:])/\\$1/gi; +sub escape_regexp { + my $reg_exp = shift; + $reg_exp =~ s/([\^\$\\(\)\[\]\{\}\|\/\*\+\.\-\&\:])/\\$1/gi; return $reg_exp; } -sub escape_regexp_line{ - my $reg_exp=shift; - $reg_exp=~s/([\^\$\\(\)\[\]\{\}\|\/\*\+\.\-\&\:])/\\$1/gi; - return '^'.$reg_exp.'$'; +sub escape_regexp_line { + my $reg_exp = shift; + $reg_exp =~ s/([\^\$\\(\)\[\]\{\}\|\/\*\+\.\-\&\:])/\\$1/gi; + return '^' . $reg_exp . '$'; } -sub configure{ - my $file_name=shift; +sub configure { + my $file_name = shift; cache::init(); - cache::add_map('',$file_name); + cache::add_map( '', $file_name ); } - #do not delete last line! 1; diff --git a/lib/calcms/calendar.pm b/lib/calcms/calendar.pm index 3a3a60f..07ca9be 100644 --- a/lib/calcms/calendar.pm +++ b/lib/calcms/calendar.pm @@ -1,519 +1,526 @@ -#use Calendar::Simple qw(date_span); -use Date::Calc; -use config; -use template; -use markup; -use cache; -use log; -use time; -use project; -use events; +#use config(); +use template(); -package calendar; +#use markup(); +use cache(); + +#use log(); +#use time(); +#use project(); +#use events(); + +package calendar; use warnings "all"; use strict; use Data::Dumper; +use Date::Calc(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(init get_cached_or_render get render get_calendar_weeks configure_cache); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(init get_cached_or_render get render get_calendar_weeks configure_cache); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); #my $debug=''; -sub init{ +sub init { } -sub get_cached_or_render{ -# my $output = $_[0] - my $config = $_[1]; - my $request = $_[2]; +sub get_cached_or_render { - my $parms =$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; + # my $output = $_[0] + my $config = $_[1]; + my $request = $_[2]; - my $cache={}; - if ($config->{cache}->{use_cache} == 1){ - calendar::configure_cache($config); - $cache=cache::load($config, $parms); - log::write($config, 'cache',$cache->{action}) if ($debug); - if (defined $cache->{content}){ - $_[0]=$cache->{content}; - return; - } - } + my $parms = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - my $calendar=calendar::get($config, $request); - log::write($config, 'calendar',$calendar) if ($debug); - #print STDERR Dumper($calendar); + my $cache = {}; + if ( $config->{cache}->{use_cache} == 1 ) { + calendar::configure_cache($config); + $cache = cache::load( $config, $parms ); + if ( defined $cache->{content} ) { + $_[0] = $cache->{content}; + return; + } + } - calendar::render($_[0], $config, $request, $calendar); + my $calendar = calendar::get( $config, $request ); - #write to cache - if ($config->{cache}->{use_cache} == 1){ - #todo:put out reference only - $cache->{content}=$_[0]; - log::write($config, 'cache_files',$cache) if ($debug); - cache::save($cache); - } + calendar::render( $_[0], $config, $request, $calendar ); + + #write to cache + if ( $config->{cache}->{use_cache} == 1 ) { + + #todo:put out reference only + $cache->{content} = $_[0]; + cache::save($cache); + } } +sub get { + my $config = shift; + my $request = shift; -sub get{ - my $config = shift; - my $request = shift; + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - my $params=$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; + my $language = $config->{date}->{language} || 'en'; - my $language = $config->{date}->{language} || 'en'; + my $date = $params->{date} || ''; + my $template = $params->{template} || ''; + my $from_time = $params->{from_time} || ''; + my $till_time = $params->{till_time} || ''; - my $date = $params->{date}||''; - my $template = $params->{template}||''; - my $from_time = $params->{from_time}||''; - my $till_time = $params->{till_time}||''; + my @today = localtime( time() ); + my $today = sprintf( '%04d-%02d-%02d', 1900 + $today[5], $today[4] + 1, $today[3] ); - my @today=localtime(time()); - my $today=sprintf('%04d-%02d-%02d', 1900+$today[5], $today[4]+1, $today[3]); - - my $weekday_names = $time::names->{$language}->{weekdays}; - my $weekday_short_names = $time::names->{$language}->{weekdays_abbr}; - my $week_label={}; - my $c=0; - for my $weekday (@$weekday_short_names){ - $week_label->{$weekday}=$weekday_names->[$c]||''; - $c++; - } + my $weekday_names = $time::names->{$language}->{weekdays}; + my $weekday_short_names = $time::names->{$language}->{weekdays_abbr}; + my $week_label = {}; + my $c = 0; + for my $weekday (@$weekday_short_names) { + $week_label->{$weekday} = $weekday_names->[$c] || ''; + $c++; + } - $template=~s/\'//gi; - $from_time=~s/\'//gi; - $till_time=~s/\'//gi; + $template =~ s/\'//gi; + $from_time =~ s/\'//gi; + $till_time =~ s/\'//gi; - #put "clear all" filter into final results - my $day_result={}; - my $clear_filter=$day_result; + #put "clear all" filter into final results + my $day_result = {}; + my $clear_filter = $day_result; - #put "week day" filter into final results - my $days=[]; - $c=0; - for my $weekday (@$weekday_short_names){ - my $day_result={ - label => $week_label->{$weekday}, - weekday => $c+1, - weekday_parameter => 'weekday='.$c, - weekday_short_name => $weekday_short_names->[$c] ||'', - weekday_name => $weekday_names->[$c] ||'', - description => qq{alle $week_label->{$weekday}-Termine anzeigen}, - }; - push @$days,$day_result; - $c++; - } + #put "week day" filter into final results + my $days = []; + $c = 0; + for my $weekday (@$weekday_short_names) { + my $day_result = { + label => $week_label->{$weekday}, + weekday => $c + 1, + weekday_parameter => 'weekday=' . $c, + weekday_short_name => $weekday_short_names->[$c] || '', + weekday_name => $weekday_names->[$c] || '', + description => qq{alle $week_label->{$weekday}-Termine anzeigen}, + }; + push @$days, $day_result; + $c++; + } - #weeks and days array - my $weekAndDayResults=[]; + #weeks and days array + my $weekAndDayResults = []; - #weekday array - my $weekdayResults=$days; + #weekday array + my $weekdayResults = $days; - #week array - my $weekResults=[]; + #week array + my $weekResults = []; - #info hash by timedate - my $dateInfo={}; + #info hash by timedate + my $dateInfo = {}; - #generate content for each day in a week in a month in a year - #get today - my $start_date=''; - my $end_date=''; - if ($date=~/(\d{4})\-(\d{2})/){ - my $year=$1; - my $month=$2; - $start_date = "$year-$month-01"; - $end_date = "$year-$month-".Date::Calc::Days_in_Month($year,$month); - }else{ - $start_date = $params->{start_date}; - $end_date = $params->{end_date}; - } + #generate content for each day in a week in a month in a year + #get today + my $start_date = ''; + my $end_date = ''; + if ( $date =~ /(\d{4})\-(\d{2})/ ) { + my $year = $1; + my $month = $2; + $start_date = "$year-$month-01"; + $end_date = "$year-$month-" . Date::Calc::Days_in_Month( $year, $month ); + } else { + $start_date = $params->{start_date}; + $end_date = $params->{end_date}; + } - my $previous_month=$start_date; - if ($previous_month=~/(\d{4})\-(\d{2})/){ - my $year =$1; - my $month=$2-1; - $month='0'.$month if (length($month)<2); - if ($month lt '01'){ - $year-=1; - $month='12'; - } - $previous_month="$year-$month-01"; - $previous_month=$params->{start_date} if ($previous_month lt $params->{start_date}); - } + my $previous_month = $start_date; + if ( $previous_month =~ /(\d{4})\-(\d{2})/ ) { + my $year = $1; + my $month = $2 - 1; + $month = '0' . $month if ( length($month) < 2 ); + if ( $month lt '01' ) { + $year -= 1; + $month = '12'; + } + $previous_month = "$year-$month-01"; + $previous_month = $params->{start_date} if ( $previous_month lt $params->{start_date} ); + } - my $next_month=$end_date; - if ($next_month=~/(\d{4})\-(\d{2})/){ - my $year=$1; - my $month=$2+1; - $month='0'.$month if (length($month)<2); - if ($month gt '12'){ - $year+=1; - $month='01'; - } - $next_month="$year-$month-01"; - $next_month=$params->{end_date} if ($next_month gt $params->{end_date}); - } + my $next_month = $end_date; + if ( $next_month =~ /(\d{4})\-(\d{2})/ ) { + my $year = $1; + my $month = $2 + 1; + $month = '0' . $month if ( length($month) < 2 ); + if ( $month gt '12' ) { + $year += 1; + $month = '01'; + } + $next_month = "$year-$month-01"; + $next_month = $params->{end_date} if ( $next_month gt $params->{end_date} ); + } - my $start_year=undef; - my $start_month=undef; - if ($start_date=~/(\d{4})\-(\d{2})/){ - $start_year=$1; - $start_month=$2; - } - my $start_month_name=$time::names->{$language}->{months_abbr}->[$start_month-1]; + my $start_year = undef; + my $start_month = undef; + if ( $start_date =~ /(\d{4})\-(\d{2})/ ) { + $start_year = $1; + $start_month = $2; + } + my $start_month_name = $time::names->{$language}->{months_abbr}->[ $start_month - 1 ]; - if($params->{month_only}eq'1'){ - return { - next_month => $next_month, - previous_month => $previous_month, - start_year => $start_year, - start_month => $start_month, - start_month_name => $start_month_name - }; - } + if ( $params->{month_only} eq '1' ) { + return { + next_month => $next_month, + previous_month => $previous_month, + start_year => $start_year, + start_month => $start_month, + start_month_name => $start_month_name + }; + } - my $years=calendar::get_calendar_weeks($config, $start_date, $end_date); + my $years = calendar::get_calendar_weeks( $config, $start_date, $end_date ); - my $dbh=db::connect($config, $request); + my $dbh = db::connect( $config, $request ); - my $used_days=events::get_by_date_range($dbh, $config, $start_date, $end_date,{ - exclude_projects => 1, - exclude_locations => 1, - }); - my $used_day={}; - for my $day(@$used_days){ - $used_day->{$day->{start_date}}=1; - } + my $used_days = events::get_by_date_range( + $dbh, $config, + $start_date, + $end_date, + { + exclude_projects => 1, + exclude_locations => 1, + } + ); + my $used_day = {}; + for my $day (@$used_days) { + $used_day->{ $day->{start_date} } = 1; + } - for my $year (sort {$a <=> $b} keys %$years){ - my $months=$years->{$year}; + for my $year ( sort { $a <=> $b } keys %$years ) { + my $months = $years->{$year}; - for my $month (sort {$a <=> $b} keys %$months){ - my $weeks=$months->{$month}; + for my $month ( sort { $a <=> $b } keys %$months ) { + my $weeks = $months->{$month}; - my $weekCounter=1; - for my $week (@$weeks){ - my $dayResults=[]; + my $weekCounter = 1; + for my $week (@$weeks) { + my $dayResults = []; - my $week_end =undef; - my $week_start=undef; + my $week_end = undef; + my $week_start = undef; - my $week_of_year=undef; - my $woy_year = undef; + my $week_of_year = undef; + my $woy_year = undef; - for my $date (@$week){ - my ($year, $month, $day)=split(/\-/,$date); - my $weekday=0; - my $day_result=undef; + for my $date (@$week) { + my ( $year, $month, $day ) = split( /\-/, $date ); + my $weekday = 0; + my $day_result = undef; - ($week_of_year,$woy_year) = Date::Calc::Week_of_Year($year,$month,$day) unless defined $week_of_year; + ( $week_of_year, $woy_year ) = Date::Calc::Week_of_Year( $year, $month, $day ) unless defined $week_of_year; - $day_result={ - date => $date, - date_parameter => 'date='.$date, - day => $day, - year => $year, - month => $month, - }; - $day_result->{time} =$from_time if defined $from_time; + $day_result = { + date => $date, + date_parameter => 'date=' . $date, + day => $day, + year => $year, + month => $month, + }; + $day_result->{time} = $from_time if defined $from_time; - $day_result->{class}.= ' calcms_today' if $date eq $today; - $day_result->{class}.= ' selected' if defined $used_day->{$date}; - $day_result->{class}.= " week_$weekCounter"; - $day_result->{class}.= " other_month" if ($weekCounter<2) && ($day gt "15"); - $day_result->{class}.= " other_month" if ($weekCounter>3) && ($day lt "15"); - $day_result->{class}=~s/^\s+//g; + $day_result->{class} .= ' calcms_today' if $date eq $today; + $day_result->{class} .= ' selected' if defined $used_day->{$date}; + $day_result->{class} .= " week_$weekCounter"; + $day_result->{class} .= " other_month" if ( $weekCounter < 2 ) && ( $day gt "15" ); + $day_result->{class} .= " other_month" if ( $weekCounter > 3 ) && ( $day lt "15" ); + $day_result->{class} =~ s/^\s+//g; - $week_start =$day unless defined $week_start; - $week_end =$day; + $week_start = $day unless defined $week_start; + $week_end = $day; - log::write($config, 'day_results',$day_result)if ($debug); + $day_result->{weekday_name} = $weekday_names->[$weekday]; + $day_result->{weekday_short_name} = $weekday_short_names->[$weekday]; + $day_result->{weekday} = $weekday + 1; - $day_result->{weekday_name}=$weekday_names->[$weekday]; - $day_result->{weekday_short_name}=$weekday_short_names->[$weekday]; - $day_result->{weekday}=$weekday+1; + $dateInfo->{ $day_result->{date} } = $day_result->{weekday} if defined $day_result->{date}; - $dateInfo->{$day_result->{date}}=$day_result->{weekday} if defined $day_result->{date}; + push @$dayResults, $day_result; + $weekday++; - push @$dayResults, $day_result; - $weekday++; + } #end for days - }#end for days + #week filter + my $start_date = $week->[0]; + my $end_date = $week->[-1]; - #week filter - my $start_date=$week->[0]; - my $end_date =$week->[-1]; + my $week_result = { + from_date => $start_date, + till_date => $end_date, + week_start => $week_start, + week_end => $week_end, + week_month => sprintf( "%2d", $month ), + week_year => $year, + week_of_year => $week_of_year, + }; - my $week_result={ - from_date => $start_date, - till_date => $end_date, - week_start => $week_start, - week_end => $week_end, - week_month => sprintf("%2d",$month), - week_year => $year, - week_of_year => $week_of_year, - }; + $week_result->{class} .= ' selected' + if ( ( ( defined $params->{from_date} ) && ( $start_date eq $params->{from_date} ) ) + || ( ( defined $params->{till_date} ) && ( $end_date eq $params->{till_date} ) ) ); + $week_result->{class} .= " week_$weekCounter"; + $week_result->{class} =~ s/^\s+//g; - $week_result->{class}.= ' selected' if ( - ((defined $params->{from_date}) && ($start_date eq $params->{from_date})) - || ((defined $params->{till_date}) && ($end_date eq $params->{till_date})) - ); - $week_result->{class}.= " week_$weekCounter"; - $week_result->{class}=~s/^\s+//g; + push @$weekResults, $week_result; - push @$weekResults, $week_result; - - push @$weekAndDayResults,{ - days=>$dayResults, - week=>[$week_result] - }; - $weekCounter++; + push @$weekAndDayResults, + { + days => $dayResults, + week => [$week_result] + }; + $weekCounter++; - }#end week + } #end week - }#end month + } #end month - }#end year + } #end year - for my $weekday (@$weekdayResults){ - $weekday->{start_date} = $start_date; - $weekday->{end_date} = $end_date; - } - - return { - week_and_days => $weekAndDayResults, - weekdays => $weekdayResults, - weeks => $weekResults, - days => $dateInfo, - next_month => $next_month, - previous_month => $previous_month, - start_date => $start_date, - end_date => $end_date, - start_month_name => $start_month_name, - start_month => $start_month, - start_year => $start_year, - base_url => $config->{locations}->{base_url}, - cache_base_url => $config->{cache}->{base_url}, - controllers => $config->{controllers}, - }; + for my $weekday (@$weekdayResults) { + $weekday->{start_date} = $start_date; + $weekday->{end_date} = $end_date; + } + + return { + week_and_days => $weekAndDayResults, + weekdays => $weekdayResults, + weeks => $weekResults, + days => $dateInfo, + next_month => $next_month, + previous_month => $previous_month, + start_date => $start_date, + end_date => $end_date, + start_month_name => $start_month_name, + start_month => $start_month, + start_year => $start_year, + base_url => $config->{locations}->{base_url}, + cache_base_url => $config->{cache}->{base_url}, + controllers => $config->{controllers}, + }; } -sub render{ -# my $out = $_[0]; - my $config = $_[1]; - my $request = $_[2]; - my $calendar = $_[3]; +sub render { - my $parms =$request->{params}->{checked}; - my $debug=$config->{system}->{debug}; + # my $out = $_[0]; + my $config = $_[1]; + my $request = $_[2]; + my $calendar = $_[3]; - my $template_parameters=$calendar; - $template_parameters->{debug} = $config->{system}->{debug}; - $template_parameters->{base_url} = $config->{locations}->{base_url}; - $template_parameters->{cache_base_url} = $config->{cache}->{base_url}; - $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 $parms = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - template::process($_[0], $parms->{template}, $template_parameters); + my $template_parameters = $calendar; + $template_parameters->{debug} = $config->{system}->{debug}; + $template_parameters->{base_url} = $config->{locations}->{base_url}; + $template_parameters->{cache_base_url} = $config->{cache}->{base_url}; + $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} ); + + template::process( $_[0], $parms->{template}, $template_parameters ); } -sub get_calendar_weeks{ - my $config = shift; - my $start = shift; - my $end = shift; +sub get_calendar_weeks { + my $config = shift; + my $start = shift; + my $end = shift; - my $debug = $config->{system}->{debug}; + my $debug = $config->{system}->{debug}; - $start = time::date_to_array($start); - $end = time::date_to_array($end); + $start = time::date_to_array($start); + $end = time::date_to_array($end); - my $start_year = int($start->[0]); - my $end_year = int($end->[0]); + my $start_year = int( $start->[0] ); + my $end_year = int( $end->[0] ); - my $start_month = int($start->[1]); - my $end_month = int($end->[1]); + my $start_month = int( $start->[1] ); + my $end_month = int( $end->[1] ); - my $years={}; - for my $year ($start_year..$end_year){ - my $months={}; - for my $month ($start_month..$end_month){ - #get week arrays of days of the month - my $weeks=getWeeksOfMonth($year, $month); - $months->{$month}=$weeks; - } - $years->{$year}=$months; - } - log::write($config, 'years',$years)if ($debug); - return $years; + my $years = {}; + for my $year ( $start_year .. $end_year ) { + my $months = {}; + for my $month ( $start_month .. $end_month ) { + + #get week arrays of days of the month + my $weeks = getWeeksOfMonth( $year, $month ); + $months->{$month} = $weeks; + } + $years->{$year} = $months; + } + return $years; } -sub getWeeksOfMonth{ - my $thisYear = shift; - my $thisMonth = shift; - my $thisDay = 1; +sub getWeeksOfMonth { + my $thisYear = shift; + my $thisMonth = shift; + my $thisDay = 1; - # get weekday of 1st of month - my $thisMonthWeekday = Date::Calc::Day_of_Week($thisYear,$thisMonth,1); - - # get next month date - my($nextYear, $nextMonth, $nextDay)=Date::Calc::Add_Delta_YM($thisYear,$thisMonth,$thisDay, 0,1); - # get weekday of 1st of next month - my $nextMonthWeekday = Date::Calc::Day_of_Week($nextYear, $nextMonth, $nextDay); - my($lastYear, $lastMonth, $lastDayOfMonth)=Date::Calc::Add_Delta_Days($nextYear,$nextMonth,$nextDay, -1); + # get weekday of 1st of month + my $thisMonthWeekday = Date::Calc::Day_of_Week( $thisYear, $thisMonth, 1 ); - # get date of 1st of row - my( $week,$year) = Date::Calc::Week_of_Year($thisYear,$thisMonth,$thisDay); - ($year,my $month, my $day) = Date::Calc::Monday_of_Week($week,$year); - - my @weeks=(); - my $weekday=1; + # get next month date + my ( $nextYear, $nextMonth, $nextDay ) = Date::Calc::Add_Delta_YM( $thisYear, $thisMonth, $thisDay, 0, 1 ); - { - # first week - my @days=(); - for $weekday(0 .. $thisMonthWeekday-2){ - push @days, sprintf("%04d-%02d-%02d",$year,$month,$day); - $day++; - } - # set current month - $month = $thisMonth; - $year = $thisYear; - $day = 1; - for $weekday($thisMonthWeekday..7){ - push @days, sprintf("%04d-%02d-%02d",$year,$month,$day); - $day++; - } - # next week - push @weeks, \@days; - } - - # weeks until end of month - while(scalar(@weeks)<6){ - my @days=(); - $weekday=1; - while($weekday<=7){ - push @days, sprintf("%04d-%02d-%02d",$year,$month,$day); - $day++; - $weekday++; - last if $day>$lastDayOfMonth; - } + # get weekday of 1st of next month + my $nextMonthWeekday = Date::Calc::Day_of_Week( $nextYear, $nextMonth, $nextDay ); + my ( $lastYear, $lastMonth, $lastDayOfMonth ) = Date::Calc::Add_Delta_Days( $nextYear, $nextMonth, $nextDay, -1 ); - if ($day>$lastDayOfMonth){ - # set next month - $month=$nextMonth; - $year=$nextYear; - $day=1; + # get date of 1st of row + my ( $week, $year ) = Date::Calc::Week_of_Year( $thisYear, $thisMonth, $thisDay ); + ( $year, my $month, my $day ) = Date::Calc::Monday_of_Week( $week, $year ); - if ($nextMonthWeekday!=1){ - # finish end week - if($weekday<=7){ - while( $weekday<=7){ - push @days, sprintf("%04d-%02d-%02d",$year,$month,$day); - $day++; - $weekday++; - } - } - } - push @weeks, \@days; - last; - }; - push @weeks, \@days if $weeks[-1]->[-1] ne $days[-1]; - } - - #coming weeks - while(scalar(@weeks)<6){ - my @days=(); - for $weekday(1..7){ - push @days, sprintf("%04d-%02d-%02d",$year,$month,$day); - $day++; - } - push @weeks, \@days; - } - return \@weeks; + my @weeks = (); + my $weekday = 1; + + { + # first week + my @days = (); + for $weekday ( 0 .. $thisMonthWeekday - 2 ) { + push @days, sprintf( "%04d-%02d-%02d", $year, $month, $day ); + $day++; + } + + # set current month + $month = $thisMonth; + $year = $thisYear; + $day = 1; + for $weekday ( $thisMonthWeekday .. 7 ) { + push @days, sprintf( "%04d-%02d-%02d", $year, $month, $day ); + $day++; + } + + # next week + push @weeks, \@days; + } + + # weeks until end of month + while ( scalar(@weeks) < 6 ) { + my @days = (); + $weekday = 1; + while ( $weekday <= 7 ) { + push @days, sprintf( "%04d-%02d-%02d", $year, $month, $day ); + $day++; + $weekday++; + last if $day > $lastDayOfMonth; + } + + if ( $day > $lastDayOfMonth ) { + + # set next month + $month = $nextMonth; + $year = $nextYear; + $day = 1; + + if ( $nextMonthWeekday != 1 ) { + + # finish end week + if ( $weekday <= 7 ) { + while ( $weekday <= 7 ) { + push @days, sprintf( "%04d-%02d-%02d", $year, $month, $day ); + $day++; + $weekday++; + } + } + } + push @weeks, \@days; + last; + } + push @weeks, \@days if $weeks[-1]->[-1] ne $days[-1]; + } + + #coming weeks + while ( scalar(@weeks) < 6 ) { + my @days = (); + for $weekday ( 1 .. 7 ) { + push @days, sprintf( "%04d-%02d-%02d", $year, $month, $day ); + $day++; + } + push @weeks, \@days; + } + return \@weeks; } -sub configure_cache{ - my $config = shift; - my $debug=$config->{system}->{debug}; +sub configure_cache { + my $config = shift; + my $debug = $config->{system}->{debug}; - cache::init(); + cache::init(); - my $date_pattern = $cache::date_pattern; - my $controllers = $config->{controllers}; + my $date_pattern = $cache::date_pattern; + my $controllers = $config->{controllers}; - cache::add_map('' , $controllers->{calendar}.'/cal.html'); - cache::add_map('date='.$date_pattern , $controllers->{calendar}.'/$1-$2.html'); - cache::add_map('from_date='.$date_pattern.'&till_date='.$date_pattern , $controllers->{calendar}.'/$1-$2_$5-$6.html'); + cache::add_map( '', $controllers->{calendar} . '/cal.html' ); + cache::add_map( 'date=' . $date_pattern, $controllers->{calendar} . '/$1-$2.html' ); + cache::add_map( 'from_date=' . $date_pattern . '&till_date=' . $date_pattern, $controllers->{calendar} . '/$1-$2_$5-$6.html' ); - log::write($config, 'cache_files',cache::get_map()) if ($debug); } -sub check_params{ - my $config=shift; - my $params=shift; +sub check_params { + my $config = shift; + my $params = shift; - #get start and stop from projects - my $range= project::get_date_range($config); - my $start_date = $range->{start_date}; - my $end_date = $range->{end_date}; + #get start and stop from projects + my $range = project::get_date_range($config); + my $start_date = $range->{start_date}; + my $end_date = $range->{end_date}; - #switch off limiting end date by project - my $open_end=0; - if((defined $params->{'open_end'})&&($params->{'open_end'}=~/(\d+)/)){ - $open_end = $1; - $end_date = time::add_days_to_datetime(time::time_to_datetime(), 365); - } + #switch off limiting end date by project + my $open_end = 0; + if ( ( defined $params->{'open_end'} ) && ( $params->{'open_end'} =~ /(\d+)/ ) ) { + $open_end = $1; + $end_date = time::add_days_to_datetime( time::time_to_datetime(), 365 ); + } - my $month_only=$params->{month_only}||''; + my $month_only = $params->{month_only} || ''; - #filter for date - my $date=time::check_date($params->{date}); + #filter for date + my $date = time::check_date( $params->{date} ); - $date =$start_date if ($date lt $start_date); - $date =$end_date if ($date gt $end_date); - log::error($config, "no valid year-month format given!") if ($date eq"-1"); + $date = $start_date if ( $date lt $start_date ); + $date = $end_date if ( $date gt $end_date ); + log::error( $config, "no valid year-month format given!" ) if ( $date eq "-1" ); - my $time=time::check_time($params->{time}); - log::error($config, "no valid time format given!") if ($time eq"-1"); + my $time = time::check_time( $params->{time} ); + log::error( $config, "no valid time format given!" ) if ( $time eq "-1" ); - my $from_date=time::check_date($params->{from_date})||''; - log::error($config, "no valid date format given!") if (defined $from_date && $from_date eq"-1"); - $from_date =$start_date if ($from_date lt $start_date); - $from_date =$end_date if ($from_date gt $end_date); + my $from_date = time::check_date( $params->{from_date} ) || ''; + log::error( $config, "no valid date format given!" ) if ( defined $from_date && $from_date eq "-1" ); + $from_date = $start_date if ( $from_date lt $start_date ); + $from_date = $end_date if ( $from_date gt $end_date ); - my $till_date=time::check_date($params->{till_date}||''); - log::error($config, "no valid date format given!") if (defined $till_date && $till_date eq"-1"); - $till_date =$start_date if ($till_date lt $start_date); - $till_date =$end_date if ($till_date gt $end_date); + my $till_date = time::check_date( $params->{till_date} || '' ); + log::error( $config, "no valid date format given!" ) if ( defined $till_date && $till_date eq "-1" ); + $till_date = $start_date if ( $till_date lt $start_date ); + $till_date = $end_date if ( $till_date gt $end_date ); - my $template=template::check($params->{template},'calendar.html'); + my $template = template::check( $params->{template}, 'calendar.html' ); - my $debug=$params->{debug}; - if ((defined $debug) && ($debug=~/([a-z\_\,]+)/)){ - $debug=$1; - } + my $debug = $params->{debug}; + if ( ( defined $debug ) && ( $debug =~ /([a-z\_\,]+)/ ) ) { + $debug = $1; + } - return { - template => $template, - date => $date, - from_date => $from_date, - till_date => $till_date, - debug => $debug, - month_only => $month_only, - open_end => $open_end, - start_date => $start_date, - end_date => $end_date - } + return { + template => $template, + date => $date, + from_date => $from_date, + till_date => $till_date, + debug => $debug, + month_only => $month_only, + open_end => $open_end, + start_date => $start_date, + end_date => $end_date + }; } + #do not delete last line! 1; diff --git a/lib/calcms/comments.pm b/lib/calcms/comments.pm index 2f3927c..938a41b 100644 --- a/lib/calcms/comments.pm +++ b/lib/calcms/comments.pm @@ -1,258 +1,265 @@ use warnings "all"; use strict; use Data::Dumper; -use config; -use template; -use time; +use config(); +use template(); +use time(); -package comments; +package comments; use warnings "all"; use strict; use Data::Dumper; require Exporter; our @ISA = qw(Exporter); + #our @EXPORT = qw(all); -our @EXPORT_OK = qw(init get_cached_or_render get modify_results render configure_cache get_query get_by_event get_level get_events check insert set_lock_status set_news_status lock update_comment_count sort); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @EXPORT_OK = + qw(init get_cached_or_render get modify_results render configure_cache get_query get_by_event get_level get_events check insert set_lock_status set_news_status lock update_comment_count sort); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -sub init{ +sub init { } -sub get_cached_or_render{ -# my $response=$_[0]; - my $config = $_[1]; - my $request = $_[2]; - my $mark_locked = $_[3]; +sub get_cached_or_render { - my $params=$request->{params}->{checked}; - #print STDERR Dumper($params); - $config->{app_name}=$config->{controllers}->{comments}; + # my $response=$_[0]; + my $config = $_[1]; + my $request = $_[2]; + my $mark_locked = $_[3]; - my $comment=$request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my $filename=''; - my $cache={}; + #print STDERR Dumper($params); + $config->{app_name} = $config->{controllers}->{comments}; - my $results=comments::get($config, $request); + my $comment = $request->{params}->{checked}; - if((defined $mark_locked) && ($mark_locked eq 'mark_locked')){ - for my $result(@$results){ - if($result->{lock_status}ne'show'){ - $result->{author}='Zensur'; - $result->{content}='Dieser Eintrag wurde gelöscht.'; - } - } - }elsif((defined $mark_locked) && ($mark_locked eq 'filter_locked')){ - my @results2=(); - for my $result(@$results){ - push @results2, $result if($result->{lock_status}eq'show'); - } - $results=\@results2; - } + my $filename = ''; + my $cache = {}; - comments::modify_results($results, $config, $request); + my $results = comments::get( $config, $request ); - #print STDERR Dumper($results); - $results=comments::sort($config, $results) if ($comment->{type}eq'tree'); + if ( ( defined $mark_locked ) && ( $mark_locked eq 'mark_locked' ) ) { + for my $result (@$results) { + if ( $result->{lock_status} ne 'show' ) { + $result->{author} = 'Zensur'; + $result->{content} = 'Dieser Eintrag wurde gelöscht.'; + } + } + } elsif ( ( defined $mark_locked ) && ( $mark_locked eq 'filter_locked' ) ) { + my @results2 = (); + for my $result (@$results) { + push @results2, $result if ( $result->{lock_status} eq 'show' ); + } + $results = \@results2; + } - #print STDERR Dumper($results); -# if ($comment->{sort_order}eq'desc'){ -# my @results= reverse(@$results); -# $results=\@results; -# } + comments::modify_results( $results, $config, $request ); - if ( - ($params->{show_max} ne'') - && ($params->{limit} ne'') - && ($params->{show_max}<$params->{limit}) - ){ - my @results2=(); - my $c=0; - for my $result(@$results){ - push @results2,$result; - $c++; - last if ($c>=$params->{show_max}); - } - $results=\@results2; - } + #print STDERR Dumper($results); + $results = comments::sort( $config, $results ) if ( $comment->{type} eq 'tree' ); - comments::render($_[0], $config, $request, $results); + #print STDERR Dumper($results); + # if ($comment->{sort_order}eq'desc'){ + # my @results= reverse(@$results); + # $results=\@results; + # } + + if ( ( $params->{show_max} ne '' ) + && ( $params->{limit} ne '' ) + && ( $params->{show_max} < $params->{limit} ) ) + { + my @results2 = (); + my $c = 0; + for my $result (@$results) { + push @results2, $result; + $c++; + last if ( $c >= $params->{show_max} ); + } + $results = \@results2; + } + + comments::render( $_[0], $config, $request, $results ); } -sub get{ - my $config = shift; - my $request= shift; +sub get { + my $config = shift; + my $request = shift; - my $params=$request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my $dbh=db::connect($config, $request); + my $dbh = db::connect( $config, $request ); - (my $query, my $bind_values)=comments::get_query($dbh, $config, $request); - #print STDERR Dumper($$query); - #print STDERR Dumper($bind_values); - my $results=db::get($dbh, $$query, $bind_values); - #print STDERR Dumper($results); - return $results; + ( my $query, my $bind_values ) = comments::get_query( $dbh, $config, $request ); + + #print STDERR Dumper($$query); + #print STDERR Dumper($bind_values); + my $results = db::get( $dbh, $$query, $bind_values ); + + #print STDERR Dumper($results); + return $results; } -sub get_query{ - my $dbh = shift; - my $config = shift; - my $request=shift; +sub get_query { + my $dbh = shift; + my $config = shift; + my $request = shift; - my $params=$request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my $event_id = undef; - my $event_start = undef; - my $from = 'calcms_comments c'; - my $where = ''; - my $limit = ''; - my @conditions=(); - my $bind_values=[]; + my $event_id = undef; + my $event_start = undef; + my $from = 'calcms_comments c'; + my $where = ''; + my $limit = ''; + my @conditions = (); + my $bind_values = []; - #exclude comments from config filter/locations_to_exclude - if ( - (defined $config->{filter}) - && (defined $config->{filter}->{locations_to_exclude}) - ){ - my @locations_to_exclude=split(/[,\s]+/,$config->{filter}->{locations_to_exclude}); - my $locations_to_exclude=join(', ',map {'?'} @locations_to_exclude); - - $from.=',calcms_events e'; - push @conditions,'e.id=c.event_id'; - push @conditions,'e.location not in ('.$locations_to_exclude.')'; - for my $location (@locations_to_exclude){ - push @$bind_values, $location; - } - } + #exclude comments from config filter/locations_to_exclude + if ( ( defined $config->{filter} ) + && ( defined $config->{filter}->{locations_to_exclude} ) ) + { + my @locations_to_exclude = split( /[,\s]+/, $config->{filter}->{locations_to_exclude} ); + my $locations_to_exclude = join( ', ', map { '?' } @locations_to_exclude ); - if ( - (defined $params->{event_id} && $params->{event_id}ne'') && - (defined $params->{event_start} && $params->{event_start}ne'') - ){ - #$where =qq{ and (event_id=? or event_start=?) }; - push @conditions, q{ (event_id=? or event_start=?) }; - push @$bind_values, $params->{event_id}; - push @$bind_values, $params->{event_start}; - } + $from .= ',calcms_events e'; + push @conditions, 'e.id=c.event_id'; + push @conditions, 'e.location not in (' . $locations_to_exclude . ')'; + for my $location (@locations_to_exclude) { + push @$bind_values, $location; + } + } - my $sort_order=$params->{sort_order}; + if ( ( defined $params->{event_id} && $params->{event_id} ne '' ) + && ( defined $params->{event_start} && $params->{event_start} ne '' ) ) + { + #$where =qq{ and (event_id=? or event_start=?) }; + push @conditions, q{ (event_id=? or event_start=?) }; + push @$bind_values, $params->{event_id}; + push @$bind_values, $params->{event_start}; + } - if ($params->{limit} ne''){ - $limit ='limit ?'; - push @$bind_values,$params->{limit}; - } + my $sort_order = $params->{sort_order}; - if (@conditions>0){ - $where= 'where '.join(' and ',@conditions); - } + if ( $params->{limit} ne '' ) { + $limit = 'limit ?'; + push @$bind_values, $params->{limit}; + } - my $dbcols=['id', 'event_start', 'event_id', 'content', 'ip', 'author', 'email', - 'lock_status', 'created_at', 'title', 'parent_id', 'level', 'news_status', 'project']; - my $cols=join(', ',map { 'c.'.$_ } @$dbcols); - my $query=qq{ + if ( @conditions > 0 ) { + $where = 'where ' . join( ' and ', @conditions ); + } + + my $dbcols = [ + 'id', 'event_start', 'event_id', 'content', 'ip', 'author', 'email', 'lock_status', + 'created_at', 'title', 'parent_id', 'level', 'news_status', 'project' + ]; + my $cols = join( ', ', map { 'c.' . $_ } @$dbcols ); + my $query = qq{ select $cols from $from $where order by created_at $sort_order $limit }; -# where lock_status='show' -# use Data::Dumper;print STDERR Dumper($query); - return (\$query, $bind_values); + # where lock_status='show' + # use Data::Dumper;print STDERR Dumper($query); + + return ( \$query, $bind_values ); } -sub modify_results{ - my $results = $_[0]; - my $config = $_[1]; - my $request = $_[2]; +sub modify_results { + my $results = $_[0]; + my $config = $_[1]; + my $request = $_[2]; - my $params=$request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my $time_diff=''; - if ($params->{template}=~/\.xml/){ - $time_diff=time::utc_offset($config->{date}->{time_zone}); - $time_diff=~s/(\d\d)(\d\d)/$1\:$2/g; - } + my $time_diff = ''; + if ( $params->{template} =~ /\.xml/ ) { + $time_diff = time::utc_offset( $config->{date}->{time_zone} ); + $time_diff =~ s/(\d\d)(\d\d)/$1\:$2/g; + } - my $language = $config->{date}->{language} || 'en'; - - for my $result (@$results){ - $result->{allow}->{new_comments} = 1 if ($params->{allow}->{new_comments}); - $result->{start_date_name} = time::date_format($result->{created_at}, $language); - $result->{start_time_name} = time::time_format($result->{created_at}); - my $comment_limit=100; - if (length($result->{content})>$comment_limit){ - $result->{short_content} = substr($result->{content},0,$comment_limit).'...' ; - }else{ - $result->{short_content} = $result->{content}; - } - $result->{base_url} = $config->{locations}->{base_url}; - $result->{cache_base_url} = $config->{cache}->{base_url}; + my $language = $config->{date}->{language} || 'en'; - if($params->{template}=~/\.xml/){ -# $result->{content} =~s/(\[\[.*?\]\])//gi; -# $result->{content} =markup::plain_to_xml($result->{content}); -# $result->{content} =$result->{html_content}; + for my $result (@$results) { + $result->{allow}->{new_comments} = 1 if ( $params->{allow}->{new_comments} ); + $result->{start_date_name} = time::date_format( $result->{created_at}, $language ); + $result->{start_time_name} = time::time_format( $result->{created_at} ); + my $comment_limit = 100; + if ( length( $result->{content} ) > $comment_limit ) { + $result->{short_content} = substr( $result->{content}, 0, $comment_limit ) . '...'; + } else { + $result->{short_content} = $result->{content}; + } + $result->{base_url} = $config->{locations}->{base_url}; + $result->{cache_base_url} = $config->{cache}->{base_url}; - $result->{content} = markup::html_to_plain($result->{html_content}); - $result->{short_content}= markup::html_to_plain($result->{short_content}); - $result->{excerpt} = "lass dich ueberraschen" if ((defined $result->{excerpt}) && ($result->{excerpt}eq'')); - $result->{excerpt} = markup::html_to_plain($result->{excerpt}); - $result->{title} = markup::html_to_plain($result->{title}); - $result->{series_name} = markup::html_to_plain($result->{series_name}); - $result->{program} = markup::html_to_plain($result->{program}); + if ( $params->{template} =~ /\.xml/ ) { - if (defined $result->{created_at}){ - $result->{created_at}=~s/ /T/gi; - $result->{created_at}.=$time_diff; - } + # $result->{content} =~s/(\[\[.*?\]\])//gi; + # $result->{content} =markup::plain_to_xml($result->{content}); + # $result->{content} =$result->{html_content}; - if (defined $result->{modified_at}){ - $result->{modified_at}=~s/ /T/gi; - $result->{modified_at}.=$time_diff; - } - } - } - return $results; + $result->{content} = markup::html_to_plain( $result->{html_content} ); + $result->{short_content} = markup::html_to_plain( $result->{short_content} ); + $result->{excerpt} = "lass dich ueberraschen" if ( ( defined $result->{excerpt} ) && ( $result->{excerpt} eq '' ) ); + $result->{excerpt} = markup::html_to_plain( $result->{excerpt} ); + $result->{title} = markup::html_to_plain( $result->{title} ); + $result->{series_name} = markup::html_to_plain( $result->{series_name} ); + $result->{program} = markup::html_to_plain( $result->{program} ); + + if ( defined $result->{created_at} ) { + $result->{created_at} =~ s/ /T/gi; + $result->{created_at} .= $time_diff; + } + + if ( defined $result->{modified_at} ) { + $result->{modified_at} =~ s/ /T/gi; + $result->{modified_at} .= $time_diff; + } + } + } + return $results; } +sub render { -sub render{ -# my $response =$_[0]; - my $config = $_[1]; - my $request = $_[2]; - my $results = $_[3]; + # my $response =$_[0]; + my $config = $_[1]; + my $request = $_[2]; + my $results = $_[3]; - my $params =$request->{params}->{checked}; + my $params = $request->{params}->{checked}; - my %template_parameters=%$params; - my $template_parameters=\%template_parameters; + my %template_parameters = %$params; + my $template_parameters = \%template_parameters; - $template_parameters->{comments} = $results; - $template_parameters->{comment_count} =(@$results)+0; - $template_parameters->{one_result} =1 if($template_parameters->{comment_count}==1); - $template_parameters->{allow}->{new_comments} =1 if ($params->{allow}->{new_comments}); + $template_parameters->{comments} = $results; + $template_parameters->{comment_count} = (@$results) + 0; + $template_parameters->{one_result} = 1 if ( $template_parameters->{comment_count} == 1 ); + $template_parameters->{allow}->{new_comments} = 1 if ( $params->{allow}->{new_comments} ); - $template_parameters->{event_id} = $params->{event_id}; - $template_parameters->{event_start} = $params->{event_start}; + $template_parameters->{event_id} = $params->{event_id}; + $template_parameters->{event_start} = $params->{event_start}; - $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}); - $template_parameters->{controllers} = $config->{controllers}; - template::process($_[0],$params->{template},$template_parameters); + $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} ); + $template_parameters->{controllers} = $config->{controllers}; + template::process( $_[0], $params->{template}, $template_parameters ); } #check if comment exists already -sub check{ - my $dbh = shift; - my $config = shift; - my $comment = shift; +sub check { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $query=qq{ + my $query = qq{ select id from calcms_comments where ( @@ -264,38 +271,32 @@ sub check{ and ip=? and content=? }; - my $bind_values=[ - $comment->{event_start}, - $comment->{event_id}, - $comment->{parent_id}, - $comment->{author}, - $comment->{ip}, - $comment->{content} - ]; + my $bind_values = + [ $comment->{event_start}, $comment->{event_id}, $comment->{parent_id}, $comment->{author}, $comment->{ip}, $comment->{content} ]; - my $comments=db::get($dbh,$query,$bind_values); + my $comments = db::get( $dbh, $query, $bind_values ); - my @comments=@$comments; - return 0 if (@comments>0); - return 1; + my @comments = @$comments; + return 0 if ( @comments > 0 ); + return 1; } #used for insert -sub get_level{ - my $dbh = shift; - my $config = shift; - my $comment = shift; +sub get_level { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $parent_id=$comment->{parent_id}; - return 0 unless defined $parent_id; - if($parent_id=~/(\d+)/){ - $parent_id=$1; - } - return 0 unless $parent_id=~/^\d+$/; - return 0 if $parent_id==0; + my $parent_id = $comment->{parent_id}; + return 0 unless defined $parent_id; + if ( $parent_id =~ /(\d+)/ ) { + $parent_id = $1; + } + return 0 unless $parent_id =~ /^\d+$/; + return 0 if $parent_id == 0; - #get level from parent node - my $query=qq{ + #get level from parent node + my $query = qq{ select level from calcms_comments where ( @@ -305,58 +306,49 @@ sub get_level{ and id=? limit 1 }; - my $bind_values=[ - $comment->{event_start}, - $comment->{event_id}, - $parent_id - ]; + my $bind_values = [ $comment->{event_start}, $comment->{event_id}, $parent_id ]; - my $comments=db::get($dbh,$query,$bind_values); + my $comments = db::get( $dbh, $query, $bind_values ); - my @comments=@$comments; - if (@comments>0){ - return $comments->[0]->{level}+1; - } - return 0; + my @comments = @$comments; + if ( @comments > 0 ) { + return $comments->[0]->{level} + 1; + } + return 0; } -sub get_by_event{ - my $dbh = shift; - my $config = shift; - my $request =$_[0]; +sub get_by_event { + my $dbh = shift; + my $config = shift; + my $request = $_[0]; - my $params = $request->{params}->{checked}->{comment}; + my $params = $request->{params}->{checked}->{comment}; - my $event_id = undef; - my $search = undef; - my $where = ''; - my $limit = ''; - my $bind_values=[]; + my $event_id = undef; + my $search = undef; + my $where = ''; + my $limit = ''; + my $bind_values = []; - if ($params->{event_id}ne''){ - $where =qq{ event_id=? }; - $bind_values=[$params->{event_id}]; - } + if ( $params->{event_id} ne '' ) { + $where = qq{ event_id=? }; + $bind_values = [ $params->{event_id} ]; + } - if ((defined $params->{search}) && ($params->{search}ne'')){ - $search ='%'.$params->{search}.'%'; - $where =qq{ (content like ?) or (email like ?) or (author like ?) or (ip like ?)}; - $bind_values=[ - $search, - $search, - $search, - $search - ]; - } + if ( ( defined $params->{search} ) && ( $params->{search} ne '' ) ) { + $search = '%' . $params->{search} . '%'; + $where = qq{ (content like ?) or (email like ?) or (author like ?) or (ip like ?)}; + $bind_values = [ $search, $search, $search, $search ]; + } - my $sort_order=$params->{sort_order} || 'desc'; + my $sort_order = $params->{sort_order} || 'desc'; - if ((defined $params->{limit}) && ($params->{limit} ne'')){ - $limit ='limit ?'; - push @$bind_values,$params->{limit}; - } + if ( ( defined $params->{limit} ) && ( $params->{limit} ne '' ) ) { + $limit = 'limit ?'; + push @$bind_values, $params->{limit}; + } - my $query=qq{ + my $query = qq{ select * from calcms_comments where $where @@ -364,21 +356,21 @@ sub get_by_event{ $limit }; - #print STDERR $query."\n"; - my $comments=db::get($dbh, $query, $bind_values); + #print STDERR $query."\n"; + my $comments = db::get( $dbh, $query, $bind_values ); - return $comments; + return $comments; } -sub get_by_time{ - my $dbh = shift; - my $config = shift; - my $comment = shift; +sub get_by_time { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $where=''; - my $bind_values=[]; - if ($comment->{age} ne ''){ - $where=qq{ + my $where = ''; + my $bind_values = []; + if ( $comment->{age} ne '' ) { + $where = qq{ where event_id in ( select distinct event_id from calcms_comments @@ -387,11 +379,9 @@ sub get_by_time{ ) ) }; - $bind_values=[ - $comment->{age}*3600, - ]; - }elsif (($comment->{from} ne '') && ($comment->{till} ne '')){ - $where=qq{ + $bind_values = [ $comment->{age} * 3600, ]; + } elsif ( ( $comment->{from} ne '' ) && ( $comment->{till} ne '' ) ) { + $where = qq{ where event_id in ( select distinct event_id from calcms_comments @@ -399,313 +389,309 @@ sub get_by_time{ and created_at <= ? ) }; - $bind_values=[ - $comment->{from}, - $comment->{till} - ]; - } - my $query=qq{ + $bind_values = [ $comment->{from}, $comment->{till} ]; + } + my $query = qq{ select * from calcms_comments $where order by event_id, id }; - my $comments=db::get($dbh, $query, $bind_values); - return $comments; + my $comments = db::get( $dbh, $query, $bind_values ); + return $comments; } -sub get_events{ - my $dbh=shift; - my $config = shift; - my $request=shift; - my $comments=shift; +sub get_events { + my $dbh = shift; + my $config = shift; + my $request = shift; + my $comments = shift; - my $params=$request->{params}->{checked}->{comment}; + my $params = $request->{params}->{checked}->{comment}; - #get event_ids from comments - my $event_ids={}; - for my $comment (@$comments){ - my $event_id=$comment->{event_id}; - $event_ids->{$event_id}=1; - } + #get event_ids from comments + my $event_ids = {}; + for my $comment (@$comments) { + my $event_id = $comment->{event_id}; + $event_ids->{$event_id} = 1; + } - #get events from comment's event ids - return [] if ((keys %{$event_ids})==0); + #get events from comment's event ids + return [] if ( ( keys %{$event_ids} ) == 0 ); - #my $quoted_event_ids=join "," ,(map {$dbh->quote($_)}(keys %{$event_ids})); - my @bind_values=keys %{$event_ids}; - my $event_id_values=join "," ,(map {'?'}(keys %{$event_ids})); + #my $quoted_event_ids=join "," ,(map {$dbh->quote($_)}(keys %{$event_ids})); + my @bind_values = keys %{$event_ids}; + my $event_id_values = join ",", ( map { '?' } ( keys %{$event_ids} ) ); - my $query=qq{ + my $query = qq{ select id, start, program, series_name, title, excerpt from calcms_events where id in ($event_id_values) }; - my $events=db::get($dbh, $query, \@bind_values); + my $events = db::get( $dbh, $query, \@bind_values ); - #build lookup table for events by id - my $events_by_id={}; - for my $event (@$events){ - $events_by_id->{$event->{id}}=$event; - $event->{max_comment_id}=0; - } + #build lookup table for events by id + my $events_by_id = {}; + for my $event (@$events) { + $events_by_id->{ $event->{id} } = $event; + $event->{max_comment_id} = 0; + } - #add unassigned events -# for my $event_id (keys %{$event_ids}){ -# if ($events_by_id->{$event_id}eq''){ -# my $event={ -# title => "not assigned", -# max_comment_id => 0 -# -# }; -# push @$events,$event; -# $events_by_id->{$event_id}=$event; -# } -# } + #add unassigned events + # for my $event_id (keys %{$event_ids}){ + # if ($events_by_id->{$event_id}eq''){ + # my $event={ + # title => "not assigned", + # max_comment_id => 0 + # + # }; + # push @$events,$event; + # $events_by_id->{$event_id}=$event; + # } + # } - for my $comment (@$comments){ - my $event_id=$comment->{event_id}; - my $event=$events_by_id->{$event_id}; - next unless (defined $event); - $event->{comment_count}++; - push @{$event->{comments}},$comment;# if ($params->{event_id}ne''); - $event->{max_comment_id}=$comment->{id} if ($comment->{id} > $event->{max_comment_id}); - for my $name (keys %{$config->{controllers}}){ - $comment->{"controller_".$name}=$config->{controllers}->{$name}||''; -# $event->{"controller_$name"}=$config->{controllers}->{$name}; - } - } - my @sorted_events=reverse sort {$a->{max_comment_id} <=> $b->{max_comment_id}} @$events; - return \@sorted_events; + for my $comment (@$comments) { + my $event_id = $comment->{event_id}; + my $event = $events_by_id->{$event_id}; + next unless ( defined $event ); + $event->{comment_count}++; + push @{ $event->{comments} }, $comment; # if ($params->{event_id}ne''); + $event->{max_comment_id} = $comment->{id} if ( $comment->{id} > $event->{max_comment_id} ); + for my $name ( keys %{ $config->{controllers} } ) { + $comment->{ "controller_" . $name } = $config->{controllers}->{$name} || ''; + + # $event->{"controller_$name"}=$config->{controllers}->{$name}; + } + } + my @sorted_events = reverse sort { $a->{max_comment_id} <=> $b->{max_comment_id} } @$events; + return \@sorted_events; } -sub insert{ - my $dbh = shift; - my $config = shift; - my $comment = shift; +sub insert { + my $dbh = shift; + my $config = shift; + my $comment = shift; - $comment->{level}=comments::get_level($dbh, $config, $comment); + $comment->{level} = comments::get_level( $dbh, $config, $comment ); - my $entry={ - event_start => $comment->{event_start}, - event_id => $comment->{event_id}, - parent_id => $comment->{parent_id}, - level => $comment->{level}, - title => $comment->{title}, - content => $comment->{content}, - author => $comment->{author}, - email => $comment->{email}, - ip => $comment->{ip} - }; + my $entry = { + event_start => $comment->{event_start}, + event_id => $comment->{event_id}, + parent_id => $comment->{parent_id}, + level => $comment->{level}, + title => $comment->{title}, + content => $comment->{content}, + author => $comment->{author}, + email => $comment->{email}, + ip => $comment->{ip} + }; - my $comment_id=db::insert($dbh, 'calcms_comments', $entry); - return $comment_id; + my $comment_id = db::insert( $dbh, 'calcms_comments', $entry ); + return $comment_id; } -sub set_lock_status{ - my $dbh=shift; - my $config = shift; - my $comment=shift; +sub set_lock_status { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $id = $comment->{id}; - my $lock_status = $comment->{set_lock_status}; - my $query=qq{ + my $id = $comment->{id}; + my $lock_status = $comment->{set_lock_status}; + my $query = qq{ update calcms_comments set lock_status = ? where id = ? }; - my $bind_values=[ - $lock_status, - $id - ]; - db::put($dbh,$query,$bind_values); + my $bind_values = [ $lock_status, $id ]; + db::put( $dbh, $query, $bind_values ); - $query=qq{ + $query = qq{ select event_id from calcms_comments where id=? }; - $bind_values=[$id]; - my $comments=db::get($dbh,$query,$bind_values); - if (@$comments>0){ - $comment->{event_id}=$comments->[0]->{event_id}; - update_comment_count($dbh,$comment); - } + $bind_values = [$id]; + my $comments = db::get( $dbh, $query, $bind_values ); + if ( @$comments > 0 ) { + $comment->{event_id} = $comments->[0]->{event_id}; + update_comment_count( $dbh, $comment ); + } } -sub set_news_status{ - my $dbh=shift; - my $config = shift; - my $comment=shift; +sub set_news_status { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $id = $comment->{id}; - my $news_status = $comment->{set_news_status}; - my $query=qq{ + my $id = $comment->{id}; + my $news_status = $comment->{set_news_status}; + my $query = qq{ update calcms_comments set news_status= ? where id = ? }; - my $bind_values=[$news_status,$id]; - db::put($dbh,$query,$bind_values); + my $bind_values = [ $news_status, $id ]; + db::put( $dbh, $query, $bind_values ); } -sub update_comment_count{ - my $dbh=shift; - my $config = shift; - my $comment=shift; +sub update_comment_count { + my $dbh = shift; + my $config = shift; + my $comment = shift; - my $query=qq{ + my $query = qq{ select count(id) count from calcms_comments where lock_status='show' and event_id=? }; - my $bind_values=[$comment->{event_id}]; - my $comments=db::get($dbh,$query,$bind_values); + my $bind_values = [ $comment->{event_id} ]; + my $comments = db::get( $dbh, $query, $bind_values ); - my $count=0; - $count=$comments->[0]->{count} if (@$comments>0); - $query=qq{ + my $count = 0; + $count = $comments->[0]->{count} if ( @$comments > 0 ); + $query = qq{ update calcms_events set comment_count=? where id=? }; - $bind_values=[ - $count, - $comment->{event_id} - ]; - db::put($dbh,$query,$bind_values); + $bind_values = [ $count, $comment->{event_id} ]; + db::put( $dbh, $query, $bind_values ); } #precondition: results are presorted by creation date (by sql) -sub sort{ - my $config = shift; - my $results=shift; +sub sort { + my $config = shift; + my $results = shift; - #define parent nodes - my $nodes={}; - for my $node (@$results){ - $nodes->{$node->{id}}=$node; - } - my @root_nodes=(); - for my $node (@$results){ - #fill childs into parent nodes - push @{$nodes->{$node->{parent_id}}->{childs}},$node; - #define root nodes - push @root_nodes,$node if ($node->{level}==0); - } - #print STDERR Dumper(\@root_nodes); + #define parent nodes + my $nodes = {}; + for my $node (@$results) { + $nodes->{ $node->{id} } = $node; + } + my @root_nodes = (); + for my $node (@$results) { - #sort root nodes from newest to oldest - my $sorted_nodes=[]; - for my $node (@root_nodes){ - #for my $node (reverse @root_nodes){ - sort_childs($node,$nodes,$sorted_nodes); - } - return $sorted_nodes; + #fill childs into parent nodes + push @{ $nodes->{ $node->{parent_id} }->{childs} }, $node; + + #define root nodes + push @root_nodes, $node if ( $node->{level} == 0 ); + } + + #print STDERR Dumper(\@root_nodes); + + #sort root nodes from newest to oldest + my $sorted_nodes = []; + for my $node (@root_nodes) { + + #for my $node (reverse @root_nodes){ + sort_childs( $node, $nodes, $sorted_nodes ); + } + return $sorted_nodes; } -sub sort_childs{ - my $node=shift; - my $nodes=shift; - my $sorted_nodes=shift; +sub sort_childs { + my $node = shift; + my $nodes = shift; + my $sorted_nodes = shift; - #push node into list of sorted nodes - push @{$sorted_nodes},$node; + #push node into list of sorted nodes + push @{$sorted_nodes}, $node; - #return if node is leaf - return $sorted_nodes unless (defined $node->{childs}); + #return if node is leaf + return $sorted_nodes unless ( defined $node->{childs} ); - #process child nodes - for my $child (@{$node->{childs}}){ - $sorted_nodes=sort_childs($child,$nodes,$sorted_nodes); - } - return $sorted_nodes; + #process child nodes + for my $child ( @{ $node->{childs} } ) { + $sorted_nodes = sort_childs( $child, $nodes, $sorted_nodes ); + } + return $sorted_nodes; } -sub configure_cache{ - my $config = shift; +sub configure_cache { + my $config = shift; - cache::init(); - - my $date_pattern = $cache::date_pattern; - my $datetime_pattern = $cache::datetime_pattern; - my $controllers = $config->{controllers}; + cache::init(); - cache::add_map('template=comments_newest&limit=3&type=list' ,$controllers->{comments}.'/neueste.html'); - cache::add_map('template=comments_atom.xml&limit=20' ,$controllers->{comments}.'/feed.xml'); - cache::add_map('template=comments.html&event_id=(\d+)&event_start='.$datetime_pattern ,$controllers->{comments}.'/$1_$2-$3-$4_$5-$6.html'); + my $date_pattern = $cache::date_pattern; + my $datetime_pattern = $cache::datetime_pattern; + my $controllers = $config->{controllers}; + + cache::add_map( 'template=comments_newest&limit=3&type=list', $controllers->{comments} . '/neueste.html' ); + cache::add_map( 'template=comments_atom.xml&limit=20', $controllers->{comments} . '/feed.xml' ); + cache::add_map( 'template=comments.html&event_id=(\d+)&event_start=' . $datetime_pattern, + $controllers->{comments} . '/$1_$2-$3-$4_$5-$6.html' ); } -sub check_params{ - my $config = shift; - my $params = shift; +sub check_params { + my $config = shift; + my $params = shift; - my $comment={}; + my $comment = {}; - $comment->{event_start}=''; - if ( (defined $params->{event_start}) && ($params->{event_start}=~/(\d\d\d\d\-\d\d\-\d\d[T ]\d\d\:\d\d)(\:\d\d)?/) ){ - $comment->{event_start}=$1; - } + $comment->{event_start} = ''; + if ( ( defined $params->{event_start} ) && ( $params->{event_start} =~ /(\d\d\d\d\-\d\d\-\d\d[T ]\d\d\:\d\d)(\:\d\d)?/ ) ) { + $comment->{event_start} = $1; + } - $comment->{sort_order}='desc'; - $comment->{limit}=''; - if ( (defined $params->{limit}) && ($params->{limit}=~/(\d+)/) ){ - $comment->{limit}=$1; - } + $comment->{sort_order} = 'desc'; + $comment->{limit} = ''; + if ( ( defined $params->{limit} ) && ( $params->{limit} =~ /(\d+)/ ) ) { + $comment->{limit} = $1; + } - $comment->{show_max}=''; - if ( (defined $params->{show_max}) && ($params->{show_max}=~/(\d+)/) ){ - $comment->{show_max}=$1; - } + $comment->{show_max} = ''; + if ( ( defined $params->{show_max} ) && ( $params->{show_max} =~ /(\d+)/ ) ) { + $comment->{show_max} = $1; + } - if ( (defined $params->{sort_order}) && ($params->{sort_order}eq'asc') ){ - $comment->{sort_order}='asc'; - } + if ( ( defined $params->{sort_order} ) && ( $params->{sort_order} eq 'asc' ) ) { + $comment->{sort_order} = 'asc'; + } - $comment->{event_id}=''; - if ( (defined $params->{event_id}) && ($params->{event_id}=~/(\d+)/) ){ - $comment->{event_id}=$1; - } + $comment->{event_id} = ''; + if ( ( defined $params->{event_id} ) && ( $params->{event_id} =~ /(\d+)/ ) ) { + $comment->{event_id} = $1; + } - if ( (defined $params->{parent_id}) && ($params->{parent_id}=~/(\d+)/) ){ - $comment->{parent_id}=$1; - } + if ( ( defined $params->{parent_id} ) && ( $params->{parent_id} =~ /(\d+)/ ) ) { + $comment->{parent_id} = $1; + } - if ((defined $params->{type}) && ($params->{type} eq 'list')){ - $comment->{type}='list'; - }else{ - $comment->{type}='tree'; - } + if ( ( defined $params->{type} ) && ( $params->{type} eq 'list' ) ) { + $comment->{type} = 'list'; + } else { + $comment->{type} = 'tree'; + } - my $debug=$params->{debug}||''; - if ($debug=~/([a-z\_\,]+)/){ - $comment->{debug}=$1; - } + my $debug = $params->{debug} || ''; + if ( $debug =~ /([a-z\_\,]+)/ ) { + $comment->{debug} = $1; + } - log::error($config, 'missing parameter a') if ( (defined $params->{limit}) && ($comment->{limit} eq'') ); - log::error($config, 'missing parameter b') if ( (defined $params->{event_id}) && ($comment->{event_id} eq'') ); - log::error($config, 'missing parameter c') if ( (defined $params->{event_start}) && ($comment->{event_start} eq'') ); + log::error( $config, 'missing parameter a' ) if ( ( defined $params->{limit} ) && ( $comment->{limit} eq '' ) ); + log::error( $config, 'missing parameter b' ) if ( ( defined $params->{event_id} ) && ( $comment->{event_id} eq '' ) ); + log::error( $config, 'missing parameter c' ) if ( ( defined $params->{event_start} ) && ( $comment->{event_start} eq '' ) ); - my $delta_days=1; - if ($comment->{event_start}ne''){ - my $today = time::datetime_to_array(time::time_to_datetime()); - my $date = time::datetime_to_array($comment->{event_start}); - $delta_days = time::days_between($today,$date); - } - if( - ($delta_days > $config->{permissions}->{no_new_comments_before} ) - || ($delta_days < -1*$config->{permissions}->{no_new_comments_after} ) - ){ - $comment->{allow}->{new_comments}=0; - }else{ - $comment->{allow}->{new_comments}=1; - } + my $delta_days = 1; + if ( $comment->{event_start} ne '' ) { + my $today = time::datetime_to_array( time::time_to_datetime() ); + my $date = time::datetime_to_array( $comment->{event_start} ); + $delta_days = time::days_between( $today, $date ); + } + if ( ( $delta_days > $config->{permissions}->{no_new_comments_before} ) + || ( $delta_days < -1 * $config->{permissions}->{no_new_comments_after} ) ) + { + $comment->{allow}->{new_comments} = 0; + } else { + $comment->{allow}->{new_comments} = 1; + } - $comment->{template}=template::check($params->{template},'comments.html'); + $comment->{template} = template::check( $params->{template}, 'comments.html' ); - return $comment; + return $comment; } #do not delete last line! diff --git a/lib/calcms/config.pm b/lib/calcms/config.pm index 64e5cd3..6dc81c9 100644 --- a/lib/calcms/config.pm +++ b/lib/calcms/config.pm @@ -1,17 +1,17 @@ package config; require Exporter; -my @ISA = qw(Exporter); -my @EXPORT_OK = qw(get $config); -my %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +my @ISA = qw(Exporter); +my @EXPORT_OK = qw(get $config); +my %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -use Config::General; +use Config::General(); -our $modified_at=-999; -our $config= undef; +our $modified_at = -999; +our $config = undef; -sub get{ - my $filename=shift; +sub get { + my $filename = shift; #return config if known #my $age=(-M $filename); @@ -19,11 +19,12 @@ sub get{ #reload config if changed my $configuration = new Config::General( - -ConfigFile=>$filename, - -UTF8=>1 + -ConfigFile => $filename, + -UTF8 => 1 ); - $config::config=$configuration->{DefaultConfig}->{config}; - $config::modified_at=$age; + $config::config = $configuration->{DefaultConfig}->{config}; + $config::modified_at = $age; + #print STDERR "reload $filename\n"; return $config::config; diff --git a/lib/calcms/creole_wiki.pm b/lib/calcms/creole_wiki.pm index e3fe386..708be3f 100644 --- a/lib/calcms/creole_wiki.pm +++ b/lib/calcms/creole_wiki.pm @@ -1,259 +1,272 @@ use warnings; use strict; use Data::Dumper; -use markup; +use markup(); -package creole_wiki; +package creole_wiki; require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(extractEventFromWikiText removeMeta eventToWikiText extractMeta removeMeta metaToWiki); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(extractEventFromWikiText removeMeta eventToWikiText extractMeta removeMeta metaToWiki); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -#convert creole wiki text to event -sub extractEventFromWikiText{ - my $params=shift; - my $event=shift; - $event={} unless (defined $event); +#convert creole wiki text to event +sub extractEventFromWikiText { + my $params = shift; + my $event = shift; + $event = {} unless ( defined $event ); - my $title =$params->{title}||''; - my $content =$params->{content}||''; - my $local_media_url =$params->{local_media_url}||''; + my $title = $params->{title} || ''; + my $content = $params->{content} || ''; + my $local_media_url = $params->{local_media_url} || ''; #split content into excerpt, content and comments - $content=~s/\s*\,\s*/, /g; - my @lines=split(/\s*\-{10,99}\s*/,$content); - my $lines=\@lines; - for my $line (@$lines){ - $line=~s/^\s+|\s+$//g; + $content =~ s/\s*\,\s*/, /g; + my @lines = split( /\s*\-{10,99}\s*/, $content ); + my $lines = \@lines; + for my $line (@$lines) { + $line =~ s/^\s+|\s+$//g; } - if (@lines==1){ - $event->{content}=shift @lines; - }elsif(@lines==2){ - $event->{excerpt}=shift @lines; - $event->{content}=shift @lines; - }else{ - $event->{excerpt}=shift @lines; - $event->{content}=shift @lines; - $event->{comments}=join("--------------------\n",@lines); + if ( @lines == 1 ) { + $event->{content} = shift @lines; + } elsif ( @lines == 2 ) { + $event->{excerpt} = shift @lines; + $event->{content} = shift @lines; + } else { + $event->{excerpt} = shift @lines; + $event->{content} = shift @lines; + $event->{comments} = join( "--------------------\n", @lines ); } - if (defined $event->{excerpt}){ - $event->{excerpt}=markup::html_to_plain($event->{excerpt}); + if ( defined $event->{excerpt} ) { + $event->{excerpt} = markup::html_to_plain( $event->{excerpt} ); } - #extract program from title - $event->{program}=''; - if ($title=~/^(.*?)\:/){ - my $program=$1; - unless ($program=~/\s\-\s/){ - $event->{program}=$program; - $event->{program}=~s/^\s+|\s+$//g; - $event->{program}=~s/\s+/ /g; - $title=~s/^.*?\:\s+//gi; + #extract program from title + $event->{program} = ''; + + if ( $title =~ /^(.*?)\:/ ) { + my $program = $1; + unless ( $program =~ /\s\-\s/ ) { + $event->{program} = $program; + $event->{program} =~ s/^\s+|\s+$//g; + $event->{program} =~ s/\s+/ /g; + $title =~ s/^.*?\:\s+//gi; } } #extract series_name from title - $event->{series_name}=''; - if ($title=~/^(.*?)\s+\-\s+/){ - $event->{series_name}=$1; - $event->{series_name}=~s/^\s+|\s+$//g; - $event->{series_name}=~s/\s+/ /g; - $title=~s/^(.*?)\s+\-\s+//gi; + $event->{series_name} = ''; + if ( $title =~ /^(.*?)\s+\-\s+/ ) { + $event->{series_name} = $1; + $event->{series_name} =~ s/^\s+|\s+$//g; + $event->{series_name} =~ s/\s+/ /g; + $title =~ s/^(.*?)\s+\-\s+//gi; } - + #extract categories from title - my @categories=(); - while ($title=~/\((.*?),(.*?)\)/){ - my $category=$1; - $category =~s/\s+/ /g; - $category =~s/^\s+|\s+$//g; - $category =~s/\&/\+/g; - push @categories,$category if (defined $category && $category=~/\S/); + my @categories = (); + while ( $title =~ /\((.*?),(.*?)\)/ ) { + my $category = $1; + $category =~ s/\s+/ /g; + $category =~ s/^\s+|\s+$//g; + $category =~ s/\&/\+/g; + push @categories, $category if ( defined $category && $category =~ /\S/ ); - $category=''; - $category=$2 if (defined $2); - $category =~s/\s+/ /g; - $category =~s/^\s+|\s+$//g; - $category =~s/\&/\+/g; - push @categories,$category if (defined $category && $category=~/\S/); - $title=~s/\((.*?),(.*?)\)/\($2\)/; + $category = ''; + $category = $2 if ( defined $2 ); + $category =~ s/\s+/ /g; + $category =~ s/^\s+|\s+$//g; + $category =~ s/\&/\+/g; + push @categories, $category if ( defined $category && $category =~ /\S/ ); + $title =~ s/\((.*?),(.*?)\)/\($2\)/; } - if ($title=~/\((.*?)\)/){ - my $category=$1; - $category =~s/\s+/ /g; - $category =~s/^\s+|\s+$//g; - $category =~s/\&/\+/g; + if ( $title =~ /\((.*?)\)/ ) { + my $category = $1; + $category =~ s/\s+/ /g; + $category =~ s/^\s+|\s+$//g; + $category =~ s/\&/\+/g; -# print $category."\n"; - push @categories,$category if (defined $category && $category=~/\S/); - $title=~s/\((.*?)\)//; + # print $category."\n"; + push @categories, $category if ( defined $category && $category =~ /\S/ ); + $title =~ s/\((.*?)\)//; } - $event->{categories} = \@categories if (@categories>0); - $event->{title} = $title; - $event->{title} =~s/^\s+|\s+$//g; + $event->{categories} = \@categories if ( @categories > 0 ); + $event->{title} = $title; + $event->{title} =~ s/^\s+|\s+$//g; + + if ( defined $event->{content} ) { - if (defined $event->{content}){ #extract podcast_url from content link 'podcast' - my $podcast_url=''; - if ($event->{content}=~/\[\[\s*([^\|\]]+)\s*\|\s*podcast\s*\]\]/i){ - $podcast_url=$1; - # $podcast_url=~s/\|.*//g; - # print "found podcast:".$podcast_url."\n"; + my $podcast_url = ''; + if ( $event->{content} =~ /\[\[\s*([^\|\]]+)\s*\|\s*podcast\s*\]\]/i ) { + $podcast_url = $1; + + # $podcast_url=~s/\|.*//g; + # print "found podcast:".$podcast_url."\n"; } - $event->{podcast_url} = $podcast_url; + $event->{podcast_url} = $podcast_url; #extract media_url from content link 'download' - my $media_url=''; - if ($event->{content}=~/\[\[\s*([^\|\]]+)\s*\|\s*(direct\s+)?download\s*\]\]/i){ - $media_url=$1; - # $podcast_url=~s/\|.*//g; - # print "found media:".$media_url."\n"; + my $media_url = ''; + if ( $event->{content} =~ /\[\[\s*([^\|\]]+)\s*\|\s*(direct\s+)?download\s*\]\]/i ) { + $media_url = $1; + + # $podcast_url=~s/\|.*//g; + # print "found media:".$media_url."\n"; } - $event->{media_url} = $media_url; + $event->{media_url} = $media_url; #replace "thumbs/xxx" link by link to local media URI - $event->{content}=~s/\{\{\s*thumbs\/+(.*?)\s*\|\s*(.*?)\s*\}\}/\[\[$local_media_url\/images\/$1\|\{\{$local_media_url\/thumbs\/$1\|$2\}\}\]\]/g; + $event->{content} =~ + s/\{\{\s*thumbs\/+(.*?)\s*\|\s*(.*?)\s*\}\}/\[\[$local_media_url\/images\/$1\|\{\{$local_media_url\/thumbs\/$1\|$2\}\}\]\]/g; #extract image from content - if ($event->{content}=~/\{\{(.*?)(\||\}\})/){ - $event->{image}=$1; + if ( $event->{content} =~ /\{\{(.*?)(\||\}\})/ ) { + $event->{image} = $1; } } #meta - if (defined $event->{comments}){ - my $meta=extractMeta($event->{comments}); - $event->{meta} = $meta if (@$meta>0); + if ( defined $event->{comments} ) { + my $meta = extractMeta( $event->{comments} ); + $event->{meta} = $meta if ( @$meta > 0 ); } return $event; } -sub eventToWikiText{ - my $event=shift; - my $local_media_url =$event->{local_media_url}||''; +sub eventToWikiText { + my $event = shift; + my $local_media_url = $event->{local_media_url} || ''; - $event->{program} =~s/^\s+|\s+$//g; - $event->{series_name} =~s/^\s+|\s+$//g; - $event->{title} =~s/^\s+|\s+$//g; - $event->{excerpt} =~s/^\s+|\s+$//g; - $event->{content} =~s/^\s+|\s+$//g; - $event->{comments} =~s/^\s+|\s+$//g; + $event->{program} =~ s/^\s+|\s+$//g; + $event->{series_name} =~ s/^\s+|\s+$//g; + $event->{title} =~ s/^\s+|\s+$//g; + $event->{excerpt} =~ s/^\s+|\s+$//g; + $event->{content} =~ s/^\s+|\s+$//g; + $event->{comments} =~ s/^\s+|\s+$//g; - my $title=''; - if($event->{program} ne''){ - $title=$event->{program}; - $title.=': ' if (($event->{series_name} ne'') || ($event->{title} ne'')); + my $title = ''; + if ( $event->{program} ne '' ) { + $title = $event->{program}; + $title .= ': ' if ( ( $event->{series_name} ne '' ) || ( $event->{title} ne '' ) ); } - if($event->{series_name} ne''){ - $title.=$event->{series_name}; - $title.=' - ' if ($event->{title} ne''); + if ( $event->{series_name} ne '' ) { + $title .= $event->{series_name}; + $title .= ' - ' if ( $event->{title} ne '' ); } - $title.=$event->{title}; - if ($event->{categories}){ - $title.=' ('.join(",", @{$event->{categories}} ).')' if (@{$event->{categories}}>0); + $title .= $event->{title}; + if ( $event->{categories} ) { + $title .= ' (' . join( ",", @{ $event->{categories} } ) . ')' if ( @{ $event->{categories} } > 0 ); } - my $meta=extractMeta($event->{comments}, $event->{meta}); + my $meta = extractMeta( $event->{comments}, $event->{meta} ); + #use Data::Dumper;print "extracted meta".Dumper($meta); - $event->{comments}=removeMeta($event->{comments}); - $event->{wiki_comments}=$event->{comments}."\n\n".metaToWiki($meta); + $event->{comments} = removeMeta( $event->{comments} ); + $event->{wiki_comments} = $event->{comments} . "\n\n" . metaToWiki($meta); + #use Data::Dumper;print "event content".Dumper($event->{content}); #rich content editors: #$event->{wiki_content}=markup::html_to_creole($event->{content}); - #markup editors - $event->{wiki_content}=$event->{content}; - + #markup editors + $event->{wiki_content} = $event->{content}; # [[http://localhost/agenda_files/media/images/Vl8X7YmaWrmm9RMN_OMywA.jpg|{{http://localhost/agenda_files/media/thumbs/Vl8X7YmaWrmm9RMN_OMywA.jpg|}}]] - #replace "thumbs/xxx" link by link to local media URI +#replace "thumbs/xxx" link by link to local media URI # while ($event->{wiki_content}=~/\[\[.*?\/+media\/+images\/+(.*?)\s*\|.*?\{\{.*?\/+media\/+thumbs\/+(.*?)\s*\|\s*(.*?)\s*\}\}\]\]/){ - $event->{wiki_content}=~s/\[\[.*?\/+media\/+images\/+(.*?)\s*\|.*?\{\{.*?\/+media\/+thumbs\/+(.*?)\s*\|\s*(.*?)\s*\}\}\]\]/\{\{thumbs\/$1\|$3\}\}/g; -# } + $event->{wiki_content} =~ + s/\[\[.*?\/+media\/+images\/+(.*?)\s*\|.*?\{\{.*?\/+media\/+thumbs\/+(.*?)\s*\|\s*(.*?)\s*\}\}\]\]/\{\{thumbs\/$1\|$3\}\}/g; - my $wiki_content=join("\n".("-"x20)."\n",($event->{excerpt}, $event->{wiki_content}) ); - $wiki_content.="\n".("-"x20)."\n".$event->{wiki_comments} if ($event->{wiki_comments}=~/\S/); + # } + + my $wiki_content = join( "\n" . ( "-" x 20 ) . "\n", ( $event->{excerpt}, $event->{wiki_content} ) ); + $wiki_content .= "\n" . ( "-" x 20 ) . "\n" . $event->{wiki_comments} if ( $event->{wiki_comments} =~ /\S/ ); return { - title => $title, - content => $event->{content}, - wiki_content => $wiki_content + title => $title, + content => $event->{content}, + wiki_content => $wiki_content }; - + } #extrace meta tags from comment text -sub extractMeta{ - my $comments =shift; - my $meta =shift; +sub extractMeta { + my $comments = shift; + my $meta = shift; - $meta=[] unless (defined $meta); + $meta = [] unless ( defined $meta ); #push meta tags into meta list - if (defined $comments){ + if ( defined $comments ) { + #build index for meta already defined - my $meta_keys={}; - for my $pair (@$meta){ - $meta_keys->{$pair->{name}.'='.$pair->{value}}=1; + my $meta_keys = {}; + for my $pair (@$meta) { + $meta_keys->{ $pair->{name} . '=' . $pair->{value} } = 1; } - while ($comments=~/\~\~META\:(.+?)\=(.+?)\~\~/g){ - my $name=$1; - my $value=$2; + while ( $comments =~ /\~\~META\:(.+?)\=(.+?)\~\~/g ) { + my $name = $1; + my $value = $2; #fix meta values - $name=lc($name); - $name=~s/^\s+|\s+$//g; - $value=~s/^\s+|\s+$//g; + $name = lc($name); + $name =~ s/^\s+|\s+$//g; + $value =~ s/^\s+|\s+$//g; #insert into list, if not defined yet - unless( ($name eq'') || ($value eq'') || (exists $meta_keys->{$name.'='.$value}) ){ - push @$meta,{ - name=>$name, - value=>$value, - }; - $meta_keys->{$name.'='.$value}=1; + unless ( ( $name eq '' ) || ( $value eq '' ) || ( exists $meta_keys->{ $name . '=' . $value } ) ) { + push @$meta, + { + name => $name, + value => $value, + }; + $meta_keys->{ $name . '=' . $value } = 1; } - }; + } } -# use Data::Dumper;print Dumper($meta); + + # use Data::Dumper;print Dumper($meta); return $meta; } #remove meta tags from comment text -sub removeMeta{ - my $comments=shift||''; +sub removeMeta { + my $comments = shift || ''; - my $result=''; - for my $line (split(/\n/,$comments)){ - $result.=$line unless ($line=~/\~\~META\:(.+?)\=(.+?)\~\~/g); + my $result = ''; + for my $line ( split( /\n/, $comments ) ) { + $result .= $line unless ( $line =~ /\~\~META\:(.+?)\=(.+?)\~\~/g ); } + #use Data::Dumper;print "removed metsas:".Dumper($result); - $result=~s/^\s+//g; - $result=~s/\s+$//g; + $result =~ s/^\s+//g; + $result =~ s/\s+$//g; return $result; } #add meta tags to comment text -sub metaToWiki{ - my $meta =shift; +sub metaToWiki { + my $meta = shift; - my $result=''; - for my $pair (@$meta){ -# use Data::Dumper;print Dumper($pair); - $result.='~~META:'.$pair->{name}.'='.$pair->{value}.'~~'."\n"; + my $result = ''; + for my $pair (@$meta) { + + # use Data::Dumper;print Dumper($pair); + $result .= '~~META:' . $pair->{name} . '=' . $pair->{value} . '~~' . "\n"; } return $result; + #use Data::Dumper;print Dumper($meta); } - #test: #perl -e 'use creole_wiki;$a=creole_wiki::extractEventFromWikiText("teaser\n----------------------\nbody[[asd|download]][[bsd|hallo]][[csd|podcast]]{{a|b}}[[dsd|wer]]\n----------------------\ncomments",{title=>" a : b - c ( d e - f , g h i - j, k - m - l) "});use Data::Dumper;print Dumper($a)'; diff --git a/lib/calcms/db.pm b/lib/calcms/db.pm index 087a919..efdce4f 100644 --- a/lib/calcms/db.pm +++ b/lib/calcms/db.pm @@ -1,118 +1,120 @@ use warnings "all"; use strict; -#use DBI; -#use Apache::DBI; -use DBD::mysql; +use DBD::mysql(); -package db; +package db; use Data::Dumper; require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - connect disconnect - get insert put - next_id get_max_id - shift_date_by_hours shift_datetime_by_minutes - get_columns get_columns_hash - $write - $read + connect disconnect + get insert put + next_id get_max_id + shift_date_by_hours shift_datetime_by_minutes + get_columns get_columns_hash + $write + $read ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); #debug settings -our $debug_read=0; -our $debug_write=0; +our $debug_read = 0; +our $debug_write = 0; #database control -our $read=1; -our $write=1; +our $read = 1; +our $write = 1; # connect to database -sub connect{ - my $options=shift; - my $request=shift; +sub connect { + my $options = shift; + my $request = shift; - return $request->{connection} if ((defined $request) && (defined $request->{connection})); + return $request->{connection} if ( ( defined $request ) && ( defined $request->{connection} ) ); - my $access_options=$options->{access}; + my $access_options = $options->{access}; - my $hostname =$access_options->{hostname}; - my $port =$access_options->{port}; - my $database =$access_options->{database}; - my $username =$access_options->{username}; - my $password =$access_options->{password}; + my $hostname = $access_options->{hostname}; + my $port = $access_options->{port}; + my $database = $access_options->{database}; + my $username = $access_options->{username}; + my $password = $access_options->{password}; - if ((defined $access_options->{write}) && ($access_options->{write}eq'1')){ - $username =$access_options->{username_write}; - $password =$access_options->{password_write}; + if ( ( defined $access_options->{write} ) && ( $access_options->{write} eq '1' ) ) { + $username = $access_options->{username_write}; + $password = $access_options->{password_write}; } - my $dbh=undef; + my $dbh = undef; my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"; -# if ($db::utf8dbi eq '1'){ -# use UTF8DBI; -# $dbh = UTF8DBI->connect( $dsn,$username,$password) || die "Database connection not made: $DBI::errstr"; # \nfor $dsn, $username -# }else{ -# use DBI; - $dbh = DBI->connect( $dsn,$username,$password,{mysql_enable_utf8 => 1}) || die "could not connect to database: $DBI::errstr"; # \nfor $dsn, $username -# } + + # if ($db::utf8dbi eq '1'){ + # use UTF8DBI; + # $dbh = UTF8DBI->connect( $dsn,$username,$password) || die "Database connection not made: $DBI::errstr"; # \nfor $dsn, $username + # }else{ + # use DBI; + $dbh = DBI->connect( $dsn, $username, $password, { mysql_enable_utf8 => 1 } ) + || die "could not connect to database: $DBI::errstr"; # \nfor $dsn, $username + + # } #print STDERR "db connect $username\n" if ($debug_read==1); - #print STDERR "db connect $username\n"; + #print STDERR "db connect $username\n"; $dbh->{RaiseError} = 1; $dbh->{'mysql_enable_utf8'} = 1; - put($dbh,"set character set utf8"); - put($dbh,"set names utf8"); - put($dbh,"set time_zone='".$options->{date}->{time_zone}."'"); + put( $dbh, "set character set utf8" ); + put( $dbh, "set names utf8" ); + put( $dbh, "set time_zone='" . $options->{date}->{time_zone} . "'" ); - $request->{connection}=$dbh; + $request->{connection} = $dbh; return $dbh; } -sub disconnect{ - my $request=shift; - my $dbh=$request->{connection}; +sub disconnect { + my $request = shift; + my $dbh = $request->{connection}; $dbh->disconnect; delete $request->{connection}; } # get all database entries of an sql query (as list of hashs) -sub get{ - my $dbh=shift; - my $sql=shift; - my $bind_values=shift; +sub get { + my $dbh = shift; + my $sql = shift; + my $bind_values = shift; - if ($debug_read==1){ - print STDERR $sql."\n"; - print STDERR Dumper($bind_values)."\n" if defined $bind_values; - } - - my $sth = $dbh->prepare( $sql ); - if ((defined $bind_values)&&(ref($bind_values)eq'ARRAY')){ -# print STDERR Dumper($bind_values)."\n"; - my $result = $sth->execute(@$bind_values); - unless ($result){ - print STDERR $sql."\n"; - die "db: $DBI::errstr $sql" if ($read==1); - } - }else{ - $sth->execute() || die "db: $DBI::errstr $sql" if ($read==1); + if ( $debug_read == 1 ) { + print STDERR $sql . "\n"; + print STDERR Dumper($bind_values) . "\n" if defined $bind_values; } - my @results=(); - while ( my $row=$sth->fetchrow_hashref){ - my $result={}; - foreach my $key (keys %$row){ - $result->{$key}=$row->{$key}; - } - push @results, $result; - } + my $sth = $dbh->prepare($sql); + if ( ( defined $bind_values ) && ( ref($bind_values) eq 'ARRAY' ) ) { - if ($debug_read==1){ - print STDERR Dumper($results[0])."\n" if (@results==1); - print STDERR @results."\n" if (@results!=1); + # print STDERR Dumper($bind_values)."\n"; + my $result = $sth->execute(@$bind_values); + unless ($result) { + print STDERR $sql . "\n"; + die "db: $DBI::errstr $sql" if ( $read == 1 ); + } + } else { + $sth->execute() || die "db: $DBI::errstr $sql" if ( $read == 1 ); + } + + my @results = (); + while ( my $row = $sth->fetchrow_hashref ) { + my $result = {}; + foreach my $key ( keys %$row ) { + $result->{$key} = $row->{$key}; + } + push @results, $result; + } + + if ( $debug_read == 1 ) { + print STDERR Dumper( $results[0] ) . "\n" if ( @results == 1 ); + print STDERR @results . "\n" if ( @results != 1 ); } $sth->finish; @@ -120,157 +122,157 @@ sub get{ } # get list of table columns -sub get_columns{ - my $dbh=shift; - my $table=shift; +sub get_columns { + my $dbh = shift; + my $table = shift; - my $columns=db::get($dbh, 'select column_name from information_schema.columns where table_name=?',[$table]); - my @result=map {$_->{column_name}} (@$columns); + my $columns = db::get( $dbh, 'select column_name from information_schema.columns where table_name=?', [$table] ); + my @result = map { $_->{column_name} } (@$columns); return \@result; } # get hash with table columns as keys -sub get_columns_hash{ - my $dbh=shift; - my $table=shift; +sub get_columns_hash { + my $dbh = shift; + my $table = shift; - my $columns=db::get_columns($dbh, $table); - my $result={}; - for my $column (@$columns){ - $result->{$column}=1; - } + my $columns = db::get_columns( $dbh, $table ); + my $result = {}; + for my $column (@$columns) { + $result->{$column} = 1; + } return $result; } - # insert an entry into database (select from where) -sub insert_old{ - my $dbh=shift; - my $tablename=shift; - my $entry=shift; - my $do_not_quote=shift; +sub insert_old { + my $dbh = shift; + my $tablename = shift; + my $entry = shift; + my $do_not_quote = shift; - my $keys =join(",", map {$_} (keys %$entry)); - my $values =undef; - if (defined $do_not_quote && $do_not_quote ne ''){ - $values =join("\n,", map {$entry->{$_}} (keys %$entry)); - }else{ - $values =join("\n,", map {$dbh->quote($entry->{$_})} (keys %$entry)); + my $keys = join( ",", map { $_ } ( keys %$entry ) ); + my $values = undef; + if ( defined $do_not_quote && $do_not_quote ne '' ) { + $values = join( "\n,", map { $entry->{$_} } ( keys %$entry ) ); + } else { + $values = join( "\n,", map { $dbh->quote( $entry->{$_} ) } ( keys %$entry ) ); } - my $sql ="insert into $tablename \n ($keys) \n values ($values);\n"; - print STDERR $sql."\n" if ($debug_write==1); - put($dbh,$sql); - + my $sql = "insert into $tablename \n ($keys) \n values ($values);\n"; + print STDERR $sql . "\n" if ( $debug_write == 1 ); + put( $dbh, $sql ); + } #returns last inserted id -sub insert{ - my $dbh=shift; - my $tablename=shift; - my $entry=shift; -# my $do_not_quote=shift; +sub insert { + my $dbh = shift; + my $tablename = shift; + my $entry = shift; - my $keys =join(",", map {$_} (keys %$entry)); - my $values =join(",", map {'?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); + # my $do_not_quote=shift; - my $sql ="insert into $tablename \n ($keys) \n values ($values);\n"; + my $keys = join( ",", map { $_ } ( keys %$entry ) ); + my $values = join( ",", map { '?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); - if ($debug_write==1){ - print STDERR $sql."\n"; - print STDERR Dumper(\@bind_values)."\n" if (@bind_values); - } + my $sql = "insert into $tablename \n ($keys) \n values ($values);\n"; - put($dbh, $sql, \@bind_values); - my $result=get($dbh, 'SELECT LAST_INSERT_ID() id;'); - return $result->[0]->{id} if $result->[0]->{id}>0; + if ( $debug_write == 1 ) { + print STDERR $sql . "\n"; + print STDERR Dumper( \@bind_values ) . "\n" if (@bind_values); + } + + put( $dbh, $sql, \@bind_values ); + my $result = get( $dbh, 'SELECT LAST_INSERT_ID() id;' ); + return $result->[0]->{id} if $result->[0]->{id} > 0; return undef; } -# execute a modifying database command (update,insert,...) -sub put{ - my $dbh=shift; - my $sql=shift; - my $bind_values=shift; +# execute a modifying database command (update,insert,...) +sub put { + my $dbh = shift; + my $sql = shift; + my $bind_values = shift; - if ($debug_write==1){ - print STDERR $sql."\n"; - print STDERR Dumper($bind_values)."\n" if defined $bind_values; - } + if ( $debug_write == 1 ) { + print STDERR $sql . "\n"; + print STDERR Dumper($bind_values) . "\n" if defined $bind_values; + } - my $sth = $dbh->prepare( $sql ); - if ($write==1){ - if ((defined $bind_values)&&(ref($bind_values)eq'ARRAY')){ + my $sth = $dbh->prepare($sql); + if ( $write == 1 ) { + if ( ( defined $bind_values ) && ( ref($bind_values) eq 'ARRAY' ) ) { $sth->execute(@$bind_values); - }else{ + } else { $sth->execute(); } - }; + } $sth->finish; - print STDERR "1\n" if ($debug_write==1); + print STDERR "1\n" if ( $debug_write == 1 ); - my $result=get($dbh, 'SELECT ROW_COUNT() changes;'); - return $result->[0]->{changes} if $result->[0]->{changes}>0; + my $result = get( $dbh, 'SELECT ROW_COUNT() changes;' ); + return $result->[0]->{changes} if $result->[0]->{changes} > 0; return undef; } -sub quote{ - my $dbh=shift; - my $sql=shift; - - $sql=~s/\_/\\\_/g; +sub quote { + my $dbh = shift; + my $sql = shift; + + $sql =~ s/\_/\\\_/g; return $dbh->quote($sql); } #subtract hours, deprecated(!) -sub shift_date_by_hours{ - my $dbh=shift; - my $date=shift; - my $offset=shift; +sub shift_date_by_hours { + my $dbh = shift; + my $date = shift; + my $offset = shift; - my $query='select date(? - INTERVAL ? HOUR) date'; - my $bind_values=[$date,$offset]; - my $results=db::get($dbh, $query, $bind_values); + my $query = 'select date(? - INTERVAL ? HOUR) date'; + my $bind_values = [ $date, $offset ]; + my $results = db::get( $dbh, $query, $bind_values ); return $results->[0]->{date}; } #add minutes, deprecated(!) -sub shift_datetime_by_minutes{ - my $dbh=shift; - my $datetime=shift; - my $offset=shift; +sub shift_datetime_by_minutes { + my $dbh = shift; + my $datetime = shift; + my $offset = shift; - my $query="select ? + INTERVAL ? MINUTE date"; - my $bind_values=[$datetime,$offset]; - my $results=db::get($dbh, $query, $bind_values); + my $query = "select ? + INTERVAL ? MINUTE date"; + my $bind_values = [ $datetime, $offset ]; + my $results = db::get( $dbh, $query, $bind_values ); return $results->[0]->{date}; } # get next free id of a database table -sub next_id{ - my $dbh=shift; - my $table=shift; +sub next_id { + my $dbh = shift; + my $table = shift; - my $query=qq{ + my $query = qq{ select max(id) id from $table where 1 }; - my $results=get($dbh,$query); - return $results->[0]->{id}+1; + my $results = get( $dbh, $query ); + return $results->[0]->{id} + 1; } # get max id from table -sub get_max_id{ - my $dbh=shift; - my $table=shift; +sub get_max_id { + my $dbh = shift; + my $table = shift; - my $query=qq{ + my $query = qq{ select max(id) id from $table where 1 }; - my $results=get($dbh,$query); + my $results = get( $dbh, $query ); return $results->[0]->{id}; } diff --git a/lib/calcms/eventOps.pm b/lib/calcms/eventOps.pm index 12ae8dc..87d5bb2 100644 --- a/lib/calcms/eventOps.pm +++ b/lib/calcms/eventOps.pm @@ -1,151 +1,156 @@ -package eventOps; +package eventOps; use warnings "all"; use strict; -use uac; -use events; -use series; -use series_dates; -use time; -use studios; -use series_events; -use user_stats; +use uac(); +use events(); +use series(); +use series_dates(); +use time(); +use studios(); +use series_events(); +use user_stats(); require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - setAttributesFromSeriesTemplate - setAttributesFromSchedule - setAttributesFromOtherEvent - setAttributesForCurrentTime - getRecurrenceBaseId + setAttributesFromSeriesTemplate + setAttributesFromSchedule + setAttributesFromOtherEvent + setAttributesForCurrentTime + getRecurrenceBaseId ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); # functions: to be separated -sub setAttributesFromSeriesTemplate{ - my $config=shift; - my $params=shift; - my $event=shift; - - #get attributes from series - my $series=series::get( - $config,{ - project_id => $params->{project_id}, - studio_id => $params->{studio_id}, - series_id => $params->{series_id}, - } - ); - if(@$series!=1){ - uac::print_error("series not found"); - return undef; - } +sub setAttributesFromSeriesTemplate { + my $config = shift; + my $params = shift; + my $event = shift; - #copy fields from series template - my $serie=$series->[0]; - for my $attr( - 'program','series_name','title', - 'excerpt', 'topic', 'content', 'html_content', - 'project','category','location','image', 'live', - 'archive_url', 'podcast_url' - ){ - $event->{$attr}=$serie->{$attr}; - } - $event->{series_image} = $serie->{image}; - $event->{series_image_label} = $serie->{licence}; - return $serie; + #get attributes from series + my $series = series::get( + $config, + { + project_id => $params->{project_id}, + studio_id => $params->{studio_id}, + series_id => $params->{series_id}, + } + ); + if ( @$series != 1 ) { + uac::print_error("series not found"); + return undef; + } + + #copy fields from series template + my $serie = $series->[0]; + for my $attr ( + 'program', 'series_name', 'title', 'excerpt', 'topic', 'content', 'html_content', 'project', + 'category', 'location', 'image', 'live', 'archive_url', 'podcast_url' + ) + { + $event->{$attr} = $serie->{$attr}; + } + $event->{series_image} = $serie->{image}; + $event->{series_image_label} = $serie->{licence}; + return $serie; } -sub setAttributesFromSchedule{ - my $config = shift; - my $params = shift; - my $event = shift; +sub setAttributesFromSchedule { + my $config = shift; + my $params = shift; + my $event = shift; - #print 'setAttributesFromSchedule:'.Dumper($params); - #set attributes from schedule - my $schedules=series_dates::get( - $config, { - project_id => $params->{project_id}, - studio_id => $params->{studio_id}, - series_id => $params->{series_id}, - start_at => $params->{start_date} - } - ); + #print 'setAttributesFromSchedule:'.Dumper($params); + #set attributes from schedule + my $schedules = series_dates::get( + $config, + { + project_id => $params->{project_id}, + studio_id => $params->{studio_id}, + series_id => $params->{series_id}, + start_at => $params->{start_date} + } + ); - if(@$schedules!=1){ - uac::print_error("schedule not found"); - return undef; - } + if ( @$schedules != 1 ) { + uac::print_error("schedule not found"); + return undef; + } - my $schedule=$schedules->[0]; - for my $attr( - 'start','end', - 'day', 'weekday', - 'start_date', 'end_date' - ){ - $event->{$attr}=$schedule->{$attr}; - } + my $schedule = $schedules->[0]; + for my $attr ( 'start', 'end', 'day', 'weekday', 'start_date', 'end_date' ) { + $event->{$attr} = $schedule->{$attr}; + } - my $timezone=$config->{date}->{time_zone}; - $event->{duration} = time::get_duration($event->{start}, $event->{end}, $timezone); + my $timezone = $config->{date}->{time_zone}; + $event->{duration} = time::get_duration( $event->{start}, $event->{end}, $timezone ); - return $event; + return $event; } -sub setAttributesFromOtherEvent{ - my $config=shift; - my $params=shift; - my $event=shift; +sub setAttributesFromOtherEvent { + my $config = shift; + my $params = shift; + my $event = shift; - my $event2=series::get_event($config, { - allow_any => 1, - #project_id => $params->{project_id}, - #studio_id => $params->{studio_id}, - #series_id => $params->{series_id}, - event_id => $params->{source_event_id} - }); - if (defined $event2){ - for my $attr ('title', 'user_title', 'excerpt', 'user_excerpt', 'content', 'html_content', 'topics', 'image', 'series_image', 'live', 'no_event_sync', 'podcast_url', 'archive_url', 'image_label', 'series_image_label'){ - $event->{$attr}=$event2->{$attr}; - } - $event->{rerun}=1; - $event->{recurrence}=getRecurrenceBaseId($event2); - } + my $event2 = series::get_event( + $config, + { + allow_any => 1, - return $event; + #project_id => $params->{project_id}, + #studio_id => $params->{studio_id}, + #series_id => $params->{series_id}, + event_id => $params->{source_event_id} + } + ); + if ( defined $event2 ) { + for my $attr ( + 'title', 'user_title', 'excerpt', 'user_excerpt', 'content', 'html_content', + 'topics', 'image', 'series_image', 'live', 'no_event_sync', 'podcast_url', + 'archive_url', 'image_label', 'series_image_label' + ) + { + $event->{$attr} = $event2->{$attr}; + } + $event->{rerun} = 1; + $event->{recurrence} = getRecurrenceBaseId($event2); + } + + return $event; } -sub setAttributesForCurrentTime{ - my $serie=shift; - my $event=shift; - - #on new event not from schedule use current time - if($event->{start}eq''){ - $event->{start}=time::time_to_datetime(); - if ($event->{start}=~/(\d\d\d\d\-\d\d\-\d\d \d\d)/){ - $event->{start}=$1.':00'; - } - } - $event->{duration}=$serie->{duration}||60; - $event->{end} =time::add_minutes_to_datetime($event->{start}, $event->{duration}); - $event->{end}=~s/(\d\d:\d\d)\:\d\d/$1/; +sub setAttributesForCurrentTime { + my $serie = shift; + my $event = shift; - return $event; + #on new event not from schedule use current time + if ( $event->{start} eq '' ) { + $event->{start} = time::time_to_datetime(); + if ( $event->{start} =~ /(\d\d\d\d\-\d\d\-\d\d \d\d)/ ) { + $event->{start} = $1 . ':00'; + } + } + $event->{duration} = $serie->{duration} || 60; + $event->{end} = time::add_minutes_to_datetime( $event->{start}, $event->{duration} ); + $event->{end} =~ s/(\d\d:\d\d)\:\d\d/$1/; + + return $event; } -# get recurrence base id -sub getRecurrenceBaseId{ - my $event = shift; - return $event->{recurrence} if (defined $event->{recurrence}) && ($event->{recurrence} ne '') && ($event->{recurrence} ne '0'); - return $event->{event_id}; +# get recurrence base id +sub getRecurrenceBaseId { + my $event = shift; + return $event->{recurrence} if ( defined $event->{recurrence} ) && ( $event->{recurrence} ne '' ) && ( $event->{recurrence} ne '0' ); + return $event->{event_id}; } # get a new event for given series -sub getNewEvent{ - my $config = shift; - my $params = shift; - my $action = shift; - +sub getNewEvent { + my $config = shift; + my $params = shift; + my $action = shift; # check for missing parameters my $required_fields = [ 'project_id', 'studio_id', 'series_id' ]; @@ -162,7 +167,7 @@ sub getNewEvent{ my $serie = eventOps::setAttributesFromSeriesTemplate( $config, $params, $event ); - #print Dumper($params); + #print Dumper($params); if ( $action eq 'show_new_event_from_schedule' ) { eventOps::setAttributesFromSchedule( $config, $params, $event ); } else { @@ -198,30 +203,31 @@ sub getNewEvent{ $event->{published} = 1; $event->{new_event} = 1; - return $event; + return $event; } # add user, action -sub createEvent{ - my $request = shift; - my $event = shift; - my $action = shift; - - my $config = $request->{config}; - my $permissions = $request->{permissions}; - my $user = $request->{user}; +sub createEvent { + my $request = shift; + my $event = shift; + my $action = shift; + + my $config = $request->{config}; + my $permissions = $request->{permissions}; + my $user = $request->{user}; my $checklist = [ 'studio', 'user', 'create_events', 'studio_timeslots' ]; if ( $action eq 'create_event_from_schedule' ) { push @$checklist, 'schedule' if $action eq 'create_event_from_schedule'; } + #use Data::Dumper; #print Dumper($checklist); #print Dumper($request); #print Dumper($event); - my $start = $event->{start_date}, - my $end = time::add_minutes_to_datetime( $event->{start_date}, $event->{duration} ); + my $start = $event->{start_date}, my $end = time::add_minutes_to_datetime( $event->{start_date}, $event->{duration} ); + #print Dumper($start); #print Dumper($end); diff --git a/lib/calcms/event_history.pm b/lib/calcms/event_history.pm index 72ad67b..e2666bc 100644 --- a/lib/calcms/event_history.pm +++ b/lib/calcms/event_history.pm @@ -1,174 +1,176 @@ #!/bin/perl - -package event_history; + +package event_history; use warnings "all"; use strict; use Data::Dumper; require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get get_by_id insert insert_by_event_id delete); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get get_by_id insert insert_by_event_id delete); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_event_history'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_event_history' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - return undef unless defined $condition->{studio_id}; + return undef unless defined $condition->{studio_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{event_id}) && ($condition->{event_id} ne '')){ - push @conditions, 'event_id=?'; + if ( ( defined $condition->{event_id} ) && ( $condition->{event_id} ne '' ) ) { + push @conditions, 'event_id=?'; push @bind_values, $condition->{event_id}; } - if ((defined $condition->{change_id}) && ($condition->{change_id} ne '')){ - push @conditions, 'id=?'; + if ( ( defined $condition->{change_id} ) && ( $condition->{change_id} ne '' ) ) { + push @conditions, 'id=?'; push @bind_values, $condition->{change_id}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_event_history $conditions order by modified_at desc $limit }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $changes=db::get($dbh, $query, \@bind_values); - #print STDERR Dumper($changes); + #print STDERR Dumper($query).Dumper(\@bind_values); - for my $change (@$changes){ - $change->{change_id}=$change->{id}; + my $changes = db::get( $dbh, $query, \@bind_values ); + + #print STDERR Dumper($changes); + + for my $change (@$changes) { + $change->{change_id} = $change->{id}; delete $change->{id}; } return $changes; } -sub get_by_id{ - my $config=shift; - my $id=shift; +sub get_by_id { + my $config = shift; + my $id = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ select * from calcms_event_history where event_id=? }; - my $studios=db::get($dbh,$query,[$id]); - return undef if (@$studios!=1); + my $studios = db::get( $dbh, $query, [$id] ); + return undef if ( @$studios != 1 ); return $studios->[0]; } -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; - $entry->{modified_at}= time::time_to_datetime(time()); + $entry->{modified_at} = time::time_to_datetime( time() ); - $entry->{event_id}=$entry->{id} if((defined $entry->{id})&&(!(defined $entry->{event_id}))); - delete $entry->{id}; + $entry->{event_id} = $entry->{id} if ( ( defined $entry->{id} ) && ( !( defined $entry->{event_id} ) ) ); + delete $entry->{id}; - #TODO:filter for existing attributes - my $columns=get_columns($config); - my $event={}; - for my $column (keys %$columns){ - $event->{$column}=$entry->{$column} if defined $entry->{$column}; - } + #TODO:filter for existing attributes + my $columns = get_columns($config); + my $event = {}; + for my $column ( keys %$columns ) { + $event->{$column} = $entry->{$column} if defined $entry->{$column}; + } - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_event_history', $event); - return $id; + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_event_history', $event ); + return $id; } # insert event -sub insert_by_event_id{ - my $config=shift; - my $options=shift; +sub insert_by_event_id { + my $config = shift; + my $options = shift; - return undef unless defined $options->{project_id}; - return undef unless defined $options->{studio_id}; - return undef unless defined $options->{series_id}; - return undef unless defined $options->{event_id}; - return undef unless defined $options->{user}; + return undef unless defined $options->{project_id}; + return undef unless defined $options->{studio_id}; + return undef unless defined $options->{series_id}; + return undef unless defined $options->{event_id}; + return undef unless defined $options->{user}; - my $sql=q{ + my $sql = q{ select * from calcms_events where id=? }; - my $bind_values=[$options->{event_id}]; - my $dbh=db::connect($config); - my $results=db::get($dbh, $sql, $bind_values); - if(@$results!=1){ - print STDERR "cannot find event with event_id=$options->{event_id}"; - return 0; - } + my $bind_values = [ $options->{event_id} ]; + my $dbh = db::connect($config); + my $results = db::get( $dbh, $sql, $bind_values ); + if ( @$results != 1 ) { + print STDERR "cannot find event with event_id=$options->{event_id}"; + return 0; + } - # add to history - my $event=$results->[0]; + # add to history + my $event = $results->[0]; $event->{project_id} = $options->{project_id}; $event->{studio_id} = $options->{studio_id}; $event->{series_id} = $options->{series_id}; $event->{event_id} = $options->{event_id}; $event->{user} = $options->{user}; $event->{deleted} = 1; - event_history::insert($config, $event); + event_history::insert( $config, $event ); } -sub delete{ - my $config=shift; - my $entry=shift; - - my $dbh=db::connect($config); - db::put($dbh, 'delete from calcms_event_history where event_id=?', [$entry->{id}]); +sub delete { + my $config = shift; + my $entry = shift; + + my $dbh = db::connect($config); + db::put( $dbh, 'delete from calcms_event_history where event_id=?', [ $entry->{id} ] ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
\n"; } diff --git a/lib/calcms/events.pm b/lib/calcms/events.pm index e03d6ea..317b12f 100644 --- a/lib/calcms/events.pm +++ b/lib/calcms/events.pm @@ -1,15 +1,15 @@ use warnings "all"; use strict; -use DBI; -use template; +use DBI(); +use template(); -use config; -use time; -use db; -use cache; -use markup; -use log; +use config(); +use time(); +use db(); +use cache(); +use markup(); +use log(); package events; use Data::Dumper; @@ -41,987 +41,985 @@ 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 ); + 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 + $cache->{content} = $_[0]; + cache::save($cache); + } + + 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); + #$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}; - $result->{title} = '' unless defined $result->{title}; - 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' ); + $result->{title} = '' unless defined $result->{title}; + 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}; - # $result->{image_label} = $result->{series_image_label}; - # } - #} + #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->{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->{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; + } - $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; + $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; - # add project by name - my $project_name = $result->{project}; - if ( defined $project_name ) { + # add project by name + my $project_name = $result->{project}; + if ( defined $project_name ) { - #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"; - } + #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 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}; - } - } + #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}; + } + } - #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 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}; + } + } - #$result->{'project_title'}=$project->{title} if (defined $project->{title} && $project->{title} ne ''); + #$result->{'project_title'}=$project->{title} if (defined $project->{title} && $project->{title} ne ''); - #print STDERR "project:'$project_name'\n"; - #print STDERR "title:'$result->{project_title}'\n"; - #use Data::Dumper;print STDERR Dumper($result); + #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->{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 '' ); - } - } + 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 '' ); + } + } - #for my $name (keys %{$config->{controllers}}){ - # $result->{"controller_$name"}=$config->{controllers}->{$name}; - #} + #for my $name (keys %{$config->{controllers}}){ + # $result->{"controller_$name"}=$config->{controllers}->{$name}; + #} - $previous_result = $result; + $previous_result = $result; - #print "Content-type:text/text\n\n"; - #use Data::Dumper;print STDERR Dumper($result); - $result->{ 'counter_' . $counter } = 1; - $counter++; + #print "Content-type:text/text\n\n"; + #use Data::Dumper;print STDERR Dumper($result); + $result->{ 'counter_' . $counter } = 1; + $counter++; - if ( ( defined $params->{template} ) - && ( $params->{template} =~ /(list|details)/ ) ) - { - if ( ( defined $result->{excerpt} ) && ( length( $result->{excerpt} ) > 250 ) ) { - $result->{excerpt} = substr( $result->{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 ) . '...'; + } - if ( ( defined $result->{user_excerpt} ) && ( length( $result->{user_excerpt} ) > 250 ) ) { - $result->{user_excerpt} = substr( $result->{user_excerpt}, 0, 250 ) . '...'; - } - } + if ( ( defined $result->{user_excerpt} ) && ( length( $result->{user_excerpt} ) > 250 ) ) { + $result->{user_excerpt} = substr( $result->{user_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}; + #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->{topic} ) { - $result->{topic} = markup::fix_line_ends( $result->{topic} ); - $result->{topic} = markup::creole_to_html( $result->{topic} ); - $result->{html_topic} = $result->{topic}; - } - } + } + 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}; + } + } - #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; + #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 $params->{template} ) - && ( ( $params->{template} =~ /event_perl\.txt$/ ) - || ( $params->{template} =~ /event_file_export\.txt$/ ) ) + if ( + ( defined $params->{template} ) + && ( ( $params->{template} =~ /event_perl\.txt$/ ) + || ( $params->{template} =~ /event_file_export\.txt$/ ) ) - ) - { - for my $key ( keys %$result ) { - $result->{$key} =~ s/\|/\\\|/g if ( defined $result->{$key} ); - } + ) + { + for my $key ( keys %$result ) { + $result->{$key} =~ s/\|/\\\|/g if ( defined $result->{$key} ); + } - # $result->{content}='no'; - } + # $result->{content}='no'; + } - } # end for results - add_recurrence_dates( $config, $results ); - return $results; + } # 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; + my $dbh = shift; + my $config = shift; + my $request = shift; + my $events = shift; - # print STDERR Dumper($results); - return $events unless defined $events; + # 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 $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; + #my $events = $results; - for my $event (@$events) { - my $eventId = $event->{event_id}; - push @ids, $eventId; - $eventsById->{$eventId} = $event; - } + 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); + #print STDERR Dumper($recordings); - for my $entry (@$recordings) { - my $eventId = $entry->{event_id}; - my $event = $eventsById->{$eventId}; - push @{ $event->{recordings} }, $entry; - } + for my $entry (@$recordings) { + my $eventId = $entry->{event_id}; + my $event = $eventsById->{$eventId}; + push @{ $event->{recordings} }, $entry; + } - return $events; + return $events; } sub getDateQueryConditions { - my $config = shift; - my $params = shift; - my $bind_values = shift; + my $config = shift; + my $params = shift; + my $bind_values = shift; - # conditions by date - my $date_conds = []; + # conditions by date + my $date_conds = []; - #date, today, tomorrow, yesterday - my $date = ''; - $date = time::date_cond( $params->{date} ) if $params->{date} ne ''; + #date, today, tomorrow, yesterday + my $date = ''; + $date = time::date_cond( $params->{date} ) if $params->{date} ne ''; - my $from_date = ''; - $from_date = time::date_cond( $params->{from_date} ) if $params->{from_date} ne ''; + my $from_date = ''; + $from_date = time::date_cond( $params->{from_date} ) if $params->{from_date} ne ''; - my $till_date = ''; - $till_date = time::date_cond( $params->{till_date} ) if $params->{till_date} ne ''; + 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 $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 $till_time = ''; + $till_time = time::time_cond( $params->{till_time} ) if $params->{till_time} ne ''; - my $time = $params->{time}; - $time = '' unless defined $time; + my $time = $params->{time}; + $time = '' unless defined $time; - my $date_range_include = $params->{date_range_include}; - my $day_starting_hour = $config->{date}->{day_starting_hour}; + my $date_range_include = $params->{date_range_include}; + my $day_starting_hour = $config->{date}->{day_starting_hour}; - if ( $date eq 'today' ) { - my $date = time::get_event_date($config); - push @$date_conds, ' ( start_date = ? ) '; - push @$bind_values, $date; - return $date_conds; - } + if ( $date eq 'today' ) { + my $date = time::get_event_date($config); + push @$date_conds, ' ( start_date = ? ) '; + push @$bind_values, $date; + return $date_conds; + } - # given date - my $start = time::datetime_cond( $date . 'T00:00:00' ); - if ( $start ne '' ) { - $start = time::add_hours_to_datetime( $start, $day_starting_hour ); - my $end = time::add_hours_to_datetime( $start, 24 ); + # given date + my $start = time::datetime_cond( $date . 'T00:00:00' ); + if ( $start ne '' ) { + $start = time::add_hours_to_datetime( $start, $day_starting_hour ); + my $end = time::add_hours_to_datetime( $start, 24 ); - if ( $date_range_include eq '1' ) { - push @$date_conds, ' end > ? '; - push @$bind_values, $start; - } else { - push @$date_conds, ' start >= ? '; - push @$bind_values, $start; - } + if ( $date_range_include eq '1' ) { + push @$date_conds, ' end > ? '; + push @$bind_values, $start; + } else { + push @$date_conds, ' start >= ? '; + push @$bind_values, $start; + } - push @$date_conds, ' start < ? '; - push @$bind_values, $end; - return $date_conds; - } + push @$date_conds, ' start < ? '; + push @$bind_values, $end; + return $date_conds; + } - if ( $time eq 'now' ) { - push @$date_conds, qq{ + if ( $time eq 'now' ) { + push @$date_conds, qq{ ( ( unix_timestamp(end) > unix_timestamp(now() ) ) and ( unix_timestamp(start) <= unix_timestamp(now() ) ) ) }; - return $date_conds; - } + return $date_conds; + } - if ( $time eq 'future' ) { - push @$date_conds, qq{ + if ( $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; - } + return $date_conds; + } - #from_date and from_time is defined - if ( ( $from_date ne '' ) && ( $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 = ''; - } - } - } + #from_date and from_time is defined + if ( ( $from_date ne '' ) && ( $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_date and till_time is defined - if ( ( $till_date ne '' ) && ( $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 = ''; - } - } + #till_date and till_time is defined + if ( ( $till_date ne '' ) && ( $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 = ''; + } + } - # after start of daily broadcast - if ( ( $from_date ne '' ) && ( $from_time eq '' ) ) { - my $start = time::datetime_cond( $from_date . 'T00:00:00' ); - $start = time::add_hours_to_datetime( $start, $day_starting_hour ); + # after start of daily broadcast + if ( ( $from_date ne '' ) && ( $from_time eq '' ) ) { + my $start = time::datetime_cond( $from_date . 'T00:00:00' ); + $start = time::add_hours_to_datetime( $start, $day_starting_hour ); - if ( $date_range_include eq '1' ) { + if ( $date_range_include eq '1' ) { - # end is after start - push @$date_conds, ' ( end >= ? )'; - push @$bind_values, $start; - } else { - push @$date_conds, ' ( start >= ? ) '; - push @$bind_values, $start; - } - } + # end is after start + push @$date_conds, ' ( end >= ? )'; + push @$bind_values, $start; + } else { + push @$date_conds, ' ( start >= ? ) '; + push @$bind_values, $start; + } + } - # before end of daily broadcast - if ( ( $till_date ne '' ) && ( $till_time eq '' ) ) { - my $end = time::datetime_cond( $till_date . 'T00:00:00' ); - $end = time::add_hours_to_datetime( $end, $day_starting_hour ); - if ( $date_range_include eq '1' ) { + # before end of daily broadcast + if ( ( $till_date ne '' ) && ( $till_time eq '' ) ) { + my $end = time::datetime_cond( $till_date . 'T00:00:00' ); + $end = time::add_hours_to_datetime( $end, $day_starting_hour ); + if ( $date_range_include eq '1' ) { - # start is before end - push @$date_conds, ' ( start <= ? )'; - push @$bind_values, $end; - } else { - push @$date_conds, ' ( end <= ? ) '; - push @$bind_values, $end; - } - } + # start is before end + push @$date_conds, ' ( start <= ? )'; + push @$bind_values, $end; + } else { + push @$date_conds, ' ( end <= ? ) '; + push @$bind_values, $end; + } + } - if ( $params->{weekday} ne '' ) { - my $weekday = $params->{weekday}; - $weekday += 1; - $weekday -= 7 if ( $weekday > 7 ); - push @$date_conds, ' (dayofweek(start)= ?) '; - push @$bind_values, $weekday; - } + if ( $params->{weekday} ne '' ) { + my $weekday = $params->{weekday}; + $weekday += 1; + $weekday -= 7 if ( $weekday > 7 ); + push @$date_conds, ' (dayofweek(start)= ?) '; + push @$bind_values, $weekday; + } - if ( $params->{archive} eq 'past' ) { - my $date = time::get_event_date($config); - if ( $date ne '' ) { - push @$date_conds, ' ( start < ? ) '; - push @$bind_values, $date; - } + if ( $params->{archive} eq 'past' ) { + my $date = time::get_event_date($config); + if ( $date ne '' ) { + push @$date_conds, ' ( start < ? ) '; + push @$bind_values, $date; + } - } - if ( $params->{archive} eq 'future' ) { - my $date = time::get_event_date($config); - if ( $date ne '' ) { - push @$date_conds, ' ( end >= ? ) '; - push @$bind_values, $date; - } - } + } + if ( $params->{archive} eq 'future' ) { + my $date = time::get_event_date($config); + if ( $date ne '' ) { + push @$date_conds, ' ( end >= ? ) '; + push @$bind_values, $date; + } + } - return $date_conds; + return $date_conds; } # 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; + my $dbh = shift; + my $config = shift; + my $request = shift; - my $params = $request->{params}->{checked}; - my $debug = $config->{system}->{debug}; + my $params = $request->{params}->{checked}; + my $debug = $config->{system}->{debug}; - $params->{recordings} = '' unless defined $params->{recordings}; + $params->{recordings} = '' unless defined $params->{recordings}; - my $bind_values = []; - my $where_cond = []; - my $order_cond = ''; - my $limit_cond = ''; + my $bind_values = []; + my $where_cond = []; + my $order_cond = ''; + my $limit_cond = ''; - if ( $params->{event_id} ne '' ) { + if ( $params->{event_id} ne '' ) { - # conditions by event id - push @$where_cond, 'e.id=?'; - $bind_values = [ $params->{event_id} ]; + # 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; - } + #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; - } + my $draft = $params->{draft} || '0'; + if ( ( $draft eq '0' ) || ( $draft eq '1' ) ) { + push @$where_cond, 'draft=?'; + push @$bind_values, $draft; + } - } else { + } else { - my $date_conds = getDateQueryConditions( $config, $params, $bind_values ); - my $date_cond = join " and ", @$date_conds; + my $date_conds = getDateQueryConditions( $config, $params, $bind_values ); + my $date_cond = join " and ", @$date_conds; - push @$where_cond, $date_cond if ( $date_cond ne '' ); - } + 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; - } - } + # 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 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; - } - } - } + # 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{ + #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}; - $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; - } - } - } + 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; + } + } + } - #print STDERR $search_cond."\n"; + #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 @@ -1064,183 +1062,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'; - } + # 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'; - } + #push @$where_cond, 'se.event_id=e.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'; + # 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'; - } + #push @$where_cond, 'e.id=ar.event_id'; + } - $query .= "\n from"; + $query .= "\n from"; - # add tables - if ( ( $params->{project_id} ne '' ) || ( $params->{studio_id} ne '' ) ) { + # 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"; - } + # 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"; - } + # 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 ); - } + 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 '' ); + $query .= "\n" . $order_cond if ( $order_cond ne '' ); + $query .= "\n" . $limit_cond if ( $limit_cond ne '' ); - #print STDERR Dumper($query).Dumper($bind_values)."\n"; + #print STDERR Dumper($query).Dumper($bind_values)."\n"; - return ( \$query, $bind_values ); + 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"; - template::process( $_[0], $params->{template}, $template_parameters ); + # 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 @@ -1256,106 +1254,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 $options = $_[2]; - $options = {} unless defined $options; + my $config = shift; + my $conditions = $_[0]; + my $bind_values = $_[1]; + my $options = $_[2]; + $options = {} unless defined $options; - # 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; - } - } + # 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; + } + } - # 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; - } - } + # 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; + } + } } # 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 $options = 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 $options = shift; + my $dbh = shift; + my $config = shift; + my $options = shift; - my $eventId = $options->{event_id}; - return undef unless defined $eventId; + 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 @@ -1363,509 +1361,509 @@ 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; + 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 $options = shift; + my $dbh = shift; + my $config = shift; + my $start_date = shift; + my $end_date = shift; + my $options = shift; - my $day_starting_hour = $config->{date}->{day_starting_hour}; + my $day_starting_hour = $config->{date}->{day_starting_hour}; - my $start = time::datetime_cond( $start_date . 'T00:00:00' ); - $start = time::add_hours_to_datetime( $start, $day_starting_hour ); + my $start = time::datetime_cond( $start_date . 'T00:00:00' ); + $start = time::add_hours_to_datetime( $start, $day_starting_hour ); - my $end = time::datetime_cond( $end_date . 'T00:00:00' ); - $end = time::add_hours_to_datetime( $end, $day_starting_hour ); + my $end = time::datetime_cond( $end_date . 'T00:00:00' ); + $end = time::add_hours_to_datetime( $end, $day_starting_hour ); - my $conditions = []; - push @$conditions, 'start between ? and ?'; - my $bind_values = [ $start, $end ]; + my $conditions = []; + push @$conditions, 'start between ? and ?'; + my $bind_values = [ $start, $end ]; - setDefaultEventConditions( $config, $conditions, $bind_values, $options ); + setDefaultEventConditions( $config, $conditions, $bind_values, $options ); - $conditions = join( ' and ', @$conditions ); + $conditions = join( ' and ', @$conditions ); - my $select = qq{distinct date(start) 'start_date'}; - $select = qq{distinct date(DATE_SUB(start, INTERVAL $day_starting_hour HOUR)) 'start_date'} if defined $day_starting_hour; + my $select = qq{distinct date(start) 'start_date'}; + $select = qq{distinct date(DATE_SUB(start, INTERVAL $day_starting_hour HOUR)) 'start_date'} if defined $day_starting_hour; - my $query = qq{ + my $query = qq{ select $select from calcms_events where $conditions }; - #print STDERR Dumper($query); + #print STDERR Dumper($query); - 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 $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(); + #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; + #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! diff --git a/lib/calcms/images.pm b/lib/calcms/images.pm index 5d81a33..664442d 100644 --- a/lib/calcms/images.pm +++ b/lib/calcms/images.pm @@ -1,536 +1,537 @@ use warnings "all"; use strict; -use config; -use template; +use config(); +use template(); -package images; +package images; use warnings "all"; use strict; use Data::Dumper; require Exporter; our @ISA = qw(Exporter); + #our @EXPORT = qw(all); our @EXPORT_OK = qw(get insert update insert_or_update delete delete_files); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); #column 'created_at' will be set at insert #column 'modified_at' will be set by default (do not update) -my $sql_columns =['filename', 'name', 'description', 'created_by', 'modified_by', 'modified_at', 'studio_id', 'project_id', 'public', 'licence']; +my $sql_columns = + [ 'filename', 'name', 'description', 'created_by', 'modified_by', 'modified_at', 'studio_id', 'project_id', 'public', 'licence' ]; -sub get{ - my $config=shift; - my $options=shift; +sub get { + my $config = shift; + my $options = shift; - my @cond=(); - my $bind_values=[]; - if ((defined $options->{project_id}) && ($options->{project_id}ne'')){ - push @cond, 'project_id = ?'; + my @cond = (); + my $bind_values = []; + if ( ( defined $options->{project_id} ) && ( $options->{project_id} ne '' ) ) { + push @cond, 'project_id = ?'; push @$bind_values, $options->{project_id}; } - if ((defined $options->{studio_id}) && ($options->{studio_id}ne'')){ - push @cond, 'studio_id = ?'; + if ( ( defined $options->{studio_id} ) && ( $options->{studio_id} ne '' ) ) { + push @cond, 'studio_id = ?'; push @$bind_values, $options->{studio_id}; } - if ((defined $options->{filename}) && ($options->{filename}ne'')){ - push @cond, 'filename = ?'; - push @$bind_values,$options->{filename}; + if ( ( defined $options->{filename} ) && ( $options->{filename} ne '' ) ) { + push @cond, 'filename = ?'; + push @$bind_values, $options->{filename}; } - if ((defined $options->{from}) && ($options->{from}ne'')){ - push @cond, 'date(created_at) >= ?'; - push @$bind_values,$options->{from}; + if ( ( defined $options->{from} ) && ( $options->{from} ne '' ) ) { + push @cond, 'date(created_at) >= ?'; + push @$bind_values, $options->{from}; } - if ((defined $options->{till}) && ($options->{till}ne'')){ - push @cond, 'date(created_at) <= ?'; - push @$bind_values,$options->{till}; + if ( ( defined $options->{till} ) && ( $options->{till} ne '' ) ) { + push @cond, 'date(created_at) <= ?'; + push @$bind_values, $options->{till}; } - if ((defined $options->{created_by}) && ($options->{created_by}ne'')){ - push @cond, 'created_by = ?'; - push @$bind_values,$options->{created_by}; + if ( ( defined $options->{created_by} ) && ( $options->{created_by} ne '' ) ) { + push @cond, 'created_by = ?'; + push @$bind_values, $options->{created_by}; } - if ((defined $options->{modified_by}) && ($options->{modified_by}ne'')){ - push @cond, 'modified_by = ?'; - push @$bind_values,$options->{modified_by}; + if ( ( defined $options->{modified_by} ) && ( $options->{modified_by} ne '' ) ) { + push @cond, 'modified_by = ?'; + push @$bind_values, $options->{modified_by}; } - if ((defined $options->{licence}) && ($options->{licence}ne'')){ - push @cond, 'licence = ?'; - push @$bind_values,$options->{licence}; + if ( ( defined $options->{licence} ) && ( $options->{licence} ne '' ) ) { + push @cond, 'licence = ?'; + push @$bind_values, $options->{licence}; } - if ((defined $options->{public}) && ($options->{public}ne'')){ - push @cond, 'public = ?'; - push @$bind_values,$options->{public}; - } - - if ((defined $options->{search}) && ($options->{search}ne'')){ - push @cond, '(filename like ?' - .' or name like ?' - .' or description like ?' - .' or created_by like ?' - .')'; - my $search='%'.$options->{search}.'%'; - push @$bind_values,$search; - push @$bind_values,$search; - push @$bind_values,$search; - push @$bind_values,$search; -# push @$bind_values,$search; + if ( ( defined $options->{public} ) && ( $options->{public} ne '' ) ) { + push @cond, 'public = ?'; + push @$bind_values, $options->{public}; } - my $where=''; - if (@cond>0){ - $where = 'where '.join (' and ', @cond); + if ( ( defined $options->{search} ) && ( $options->{search} ne '' ) ) { + push @cond, '(filename like ?' . ' or name like ?' . ' or description like ?' . ' or created_by like ?' . ')'; + my $search = '%' . $options->{search} . '%'; + push @$bind_values, $search; + push @$bind_values, $search; + push @$bind_values, $search; + push @$bind_values, $search; + + # push @$bind_values,$search; } - my $limit=''; - if ( (defined $options->{limit}) && ($options->{limit}=~/(\d+)/) ){ - $limit=' limit '.$1; + my $where = ''; + if ( @cond > 0 ) { + $where = 'where ' . join( ' and ', @cond ); } - my $query=qq{ + my $limit = ''; + if ( ( defined $options->{limit} ) && ( $options->{limit} =~ /(\d+)/ ) ) { + $limit = ' limit ' . $1; + } + + my $query = qq{ select * from calcms_images $where order by created_at desc $limit }; + #print STDERR Dumper($query).Dumper($bind_values); - my $dbh = db::connect($config); - my $results = db::get($dbh, $query, $bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, $bind_values ); - #print STDERR @$results."\n"; + #print STDERR @$results."\n"; return $results; } -sub insert_or_update{ - my $dbh=shift; - my $image=shift; +sub insert_or_update { + my $dbh = shift; + my $image = shift; - $image->{name} = 'new' if $image->{name} eq '' ; - my $entry = get_by_filename($dbh, $image->{filename}); - if (defined $entry){ - update($dbh, $image); - }else{ - insert($dbh, $image); + $image->{name} = 'new' if $image->{name} eq ''; + my $entry = get_by_filename( $dbh, $image->{filename} ); + if ( defined $entry ) { + update( $dbh, $image ); + } else { + insert( $dbh, $image ); } } -sub insert{ - my $dbh=shift; - my $image=shift; +sub insert { + my $dbh = shift; + my $image = shift; - my @sql_columns=@$sql_columns; + my @sql_columns = @$sql_columns; - #set created at timestamp - push @sql_columns,'created_at'; - $image->{created_at}=time::time_to_datetime(); + #set created at timestamp + push @sql_columns, 'created_at'; + $image->{created_at} = time::time_to_datetime(); - unless (defined $image->{created_by}){ - print STDERR "missing created_by at image::insert\n"; - return undef; - } - unless (defined $image->{studio_id}){ - print STDERR "missing studio_id at image::insert\n"; - return undef; - } - unless (defined $image->{project_id}){ - print STDERR "missing project_id at image::insert\n"; - return undef; - } - - for my $attr ('public'){ - $image->{$attr} = 0 unless (defined $image->{$attr}) && ($image->{$attr} eq '1'); - } - - my $query=q{ + unless ( defined $image->{created_by} ) { + print STDERR "missing created_by at image::insert\n"; + return undef; + } + unless ( defined $image->{studio_id} ) { + print STDERR "missing studio_id at image::insert\n"; + return undef; + } + unless ( defined $image->{project_id} ) { + print STDERR "missing project_id at image::insert\n"; + return undef; + } + + for my $attr ('public') { + $image->{$attr} = 0 unless ( defined $image->{$attr} ) && ( $image->{$attr} eq '1' ); + } + + my $query = q{ insert into calcms_images( - }.join(',',@sql_columns).qq{ + } . join( ',', @sql_columns ) . qq{ ) - values( }.join(', ', (map {'?'} @sql_columns)).q{ ) + values( } . join( ', ', ( map { '?' } @sql_columns ) ) . q{ ) }; - my @bind_values=map { $image->{$_} } @sql_columns; + my @bind_values = map { $image->{$_} } @sql_columns; #print STDERR Dumper($query).Dumper(\@bind_values); - my $result = db::put($dbh, $query, \@bind_values); - - images::setSeriesLabels($dbh, $image); - images::setEventLabels($dbh, $image); + my $result = db::put( $dbh, $query, \@bind_values ); - return $result; + images::setSeriesLabels( $dbh, $image ); + images::setEventLabels( $dbh, $image ); + + return $result; } +sub update { + my $dbh = shift; + my $image = shift; -sub update{ - my $dbh=shift; - my $image=shift; + unless ( defined $image->{studio_id} ) { + print STDERR "missing studio_id at images::update\n"; + return undef; + } + unless ( defined $image->{project_id} ) { + print STDERR "missing project_id at image::update\n"; + return undef; + } + unless ( defined $image->{filename} ) { + print STDERR "missing filename at image::update\n"; + return undef; + } - unless (defined $image->{studio_id}){ - print STDERR "missing studio_id at images::update\n"; - return undef; - } - unless (defined $image->{project_id}){ - print STDERR "missing project_id at image::update\n"; - return undef; - } - unless (defined $image->{filename}){ - print STDERR "missing filename at image::update\n"; - return undef; - } + $image->{modified_at} = time::time_to_datetime(); - $image->{modified_at}=time::time_to_datetime(); + for my $attr ('public') { + $image->{$attr} = 0 unless ( defined $image->{$attr} ) && ( $image->{$attr} eq '1' ); + } - for my $attr ('public'){ - $image->{$attr} = 0 unless (defined $image->{$attr}) && ($image->{$attr} eq '1'); - } - - my @set=(); - my $bind_values=[]; - for my $column (@$sql_columns){ - if (defined $image->{$column}){ - push @set, $column.' = ?'; - push @$bind_values,$image->{$column}; + my @set = (); + my $bind_values = []; + for my $column (@$sql_columns) { + if ( defined $image->{$column} ) { + push @set, $column . ' = ?'; + push @$bind_values, $image->{$column}; } } - - #conditions - my $conditions=['filename=?']; - push @$bind_values,$image->{filename}; - push @$conditions, 'project_id=?'; - push @$bind_values, $image->{project_id}||0; + #conditions + my $conditions = ['filename=?']; + push @$bind_values, $image->{filename}; - push @$conditions, 'studio_id=?'; - push @$bind_values, $image->{studio_id}||0; + push @$conditions, 'project_id=?'; + push @$bind_values, $image->{project_id} || 0; - return if (@set==0); - - my $set=join (",",@set); - $conditions=join(' and ', @$conditions); - my $query=qq{ + push @$conditions, 'studio_id=?'; + push @$bind_values, $image->{studio_id} || 0; + + return if ( @set == 0 ); + + my $set = join( ",", @set ); + $conditions = join( ' and ', @$conditions ); + my $query = qq{ update calcms_images set $set where $conditions }; - print STDERR Dumper($query).Dumper($bind_values); - my $result= db::put($dbh,$query,$bind_values); - - images::setSeriesLabels($dbh, $image); - images::setEventLabels($dbh, $image); - - return $result; + print STDERR Dumper($query) . Dumper($bind_values); + my $result = db::put( $dbh, $query, $bind_values ); + + images::setSeriesLabels( $dbh, $image ); + images::setEventLabels( $dbh, $image ); + + return $result; } +sub delete { + my $dbh = shift; + my $image = shift; -sub delete{ - my $dbh=shift; - my $image=shift; + unless ( defined $image->{project_id} ) { + print STDERR "missing project_id at images::delete\n"; + return undef; + } + unless ( defined $image->{studio_id} ) { + print STDERR "missing studio_id at images::delete\n"; + return undef; + } + unless ( defined $image->{filename} ) { + print STDERR "missing filename at images::delete\n"; + return undef; + } - unless (defined $image->{project_id}){ - print STDERR "missing project_id at images::delete\n"; - return undef; - } - unless (defined $image->{studio_id}){ - print STDERR "missing studio_id at images::delete\n"; - return undef; - } - unless (defined $image->{filename}){ - print STDERR "missing filename at images::delete\n"; - return undef; - } - - my $project_id = $image->{project_id}; - my $studio_id = $image->{studio_id}; - my $filename = $image->{filename}; + my $project_id = $image->{project_id}; + my $studio_id = $image->{studio_id}; + my $filename = $image->{filename}; - my $conditions = ['filename=?']; + my $conditions = ['filename=?']; my $bind_values = [$filename]; - - push @$conditions, 'project_id=?'; - push @$bind_values, $studio_id; - push @$conditions, 'studio_id=?'; - push @$bind_values, $project_id; + push @$conditions, 'project_id=?'; + push @$bind_values, $studio_id; - $conditions=join(' and ', @$conditions); - my $query=qq{ + push @$conditions, 'studio_id=?'; + push @$bind_values, $project_id; + + $conditions = join( ' and ', @$conditions ); + my $query = qq{ delete from calcms_images where $conditions }; + #print STDERR Dumper($query).Dumper($bind_values); - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } # deactivated -sub delete_files{ - my $config = $_[0]; - my $local_media_dir = $_[1]; - my $filename = $_[2]; - my $action_result = $_[3]; - my $errors = $_[4]; +sub delete_files { + my $config = $_[0]; + my $local_media_dir = $_[1]; + my $filename = $_[2]; + my $action_result = $_[3]; + my $errors = $_[4]; - return undef; - - print log::error($config, 'missing permissions on writing into local media dir')unless(-w $local_media_dir); + return undef; - if ($filename=~/[^a-zA-Z0-9\.\_\-]/){ - log::error($config, "invalid filename: '$filename'"); + print log::error( $config, 'missing permissions on writing into local media dir' ) unless ( -w $local_media_dir ); + + if ( $filename =~ /[^a-zA-Z0-9\.\_\-]/ ) { + log::error( $config, "invalid filename: '$filename'" ); return; } - if ($filename=~/\.\./ || $filename=~/^\// || $filename=~/\//){ - log::error($config, "invalid filename: '$filename'"); + if ( $filename =~ /\.\./ || $filename =~ /^\// || $filename =~ /\// ) { + log::error( $config, "invalid filename: '$filename'" ); return; } - log::error($config, 'missing permissions on writing into local_media_dir/images/')unless(-w $local_media_dir.'images/'); - log::error($config, 'missing permissions on writing into local_media_dir/thumbs/')unless(-w $local_media_dir.'thumbs/'); - log::error($config, 'missing permissions on writing into local_media_dir/icons/') unless(-w $local_media_dir.'icons/'); + log::error( $config, 'missing permissions on writing into local_media_dir/images/' ) unless ( -w $local_media_dir . 'images/' ); + log::error( $config, 'missing permissions on writing into local_media_dir/thumbs/' ) unless ( -w $local_media_dir . 'thumbs/' ); + log::error( $config, 'missing permissions on writing into local_media_dir/icons/' ) unless ( -w $local_media_dir . 'icons/' ); + + my $path = $local_media_dir . '/upload/' . $filename; - my $path=$local_media_dir.'/upload/'.$filename; #delete_file($path,"Upload $filename",$action_result,$errors); - $path=$local_media_dir.'/images/'.$filename; - delete_file($path,"Image $filename",$action_result,$errors); + $path = $local_media_dir . '/images/' . $filename; + delete_file( $path, "Image $filename", $action_result, $errors ); - $path=$local_media_dir.'/thumbs/'.$filename; - delete_file($path,"Thumb $filename",$action_result,$errors); + $path = $local_media_dir . '/thumbs/' . $filename; + delete_file( $path, "Thumb $filename", $action_result, $errors ); - $path=$local_media_dir.'/icons/'.$filename; - delete_file($path,"Icon $filename",$action_result,$errors); + $path = $local_media_dir . '/icons/' . $filename; + delete_file( $path, "Icon $filename", $action_result, $errors ); } # deactivated -sub delete_file{ - my $path = $_[0]; - my $type = $_[1]; +sub delete_file { + my $path = $_[0]; + my $type = $_[1]; my $action_result = $_[2]; - my $errors = $_[3]; + my $errors = $_[3]; - return undef; + return undef; - unless (-e $path){ - $errors.= qq{Error: File does not exist!
}; + unless ( -e $path ) { + $errors .= qq{Error: File does not exist!
}; return; } - unless (-w $path){ - $errors.= qq{Error: Cannot write $type
}; + unless ( -w $path ) { + $errors .= qq{Error: Cannot write $type
}; return; } unlink($path); - if ($?==0){ - $action_result.= qq{$type deleted
}; - }else{ - $errors.= qq{Error on deleting $type
}; + if ( $? == 0 ) { + $action_result .= qq{$type deleted
}; + } else { + $errors .= qq{Error on deleting $type
}; } } -sub getPath{ - my $config=shift; - my $options=shift; +sub getPath { + my $config = shift; + my $options = shift; - my $dir = $config->{locations}->{local_media_dir}; - return undef unless defined $dir; - return undef unless -e $dir; - - my $filename=$options->{filename}; - return undef unless defined $filename; - $filename=~s/^.*\///g; + my $dir = $config->{locations}->{local_media_dir}; + return undef unless defined $dir; + return undef unless -e $dir; - my $type='thumbs'; - $type=$options->{type} if (defined $options->{type}) && ($options->{type}=~/^(images|thumbs|icons)$/); + my $filename = $options->{filename}; + return undef unless defined $filename; + $filename =~ s/^.*\///g; - my $path = $dir.'/'.$type.'/'.$filename; - $path=~s/\/+/\//g; - return $path; + my $type = 'thumbs'; + $type = $options->{type} if ( defined $options->{type} ) && ( $options->{type} =~ /^(images|thumbs|icons)$/ ); + + my $path = $dir . '/' . $type . '/' . $filename; + $path =~ s/\/+/\//g; + return $path; } -sub getInternalPath{ - my $config=shift; - my $options=shift; +sub getInternalPath { + my $config = shift; + my $options = shift; - my $dir=$config->{locations}->{local_media_dir}; - return undef unless defined $dir; - return undef unless -e $dir; - - my $filename=$options->{filename}; - return undef unless defined $filename; - $filename=~s/^.*\///g; + my $dir = $config->{locations}->{local_media_dir}; + return undef unless defined $dir; + return undef unless -e $dir; - my $type='thumbs'; - $type=$options->{type} if (defined $options->{type}) && ($options->{type}=~/^(images|thumbs|icons)$/); + my $filename = $options->{filename}; + return undef unless defined $filename; + $filename =~ s/^.*\///g; - my $path = $dir.'/internal/'.$type.'/'.$filename; - $path=~s/\/+/\//g; - return $path; + my $type = 'thumbs'; + $type = $options->{type} if ( defined $options->{type} ) && ( $options->{type} =~ /^(images|thumbs|icons)$/ ); + + my $path = $dir . '/internal/' . $type . '/' . $filename; + $path =~ s/\/+/\//g; + return $path; } -sub normalizeName{ - my $name = shift; - return undef unless defined $name; - $name =~s/.*\///g; - return $name; +sub normalizeName { + my $name = shift; + return undef unless defined $name; + $name =~ s/.*\///g; + return $name; } -sub readFile{ - my $path=shift; - my $content=''; +sub readFile { + my $path = shift; + my $content = ''; - print STDERR "read '$path'\n"; - return { error=> "source '$path' does not exist"} unless -e $path; - return { error=> "cannot read source '$path'"} unless -r $path; + print STDERR "read '$path'\n"; + return { error => "source '$path' does not exist" } unless -e $path; + return { error => "cannot read source '$path'" } unless -r $path; open my $file, '< :raw', $path or return { error => 'could not open image file. ' . $! . " $path" }; binmode $file; - $content = join("",<$file>); + $content = join( "", <$file> ); close $file; - return {content => $content}; + return { content => $content }; } -sub writeFile{ - my $path=shift; - my $content=shift; - - print STDERR "save '$path'\n"; +sub writeFile { + my $path = shift; + my $content = shift; + + print STDERR "save '$path'\n"; open my $fh, '> :raw', $path or return { error => 'could not save image. ' . $! . " $path" }; binmode $fh; print $fh $content; close $fh; - return {}; + return {}; } -sub deleteFile{ - my $path=shift; - return { error=> "source '$path' does not exist"} unless -e $path; - #unlink $path; - return {}; - +sub deleteFile { + my $path = shift; + return { error => "source '$path' does not exist" } unless -e $path; + + #unlink $path; + return {}; + } -sub copyFile{ - my $source = shift; - my $target = shift; - my $errors = shift; - - my $read=images::readFile($source); - return $read if defined $read->{error}; +sub copyFile { + my $source = shift; + my $target = shift; + my $errors = shift; - my $write=images::writeFile($target, $read->{content}); - return $write; + my $read = images::readFile($source); + return $read if defined $read->{error}; + + my $write = images::writeFile( $target, $read->{content} ); + return $write; } -sub publish{ - my $config=shift; - my $filename=shift; +sub publish { + my $config = shift; + my $filename = shift; - print STDERR "publish\n"; - return undef unless defined $config; - return undef unless defined $filename; - my $errors=[]; - for my $type ('images','thumbs','icons'){ - my $source = getInternalPath($config, {filename=>$filename, type=>$type}); - my $target = getPath($config, {filename=>$filename, type=>$type}); - my $result = copyFile($source, $target, $errors); - if (defined $result->{error}){ - push @$errors, $result->{error} ; - print STDERR "error on copy '$source' to '$target': $result->{error}\n"; - } - } - return $errors; + print STDERR "publish\n"; + return undef unless defined $config; + return undef unless defined $filename; + my $errors = []; + for my $type ( 'images', 'thumbs', 'icons' ) { + my $source = getInternalPath( $config, { filename => $filename, type => $type } ); + my $target = getPath( $config, { filename => $filename, type => $type } ); + my $result = copyFile( $source, $target, $errors ); + if ( defined $result->{error} ) { + push @$errors, $result->{error}; + print STDERR "error on copy '$source' to '$target': $result->{error}\n"; + } + } + return $errors; } -sub depublish{ - my $config=shift; - my $filename=shift; +sub depublish { + my $config = shift; + my $filename = shift; - print STDERR "depublish\n"; - return undef unless defined $config; - return undef unless defined $filename; - my $errors=[]; - for my $type ('images','thumbs','icons'){ - my $path = getPath($config, {filename=>$filename, type=>$type}); - next unless defined $path; - print STDERR "remove '$path'\n"; - unlink $path; - #push @$errors, $result->{error} if defined $result->{error}; - } - return $errors; + print STDERR "depublish\n"; + return undef unless defined $config; + return undef unless defined $filename; + my $errors = []; + for my $type ( 'images', 'thumbs', 'icons' ) { + my $path = getPath( $config, { filename => $filename, type => $type } ); + next unless defined $path; + print STDERR "remove '$path'\n"; + unlink $path; + + #push @$errors, $result->{error} if defined $result->{error}; + } + return $errors; } -sub checkLicence{ - my $config = shift; - my $result = shift; +sub checkLicence { + my $config = shift; + my $result = shift; - print STDERR "depublish\n"; - return undef unless defined $config; - return undef unless defined $result; + print STDERR "depublish\n"; + return undef unless defined $config; + return undef unless defined $result; - return if $result->{licence}=~/\S/; - if ((defined $result->{public}) && ($result->{public}eq'1')){ - depublish($config, $result->{filename}); - $result->{public}=0; - } + return if $result->{licence} =~ /\S/; + if ( ( defined $result->{public} ) && ( $result->{public} eq '1' ) ) { + depublish( $config, $result->{filename} ); + $result->{public} = 0; + } } -sub setEventLabels{ - my $dbh = shift; - my $image = shift; - - unless (defined $image->{project_id}){ - print STDERR "missing project_id at images::setEventLabels\n"; - return undef; - } - unless (defined $image->{studio_id}){ - print STDERR "missing studio_id at images::setEventLabels\n"; - return undef; - } - unless (defined $image->{filename}){ - print STDERR "missing filename at images::setEventLabels\n"; - return undef; - } +sub setEventLabels { + my $dbh = shift; + my $image = shift; - my $query=qq{ + unless ( defined $image->{project_id} ) { + print STDERR "missing project_id at images::setEventLabels\n"; + return undef; + } + unless ( defined $image->{studio_id} ) { + print STDERR "missing studio_id at images::setEventLabels\n"; + return undef; + } + unless ( defined $image->{filename} ) { + print STDERR "missing filename at images::setEventLabels\n"; + return undef; + } + + my $query = qq{ update calcms_events set image_label=? where image=? }; - my $bind_values=[$image->{licence}, $image->{filename}]; - print STDERR Dumper($query).Dumper($bind_values); + my $bind_values = [ $image->{licence}, $image->{filename} ]; + print STDERR Dumper($query) . Dumper($bind_values); - my $results= db::put($dbh, $query, $bind_values); - print STDERR Dumper($results)." changes\n"; - return $results; + my $results = db::put( $dbh, $query, $bind_values ); + print STDERR Dumper($results) . " changes\n"; + return $results; } -sub setSeriesLabels{ - my $dbh = shift; - my $image = shift; - - unless (defined $image->{project_id}){ - print STDERR "missing project_id at images::setSeriesLabels\n"; - return undef; - } - unless (defined $image->{studio_id}){ - print STDERR "missing studio_id at images::setSeriesLabels\n"; - return undef; - } - unless (defined $image->{filename}){ - print STDERR "missing filename at images::setSeriesLabels\n"; - return undef; - } +sub setSeriesLabels { + my $dbh = shift; + my $image = shift; - my $query=qq{ + unless ( defined $image->{project_id} ) { + print STDERR "missing project_id at images::setSeriesLabels\n"; + return undef; + } + unless ( defined $image->{studio_id} ) { + print STDERR "missing studio_id at images::setSeriesLabels\n"; + return undef; + } + unless ( defined $image->{filename} ) { + print STDERR "missing filename at images::setSeriesLabels\n"; + return undef; + } + + my $query = qq{ update calcms_events set series_image_label=? where series_image=? }; - my $bind_values=[$image->{licence}, $image->{filename}]; - print STDERR Dumper($query).Dumper($bind_values); - - my $results= db::put($dbh, $query, $bind_values); - print STDERR Dumper($results)." changes\n"; - return $results; -} + my $bind_values = [ $image->{licence}, $image->{filename} ]; + print STDERR Dumper($query) . Dumper($bind_values); + my $results = db::put( $dbh, $query, $bind_values ); + print STDERR Dumper($results) . " changes\n"; + return $results; +} #do not delete last line! 1; diff --git a/lib/calcms/localization.pm b/lib/calcms/localization.pm index f1ee00a..b79d029 100644 --- a/lib/calcms/localization.pm +++ b/lib/calcms/localization.pm @@ -1,15 +1,15 @@ -package localization; +package localization; use warnings "all"; use strict; use Data::Dumper; -use uac; -use user_settings; +use uac(); +use user_settings(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get getJavascript); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get getJavascript); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; @@ -18,93 +18,98 @@ sub debug; # language : get for selected language # user : get from user settings # loc : add to existing localization, optional -sub get{ - my $config =shift; - my $options=shift; +sub get { + my $config = shift; + my $options = shift; - #print STDERR Dumper($options); + #print STDERR Dumper($options); - #get pot file - unless (defined $options->{file}){ - print STDERR "missing po file\n"; - return $options->{loc}||{}; - } + #get pot file + unless ( defined $options->{file} ) { + print STDERR "missing po file\n"; + return $options->{loc} || {}; + } - my $language=undef; - #get language from options - $language=$options->{language} if (defined $options->{language}); + my $language = undef; - #get language from user - if ( (!(defined $language)) && (defined $options->{user})){ - my $user_settings=user_settings::get($config, {user=>$options->{user}}); - $language=$user_settings->{language}; - } - $language='en' unless defined $language; - $language='en' unless $language eq 'de'; + #get language from options + $language = $options->{language} if ( defined $options->{language} ); - my $loc={}; - $loc=$options->{loc} if defined $options->{loc}; + #get language from user + if ( ( !( defined $language ) ) && ( defined $options->{user} ) ) { + my $user_settings = user_settings::get( $config, { user => $options->{user} } ); + $language = $user_settings->{language}; + } + $language = 'en' unless defined $language; + $language = 'en' unless $language eq 'de'; - my $files=$options->{file}; - $files=~s/[^a-zA-Z\,\_\-]//g; - #get all comma separated po files - for my $file (split/\,/,$files){ - #read default language - #my $po_file=$config->{locations}->{admin_pot_dir}.'/en/'.$file.'.po'; - #$loc=read_po_file($po_file, $loc); + my $loc = {}; + $loc = $options->{loc} if defined $options->{loc}; - #read selected language - #if($language ne 'en'){ - my $po_file=$config->{locations}->{admin_pot_dir}.'/'.$language.'/'.$file.'.po'; - $loc=read_po_file($po_file, $loc); - #} - } - return $loc; + my $files = $options->{file}; + $files =~ s/[^a-zA-Z\,\_\-]//g; + + #get all comma separated po files + for my $file ( split /\,/, $files ) { + + #read default language + #my $po_file=$config->{locations}->{admin_pot_dir}.'/en/'.$file.'.po'; + #$loc=read_po_file($po_file, $loc); + + #read selected language + #if($language ne 'en'){ + my $po_file = $config->{locations}->{admin_pot_dir} . '/' . $language . '/' . $file . '.po'; + $loc = read_po_file( $po_file, $loc ); + + #} + } + return $loc; } -sub read_po_file{ - my $po_file=shift; - my $loc =shift; +sub read_po_file { + my $po_file = shift; + my $loc = shift; - unless (-e $po_file){ - print STDERR "po file $po_file does not exist\n"; - return $loc; - } - unless (-r $po_file){ - print STDERR "cannot read po file $po_file\n"; - return $loc; - } - - my $key=''; - open my $file, '<:encoding(UTF-8)', $po_file; - while (<$file>){ - my $line=$_; - #print STDERR $line; - if ($line=~/^msgid\s*\"(.*)\"\s*$/){ - $key=$1; - $key=~s/\'//g; - $key=~s/\"//g; - } - if ($line=~/^msgstr\s*\"(.*)\"\s*$/){ - my $val=$1; - $val=~s/\'//g; - $val=~s/\"//g; - $loc->{$key}=$val; - } - } - return $loc; + unless ( -e $po_file ) { + print STDERR "po file $po_file does not exist\n"; + return $loc; + } + unless ( -r $po_file ) { + print STDERR "cannot read po file $po_file\n"; + return $loc; + } + + my $key = ''; + open my $file, '<:encoding(UTF-8)', $po_file; + while (<$file>) { + my $line = $_; + + #print STDERR $line; + if ( $line =~ /^msgid\s*\"(.*)\"\s*$/ ) { + $key = $1; + $key =~ s/\'//g; + $key =~ s/\"//g; + } + if ( $line =~ /^msgstr\s*\"(.*)\"\s*$/ ) { + my $val = $1; + $val =~ s/\'//g; + $val =~ s/\"//g; + $loc->{$key} = $val; + } + } + return $loc; } -sub getJavascript{ - my $loc=shift; +sub getJavascript { + my $loc = shift; - my $out='\n"; - return $out; + my $out = '\n"; + return $out; } 1; diff --git a/lib/calcms/log.pm b/lib/calcms/log.pm index 758d3ef..6881425 100644 --- a/lib/calcms/log.pm +++ b/lib/calcms/log.pm @@ -1,166 +1,92 @@ use warnings "all"; use strict; -use template; -use config; +use template(); +use config(); package log; -use Data::Dumper; -require Exporter; -our @ISA = qw(Exporter); -#our @EXPORT = qw(all); -our @EXPORT_OK = qw(init write read error mem); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +sub error { + my $config = $_[0]; + my $message = "Error: $_[1]\n"; -#our $debug=0; -our $debug_params=''; -our $header="Content-type:text/html\n\n"; - -our $gtop = undef; -our $proc = undef; - -sub init{ - my $request =$_[0]; - $log::debug_params =$request->{params}->{checked}->{debug}||''; - $log::header =$request->{header}if (defined $request->{header}); - - #if ($config->{system}->{debug_memory}>0){ - #use GTop(); - #$log::gtop=GTop->new; - #$log::proc=$gtop->proc_mem($$); - #} -} - -sub write{ - my $config = shift; - my $key = shift; - my $data = shift; - my $dump = shift; - - return unless(defined $config::config->{system}->{debug}); - return unless(($config::config->{system}->{debug}>0) &&($log::debug_params=~/$key/)); - - my $line=Dumper($data); - $line=~s/^\$VAR1 = \{\n//g; - $line=~s/\};\n$/<\/code>/g; - $line=~s/\n/\\n/g; - my $msg=localtime()." [$key] ".$ENV{REQUEST_URI}."\\n".$line; - $msg.=Dumper($dump) if (defined $dump); - $msg.="\n"; - - log::print($config, $msg); -} - -sub print{ - my $config = $_[0]; - my $message= $_[1]; - - unless (defined $config){ - print STDERR "missing config at log::error\n"; - return; - } - - my $filename=$config->{system}->{log_debug_file}||''; - if ($filename eq ''){ - print STDERR "calcms config parameter 'system/log_debug_file' not set!\n"; - return; - }; - - open my $FILE, ">>:utf8", $filename or warn("cant write log file '$filename'"); - print $FILE $message; - close $FILE; -} - -sub error{ - my $config = $_[0]; - my $message="Error: $_[1]\n"; - - unless (defined $config){ - print STDERR "missing config at log::error\n"; - } - - print STDERR $message."\n"; - if($config::config->{system}->{debug}){ - log::write($config, '', $message);# if ($config::config->{system}->{debug}>1); - - my $out=''; - #do not call template::check to avoid deep recursion! - template::process('print','templates/default.html', { - static_files_url => $config::config->{locations}->{static_files_url}, - error=>$message - }); + print STDERR $message; + unless ( defined $config ) { + print STDERR "missing config at log::error\n"; + die(); } - # TODO: remove exit - die(); - #exit; + + #do not call template::check to avoid deep recursion! + if ( $config::config->{system}->{debug} ) { + + template::process( + 'print', + 'templates/default.html', + { + static_files_url => $config::config->{locations}->{static_files_url}, + error => $message + } + ); + } + + die(); } -sub mem{ - my $config = $_[0]; - return unless $config::config->{system}->{debug_memory}; - my $size=$log::gtop->proc_mem($$)->size(); - my $format_size=$size; - $format_size=~s/(\d)(\d\d\d)$/$1\.$2/g; - $format_size=~s/(\d)(\d\d\d)(\d\d\d)$/$1\.$2\.$3/g; - my $line=localtime(time())."\t".$$."\t".$format_size."\t".$_[0]; - $line.="\t\t".($size-$_[1]) if(defined $_[1]); - log::error($config, "log_memory_file is not defined!") if (!defined $config::config->{system}->{log_debug_memory_file}); - log::append_file($config::config->{system}->{log_debug_memory_file} , $line); -} +#do not delete last line! +1; -sub load_file{ - my $filename=$_[0]; -# my $content=$_[1]; +sub load_file { + my $filename = $_[0]; -# binmode STDOUT, ":utf8"; - my $content=''; - if (-e $filename){ - my $FILE=undef; + # my $content=$_[1]; + + # binmode STDOUT, ":utf8"; + my $content = ''; + if ( -e $filename ) { + my $FILE = undef; open $FILE, "<:utf8", $filename || warn "cant read file '$filename'"; - $content=join "",(<$FILE>); + $content = join "", (<$FILE>); close $FILE; return $content; } } -sub save_file{ - my $filename=$_[0]; - my $content=$_[1]; +sub save_file { + my $filename = $_[0]; + my $content = $_[1]; #check if directory is writeable - if ($filename=~/^(.+?)\/[^\/]+$/){ - my $dir=$1; - unless (-w $dir){ + if ( $filename =~ /^(.+?)\/[^\/]+$/ ) { + my $dir = $1; + unless ( -w $dir ) { print STDERR `pwd;id -a;`; print STDERR "log::save_file : cannot write to directory ($dir)\n"; return; } } - open my $FILE, ">:utf8", $filename || warn("cant write file '$filename'"); - if (defined $FILE){ - print $FILE $content."\n"; - close $FILE; + open my $FILE, ">:utf8", $filename || warn("cant write file '$filename'"); + if ( defined $FILE ) { + print $FILE $content . "\n"; + close $FILE; } } -sub append_file{ - my $filename =$_[0]; - my $content =$_[1]; +sub append_file { + my $filename = $_[0]; + my $content = $_[1]; - unless ( (defined $filename) && ($filename ne'') && (-e $filename) ){ - print STDERR "cannot append, file '$filename' does not exist\n"; - return; - } + unless ( ( defined $filename ) && ( $filename ne '' ) && ( -e $filename ) ) { + print STDERR "cannot append, file '$filename' does not exist\n"; + return; + } - if (defined $content){ - open my $FILE, ">>:utf8", $filename or warn("cant write file '$filename'"); - print $FILE $content."\n"; - close $FILE; + if ( defined $content ) { + open my $FILE, ">>:utf8", $filename or warn("cant write file '$filename'"); + print $FILE $content . "\n"; + close $FILE; } } - #do not delete last line! -1; +return 1; diff --git a/lib/calcms/mail.pm b/lib/calcms/mail.pm index fe44a04..e945285 100644 --- a/lib/calcms/mail.pm +++ b/lib/calcms/mail.pm @@ -1,26 +1,26 @@ package mail; -use MIME::Lite; +use MIME::Lite(); sub send { - my $mail = shift; + my $mail = shift; - my $msg = MIME::Lite->new( - 'From' => $mail->{'From'}, - 'To' => $mail->{'To'}, - 'Cc' => $mail->{'Cc'}, - 'Reply-To' => $mail->{'Reply-To'}, - 'Subject' => $mail->{'Subject'}, - 'Data' => $mail->{'Data'}, - ); + my $msg = MIME::Lite->new( + 'From' => $mail->{'From'}, + 'To' => $mail->{'To'}, + 'Cc' => $mail->{'Cc'}, + 'Reply-To' => $mail->{'Reply-To'}, + 'Subject' => $mail->{'Subject'}, + 'Data' => $mail->{'Data'}, + ); - #print '
';
-    $msg->print( \*STDERR );
-    #print '
'; + #print '
';
+	$msg->print( \*STDERR );
 
-    $msg->send;
+	#print '
'; + + $msg->send; } - # do not delete next line return 1; diff --git a/lib/calcms/markup.pm b/lib/calcms/markup.pm index 48f3f09..59dc5cf 100644 --- a/lib/calcms/markup.pm +++ b/lib/calcms/markup.pm @@ -1,10 +1,10 @@ use warnings "all"; use strict; use Data::Dumper; -use Text::WikiCreole; +use Text::WikiCreole(); -use HTML::Parse; -use HTML::FormatText; +use HTML::Parse(); +use HTML::FormatText(); use log; @@ -14,454 +14,477 @@ use Encode; require Exporter; our @ISA = qw(Exporter); -#our @EXPORT = qw(all); -our @EXPORT_OK = qw(fix_line_ends html_to_creole creole_to_html creole_to_plain plain_to_ical ical_to_plain ical_to_xml html_to_plain fix_utf8 uri_encode compress base26); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); -sub fix_line_ends{ - my $s=shift; - $s=~s/\r?\n|\r/\n/g; - return $s; +#our @EXPORT = qw(all); +our @EXPORT_OK = + qw(fix_line_ends html_to_creole creole_to_html creole_to_plain plain_to_ical ical_to_plain ical_to_xml html_to_plain fix_utf8 uri_encode compress base26); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); + +sub fix_line_ends { + my $s = shift; + $s =~ s/\r?\n|\r/\n/g; + return $s; } # convert 1..26 to a..z, 27 to aa, inspired by ConvertAA -sub base26{ - my $num = shift ; - return '' if $num <= 0; +sub base26 { + my $num = shift; + return '' if $num <= 0; - my $s = ""; - while($num){ - $s= chr (--$num % 26 + ord "a").$s; - $num = int $num/26; + my $s = ""; + while ($num) { + $s = chr( --$num % 26 + ord "a" ) . $s; + $num = int $num / 26; } - return $s; + return $s; } -sub html_to_creole{ - my $s=shift; +sub html_to_creole { + my $s = shift; #remove elements -# $s=~s/[\r\f\n]+/\n/gi; -# $s=~s/<\/p.*?>//gi; -# $s=~s/<\/br.*?>//gi; - $s=~s/\<\!\-\-[\s\S]*?\-\-\>//gi; - $s=~s/.*?<\/script.*?>//gi; -# $s=~s/<\/?span.*?>//gi; -# $s=~s/<\/?font.*?>//gi; -# $s=~s/<\/?meta.*?>//gi; -# $s=~s/<\/?title.*?>//gi; -# $s=~s/<\/?style.*?>//gi; -# $s=~s/<\/?col.*?>//gi; -# $s=~s/<\/?thead.*?>//gi; -# $s=~s/<\/?tbody.*?>//gi; - $s=~s/<\/?form.*?>//gi; - $s=~s/<\/?select.*?>//gi; - $s=~s/<\/?option.*?//gi; - $s=~s/<\/?input.*?>//gi; -# $s=~s/<\/?button.*?>//gi; -# $s=~s/<\/?textarea.*?>//gi; - $s=~s/<\/?script.*?>//gi; + # $s=~s/[\r\f\n]+/\n/gi; + # $s=~s/<\/p.*?>//gi; + # $s=~s/<\/br.*?>//gi; + $s =~ s/\<\!\-\-[\s\S]*?\-\-\>//gi; + $s =~ s/.*?<\/script.*?>//gi; + + # $s=~s/<\/?span.*?>//gi; + # $s=~s/<\/?font.*?>//gi; + # $s=~s/<\/?meta.*?>//gi; + # $s=~s/<\/?title.*?>//gi; + # $s=~s/<\/?style.*?>//gi; + # $s=~s/<\/?col.*?>//gi; + # $s=~s/<\/?thead.*?>//gi; + # $s=~s/<\/?tbody.*?>//gi; + $s =~ s/<\/?form.*?>//gi; + $s =~ s/<\/?select.*?>//gi; + $s =~ s/<\/?option.*?//gi; + $s =~ s/<\/?input.*?>//gi; + + # $s=~s/<\/?button.*?>//gi; + # $s=~s/<\/?textarea.*?>//gi; + $s =~ s/<\/?script.*?>//gi; #table elements -# $s=~s/\s*<\/?td.*?>//gi; -# $s=~s/\s*<\/?th.*?>//gi; + # $s=~s/\s*<\/?td.*?>//gi; + # $s=~s/\s*<\/?th.*?>//gi; #remove line breaks - $s=~s/[\r\n]+/ /gi; + $s =~ s/[\r\n]+/ /gi; + + #formats + $s =~ s//{{$1\|}}/gi; + $s =~ s//{{$2\|$1}}/gi; + $s =~ s/]*?title="(.*?)".*?>/{{$1\|$2}}/gi; + $s =~ s/]*?src="(.*?)".*?>/{{$2\|$1}}/gi; + $s =~ s/<\/?img.*?>//gi; - #formats - $s=~s//{{$1\|}}/gi; - $s=~s//{{$2\|$1}}/gi; - $s=~s/]*?title="(.*?)".*?>/{{$1\|$2}}/gi; - $s=~s/]*?src="(.*?)".*?>/{{$2\|$1}}/gi; - $s=~s/<\/?img.*?>//gi; #replace line breaks from images - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; - $s=~s/(.*?)<\/i>/\/\/$1\/\//gi; - $s=~s/<\/?i.*?>//gi; - $s=~s/(.*?)<\/b>/\*\*$1\*\*/gi; -# $s=~s/<\/?b.*?>//gi; + $s =~ s/(.*?)<\/i>/\/\/$1\/\//gi; + $s =~ s/<\/?i.*?>//gi; + $s =~ s/(.*?)<\/b>/\*\*$1\*\*/gi; + + # $s=~s/<\/?b.*?>//gi; + + $s =~ s/(.*?)<\/strong>/\*\*$1\*\*/gi; + $s =~ s/(.*?)<\/em>/\/\/$1\/\//gi; + $s =~ s/((\W+|\w+)*?)<\/blockquote>/{{{$1}}}/gi; + + # $s=~s/((\W+|\w+)*?)<\/a>/\[\[$1\|$2\]\]$3/gi; + $s =~ s/(.*?)(\s*)<\/a>/\[\[$1\|$2\]\]$3/gi; + $s =~ s///gi; - $s=~s/(.*?)<\/strong>/\*\*$1\*\*/gi; - $s=~s/(.*?)<\/em>/\/\/$1\/\//gi; - $s=~s/((\W+|\w+)*?)<\/blockquote>/{{{$1}}}/gi; -# $s=~s/((\W+|\w+)*?)<\/a>/\[\[$1\|$2\]\]$3/gi; - $s=~s/(.*?)(\s*)<\/a>/\[\[$1\|$2\]\]$3/gi; - $s=~s///gi; #replace line breaks from links - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; -# print STDERR Dumper($s) if ($s=~//== /gi; - $s=~s/\s*/=== /gi; - $s=~s/\s*/==== /gi; - $s=~s/\s*/===== /gi; -# $s=~s/\s*<\/h\d.*?>/\n/gi; + $s =~ s/\s*/== /gi; + $s =~ s/\s*/=== /gi; + $s =~ s/\s*/==== /gi; + $s =~ s/\s*/===== /gi; -# $s=~s//\\\\
/gi; -# $s=~s/\s*//gi; -# $s=~s/\s*<\/div>/\n/gi; + # $s=~s/\s*<\/h\d.*?>/\n/gi; -# $s=~s//\n/gi; -# $s=~s/<\/table>/\n/gi; -# $s=~s/\s*//gi; -# $s=~s/\s*<\/tr>//gi; + # $s=~s//\\\\
/gi; + # $s=~s/\s*//gi; + # $s=~s/\s*<\/div>/\n/gi; -# $s=~s/\s*/\n/gi; -# $s=~s/\s*<\/ol>/\n/gi; -# $s=~s/\s*/\n/gi; -# $s=~s/\s*<\/ul>/\n/gi; -# $s=~s/\s*/\n\* /gi; -# $s=~s/\s*<\/li>//gi; + # $s=~s//\n/gi; + # $s=~s/<\/table>/\n/gi; + # $s=~s/\s*//gi; + # $s=~s/\s*<\/tr>//gi; -# $s=~s/\s*\s*/\n\n/gi; -# $s=~s/\s*\s*/\n /gi; + # $s=~s/\s*/\n/gi; + # $s=~s/\s*<\/ol>/\n/gi; + # $s=~s/\s*/\n/gi; + # $s=~s/\s*<\/ul>/\n/gi; + # $s=~s/\s*/\n\* /gi; + # $s=~s/\s*<\/li>//gi; + + # $s=~s/\s*\s*/\n\n/gi; + # $s=~s/\s*\s*/\n /gi; + + my $tree = HTML::Parse::parse_html( '' . $s . '' ); + my $formatter = HTML::FormatText->new( leftmargin => 0, rightmargin => 2000 ); + $s = $formatter->format($tree); - my $tree=HTML::Parse::parse_html(''.$s.''); - my $formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 2000); - $s= $formatter->format($tree); #use Data::Dumper; print "asd:"; - $s=~s/\//gi; + + # $s=~s/<\/a>//gi; return $s; } -sub creole_to_html{ - my $s=$_[0]||''; - +sub creole_to_html { + my $s = $_[0] || ''; + #$s=~s/\n\#\n/\n/g; - #fix_line_ends($s); - $s=~s/(.*?)(\s*)<\/a>/\[\[$1\|$2\]\]$3/gi; - $s=~s///gi; + #fix_line_ends($s); + $s =~ s/(.*?)(\s*)<\/a>/\[\[$1\|$2\]\]$3/gi; + $s =~ s///gi; - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; - $s=~s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; - $s=~s/^\s+//g; - $s=~s/\s+$//g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/(\[\[[^\]\n]*?)\n([^\]]*?\]\])/$1$2/g; + $s =~ s/^\s+//g; + $s =~ s/\s+$//g; - $s=Text::WikiCreole::creole_parse($s)||''; -# $s=~s/

/\n/gi; -# $s=~s/\{\{\{((\W+|\w+)+?)\}\}\}/

$1<\/blockquote>/g; -# $s=~s/\{\{(.+?)\|(.*?)\}\}//g; -# $s=~s/\[\[(.+?)\|(.*?)\]\]/$2<\/a>/g; -# $s=~s/([^\:])\/\/(.*?[^\:])\/\//$1$2<\/em> /g; -# $s=~s/\n=== (.*?)\n/

$1<\/h3>\n/g; -# $s=~s/\n== (.*?)\n/

$1<\/h2>\n/g; + $s = Text::WikiCreole::creole_parse($s) || ''; + + # $s=~s/

/\n/gi; + # $s=~s/\{\{\{((\W+|\w+)+?)\}\}\}/

$1<\/blockquote>/g; + # $s=~s/\{\{(.+?)\|(.*?)\}\}//g; + # $s=~s/\[\[(.+?)\|(.*?)\]\]/$2<\/a>/g; + # $s=~s/([^\:])\/\/(.*?[^\:])\/\//$1$2<\/em> /g; + # $s=~s/\n=== (.*?)\n/

$1<\/h3>\n/g; + # $s=~s/\n== (.*?)\n/

$1<\/h2>\n/g; #replace line breaks from images - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; - $s=~s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + $s =~ s/(\{\{[^\}\n]*?)\n([^\}\n]*?\}\})/$1$2/g; + #replace line breaks from links -# $s=~s/\n= (.*?)\n/

$1<\/h1>\n/g; -# $s=~s/\*\*(.*?)\*\*/$1<\/strong> /g; -# $s=~s/^== (.*?)\n/

$1<\/h2>\n/g; -# $s=~s/\n\* (.*?)([\r\n]+)/
  • $1<\/li>\n/g; -# $s=~s/\n\- (.*?)\n/$1<\/lo>\n/g; -# $s=~s/\n\n/

    /gi; -# $s=~s/\n+/
    /gi; -# $s=~s/\$1<\/h1>\n/g; + # $s=~s/\*\*(.*?)\*\*/$1<\/strong> /g; + # $s=~s/^== (.*?)\n/

    $1<\/h2>\n/g; + # $s=~s/\n\* (.*?)([\r\n]+)/
  • $1<\/li>\n/g; + # $s=~s/\n\- (.*?)\n/$1<\/lo>\n/g; + # $s=~s/\n\n/

    /gi; + # $s=~s/\n+/
    /gi; + # $s=~s/\\s*

    |<$elem>|g; - $s=~s|

    \s*||g; - } + #remove whitespaces and break lines at start or end of elements + for my $elem ( 'p', 'li' ) { + $s =~ s|<$elem>\s*

    |<$elem>|g; + $s =~ s|

    \s*||g; + } return $s; } -sub creole_to_plain{ - my $s=shift; - - $s=~s/\/\n/gi; - $s=~s/\{\{\{((\W+|\w+)+?)\}\}\}/

    $1<\/blockquote>/g; - $s=~s/\{\{(.+?)\|(.*?)\}\}//g; - $s=~s/\[\[(.+?)\|(.*?)\]\]/$2/g; - $s=~s/\/\/([^\/\/]*?)\/\//$1<\/em> /g; - $s=~s/\n=== (.*?)\n/\n

    $1<\/h3>\n/g; - $s=~s/\n== (.*?)\n/\n

    $1<\/h2>\n/g; - $s=~s/\*\*(.*?)\*\*/$1<\/strong> /g; - $s=~s/^== (.*?)\n/

    $1<\/h2>\n/g; - $s=~s/\n\* (.*?)\n/\n
  • $1<\/li>\n/g; - $s=~s/\n\* (.*?)\n/\n
  • $1<\/li>\n/g; - $s=~s/\n\- (.*?)\n/\n$1<\/lo>\n/g; - $s=~s/\n\- (.*?)\n/\n$1<\/lo>\n/g; - $s=~s/\n\n/\n

    /gi; - $s=~s/\n/\n/gi; +sub creole_to_plain { + my $s = shift; + + $s =~ s/\/\n/gi; + $s =~ s/\{\{\{((\W+|\w+)+?)\}\}\}/

    $1<\/blockquote>/g; + $s =~ s/\{\{(.+?)\|(.*?)\}\}//g; + $s =~ s/\[\[(.+?)\|(.*?)\]\]/$2/g; + $s =~ s/\/\/([^\/\/]*?)\/\//$1<\/em> /g; + $s =~ s/\n=== (.*?)\n/\n

    $1<\/h3>\n/g; + $s =~ s/\n== (.*?)\n/\n

    $1<\/h2>\n/g; + $s =~ s/\*\*(.*?)\*\*/$1<\/strong> /g; + $s =~ s/^== (.*?)\n/

    $1<\/h2>\n/g; + $s =~ s/\n\* (.*?)\n/\n
  • $1<\/li>\n/g; + $s =~ s/\n\* (.*?)\n/\n
  • $1<\/li>\n/g; + $s =~ s/\n\- (.*?)\n/\n$1<\/lo>\n/g; + $s =~ s/\n\- (.*?)\n/\n$1<\/lo>\n/g; + $s =~ s/\n\n/\n

    /gi; + $s =~ s/\n/\n/gi; return $s; } -sub html_to_plain{ - my $s=shift; - return '' unless (defined $s); - my $tree=HTML::Parse::parse_html(''.$s.''); - my $formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 2000); - $s= $formatter->format($tree); +sub html_to_plain { + my $s = shift; + return '' unless ( defined $s ); + my $tree = HTML::Parse::parse_html( '' . $s . '' ); + my $formatter = HTML::FormatText->new( leftmargin => 0, rightmargin => 2000 ); + $s = $formatter->format($tree); return $s; } -sub ical_to_plain{ - return '' unless defined ($_[0]); - $_[0]=~s/\\n/\n/gi; - $_[0]=~s/ /\t/gi; - $_[0]=~s/\\\./\./gi; - $_[0]=~s/\\\,/\,/gi; - $_[0]=~s/\\\\/\\/gi; +sub ical_to_plain { + return '' unless defined( $_[0] ); + $_[0] =~ s/\\n/\n/gi; + $_[0] =~ s/ /\t/gi; + $_[0] =~ s/\\\./\./gi; + $_[0] =~ s/\\\,/\,/gi; + $_[0] =~ s/\\\\/\\/gi; return $_[0]; } -sub plain_to_ical{ - return '' unless defined ($_[0]); +sub plain_to_ical { + return '' unless defined( $_[0] ); + #remove images + links - $_[0]=~s/\[\[.+?\|(.+?)\]\]/$1/g; - $_[0]=~s/\{\{.+?\}\}//g; - $_[0]=~s/^\s+//g; - $_[0]=~s/\\/\\\\/gi; - $_[0]=~s/\,/\\\,/gi; -# $_[0]=~s/\./\\\./gi; - $_[0]=~s/[\r\n]/\\n/gi; - $_[0]=~s/\t/ /gi; + $_[0] =~ s/\[\[.+?\|(.+?)\]\]/$1/g; + $_[0] =~ s/\{\{.+?\}\}//g; + $_[0] =~ s/^\s+//g; + $_[0] =~ s/\\/\\\\/gi; + $_[0] =~ s/\,/\\\,/gi; + + # $_[0]=~s/\./\\\./gi; + $_[0] =~ s/[\r\n]/\\n/gi; + $_[0] =~ s/\t/ /gi; return $_[0]; } -sub plain_to_xml{ - return '' unless defined ($_[0]); - $_[0]=~s/\n\={1,6} (.*?)\s+/\n\[\[$1\]\]\n/gi; - #remove images + links - $_[0]=~s/\[\[.+?\|(.+?)\]\]/$1/g; - $_[0]=~s/\{\{.+?\}\}//g; - return encode_xml_element($_[0]); +sub plain_to_xml { + return '' unless defined( $_[0] ); + $_[0] =~ s/\n\={1,6} (.*?)\s+/\n\[\[$1\]\]\n/gi; -# $_[0]=~s/\ä/ä/gi; -# $_[0]=~s/\ö/ö/gi; -# $_[0]=~s/\ü/ü/gi; -# $_[0]=~s/\Ä/Ä/gi; -# $_[0]=~s/\Ö/Ö/gi; -# $_[0]=~s/\Ü/Ü/gi; -# $_[0]=~s/\ß/ß/gi; -# $_[0]=~s/\&/\&/gi; -# $_[0]=~s/\/\>/gi; -# $_[0]=~s/\"/\"/gi; + #remove images + links + $_[0] =~ s/\[\[.+?\|(.+?)\]\]/$1/g; + $_[0] =~ s/\{\{.+?\}\}//g; + return encode_xml_element( $_[0] ); + + # $_[0]=~s/\ä/ä/gi; + # $_[0]=~s/\ö/ö/gi; + # $_[0]=~s/\ü/ü/gi; + # $_[0]=~s/\Ä/Ä/gi; + # $_[0]=~s/\Ö/Ö/gi; + # $_[0]=~s/\Ü/Ü/gi; + # $_[0]=~s/\ß/ß/gi; + # $_[0]=~s/\&/\&/gi; + # $_[0]=~s/\/\>/gi; + # $_[0]=~s/\"/\"/gi; ## $_[0]=~s/\n//gi; ## $_[0]=~s/\&amp;/\&/gi; ## $_[0]=~s/\&amp;/+/gi; ## $_[0]=~s/\&/+/gi; ## $_[0]=~s/\&/+/gi; -# return $_[0]; + # return $_[0]; } -sub fix_utf8{ +sub fix_utf8 { $_[0] = decode( 'cp1252', $_[0] ); return $_[0]; } -sub uri_encode{ - $_[0] =~s/([^a-zA-Z0-9_\.\-])/sprintf("%%%02lx",ord($1))/esg; +sub uri_encode { + $_[0] =~ s/([^a-zA-Z0-9_\.\-])/sprintf("%%%02lx",ord($1))/esg; return $_[0]; } -sub compress{ - my $header=''; +sub compress { + my $header = ''; + + if ( $_[0] =~ /(Content\-type\:[^\n]+[\n]+)/ ) { + $header = $1; + } else { - if($_[0]=~/(Content\-type\:[^\n]+[\n]+)/){ - $header=$1; - }else{ #return; } - my $start=index($_[0],$header); - return if ($start<0); + my $start = index( $_[0], $header ); + return if ( $start < 0 ); - my $header_length=length($header); - $header =substr($_[0],0,$start+$header_length); -# print $header."\n"; + my $header_length = length($header); + $header = substr( $_[0], 0, $start + $header_length ); - my $content=substr($_[0],$start+$header_length); + # print $header."\n"; -# #remove multiple line breaks - $content=~s/[\r\n]+[\s]*[\r\n]+/\n/g; + my $content = substr( $_[0], $start + $header_length ); + + # #remove multiple line breaks + $content =~ s/[\r\n]+[\s]*[\r\n]+/\n/g; #remove leading whitespaces - $content=~s/[\r\n]+[\s]+/\n/g; + $content =~ s/[\r\n]+[\s]+/\n/g; #remove tailing whitespaces - $content=~s/[\t ]*[\r\n]+/\n/g; + $content =~ s/[\t ]*[\r\n]+/\n/g; #remove whitespaces inside tags - $content=~s/([\n]\<[^\n]+)[\r\n]+/$1 /g; - $content=~s/\"\s+\>/\"\>/g; + $content =~ s/([\n]\<[^\n]+)[\r\n]+/$1 /g; + $content =~ s/\"\s+\>/\"\>/g; #get closing tags closer - $content=~s/[\r\n]+(\<[\/\!])/$1/g; - $content=~s/(\>)[\r\n]+([^\<])/$1$2/g; + $content =~ s/[\r\n]+(\<[\/\!])/$1/g; + $content =~ s/(\>)[\r\n]+([^\<])/$1$2/g; #remove leading whitespaces #$content=~s/[\r\n]+([\d\S])/$1/g; #remove empty lines - $content=~s/[\n\r]+/\n/g; + $content =~ s/[\n\r]+/\n/g; #remove whitespaces between tags - $content=~s/\>[\t ]+\<(^\/T)/\>\<$1/g; + $content =~ s/\>[\t ]+\<(^\/T)/\>\<$1/g; #multiple whitespaces - $content=~s/[\t ]+/ /g; + $content =~ s/[\t ]+/ /g; #restore content-type line break - $_[0]=$header.$content; + $_[0] = $header . $content; + #$_[0]=~s/HTTP_CONTENT_TYPE/\n\n/; -# return $_[0]; + # return $_[0]; } #from XML::RSS.pm my %entity = ( - nbsp => " ", - iexcl => "¡", - cent => "¢", - pound => "£", - curren => "¤", - yen => "¥", - brvbar => "¦", - sect => "§", - uml => "¨", - copy => "©", - ordf => "ª", - laquo => "«", - not => "¬", - shy => "­", - reg => "®", - macr => "¯", - deg => "°", - plusmn => "±", - sup2 => "²", - sup3 => "³", - acute => "´", - micro => "µ", - para => "¶", - middot => "·", - cedil => "¸", - sup1 => "¹", - ordm => "º", - raquo => "»", - frac14 => "¼", - frac12 => "½", - frac34 => "¾", - iquest => "¿", - Agrave => "À", - Aacute => "Á", - Acirc => "Â", - Atilde => "Ã", - Auml => "Ä", - Aring => "Å", - AElig => "Æ", - Ccedil => "Ç", - Egrave => "È", - Eacute => "É", - Ecirc => "Ê", - Euml => "Ë", - Igrave => "Ì", - Iacute => "Í", - Icirc => "Î", - Iuml => "Ï", - ETH => "Ð", - Ntilde => "Ñ", - Ograve => "Ò", - Oacute => "Ó", - Ocirc => "Ô", - Otilde => "Õ", - Ouml => "Ö", - times => "×", - Oslash => "Ø", - Ugrave => "Ù", - Uacute => "Ú", - Ucirc => "Û", - Uuml => "Ü", - Yacute => "Ý", - THORN => "Þ", - szlig => "ß", - agrave => "à", - aacute => "á", - acirc => "â", - atilde => "ã", - auml => "ä", - aring => "å", - aelig => "æ", - ccedil => "ç", - egrave => "è", - eacute => "é", - ecirc => "ê", - euml => "ë", - igrave => "ì", - iacute => "í", - icirc => "î", - iuml => "ï", - eth => "ð", - ntilde => "ñ", - ograve => "ò", - oacute => "ó", - ocirc => "ô", - otilde => "õ", - ouml => "ö", - divide => "÷", - oslash => "ø", - ugrave => "ù", - uacute => "ú", - ucirc => "û", - uuml => "ü", - yacute => "ý", - thorn => "þ", - yuml => "ÿ", - ); + nbsp => " ", + iexcl => "¡", + cent => "¢", + pound => "£", + curren => "¤", + yen => "¥", + brvbar => "¦", + sect => "§", + uml => "¨", + copy => "©", + ordf => "ª", + laquo => "«", + not => "¬", + shy => "­", + reg => "®", + macr => "¯", + deg => "°", + plusmn => "±", + sup2 => "²", + sup3 => "³", + acute => "´", + micro => "µ", + para => "¶", + middot => "·", + cedil => "¸", + sup1 => "¹", + ordm => "º", + raquo => "»", + frac14 => "¼", + frac12 => "½", + frac34 => "¾", + iquest => "¿", + Agrave => "À", + Aacute => "Á", + Acirc => "Â", + Atilde => "Ã", + Auml => "Ä", + Aring => "Å", + AElig => "Æ", + Ccedil => "Ç", + Egrave => "È", + Eacute => "É", + Ecirc => "Ê", + Euml => "Ë", + Igrave => "Ì", + Iacute => "Í", + Icirc => "Î", + Iuml => "Ï", + ETH => "Ð", + Ntilde => "Ñ", + Ograve => "Ò", + Oacute => "Ó", + Ocirc => "Ô", + Otilde => "Õ", + Ouml => "Ö", + times => "×", + Oslash => "Ø", + Ugrave => "Ù", + Uacute => "Ú", + Ucirc => "Û", + Uuml => "Ü", + Yacute => "Ý", + THORN => "Þ", + szlig => "ß", + agrave => "à", + aacute => "á", + acirc => "â", + atilde => "ã", + auml => "ä", + aring => "å", + aelig => "æ", + ccedil => "ç", + egrave => "è", + eacute => "é", + ecirc => "ê", + euml => "ë", + igrave => "ì", + iacute => "í", + icirc => "î", + iuml => "ï", + eth => "ð", + ntilde => "ñ", + ograve => "ò", + oacute => "ó", + ocirc => "ô", + otilde => "õ", + ouml => "ö", + divide => "÷", + oslash => "ø", + ugrave => "ù", + uacute => "ú", + ucirc => "û", + uuml => "ü", + yacute => "ý", + thorn => "þ", + yuml => "ÿ", +); -my $entities = join('|', keys %entity); +my $entities = join( '|', keys %entity ); sub encode_xml_element { my $text = shift; - + my $encoded_text = ''; - + while ( $text =~ s/(.*?)(\<\!\[CDATA\[.*?\]\]\>)//s ) { $encoded_text .= encode_xml_element_text($1) . $2; } @@ -472,7 +495,7 @@ sub encode_xml_element { sub encode_xml_element_text { my $text = shift; - + $text =~ s/&(?!(#[0-9]+|#x[0-9a-fA-F]+|\w+);)/&/g; $text =~ s/&($entities);/$entity{$1}/g; $text =~ s/\ [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get isJson); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -my $isJson=0; +my $isJson = 0; -sub isJson{ - return $isJson; +sub isJson { + return $isJson; } -sub get{ - #get the Apache2::RequestRec - my $r=shift; +sub get { + + #get the Apache2::RequestRec + my $r = shift; my $tmp_dir = '/var/tmp/'; - my $upload_limit = 1000*1024; + my $upload_limit = 1000 * 1024; my $cgi = undef; my $status = undef; my $params = {}; - $isJson=0; + $isJson = 0; + + if ( defined $r ) { - if (defined $r){ #print STDERR "Apache2::Request\n"; - #get Apache2::Request - my $req = Apache2::Request->new($r, POST_MAX => $upload_limit, TEMP_DIR => $tmp_dir); + #get Apache2::Request + my $req = Apache2::Request->new( $r, POST_MAX => $upload_limit, TEMP_DIR => $tmp_dir ); - for my $key ($req->param){ - $params->{scalar($key)}=scalar($req->param($key)); - } + for my $key ( $req->param ) { + $params->{ scalar($key) } = scalar( $req->param($key) ); + } #copy params to hash #my $body=$req->body(); @@ -46,38 +48,36 @@ sub get{ # $params->{scalar($key)}=scalar($req->param($key)); # } #} - $status = $req->parse; #parse - }else{ + $status = $req->parse; #parse + } else { + #print STDERR "CGI\n"; - $CGI::POST_MAX = $upload_limit; - $CGI::TMPDIRECTORY=$tmp_dir; - $cgi=new CGI(); - $status=$cgi->cgi_error()||$status; - my %params=$cgi->Vars(); - $params=\%params; + $CGI::POST_MAX = $upload_limit; + $CGI::TMPDIRECTORY = $tmp_dir; + $cgi = new CGI(); + $status = $cgi->cgi_error() || $status; + my %params = $cgi->Vars(); + $params = \%params; } - $cgi=new CGI() unless(defined $cgi); + $cgi = new CGI() unless ( defined $cgi ); - $isJson=1 if (defined $params->{json}) && ($params->{json}eq'1'); + $isJson = 1 if ( defined $params->{json} ) && ( $params->{json} eq '1' ); - if(defined $status){ - $status='' if ($status eq 'Success'); - $status='' if ($status eq 'Missing input data'); - print $cgi->header.$status."\n" if($status ne''); - } - #print STDERR Dumper($params); - #print $cgi->header.Dumper($params).$status; + if ( defined $status ) { + $status = '' if ( $status eq 'Success' ); + $status = '' if ( $status eq 'Missing input data' ); + print $cgi->header . $status . "\n" if ( $status ne '' ); + } - return ($cgi, $params, $status); + #print STDERR Dumper($params); + #print $cgi->header.Dumper($params).$status; + + return ( $cgi, $params, $status ); } -sub debug{ - my $message=shift; - #print "$msg
    \n" if ($debug>0); - #print "$message
    \n"; - #log::print($message."\n") if ($debug); +sub debug { + my $message = shift; } - #do not delete last line! 1; diff --git a/lib/calcms/password_requests.pm b/lib/calcms/password_requests.pm index 7640287..ba0c15c 100644 --- a/lib/calcms/password_requests.pm +++ b/lib/calcms/password_requests.pm @@ -1,16 +1,16 @@ -package password_requests; +package password_requests; use warnings "all"; use strict; use Data::Dumper; -use Session::Token; +use Session::Token(); # table: calcms_password_requests require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get insert delete get_columns); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get insert delete get_columns); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); use mail; use uac; @@ -19,157 +19,159 @@ use auth; sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_password_requests'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_password_requests' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if (defined $condition->{user}){ - push @conditions, 'user=?'; + if ( defined $condition->{user} ) { + push @conditions, 'user=?'; push @bind_values, $condition->{user}; } - if (defined $condition->{token}){ - push @conditions, 'token=?'; + if ( defined $condition->{token} ) { + push @conditions, 'token=?'; push @bind_values, $condition->{token}; } - return undef if (scalar @conditions) == 0; + return undef if ( scalar @conditions ) == 0; - my $conditions=" where ".join(" and ",@conditions); - my $query=qq{ + my $conditions = " where " . join( " and ", @conditions ); + my $query = qq{ select * from calcms_password_requests $conditions }; + #print $query."\n".Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); + my $entries = db::get( $dbh, $query, \@bind_values ); return $entries->[0] || undef; } -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; return unless defined $entry->{user}; - my $dbh=db::connect($config); - my $values = join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values = map {$entry->{$_}} (keys %$entry); + my $dbh = db::connect($config); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); push @bind_values, $entry->{token}; - my $query=qq{ + my $query = qq{ update calcms_password_requests set $values where token=? }; - print STDERR $query . Dumper(\@bind_values); - db::put($dbh, $query, \@bind_values); + print STDERR $query . Dumper( \@bind_values ); + db::put( $dbh, $query, \@bind_values ); } - -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{user}; - my $dbh=db::connect($config); - print STDERR 'insert ' . Dumper($entry); - return db::insert($dbh, 'calcms_password_requests', $entry); + my $dbh = db::connect($config); + print STDERR 'insert ' . Dumper($entry); + return db::insert( $dbh, 'calcms_password_requests', $entry ); } -sub delete{ - my $config=shift; - my $condition=shift; - - my @conditions=(); - my @bind_values=(); +sub delete { + my $config = shift; + my $condition = shift; - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'user=?'; + my @conditions = (); + my @bind_values = (); + + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'user=?'; push @bind_values, $condition->{user}; } - if ((defined $condition->{token}) && ($condition->{token} ne '')){ - push @conditions, 'token=?'; + if ( ( defined $condition->{token} ) && ( $condition->{token} ne '' ) ) { + push @conditions, 'token=?'; push @bind_values, $condition->{token}; } - return if (scalar @conditions)==0; - my $conditions=" where ".join(" and ", @conditions); + return if ( scalar @conditions ) == 0; + my $conditions = " where " . join( " and ", @conditions ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ delete from calcms_password_requests $conditions }; - print STDERR "$query " . Dumper(\@bind_values); - db::put($dbh, $query, \@bind_values); + print STDERR "$query " . Dumper( \@bind_values ); + db::put( $dbh, $query, \@bind_values ); } -sub sendToken{ - my $config=shift; - my $entry=shift; +sub sendToken { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{user}; - my $user = uac::get_user($config, $entry->{user}); - return undef unless defined $user; + my $user = uac::get_user( $config, $entry->{user} ); + return undef unless defined $user; - # check age of existing entry - my $oldEntry = password_requests::get($config, { user => $entry->{user} } ); - if (defined $oldEntry){ - my $createdAt = $oldEntry->{created_at}; - print STDERR Dumper($oldEntry); - print STDERR "createdAt=$createdAt\n"; - my $age = time() - time::datetime_to_time($createdAt); - if ($age < 60) { - print STDERR "too many requests"; - return undef; - } - print STDERR "age=$age\n"; - } - password_requests::delete($config, $entry); + # check age of existing entry + my $oldEntry = password_requests::get( $config, { user => $entry->{user} } ); + if ( defined $oldEntry ) { + my $createdAt = $oldEntry->{created_at}; + print STDERR Dumper($oldEntry); + print STDERR "createdAt=$createdAt\n"; + my $age = time() - time::datetime_to_time($createdAt); + if ( $age < 60 ) { + print STDERR "too many requests"; + return undef; + } + print STDERR "age=$age\n"; + } + password_requests::delete( $config, $entry ); - $entry->{max_attempts} = 0; - $entry->{token} = Session::Token->new->get; + $entry->{max_attempts} = 0; + $entry->{token} = Session::Token->new->get; - my $baseUrl = $config->{locations}->{source_base_url} . $config->{locations}->{editor_base_url}; - my $url = $baseUrl."/requestPassword.cgi?token=" . $entry->{token}; - my $content = "Hi,$user->{full_name}\n\n"; - $content .= "Someone just tried to reset your password for $baseUrl.\n\n"; - $content .= "If you like to set a new password, please follow the link below\n"; - $content .= $url."\n\n"; - $content .= "If you do not like to set a new password, please ignore this mail.\n"; + my $baseUrl = $config->{locations}->{source_base_url} . $config->{locations}->{editor_base_url}; + my $url = $baseUrl . "/requestPassword.cgi?token=" . $entry->{token}; + my $content = "Hi,$user->{full_name}\n\n"; + $content .= "Someone just tried to reset your password for $baseUrl.\n\n"; + $content .= "If you like to set a new password, please follow the link below\n"; + $content .= $url . "\n\n"; + $content .= "If you do not like to set a new password, please ignore this mail.\n"; - mail::send({ - "To" => $user->{email}, - "Subject" => "request to change password for $baseUrl", - "Data" => $content - }); + mail::send( + { + "To" => $user->{email}, + "Subject" => "request to change password for $baseUrl", + "Data" => $content + } + ); - password_requests::insert($config, $entry); + password_requests::insert( $config, $entry ); } sub changePassword { @@ -195,7 +197,7 @@ sub changePassword { } if ( $params->{user_password} ne $params->{user_password2} ) { - return { error => 'entered passwords do not match'}; + return { error => 'entered passwords do not match' }; } #print STDERR "error at changing password:" . Dumper($errors); @@ -207,11 +209,11 @@ sub changePassword { #print '

    '.Dumper($user).'
    '; $config->{access}->{write} = 1; - print STDERR "update user".Dumper($user); + print STDERR "update user" . Dumper($user); my $result = uac::update_user( $config, $user ); - print STDERR "result:".Dumper($result); + print STDERR "result:" . Dumper($result); $config->{access}->{write} = 0; - return { success => "password changed for $userName" }; + return { success => "password changed for $userName" }; } sub checkPassword { @@ -243,9 +245,8 @@ sub checkPassword { return 1; } - -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/playout.pm b/lib/calcms/playout.pm index 521ee7a..bdc53ba 100644 --- a/lib/calcms/playout.pm +++ b/lib/calcms/playout.pm @@ -1,95 +1,95 @@ #!/bin/perl - -package playout; + +package playout; use warnings "all"; use strict; use Data::Dumper; -use Date::Calc; -use db; -use time; -use series_events; +use Date::Calc(); +use db(); +use time(); +use series_events(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get sync); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get sync); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_playout'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_playout' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -# get playout entries -sub get{ - my $config=shift; - my $condition=shift; +# get playout entries +sub get { + my $config = shift; + my $condition = shift; - return undef unless defined $condition->{studio_id}; + return undef unless defined $condition->{studio_id}; - my $date_range_include=0; - $date_range_include=1 if (defined $condition->{date_range_include}) && ($condition->{date_range_include}==1); + my $date_range_include = 0; + $date_range_include = 1 if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{start_at}) && ($condition->{start_at} ne '')){ - push @conditions, 'start=?'; + if ( ( defined $condition->{start_at} ) && ( $condition->{start_at} ne '' ) ) { + push @conditions, 'start=?'; push @bind_values, $condition->{start_at}; } - if ((defined $condition->{from}) && ($condition->{from} ne '')){ - if ($date_range_include==1){ - push @conditions, 'end_date>=?'; - push @bind_values, $condition->{from}; - }else{ - push @conditions, 'start_date>=?'; - push @bind_values, $condition->{from}; - } + if ( ( defined $condition->{from} ) && ( $condition->{from} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'end_date>=?'; + push @bind_values, $condition->{from}; + } else { + push @conditions, 'start_date>=?'; + push @bind_values, $condition->{from}; + } } - if ((defined $condition->{till}) && ($condition->{till} ne '')){ - if ($date_range_include==1){ - push @conditions, 'start_date<=?'; - push @bind_values, $condition->{till}; - }else{ - push @conditions, 'end_date<=?'; - push @bind_values, $condition->{till}; - } + if ( ( defined $condition->{till} ) && ( $condition->{till} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'start_date<=?'; + push @bind_values, $condition->{till}; + } else { + push @conditions, 'end_date<=?'; + push @bind_values, $condition->{till}; + } } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); - - my $order='start'; - $order=$condition->{order} if (defined $condition->{order} ) && ($condition->{order} ne''); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $order = 'start'; + $order = $condition->{order} if ( defined $condition->{order} ) && ( $condition->{order} ne '' ); + + my $query = qq{ select date(start) start_date ,date(end) end_date ,dayname(start) weekday @@ -122,43 +122,42 @@ sub get{ $limit }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); + #print STDERR Dumper($query).Dumper(\@bind_values); + my $entries = db::get( $dbh, $query, \@bind_values ); return $entries; } # update playout entries for a given date span # insert, update and delete entries -sub sync{ - my $config=shift; - my $options=shift; +sub sync { + my $config = shift; + my $options = shift; - #print STDERR Dumper($config); - print STDERR "upload ".Dumper($options); - return undef unless defined $options->{project_id} ; - return undef unless defined $options->{studio_id} ; - return undef unless defined $options->{from} ; - return undef unless defined $options->{till} ; - return undef unless defined $options->{events} ; + #print STDERR Dumper($config); + print STDERR "upload " . Dumper($options); + return undef unless defined $options->{project_id}; + return undef unless defined $options->{studio_id}; + return undef unless defined $options->{from}; + return undef unless defined $options->{till}; + return undef unless defined $options->{events}; - my $project_id = $options->{project_id}; - my $studio_id = $options->{studio_id}; - my $updates = $options->{events}; - #print STDERR "sync\n"; - #print STDERR Dumper($updates); - - # get new entries by date - my $update_by_date={}; - for my $entry (@$updates){ - $update_by_date->{$entry->{start}}=$entry; + my $project_id = $options->{project_id}; + my $studio_id = $options->{studio_id}; + my $updates = $options->{events}; + + #print STDERR "sync\n"; + #print STDERR Dumper($updates); + + # get new entries by date + my $update_by_date = {}; + for my $entry (@$updates) { + $update_by_date->{ $entry->{start} } = $entry; } - # get database entries - my $bind_values=[ - $options->{project_id}, $options->{studio_id}, $options->{from}, $options->{till} - ]; - - my $query=qq{ + # get database entries + my $bind_values = [ $options->{project_id}, $options->{studio_id}, $options->{from}, $options->{till} ]; + + my $query = qq{ select * from calcms_playout where project_id=? @@ -168,110 +167,131 @@ sub sync{ order by start }; print STDERR "from:$options->{from} till:$options->{till}\n"; - my $dbh=db::connect($config); - my $entries=db::get($dbh, $query, $bind_values); - #print STDERR "entries:".Dumper($entries); + my $dbh = db::connect($config); + my $entries = db::get( $dbh, $query, $bind_values ); - # get database entries by date - my $entries_by_date={}; - for my $entry (@$entries){ - # store entry by date - my $start=$entry->{start}; - $entries_by_date->{$start}=$entry; + #print STDERR "entries:".Dumper($entries); - # remove outdated entries - unless (defined $update_by_date->{$start}){ - print STDERR "delete:".Dumper($entry); - playout::delete($config, $dbh, $entry); - my $result=series_events::set_playout_status($config, { - project_id => $project_id, - studio_id => $studio_id, - start => $entry->{start}, - playout => 0, - }); - print STDERR "delete playout_status result=".$result."\n"; - next; - } - # update existing entries - if (defined $update_by_date->{$start}){ - next if has_changed($entry, $update_by_date->{$start})==0; - print STDERR "update:".Dumper($entry); - playout::update($config, $dbh, $entry, $update_by_date->{$start}); - my $result=series_events::set_playout_status($config, { - project_id => $project_id, - studio_id => $studio_id, - start => $entry->{start}, - playout => 1, - }); - print STDERR "update playout_status result=".$result."\n"; - next; - } - } + # get database entries by date + my $entries_by_date = {}; + for my $entry (@$entries) { - # insert new entries - for my $entry (@$updates){ - my $start=$entry->{start}; - unless (defined $entries_by_date->{$start}){ - $entry->{project_id} = $project_id; - $entry->{studio_id} = $studio_id; - print STDERR "insert:".Dumper($entry); - playout::insert($config, $dbh, $entry); - my $result=series_events::set_playout_status($config, { - project_id => $project_id, - studio_id => $studio_id, - start => $entry->{start}, - playout => 1, - }); - print STDERR "insert playout_status result=".$result."\n"; - } + # store entry by date + my $start = $entry->{start}; + $entries_by_date->{$start} = $entry; + + # remove outdated entries + unless ( defined $update_by_date->{$start} ) { + print STDERR "delete:" . Dumper($entry); + playout::delete( $config, $dbh, $entry ); + my $result = series_events::set_playout_status( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + start => $entry->{start}, + playout => 0, + } + ); + print STDERR "delete playout_status result=" . $result . "\n"; + next; + } + + # update existing entries + if ( defined $update_by_date->{$start} ) { + next if has_changed( $entry, $update_by_date->{$start} ) == 0; + print STDERR "update:" . Dumper($entry); + playout::update( $config, $dbh, $entry, $update_by_date->{$start} ); + my $result = series_events::set_playout_status( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + start => $entry->{start}, + playout => 1, + } + ); + print STDERR "update playout_status result=" . $result . "\n"; + next; + } + } + + # insert new entries + for my $entry (@$updates) { + my $start = $entry->{start}; + unless ( defined $entries_by_date->{$start} ) { + $entry->{project_id} = $project_id; + $entry->{studio_id} = $studio_id; + print STDERR "insert:" . Dumper($entry); + playout::insert( $config, $dbh, $entry ); + my $result = series_events::set_playout_status( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + start => $entry->{start}, + playout => 1, + } + ); + print STDERR "insert playout_status result=" . $result . "\n"; + } } return 1; } -sub has_changed{ - my $oldEntry=shift; - my $newEntry=shift; +sub has_changed { + my $oldEntry = shift; + my $newEntry = shift; - my $update=0; - for my $key ('duration', 'errors', 'file', 'channels', 'format', 'format_version', 'format_profile', 'format_settings', 'stream_size', 'bitrate', 'bitrate_mode', 'sampling_rate', 'writing_library', 'modified_at'){ - return 1 if ($oldEntry->{$key}||'') ne ($newEntry->{$key}||''); - } - return 0; + my $update = 0; + for my $key ( + 'duration', 'errors', 'file', 'channels', 'format', 'format_version', + 'format_profile', 'format_settings', 'stream_size', 'bitrate', 'bitrate_mode', 'sampling_rate', + 'writing_library', 'modified_at' + ) + { + return 1 if ( $oldEntry->{$key} || '' ) ne ( $newEntry->{$key} || '' ); + } + return 0; } # update playout entry if differs to old values -sub update{ - my $config=shift; - my $dbh=shift; - my $oldEntry=shift; - my $newEntry=shift; - - return if has_changed($oldEntry, $newEntry)==0; - - for my $key ('duration', 'errors', 'file', 'channels', 'format', 'format_version', 'format_profile', 'format_settings', 'stream_size', 'bitrate', 'bitrate_mode', 'sampling_rate', 'writing_library', 'rms_left', 'rms_right', 'rms_image', 'replay_gain', 'modified_at'){ - if (($oldEntry->{$key}||'') ne ($newEntry->{$key}||'')){ - $oldEntry->{$key}=$newEntry->{$key}; - } - } +sub update { + my $config = shift; + my $dbh = shift; + my $oldEntry = shift; + my $newEntry = shift; - my $entry=$oldEntry; - print STDERR "update:".Dumper($entry); + return if has_changed( $oldEntry, $newEntry ) == 0; - my $day_start=$config->{date}->{day_starting_hour}; - $entry->{end} = playout::getEnd($entry->{start}, $entry->{duration}); - $entry->{start_date} = time::add_hours_to_datetime($entry->{start}, -$day_start); - $entry->{end_date} = time::add_hours_to_datetime($entry->{end}, -$day_start); + for my $key ( + 'duration', 'errors', 'file', 'channels', 'format', 'format_version', + 'format_profile', 'format_settings', 'stream_size', 'bitrate', 'bitrate_mode', 'sampling_rate', + 'writing_library', 'rms_left', 'rms_right', 'rms_image', 'replay_gain', 'modified_at' + ) + { + if ( ( $oldEntry->{$key} || '' ) ne ( $newEntry->{$key} || '' ) ) { + $oldEntry->{$key} = $newEntry->{$key}; + } + } - my $bind_values=[ - $entry->{end}, $entry->{duration}, $entry->{file}, $entry->{errors}, - $entry->{start_date}, $entry->{end_date}, - $entry->{channels}, $entry->{'format'}, $entry->{format_version}, $entry->{format_profile}, $entry->{format_settings}, $entry->{stream_size}, - $entry->{bitrate}, $entry->{bitrate_mode}, $entry->{sampling_rate}, $entry->{writing_library}, - $entry->{rms_left}, $entry->{rms_right}, $entry->{rms_image}, - $entry->{replay_gain}, $entry->{modified_at}, - $entry->{project_id}, $entry->{studio_id}, $entry->{start} - ]; - my $query=qq{ + my $entry = $oldEntry; + print STDERR "update:" . Dumper($entry); + + my $day_start = $config->{date}->{day_starting_hour}; + $entry->{end} = playout::getEnd( $entry->{start}, $entry->{duration} ); + $entry->{start_date} = time::add_hours_to_datetime( $entry->{start}, -$day_start ); + $entry->{end_date} = time::add_hours_to_datetime( $entry->{end}, -$day_start ); + + my $bind_values = [ + $entry->{end}, $entry->{duration}, $entry->{file}, $entry->{errors}, + $entry->{start_date}, $entry->{end_date}, $entry->{channels}, $entry->{'format'}, + $entry->{format_version}, $entry->{format_profile}, $entry->{format_settings}, $entry->{stream_size}, + $entry->{bitrate}, $entry->{bitrate_mode}, $entry->{sampling_rate}, $entry->{writing_library}, + $entry->{rms_left}, $entry->{rms_right}, $entry->{rms_image}, $entry->{replay_gain}, + $entry->{modified_at}, $entry->{project_id}, $entry->{studio_id}, $entry->{start} + ]; + my $query = qq{ update calcms_playout set end=?, duration=?, file=?, errors=?, start_date=?, end_date=?, @@ -281,14 +301,14 @@ sub update{ replay_gain=?, modified_at=? where project_id=? and studio_id=? and start=? }; - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } # insert playout entry -sub insert{ - my $config=shift; - my $dbh=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $dbh = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; @@ -296,77 +316,84 @@ sub insert{ return undef unless defined $entry->{duration}; return undef unless defined $entry->{file}; - my $day_start=$config->{date}->{day_starting_hour}; - $entry->{end} = playout::getEnd($entry->{start}, $entry->{duration}); - $entry->{start_date} = time::add_hours_to_datetime($entry->{start}, -$day_start); - $entry->{end_date} = time::add_hours_to_datetime($entry->{end}, -$day_start); - - return db::insert($dbh, 'calcms_playout', { - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - start => $entry->{start}, - end => $entry->{end}, - start_date => $entry->{start_date}, - end_date => $entry->{end_date}, - duration => $entry->{duration}, - rms_left => $entry->{rms_left}, - rms_right => $entry->{rms_right}, - rms_image => $entry->{rms_image}, - replay_gain => $entry->{replay_gain}, - file => $entry->{file}, - errors => $entry->{errors}, - channels => $entry->{channels}, - "format" => $entry->{"format"}, - format_version => $entry->{format_version}, - format_profile => $entry->{format_profile}, - format_settings => $entry->{format_settings}, - stream_size => $entry->{stream_size}, - bitrate => $entry->{bitrate}, - bitrate_mode => $entry->{bitrate_mode}, - sampling_rate => $entry->{sampling_rate}, - writing_library => $entry->{writing_library}, - modified_at => $entry->{modified_at} - }); + my $day_start = $config->{date}->{day_starting_hour}; + $entry->{end} = playout::getEnd( $entry->{start}, $entry->{duration} ); + $entry->{start_date} = time::add_hours_to_datetime( $entry->{start}, -$day_start ); + $entry->{end_date} = time::add_hours_to_datetime( $entry->{end}, -$day_start ); + + return db::insert( + $dbh, + 'calcms_playout', + { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + start => $entry->{start}, + end => $entry->{end}, + start_date => $entry->{start_date}, + end_date => $entry->{end_date}, + duration => $entry->{duration}, + rms_left => $entry->{rms_left}, + rms_right => $entry->{rms_right}, + rms_image => $entry->{rms_image}, + replay_gain => $entry->{replay_gain}, + file => $entry->{file}, + errors => $entry->{errors}, + channels => $entry->{channels}, + "format" => $entry->{"format"}, + format_version => $entry->{format_version}, + format_profile => $entry->{format_profile}, + format_settings => $entry->{format_settings}, + stream_size => $entry->{stream_size}, + bitrate => $entry->{bitrate}, + bitrate_mode => $entry->{bitrate_mode}, + sampling_rate => $entry->{sampling_rate}, + writing_library => $entry->{writing_library}, + modified_at => $entry->{modified_at} + } + ); } # delete playout entry -sub delete{ - my $config=shift; - my $dbh=shift; - my $entry=shift; - +sub delete { + my $config = shift; + my $dbh = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{start}; - my $query=qq{ + my $query = qq{ delete from calcms_playout where project_id=? and studio_id=? and start=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{start}]; - return db::put($dbh, $query, $bind_values); + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{start} ]; + return db::put( $dbh, $query, $bind_values ); } -sub getEnd{ - my $start=shift; - my $duration=shift; - # calculate end from start + duration - my @start = @{time::datetime_to_array($start)}; - next unless @start>=6; - #print STDERR Dumper(\@start); +sub getEnd { + my $start = shift; + my $duration = shift; + + # calculate end from start + duration + my @start = @{ time::datetime_to_array($start) }; + next unless @start >= 6; + + #print STDERR Dumper(\@start); my @end_datetime = Date::Calc::Add_Delta_DHMS( - $start[0], $start[1], $start[2], # start date - $start[3], $start[4], $start[5], # start time - 0, 0, 0, int($duration) # delta days, hours, minutes, seconds + $start[0], $start[1], $start[2], # start date + $start[3], $start[4], $start[5], # start time + 0, 0, 0, int($duration) # delta days, hours, minutes, seconds ); - #print STDERR Dumper(\@end_datetime); - return time::array_to_datetime(\@end_datetime); + + #print STDERR Dumper(\@end_datetime); + return time::array_to_datetime( \@end_datetime ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/project.pm b/lib/calcms/project.pm index 777eb06..8ba35c2 100644 --- a/lib/calcms/project.pm +++ b/lib/calcms/project.pm @@ -1,6 +1,6 @@ #!/bin/perl - -package project; + +package project; use warnings "all"; use strict; @@ -8,487 +8,491 @@ use strict; use Data::Dumper; use Date::Calc; -use config; -use log; -use template; -use images; +use config(); +use log(); +use template(); +use images(); require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - check get_columns get insert delete get_date_range - get_studios assign_studio unassign_studio is_studio_assigned get_studio_assignments - get_series_ids assign_series unassign_series is_series_assigned get_series_assignments - get_with_dates get_sorted + check get_columns get insert delete get_date_range + get_studios assign_studio unassign_studio is_studio_assigned get_studio_assignments + get_series_ids assign_series unassign_series is_series_assigned get_series_assignments + get_with_dates get_sorted ); + #TODO: globally replace get_studios by get_studio_assignments -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; # get project columns -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_projects'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_projects' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } # get projects -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{name}) && ($condition->{name} ne '')){ - push @conditions, 'name=?'; + if ( ( defined $condition->{name} ) && ( $condition->{name} ne '' ) ) { + push @conditions, 'name=?'; push @bind_values, $condition->{name}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_projects $conditions order by start_date $limit }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $projects=db::get($dbh, $query, \@bind_values); + #print STDERR Dumper($query).Dumper(\@bind_values); + + my $projects = db::get( $dbh, $query, \@bind_values ); return $projects; } # requires at least project_id -sub getImageById{ +sub getImageById { my $config = shift; - my $conditions = shift; - - return undef unless defined $conditions->{project_id}; - my $projects=project::get($config, $conditions); - return undef if scalar(@$projects) != 1; - return $projects->[0]->{image}; + my $conditions = shift; + + return undef unless defined $conditions->{project_id}; + my $projects = project::get( $config, $conditions ); + return undef if scalar(@$projects) != 1; + return $projects->[0]->{image}; } -sub get_date_range{ - my $config=shift; - my $query=qq{ +sub get_date_range { + my $config = shift; + my $query = qq{ select min(start_date) start_date, max(end_date) end_date from calcms_projects }; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $projects=db::get($dbh, $query); + my $projects = db::get( $dbh, $query ); return $projects->[0]; } # insert project -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; - my $columns=get_columns($config); - my $project={}; - for my $column (keys %$columns){ - $project->{$column} = $entry->{$column} if defined $entry->{$column}; - } + my $columns = get_columns($config); + my $project = {}; + for my $column ( keys %$columns ) { + $project->{$column} = $entry->{$column} if defined $entry->{$column}; + } - $project->{image} = images::normalizeName( $project->{image} ) if defined $project->{image}; + $project->{image} = images::normalizeName( $project->{image} ) if defined $project->{image}; - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_projects', $project); - return $id; + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_projects', $project ); + return $id; } # update project -sub update{ - my $config=shift; - my $project=shift; +sub update { + my $config = shift; + my $project = shift; - my $columns=project::get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column}=$project->{$column} if defined $project->{$column}; - } + my $columns = project::get_columns($config); + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $project->{$column} if defined $project->{$column}; + } - $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; + $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); - push @bind_values,$entry->{project_id}; + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); + push @bind_values, $entry->{project_id}; - my $query=qq{ + my $query = qq{ update calcms_projects set $values where project_id=? }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $dbh=db::connect($config); - db::put($dbh, $query, \@bind_values); + + #print STDERR Dumper($query).Dumper(\@bind_values); + my $dbh = db::connect($config); + db::put( $dbh, $query, \@bind_values ); } # delete project -sub delete{ - my $config=shift; - my $entry=shift; - - my $dbh=db::connect($config); - db::put($dbh, 'delete from calcms_projects where project_id=?', [$entry->{project_id}]); +sub delete { + my $config = shift; + my $entry = shift; + + my $dbh = db::connect($config); + db::put( $dbh, 'delete from calcms_projects where project_id=?', [ $entry->{project_id} ] ); } - # get studios of a project -sub get_studios{ - my $config=shift; - my $options=shift; - - return undef unless defined $options->{project_id}; - my $project_id=$options->{project_id}; +sub get_studios { + my $config = shift; + my $options = shift; - my $query=qq{ + return undef unless defined $options->{project_id}; + my $project_id = $options->{project_id}; + + my $query = qq{ select * from calcms_project_studios where project_id=? }; - my $dbh=db::connect($config); - my $project_studios=db::get($dbh,$query,[$project_id]); + my $dbh = db::connect($config); + my $project_studios = db::get( $dbh, $query, [$project_id] ); return $project_studios; } -sub get_studio_assignments{ - my $config=shift; - my $options=shift; +sub get_studio_assignments { + my $config = shift; + my $options = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $options->{project_id}) && ($options->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $options->{project_id} ) && ( $options->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $options->{project_id}; } - if ((defined $options->{studio_id}) && ($options->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $options->{studio_id} ) && ( $options->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $options->{studio_id}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_project_studios $conditions }; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, \@bind_values ); return $results; } # is studio assigned to project -sub is_studio_assigned{ - my $config=shift; - my $entry=shift; +sub is_studio_assigned { + my $config = shift; + my $entry = shift; return 0 unless defined $entry->{project_id}; return 0 unless defined $entry->{studio_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; - my $query=qq{ + my $query = qq{ select * from calcms_project_studios where project_id=? and studio_id=? }; - my $bind_values=[$project_id, $studio_id]; + my $bind_values = [ $project_id, $studio_id ]; - my $dbh=db::connect($config); - my $project_studios=db::get($dbh, $query, $bind_values); - return 1 if @$project_studios==1; + my $dbh = db::connect($config); + my $project_studios = db::get( $dbh, $query, $bind_values ); + return 1 if @$project_studios == 1; return 0; } # assign studio to project -sub assign_studio{ - my $config=shift; - my $entry=shift; +sub assign_studio { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; - if (is_studio_assigned($entry)){ - print STDERR "studio $entry->{studio_id} already assigned to project $entry->{project_id}\n"; - return 1; - } - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_project_studios', $entry); - return $id; + if ( is_studio_assigned($entry) ) { + print STDERR "studio $entry->{studio_id} already assigned to project $entry->{project_id}\n"; + return 1; + } + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_project_studios', $entry ); + return $id; } # unassign studio from project -sub unassign_studio{ - my $config=shift; - my $entry=shift; - +sub unassign_studio { + my $config = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; - my $sql='delete from calcms_project_studios where project_id=? and studio_id=?'; - my $bind_values=[$project_id, $studio_id]; - my $dbh=db::connect($config); - return db::put($dbh, $sql, $bind_values); + my $sql = 'delete from calcms_project_studios where project_id=? and studio_id=?'; + my $bind_values = [ $project_id, $studio_id ]; + my $dbh = db::connect($config); + return db::put( $dbh, $sql, $bind_values ); } # get series by project and studio -sub get_series{ - my $config=shift; - my $options=shift; - +sub get_series { + my $config = shift; + my $options = shift; + return undef unless defined $options->{project_id}; return undef unless defined $options->{studio_id}; - my $project_id=$options->{project_id}; - my $studio_id= $options->{studio_id}; + my $project_id = $options->{project_id}; + my $studio_id = $options->{studio_id}; - my $query=qq{ + my $query = qq{ select * from calcms_project_series where project_id=? and studio_id=? }; - my $bind_values=[$project_id, $studio_id]; - my $dbh=db::connect($config); - my $project_series=db::get($dbh, $query, $bind_values); + my $bind_values = [ $project_id, $studio_id ]; + my $dbh = db::connect($config); + my $project_series = db::get( $dbh, $query, $bind_values ); return $project_series; } -sub get_series_assignments{ - my $config=shift; - my $options=shift; +sub get_series_assignments { + my $config = shift; + my $options = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $options->{project_id}) && ($options->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $options->{project_id} ) && ( $options->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $options->{project_id}; } - if ((defined $options->{studio_id}) && ($options->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $options->{studio_id} ) && ( $options->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $options->{studio_id}; } - if ((defined $options->{series_id}) && ($options->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $options->{series_id} ) && ( $options->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $options->{series_id}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_project_series $conditions }; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, \@bind_values ); return $results; } # is series assigned to project and studio -sub is_series_assigned{ - my $config=shift; - my $entry=shift; +sub is_series_assigned { + my $config = shift; + my $entry = shift; return 0 unless defined $entry->{project_id}; return 0 unless defined $entry->{studio_id}; return 0 unless defined $entry->{series_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; - my $series_id= $entry->{series_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; + my $series_id = $entry->{series_id}; - my $query=qq{ + my $query = qq{ select * from calcms_project_series where project_id=? and studio_id=? and series_id=? }; - my $bind_values=[$project_id, $studio_id, $series_id]; + my $bind_values = [ $project_id, $studio_id, $series_id ]; - my $dbh=db::connect($config); - my $project_series=db::get($dbh,$query, $bind_values); - return 1 if @$project_series==1; + my $dbh = db::connect($config); + my $project_series = db::get( $dbh, $query, $bind_values ); + return 1 if @$project_series == 1; return 0; } # assign series to project and studio -sub assign_series{ - my $config=shift; - my $entry=shift; +sub assign_series { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; - my $series_id= $entry->{series_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; + my $series_id = $entry->{series_id}; - if (is_series_assigned($entry)){ - print STDERR "series $series_id already assigned to project $project_id and studio $studio_id\n"; - return return undef; - } - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_project_series', $entry); + if ( is_series_assigned($entry) ) { + print STDERR "series $series_id already assigned to project $project_id and studio $studio_id\n"; + return return undef; + } + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_project_series', $entry ); print STDERR "assigned series $series_id to project $project_id and studio $studio_id\n"; - return $id; + return $id; } # unassign series from project # TODO: remove series _single_ if no event is assigned to -sub unassign_series{ - my $config=shift; - my $entry=shift; - +sub unassign_series { + my $config = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; - my $project_id=$entry->{project_id}; - my $studio_id= $entry->{studio_id}; - my $series_id= $entry->{series_id}; + my $project_id = $entry->{project_id}; + my $studio_id = $entry->{studio_id}; + my $series_id = $entry->{series_id}; - my $sql='delete from calcms_project_series where project_id=? and studio_id=? and series_id=?'; - my $bind_values=[$project_id, $studio_id, $series_id]; - my $dbh=db::connect($config); - return db::put($dbh, $sql, $bind_values); + my $sql = 'delete from calcms_project_series where project_id=? and studio_id=? and series_id=?'; + my $bind_values = [ $project_id, $studio_id, $series_id ]; + my $dbh = db::connect($config); + return db::put( $dbh, $sql, $bind_values ); } -sub get_with_dates{ - my $config=shift; - my $options=shift; +sub get_with_dates { + my $config = shift; + my $options = shift; - my $language = $config->{date}->{language} || 'en'; - my $projects=project::get($config, {}); + my $language = $config->{date}->{language} || 'en'; + my $projects = project::get( $config, {} ); - foreach my $project (reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects) ){ - $project->{months} = get_months($config, $project, $language); - $project->{user} = $ENV{REMOTE_USER}; - $project->{current} = 1 if ($project->{name} eq $config::config->{project}); - } + foreach my $project ( reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects) ) { + $project->{months} = get_months( $config, $project, $language ); + $project->{user} = $ENV{REMOTE_USER}; + $project->{current} = 1 if ( $project->{name} eq $config::config->{project} ); + } - return $projects; + return $projects; } #TODO: add config -sub get_sorted{ - my $config=shift; - my $projects=project::get($config, {}); - my @projects=reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects); +sub get_sorted { + my $config = shift; + my $projects = project::get( $config, {} ); + my @projects = reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects); - unshift @projects,{ - name => 'all', - title => 'alle', - priority => '0', - start_date => $projects[-1]->{start_date}, - end_date => $projects[0]->{end_date}, - }; - return \@projects; + unshift @projects, + { + name => 'all', + title => 'alle', + priority => '0', + start_date => $projects[-1]->{start_date}, + end_date => $projects[0]->{end_date}, + }; + return \@projects; } # internal -sub get_months{ - my $config=shift; - my $project = shift; - my $language = shift || $config->{date}->{language} || 'en'; +sub get_months { + my $config = shift; + my $project = shift; + my $language = shift || $config->{date}->{language} || 'en'; - my $start = $project->{start_date}; - my $end = $project->{end_date}; + my $start = $project->{start_date}; + my $end = $project->{end_date}; - (my $start_year,my $start_month,my $start_day)=split(/\-/,$start); - my $last_day = Date::Calc::Days_in_Month($start_year,$start_month); - $start_day = 1 if ($start_day<1); - $start_day = $last_day if ($start_day gt $last_day); + ( my $start_year, my $start_month, my $start_day ) = split( /\-/, $start ); + my $last_day = Date::Calc::Days_in_Month( $start_year, $start_month ); + $start_day = 1 if ( $start_day < 1 ); + $start_day = $last_day if ( $start_day gt $last_day ); - (my $end_year,my $end_month,my $end_day)=split(/\-/,$end); - $last_day = Date::Calc::Days_in_Month($end_year,$end_month); - $end_day = 1 if ($end_day<1); - $end_day = $last_day if ($end_day gt $last_day); + ( my $end_year, my $end_month, my $end_day ) = split( /\-/, $end ); + $last_day = Date::Calc::Days_in_Month( $end_year, $end_month ); + $end_day = 1 if ( $end_day < 1 ); + $end_day = $last_day if ( $end_day gt $last_day ); - my @months=(); - for my $year($start_year..$end_year){ - my $m1=1; - my $m2=12; - $m1=$start_month if $year eq $start_year; - $m2=$end_month if $year eq $end_year; + my @months = (); + for my $year ( $start_year .. $end_year ) { + my $m1 = 1; + my $m2 = 12; + $m1 = $start_month if $year eq $start_year; + $m2 = $end_month if $year eq $end_year; - for my $month($m1..$m2){ - my $d1=1; - my $d2=Date::Calc::Days_in_Month($year,$month); - $d1=$start_day if $month eq $start_month; - $d2=$end_day if $month eq $end_month; - push @months,{ - start => time::array_to_date($year,$month,$d1), - end => time::array_to_date($year,$month,$d2), - year => $year, - month => $month, - month_name => $time::names->{$language}->{months_abbr}->[$month-1], - title => $project->{title}, - user => $ENV{REMOTE_USER} - }; - } - } - @months=reverse @months; - return \@months; + for my $month ( $m1 .. $m2 ) { + my $d1 = 1; + my $d2 = Date::Calc::Days_in_Month( $year, $month ); + $d1 = $start_day if $month eq $start_month; + $d2 = $end_day if $month eq $end_month; + push @months, + { + start => time::array_to_date( $year, $month, $d1 ), + end => time::array_to_date( $year, $month, $d2 ), + year => $year, + month => $month, + month_name => $time::names->{$language}->{months_abbr}->[ $month - 1 ], + title => $project->{title}, + user => $ENV{REMOTE_USER} + }; + } + } + @months = reverse @months; + return \@months; } # check project_id -sub check{ - my $config=shift; - my $options=shift; - return "missing project_id at checking project" unless defined $options->{project_id}; - return "Please select a project" if($options->{project_id}eq'-1'); - return "Please select a project" if($options->{project_id}eq''); - my $projects=project::get($config, { project_id=>$options->{project_id} } ); - return "Sorry. unknown project" unless defined $projects; - return 1; +sub check { + my $config = shift; + my $options = shift; + return "missing project_id at checking project" unless defined $options->{project_id}; + return "Please select a project" if ( $options->{project_id} eq '-1' ); + return "Please select a project" if ( $options->{project_id} eq '' ); + my $projects = project::get( $config, { project_id => $options->{project_id} } ); + return "Sorry. unknown project" unless defined $projects; + return 1; } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/projects.pm b/lib/calcms/projects.pm index 6630b3e..4c94729 100644 --- a/lib/calcms/projects.pm +++ b/lib/calcms/projects.pm @@ -4,5 +4,6 @@ use strict; package projects; print STDERR "projects.pm is not used anymore!\n"; + #do not delete last line! 1; diff --git a/lib/calcms/roles.pm b/lib/calcms/roles.pm index 2ee7a48..6a78471 100644 --- a/lib/calcms/roles.pm +++ b/lib/calcms/roles.pm @@ -1,145 +1,145 @@ package roles; -use Apache2::Reload; +use Apache2::Reload(); require Exporter; -my @ISA = qw(Exporter); -my @EXPORT_OK = qw($roles get_user get_user_permissions get_template_parameters); -my %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +my @ISA = qw(Exporter); +my @EXPORT_OK = qw($roles get_user get_user_permissions get_template_parameters); +my %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -our $roles={ +our $roles = { 'admin' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 1, - read_event_all => 1, - create_event => 1, - delete_event => 1, - update_comment => 1, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 1, - delete_image_own => 1, - delete_image_all => 1, - sync_own => 1, - sync_all => 1, - sync_select_range => 1, - upload_playlist => 1, + access_events => 1, + access_images => 1, + access_comments => 1, + access_sync => 1, + access_system => 1, + read_event_all => 1, + create_event => 1, + delete_event => 1, + update_comment => 1, + create_image => 1, + read_image_own => 1, + read_image_all => 1, + update_image_own => 1, + update_image_all => 1, + delete_image_own => 1, + delete_image_all => 1, + sync_own => 1, + sync_all => 1, + sync_select_range => 1, + upload_playlist => 1, }, 'dev' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 0, - read_event_all => 1, - create_event => 1, - delete_event => 1, - update_comment => 1, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 1, - delete_image_own => 1, - delete_image_all => 1, - sync_own => 0, - sync_all => 1, - sync_select_range => 1, - upload_playlist => 1, + access_events => 1, + access_images => 1, + access_comments => 1, + access_sync => 1, + access_system => 0, + read_event_all => 1, + create_event => 1, + delete_event => 1, + update_comment => 1, + create_image => 1, + read_image_own => 1, + read_image_all => 1, + update_image_own => 1, + update_image_all => 1, + delete_image_own => 1, + delete_image_all => 1, + sync_own => 0, + sync_all => 1, + sync_select_range => 1, + upload_playlist => 1, }, 'editor' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 0, - read_event_all => 0, - create_event => 1, - delete_event => 0, - update_comment => 0, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 0, - delete_image_own => 1, - delete_image_all => 0, - sync_own => 1, - sync_all => 0, - sync_select_range => 0, - upload_playlist => 1, + access_events => 1, + access_images => 1, + access_comments => 1, + access_sync => 1, + access_system => 0, + read_event_all => 0, + create_event => 1, + delete_event => 0, + update_comment => 0, + create_image => 1, + read_image_own => 1, + read_image_all => 1, + update_image_own => 1, + update_image_all => 0, + delete_image_own => 1, + delete_image_all => 0, + sync_own => 1, + sync_all => 0, + sync_select_range => 0, + upload_playlist => 1, }, 'nobody' => { - access_events => 0, - access_images => 0, - access_comments => 0, - access_sync => 0, - access_system => 0, - read_event_all => 0, - create_event => 0, - delete_event => 0, - update_comment => 0, - create_image => 0, - read_image_own => 0, - read_image_all => 0, - update_image_own => 0, - update_image_all => 0, - delete_image_own => 0, - delete_image_all => 0, - sync_own => 0, - sync_all => 0, - sync_select_range => 0, - upload_playlist => 0, + access_events => 0, + access_images => 0, + access_comments => 0, + access_sync => 0, + access_system => 0, + read_event_all => 0, + create_event => 0, + delete_event => 0, + update_comment => 0, + create_image => 0, + read_image_own => 0, + read_image_all => 0, + update_image_own => 0, + update_image_all => 0, + delete_image_own => 0, + delete_image_all => 0, + sync_own => 0, + sync_all => 0, + sync_select_range => 0, + upload_playlist => 0, } }; -sub get_user{ - my $user= $ENV{REMOTE_USER}; - my $users=$config::config->{users}; - return $user if (defined $users->{$user}); +sub get_user { + my $user = $ENV{REMOTE_USER}; + my $users = $config::config->{users}; + return $user if ( defined $users->{$user} ); return 'nobody'; } -sub get_user_permissions{ - my $user= $ENV{REMOTE_USER}||''; - return $roles::roles->{nobody} unless ($user=~/\S/); - my $users=$config::config->{users}; - if (defined $users->{$user}){ - my $role=$users->{$user}; - if (defined $roles::roles->{$role}){ +sub get_user_permissions { + my $user = $ENV{REMOTE_USER} || ''; + return $roles::roles->{nobody} unless ( $user =~ /\S/ ); + my $users = $config::config->{users}; + if ( defined $users->{$user} ) { + my $role = $users->{$user}; + if ( defined $roles::roles->{$role} ) { return $roles::roles->{$role}; } } return $roles::roles->{nobody}; } -sub get_user_jobs{ - my $user= $ENV{REMOTE_USER}||''; - return [] unless($user =~/\S/); - my $result=[]; - my $jobs=$config::config->{jobs}->{job}; - - for my $job (@$jobs){ - for my $job_user (split /\,/,$job->{users}){ - push @$result,$job if ($user eq $job_user); +sub get_user_jobs { + my $user = $ENV{REMOTE_USER} || ''; + return [] unless ( $user =~ /\S/ ); + my $result = []; + my $jobs = $config::config->{jobs}->{job}; + + for my $job (@$jobs) { + for my $job_user ( split /\,/, $job->{users} ) { + push @$result, $job if ( $user eq $job_user ); } } return $result; } -sub get_jobs{ +sub get_jobs { return $config::config->{jobs}->{job}; } -sub get_template_parameters{ - my $user_permissions=shift; - $user_permissions=roles::get_user_permissions() unless(defined $user_permissions); - my @user_permissions=(); - for my $usecase (keys %$user_permissions){ - push @user_permissions, $usecase if ($user_permissions->{$usecase}eq'1'); +sub get_template_parameters { + my $user_permissions = shift; + $user_permissions = roles::get_user_permissions() unless ( defined $user_permissions ); + my @user_permissions = (); + for my $usecase ( keys %$user_permissions ) { + push @user_permissions, $usecase if ( $user_permissions->{$usecase} eq '1' ); } return \@user_permissions; } diff --git a/lib/calcms/series.pm b/lib/calcms/series.pm index 38eea9c..316b81e 100644 --- a/lib/calcms/series.pm +++ b/lib/calcms/series.pm @@ -1,29 +1,28 @@ -package series; +package series; use warnings "all"; use strict; use Data::Dumper; -use events; -use images; - +use events(); +use images(); require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - get_columns get insert update delete - get_users add_user remove_user - get_events get_event get_next_episode search_events - get_event_age is_event_older_than_days - get_images - assign_event unassign_event - add_series_ids_to_events set_event_ids - can_user_update_events can_user_create_events - is_series_assigned_to_user is_event_assigned_to_user - update_recurring_events update_recurring_event + get_columns get insert update delete + get_users add_user remove_user + get_events get_event get_next_episode search_events + get_event_age is_event_older_than_days + get_images + assign_event unassign_event + add_series_ids_to_events set_event_ids + can_user_update_events can_user_create_events + is_series_assigned_to_user is_event_assigned_to_user + update_recurring_events update_recurring_event ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); #TODO: remove studio_id #TODO: get project_id, studio_id by join with project_series @@ -31,310 +30,327 @@ our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); sub debug; # get series columns -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_series'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_series' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } # get series content -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{series_name}) && ($condition->{series_name} ne '')){ - push @conditions, 'series_name=?'; + if ( ( defined $condition->{series_name} ) && ( $condition->{series_name} ne '' ) ) { + push @conditions, 'series_name=?'; push @bind_values, $condition->{series_name}; } - if ((defined $condition->{title}) && ($condition->{title} ne '')){ - push @conditions, 'title=?'; + if ( ( defined $condition->{title} ) && ( $condition->{title} ne '' ) ) { + push @conditions, 'title=?'; push @bind_values, $condition->{title}; } - if ((defined $condition->{has_single_events}) && ($condition->{has_single_events} ne '')){ - push @conditions, 'has_single_events=?'; + if ( ( defined $condition->{has_single_events} ) && ( $condition->{has_single_events} ne '' ) ) { + push @conditions, 'has_single_events=?'; push @bind_values, $condition->{has_single_events}; } - my $search_cond=''; - if ((defined $condition->{search}) && ($condition->{search} ne'')){ - my $search=lc $condition->{search}; - $search=~s/[^a-z0-9\_\.\-\:\!öäüßÖÄÜ \&]/%/; - $search=~s/\%+/\%/; - $search=~s/^[\%\s]+//; - $search=~s/[\%\s]+$//; - if ($search ne ''){ - $search='%'.$search.'%'; - my @attr=('title', 'series_name', 'excerpt', 'category', 'content'); - push @conditions, "(".join(" or ", map {'lower('.$_.') like ?'} @attr ).")"; - for my $attr (@attr){ - push @bind_values,$search; + my $search_cond = ''; + if ( ( defined $condition->{search} ) && ( $condition->{search} ne '' ) ) { + my $search = lc $condition->{search}; + $search =~ s/[^a-z0-9\_\.\-\:\!öäüßÖÄÜ \&]/%/; + $search =~ s/\%+/\%/; + $search =~ s/^[\%\s]+//; + $search =~ s/[\%\s]+$//; + if ( $search ne '' ) { + $search = '%' . $search . '%'; + my @attr = ( 'title', 'series_name', 'excerpt', 'category', 'content' ); + push @conditions, "(" . join( " or ", map { 'lower(' . $_ . ') like ?' } @attr ) . ")"; + for my $attr (@attr) { + push @bind_values, $search; } } } - my $query=''; - my $conditions=''; - - if ((defined $condition->{project_id}) || (defined $condition->{studio_id})){ - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ps.project_id=?'; - push @bind_values, $condition->{project_id}; - } + my $query = ''; + my $conditions = ''; - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ps.studio_id=?'; - push @bind_values, $condition->{studio_id}; - } - push @conditions, 'ps.series_id=s.id'; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); - $query=qq{ + if ( ( defined $condition->{project_id} ) || ( defined $condition->{studio_id} ) ) { + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ps.project_id=?'; + push @bind_values, $condition->{project_id}; + } + + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ps.studio_id=?'; + push @bind_values, $condition->{studio_id}; + } + push @conditions, 'ps.series_id=s.id'; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); + $query = qq{ select * from calcms_series s, calcms_project_series ps $conditions order by has_single_events desc, series_name, title }; - }else{ - # simple query - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); - $query=qq{ + } else { + + # simple query + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); + $query = qq{ select * from calcms_series $conditions order by has_single_events desc, series_name, title }; - } + } - my $dbh=db::connect($config); - my $series=db::get($dbh, $query, \@bind_values); - #print STDERR Dumper(time()); - for my $serie (@$series){ - $serie->{series_id}=$serie->{id}; + my $dbh = db::connect($config); + my $series = db::get( $dbh, $query, \@bind_values ); + + #print STDERR Dumper(time()); + for my $serie (@$series) { + $serie->{series_id} = $serie->{id}; delete $serie->{id}; } + #print STDERR Dumper($series); return $series; } # insert series -sub insert{ - my $config=shift; - my $series=shift; +sub insert { + my $config = shift; + my $series = shift; - #print STDERR Dumper($series); + #print STDERR Dumper($series); return undef unless defined $series->{project_id}; return undef unless defined $series->{studio_id}; - my $project_id = $series->{project_id}; - my $studio_id = $series->{studio_id}; + my $project_id = $series->{project_id}; + my $studio_id = $series->{studio_id}; - my $columns=series::get_columns($config); + my $columns = series::get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column} = $series->{$column} if defined $series->{$column}; - } - $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $series->{$column} if defined $series->{$column}; + } + $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; - $entry->{created_at} = time::time_to_datetime(time()); - $entry->{modified_at}= time::time_to_datetime(time()); - #print STDERR Dumper($entry); + $entry->{created_at} = time::time_to_datetime( time() ); + $entry->{modified_at} = time::time_to_datetime( time() ); + + #print STDERR Dumper($entry); + + my $dbh = db::connect($config); + my $series_id = db::insert( $dbh, 'calcms_series', $entry ); - my $dbh=db::connect($config); - my $series_id=db::insert($dbh, 'calcms_series', $entry); - return undef unless defined $series_id; - - my $result=project::assign_series($config, { - project_id => $project_id, - studio_id => $studio_id, - series_id => $series_id - }); - return undef unless defined $result; - return $series_id; + + my $result = project::assign_series( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + series_id => $series_id + } + ); + return undef unless defined $result; + return $series_id; } # update series -sub update{ - my $config=shift; - my $series=shift; +sub update { + my $config = shift; + my $series = shift; return undef unless defined $series->{project_id}; return undef unless defined $series->{studio_id}; return undef unless defined $series->{series_id}; - my $columns=series::get_columns($config); + my $columns = series::get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column}=$series->{$column} if defined $series->{$column}; - } - $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; - $entry->{id} = $series->{series_id}; - $entry->{modified_at}= time::time_to_datetime(time()); + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $series->{$column} if defined $series->{$column}; + } + $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; + $entry->{id} = $series->{series_id}; + $entry->{modified_at} = time::time_to_datetime( time() ); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); push @bind_values, $entry->{id}; - my $query=qq{ + my $query = qq{ update calcms_series set $values where id=? }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $dbh=db::connect($config); - return db::put($dbh, $query, \@bind_values); + #print STDERR Dumper($query).Dumper(\@bind_values); + + my $dbh = db::connect($config); + return db::put( $dbh, $query, \@bind_values ); } # delete series, its schedules and series dates # unassign its users and events -sub delete{ - my $config=shift; - my $series=shift; - +sub delete { + my $config = shift; + my $series = shift; + return undef unless defined $series->{project_id}; return undef unless defined $series->{studio_id}; return undef unless defined $series->{series_id}; - my $project_id = $series->{project_id}; - my $studio_id = $series->{studio_id}; - my $series_id = $series->{series_id}; + my $project_id = $series->{project_id}; + my $studio_id = $series->{studio_id}; + my $series_id = $series->{series_id}; - unless(project::is_series_assigned($config, $series)==1){ - print STDERR "series is not assigned to project $project_id and studio $studio_id\n"; - return undef; - }; + unless ( project::is_series_assigned( $config, $series ) == 1 ) { + print STDERR "series is not assigned to project $project_id and studio $studio_id\n"; + return undef; + } - my $query = undef; - my $bind_values = undef; - my $dbh=db::connect($config); + my $query = undef; + my $bind_values = undef; + my $dbh = db::connect($config); - $bind_values=[$project_id, $studio_id, $series_id]; - #delete schedules - $query=qq{ + $bind_values = [ $project_id, $studio_id, $series_id ]; + + #delete schedules + $query = qq{ delete from calcms_series_schedule where project_id=? and studio_id=? and series_id=? }; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); - #delete series dates - $query=qq{ + #delete series dates + $query = qq{ delete from calcms_series_dates where project_id=? and studio_id=? and series_id=? }; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); - #unassign users - series::remove_user( - $config, { - project_id => $project_id, - studio_id => $studio_id, - series_id => $series_id - } - ); + #unassign users + series::remove_user( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + series_id => $series_id + } + ); - #unassign events - $bind_values=[$project_id, $studio_id, $series_id]; - $query=qq{ + #unassign events + $bind_values = [ $project_id, $studio_id, $series_id ]; + $query = qq{ delete from calcms_series_events where project_id=? and studio_id=? and series_id=? }; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); - - project::unassign_series($config, { - project_id => $project_id, - studio_id => $studio_id, - series_id => $series_id - }); + db::put( $dbh, $query, $bind_values ); + + project::unassign_series( + $config, + { + project_id => $project_id, + studio_id => $studio_id, + series_id => $series_id + } + ); #delete series - my $series_assignments=project::get_series_assignments( - $config, { - series_id => $series_id - } - ); - if(@$series_assignments>1){ - print STDERR "do not delete series, due to assigned to other project or studio"; - return; - } + my $series_assignments = project::get_series_assignments( + $config, + { + series_id => $series_id + } + ); + if ( @$series_assignments > 1 ) { + print STDERR "do not delete series, due to assigned to other project or studio"; + return; + } - $bind_values=[$series_id]; - $query=qq{ + $bind_values = [$series_id]; + $query = qq{ delete from calcms_series where id=? }; + #print STDERR $query.$query.Dumper($bind_values); - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } - # get users directly assigned to project, studio, series (editors) -sub get_users{ - my $config = shift; +sub get_users { + my $config = shift; my $condition = shift; - - my @conditions=(); - my @bind_values=(); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'us.project_id=?'; + my @conditions = (); + my @bind_values = (); + + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'us.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'us.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'us.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'us.series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'us.series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{name}) && ($condition->{name} ne '')){ - push @conditions, 'u.name=?'; + if ( ( defined $condition->{name} ) && ( $condition->{name} ne '' ) ) { + push @conditions, 'u.name=?'; push @bind_values, $condition->{name}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select u.id, u.name, u.full_name, u.email, us.modified_by, us.modified_at from calcms_users u, calcms_user_series us where us.user_id=u.id $conditions }; + #print STDERR $query." ".Dumper(\@bind_values)."\n"; - my $dbh =db::connect($config); - my $result=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $result = db::get( $dbh, $query, \@bind_values ); + #print STDERR $query." ".Dumper($result)."\n"; return $result; } # assign user to series -sub add_user{ - my $config = shift; - my $entry = shift; +sub add_user { + my $config = shift; + my $entry = shift; return unless defined $entry->{project_id}; return unless defined $entry->{studio_id}; @@ -342,173 +358,176 @@ sub add_user{ return unless defined $entry->{user_id}; return unless defined $entry->{user}; - my $query=qq{ + my $query = qq{ select id from calcms_user_series where project_id=? and studio_id=? and series_id=? and user_id=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{user_id}]; + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{user_id} ]; - my $dbh =db::connect($config); - my $results=db::get($dbh, $query, $bind_values); - return unless (@$results==0); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, $bind_values ); + return unless ( @$results == 0 ); - $query=qq{ + $query = qq{ insert calcms_user_series set project_id=?, studio_id=?, series_id=?, user_id=?, modified_by=?, modified_at=now() }; - $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{user_id}, $entry->{user}]; - db::put($dbh, $query, $bind_values); + $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{user_id}, $entry->{user} ]; + db::put( $dbh, $query, $bind_values ); } # remove user(s) from series. -sub remove_user{ - my $config = shift; +sub remove_user { + my $config = shift; my $condition = shift; - - return unless(defined $condition->{project_id}); - return unless(defined $condition->{studio_id}); - return unless(defined $condition->{series_id}); - my @conditions=(); - my @bind_values=(); + return unless ( defined $condition->{project_id} ); + return unless ( defined $condition->{studio_id} ); + return unless ( defined $condition->{series_id} ); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + my @conditions = (); + my @bind_values = (); + + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{user_id}) && ($condition->{user_id} ne '')){ - push @conditions, 'user_id=?'; + if ( ( defined $condition->{user_id} ) && ( $condition->{user_id} ne '' ) ) { + push @conditions, 'user_id=?'; push @bind_values, $condition->{user_id}; } - my $conditions=''; - $conditions=join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ delete from calcms_user_series where $conditions }; - my $dbh =db::connect($config); - db::put($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + db::put( $dbh, $query, \@bind_values ); } -#search events by series_name and title (for events not assigned yet) +#search events by series_name and title (for events not assigned yet) #TODO: add location -sub search_events{ - my $config = shift; +sub search_events { + my $config = shift; my $request = shift; my $options = shift; - my $series_name =$options->{series_name}||''; - my $title =$options->{title}||''; - return undef if(($series_name eq '') && ($title eq '') ); + my $series_name = $options->{series_name} || ''; + my $title = $options->{title} || ''; + return undef if ( ( $series_name eq '' ) && ( $title eq '' ) ); - $series_name=~s/[^a-zA-Z0-9 \-]+/\?/g; - $title =~s/[^a-zA-Z0-9 \-]+/\?/g; + $series_name =~ s/[^a-zA-Z0-9 \-]+/\?/g; + $title =~ s/[^a-zA-Z0-9 \-]+/\?/g; - $series_name=~s/\?+/\?/g; - $title =~s/\?+/\?/g; + $series_name =~ s/\?+/\?/g; + $title =~ s/\?+/\?/g; - my $params={ + my $params = { series_name => $series_name, title => $title, template => 'no' }; - if (defined $options){ - $params->{from_date} = $options->{from_date} if (defined $options->{from_date}); - $params->{till_date} = $options->{till_date} if (defined $options->{till_date}); - $params->{location} = $options->{location} if (defined $options->{location}); - $params->{limit} = $options->{limit} if (defined $options->{limit}); - $params->{archive} = $options->{archive} if (defined $options->{archive}); - $params->{get} = $options->{get} if (defined $options->{get}); + if ( defined $options ) { + $params->{from_date} = $options->{from_date} if ( defined $options->{from_date} ); + $params->{till_date} = $options->{till_date} if ( defined $options->{till_date} ); + $params->{location} = $options->{location} if ( defined $options->{location} ); + $params->{limit} = $options->{limit} if ( defined $options->{limit} ); + $params->{archive} = $options->{archive} if ( defined $options->{archive} ); + $params->{get} = $options->{get} if ( defined $options->{get} ); } - my $checked_params=events::check_params($config, $params); + my $checked_params = events::check_params( $config, $params ); + #print STDERR '
    '.Dumper($checked_params).'
    '; - my $request2={ - params=>{ - checked=>$checked_params + my $request2 = { + params => { + checked => $checked_params }, config => $request->{config}, permissions => $request->{permissions} }; + #my $debug=1; #print STDERR Dumper($request2->{params}); - my $events=events::get($config, $request2); + my $events = events::get( $config, $request2 ); + #print Dumper($events); return $events; } #get events (only assigned ones) by project_id,studio_id,series_id, -sub get_events{ - my $config=shift; - my $options=shift; +sub get_events { + my $config = shift; + my $options = shift; #print STDERR Dumper($options); - return [] if defined ($options->{series_id}) && ($options->{series_id} <=0); + return [] if defined( $options->{series_id} ) && ( $options->{series_id} <= 0 ); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if(defined $options->{project_id}){ - push @conditions, 'se.project_id = ?'; + if ( defined $options->{project_id} ) { + push @conditions, 'se.project_id = ?'; push @bind_values, $options->{project_id}; } - if(defined $options->{studio_id}){ - push @conditions, 'se.studio_id = ?'; + if ( defined $options->{studio_id} ) { + push @conditions, 'se.studio_id = ?'; push @bind_values, $options->{studio_id}; } - if( (defined $options->{series_id}) && ($options->{series_id}=~/(\d+)/) ){ + if ( ( defined $options->{series_id} ) && ( $options->{series_id} =~ /(\d+)/ ) ) { push @bind_values, $1; - push @conditions, 'se.series_id = ?'; + push @conditions, 'se.series_id = ?'; } - if(defined $options->{event_id}){ + if ( defined $options->{event_id} ) { push @bind_values, $options->{event_id}; - push @conditions, 'e.id = ?'; + push @conditions, 'e.id = ?'; } - if( (defined $options->{from_date}) && ($options->{from_date}=~/(\d\d\d\d\-\d\d\-\d\d)/) ){ + if ( ( defined $options->{from_date} ) && ( $options->{from_date} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) { push @bind_values, $1; - push @conditions, 'e.start_date >= ?'; + push @conditions, 'e.start_date >= ?'; } - if( (defined $options->{till_date}) && ($options->{till_date}=~/(\d\d\d\d\-\d\d\-\d\d)/) ){ + if ( ( defined $options->{till_date} ) && ( $options->{till_date} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) { push @bind_values, $1; - push @conditions, 'e.start_date <= ?'; + push @conditions, 'e.start_date <= ?'; } - if(defined $options->{location}){ - push @conditions, 'e.location = ?'; + if ( defined $options->{location} ) { + push @conditions, 'e.location = ?'; push @bind_values, $options->{location}; } - if(defined $options->{draft}){ - push @conditions, 'e.draft = ?'; + if ( defined $options->{draft} ) { + push @conditions, 'e.draft = ?'; push @bind_values, $options->{draft}; } - my $conditions=''; - if (@conditions>0){ - $conditions=' and '.join(' and ', @conditions); - } - - my $limit=''; - if( (defined $options->{limit}) && ($limit=~/(\d+)/) ){ - $limit='limit '.$1; + my $conditions = ''; + if ( @conditions > 0 ) { + $conditions = ' and ' . join( ' and ', @conditions ); } - my $query=qq{ + my $limit = ''; + if ( ( defined $options->{limit} ) && ( $limit =~ /(\d+)/ ) ) { + $limit = 'limit ' . $1; + } + + my $query = qq{ select * ,date(start) start_date ,date(end) end_date @@ -524,33 +543,37 @@ sub get_events{ order by start_date desc $limit }; + #print STDERR '
    '.$query.Dumper(\@bind_values).'
    '; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, \@bind_values ); + #print STDERR Dumper($results); - - $results=events::modify_results( - $dbh, $config, { - base_url => '', - params => { - checked => { - template => '' - } - } - } , $results + + $results = events::modify_results( + $dbh, $config, + { + base_url => '', + params => { + checked => { + template => '' + } + } + }, + $results ); - #add studio id to events - my $studios=studios::get($config, $options); + #add studio id to events + my $studios = studios::get( $config, $options ); - my $studio_id_by_location={}; - for my $studio (@$studios){ - $studio_id_by_location->{$studio->{location}}=$studio->{id}; + my $studio_id_by_location = {}; + for my $studio (@$studios) { + $studio_id_by_location->{ $studio->{location} } = $studio->{id}; + } + for my $result (@$results) { + $result->{studio_id} = $studio_id_by_location->{ $result->{location} }; } - for my $result (@$results){ - $result->{studio_id}=$studio_id_by_location->{$result->{location}}; - } #print STDERR Dumper($results); return $results; @@ -559,105 +582,107 @@ sub get_events{ # load event given by studio_id, series_id and event_id # helper for gui - errors are written to gui output # return undef on error -sub get_event{ - my $config=shift; - my $options=shift; +sub get_event { + my $config = shift; + my $options = shift; - my $project_id = $options->{project_id}||''; - my $studio_id = $options->{studio_id}||''; - my $series_id = $options->{series_id}||''; - my $event_id = $options->{event_id} ||''; - my $draft = $options->{draft} ||''; + my $project_id = $options->{project_id} || ''; + my $studio_id = $options->{studio_id} || ''; + my $series_id = $options->{series_id} || ''; + my $event_id = $options->{event_id} || ''; + my $draft = $options->{draft} || ''; - unless(defined $options->{allow_any} ){ - if ($project_id eq''){ - uac::print_error("missing project_id"); - return undef; - } - if ($studio_id eq''){ - uac::print_error("missing studio_id"); - return undef; - } - if ($series_id eq''){ - uac::print_error("missing series_id"); - return undef; - } - } + unless ( defined $options->{allow_any} ) { + if ( $project_id eq '' ) { + uac::print_error("missing project_id"); + return undef; + } + if ( $studio_id eq '' ) { + uac::print_error("missing studio_id"); + return undef; + } + if ( $series_id eq '' ) { + uac::print_error("missing series_id"); + return undef; + } + } - if ($event_id eq''){ - uac::print_error("missing event_id"); - return undef; - } + if ( $event_id eq '' ) { + uac::print_error("missing event_id"); + return undef; + } - my $queryOptions={}; - $queryOptions->{project_id} = $project_id if $project_id ne ''; - $queryOptions->{studio_id} = $studio_id if $studio_id ne ''; - $queryOptions->{series_id} = $series_id if $series_id ne ''; - $queryOptions->{event_id} = $event_id if $event_id ne ''; - $queryOptions->{draft} = $draft if $draft ne ''; + my $queryOptions = {}; + $queryOptions->{project_id} = $project_id if $project_id ne ''; + $queryOptions->{studio_id} = $studio_id if $studio_id ne ''; + $queryOptions->{series_id} = $series_id if $series_id ne ''; + $queryOptions->{event_id} = $event_id if $event_id ne ''; + $queryOptions->{draft} = $draft if $draft ne ''; - my $events=series::get_events($config, $queryOptions); - + my $events = series::get_events( $config, $queryOptions ); - unless (defined $events){ - uac::print_error("error on loading event"); - return undef; - } + unless ( defined $events ) { + uac::print_error("error on loading event"); + return undef; + } - if(scalar(@$events)==0){ - uac::print_error("event not found"); - return undef; - } + if ( scalar(@$events) == 0 ) { + uac::print_error("event not found"); + return undef; + } - if(scalar(@$events)>1){ - print STDERR q{multiple assignments found for } - .q{project_id=}.$options->{project_id} - .q{, studio_id=}.$options->{studio_id} - .q{, series_id=}.$options->{series_id} - .q{, event_id=}.$options->{event_id} - ."\n"; - } - my $event=$events->[0]; - return $event; + if ( scalar(@$events) > 1 ) { + print STDERR q{multiple assignments found for } + . q{project_id=} + . $options->{project_id} + . q{, studio_id=} + . $options->{studio_id} + . q{, series_id=} + . $options->{series_id} + . q{, event_id=} + . $options->{event_id} . "\n"; + } + my $event = $events->[0]; + return $event; } # get name and title of series and age in days ('days_over') -sub get_event_age{ - my $config=shift; - my $options=shift; +sub get_event_age { + my $config = shift; + my $options = shift; #print STDERR Dumper($options); return undef unless defined $options->{project_id}; return undef unless defined $options->{studio_id}; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if( (defined $options->{project_id}) && ($options->{project_id}=~/(\d+)/) ){ + if ( ( defined $options->{project_id} ) && ( $options->{project_id} =~ /(\d+)/ ) ) { push @bind_values, $1; - push @conditions, 'ps.project_id = ?'; + push @conditions, 'ps.project_id = ?'; } - if( (defined $options->{studio_id}) && ($options->{studio_id}=~/(\d+)/) ){ + if ( ( defined $options->{studio_id} ) && ( $options->{studio_id} =~ /(\d+)/ ) ) { push @bind_values, $1; - push @conditions, 'ps.studio_id = ?'; + push @conditions, 'ps.studio_id = ?'; } - if( (defined $options->{series_id}) && ($options->{series_id}=~/(\d+)/) ){ + if ( ( defined $options->{series_id} ) && ( $options->{series_id} =~ /(\d+)/ ) ) { push @bind_values, $1; - push @conditions, 's.id = ?'; + push @conditions, 's.id = ?'; } - if( (defined $options->{event_id}) && ($options->{event_id}=~/(\d+)/) ){ + if ( ( defined $options->{event_id} ) && ( $options->{event_id} =~ /(\d+)/ ) ) { push @bind_values, $1; - push @conditions, 'e.id = ?'; + push @conditions, 'e.id = ?'; } - my $conditions=''; - if (@conditions>0){ - $conditions=join(' and ', @conditions); + my $conditions = ''; + if ( @conditions > 0 ) { + $conditions = join( ' and ', @conditions ); } - my $query=qq{ + my $query = qq{ select s.id series_id, s.series_name, s.title, s.has_single_events has_single_events, (to_days(now())-to_days(max(e.start))) days_over from calcms_project_series ps left join calcms_series s on ps.series_id=s.id @@ -667,22 +692,23 @@ sub get_event_age{ group by s.id order by has_single_events desc, days_over }; - - #print STDERR $query." ".Dumper(\@bind_values); - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, \@bind_values); - for my $result (@$results){ - $result->{days_over}=0 unless defined $result->{days_over}; - } + #print STDERR $query." ".Dumper(\@bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, \@bind_values ); + + for my $result (@$results) { + $result->{days_over} = 0 unless defined $result->{days_over}; + } return $results; } # is event older than max_age days -sub is_event_older_than_days{ - my $config=shift; - my $options=shift; - #print STDERR Dumper($options); +sub is_event_older_than_days { + my $config = shift; + my $options = shift; + + #print STDERR Dumper($options); return 1 unless defined $options->{project_id}; return 1 unless defined $options->{studio_id}; @@ -690,545 +716,578 @@ sub is_event_older_than_days{ return 1 unless defined $options->{event_id}; return 1 unless defined $options->{max_age}; - my $events=series::get_event_age($config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - event_id => $options->{event_id} - }); + my $events = series::get_event_age( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + event_id => $options->{event_id} + } + ); - if (scalar(@$events)==0){ - print STDERR "series_events::event_over_in_days: event $options->{event_id} is not assigned to project $options->{project_id}, studio $options->{studio_id}, series $options->{series_id}\n"; - return 1; - } - my $event=$events->[0]; - #print STDERR Dumper($event); - return 1 if $event->{days_over} > $options->{max_age}; - return 0; + if ( scalar(@$events) == 0 ) { + print STDERR +"series_events::event_over_in_days: event $options->{event_id} is not assigned to project $options->{project_id}, studio $options->{studio_id}, series $options->{series_id}\n"; + return 1; + } + my $event = $events->[0]; + + #print STDERR Dumper($event); + return 1 if $event->{days_over} > $options->{max_age}; + return 0; } -sub get_next_episode{ - my $config=shift; - my $options=shift; +sub get_next_episode { + my $config = shift; + my $options = shift; - return 0 unless defined $options->{project_id}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{series_id}; + return 0 unless defined $options->{project_id}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{series_id}; - #return if episodes should not be counted for this series - my $query=q{ + #return if episodes should not be counted for this series + my $query = q{ select count_episodes from calcms_series where id=? }; - my $bind_values=[$options->{series_id}]; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, $bind_values); - return 0 if (@$results != 1); - return 0 if ($results->[0]->{count_episodes}eq'0'); - #print STDERR Dumper($results); + my $bind_values = [ $options->{series_id} ]; + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, $bind_values ); + return 0 if ( @$results != 1 ); + return 0 if ( $results->[0]->{count_episodes} eq '0' ); - #get all - $query=q{ + #print STDERR Dumper($results); + + #get all + $query = q{ select title,episode from calcms_events e, calcms_series_events se where se.project_id=? and se.studio_id=? and se.series_id=? and se.event_id=e.id }; - $bind_values=[$options->{project_id}, $options->{studio_id}, $options->{series_id}]; - $results=db::get($dbh, $query, $bind_values); - - my $max=0; - for my $result (@$results){ - if ($result->{title}=~/\#(\d+)/){ - my $value=$1; - $max=$value if $value>$max; - } - next unless defined $result->{episode}; - $max=$result->{episode} if $result->{episode}>$max; - } - return $max+1; + $bind_values = [ $options->{project_id}, $options->{studio_id}, $options->{series_id} ]; + $results = db::get( $dbh, $query, $bind_values ); + + my $max = 0; + for my $result (@$results) { + if ( $result->{title} =~ /\#(\d+)/ ) { + my $value = $1; + $max = $value if $value > $max; + } + next unless defined $result->{episode}; + $max = $result->{episode} if $result->{episode} > $max; + } + return $max + 1; } -sub get_images{ - my $config=shift; - my $options=shift; +sub get_images { + my $config = shift; + my $options = shift; - return undef unless defined $options->{project_id}; - return undef unless defined $options->{studio_id}; - return undef unless defined $options->{series_id}; + return undef unless defined $options->{project_id}; + return undef unless defined $options->{studio_id}; + return undef unless defined $options->{series_id}; - #get images from all events of the series - my $dbh=db::connect($config); - my $events=series::get_events( $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id} - }); - my $images={}; - my $found=0; - for my $event (@$events){ - my $image=$event->{image}; - $image=~s/.*\///; - $images->{$image}=1; - $found++; - } - - return undef if $found==0; + #get images from all events of the series + my $dbh = db::connect($config); + my $events = series::get_events( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id} + } + ); + my $images = {}; + my $found = 0; + for my $event (@$events) { + my $image = $event->{image}; + $image =~ s/.*\///; + $images->{$image} = 1; + $found++; + } - # get all images from database - my @cond=(); - my $bind_values=[]; - for my $image (keys %$images){ - push @cond, 'filename=?'; + return undef if $found == 0; + + # get all images from database + my @cond = (); + my $bind_values = []; + for my $image ( keys %$images ) { + push @cond, 'filename=?'; push @$bind_values, $image; } - my $where=''; - if (@cond>0){ - $where = 'where '.join (' or ', @cond); + my $where = ''; + if ( @cond > 0 ) { + $where = 'where ' . join( ' or ', @cond ); } - my $limit=''; - if ( (defined $options->{limit}) && ($options->{limit}=~/(\d+)/) ){ - $limit=' limit '.$1; + my $limit = ''; + if ( ( defined $options->{limit} ) && ( $options->{limit} =~ /(\d+)/ ) ) { + $limit = ' limit ' . $1; } - my $query=qq{ + my $query = qq{ select * from calcms_images $where order by created_at desc $limit }; - #print STDERR Dumper($query).Dumper($bind_values); - my $results=db::get($dbh, $query, $bind_values); - #print STDERR @$results."\n"; + #print STDERR Dumper($query).Dumper($bind_values); + my $results = db::get( $dbh, $query, $bind_values ); + + #print STDERR @$results."\n"; return $results; } #assign event to series #TODO: manual assign needs to update automatic one -sub assign_event{ - my $config=shift; - my $entry=shift; - - #print STDERR Dumper($entry); +sub assign_event { + my $config = shift; + my $entry = shift; + + #print STDERR Dumper($entry); return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; return undef unless defined $entry->{event_id}; - $entry->{manual}=0 unless ((defined $entry->{manual})&&($entry->{manual}eq'1')); + $entry->{manual} = 0 unless ( ( defined $entry->{manual} ) && ( $entry->{manual} eq '1' ) ); - my $conditions=''; - $conditions='and manual=1' if ($entry->{manual}eq'1'); + my $conditions = ''; + $conditions = 'and manual=1' if ( $entry->{manual} eq '1' ); - my $query=qq{ + my $query = qq{ select * from calcms_series_events where project_id=? and studio_id=? and series_id=? and event_id=? $conditions }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id}]; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, $bind_values); + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id} ]; + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, $bind_values ); - if(@$results>1){ - print STDERR "multiple assignments of project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}\n"; - return; - } - if(@$results==1){ - print STDERR "already assigned: project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}\n"; - return; - } + if ( @$results > 1 ) { + print STDERR +"multiple assignments of project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}\n"; + return; + } + if ( @$results == 1 ) { + print STDERR +"already assigned: project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}\n"; + return; + } - $query=qq{ + $query = qq{ insert into calcms_series_events (project_id, studio_id, series_id, event_id, manual) values (?,?,?,?,?) }; - $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id}, $entry->{manual}]; + $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id}, $entry->{manual} ]; + #print STDERR '
    '.$query.Dumper($bind_values).'
    '; - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } #unassign event from series -sub unassign_event{ - my $config=shift; - my $entry=shift; - +sub unassign_event { + my $config = shift; + my $entry = shift; + return unless defined $entry->{project_id}; return unless defined $entry->{studio_id}; return unless defined $entry->{series_id}; return unless defined $entry->{event_id}; - my $conditions=''; - $conditions='and manual=1' if ((defined $entry->{manual}) && ($entry->{manual}eq'1')); + my $conditions = ''; + $conditions = 'and manual=1' if ( ( defined $entry->{manual} ) && ( $entry->{manual} eq '1' ) ); - my $query=qq{ + my $query = qq{ delete from calcms_series_events where project_id=? and studio_id=? and series_id=? and event_id=? $conditions }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id}]; - #print STDERR '
    '.$query.Dumper($bind_values).'
    '; - my $dbh=db::connect($config); - return db::put($dbh, $query, $bind_values); -} + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id} ]; + #print STDERR '
    '.$query.Dumper($bind_values).'
    '; + my $dbh = db::connect($config); + return db::put( $dbh, $query, $bind_values ); +} # put series id to given events (for legacy handling) # used by calendar # TODO: optionally add project_id and studio_id to conditions -sub add_series_ids_to_events{ - my $config=shift; - my $events=shift; +sub add_series_ids_to_events { + my $config = shift; + my $events = shift; #get event ids from given events - my @event_ids=(); - for my $event (@$events){ + my @event_ids = (); + for my $event (@$events) { push @event_ids, $event->{event_id}; } - return if (@event_ids==0); + return if ( @event_ids == 0 ); - my @bind_values =@event_ids; - my $event_ids =join(',', map {'?'} @event_ids); + my @bind_values = @event_ids; + my $event_ids = join( ',', map { '?' } @event_ids ); #query series ids - my $dbh=db::connect($config); - my $query=qq{ + my $dbh = db::connect($config); + my $query = qq{ select project_id, studio_id, series_id, event_id from calcms_series_events where event_id in ($event_ids) }; - my $results=db::get($dbh, $query, \@bind_values); - my @results=@$results; - return [] unless (@results>0); + my $results = db::get( $dbh, $query, \@bind_values ); + my @results = @$results; + return [] unless ( @results > 0 ); #build hash of series ids by event ids - my $assignments_by_event_id={}; - for my $entry (@$results){ - my $event_id=$entry->{event_id}; - $assignments_by_event_id->{$event_id}=$entry; + my $assignments_by_event_id = {}; + for my $entry (@$results) { + my $event_id = $entry->{event_id}; + $assignments_by_event_id->{$event_id} = $entry; } - + #fill in ids into events - for my $event (@$events){ - my $event_id=$event->{event_id}; - my $assignment=$assignments_by_event_id->{$event_id}; - if (defined $assignment){ - $event->{project_id} = $assignment->{project_id}; - $event->{studio_id} = $assignment->{studio_id}; - $event->{series_id} = $assignment->{series_id}; - } + for my $event (@$events) { + my $event_id = $event->{event_id}; + my $assignment = $assignments_by_event_id->{$event_id}; + if ( defined $assignment ) { + $event->{project_id} = $assignment->{project_id}; + $event->{studio_id} = $assignment->{studio_id}; + $event->{series_id} = $assignment->{series_id}; + } } } - # add event_ids to series and remove all event ids from series, not given event_ids # for scan only, used at series -sub set_event_ids{ - my $config=shift; - my $project_id=shift; - my $studio_id=shift; - my $serie=shift; - my $event_ids=shift; +sub set_event_ids { + my $config = shift; + my $project_id = shift; + my $studio_id = shift; + my $serie = shift; + my $event_ids = shift; - my $serie_id=$serie->{series_id}; + my $serie_id = $serie->{series_id}; return unless defined $project_id; return unless defined $studio_id; return unless defined $serie_id; return unless defined $event_ids; #make lookup table from events - my $event_id_hash={}; - for my $event_id (@$event_ids){ - $event_id_hash->{$event_id}=1; + my $event_id_hash = {}; + for my $event_id (@$event_ids) { + $event_id_hash->{$event_id} = 1; } #get series_entries from db #my $bind_names=join(',', (map { '?' } @$event_ids)); - my $query=qq{ + my $query = qq{ select event_id from calcms_series_events where project_id=? and studio_id=? and series_id=? }; - my $bind_values=[$project_id, $studio_id, $serie_id]; + my $bind_values = [ $project_id, $studio_id, $serie_id ]; - my $dbh=db::connect($config); - my $results=db::get($dbh, $query, $bind_values); + my $dbh = db::connect($config); + my $results = db::get( $dbh, $query, $bind_values ); + + my $found = {}; - my $found={}; #mark events found assigned to series - my $i=1; - for my $event (@$results){ + my $i = 1; + for my $event (@$results) { + #print "found event $i: $event->{event_id}\n"; - $found->{$event->{event_id}}=1; + $found->{ $event->{event_id} } = 1; $i++; } + #insert events from list, not found in db - for my $event_id (@$event_ids){ + for my $event_id (@$event_ids) { + #print "insert event_id $event_id\n"; series::assign_event( - $config, { - project_id => $project_id, - studio_id => $studio_id, - series_id => $serie_id, - event_id => $event_id - } - ) unless ($found->{$event_id}); + $config, + { + project_id => $project_id, + studio_id => $studio_id, + series_id => $serie_id, + event_id => $event_id + } + ) unless ( $found->{$event_id} ); } + #delete events found in db, but not in list - for my $event_id (keys %$found){ + for my $event_id ( keys %$found ) { + #print "delete event_id $event_id\n"; series::unassign_event( - $config, { - project_id => $project_id, - studio_id => $studio_id, - series_id => $serie_id, - event_id => $event_id, - manual => 0 - } - ) unless (defined $event_id_hash->{$event_id}); + $config, + { + project_id => $project_id, + studio_id => $studio_id, + series_id => $serie_id, + event_id => $event_id, + manual => 0 + } + ) unless ( defined $event_id_hash->{$event_id} ); } } # check if user allowed to update series events # evaluate permissions and consider editors directly assigned to series -sub can_user_update_events{ - my $request=shift; - my $options=shift; +sub can_user_update_events { + my $request = shift; + my $options = shift; my $config = $request->{config}; my $permissions = $request->{permissions}; - return 0 unless defined $request->{user}; - return 0 unless defined $options->{project_id}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{series_id}; + return 0 unless defined $request->{user}; + return 0 unless defined $options->{project_id}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{series_id}; - return 1 if ( (defined $permissions->{update_event_of_others}) && ($permissions->{update_event_of_others}eq'1')); - return 1 if ( (defined $permissions->{is_admin}) && ($permissions->{is_admin} eq'1')); - return 0 if ( $permissions->{update_event_of_series}ne'1'); + return 1 if ( ( defined $permissions->{update_event_of_others} ) && ( $permissions->{update_event_of_others} eq '1' ) ); + return 1 if ( ( defined $permissions->{is_admin} ) && ( $permissions->{is_admin} eq '1' ) ); + return 0 if ( $permissions->{update_event_of_series} ne '1' ); - return is_series_assigned_to_user($request, $options); + return is_series_assigned_to_user( $request, $options ); } # check if user allowed to create series events # evaluate permissions and consider editors directly assigned to series -sub can_user_create_events{ - my $request=shift; - my $options=shift; +sub can_user_create_events { + my $request = shift; + my $options = shift; my $config = $request->{config}; my $permissions = $request->{permissions}; - return 0 unless defined $request->{user}; - return 0 unless defined $options->{project_id}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{series_id}; + return 0 unless defined $request->{user}; + return 0 unless defined $options->{project_id}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{series_id}; - return 1 if ( (defined $permissions->{create_event}) && ($permissions->{create_event}eq'1')); - return 1 if ( (defined $permissions->{is_admin}) && ($permissions->{is_admin} eq'1')); - return 0 if ( $permissions->{create_event_of_series}ne'1'); + return 1 if ( ( defined $permissions->{create_event} ) && ( $permissions->{create_event} eq '1' ) ); + return 1 if ( ( defined $permissions->{is_admin} ) && ( $permissions->{is_admin} eq '1' ) ); + return 0 if ( $permissions->{create_event_of_series} ne '1' ); - return is_series_assigned_to_user($request, $options); + return is_series_assigned_to_user( $request, $options ); } -sub is_series_assigned_to_user{ - my $request=shift; - my $options=shift; +sub is_series_assigned_to_user { + my $request = shift; + my $options = shift; my $config = $request->{config}; my $permissions = $request->{permissions}; - return 0 unless defined $options->{project_id}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{series_id}; - return 0 unless defined $request->{user}; + return 0 unless defined $options->{project_id}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{series_id}; + return 0 unless defined $request->{user}; - my $series_users = series::get_users( - $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - name => $request->{user} - } - ); - return 0 if (@$series_users==0); - return 1; + my $series_users = series::get_users( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + name => $request->{user} + } + ); + return 0 if ( @$series_users == 0 ); + return 1; } # check if user is assigned to studio where location matchs to event # return 1 on success or error text -sub is_event_assigned_to_user{ - my $request=shift; - my $options=shift; +sub is_event_assigned_to_user { + my $request = shift; + my $options = shift; - my $config = $request->{config}; + my $config = $request->{config}; - return "missing user" unless defined $request->{user}; - return "missing project_id" unless defined $options->{project_id}; - return "missing studio_id" unless defined $options->{studio_id}; - return "missing series_id" unless defined $options->{series_id}; - return "missing event_id" unless defined $options->{event_id}; + return "missing user" unless defined $request->{user}; + return "missing project_id" unless defined $options->{project_id}; + return "missing studio_id" unless defined $options->{studio_id}; + return "missing series_id" unless defined $options->{series_id}; + return "missing event_id" unless defined $options->{event_id}; - #check roles - my $user_studios=uac::get_studios_by_user( - $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - user => $request->{user}, - } - ); - return "user is not assigned to studio" if @$user_studios==0; - my $studio=$user_studios->[0]; - my $location=$studio->{location}; - return "could not get studio location" if $location eq''; - - #TODO: replace legacy support - my $events=series::get_events( - $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - event_id => $options->{event_id}, - location => $location, - limit => 1 + #check roles + my $user_studios = uac::get_studios_by_user( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + user => $request->{user}, } ); + return "user is not assigned to studio" if @$user_studios == 0; + my $studio = $user_studios->[0]; + my $location = $studio->{location}; + return "could not get studio location" if $location eq ''; + + #TODO: replace legacy support + my $events = series::get_events( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + event_id => $options->{event_id}, + location => $location, + limit => 1 + } + ); + #print STDERR Dumper(@$events); - return "no event found for" - ." project $options->{project_id}," - ." studio $options->{studio_id}," - ." location $location," - ." series $options->{series_id}" - ." and event $options->{event_id}" if @$events==0; + return + "no event found for" + . " project $options->{project_id}," + . " studio $options->{studio_id}," + . " location $location," + . " series $options->{series_id}" + . " and event $options->{event_id}" + if @$events == 0; return 1; } -# to find multiple recurrences this does not include the recurrence_count +# to find multiple recurrences this does not include the recurrence_count # use events::get_key to add the recurrence -sub get_event_key{ - 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 $key=''; - $key.=$series_name if $series_name ne ''; - $key.=' - ' if ($series_name ne '') && ($title ne ''); - $key.=$title if $title ne ''; - $key.=': ' if ($title ne '') && ($user_title ne ''); - $key.=$user_title if $user_title ne ''; - $key.=' #'.$episode if $episode ne ''; - return $key; +sub get_event_key { + 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 $key = ''; + $key .= $series_name if $series_name ne ''; + $key .= ' - ' if ( $series_name ne '' ) && ( $title ne '' ); + $key .= $title if $title ne ''; + $key .= ': ' if ( $title ne '' ) && ( $user_title ne '' ); + $key .= $user_title if $user_title ne ''; + $key .= ' #' . $episode if $episode ne ''; + return $key; } -sub update_recurring_events{ - my $config=shift; - my $options=shift; +sub update_recurring_events { + my $config = shift; + my $options = shift; - return "missing project_id" unless defined $options->{project_id}; - return "missing studio_id" unless defined $options->{studio_id}; - return "missing series_id" unless defined $options->{series_id}; - return "missing event_id" unless defined $options->{event_id}; + return "missing project_id" unless defined $options->{project_id}; + return "missing studio_id" unless defined $options->{studio_id}; + return "missing series_id" unless defined $options->{series_id}; + return "missing event_id" unless defined $options->{event_id}; - my $events=series::get_events( - $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - draft => 0 + my $events = series::get_events( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + draft => 0 } ); - @$events=sort { $a->{start} cmp $b->{start}} @$events; + @$events = sort { $a->{start} cmp $b->{start} } @$events; - # store events with recurrences by key (series_name, title, user_title, episode) - my $events_by_key={}; - for my $event (@$events){ - my $key=get_event_key($event); - next unless $key=~/\#\d+$/; - $event->{key}=$key; - push @{$events_by_key->{$key}}, $event; + # store events with recurrences by key (series_name, title, user_title, episode) + my $events_by_key = {}; + for my $event (@$events) { + my $key = get_event_key($event); + next unless $key =~ /\#\d+$/; + $event->{key} = $key; + push @{ $events_by_key->{$key} }, $event; } - + # handle all events with the same key - for my $key (keys %$events_by_key){ - my $events=$events_by_key->{$key}; - next unless scalar @$events >0; + for my $key ( keys %$events_by_key ) { + my $events = $events_by_key->{$key}; + next unless scalar @$events > 0; - if(scalar @$events ==1){ - # one event found -> check if recurrence is to be removed - my $event=$events->[0]; - next if $event->{recurrence}==0; - next if $event->{recurrence_count}==0; - print STDERR "remove recurrence\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; - $event->{recurrence}=0; - $event->{recurrence_count}=0; - $event->{rerun}=0; - series::update_recurring_event($config, $event); - - }elsif(scalar @$events >1){ - # multiple events found with same key - # first event is the original - my $event=$events->[0]; - my $originalId = $event->{event_id}; - print STDERR "0\t'$event->{recurrence_count}'\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; + if ( scalar @$events == 1 ) { - # succeeding events are reruns - for (my $c=1; $c < scalar(@$events); $c++){ - my $event=$events->[$c]; - print STDERR "$c\t'$event->{recurrence_count}'\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; + # one event found -> check if recurrence is to be removed + my $event = $events->[0]; + next if $event->{recurrence} == 0; + next if $event->{recurrence_count} == 0; + print STDERR + "remove recurrence\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; + $event->{recurrence} = 0; + $event->{recurrence_count} = 0; + $event->{rerun} = 0; + series::update_recurring_event( $config, $event ); - my $update=0; - $update = 1 if $event->{recurrence} ne $originalId; - $update = 1 if $event->{rerun} ne '1'; - $update = 1 if $event->{recurrence_count} ne $c; - next if $update == 0; - - $event->{recurrence}=$originalId; - $event->{recurrence_count}=$c; - $event->{rerun}=1; - series::update_recurring_event($config, $event); - } - } + } elsif ( scalar @$events > 1 ) { + + # multiple events found with same key + # first event is the original + my $event = $events->[0]; + my $originalId = $event->{event_id}; + print STDERR +"0\t'$event->{recurrence_count}'\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; + + # succeeding events are reruns + for ( my $c = 1 ; $c < scalar(@$events) ; $c++ ) { + my $event = $events->[$c]; + print STDERR +"$c\t'$event->{recurrence_count}'\t'$event->{event_id}'\t'$event->{start}'\t'$event->{rerun}'\t'$event->{recurrence}'\t'$event->{key}'\n"; + + my $update = 0; + $update = 1 if $event->{recurrence} ne $originalId; + $update = 1 if $event->{rerun} ne '1'; + $update = 1 if $event->{recurrence_count} ne $c; + next if $update == 0; + + $event->{recurrence} = $originalId; + $event->{recurrence_count} = $c; + $event->{rerun} = 1; + series::update_recurring_event( $config, $event ); + } + } } } -sub update_recurring_event{ - my $config=shift; - my $event =shift; - - return undef unless defined $event->{event_id}; - return undef unless defined $event->{recurrence}; - return undef unless defined $event->{recurrence_count}; - return undef unless defined $event->{rerun}; - - return unless $event->{event_id}=~/^\d+$/; - return unless $event->{recurrence}=~/^\d+$/; - return unless $event->{recurrence_count}=~/^\d+$/; - return unless $event->{rerun}=~/^\d+$/; +sub update_recurring_event { + my $config = shift; + my $event = shift; - my $bind_values=[]; + return undef unless defined $event->{event_id}; + return undef unless defined $event->{recurrence}; + return undef unless defined $event->{recurrence_count}; + return undef unless defined $event->{rerun}; + + return unless $event->{event_id} =~ /^\d+$/; + return unless $event->{recurrence} =~ /^\d+$/; + return unless $event->{recurrence_count} =~ /^\d+$/; + return unless $event->{rerun} =~ /^\d+$/; + + my $bind_values = []; push @$bind_values, $event->{recurrence}; push @$bind_values, $event->{recurrence_count}; push @$bind_values, $event->{rerun}; push @$bind_values, $event->{id}; - my $update_sql=qq{ + my $update_sql = qq{ update calcms_events set recurrence=?, recurrence_count=?, rerun=? where id=? }; + #print STDERR $update_sql."\n".Dumper($bind_values)."\n"; - my $dbh=db::connect($config); - db::put($dbh, $update_sql, $bind_values); + my $dbh = db::connect($config); + db::put( $dbh, $update_sql, $bind_values ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/series_dates.pm b/lib/calcms/series_dates.pm index 545e938..89f5f10 100644 --- a/lib/calcms/series_dates.pm +++ b/lib/calcms/series_dates.pm @@ -1,93 +1,93 @@ -package series_dates; +package series_dates; use warnings "all"; use strict; use Data::Dumper; -use Date::Calc; -use time; -use db; -use log; -use studio_timeslot_dates; -use series_schedule; +use Date::Calc(); +use time(); +use db(); +use log(); +use studio_timeslot_dates(); +use series_schedule(); # schedule dates for series_schedule # table: calcms_series_dates # columns: id, studio_id, series_id, start(datetime), end(datetime) # TODO: delete column schedule_id require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete get_dates get_series); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete get_dates get_series); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_series_dates'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_series_dates' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } # get all series_dates for studio_id and series_id within given time range # calculate start_date, end_date, weeday, day from start and end(datetime) -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{start_at}) && ($condition->{start_at} ne '')){ - push @conditions, 'start=?'; + if ( ( defined $condition->{start_at} ) && ( $condition->{start_at} ne '' ) ) { + push @conditions, 'start=?'; push @bind_values, $condition->{start_at}; } - if ((defined $condition->{from}) && ($condition->{from} ne '')){ - push @conditions, 'start_date>=?'; + if ( ( defined $condition->{from} ) && ( $condition->{from} ne '' ) ) { + push @conditions, 'start_date>=?'; push @bind_values, $condition->{from}; } - if ((defined $condition->{till}) && ($condition->{till} ne '')){ - push @conditions, 'end_date{till} ) && ( $condition->{till} ne '' ) ) { + push @conditions, 'end_date{till}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'id=?'; push @bind_values, $condition->{schedule_id}; } - if ((defined $condition->{exclude}) && ($condition->{exclude} ne '')){ - push @conditions, 'exclude=?'; + if ( ( defined $condition->{exclude} ) && ( $condition->{exclude} ne '' ) ) { + push @conditions, 'exclude=?'; push @bind_values, $condition->{exclude}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select date(start) start_date ,date(end) end_date ,dayname(start) weekday @@ -104,128 +104,130 @@ sub get{ $conditions order by start }; + #print STDERR $query."\n"; #print STDERR Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - for my $entry (@$entries){ - $entry->{weekday}=substr($entry->{weekday},0,2); + my $entries = db::get( $dbh, $query, \@bind_values ); + for my $entry (@$entries) { + $entry->{weekday} = substr( $entry->{weekday}, 0, 2 ); } - + return $entries; } #check if event is scheduled (on permission check) -sub is_event_scheduled{ - my $request=shift; - my $options=shift; +sub is_event_scheduled { + my $request = shift; + my $options = shift; - return 0 unless defined $options->{project_id}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{series_id}; - return 0 unless defined $options->{start_at}; + return 0 unless defined $options->{project_id}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{series_id}; + return 0 unless defined $options->{start_at}; - my $config = $request->{config}; - my $schedules=series_dates::get( - $config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - start_at => $options->{start_at} - } - ); - return 0 if(@$schedules!=1); - return 1; + my $config = $request->{config}; + my $schedules = series_dates::get( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + start_at => $options->{start_at} + } + ); + return 0 if ( @$schedules != 1 ); + return 1; } - #get all series for given studio_id, time range and search -sub get_series{ - my $config=shift; - my $condition=shift; +sub get_series { + my $config = shift; + my $condition = shift; - my $date_range_include=0; - $date_range_include=1 if (defined $condition->{date_range_include}) && ($condition->{date_range_include}==1); + my $date_range_include = 0; + $date_range_include = 1 if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - push @conditions, 'd.series_id=s.id'; -# push @conditions, 'd.studio_id=s.studio_id'; + push @conditions, 'd.series_id=s.id'; - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'd.project_id=?'; + # push @conditions, 'd.studio_id=s.studio_id'; + + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'd.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'd.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'd.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'd.series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'd.series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{start_at}) && ($condition->{start_at} ne '')){ - push @conditions, 'd.start=?'; - push @bind_values, $condition->{start_at}; + if ( ( defined $condition->{start_at} ) && ( $condition->{start_at} ne '' ) ) { + push @conditions, 'd.start=?'; + push @bind_values, $condition->{start_at}; } - if ((defined $condition->{from}) && ($condition->{from} ne '')){ - if ($date_range_include==1){ - push @conditions, 'd.end_date>=?'; - push @bind_values, $condition->{from}; - }else{ - push @conditions, 'd.start_date>=?'; - push @bind_values, $condition->{from}; - } + if ( ( defined $condition->{from} ) && ( $condition->{from} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'd.end_date>=?'; + push @bind_values, $condition->{from}; + } else { + push @conditions, 'd.start_date>=?'; + push @bind_values, $condition->{from}; + } } - if ((defined $condition->{till}) && ($condition->{till} ne '')){ - if ($date_range_include==1){ - push @conditions, 'd.start_date<=?'; - push @bind_values, $condition->{till}; - }else{ - push @conditions, 'd.end_date{till}; - } + if ( ( defined $condition->{till} ) && ( $condition->{till} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'd.start_date<=?'; + push @bind_values, $condition->{till}; + } else { + push @conditions, 'd.end_date{till}; + } } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'd.id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'd.id=?'; push @bind_values, $condition->{schedule_id}; } - if ((defined $condition->{exclude}) && ($condition->{exclude} ne '')){ - push @conditions, 'd.exclude=?'; + if ( ( defined $condition->{exclude} ) && ( $condition->{exclude} ne '' ) ) { + push @conditions, 'd.exclude=?'; push @bind_values, $condition->{exclude}; } - my $search_cond=''; - if ((defined $condition->{search}) && ($condition->{search} ne'')){ - my $search=lc $condition->{search}; - $search=~s/[^a-z0-9\_\.\-\:\!öäüßÖÄÜ \&]/%/; - $search=~s/\%+/\%/; - $search=~s/^[\%\s]+//; - $search=~s/[\%\s]+$//; - if ($search ne ''){ - $search='%'.$search.'%'; - my @attr=('s.title', 's.series_name', 's.excerpt', 's.category', 's.content'); - push @conditions, "(".join(" or ", map {'lower('.$_.') like ?'} @attr ).")"; - for my $attr (@attr){ - push @bind_values,$search; + my $search_cond = ''; + if ( ( defined $condition->{search} ) && ( $condition->{search} ne '' ) ) { + my $search = lc $condition->{search}; + $search =~ s/[^a-z0-9\_\.\-\:\!öäüßÖÄÜ \&]/%/; + $search =~ s/\%+/\%/; + $search =~ s/^[\%\s]+//; + $search =~ s/[\%\s]+$//; + if ( $search ne '' ) { + $search = '%' . $search . '%'; + my @attr = ( 's.title', 's.series_name', 's.excerpt', 's.category', 's.content' ); + push @conditions, "(" . join( " or ", map { 'lower(' . $_ . ') like ?' } @attr ) . ")"; + for my $attr (@attr) { + push @bind_values, $search; } } } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select date(d.start) start_date ,date(d.end) end_date ,dayname(d.start) weekday @@ -246,318 +248,333 @@ sub get_series{ order by start }; - my $entries=db::get($dbh, $query, \@bind_values); + my $entries = db::get( $dbh, $query, \@bind_values ); - for my $entry (@$entries){ - $entry->{weekday} = substr($entry->{weekday},0,2); + for my $entry (@$entries) { + $entry->{weekday} = substr( $entry->{weekday}, 0, 2 ); } - # add series schedule - $entries=series_dates::addSeriesScheduleAttributes($config, $entries); + # add series schedule + $entries = series_dates::addSeriesScheduleAttributes( $config, $entries ); return $entries; } -sub addSeriesScheduleAttributes{ - my $config=shift; - my $entries=shift; +sub addSeriesScheduleAttributes { + my $config = shift; + my $entries = shift; - my $scheduleIds={}; - # get series schedule ids used at entries - for my $entry (@$entries){ - $scheduleIds->{$entry->{series_schedule_id}}=1; + my $scheduleIds = {}; + + # get series schedule ids used at entries + for my $entry (@$entries) { + $scheduleIds->{ $entry->{series_schedule_id} } = 1; } - my @scheduleIds=keys %$scheduleIds; - return $entries if scalar(@scheduleIds)==0; + my @scheduleIds = keys %$scheduleIds; + return $entries if scalar(@scheduleIds) == 0; - # get schedules with schedule ids - my $schedules=series_schedule::get($config, { - schedule_ids => \@scheduleIds - }); + # get schedules with schedule ids + my $schedules = series_schedule::get( + $config, + { + schedule_ids => \@scheduleIds + } + ); - # get schedules by id - my $scheduleById={}; - for my $schedule (@$schedules){ - $scheduleById->{$schedule->{schedule_id}}=$schedule; - } + # get schedules by id + my $scheduleById = {}; + for my $schedule (@$schedules) { + $scheduleById->{ $schedule->{schedule_id} } = $schedule; + } - for my $entry (@$entries){ - $entry->{frequency} = $scheduleById->{$entry->{series_schedule_id}}->{frequency}; - $entry->{period_type} = $scheduleById->{$entry->{series_schedule_id}}->{period_type}; - } + for my $entry (@$entries) { + $entry->{frequency} = $scheduleById->{ $entry->{series_schedule_id} }->{frequency}; + $entry->{period_type} = $scheduleById->{ $entry->{series_schedule_id} }->{period_type}; + } - return $entries; + return $entries; } - #update series dates for all schedules of a series and studio_id -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; - return undef unless defined $entry->{project_id} ; - return undef unless defined $entry->{studio_id} ; - return undef unless defined $entry->{series_id} ; + return undef unless defined $entry->{project_id}; + return undef unless defined $entry->{studio_id}; + return undef unless defined $entry->{series_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); #delete all dates for series (by studio and series id) - series_dates::delete($config, $entry); + series_dates::delete( $config, $entry ); - my $day_start=$config->{date}->{day_starting_hour}; + my $day_start = $config->{date}->{day_starting_hour}; #get all schedules for series ordered by exclude, date - my $schedules=series_schedule::get($config, { - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - series_id => $entry->{series_id}, - }); - + my $schedules = series_schedule::get( + $config, + { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + series_id => $entry->{series_id}, + } + ); + #add scheduled series dates and remove exluded dates - my $series_dates={}; + my $series_dates = {}; - #TODO:set schedules exclude to 0 if not 1 - #insert all normal dates (not excludes) - for my $schedule (@$schedules){ - my $dates=get_schedule_dates($schedule, {exclude => 0}); - for my $date (@$dates){ - $date->{exclude}=0; - $series_dates->{$date->{start}}=$date; - #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); + #TODO:set schedules exclude to 0 if not 1 + #insert all normal dates (not excludes) + for my $schedule (@$schedules) { + my $dates = get_schedule_dates( $schedule, { exclude => 0 } ); + for my $date (@$dates) { + $date->{exclude} = 0; + $series_dates->{ $date->{start} } = $date; + + #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); } } - #insert / overwrite all exlude dates - for my $schedule (@$schedules){ - my $dates=get_schedule_dates($schedule, {exclude => 1}); - for my $date (@$dates){ - $date->{exclude}=1; - $series_dates->{$date->{start}}=$date; - #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); + #insert / overwrite all exlude dates + for my $schedule (@$schedules) { + my $dates = get_schedule_dates( $schedule, { exclude => 1 } ); + for my $date (@$dates) { + $date->{exclude} = 1; + $series_dates->{ $date->{start} } = $date; + + #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); } } - #print STDERR Dumper($series_dates->{'2014-02-05 19:00:00'}); + #print STDERR Dumper($series_dates->{'2014-02-05 19:00:00'}); - my $request={ - config => $config - }; + my $request = { config => $config }; + + my $i = 0; + my $j = 0; + for my $date ( keys %$series_dates ) { + my $series_date = $series_dates->{$date}; - my $i=0; - my $j=0; - for my $date (keys %$series_dates){ - my $series_date=$series_dates->{$date}; #insert date - my $entry={ - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - series_id => $entry->{series_id}, - series_schedule_id => $series_date->{series_schedule_id}, - start => $series_date->{start}, - end => $series_date->{end}, - exclude => $series_date->{exclude}, - }; - if(studio_timeslot_dates::can_studio_edit_events($config, $entry)==1){ # by studio_id, start, end - $entry->{start_date}= time::add_hours_to_datetime($entry->{start}, -$day_start); - $entry->{end_date}= time::add_hours_to_datetime($entry->{end}, -$day_start); - db::insert($dbh, 'calcms_series_dates', $entry); - #print STDERR "$entry->{start_date}\n"; - $i++; - }else{ - $j++; - #print STDERR Dumper($entry); - } - } - #print STDERR "$i series_dates updates\n"; - return $j." dates out of studio times, ".$i; + my $entry = { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + series_id => $entry->{series_id}, + series_schedule_id => $series_date->{series_schedule_id}, + start => $series_date->{start}, + end => $series_date->{end}, + exclude => $series_date->{exclude}, + }; + if ( studio_timeslot_dates::can_studio_edit_events( $config, $entry ) == 1 ) { # by studio_id, start, end + $entry->{start_date} = time::add_hours_to_datetime( $entry->{start}, -$day_start ); + $entry->{end_date} = time::add_hours_to_datetime( $entry->{end}, -$day_start ); + db::insert( $dbh, 'calcms_series_dates', $entry ); + + #print STDERR "$entry->{start_date}\n"; + $i++; + } else { + $j++; + + #print STDERR Dumper($entry); + } + } + + #print STDERR "$i series_dates updates\n"; + return $j . " dates out of studio times, " . $i; } -sub get_schedule_dates{ - my $schedule=shift; - my $options=shift; +sub get_schedule_dates { + my $schedule = shift; + my $options = shift; - my $is_exclude=$options->{exclude}||0; - my $dates=[]; - return $dates if (($is_exclude eq'1') && ($schedule->{exclude}ne'1')); - return $dates if (($is_exclude eq'0') && ($schedule->{exclude}eq'1')); + my $is_exclude = $options->{exclude} || 0; + my $dates = []; + return $dates if ( ( $is_exclude eq '1' ) && ( $schedule->{exclude} ne '1' ) ); + return $dates if ( ( $is_exclude eq '0' ) && ( $schedule->{exclude} eq '1' ) ); - if ($schedule->{period_type}eq'single'){ - $dates=get_single_date($schedule->{start}, $schedule->{duration}) ; - }elsif($schedule->{period_type}eq'days'){ - $dates=get_dates($schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{frequency}) ; - }elsif($schedule->{period_type}eq'week_of_month'){ - $dates=get_week_of_month_dates($schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{week_of_month}, $schedule->{weekday}, $schedule->{month}, $schedule->{nextDay}); - }else{ - print STDERR "unknown schedule period_type\n"; - } + if ( $schedule->{period_type} eq 'single' ) { + $dates = get_single_date( $schedule->{start}, $schedule->{duration} ); + } elsif ( $schedule->{period_type} eq 'days' ) { + $dates = get_dates( $schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{frequency} ); + } elsif ( $schedule->{period_type} eq 'week_of_month' ) { + $dates = get_week_of_month_dates( + $schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{week_of_month}, + $schedule->{weekday}, $schedule->{month}, $schedule->{nextDay} + ); + } else { + print STDERR "unknown schedule period_type\n"; + } - # set series schedule id - for my $date (@$dates){ - $date->{series_schedule_id}=$schedule->{schedule_id}; - } - return $dates; + # set series schedule id + for my $date (@$dates) { + $date->{series_schedule_id} = $schedule->{schedule_id}; + } + return $dates; } +sub get_week_of_month_dates { + my $start = shift; # datetime string + my $end = shift; # datetime string + my $duration = shift; # in minutes + my $week = shift; # every nth week of month + my $weekday = shift; # weekday [1..7] + my $frequency = shift; # every 1st,2nd,3th time + my $nextDay = shift; # add 24 hours to start, (for night hours at last weekday of month) -sub get_week_of_month_dates{ - my $start =shift; # datetime string - my $end =shift; # datetime string - my $duration =shift; # in minutes - my $week =shift; # every nth week of month - my $weekday =shift; # weekday [1..7] - my $frequency =shift; # every 1st,2nd,3th time - my $nextDay =shift; # add 24 hours to start, (for night hours at last weekday of month) + return undef if $start eq ''; + return undef if $end eq ''; + return undef if $duration eq ''; + return undef if $week eq ''; + return undef if $weekday eq ''; + return undef if $frequency eq ''; + return undef if $frequency == 0; - return undef if $start eq''; - return undef if $end eq''; - return undef if $duration eq''; - return undef if $week eq''; - return undef if $weekday eq''; - return undef if $frequency eq''; - return undef if $frequency==0; + my $start_dates = time::get_nth_weekday_in_month( $start, $end, $week, $weekday ); - my $start_dates=time::get_nth_weekday_in_month($start, $end, $week, $weekday); + if ( ( defined $nextDay ) && ( $nextDay > 0 ) ) { + for ( my $i = 0 ; $i < @$start_dates ; $i++ ) { + $start_dates->[$i] = time::add_hours_to_datetime( $start_dates->[$i], 24 ); + } + } - if ((defined $nextDay) && ($nextDay>0)){ - for (my $i=0;$i<@$start_dates;$i++){ - $start_dates->[$i]=time::add_hours_to_datetime($start_dates->[$i],24); - } - } + my $results = []; - my $results=[]; - - my $c=-1; - for my $start_datetime (@$start_dates){ - $c++; - my @start = @{time::datetime_to_array($start_datetime)}; - next unless @start>=6; - next if (($c % $frequency)!=0); + my $c = -1; + for my $start_datetime (@$start_dates) { + $c++; + my @start = @{ time::datetime_to_array($start_datetime) }; + next unless @start >= 6; + next if ( ( $c % $frequency ) != 0 ); my @end_datetime = Date::Calc::Add_Delta_DHMS( - $start[0], $start[1], $start[2], # start date - $start[3], $start[4], $start[5], # start time - 0, 0, $duration, 0 # delta days, hours, minutes, seconds + $start[0], $start[1], $start[2], # start date + $start[3], $start[4], $start[5], # start time + 0, 0, $duration, 0 # delta days, hours, minutes, seconds ); - my $end_datetime=time::array_to_datetime(\@end_datetime); + my $end_datetime = time::array_to_datetime( \@end_datetime ); - push @$results, { - start => $start_datetime, - end => $end_datetime - }; - } - return $results; + push @$results, + { + start => $start_datetime, + end => $end_datetime + }; + } + return $results; } #add duration to a single date -sub get_single_date{ +sub get_single_date { my $start_datetime = shift; - my $duration = shift; + my $duration = shift; - my @start = @{time::datetime_to_array($start_datetime)}; - return unless @start>=6; + my @start = @{ time::datetime_to_array($start_datetime) }; + return unless @start >= 6; my @end_datetime = Date::Calc::Add_Delta_DHMS( - $start[0], $start[1], $start[2], # start date + $start[0], $start[1], $start[2], # start date $start[3], $start[4], $start[5], # start time 0, 0, $duration, 0 # delta days, hours, minutes, seconds ); - my $date={ - start => $start_datetime, - end => time::array_to_datetime(\@end_datetime) - }; + my $date = { + start => $start_datetime, + end => time::array_to_datetime( \@end_datetime ) + }; return [$date]; } #calculate all dates between start_datetime and end_date with duration(minutes) and frequency(days) -sub get_dates{ +sub get_dates { my $start_datetime = shift; my $end_date = shift; - my $duration = shift; # in minutes - my $frequency = shift; # in days - #print "start_datetime:$start_datetime end_date:$end_date duration:$duration frequency:$frequency\n"; + my $duration = shift; # in minutes + my $frequency = shift; # in days + #print "start_datetime:$start_datetime end_date:$end_date duration:$duration frequency:$frequency\n"; - my @start = @{time::datetime_to_array($start_datetime)}; - return unless @start>=6; - my @start_date = ($start[0], $start[1], $start[2]); - my $start_time = sprintf('%02d:%02d:%02d', $start[3], $start[4], $start[5]); + my @start = @{ time::datetime_to_array($start_datetime) }; + return unless @start >= 6; + my @start_date = ( $start[0], $start[1], $start[2] ); + my $start_time = sprintf( '%02d:%02d:%02d', $start[3], $start[4], $start[5] ); - #print STDERR "$start_datetime,$end_date,$duration,$frequency\n"; + #print STDERR "$start_datetime,$end_date,$duration,$frequency\n"; - #return on single date - my $date={}; - $date->{start}= sprintf("%04d-%02d-%02d",@start_date).' '.$start_time; + #return on single date + my $date = {}; + $date->{start} = sprintf( "%04d-%02d-%02d", @start_date ) . ' ' . $start_time; return undef if $duration eq ''; - return undef if (($frequency eq '')||($end_date eq'')); + return undef if ( ( $frequency eq '' ) || ( $end_date eq '' ) ); - #continue on recurring date - my @end = @{time::datetime_to_array($end_date)}; - return unless @end>=3; - my @end_date = ($end[0], $end[1], $end[2]); + #continue on recurring date + my @end = @{ time::datetime_to_array($end_date) }; + return unless @end >= 3; + my @end_date = ( $end[0], $end[1], $end[2] ); - my $today=time::time_to_date(); - my ($year, $month, $day)=split(/\-/,$today); + my $today = time::time_to_date(); + my ( $year, $month, $day ) = split( /\-/, $today ); - my $dates=[]; - return $dates if ($end_date lt $today); - return $dates if ($frequency<1); + my $dates = []; + return $dates if ( $end_date lt $today ); + return $dates if ( $frequency < 1 ); + + my $j = Date::Calc::Delta_Days( @start_date, @end_date ); + my $c = 0; + for ( my $i = 0 ; $i <= $j ; $i += $frequency ) { + my @date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], $i ); + my $date = {}; + $date->{start} = sprintf( "%04d-%02d-%02d", @date ) . ' ' . $start_time; - my $j = Date::Calc::Delta_Days(@start_date, @end_date); - my $c=0; - for (my $i = 0; $i <= $j; $i+=$frequency ){ - my @date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], $i); - my $date={}; - $date->{start}=sprintf("%04d-%02d-%02d",@date).' '.$start_time; - #if($date->{start} gt $today){ - my @end_datetime = Date::Calc::Add_Delta_DHMS( - $date[0], $date[1], $date[2], # start date - $start[3], $start[4], $start[5], # start time - 0, 0, $duration, 0 # delta days, hours, minutes, seconds - ); - $date->{end}=time::array_to_datetime(\@end_datetime); - push @$dates,$date; + my @end_datetime = Date::Calc::Add_Delta_DHMS( + $date[0], $date[1], $date[2], # start date + $start[3], $start[4], $start[5], # start time + 0, 0, $duration, 0 # delta days, hours, minutes, seconds + ); + $date->{end} = time::array_to_datetime( \@end_datetime ); + push @$dates, $date; + #} - last if ($c>200); + last if ( $c > 200 ); $c++; } return $dates; } #remove all series_dates for studio_id and series_id -sub delete{ - my $config=shift; - my $entry=shift; - +sub delete { + my $config = shift; + my $entry = shift; + return unless defined $entry->{project_id}; return unless defined $entry->{studio_id}; return unless defined $entry->{series_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ delete from calcms_series_dates where project_id=? and studio_id=? and series_id=? }; my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } # get all series dates where no event has been created for -sub getDatesWithoutEvent{ - my $config = shift; - my $options = shift; +sub getDatesWithoutEvent { + my $config = shift; + my $options = shift; return unless defined $options->{project_id}; return unless defined $options->{studio_id}; return unless defined $options->{from}; return unless defined $options->{till}; - - my $dbh=db::connect($config); - - my $query=q{ + + my $dbh = db::connect($config); + + my $query = q{ SELECT sd.* FROM calcms_series_dates sd LEFT JOIN calcms_events e on (sd.start = e.start) @@ -569,15 +586,15 @@ sub getDatesWithoutEvent{ and sd.end < ? order by sd.start }; - + my $bind_values = [ $options->{project_id}, $options->{studio_id}, $options->{from}, $options->{till} ]; - my $entries = db::get($dbh, $query, $bind_values); + my $entries = db::get( $dbh, $query, $bind_values ); return $entries; - + } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/series_events.pm b/lib/calcms/series_events.pm index 328bf08..f975660 100644 --- a/lib/calcms/series_events.pm +++ b/lib/calcms/series_events.pm @@ -1,110 +1,111 @@ -package series_events; +package series_events; use warnings "all"; use strict; use Data::Dumper; use Date::Calc; -use markup; - -use db; -use log; -use time; -use uac; -use events; -use series; -use series_dates; -use studios; -use studio_timeslot_dates; -use event_history; -use images; +use markup(); +use db(); +use log(); +use time(); +use uac(); +use events(); +use series(); +use series_dates(); +use studios(); +use studio_timeslot_dates(); +use event_history(); +use images(); # check permissions, insert and update events related to series require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - check_permission - save_content - save_event_time - insert_event - delete_event - set_playout_status + check_permission + save_content + save_event_time + insert_event + delete_event + set_playout_status ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -# update main fields of the event by id +# update main fields of the event by id # do not check for project,studio,series # all changed columns are returned for history handling -sub save_content{ - my $config=shift; - my $entry=shift; +sub save_content { + my $config = shift; + my $entry = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - return undef unless(defined $entry->{id}); + return undef unless ( defined $entry->{id} ); - for my $attr (keys %$entry){ - next unless defined $entry->{$attr}; - $entry->{$attr}=~s/^\s+//g; - $entry->{$attr}=~s/\s+$//g; + for my $attr ( keys %$entry ) { + next unless defined $entry->{$attr}; + $entry->{$attr} =~ s/^\s+//g; + $entry->{$attr} =~ s/\s+$//g; } - for my $attr ('image', 'series_image'){ - $entry->{$attr} = images::normalizeName($entry->{$attr}) if defined $entry->{$attr}; - } - - #print STDERR Dumper(\$entry->{content}); - for my $attr ('content', 'topic'){ - if (defined $entry->{$attr}){ - $entry->{'html_'.$attr}=markup::creole_to_html($entry->{$attr}); - #$entry->{'html_'.$attr}=~s/([^\>])\n+([^\<])/$1$2/g; - #$entry->{'html_'.$attr}=~s/^\s*(

    )?//g; - #$entry->{'html_'.$attr}=~s/(<\/p>)?\s*$//g; - } + for my $attr ( 'image', 'series_image' ) { + $entry->{$attr} = images::normalizeName( $entry->{$attr} ) if defined $entry->{$attr}; } - #print STDERR Dumper(\$entry->{series_image}); - #print STDERR "ok2\n"; - #return; - $entry->{modified_at}= time::time_to_datetime(time()); - #return; - #update only existing atributes + #print STDERR Dumper(\$entry->{content}); + for my $attr ( 'content', 'topic' ) { + if ( defined $entry->{$attr} ) { + $entry->{ 'html_' . $attr } = markup::creole_to_html( $entry->{$attr} ); - #TODO: double check series_name (needed for reassignment but not for editing...) - my @keys=(); - for my $key ('series_name', 'title', 'excerpt', 'content', 'html_content', - 'user_title', 'user_excerpt', 'topic', 'html_topic', - 'episode', - 'image', 'image_label', - 'series_image', 'series_image_label', - 'podcast_url', 'archive_url', - 'live', 'published', 'playout', 'archived', 'rerun', 'draft', 'disable_event_sync', - 'modified_by' - ){ - push @keys, $key if defined $entry->{$key}; + #$entry->{'html_'.$attr}=~s/([^\>])\n+([^\<])/$1$2/g; + #$entry->{'html_'.$attr}=~s/^\s*(

    )?//g; + #$entry->{'html_'.$attr}=~s/(<\/p>)?\s*$//g; + } } - $entry->{episode} = undef if (defined $entry->{episode}) && ($entry->{episode} eq '0'); - $entry->{published} = 0 if (defined $entry->{draft}) && ($entry->{draft} eq '1'); - my $values =join(",", map {$_.'=?'} (@keys)); - my @bind_values =map {$entry->{$_}} (@keys); + #print STDERR Dumper(\$entry->{series_image}); + #print STDERR "ok2\n"; + #return; + $entry->{modified_at} = time::time_to_datetime( time() ); - push @bind_values,$entry->{id}; - my $query=qq{ + #return; + #update only existing atributes + + #TODO: double check series_name (needed for reassignment but not for editing...) + my @keys = (); + for my $key ( + 'series_name', 'title', 'excerpt', 'content', + 'html_content', 'user_title', 'user_excerpt', 'topic', + 'html_topic', 'episode', 'image', 'image_label', + 'series_image', 'series_image_label', 'podcast_url', 'archive_url', + 'live', 'published', 'playout', 'archived', + 'rerun', 'draft', 'disable_event_sync', 'modified_by' + ) + { + push @keys, $key if defined $entry->{$key}; + } + $entry->{episode} = undef if ( defined $entry->{episode} ) && ( $entry->{episode} eq '0' ); + $entry->{published} = 0 if ( defined $entry->{draft} ) && ( $entry->{draft} eq '1' ); + + my $values = join( ",", map { $_ . '=?' } (@keys) ); + my @bind_values = map { $entry->{$_} } (@keys); + + push @bind_values, $entry->{id}; + my $query = qq{ update calcms_events set $values where id=? }; #print STDERR "update:".$query.Dumper(\@bind_values); - my $result=db::put($dbh, $query, \@bind_values); - unless (defined $result){ - print STDERR "error on updating event\n" ; - return undef; + my $result = db::put( $dbh, $query, \@bind_values ); + unless ( defined $result ) { + print STDERR "error on updating event\n"; + return undef; } #print STDERR "result=$result\n"; @@ -115,69 +116,70 @@ sub save_content{ # save event time by id # do not check project, studio, series # for history handling all changed columns are returned -sub save_event_time{ - my $config=shift; - my $entry=shift; +sub save_event_time { + my $config = shift; + my $entry = shift; - return undef unless(defined $entry->{id}); - return undef unless(defined $entry->{duration}); - return undef unless(defined $entry->{start_date}); + return undef unless ( defined $entry->{id} ); + return undef unless ( defined $entry->{duration} ); + return undef unless ( defined $entry->{start_date} ); - my $dbh=db::connect($config); - my $event={ + my $dbh = db::connect($config); + my $event = { id => $entry->{id}, start => $entry->{start_date}, - end => time::add_minutes_to_datetime($entry->{start_date}, $entry->{duration}) + end => time::add_minutes_to_datetime( $entry->{start_date}, $entry->{duration} ) }; - - my $day_start=$config->{date}->{day_starting_hour}; - my $event_hour=int((split(/[\-\:\sT]/,$event->{start}))[3]); - my @update_columns=(); - my $bind_values=[]; - push @update_columns,'start=?'; - push @$bind_values,$event->{start}; + my $day_start = $config->{date}->{day_starting_hour}; + my $event_hour = int( ( split( /[\-\:\sT]/, $event->{start} ) )[3] ); + + my @update_columns = (); + my $bind_values = []; + push @update_columns, 'start=?'; + push @$bind_values, $event->{start}; push @update_columns, 'end=?'; push @$bind_values, $event->{end}; - # add start date - my $start_date= time::add_hours_to_datetime($event->{start}, -$day_start); + # add start date + my $start_date = time::add_hours_to_datetime( $event->{start}, -$day_start ); push @update_columns, 'start_date=?'; push @$bind_values, $start_date; - $event->{start_date} =$start_date; + $event->{start_date} = $start_date; - # add end date - my $end_date= time::add_hours_to_datetime($event->{end}, -$day_start); + # add end date + my $end_date = time::add_hours_to_datetime( $event->{end}, -$day_start ); push @update_columns, 'end_date=?'; push @$bind_values, $end_date; - $event->{end_date} = $end_date; + $event->{end_date} = $end_date; - my $update_columns=join(",\n", @update_columns); - my $update_sql=qq{ + my $update_columns = join( ",\n", @update_columns ); + my $update_sql = qq{ update calcms_events set $update_columns where id=? }; push @$bind_values, $event->{id}; + #print STDERR $update_sql."\n".Dumper($bind_values)."\n"; - db::put($dbh, $update_sql, $bind_values); + db::put( $dbh, $update_sql, $bind_values ); return $event; } -sub set_playout_status{ - my $config=shift; - my $entry=shift; +sub set_playout_status { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{start}; return undef unless defined $entry->{playout}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - # check if event is assigned to project and studio - my $sql=qq{ + # check if event is assigned to project and studio + my $sql = qq{ select se.event_id event_id from calcms_series_events se, calcms_events e where @@ -186,50 +188,53 @@ sub set_playout_status{ and se.project_id=? and se.studio_id=? }; - my $bind_values=[$entry->{start}, $entry->{project_id}, $entry->{studio_id}]; - #print STDERR Dumper($sql).Dumper($bind_values); - my $events=db::get($dbh, $sql, $bind_values); - #print STDERR Dumper($events); - return undef if scalar(@$events)!=1; - my $event_id=$events->[0]->{event_id}; - $sql=qq{ + my $bind_values = [ $entry->{start}, $entry->{project_id}, $entry->{studio_id} ]; + + #print STDERR Dumper($sql).Dumper($bind_values); + my $events = db::get( $dbh, $sql, $bind_values ); + + #print STDERR Dumper($events); + return undef if scalar(@$events) != 1; + my $event_id = $events->[0]->{event_id}; + $sql = qq{ update calcms_events set playout=? where id=? and start=? }; - $bind_values=[$entry->{playout}, $event_id, $entry->{start}]; + $bind_values = [ $entry->{playout}, $event_id, $entry->{start} ]; + #print STDERR $sql."\n".Dumper($bind_values)."\n"; - my $result=db::put($dbh, $sql, $bind_values); + my $result = db::put( $dbh, $sql, $bind_values ); return $result; } # is event assigned to project, studio and series? -sub is_event_assigned{ - my $config=shift; - my $entry=shift; +sub is_event_assigned { + my $config = shift; + my $entry = shift; return 0 unless defined $entry->{project_id}; return 0 unless defined $entry->{studio_id}; return 0 unless defined $entry->{series_id}; return 0 unless defined $entry->{event_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $sql=q{ + my $sql = q{ select * from calcms_series_events where project_id=? and studio_id=? and series_id=? and event_id=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id}]; - my $results=db::get($dbh, $sql, $bind_values); + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{event_id} ]; + my $results = db::get( $dbh, $sql, $bind_values ); - return 1 if @$results>=1; - return 0; + return 1 if @$results >= 1; + return 0; } -sub delete_event{ - my $config=shift; - my $entry=shift; +sub delete_event { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; @@ -237,278 +242,298 @@ sub delete_event{ return undef unless defined $entry->{event_id}; return undef unless defined $entry->{user}; - #is event assigned to project, studio and series? - unless(is_event_assigned($config, $entry)==1){ - print STDERR "cannot delete event with project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}"; - return 0; - } + #is event assigned to project, studio and series? + unless ( is_event_assigned( $config, $entry ) == 1 ) { + print STDERR +"cannot delete event with project_id=$entry->{project_id}, studio_id=$entry->{studio_id}, series_id=$entry->{series_id}, event_id=$entry->{event_id}"; + return 0; + } - event_history::insert_by_event_id($config, $entry); + event_history::insert_by_event_id( $config, $entry ); - #delete the association - series::unassign_event($config, $entry); + #delete the association + series::unassign_event( $config, $entry ); - # delete the event - my $dbh=db::connect($config); - my $sql=q{ + # delete the event + my $dbh = db::connect($config); + my $sql = q{ delete from calcms_events where id=? }; - my $bind_values=[$entry->{event_id}]; - db::put($dbh, $sql, $bind_values); + my $bind_values = [ $entry->{event_id} ]; + db::put( $dbh, $sql, $bind_values ); - return 1; + return 1; } - #check permissions # options: conditions (studio_id, series_id,...) # key permission: permissions to be checked (one of) # key check_for: user, studio, series, events, schedule # return error text or 1 if okay -sub check_permission{ - my $request=shift; - my $options=shift; +sub check_permission { + my $request = shift; + my $options = shift; - return "missing permission at check" unless defined $options->{permission}; - return "missing check_for at check" unless defined $options->{check_for}; - return "missing user at check" unless defined $request->{user}; - return "missing project_id at check" unless defined $options->{project_id}; - return "missing studio_id at check" unless defined $options->{studio_id}; - return "missing series_id at check" unless defined $options->{series_id}; + return "missing permission at check" unless defined $options->{permission}; + return "missing check_for at check" unless defined $options->{check_for}; + return "missing user at check" unless defined $request->{user}; + return "missing project_id at check" unless defined $options->{project_id}; + return "missing studio_id at check" unless defined $options->{studio_id}; + return "missing series_id at check" unless defined $options->{series_id}; my $permissions = $request->{permissions}; my $config = $request->{config}; - my $studio_check=studios::check($config, $options); - return $studio_check if($studio_check ne '1'); - print STDERR "check studio ok\n"; + my $studio_check = studios::check( $config, $options ); + return $studio_check if ( $studio_check ne '1' ); + print STDERR "check studio ok\n"; - my $project_check=project::check($config, $options); - return $project_check if($project_check ne '1'); - print STDERR "check project ok\n"; - - #check if permissions are set (like create_event) - my $found=0; - for my $permission (split /\,/,$options->{permission}){ - $found=1 if ((defined $permissions->{$permission})&&($permissions->{$permission})eq'1'); + my $project_check = project::check( $config, $options ); + return $project_check if ( $project_check ne '1' ); + print STDERR "check project ok\n"; + + #check if permissions are set (like create_event) + my $found = 0; + for my $permission ( split /\,/, $options->{permission} ) { + $found = 1 if ( ( defined $permissions->{$permission} ) && ( $permissions->{$permission} ) eq '1' ); } - return 'missing permission to '.$options->{permission} if $found==0; - delete $options->{permission}; + return 'missing permission to ' . $options->{permission} if $found == 0; + delete $options->{permission}; - #convert check list to hash - my $check={}; - for my $permission (@{$options->{check_for}}){ - $check->{$permission}=1; + #convert check list to hash + my $check = {}; + for my $permission ( @{ $options->{check_for} } ) { + $check->{$permission} = 1; } delete $options->{check_for}; - # is project assigned to studio - return "studio is not assigned to project" unless project::is_studio_assigned($config, $options)==1; + # is project assigned to studio + return "studio is not assigned to project" unless project::is_studio_assigned( $config, $options ) == 1; - #get studio names - my $studios=studios::get($config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id} - }); - return "unknown studio" unless defined $studios; - return "unknown studio" unless (@$studios==1); - my $studio=$studios->[0]; - my $studio_name=$studio->{name}||''; + #get studio names + my $studios = studios::get( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id} + } + ); + return "unknown studio" unless defined $studios; + return "unknown studio" unless ( @$studios == 1 ); + my $studio = $studios->[0]; + my $studio_name = $studio->{name} || ''; - #get series names - my $series=series::get($config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id} - }); - my $series_name=$series->[0]->{series_name}||''; - $series_name.=' - '.$series->[0]->{title} if $series->[0]->{series_name} ne ''; - - my $draft = 0; - $draft = 1 if (defined $options->{draft}) && ($options->{draft} == 1 ); + #get series names + my $series = series::get( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id} + } + ); + my $series_name = $series->[0]->{series_name} || ''; + $series_name .= ' - ' . $series->[0]->{title} if $series->[0]->{series_name} ne ''; - #check all items from checklist - if((defined $check->{user})&&(uac::is_user_assigned_to_studio($request, $options)==0)){ + my $draft = 0; + $draft = 1 if ( defined $options->{draft} ) && ( $options->{draft} == 1 ); + + #check all items from checklist + if ( ( defined $check->{user} ) && ( uac::is_user_assigned_to_studio( $request, $options ) == 0 ) ) { return "User '$request->{user}' is not assigned to studio $studio_name ($options->{studio_id})"; } - if((defined $check->{studio})&&(project::is_series_assigned($config, $options)==0)){ + if ( ( defined $check->{studio} ) && ( project::is_series_assigned( $config, $options ) == 0 ) ) { return "Series '$series_name' ($options->{series_id}) is not assigned to studio '$studio_name' ($options->{studio_id})"; - } - + } + # check series and can user update events - if((defined $check->{series})&&(series::can_user_update_events($request, $options)==0)){ - return "unknown series" unless defined $series; + if ( ( defined $check->{series} ) && ( series::can_user_update_events( $request, $options ) == 0 ) ) { + return "unknown series" unless defined $series; return "User $request->{user} cannot update events for series '$series_name' ($options->{series_id})"; } - + # check series and can user create events - if((defined $check->{create_events})&&(series::can_user_create_events($request, $options)==0)){ - return "unknown series" unless defined $series; + if ( ( defined $check->{create_events} ) && ( series::can_user_create_events( $request, $options ) == 0 ) ) { + return "unknown series" unless defined $series; return "User $request->{user} cannot create events for series '$series_name' ($options->{series_id})"; } - - if( ($draft==0) && (defined $check->{studio_timeslots}) && (studio_timeslot_dates::can_studio_edit_events($config, $options)==0) ){ + + if ( ( $draft == 0 ) + && ( defined $check->{studio_timeslots} ) + && ( studio_timeslot_dates::can_studio_edit_events( $config, $options ) == 0 ) ) + { return "requested time is not assigned to studio '$studio_name' ($options->{studio_id})"; - } - - #check if event is assigned to user,project,studio,series,location - if(defined $check->{events}){ - return "missing event_id" unless defined $options->{event_id}; - my $result=series::is_event_assigned_to_user($request, $options); - return $result if $result ne '1'; - } - - # prevent editing events that are over for more than 14 days - if( ($draft==0) && (defined $check->{event_age}) ){ - if (series::is_event_older_than_days($config, { - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - event_id => $options->{event_id}, - max_age => 14 - })==1){ - return "show is over for more than 2 weeks" unless( - (defined $permissions->{update_event_after_week}) - && ($permissions->{update_event_after_week} eq '1') - ); - } - } - - #check if schedule event exists for given date - if( ($draft == 0) && (defined $check->{schedule}) ){ - return "unknown series" unless defined $series; - return "missing start_at at check_permission" unless defined $options->{start_date}; - #TODO: check "is_event_scheduled" if start_at could be moved to start_date - $options->{start_at}=$options->{start_date}; - return "No event scheduled for series '$series_name' ($options->{series_id})" if(series_dates::is_event_scheduled($request, $options)==0); } - + + #check if event is assigned to user,project,studio,series,location + if ( defined $check->{events} ) { + return "missing event_id" unless defined $options->{event_id}; + my $result = series::is_event_assigned_to_user( $request, $options ); + return $result if $result ne '1'; + } + + # prevent editing events that are over for more than 14 days + if ( ( $draft == 0 ) && ( defined $check->{event_age} ) ) { + if ( + series::is_event_older_than_days( + $config, + { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + event_id => $options->{event_id}, + max_age => 14 + } + ) == 1 + ) + { + return "show is over for more than 2 weeks" + unless ( ( defined $permissions->{update_event_after_week} ) + && ( $permissions->{update_event_after_week} eq '1' ) ); + } + } + + #check if schedule event exists for given date + if ( ( $draft == 0 ) && ( defined $check->{schedule} ) ) { + return "unknown series" unless defined $series; + return "missing start_at at check_permission" unless defined $options->{start_date}; + + #TODO: check "is_event_scheduled" if start_at could be moved to start_date + $options->{start_at} = $options->{start_date}; + return "No event scheduled for series '$series_name' ($options->{series_id})" + if ( series_dates::is_event_scheduled( $request, $options ) == 0 ); + } + return '1'; } #not handled, yet: # responsible, status, rating, podcast_url, media_url, visible, time_of_day, recurrence, reference, created_at -# category, time_of_day, +# category, time_of_day, #insert event -sub insert_event{ - my $config=shift; - my $options=shift; +sub insert_event { + my $config = shift; + my $options = shift; - my $project_id = $options->{project_id}; - my $studio = $options->{studio}; - my $serie = $options->{serie}; - my $params = $options->{event}; - my $user = $options->{user}; + my $project_id = $options->{project_id}; + my $studio = $options->{studio}; + my $serie = $options->{serie}; + my $params = $options->{event}; + my $user = $options->{user}; - return 0 unless defined $studio; - return 0 unless defined $serie; - return 0 unless defined $params; - return 0 unless defined $user; - return 0 unless defined $studio->{location}; + return 0 unless defined $studio; + return 0 unless defined $serie; + return 0 unless defined $params; + return 0 unless defined $user; + return 0 unless defined $studio->{location}; - my $projects=project::get($config, {project_id=>$project_id}); - if(@$projects==0){ - print STDERR "project not found at insert event\n"; - return 0; - } - my $projectName=$projects->[0]->{name}; - my $event={ - project => $projectName, - location => $studio->{location}, # location from studio - }; - #print '

    ';
    -    $event=series_events::add_event_dates($config, $event, $params);
    +	my $projects = project::get( $config, { project_id => $project_id } );
    +	if ( @$projects == 0 ) {
    +		print STDERR "project not found at insert event\n";
    +		return 0;
    +	}
    +	my $projectName = $projects->[0]->{name};
    +	my $event       = {
    +		project  => $projectName,
    +		location => $studio->{location},    # location from studio
    +	};
     
    -    #get event content from series
    -    for my $attr ('program', 'series_name', 'title', 'excerpt', 'content', 'topic', 'image', 'episode', 'podcast_url', 'archive_url'){
    -        $event->{$attr} = $serie->{$attr} if defined $serie->{$attr};
    -    }
    -    $event->{series_image}       = $serie->{image}   if defined $serie->{image};
    -    $event->{series_image_label} = $serie->{licence} if defined $serie->{licence};
    +	#print '
    ';
    +	$event = series_events::add_event_dates( $config, $event, $params );
     
    -    #overwrite series values from parameters
    -    for my $attr ('program', 'series_name', 'title', 'user_title', 'excerpt', 'user_except', 'content', 'topic', 'image', 'episode', 'podcast_url', 'archive_url'){
    -        $event->{$attr} = $params->{$attr} if defined $params->{$attr};
    -    }
    -	$event->{'html_content'} = markup::creole_to_html($event->{'content'}) if defined $event->{'content'};
    -   	$event->{'html_topic'}   = markup::creole_to_html($event->{'topic'})   if defined $event->{'topic'};
    +	#get event content from series
    +	for my $attr ( 'program', 'series_name', 'title', 'excerpt', 'content', 'topic', 'image', 'episode', 'podcast_url', 'archive_url' ) {
    +		$event->{$attr} = $serie->{$attr} if defined $serie->{$attr};
    +	}
    +	$event->{series_image}       = $serie->{image}   if defined $serie->{image};
    +	$event->{series_image_label} = $serie->{licence} if defined $serie->{licence};
     
    -    #add event status
    -    for my $attr ('live', 'published', 'playout', 'archived', 'rerun', 'draft', 'disable_event_sync'){
    -        $event->{$attr}=$params->{$attr}||0;
    -    }
    +	#overwrite series values from parameters
    +	for my $attr (
    +		'program', 'series_name', 'title', 'user_title', 'excerpt',     'user_except',
    +		'content', 'topic',       'image', 'episode',    'podcast_url', 'archive_url'
    +	  )
    +	{
    +		$event->{$attr} = $params->{$attr} if defined $params->{$attr};
    +	}
    +	$event->{'html_content'} = markup::creole_to_html( $event->{'content'} ) if defined $event->{'content'};
    +	$event->{'html_topic'}   = markup::creole_to_html( $event->{'topic'} )   if defined $event->{'topic'};
     
    -    if($serie->{has_single_events}eq'1'){
    -        delete $event->{series_name};
    -        delete $event->{episode};
    -    }
    +	#add event status
    +	for my $attr ( 'live', 'published', 'playout', 'archived', 'rerun', 'draft', 'disable_event_sync' ) {
    +		$event->{$attr} = $params->{$attr} || 0;
    +	}
     
    -    $event->{modified_at} = time::time_to_datetime(time());
    -    $event->{created_at}  = time::time_to_datetime(time());
    -    $event->{modified_by} = $user;
    +	if ( $serie->{has_single_events} eq '1' ) {
    +		delete $event->{series_name};
    +		delete $event->{episode};
    +	}
     
    -    #print STDERR Dumper($event);
    -	my $dbh=db::connect($config);
    -	my $event_id= db::insert($dbh, 'calcms_events', $event);
    +	$event->{modified_at} = time::time_to_datetime( time() );
    +	$event->{created_at}  = time::time_to_datetime( time() );
    +	$event->{modified_by} = $user;
     
    -    #add to history
    -	$event->{project_id}= $project_id;
    -	$event->{studio_id} = $studio->{id};
    -	$event->{series_id} = $serie->{series_id};
    -	$event->{event_id}  = $event_id;
    -	event_history::insert($config, $event);
    +	#print STDERR Dumper($event);
    +	my $dbh = db::connect($config);
    +	my $event_id = db::insert( $dbh, 'calcms_events', $event );
    +
    +	#add to history
    +	$event->{project_id} = $project_id;
    +	$event->{studio_id}  = $studio->{id};
    +	$event->{series_id}  = $serie->{series_id};
    +	$event->{event_id}   = $event_id;
    +	event_history::insert( $config, $event );
     	return $event_id;
     }
     
    -
     #set start, end, start-date, end_date to an event
    -sub add_event_dates{
    -    my $config  =shift;
    -    my $event  =shift;
    -    my $params =shift;
    +sub add_event_dates {
    +	my $config = shift;
    +	my $event  = shift;
    +	my $params = shift;
     
    -    #start and end datetime
    -    $event->{start}    = $params->{start_date};
    -    $event->{end}      = time::add_minutes_to_datetime($params->{start_date}, $params->{duration});
    +	#start and end datetime
    +	$event->{start} = $params->{start_date};
    +	$event->{end} = time::add_minutes_to_datetime( $params->{start_date}, $params->{duration} );
     
    -    #set program days
    -	my $day_start=$config->{date}->{day_starting_hour};
    -	$event->{start_date} = time::date_cond(time::add_hours_to_datetime($event->{start}, -$day_start));
    -	$event->{end_date}   = time::date_cond(time::add_hours_to_datetime($event->{end},   -$day_start));
    -    return $event;
    +	#set program days
    +	my $day_start = $config->{date}->{day_starting_hour};
    +	$event->{start_date} = time::date_cond( time::add_hours_to_datetime( $event->{start}, -$day_start ) );
    +	$event->{end_date}   = time::date_cond( time::add_hours_to_datetime( $event->{end},   -$day_start ) );
    +	return $event;
     }
     
    -sub update_series_images{
    -    my $config  = shift;
    -    my $options = shift;
    +sub update_series_images {
    +	my $config  = shift;
    +	my $options = shift;
     
    -    return "missing project_id"    unless defined $options->{project_id};
    -    return "missing studio_id"     unless defined $options->{studio_id};
    -    return "missing series_id"     unless defined $options->{series_id};
    -    return "missing series_image"  unless defined $options->{series_image};
    -    
    -    #print "save $options->{series_image}\n";
    +	return "missing project_id"   unless defined $options->{project_id};
    +	return "missing studio_id"    unless defined $options->{studio_id};
    +	return "missing series_id"    unless defined $options->{series_id};
    +	return "missing series_image" unless defined $options->{series_image};
     
    -	my $events=series::get_events(
    -		$config, {
    -		    project_id => $options->{project_id},
    -            studio_id  => $options->{studio_id}, 
    -            series_id  => $options->{series_id},
    +	#print "save $options->{series_image}\n";
    +
    +	my $events = series::get_events(
    +		$config,
    +		{
    +			project_id => $options->{project_id},
    +			studio_id  => $options->{studio_id},
    +			series_id  => $options->{series_id},
     		}
     	);
     
    -	for my $event (@$events){
    -        $event->{series_image} = $options->{series_image};
    -        series_events::save_content($config, $event);
    +	for my $event (@$events) {
    +		$event->{series_image} = $options->{series_image};
    +		series_events::save_content( $config, $event );
     	}
     }
     
    -
    -sub error{
    -	my $msg=shift;
    +sub error {
    +	my $msg = shift;
     	print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/series_schedule.pm b/lib/calcms/series_schedule.pm index 849e478..ecea4ea 100644 --- a/lib/calcms/series_schedule.pm +++ b/lib/calcms/series_schedule.pm @@ -1,181 +1,184 @@ -package series_schedule; +package series_schedule; use warnings "all"; use strict; use Data::Dumper; -use series_dates; +use series_dates(); # table: calcms_series_schedule -# columns: id, studio_id, series_id, - # start (datetime), - # duration (minutes), - # frequency (days), - # end (date), - # weekday (1..7) - # week_of_month (1..5) - # month - # nextDay (add 24 hours to start) +# columns: id, studio_id, series_id, +# start (datetime), +# duration (minutes), +# frequency (days), +# end (date), +# weekday (1..7) +# week_of_month (1..5) +# month +# nextDay (add 24 hours to start) require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_series_schedule'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_series_schedule' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } #map schedule id to id -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'id=?'; push @bind_values, $condition->{schedule_id}; } - if ((defined $condition->{schedule_ids}) && (ref($condition->{schedule_ids}) eq 'ARRAY')){ - my @scheduleIds = @{$condition->{schedule_ids}}; - push @conditions, 'id in ('.(join(',', (map {'?'} @scheduleIds) )).')'; - for my $id (@scheduleIds){ - push @bind_values, $id; - } + if ( ( defined $condition->{schedule_ids} ) && ( ref( $condition->{schedule_ids} ) eq 'ARRAY' ) ) { + my @scheduleIds = @{ $condition->{schedule_ids} }; + push @conditions, 'id in (' . ( join( ',', ( map { '?' } @scheduleIds ) ) ) . ')'; + for my $id (@scheduleIds) { + push @bind_values, $id; + } } - if ((defined $condition->{start}) && ($condition->{start} ne '')){ - push @conditions, 'start=?'; + if ( ( defined $condition->{start} ) && ( $condition->{start} ne '' ) ) { + push @conditions, 'start=?'; push @bind_values, $condition->{start}; } - if ((defined $condition->{exclude}) && ($condition->{exclude} ne '')){ - push @conditions, 'exclude=?'; + if ( ( defined $condition->{exclude} ) && ( $condition->{exclude} ne '' ) ) { + push @conditions, 'exclude=?'; push @bind_values, $condition->{exclude}; } - if ((defined $condition->{period_type}) && ($condition->{period_type} ne '')){ - push @conditions, 'period_type=?'; + if ( ( defined $condition->{period_type} ) && ( $condition->{period_type} ne '' ) ) { + push @conditions, 'period_type=?'; push @bind_values, $condition->{period_type}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_series_schedule $conditions order by exclude, start }; + #print STDERR $query."\n".Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - for my $entry (@$entries){ - $entry->{schedule_id}=$entry->{id}; + my $entries = db::get( $dbh, $query, \@bind_values ); + for my $entry (@$entries) { + $entry->{schedule_id} = $entry->{id}; delete $entry->{id}; } - #print STDERR Dumper($entries); + + #print STDERR Dumper($entries); return $entries; } - -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; return undef unless defined $entry->{start}; - my $dbh=db::connect($config); - return db::insert($dbh, 'calcms_series_schedule', $entry); + my $dbh = db::connect($config); + return db::insert( $dbh, 'calcms_series_schedule', $entry ); } #schedule id to id -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; return undef unless defined $entry->{schedule_id}; return undef unless defined $entry->{start}; - $entry->{nextDay}=0 unless defined $entry->{nextDay}; + $entry->{nextDay} = 0 unless defined $entry->{nextDay}; - $entry->{id}=$entry->{schedule_id}; + $entry->{id} = $entry->{schedule_id}; delete $entry->{schedule_id}; - my $dbh=db::connect($config); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); + my $dbh = db::connect($config); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); - push @bind_values,$entry->{project_id}; - push @bind_values,$entry->{studio_id}; - push @bind_values,$entry->{id}; + push @bind_values, $entry->{project_id}; + push @bind_values, $entry->{studio_id}; + push @bind_values, $entry->{id}; - my $query=qq{ + my $query = qq{ update calcms_series_schedule set $values where project_id=? and studio_id=? and id=? }; + #print STDERR Dumper($query).Dumper(\@bind_values); - db::put($dbh, $query, \@bind_values); + db::put( $dbh, $query, \@bind_values ); print "done\n"; } #map schedule id to id -sub delete{ - my $config=shift; - my $entry=shift; - +sub delete { + my $config = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{series_id}; return undef unless defined $entry->{schedule_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ delete from calcms_series_schedule where project_id=? and studio_id=? and series_id=? and id=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{schedule_id}]; + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{series_id}, $entry->{schedule_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/startup.pl b/lib/calcms/startup.pl index 3ebb66c..55a6121 100644 --- a/lib/calcms/startup.pl +++ b/lib/calcms/startup.pl @@ -1,32 +1,19 @@ -use lib qw(/home/calcms/lib/calcms/); +use lib qw(/home/radio/calcms/calcms/); -return 1; -#use B::TerseSize - -#load mod_perl modules -#use Apache2; -#use ModPerl::RegistryPrefork; -#use Apache::compat; - -#on upload CGI open of tmpfile: Permission denied -#use CGI; - -#load common used modules -#use Data::Dumper; -#use DBI; -use Apache::DBI; +use Data::Dumper; +use Apache::DBI(); #$Apache::DBI::DEBUG = 2; -use Time::Local; -use Date::Calc; +use Time::Local(); +use Date::Calc(); use Calendar::Simple qw(date_span); -use config; -use log; -use time; -use db; -use cache; -use template; +use config(); +use log(); +use time(); +use db(); +use cache(); +use template(); #do not delete last line! -1; +return 1; diff --git a/lib/calcms/studio_timeslot_dates.pm b/lib/calcms/studio_timeslot_dates.pm index 226434e..1f4be4c 100644 --- a/lib/calcms/studio_timeslot_dates.pm +++ b/lib/calcms/studio_timeslot_dates.pm @@ -1,98 +1,98 @@ -package studio_timeslot_dates; +package studio_timeslot_dates; use warnings "all"; use strict; use Data::Dumper; -use Date::Calc; -use time; +use Date::Calc(); +use time(); # schedule dates for calcms_studio_schedule # table: calcms_studio_timeslot_dates # columns: id, studio_id, start(datetime), end(datetime) # TODO: delete column schedule_id require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete get_dates); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete get_dates); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_studio_timeslot_dates'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_studio_timeslot_dates' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } # get all studio_timeslot_dates for studio_id within given time range # calculate start_date, end_date, weeday, day from start and end(datetime) -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $date_range_include=0; - $date_range_include=1 if (defined $condition->{date_range_include}) && ($condition->{date_range_include}==1); + my $date_range_include = 0; + $date_range_include = 1 if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'schedule_id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'schedule_id=?'; push @bind_values, $condition->{schedule_id}; } - # from and till range from an event should beween start and end of the studio's permission - if ((defined $condition->{start}) && ($condition->{start} ne '')){ - push @conditions, 'start<=?'; + # from and till range from an event should beween start and end of the studio's permission + if ( ( defined $condition->{start} ) && ( $condition->{start} ne '' ) ) { + push @conditions, 'start<=?'; push @bind_values, $condition->{start}; } - if ((defined $condition->{end}) && ($condition->{end} ne '')){ - push @conditions, 'end>=?'; + if ( ( defined $condition->{end} ) && ( $condition->{end} ne '' ) ) { + push @conditions, 'end>=?'; push @bind_values, $condition->{end}; } - # check only a given date date range (without time) - if ((defined $condition->{from}) && ($condition->{from} ne '')){ - if ($date_range_include==1){ - push @conditions, 'end_date>=?'; - push @bind_values, $condition->{from}; - }else{ - push @conditions, 'start_date>=?'; - push @bind_values, $condition->{from}; - } + # check only a given date date range (without time) + if ( ( defined $condition->{from} ) && ( $condition->{from} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'end_date>=?'; + push @bind_values, $condition->{from}; + } else { + push @conditions, 'start_date>=?'; + push @bind_values, $condition->{from}; + } } - if ((defined $condition->{till}) && ($condition->{till} ne '')){ - if ($date_range_include==1){ - push @conditions, 'start_date<=?'; - push @bind_values, $condition->{till}; - }else{ - push @conditions, 'end_date<=?'; - push @bind_values, $condition->{till}; - } + if ( ( defined $condition->{till} ) && ( $condition->{till} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'start_date<=?'; + push @bind_values, $condition->{till}; + } else { + push @conditions, 'end_date<=?'; + push @bind_values, $condition->{till}; + } } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select date(start) start_date ,date(end) end_date ,dayname(start) start_weekday @@ -107,326 +107,351 @@ sub get{ $conditions order by start }; + #print STDERR $query."\n"; #print STDERR Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - for my $entry (@$entries){ - $entry->{start_weekday}=substr($entry->{start_weekday},0,2); - $entry->{end_weekday}=substr($entry->{end_weekday},0,2); + my $entries = db::get( $dbh, $query, \@bind_values ); + for my $entry (@$entries) { + $entry->{start_weekday} = substr( $entry->{start_weekday}, 0, 2 ); + $entry->{end_weekday} = substr( $entry->{end_weekday}, 0, 2 ); } - #print STDERR Dumper($entries); + + #print STDERR Dumper($entries); return $entries; } - - #get all studio_timeslot_schedules for studio_id and update studio_timeslot_dates -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; - return undef unless(defined $entry->{schedule_id}); + return undef unless ( defined $entry->{schedule_id} ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); #delete all dates for schedule id - studio_timeslot_dates::delete($config, $entry); + studio_timeslot_dates::delete( $config, $entry ); - my $day_start=$config->{date}->{day_starting_hour}; + my $day_start = $config->{date}->{day_starting_hour}; #get the schedule with schedule id ordered by date - my $schedules=studio_timeslot_schedule::get($config, { - schedule_id => $entry->{schedule_id} - }); + my $schedules = studio_timeslot_schedule::get( + $config, + { + schedule_id => $entry->{schedule_id} + } + ); + #add scheduled dates - my $i=0; - my $dates={}; - for my $schedule (@$schedules){ + my $i = 0; + my $dates = {}; + for my $schedule (@$schedules) { + #calculate dates from start to end_date - my $dateList=get_dates($schedule->{start}, $schedule->{end}, $schedule->{end_date}, $schedule->{frequency}); - #print STDERR Dumper($dateList); - for my $date (@$dateList){ - #set studio i from - $date->{project_id} = $schedule->{project_id}; - $date->{studio_id} = $schedule->{studio_id}; - $date->{schedule_id} = $schedule->{schedule_id}; - $dates->{$date->{start}.$date->{studio_id}}=$date; - } + my $dateList = get_dates( $schedule->{start}, $schedule->{end}, $schedule->{end_date}, $schedule->{frequency} ); + + #print STDERR Dumper($dateList); + for my $date (@$dateList) { + + #set studio i from + $date->{project_id} = $schedule->{project_id}; + $date->{studio_id} = $schedule->{studio_id}; + $date->{schedule_id} = $schedule->{schedule_id}; + $dates->{ $date->{start} . $date->{studio_id} } = $date; + } } - for my $date (keys %$dates){ - my $timeslot_date=$dates->{$date}; + for my $date ( keys %$dates ) { + my $timeslot_date = $dates->{$date}; + #insert date - my $entry={ - project_id => $timeslot_date->{project_id}, - studio_id => $timeslot_date->{studio_id}, - schedule_id => $timeslot_date->{schedule_id}, - start => $timeslot_date->{start}, - end => $timeslot_date->{end}, - }; - $entry->{start_date}= time::add_hours_to_datetime($entry->{start}, -$day_start); - $entry->{end_date}= time::add_hours_to_datetime($entry->{end}, -$day_start); - db::insert($dbh, 'calcms_studio_timeslot_dates', $entry); - #print STDERR "$entry->{start_date}\n"; - $i++; - } - #print STDERR "$i studio_timeslot_dates updates\n"; - return $i; + my $entry = { + project_id => $timeslot_date->{project_id}, + studio_id => $timeslot_date->{studio_id}, + schedule_id => $timeslot_date->{schedule_id}, + start => $timeslot_date->{start}, + end => $timeslot_date->{end}, + }; + $entry->{start_date} = time::add_hours_to_datetime( $entry->{start}, -$day_start ); + $entry->{end_date} = time::add_hours_to_datetime( $entry->{end}, -$day_start ); + db::insert( $dbh, 'calcms_studio_timeslot_dates', $entry ); + + #print STDERR "$entry->{start_date}\n"; + $i++; + } + + #print STDERR "$i studio_timeslot_dates updates\n"; + return $i; } # calculate all start/end datetimes between start_date and stop_date with a frequency(days) # returns list of hashs with start and end -sub get_dates{ - my $start_datetime = shift; # start - my $end_datetime = shift; # start - my $stop_date = shift; # limit recurring events - my $frequency = shift; # in days +sub get_dates { + my $start_datetime = shift; # start + my $end_datetime = shift; # start + my $stop_date = shift; # limit recurring events + my $frequency = shift; # in days - my @start = @{time::datetime_to_array($start_datetime)}; - return unless @start>=6; - my @start_date = ($start[0], $start[1], $start[2]); - my $start_date = sprintf("%04d-%02d-%02d",@start_date); - my $start_time = sprintf('%02d:%02d:%02d', $start[3], $start[4], $start[5]); + my @start = @{ time::datetime_to_array($start_datetime) }; + return unless @start >= 6; + my @start_date = ( $start[0], $start[1], $start[2] ); + my $start_date = sprintf( "%04d-%02d-%02d", @start_date ); + my $start_time = sprintf( '%02d:%02d:%02d', $start[3], $start[4], $start[5] ); - my @end = @{time::datetime_to_array($end_datetime)}; - return unless @end>=6; - my @end_date = ($end[0], $end[1], $end[2]); - my $end_date = sprintf("%04d-%02d-%02d",@end_date); - my $end_time = sprintf('%02d:%02d:%02d', $end[3], $end[4], $end[5]); + my @end = @{ time::datetime_to_array($end_datetime) }; + return unless @end >= 6; + my @end_date = ( $end[0], $end[1], $end[2] ); + my $end_date = sprintf( "%04d-%02d-%02d", @end_date ); + my $end_time = sprintf( '%02d:%02d:%02d', $end[3], $end[4], $end[5] ); - my @stop = @{time::date_to_array($stop_date)}; - return unless @end>=3; - my @stop_date = ($stop[0], $stop[1], $stop[2]); - $stop_date = sprintf("%04d-%02d-%02d",@stop_date); + my @stop = @{ time::date_to_array($stop_date) }; + return unless @end >= 3; + my @stop_date = ( $stop[0], $stop[1], $stop[2] ); + $stop_date = sprintf( "%04d-%02d-%02d", @stop_date ); - my $date={}; - $date->{start}= $start_date.' '.$start_time; - $date->{end} = $end_date.' '.$end_time; + my $date = {}; + $date->{start} = $start_date . ' ' . $start_time; + $date->{end} = $end_date . ' ' . $end_time; - my $dates=[]; - return $dates if ($date->{end} le $date->{start}); + my $dates = []; + return $dates if ( $date->{end} le $date->{start} ); - return $dates if ($stop_date lt $end_date); + return $dates if ( $stop_date lt $end_date ); - my $j = Date::Calc::Delta_Days(@start_date, @stop_date); - return $dates if $j<0; + my $j = Date::Calc::Delta_Days( @start_date, @stop_date ); + return $dates if $j < 0; - # split full time events into single days - if($frequency<1){ - #start day - my @next_date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], 1); - my $next_date = sprintf("%04d-%02d-%02d",@next_date); - push @$dates,{ - start => $start_date.' '.$start_time, - end => $next_date .' 00:00:00', - }; - my $c=0; - for (my $i = 1; $i < $j; $i++){ - my @start_date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], $i); - my $start_date = sprintf("%04d-%02d-%02d",@start_date); - my @next_date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], $i+1); - my $next_date = sprintf("%04d-%02d-%02d",@next_date); - push @$dates,{ - start => $start_date.' 00:00:00', - end => $next_date.' 00:00:00', - }; - last if ($c>1000); - $c++; - } - #end day - push @$dates,{ - start => $end_date.' 00:00:00', - end => $end_date.' '.$end_time, - } if($end_time ne '00:00:00'); - return $dates; - } + # split full time events into single days + if ( $frequency < 1 ) { - # multiple time events - my $c=0; - for (my $i = 0; $i <= $j; $i+=$frequency ){ - #add frequency to start and end date - my @start_date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], $i); - my @end_date = Date::Calc::Add_Delta_Days($end[0], $end[1], $end[2], $i); - #print STDERR Dumper(\@start_date); - #print STDERR Dumper(\@end_date); - my $start_date=sprintf("%04d-%02d-%02d",@start_date); - my $end_date =sprintf("%04d-%02d-%02d",@end_date); - push @$dates,{ - start => $start_date.' '.$start_time, - end => $end_date.' '.$end_time, - }; - last if ($c>1000); + #start day + my @next_date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], 1 ); + my $next_date = sprintf( "%04d-%02d-%02d", @next_date ); + push @$dates, + { + start => $start_date . ' ' . $start_time, + end => $next_date . ' 00:00:00', + }; + my $c = 0; + for ( my $i = 1 ; $i < $j ; $i++ ) { + my @start_date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], $i ); + my $start_date = sprintf( "%04d-%02d-%02d", @start_date ); + my @next_date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], $i + 1 ); + my $next_date = sprintf( "%04d-%02d-%02d", @next_date ); + push @$dates, + { + start => $start_date . ' 00:00:00', + end => $next_date . ' 00:00:00', + }; + last if ( $c > 1000 ); + $c++; + } + + #end day + push @$dates, + { + start => $end_date . ' 00:00:00', + end => $end_date . ' ' . $end_time, + } if ( $end_time ne '00:00:00' ); + return $dates; + } + + # multiple time events + my $c = 0; + for ( my $i = 0 ; $i <= $j ; $i += $frequency ) { + + #add frequency to start and end date + my @start_date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], $i ); + my @end_date = Date::Calc::Add_Delta_Days( $end[0], $end[1], $end[2], $i ); + + #print STDERR Dumper(\@start_date); + #print STDERR Dumper(\@end_date); + my $start_date = sprintf( "%04d-%02d-%02d", @start_date ); + my $end_date = sprintf( "%04d-%02d-%02d", @end_date ); + push @$dates, + { + start => $start_date . ' ' . $start_time, + end => $end_date . ' ' . $end_time, + }; + last if ( $c > 1000 ); $c++; } return $dates; } #remove all studio_timeslot_dates for studio_id and schedule_id -sub delete{ - my $config=shift; - my $entry=shift; - - #print STDERR "delete:".Dumper($entry); - return unless(defined $entry->{project_id}); - return unless(defined $entry->{studio_id}); - return unless(defined $entry->{schedule_id}); +sub delete { + my $config = shift; + my $entry = shift; - my $dbh=db::connect($config); + #print STDERR "delete:".Dumper($entry); + return unless ( defined $entry->{project_id} ); + return unless ( defined $entry->{studio_id} ); + return unless ( defined $entry->{schedule_id} ); - my $query=qq{ + my $dbh = db::connect($config); + + my $query = qq{ delete from calcms_studio_timeslot_dates where schedule_id=? }; - my $bind_values=[$entry->{schedule_id}]; + my $bind_values = [ $entry->{schedule_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } # time based filter to check if studio is assigned to an studio at a given time range # return 1 if there is a schedule date starting before start and ending after end -sub can_studio_edit_events{ - my $config=shift; - my $condition=shift; +sub can_studio_edit_events { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); - #print Dumper($condition); + my @conditions = (); + my @bind_values = (); - #return 0 unless defined $condition->{project_id}; - return 0 unless defined $condition->{studio_id}; - return 0 unless defined $condition->{start}; - return 0 unless defined $condition->{end}; + #print Dumper($condition); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + #return 0 unless defined $condition->{project_id}; + return 0 unless defined $condition->{studio_id}; + return 0 unless defined $condition->{start}; + return 0 unless defined $condition->{end}; + + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{start}) && ($condition->{start} ne '')){ - push @conditions, 'start<=?'; + if ( ( defined $condition->{start} ) && ( $condition->{start} ne '' ) ) { + push @conditions, 'start<=?'; push @bind_values, $condition->{start}; } - if ((defined $condition->{end}) && ($condition->{end} ne '')){ - push @conditions, 'end>=?'; + if ( ( defined $condition->{end} ) && ( $condition->{end} ne '' ) ) { + push @conditions, 'end>=?'; push @bind_values, $condition->{end}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $dbh=db::connect($config); - my $query=qq{ + my $dbh = db::connect($config); + my $query = qq{ select count(*) permission from calcms_studio_timeslot_dates $conditions }; + #print STDERR Dumper($query).Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - #print STDERR Dumper($entries); - return 0 if scalar(@$entries) == 0; - return 1 if $entries->[0]->{permission}>0; + my $entries = db::get( $dbh, $query, \@bind_values ); - if ($entries->[0]->{permission}==0){ - my $timeslot=getMergedDays($config, $condition); - return 0 unless defined $timeslot; - if ( - ($condition->{start} ge $timeslot->{start}) - && ($condition->{end} le $timeslot->{end}) - ){ - #print STDERR "($condition->{start} ge $timeslot->{start}) ".($condition->{start} ge $timeslot->{start}); - #print STDERR "($condition->{end} le $timeslot->{end}) ".($condition->{end} le $timeslot->{end}); - return 1; - } - } - return 0; + #print STDERR Dumper($entries); + return 0 if scalar(@$entries) == 0; + return 1 if $entries->[0]->{permission} > 0; + + if ( $entries->[0]->{permission} == 0 ) { + my $timeslot = getMergedDays( $config, $condition ); + return 0 unless defined $timeslot; + if ( ( $condition->{start} ge $timeslot->{start} ) + && ( $condition->{end} le $timeslot->{end} ) ) + { + #print STDERR "($condition->{start} ge $timeslot->{start}) ".($condition->{start} ge $timeslot->{start}); + #print STDERR "($condition->{end} le $timeslot->{end}) ".($condition->{end} le $timeslot->{end}); + return 1; + } + } + return 0; } # merge two subsequent days if first day ends at same time as next day starts # returns hashref with start and end of merged slot # returns undef if not slot could be found -sub getMergedDays{ - my $config=shift; - my $condition=shift; +sub getMergedDays { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); - #print Dumper($condition); + my @conditions = (); + my @bind_values = (); - #return 0 unless defined $condition->{project_id}; - return 0 unless defined $condition->{studio_id}; - return 0 unless defined $condition->{start}; - return 0 unless defined $condition->{end}; + #print Dumper($condition); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + #return 0 unless defined $condition->{project_id}; + return 0 unless defined $condition->{studio_id}; + return 0 unless defined $condition->{start}; + return 0 unless defined $condition->{end}; + + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - # set start to next day at 00:00 - my $start=undef; - if ($condition->{start}=~/(\d\d\d\d\-\d\d\-\d\d)/){ - $start=$1.' 00:00'; - $start=time::add_days_to_datetime($start, 1); + # set start to next day at 00:00 + my $start = undef; + if ( $condition->{start} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { + $start = $1 . ' 00:00'; + $start = time::add_days_to_datetime( $start, 1 ); push @bind_values, $start; - } + } - # set end to end days at 00:00 - my $end=undef; - if ($condition->{end}=~/(\d\d\d\d\-\d\d\-\d\d)/){ - $end=$1.' 00:00'; + # set end to end days at 00:00 + my $end = undef; + if ( $condition->{end} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { + $end = $1 . ' 00:00'; push @bind_values, $end; - } - return undef unless defined $start; - return undef unless defined $end; + } + return undef unless defined $start; + return undef unless defined $end; - push @conditions, '(start=? or end=?)'; + push @conditions, '(start=? or end=?)'; - my $conditions=''; - $conditions='where '.join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = 'where ' . join( " and ", @conditions ) if ( @conditions > 0 ); - # get all days starting on first day or ending at next day - my $dbh=db::connect($config); - my $query=qq{ + # get all days starting on first day or ending at next day + my $dbh = db::connect($config); + my $query = qq{ select start, end from calcms_studio_timeslot_dates $conditions order by start }; + # print STDERR Dumper($query).Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - # print STDERR Dumper($entries); + my $entries = db::get( $dbh, $query, \@bind_values ); - if (scalar(@$entries)==2){ - if ($entries->[0]->{end} eq $entries->[1]->{start}){ - $entries={ - start => $entries->[0]->{start}, - end => $entries->[1]->{end} - }; - # print STDERR "found".Dumper($entries)."\n"; - return $entries; - } - } + # print STDERR Dumper($entries); - return undef; + if ( scalar(@$entries) == 2 ) { + if ( $entries->[0]->{end} eq $entries->[1]->{start} ) { + $entries = { + start => $entries->[0]->{start}, + end => $entries->[1]->{end} + }; + + # print STDERR "found".Dumper($entries)."\n"; + return $entries; + } + } + + return undef; } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/studio_timeslot_schedule.pm b/lib/calcms/studio_timeslot_schedule.pm index 7d9a8bc..8d64929 100644 --- a/lib/calcms/studio_timeslot_schedule.pm +++ b/lib/calcms/studio_timeslot_schedule.pm @@ -1,142 +1,145 @@ -package studio_timeslot_schedule; +package studio_timeslot_schedule; use warnings "all"; use strict; use Data::Dumper; -use studio_timeslot_dates; +use studio_timeslot_dates(); # table: calcms_studio_timeslot_schedule -# columns: id, project_id, studio_id, start(datetime), end(datetime), end_date(date), +# columns: id, project_id, studio_id, start(datetime), end(datetime), end_date(date), # frequency(days), duration(minutes), create_events(days), publish_events(days) require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_studio_timeslot_schedule'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_studio_timeslot_schedule' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } #map schedule id to id -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'id=?'; push @bind_values, $condition->{schedule_id}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_studio_timeslot_schedule $conditions order by start }; + #print $query."\n"; #print Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - for my $entry (@$entries){ - $entry->{schedule_id}=$entry->{id}; + my $entries = db::get( $dbh, $query, \@bind_values ); + for my $entry (@$entries) { + $entry->{schedule_id} = $entry->{id}; delete $entry->{id}; } return $entries; } -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; - return unless(defined $entry->{project_id}); - return unless(defined $entry->{studio_id}); - return unless(defined $entry->{start}); - return unless(defined $entry->{end}); - return unless(defined $entry->{frequency}); + return unless ( defined $entry->{project_id} ); + return unless ( defined $entry->{studio_id} ); + return unless ( defined $entry->{start} ); + return unless ( defined $entry->{end} ); + return unless ( defined $entry->{frequency} ); - my $dbh=db::connect($config); - return db::insert($dbh, 'calcms_studio_timeslot_schedule', $entry); + my $dbh = db::connect($config); + return db::insert( $dbh, 'calcms_studio_timeslot_schedule', $entry ); } #schedule id to id -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; - return unless(defined $entry->{project_id}); - return unless(defined $entry->{studio_id}); - return unless(defined $entry->{schedule_id}); - return unless(defined $entry->{start}); - return unless(defined $entry->{end}); - return unless(defined $entry->{frequency}); + return unless ( defined $entry->{project_id} ); + return unless ( defined $entry->{studio_id} ); + return unless ( defined $entry->{schedule_id} ); + return unless ( defined $entry->{start} ); + return unless ( defined $entry->{end} ); + return unless ( defined $entry->{frequency} ); - $entry->{id}=$entry->{schedule_id}; + $entry->{id} = $entry->{schedule_id}; delete $entry->{schedule_id}; - my $dbh=db::connect($config); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); - push @bind_values,$entry->{id}; + my $dbh = db::connect($config); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); + push @bind_values, $entry->{id}; - my $query=qq{ + my $query = qq{ update calcms_studio_timeslot_schedule set $values where id=? }; - db::put($dbh, $query, \@bind_values); + db::put( $dbh, $query, \@bind_values ); + #print "done\n"; - $entry->{schedule_id}=$entry->{id}; + $entry->{schedule_id} = $entry->{id}; delete $entry->{id}; } #map schedule id to id -sub delete{ - my $config=shift; - my $entry=shift; - - return unless(defined $entry->{schedule_id}); +sub delete { + my $config = shift; + my $entry = shift; - my $dbh=db::connect($config); + return unless ( defined $entry->{schedule_id} ); - my $query=qq{ + my $dbh = db::connect($config); + + my $query = qq{ delete from calcms_studio_timeslot_schedule where id=? }; - my $bind_values=[$entry->{schedule_id}]; + my $bind_values = [ $entry->{schedule_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/studios.pm b/lib/calcms/studios.pm index 3cce3c2..490c119 100644 --- a/lib/calcms/studios.pm +++ b/lib/calcms/studios.pm @@ -1,177 +1,171 @@ #!/bin/perl -#use CGI; -#use CGI::Carp qw(warningsToBrowser fatalsToBrowser); -#use CGI::Session qw(-ip-match); -#use CGI::Cookie; -#$CGI::Session::IP_MATCH=1; - -package studios; +package studios; use warnings "all"; use strict; use Data::Dumper; -use images; +use images(); require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get get_by_id insert update delete check check_studio); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get get_by_id insert update delete check check_studio); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_studios'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_studios' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -sub get{ - my $config=shift; - my $condition=shift||{}; +sub get { + my $config = shift; + my $condition = shift || {}; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 's.id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 's.id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{name}) && ($condition->{name} ne '')){ - push @conditions, 's.name=?'; + if ( ( defined $condition->{name} ) && ( $condition->{name} ne '' ) ) { + push @conditions, 's.name=?'; push @bind_values, $condition->{name}; } - if ((defined $condition->{location}) && ($condition->{location} ne '')){ - push @conditions, 's.location=?'; + if ( ( defined $condition->{location} ) && ( $condition->{location} ne '' ) ) { + push @conditions, 's.location=?'; push @bind_values, $condition->{location}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $query=''; - unless ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); - $query=qq{ + my $query = ''; + unless ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); + $query = qq{ select * from calcms_studios s $conditions $limit }; - }else{ - push @conditions, 's.id=ps.studio_id'; + } else { + push @conditions, 's.id=ps.studio_id'; - push @conditions, 'ps.project_id=?'; - push @bind_values, $condition->{project_id}; - my $conditions=" where ".join(" and ",@conditions) if (@conditions>0); - $query=qq{ + push @conditions, 'ps.project_id=?'; + push @bind_values, $condition->{project_id}; + my $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); + $query = qq{ select * from calcms_studios s, calcms_project_studios ps $conditions $limit }; - } - my $dbh=db::connect($config); - #print STDERR Dumper($query).Dumper(\@bind_values); - my $studios=db::get($dbh, $query,\@bind_values); + } + my $dbh = db::connect($config); + + #print STDERR Dumper($query).Dumper(\@bind_values); + my $studios = db::get( $dbh, $query, \@bind_values ); return $studios; } -sub getImageById{ +sub getImageById { my $config = shift; - my $conditions = shift; - - return undef unless defined $conditions->{project_id}; - return undef unless defined $conditions->{studio_id}; - my $studios = studios::get($config, $conditions); - return undef if scalar(@$studios) != 1; - return $studios->[0]->{image}; + my $conditions = shift; + + return undef unless defined $conditions->{project_id}; + return undef unless defined $conditions->{studio_id}; + my $studios = studios::get( $config, $conditions ); + return undef if scalar(@$studios) != 1; + return $studios->[0]->{image}; } -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; - $entry->{created_at} = time::time_to_datetime(time()); - $entry->{modified_at} = time::time_to_datetime(time()); - $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; - - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_studios', $entry); - return $id; + $entry->{created_at} = time::time_to_datetime( time() ); + $entry->{modified_at} = time::time_to_datetime( time() ); + $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; + + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_studios', $entry ); + return $id; } +sub update { + my $config = shift; + my $studio = shift; -sub update{ - my $config=shift; - my $studio=shift; + $studio->{modified_at} = time::time_to_datetime( time() ); - $studio->{modified_at}= time::time_to_datetime(time()); + my $columns = get_columns($config); + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $studio->{$column} if defined $studio->{$column}; + } + $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; - my $columns=get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column}=$studio->{$column} if defined $studio->{$column}; - } - $entry->{image} = images::normalizeName( $entry->{image} ) if defined $entry->{image}; + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); + push @bind_values, $entry->{id}; - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); - push @bind_values,$entry->{id}; - - my $query=qq{ + my $query = qq{ update calcms_studios set $values where id=? }; - my $dbh=db::connect($config); - #print STDERR Dumper($query)." ".Dumper(\@bind_values); - db::put($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + + #print STDERR Dumper($query)." ".Dumper(\@bind_values); + db::put( $dbh, $query, \@bind_values ); } -sub delete{ - my $config=shift; - my $studio=shift; - - my $dbh=db::connect($config); - db::put($dbh, 'delete from calcms_studios where id=?', [$studio->{id}]); +sub delete { + my $config = shift; + my $studio = shift; + + my $dbh = db::connect($config); + db::put( $dbh, 'delete from calcms_studios where id=?', [ $studio->{id} ] ); } #TODO rename to check -sub check_studio{ - my $config=shift; - my $options=shift; - return check($config, $options); +sub check_studio { + my $config = shift; + my $options = shift; + return check( $config, $options ); } -sub check{ - my $config=shift; - my $options=shift; - return "missing studio_id" unless defined $options->{studio_id}; - return "Please select a studio" if($options->{studio_id}eq'-1'); - return "Please select a studio" if($options->{studio_id}eq''); - my $studios=studios::get($config, {studio_id => $options->{studio_id}}); - return "Sorry. unknown studio" unless defined $studios; - return "Sorry. unknown studio" unless @$studios==1; - return 1; +sub check { + my $config = shift; + my $options = shift; + return "missing studio_id" unless defined $options->{studio_id}; + return "Please select a studio" if ( $options->{studio_id} eq '-1' ); + return "Please select a studio" if ( $options->{studio_id} eq '' ); + my $studios = studios::get( $config, { studio_id => $options->{studio_id} } ); + return "Sorry. unknown studio" unless defined $studios; + return "Sorry. unknown studio" unless @$studios == 1; + return 1; } - -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/template.pm b/lib/calcms/template.pm index f51c8ce..b296e5d 100644 --- a/lib/calcms/template.pm +++ b/lib/calcms/template.pm @@ -3,224 +3,225 @@ use strict; package template; use Data::Dumper; -use HTML::Template::Compiled; -use HTML::Template::Compiled::Plugin::XMLEscape; -use JSON; -use Cwd; +use HTML::Template::Compiled(); +use HTML::Template::Compiled::Plugin::XMLEscape(); +use JSON(); +use Cwd(); -use config; -use params; -use project; -use log; -use roles; +use config(); +use params(); +use project(); +use log(); +use roles(); require Exporter; our @ISA = qw(Exporter); + #our @EXPORT = qw(all); our @EXPORT_OK = qw(check process exit_on_missing_permission clear_cache); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -sub process{ -# my $output=$_[0]; - my $filename=$_[1]; - my $params=$_[2]; +sub process { - my $config=$config::config; - for my $key (keys %{$config::config->{locations}}){ - $params->{$key} =$config::config->{locations}->{$key} if ($key=~/\_url$/); + # my $output=$_[0]; + my $filename = $_[1]; + my $params = $_[2]; + + my $config = $config::config; + for my $key ( keys %{ $config::config->{locations} } ) { + $params->{$key} = $config::config->{locations}->{$key} if ( $key =~ /\_url$/ ); } # add current project - unless (defined $params->{project_title}){ - my $projects = project::get_with_dates($config, { name => $config->{project} }); - if (@$projects==1){ - my $project= $projects->[0]; - foreach my $key (keys %$project){ - $params->{'project_'.$key}=$project->{$key}; - } - } - } - - $params->{user}=$ENV{REMOTE_USER} unless defined $params->{user}; - - my $user_permissions=roles::get_user_permissions(); - for my $permission (keys %$user_permissions){ - $params->{$permission}=$user_permissions->{$permission} if ($user_permissions->{$permission} eq '1'); + unless ( defined $params->{project_title} ) { + my $projects = project::get_with_dates( $config, { name => $config->{project} } ); + if ( @$projects == 1 ) { + my $project = $projects->[0]; + foreach my $key ( keys %$project ) { + $params->{ 'project_' . $key } = $project->{$key}; + } + } } - $params->{jobs}=roles::get_user_jobs(); + $params->{user} = $ENV{REMOTE_USER} unless defined $params->{user}; - log::write($config, 'template',$params) if ($config::config->{system}->{debug}>0); -# my $html_template = HTML::Template->new( -# filename => $filename, -# die_on_bad_params =>0, -## cache =>1, -## cache_debug => 1 -# ); + my $user_permissions = roles::get_user_permissions(); + for my $permission ( keys %$user_permissions ) { + $params->{$permission} = $user_permissions->{$permission} if ( $user_permissions->{$permission} eq '1' ); + } + $params->{jobs} = roles::get_user_jobs(); + if ( ( $filename =~ /json\-p/ ) || (params::isJson) ) { + my $header = "Content-type:application/json; charset=utf-8\n\n"; + my $json = JSON::to_json( $params, { pretty => 1 } ); - if (($filename =~/json\-p/) || (params::isJson)){ - my $header="Content-type:application/json; charset=utf-8\n\n"; - my $json=to_json($params, {pretty => 1}); -# $json=$header.$params->{json_callback}.'['.$json.']'; - $json=$header.$params->{json_callback}.$json; - if((defined $_[0]) && ($_[0]eq'print')){ - print $json."\n"; - }else{ - $_[0]= $json."\n"; + # $json=$header.$params->{json_callback}.'['.$json.']'; + $json = $header . $params->{json_callback} . $json; + if ( ( defined $_[0] ) && ( $_[0] eq 'print' ) ) { + print $json. "\n"; + } else { + $_[0] = $json . "\n"; } return; } - #print STDERR $filename."\n"; - log::error($config, "cannot find template $filename ") unless -e $filename; - log::error($config, "cannot read template $filename ") unless -r $filename; - my $default_escape='0'; - $default_escape='JS' if ($filename=~/\.js$/); - $default_escape='JS' if ($filename=~/\.json$/); - $default_escape='HTML_ALL' if ($filename=~/\.html$/); + #print STDERR $filename."\n"; + log::error( $config, "cannot find template $filename " ) unless -e $filename; + log::error( $config, "cannot read template $filename " ) unless -r $filename; - my $html_template=undef; - - unless ($filename=~/\.xml$/){ + my $default_escape = '0'; + $default_escape = 'JS' if ( $filename =~ /\.js$/ ); + $default_escape = 'JS' if ( $filename =~ /\.json$/ ); + $default_escape = 'HTML_ALL' if ( $filename =~ /\.html$/ ); + + my $html_template = undef; + + unless ( $filename =~ /\.xml$/ ) { $html_template = HTML::Template::Compiled->new( - filename => $filename, - die_on_bad_params => 0, - case_sensitive => 0, - loop_context_vars => 0, - global_vars => 0, - tagstyle => '-asp -comment', - default_escape => $default_escape, - cache => 0, - utf8 => 1, + filename => $filename, + die_on_bad_params => 0, + case_sensitive => 0, + loop_context_vars => 0, + global_vars => 0, + tagstyle => '-asp -comment', + default_escape => $default_escape, + cache => 0, + utf8 => 1, ); - }else{ + } else { $html_template = HTML::Template::Compiled->new( - filename => $filename, - die_on_bad_params => 0, - case_sensitive => 1, - loop_context_vars => 0, - global_vars => 0, - tagstyle => '-asp -comment', - default_escape => 'XML', - plugin => [qw(HTML::Template::Compiled::Plugin::XMLEscape)], - utf8 => 1 + filename => $filename, + die_on_bad_params => 0, + case_sensitive => 1, + loop_context_vars => 0, + global_vars => 0, + tagstyle => '-asp -comment', + default_escape => 'XML', + plugin => [qw(HTML::Template::Compiled::Plugin::XMLEscape)], + utf8 => 1 ); } - + #$params= - setRelativeUrls($params,0) unless (defined $params->{extern}) && ($params->{extern} eq '1'); - -# HTML::Template::Compiled->preload($cache_dir); + setRelativeUrls( $params, 0 ) unless ( defined $params->{extern} ) && ( $params->{extern} eq '1' ); + + # HTML::Template::Compiled->preload($cache_dir); $html_template->param($params); - if((defined $_[0]) && ($_[0]eq'print')){ + if ( ( defined $_[0] ) && ( $_[0] eq 'print' ) ) { print $html_template->output; - }else{ - $_[0]=$html_template->output; + } else { + $_[0] = $html_template->output; } } # set relative urls in nested params structure -sub setRelativeUrls{ - my $params=shift; - my $depth=shift || 0; - - #print STDERR "setRelativeUrls depth:$depth ".ref($params)."\n"; - - return unless defined $params; - - if ($depth>10){ - print STDERR "prevent deep recursion in template::setRelativeUrls()\n"; - return ; - } +sub setRelativeUrls { + my $params = shift; + my $depth = shift || 0; - # set recursive for hash - if (ref($params) eq 'HASH'){ - for my $key (keys %$params){ - #next unless ($key eq 'icon') || ($key eq 'thumb'); - my $val=$params->{$key}; - next unless defined $val; - if (ref($val) eq ''){ - # make link relative - $params->{$key} =~s/^https?\:(\/\/[^\/]+)/$1/; - }elsif ( (ref($val) eq 'HASH') || (ref($val) eq 'ARRAY') ){ - setRelativeUrls($params->{$key}, $depth+1); - } - } - return $params; - } + #print STDERR "setRelativeUrls depth:$depth ".ref($params)."\n"; - # set recursive for arrays - if (ref($params) eq 'ARRAY'){ - for my $i (0..@$params){ - my $val=$params->[$i]; - next unless defined $val; - if ( (ref($val) eq 'HASH') || (ref($val) eq 'ARRAY') ){ - setRelativeUrls($params->[$i], $depth+1); - } - } - return $params; - } - - return $params; + return unless defined $params; + + if ( $depth > 10 ) { + print STDERR "prevent deep recursion in template::setRelativeUrls()\n"; + return; + } + + # set recursive for hash + if ( ref($params) eq 'HASH' ) { + for my $key ( keys %$params ) { + + #next unless ($key eq 'icon') || ($key eq 'thumb'); + my $val = $params->{$key}; + next unless defined $val; + if ( ref($val) eq '' ) { + + # make link relative + $params->{$key} =~ s/^https?\:(\/\/[^\/]+)/$1/; + } elsif ( ( ref($val) eq 'HASH' ) || ( ref($val) eq 'ARRAY' ) ) { + setRelativeUrls( $params->{$key}, $depth + 1 ); + } + } + return $params; + } + + # set recursive for arrays + if ( ref($params) eq 'ARRAY' ) { + for my $i ( 0 .. @$params ) { + my $val = $params->[$i]; + next unless defined $val; + if ( ( ref($val) eq 'HASH' ) || ( ref($val) eq 'ARRAY' ) ) { + setRelativeUrls( $params->[$i], $depth + 1 ); + } + } + return $params; + } + + return $params; } #requires read config -sub check{ - my $template=shift||''; - my $default=shift; +sub check { + my $template = shift || ''; + my $default = shift; - if($template =~/json\-p/){ - $template=~s/[^a-zA-Z0-9\-\_\.]//g; - $template=~s/\.{2,99}/\./g; + if ( $template =~ /json\-p/ ) { + $template =~ s/[^a-zA-Z0-9\-\_\.]//g; + $template =~ s/\.{2,99}/\./g; return $template; } - - my $config=$config::config; - if ($template eq''){ - $template=$default; - }else{ - $template=~s/^\.\///gi; + + my $config = $config::config; + if ( $template eq '' ) { + $template = $default; + } else { + $template =~ s/^\.\///gi; + #template does use ';' in filename - log::error($config, 'invalid template!') if ($template=~/;/); + log::error( $config, 'invalid template!' ) if ( $template =~ /;/ ); + #template does use '..' in filename - log::error($config, 'invalid template!') if ($template=~/\.\./); + log::error( $config, 'invalid template!' ) if ( $template =~ /\.\./ ); } + #print STDERR $config::config->{cache}->{compress}."<.compres default:$template\n"; - $template=(split(/\//,$template))[-1]; - my $cwd=getcwd(); + $template = ( split( /\//, $template ) )[-1]; + my $cwd = Cwd::getcwd(); + + $template .= '.html' unless ( $template =~ /\./ ); + if ( ( $config::config->{cache}->{compress} eq '1' ) && ( -e $cwd . '/templates/compressed/' . $template ) ) { + $template = $cwd . '/templates/compressed/' . $template; + } elsif ( -e $cwd . '/templates/' . $template ) { + $template = $cwd . '/templates/' . $template; + } else { + log::error( $config, "template not found: '$cwd/$template'" ); - $template.='.html' unless ($template=~/\./); - if (($config::config->{cache}->{compress}eq'1') && (-e $cwd.'/templates/compressed/'.$template)){ - $template=$cwd.'/templates/compressed/'.$template; - }elsif (-e $cwd.'/templates/'.$template){ - $template=$cwd.'/templates/'.$template; - }else{ - log::error($config, "template not found: '$cwd/$template'"); - } - log::error($config, "missing permission to read template '$template'") unless (-r $template); + log::error( $config, "missing permission to read template '$template'" ) unless ( -r $template ); return $template; } #deprecated (for old admin only) -sub exit_on_missing_permission{ - my $permission=shift; - my $user_permissions=roles::get_user_permissions(); - if ($user_permissions->{$permission} ne '1'){ - print STDERR "missing permission to $permission\n"; - template::process('print', template::check('default.html'), {error => 'sorry, missing permission!'}); +sub exit_on_missing_permission { + my $permission = shift; + my $user_permissions = roles::get_user_permissions(); + if ( $user_permissions->{$permission} ne '1' ) { + print STDERR "missing permission to $permission\n"; + template::process( 'print', template::check('default.html'), { error => 'sorry, missing permission!' } ); die(); + #exit; } } -sub clear_cache{ +sub clear_cache { HTML::Template::Compiled->clear_cache(); -# return; -# my $html_template = HTML::Template::Compiled->new(); -# $html_template->clear_cache(); + + # return; + # my $html_template = HTML::Template::Compiled->new(); + # $html_template->clear_cache(); } #do not delete last line! diff --git a/lib/calcms/time.pm b/lib/calcms/time.pm index 6b976f3..6182ef4 100644 --- a/lib/calcms/time.pm +++ b/lib/calcms/time.pm @@ -1,491 +1,489 @@ use warnings "all"; use strict; -use Time::Local; -use DateTime; -use Date::Calc; -use Date::Manip; +use Time::Local(); +use DateTime(); +use Date::Calc(); +use Date::Manip(); use POSIX qw(strftime); -use config; -package time; +use config(); + +package time; use Data::Dumper; use utf8; require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - format_datetime format_time - date_format time_format - datetime_to_time time_to_datetime time_to_date - datetime_to_date - add_days_to_datetime add_hours_to_datetime add_minutes_to_datetime - add_days_to_date - datetime_to_array date_to_array array_to_date array_to_datetime array_to_time array_to_time_hm - date_cond time_cond check_date check_time check_datetime check_year_month - datetime_to_rfc822 get_datetime datetime_to_utc datetime_to_utc_datetime - get_duration get_duration_seconds - get_durations get_names get_all_names weekday_index - $names + format_datetime format_time + date_format time_format + datetime_to_time time_to_datetime time_to_date + datetime_to_date + add_days_to_datetime add_hours_to_datetime add_minutes_to_datetime + add_days_to_date + datetime_to_array date_to_array array_to_date array_to_datetime array_to_time array_to_time_hm + date_cond time_cond check_date check_time check_datetime check_year_month + datetime_to_rfc822 get_datetime datetime_to_utc datetime_to_utc_datetime + get_duration get_duration_seconds + get_durations get_names get_all_names weekday_index + $names ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); -our $names={ - 'de' =>{ - months =>['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'], - months_abbr =>['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'], - weekdays =>['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'], - weekdays_abbr =>['Mo','Di','Mi','Do','Fr','Sa','So'], - }, - 'en' =>{ - months =>['January','February','March','April','May','June','Jule','August','September','October','November','December'], - months_abbr =>['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'], - weekdays =>['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'], - weekdays_abbr =>['Mo','Tu','We','Th','Fr','Sa','Su'], - }, +our $names = { + 'de' => { + months => + [ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ], + months_abbr => [ 'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ], + weekdays => [ 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag' ], + weekdays_abbr => [ 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So' ], + }, + 'en' => { + months => + [ 'January', 'February', 'March', 'April', 'May', 'June', 'Jule', 'August', 'September', 'October', 'November', 'December' ], + months_abbr => [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ], + weekdays => [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ], + weekdays_abbr => [ 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su' ], + }, }; -our $durations=[ - 0, 5,10,15,20,30,40,45,50,60,70,75,80,90,100,105,110,115,120,135,150,165,180,195,210,225,240,300,360,420,480,540,600,660,720,1440 +our $durations = [ + 0, 5, 10, 15, 20, 30, 40, 45, 50, 60, 70, 75, 80, 90, 100, 105, 110, 115, + 120, 135, 150, 165, 180, 195, 210, 225, 240, 300, 360, 420, 480, 540, 600, 660, 720, 1440 ]; -sub get_names{ - my $language=shift||'en'; - return $time::names->{$language}; +sub get_names { + my $language = shift || 'en'; + return $time::names->{$language}; } -sub get_all_names{ - return $time::names; +sub get_all_names { + return $time::names; } -sub get_durations{ - return $time::durations; +sub get_durations { + return $time::durations; } #TODO: build from datenames -our $weekday_index={ - '0' => 0, - '1' => 1, - '2' => 2, - '3' => 3, - '4' => 4, - '5' => 5, - '6' => 6, - 'Mo'=> 0, - 'Tu'=> 1, - 'Di'=> 1, - 'We'=> 2, - 'Mi'=> 2, - 'Th'=> 3, - 'Do'=> 3, - 'Fr'=> 4, - 'Sa'=> 5, - 'Su'=> 6, - 'So'=> 6 +our $weekday_index = { + '0' => 0, + '1' => 1, + '2' => 2, + '3' => 3, + '4' => 4, + '5' => 5, + '6' => 6, + 'Mo' => 0, + 'Tu' => 1, + 'Di' => 1, + 'We' => 2, + 'Mi' => 2, + 'Th' => 3, + 'Do' => 3, + 'Fr' => 4, + 'Sa' => 5, + 'Su' => 6, + 'So' => 6 }; -sub get_weekdays{ - return{ - 1 => 1, - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - 6 => 6, - 7 => 7, - 'Mo'=>1, - 'Tu'=>2, - 'Di'=>2, - 'We'=>3, - 'Mi'=>3, - 'Th'=>4, - 'Do'=>4, - 'Fr'=>5, - 'Sa'=>6, - 'Su'=>7, - 'So'=>7 - }; +sub get_weekdays { + return { + 1 => 1, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + 6 => 6, + 7 => 7, + 'Mo' => 1, + 'Tu' => 2, + 'Di' => 2, + 'We' => 3, + 'Mi' => 3, + 'Th' => 4, + 'Do' => 4, + 'Fr' => 5, + 'Sa' => 6, + 'Su' => 7, + 'So' => 7 + }; } - #deprecated, for wordpress sync -sub format_datetime{ - my $datetime=shift; - return $datetime if ($datetime eq ''); - return add_hours_to_datetime($datetime,0); -}; +sub format_datetime { + my $datetime = shift; + return $datetime if ( $datetime eq '' ); + return add_hours_to_datetime( $datetime, 0 ); +} #deprecated -sub format_time{ - my $t=$_[0]; +sub format_time { + my $t = $_[0]; - my $year =$t->[5]+1900; - my $month =$t->[4]+1; - $month ='0'.$month if(length($month)==1); + my $year = $t->[5] + 1900; + my $month = $t->[4] + 1; + $month = '0' . $month if ( length($month) == 1 ); - my $day =$t->[3]; - $day ='0'.$day if(length($day)==1); + my $day = $t->[3]; + $day = '0' . $day if ( length($day) == 1 ); + my $hour = $t->[2]; + $hour = '0' . $hour if ( length($hour) == 1 ); - my $hour =$t->[2]; - $hour ='0'.$hour if(length($hour)==1); - - my $minute =$t->[1]; - $minute ='0'.$minute if(length($minute)==1); - - return [$day,$month,$year,$hour,$minute]; -}; + my $minute = $t->[1]; + $minute = '0' . $minute if ( length($minute) == 1 ); + return [ $day, $month, $year, $hour, $minute ]; +} # convert datetime to unix time -sub datetime_to_time{ - my $datetime=$_[0]; -# print $datetime."\n"; - if ($datetime=~/(\d\d\d\d)\-(\d+)\-(\d+)[T\s](\d+)\:(\d+)(\:(\d+))?/){ - my $year=$1; - my $month=$2-1; - my $day=$3; - my $hour=$4; - my $minute=$5; - my $second=$8||0; - return Time::Local::timelocal($second,$minute,$hour,$day,$month,$year); - - }else{ +sub datetime_to_time { + my $datetime = $_[0]; + + # print $datetime."\n"; + if ( $datetime =~ /(\d\d\d\d)\-(\d+)\-(\d+)[T\s](\d+)\:(\d+)(\:(\d+))?/ ) { + my $year = $1; + my $month = $2 - 1; + my $day = $3; + my $hour = $4; + my $minute = $5; + my $second = $8 || 0; + return Time::Local::timelocal( $second, $minute, $hour, $day, $month, $year ); + + } else { print STDERR "datetime_to_time: no valid date time found! ($datetime )\n"; return -1; } -}; +} #get rfc822 datetime string from datetime string -sub datetime_to_rfc822{ - my $datetime=$_[0]; - my $time=datetime_to_time($datetime); - return POSIX::strftime("%a, %d %b %Y %H:%M:%S %z", localtime($time)); +sub datetime_to_rfc822 { + my $datetime = $_[0]; + my $time = datetime_to_time($datetime); + return POSIX::strftime( "%a, %d %b %Y %H:%M:%S %z", localtime($time) ); } #get seconds from epoch -sub datetime_to_utc{ - my $datetime=shift; - my $time_zone=shift; - $datetime=get_datetime($datetime, $time_zone); +sub datetime_to_utc { + my $datetime = shift; + my $time_zone = shift; + $datetime = get_datetime( $datetime, $time_zone ); return $datetime->epoch(); } # get full utc datetime including timezone offset -sub datetime_to_utc_datetime{ - my $datetime=shift; - my $time_zone=shift; - $datetime=get_datetime($datetime, $time_zone); +sub datetime_to_utc_datetime { + my $datetime = shift; + my $time_zone = shift; + $datetime = get_datetime( $datetime, $time_zone ); return $datetime->format_cldr("yyyy-MM-ddTHH:mm:ssZZZZZ"); } - - #add hours to datetime string -sub add_hours_to_datetime{ - my $datetime=shift; - my $hours=shift; - $hours=0 unless defined $hours; - return time_to_datetime(datetime_to_time($datetime)+(3600*$hours)); -}; +sub add_hours_to_datetime { + my $datetime = shift; + my $hours = shift; + $hours = 0 unless defined $hours; + return time_to_datetime( datetime_to_time($datetime) + ( 3600 * $hours ) ); +} #add minutes to datetime string -sub add_minutes_to_datetime{ - my $datetime=shift; - my $minutes=shift; - $minutes=0 unless defined $minutes; - return time_to_datetime(datetime_to_time($datetime)+(60*$minutes)); -}; +sub add_minutes_to_datetime { + my $datetime = shift; + my $minutes = shift; + $minutes = 0 unless defined $minutes; + return time_to_datetime( datetime_to_time($datetime) + ( 60 * $minutes ) ); +} #add days to datetime string -sub add_days_to_datetime{ - my $datetime=shift; - my $days=shift; - $days=0 unless defined $days; - my $time=datetime_to_array($datetime); +sub add_days_to_datetime { + my $datetime = shift; + my $days = shift; + $days = 0 unless defined $days; + my $time = datetime_to_array($datetime); + #print STDERR Dumper($time); - ($time->[0], $time->[1], $time->[2]) =Date::Calc::Add_Delta_Days($time->[0]+0, $time->[1]+0, $time->[2]+0, $days); + ( $time->[0], $time->[1], $time->[2] ) = Date::Calc::Add_Delta_Days( $time->[0] + 0, $time->[1] + 0, $time->[2] + 0, $days ); return array_to_datetime($time); } -sub add_days_to_date{ - my $datetime=shift; - my $days=shift; - $days=0 unless defined $days; - my $date=date_to_array($datetime); - ($date->[0], $date->[1], $date->[2]) =Date::Calc::Add_Delta_Days($date->[0]+0, $date->[1]+0, $date->[2]+0, $days); +sub add_days_to_date { + my $datetime = shift; + my $days = shift; + $days = 0 unless defined $days; + my $date = date_to_array($datetime); + ( $date->[0], $date->[1], $date->[2] ) = Date::Calc::Add_Delta_Days( $date->[0] + 0, $date->[1] + 0, $date->[2] + 0, $days ); return array_to_date($date); } # convert unix time to datetime format -sub time_to_datetime{ - my $time=shift; - $time=time() unless((defined $time) && ($time ne'')); - my @t=localtime($time); - return sprintf('%04d-%02d-%02d %02d:%02d:%02d', $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]); -}; +sub time_to_datetime { + my $time = shift; + $time = time() unless ( ( defined $time ) && ( $time ne '' ) ); + my @t = localtime($time); + return sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $t[5] + 1900, $t[4] + 1, $t[3], $t[2], $t[1], $t[0] ); +} # convert unix time to date format -sub time_to_date{ - my $time=shift; - $time=time() unless((defined $time) && ($time ne'')); - my @t=localtime($time); - return sprintf('%04d-%02d-%02d', $t[5]+1900, $t[4]+1, $t[3]); -}; +sub time_to_date { + my $time = shift; + $time = time() unless ( ( defined $time ) && ( $time ne '' ) ); + my @t = localtime($time); + return sprintf( '%04d-%02d-%02d', $t[5] + 1900, $t[4] + 1, $t[3] ); +} # convert datetime to a array of date/time values -sub datetime_to_array{ - my $datetime=$_[0]||''; - if ($datetime=~/(\d\d\d\d)\-(\d+)\-(\d+)([T\s]+(\d+)\:(\d+)(\:(\d+))?)?/){ - my $year=$1; - my $month=$2; - my $day=$3; - my $hour=$5||'00'; - my $minute=$6||'00'; - my $second=$8||'00'; - return [$year,$month,$day,$hour,$minute,$second]; +sub datetime_to_array { + my $datetime = $_[0] || ''; + if ( $datetime =~ /(\d\d\d\d)\-(\d+)\-(\d+)([T\s]+(\d+)\:(\d+)(\:(\d+))?)?/ ) { + my $year = $1; + my $month = $2; + my $day = $3; + my $hour = $5 || '00'; + my $minute = $6 || '00'; + my $second = $8 || '00'; + return [ $year, $month, $day, $hour, $minute, $second ]; } return undef; -}; +} # convert datetime to date -sub datetime_to_date{ - my $datetime=$_[0]||''; - if ($datetime=~/(\d\d\d\d)\-(\d+)\-(\d+)/){ - my $year=$1; - my $month=$2; - my $day=$3; - return sprintf("%04d-%02d-%02d",$year,$month,$day); - } - return undef; -}; - -#convert datetime array or single value to datetime string -sub array_to_datetime{ - my $date =shift; - if(ref($date)eq'ARRAY'){ - return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $date->[0], $date->[1], $date->[2], $date->[3], $date->[4], $date->[5]); - } - my $month =shift; - my $day =shift; - my $hour =shift||'0'; - my $minute =shift||'0'; - my $second =shift||'0'; - return sprintf("%04d-%02d-%02d %02d:%02d:%02d", $date, $month, $day, $hour, $minute, $second); -} - -#convert date array or single values to date string -sub array_to_date{ - my $date =shift; - if(ref($date)eq'ARRAY'){ - return sprintf("%04d-%02d-%02d", $date->[0], $date->[1], $date->[2]); - } - my $month=shift; - my $day =shift; - return sprintf("%04d-%02d-%02d", $date, $month, $day); -} - -sub array_to_time{ - my $date =shift; - if(ref($date)eq'ARRAY'){ - return sprintf("%02d:%02d:%02d", $date->[3], $date->[4], $date->[5]); - } - my $minute = shift||0; - my $second = shift||0; - return sprintf("%02d:%02d:%02d", $date, $minute, $second); -} - -sub array_to_time_hm{ - my $date =shift; - if(ref($date)eq'ARRAY'){ - return sprintf("%02d:%02d", $date->[3], $date->[4]); - } - my $minute = shift||0; - return sprintf("%02d:%02d", $date, $minute); -} - - -# get number of days between two days -sub days_between{ - my $today=$_[0]; - my $date=$_[1]; - my $delta_days=eval{Date::Calc::Delta_Days( - $today->[0],$today->[1],$today->[2], - $date->[0], $date->[1], $date->[2] - )}; - return $delta_days; -} - -sub dayOfYear{ - my $datetime=$_[0]; - if ($datetime=~/(\d\d\d\d)\-(\d+)\-(\d+)/){ +sub datetime_to_date { + my $datetime = $_[0] || ''; + if ( $datetime =~ /(\d\d\d\d)\-(\d+)\-(\d+)/ ) { my $year = $1; my $month = $2; my $day = $3; - return Date::Calc::Day_of_Year($year,$month,$day); + return sprintf( "%04d-%02d-%02d", $year, $month, $day ); + } + return undef; +} + +#convert datetime array or single value to datetime string +sub array_to_datetime { + my $date = shift; + if ( ref($date) eq 'ARRAY' ) { + return sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $date->[0], $date->[1], $date->[2], $date->[3], $date->[4], $date->[5] ); + } + my $month = shift; + my $day = shift; + my $hour = shift || '0'; + my $minute = shift || '0'; + my $second = shift || '0'; + return sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $date, $month, $day, $hour, $minute, $second ); +} + +#convert date array or single values to date string +sub array_to_date { + my $date = shift; + if ( ref($date) eq 'ARRAY' ) { + return sprintf( "%04d-%02d-%02d", $date->[0], $date->[1], $date->[2] ); + } + my $month = shift; + my $day = shift; + return sprintf( "%04d-%02d-%02d", $date, $month, $day ); +} + +sub array_to_time { + my $date = shift; + if ( ref($date) eq 'ARRAY' ) { + return sprintf( "%02d:%02d:%02d", $date->[3], $date->[4], $date->[5] ); + } + my $minute = shift || 0; + my $second = shift || 0; + return sprintf( "%02d:%02d:%02d", $date, $minute, $second ); +} + +sub array_to_time_hm { + my $date = shift; + if ( ref($date) eq 'ARRAY' ) { + return sprintf( "%02d:%02d", $date->[3], $date->[4] ); + } + my $minute = shift || 0; + return sprintf( "%02d:%02d", $date, $minute ); +} + +# get number of days between two days +sub days_between { + my $today = $_[0]; + my $date = $_[1]; + my $delta_days = eval { Date::Calc::Delta_Days( $today->[0], $today->[1], $today->[2], $date->[0], $date->[1], $date->[2] ) }; + return $delta_days; +} + +sub dayOfYear { + my $datetime = $_[0]; + if ( $datetime =~ /(\d\d\d\d)\-(\d+)\-(\d+)/ ) { + my $year = $1; + my $month = $2; + my $day = $3; + return Date::Calc::Day_of_Year( $year, $month, $day ); } return undef; } # get duration in minutes -sub get_duration{ - my $start = shift; - my $end = shift; - my $timezone= shift; - $start=time::get_datetime($start, $timezone); - $end =time::get_datetime($end, $timezone); - my $duration=$end->epoch()-$start->epoch(); - return $duration/60; +sub get_duration { + my $start = shift; + my $end = shift; + my $timezone = shift; + $start = time::get_datetime( $start, $timezone ); + $end = time::get_datetime( $end, $timezone ); + my $duration = $end->epoch() - $start->epoch(); + return $duration / 60; } # get duration in seconds -sub get_duration_seconds{ - my $start = shift; - my $end = shift; - my $timezone= shift||'UTC'; +sub get_duration_seconds { + my $start = shift; + my $end = shift; + my $timezone = shift || 'UTC'; - unless (defined $start){ - print STDERR "time::get_duration_seconds(): start is missing\n"; - return 0; - } - unless (defined $end){ - print STDERR "time::get_duration_seconds(): end is missing\n"; - return 0; - } + unless ( defined $start ) { + print STDERR "time::get_duration_seconds(): start is missing\n"; + return 0; + } + unless ( defined $end ) { + print STDERR "time::get_duration_seconds(): end is missing\n"; + return 0; + } - $start= time::get_datetime($start, $timezone); - $end = time::get_datetime($end, $timezone); - unless (defined $start){ - print STDERR "time::get_duration_seconds(): invalid start\n"; - return 0; - } - unless (defined $end){ - print STDERR "time::get_duration_seconds(): invalid end\n"; - return 0; - } - my $duration=$end->epoch() - $start->epoch(); + $start = time::get_datetime( $start, $timezone ); + $end = time::get_datetime( $end, $timezone ); + unless ( defined $start ) { + print STDERR "time::get_duration_seconds(): invalid start\n"; + return 0; + } + unless ( defined $end ) { + print STDERR "time::get_duration_seconds(): invalid end\n"; + return 0; + } + my $duration = $end->epoch() - $start->epoch(); return $duration; } # convert date string to a array of date values -sub date_to_array{ - my $datetime=$_[0]; - if ($datetime=~/(\d\d\d\d)\-(\d+)\-(\d+)/){ +sub date_to_array { + my $datetime = $_[0]; + if ( $datetime =~ /(\d\d\d\d)\-(\d+)\-(\d+)/ ) { my $year = $1; my $month = $2; my $day = $3; - return [$year,$month,$day]; + return [ $year, $month, $day ]; } return undef; -}; +} -# parse date string and return date string +# parse date string and return date string # pass 'today', return '' on parse error -sub date_cond{ - my $date=shift; +sub date_cond { + my $date = shift; - return '' if ($date eq''); - if ($date=~/(\d\d\d\d)\-(\d\d?)\-(\d\d?)/){ + return '' if ( $date eq '' ); + if ( $date =~ /(\d\d\d\d)\-(\d\d?)\-(\d\d?)/ ) { my $year = $1; my $month = $2; - my $day = $3; - return sprintf("%04d-%02d-%02d", $year, $month, $day); + my $day = $3; + return sprintf( "%04d-%02d-%02d", $year, $month, $day ); } - return 'today' if ($date eq 'today'); + return 'today' if ( $date eq 'today' ); return ''; -}; +} #parse time and return time string hh:mm:ss #return hh:00 if time is 'now' -sub time_cond{ +sub time_cond { my $time = shift; - return '' if ($time eq''); - if ($time=~/(\d\d?)\:(\d\d?)(\:(\d\d))?/){ - my $hour=$1; - my $minute=$2; - my $second=$4||'00'; - return sprintf("%02d:%02d:%02d", $hour, $minute, $second); + return '' if ( $time eq '' ); + if ( $time =~ /(\d\d?)\:(\d\d?)(\:(\d\d))?/ ) { + my $hour = $1; + my $minute = $2; + my $second = $4 || '00'; + return sprintf( "%02d:%02d:%02d", $hour, $minute, $second ); } - if ($time eq 'now'){ - my $date=datetime_to_array(time_to_datetime(time())); - my $hour=$date->[3]-2; - $hour=0 if ($hour<0); - $time=sprintf("%02d:00",$hour); + if ( $time eq 'now' ) { + my $date = datetime_to_array( time_to_datetime( time() ) ); + my $hour = $date->[3] - 2; + $hour = 0 if ( $hour < 0 ); + $time = sprintf( "%02d:00", $hour ); return $time; } return ''; -}; - -#parse date and time string and return yyyy-mm-ddThh:mm:ss -sub datetime_cond{ - my $datetime = shift; - - return '' if ($datetime eq''); - (my $date,my $time)=split /[ T]/,$datetime; - $date=time::date_cond($date); - return '' if ($date eq''); - $time=time::time_cond($time); - return '' if ($time eq''); - - return $date.'T'.$time; } -sub check_date{ - my $date=shift; +#parse date and time string and return yyyy-mm-ddThh:mm:ss +sub datetime_cond { + my $datetime = shift; - return "" if((!defined $date) || ($date eq '')); - if($date=~/(\d\d\d\d)\-(\d\d?)\-(\d\d?)/){ - return $1.'-'.$2.'-'.$3; - }elsif($date=~/(\d\d?)\.(\d\d?)\.(\d\d\d\d)/){ - return $3.'-'.$2.'-'.$1; + return '' if ( $datetime eq '' ); + ( my $date, my $time ) = split /[ T]/, $datetime; + $date = time::date_cond($date); + return '' if ( $date eq '' ); + $time = time::time_cond($time); + return '' if ( $time eq '' ); + + return $date . 'T' . $time; +} + +sub check_date { + my $date = shift; + + return "" if ( ( !defined $date ) || ( $date eq '' ) ); + if ( $date =~ /(\d\d\d\d)\-(\d\d?)\-(\d\d?)/ ) { + return $1 . '-' . $2 . '-' . $3; + } elsif ( $date =~ /(\d\d?)\.(\d\d?)\.(\d\d\d\d)/ ) { + return $3 . '-' . $2 . '-' . $1; } - return $date if ($date eq'today' || $date eq'tomorrow' || $date eq'yesterday'); + return $date if ( $date eq 'today' || $date eq 'tomorrow' || $date eq 'yesterday' ); return -1; + #error("no valid date format given!"); -}; +} -sub check_time{ - my $time=shift; - return "" if((!defined $time) || ($time eq '')); - return $time if(($time eq 'now') || ($time eq 'future')); - if($time=~/(\d\d?)\:(\d\d?)/){ - return $1.':'.$2 +sub check_time { + my $time = shift; + return "" if ( ( !defined $time ) || ( $time eq '' ) ); + return $time if ( ( $time eq 'now' ) || ( $time eq 'future' ) ); + if ( $time =~ /(\d\d?)\:(\d\d?)/ ) { + return $1 . ':' . $2; } return -1; -}; +} -sub check_datetime{ - my $date=shift; +sub check_datetime { + my $date = shift; - return "" if((!defined $date) || ($date eq '')); - if($date=~/(\d\d\d\d)\-(\d\d?)\-(\d\d?)[T ](\d\d?)\:(\d\d?)/){ - return sprintf("%04d-%02d-%02dT%02d:%02d",$1,$2,$3,$4,$5); + return "" if ( ( !defined $date ) || ( $date eq '' ) ); + if ( $date =~ /(\d\d\d\d)\-(\d\d?)\-(\d\d?)[T ](\d\d?)\:(\d\d?)/ ) { + return sprintf( "%04d-%02d-%02dT%02d:%02d", $1, $2, $3, $4, $5 ); } return -1; -}; +} -sub check_year_month{ - my $date=shift; - return -1 unless(defined $date); - return $date if($date eq ''); - if($date=~/(\d\d\d\d)\-(\d\d?)/){ - return $1.'-'.$2.'-'.$3; +sub check_year_month { + my $date = shift; + return -1 unless ( defined $date ); + return $date if ( $date eq '' ); + if ( $date =~ /(\d\d\d\d)\-(\d\d?)/ ) { + return $1 . '-' . $2 . '-' . $3; } return -1; -}; +} #TODO: remove config dependency -sub date_time_format{ - my $datetime=shift; - my $language=shift || $config::config->{date}->{language} || 'en'; - if (defined $datetime && $datetime=~/(\d\d\d\d)\-(\d\d?)\-(\d\d?)[\sT](\d\d?\:\d\d?)/){ - my $time=$4; - my $day=$3; - my $month=$2; - my $year=$1; - - $month=$time::names->{$language}->{months_abbr}->[$month-1]||''; +sub date_time_format { + my $datetime = shift; + my $language = shift || $config::config->{date}->{language} || 'en'; + if ( defined $datetime && $datetime =~ /(\d\d\d\d)\-(\d\d?)\-(\d\d?)[\sT](\d\d?\:\d\d?)/ ) { + my $time = $4; + my $day = $3; + my $month = $2; + my $year = $1; + + $month = $time::names->{$language}->{months_abbr}->[ $month - 1 ] || ''; return "$day. $month $year $time"; } return $datetime; @@ -493,123 +491,125 @@ sub date_time_format{ #format datetime to date string #TODO: remove config dependency -sub date_format{ - my $datetime=shift; - my $language=shift || $config::config->{date}->{language} || 'en'; +sub date_format { + my $datetime = shift; + my $language = shift || $config::config->{date}->{language} || 'en'; - if (defined $datetime && $datetime=~/(\d\d\d\d)\-(\d\d?)\-(\d\d?)/){ - my $day=$3; - my $month=$2; - my $year=$1; - $month=$time::names->{$language}->{months_abbr}->[$month-1]||''; + if ( defined $datetime && $datetime =~ /(\d\d\d\d)\-(\d\d?)\-(\d\d?)/ ) { + my $day = $3; + my $month = $2; + my $year = $1; + $month = $time::names->{$language}->{months_abbr}->[ $month - 1 ] || ''; return "$day. $month $year"; } return $datetime; -}; +} #format datetime to time string -sub time_format{ - my $datetime=shift; - if (defined $datetime && $datetime=~/(\d\d?\:\d\d?)/){ +sub time_format { + my $datetime = shift; + if ( defined $datetime && $datetime =~ /(\d\d?\:\d\d?)/ ) { return $1; } return $datetime; -}; +} #get offset from given time_zone -sub utc_offset{ - my $time_zone=shift; +sub utc_offset { + my $time_zone = shift; - $a=DateTime->now(); + $a = DateTime->now(); $a->set_time_zone($time_zone); return $a->strftime("%z"); } #get weekday from (yyyy,mm,dd) -sub weekday{ - my ($year,$month,$day)=@_; - my $time = Time::Local::timelocal(0,0,0,$day,$month-1,$year); - return (localtime($time))[6]; +sub weekday { + my ( $year, $month, $day ) = @_; + my $time = Time::Local::timelocal( 0, 0, 0, $day, $month - 1, $year ); + return ( localtime($time) )[6]; } #get current date, related to starting day_starting_hour #TODO: remove config dependency -sub get_event_date{ - my $config=shift; - $config=$config::config unless defined $config; +sub get_event_date { + my $config = shift; + $config = $config::config unless defined $config; - my $datetime=time::time_to_datetime(time()); - my $hour=(time::datetime_to_array($datetime))->[3]; - #print STDERR "datetime=$datetime hour=$hour\n"; + my $datetime = time::time_to_datetime( time() ); + my $hour = ( time::datetime_to_array($datetime) )->[3]; + + #print STDERR "datetime=$datetime hour=$hour\n"; #today: between 0:00 and starting_hour show last day - if ($hour < $config->{date}->{day_starting_hour}){ - my $date=time::datetime_to_array(time::add_days_to_datetime($datetime,-1)); - return join('-', ($date->[0], $date->[1], $date->[2]) ); - }else{ - #today: between starting_hour and end of day show current day - my $date=time::datetime_to_array(time::time_to_datetime(time())); - return join('-', ($date->[0], $date->[1], $date->[2]) ); + if ( $hour < $config->{date}->{day_starting_hour} ) { + my $date = time::datetime_to_array( time::add_days_to_datetime( $datetime, -1 ) ); + return join( '-', ( $date->[0], $date->[1], $date->[2] ) ); + } else { + + #today: between starting_hour and end of day show current day + my $date = time::datetime_to_array( time::time_to_datetime( time() ) ); + return join( '-', ( $date->[0], $date->[1], $date->[2] ) ); } } #get datetime object from datetime string -sub get_datetime{ - my $datetime=shift; - my $timezone=shift; +sub get_datetime { + my $datetime = shift; + my $timezone = shift; - return unless defined $datetime; + return unless defined $datetime; return if $datetime eq ''; - my @l = @{time::datetime_to_array($datetime)}; - return undef if scalar(@l)==0; + my @l = @{ time::datetime_to_array($datetime) }; + return undef if scalar(@l) == 0; - # catch invalid datees - $datetime=undef; - eval{ - $datetime=DateTime->new( - year =>$l[0], - month =>$l[1], - day =>$l[2], - hour =>$l[3], - minute =>$l[4], - second =>$l[5], - time_zone=> $timezone - ); + # catch invalid datees + $datetime = undef; + eval { + $datetime = DateTime->new( + year => $l[0], + month => $l[1], + day => $l[2], + hour => $l[3], + minute => $l[4], + second => $l[5], + time_zone => $timezone + ); }; return undef unless defined $datetime; - $datetime->set_locale('de_DE'); + $datetime->set_locale('de_DE'); return $datetime; } #get list of nth weekday in month from start to end -sub get_nth_weekday_in_month{ - my $start = shift; # datetime string - my $end = shift; # datetime string - my $nth = shift; # every nth week of month - my $weekday = shift; # weekday [1..7,'Mo'-'Su','Mo'-'Fr'] +sub get_nth_weekday_in_month { + my $start = shift; # datetime string + my $end = shift; # datetime string + my $nth = shift; # every nth week of month + my $weekday = shift; # weekday [1..7,'Mo'-'Su','Mo'-'Fr'] - return [] unless defined $start; - return [] unless defined $end; - return [] unless defined $nth; - return [] unless defined $weekday; + return [] unless defined $start; + return [] unless defined $end; + return [] unless defined $nth; + return [] unless defined $weekday; - my $weekdays = time::get_weekdays(); - return [] unless defined $weekdays->{$weekday}; - $weekday = $weekdays->{$weekday}; - - my $dates=[]; - - if ($start=~/(\d\d\d\d)-(\d\d)-(\d\d)[ T](\d\d)\:(\d\d)/){ - my $hour=int($4); - my $min=int($5); - my $sec=0; - my @date = Date::Manip::ParseRecur("0:1*$nth:$weekday:$hour:$min:$sec", "", $start, $end); - for my $date (@date){ - if ($date=~/(\d\d\d\d)(\d\d)(\d\d)(\d\d)\:(\d\d)\:(\d\d)/){ - push @$dates,"$1-$2-$3 $4:$5:$6"; - } - } - } - return $dates; + my $weekdays = time::get_weekdays(); + return [] unless defined $weekdays->{$weekday}; + $weekday = $weekdays->{$weekday}; + + my $dates = []; + + if ( $start =~ /(\d\d\d\d)-(\d\d)-(\d\d)[ T](\d\d)\:(\d\d)/ ) { + my $hour = int($4); + my $min = int($5); + my $sec = 0; + my @date = Date::Manip::ParseRecur( "0:1*$nth:$weekday:$hour:$min:$sec", "", $start, $end ); + for my $date (@date) { + if ( $date =~ /(\d\d\d\d)(\d\d)(\d\d)(\d\d)\:(\d\d)\:(\d\d)/ ) { + push @$dates, "$1-$2-$3 $4:$5:$6"; + } + } + } + return $dates; } #do not delete last line! diff --git a/lib/calcms/uac.pm b/lib/calcms/uac.pm index 754ee98..2b558d0 100644 --- a/lib/calcms/uac.pm +++ b/lib/calcms/uac.pm @@ -1,54 +1,49 @@ -#!/bin/perl - -use CGI; -#use CGI::Carp qw(warningsToBrowser fatalsToBrowser); +use CGI(); use CGI::Session qw(-ip-match); -use CGI::Cookie; -#$CGI::Session::IP_MATCH=1; +use CGI::Cookie(); -package uac; +package uac; use warnings "all"; use strict; use Data::Dumper; -use auth; -use db; -use template; -use project; -use studios; -#use series; +use auth(); +use db(); +use template(); +use project(); +use studios(); require Exporter; -our @ISA = qw(Exporter); +our @ISA = qw(Exporter); our @EXPORT_OK = qw( - get_user get_users update_user insert_user delete_user - get_roles insert_role update_role get_role_columns - get_studios_by_user get_users_by_studio - get_projects_by_user - get_user_role get_studio_roles - assign_user_role remove_user_role - get_user_permissions get_user_presets - prepare_request set_template_permissions - permission_denied + get_user get_users update_user insert_user delete_user + get_roles insert_role update_role get_role_columns + get_studios_by_user get_users_by_studio + get_projects_by_user + get_user_role get_studio_roles + assign_user_role remove_user_role + get_user_permissions get_user_presets + prepare_request set_template_permissions + permission_denied ); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; # get user by name -sub get_user{ - my $config=shift; - my $user=shift; +sub get_user { + my $config = shift; + my $user = shift; - my $query=qq{ + my $query = qq{ select id, name, full_name, email, disabled, modified_at, created_at from calcms_users where name=? }; - my $bind_values=[$user]; + my $bind_values = [$user]; - my $dbh=db::connect($config); - my $users=db::get($dbh, $query,$bind_values); - if (@$users!=1){ + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, $bind_values ); + if ( @$users != 1 ) { print STDERR "cannot find user '$user'\n"; return undef; } @@ -56,32 +51,32 @@ sub get_user{ } # get all users -sub get_users{ +sub get_users { my $config = shift; - my $condition = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - for my $key ('name', 'email'){ - my $value = $condition->{$key}; - next unless defined $value; - next if $value eq ''; - push @conditions, $key.'=?'; - push @bind_values, $value; - } + for my $key ( 'name', 'email' ) { + my $value = $condition->{$key}; + next unless defined $value; + next if $value eq ''; + push @conditions, $key . '=?'; + push @bind_values, $value; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (scalar @conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( scalar @conditions > 0 ); - my $query=qq{ + my $query = qq{ select id, name, full_name, email, disabled, modified_at, created_at from calcms_users $conditions }; - my $dbh = db::connect($config); - my $users = db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, \@bind_values ); return $users; } @@ -89,378 +84,377 @@ sub get_users{ # get all users of a given studio id # used at series (previously named get_studio_users) -sub get_users_by_studio{ - my $config=shift; - my $condition=shift; +sub get_users_by_studio { + my $config = shift; + my $condition = shift; - return unless (defined $condition->{studio_id}); + return unless ( defined $condition->{studio_id} ); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ur.project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ur.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (scalar @conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( scalar @conditions > 0 ); - my $query=qq{ + my $query = qq{ select distinct(u.id), u.name, u.full_name from calcms_user_roles ur, calcms_users u where ur.user_id=u.id $conditions }; - my $dbh=db::connect($config); - my $users=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, \@bind_values ); return $users; } # get projects a user is assigned by name -sub get_projects_by_user{ - my $config=shift; - my $condition=shift; +sub get_projects_by_user { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ur.project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ur.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'u.name=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'u.name=?'; push @bind_values, $condition->{user}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select distinct p.*, ur.project_id project_id from calcms_user_roles ur, calcms_users u, calcms_projects p where ur.user_id=u.id and p.project_id=ur.project_id $conditions }; - my $dbh=db::connect($config); - my $users=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, \@bind_values ); return $users; } # get all studios a user is assigned to by role # used at series (previously named get_user_studios) -sub get_studios_by_user{ - my $config=shift; - my $condition=shift; +sub get_studios_by_user { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ur.project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ur.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'u.name=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'u.name=?'; push @bind_values, $condition->{user}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select distinct s.*, ur.project_id project_id from calcms_user_roles ur, calcms_users u, calcms_studios s where ur.user_id=u.id and s.id=ur.studio_id $conditions }; - my $dbh=db::connect($config); - my $users=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, \@bind_values ); return $users; } -sub insert_user{ - my $config=shift; - my $entry=shift; +sub insert_user { + my $config = shift; + my $entry = shift; - $entry->{created_at} = time::time_to_datetime(time()); - $entry->{modified_at}= time::time_to_datetime(time()); + $entry->{created_at} = time::time_to_datetime( time() ); + $entry->{modified_at} = time::time_to_datetime( time() ); - my $dbh=db::connect($config); - db::insert($dbh, 'calcms_users', $entry); + my $dbh = db::connect($config); + db::insert( $dbh, 'calcms_users', $entry ); } -sub update_user{ - my $config=shift; - my $entry=shift; +sub update_user { + my $config = shift; + my $entry = shift; - $entry->{modified_at}= time::time_to_datetime(time()); + $entry->{modified_at} = time::time_to_datetime( time() ); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); - push @bind_values,$entry->{id}; + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); + push @bind_values, $entry->{id}; - my $query=qq{ + my $query = qq{ update calcms_users set $values where id=? }; - my $dbh =db::connect($config); - db::put($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + db::put( $dbh, $query, \@bind_values ); } -sub delete_user{ - my $config=shift; - my $id=shift; - return unless (defined $id && ($id=~/^\d+$/)); +sub delete_user { + my $config = shift; + my $id = shift; + return unless ( defined $id && ( $id =~ /^\d+$/ ) ); - my $query=qq{ + my $query = qq{ delete from calcms_users where id=? }; - my $dbh =db::connect($config); - db::put($dbh, $query, [$id]); + my $dbh = db::connect($config); + db::put( $dbh, $query, [$id] ); } - # get all roles used by all users of a studio # available conditions: project_id, studio_id -sub get_studio_roles{ - my $config=shift; - my $condition=shift; +sub get_studio_roles { + my $config = shift; + my $condition = shift; - return [] if ($condition->{studio_id} eq ''); + return [] if ( $condition->{studio_id} eq '' ); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ur.project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ur.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select r.*, ur.studio_id, ur.project_id from calcms_roles r, calcms_user_roles ur where r.id=ur.role_id $conditions }; - my $dbh=db::connect($config); - my $roles=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $roles = db::get( $dbh, $query, \@bind_values ); return $roles; } # get role columns (for external use only) -sub get_role_columns{ - my $config=shift; - my $dbh=db::connect($config); - my $columns=db::get_columns_hash($dbh, 'calcms_roles'); - return $columns +sub get_role_columns { + my $config = shift; + my $dbh = db::connect($config); + my $columns = db::get_columns_hash( $dbh, 'calcms_roles' ); + return $columns; } # get roles # filter: studio_id project_id -sub get_roles{ - my $config=shift; - my $condition=shift; +sub get_roles { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - my $dbh=db::connect($config); - my $columns=db::get_columns_hash($dbh, 'calcms_roles'); + my $dbh = db::connect($config); + my $columns = db::get_columns_hash( $dbh, 'calcms_roles' ); - for my $column (keys %$columns){ - if (defined $condition->{$column}){ - push @conditions, $column.'=?'; - push @bind_values, $condition->{$column}; - } + for my $column ( keys %$columns ) { + if ( defined $condition->{$column} ) { + push @conditions, $column . '=?'; + push @bind_values, $condition->{$column}; + } } - my $conditions=''; - $conditions=' where '.join(' and ',@conditions) if(@conditions>0); + my $conditions = ''; + $conditions = ' where ' . join( ' and ', @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select r.* from calcms_roles r $conditions }; - my $roles=db::get($dbh, $query, \@bind_values); + my $roles = db::get( $dbh, $query, \@bind_values ); return $roles; } #insert role to database, set created_at and modified_at -sub insert_role{ - my $config=shift; - my $entry=shift; +sub insert_role { + my $config = shift; + my $entry = shift; - $entry->{created_at} = time::time_to_datetime(time()); - $entry->{modified_at}= time::time_to_datetime(time()); + $entry->{created_at} = time::time_to_datetime( time() ); + $entry->{modified_at} = time::time_to_datetime( time() ); - my $dbh=db::connect($config); - my $columns=db::get_columns_hash($dbh, 'calcms_roles'); -; - my $role={}; - for my $column (keys %$columns){ - $role->{$column}=$entry->{$column} if defined $entry->{$column}; - } - db::insert($dbh, 'calcms_roles', $role); + my $dbh = db::connect($config); + my $columns = db::get_columns_hash( $dbh, 'calcms_roles' ); + my $role = {}; + for my $column ( keys %$columns ) { + $role->{$column} = $entry->{$column} if defined $entry->{$column}; + } + db::insert( $dbh, 'calcms_roles', $role ); } #update role, set modified_at -sub update_role{ - my $config=shift; - my $entry=shift; +sub update_role { + my $config = shift; + my $entry = shift; - $entry->{modified_at}= time::time_to_datetime(time()); + $entry->{modified_at} = time::time_to_datetime( time() ); - my $dbh =db::connect($config); - my $columns=db::get_columns_hash($dbh, 'calcms_roles'); - my $values =join(",", map {$_.'=?'} (keys %$columns)); - my @bind_values =map {$entry->{$_}} (keys %$columns); - push @bind_values,$entry->{id}; + my $dbh = db::connect($config); + my $columns = db::get_columns_hash( $dbh, 'calcms_roles' ); + my $values = join( ",", map { $_ . '=?' } ( keys %$columns ) ); + my @bind_values = map { $entry->{$_} } ( keys %$columns ); + push @bind_values, $entry->{id}; - my $query=qq{ + my $query = qq{ update calcms_roles set $values where id=? }; -# print $query."
    \n".Dumper(\@bind_values)."
    \ņ"; - db::put($dbh, $query, \@bind_values); + # print $query."
    \n".Dumper(\@bind_values)."
    \ņ"; + + db::put( $dbh, $query, \@bind_values ); } # delete role from database -sub delete_role{ - my $config=shift; - my $id=shift; +sub delete_role { + my $config = shift; + my $id = shift; - return unless (defined $id && ($id=~/^\d+$/)); + return unless ( defined $id && ( $id =~ /^\d+$/ ) ); - my $query=qq{ + my $query = qq{ delete from calcms_roles where id=? }; - my $dbh =db::connect($config); - db::put($dbh, $query, [$id]); + my $dbh = db::connect($config); + db::put( $dbh, $query, [$id] ); } # get all roles for given conditions: project_id, studio_id, user_id, name # includes global admin user role -sub get_user_roles{ - my $config=shift; - my $condition=shift; +sub get_user_roles { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if (defined $condition->{user}){ - push @conditions, 'u.name=?'; + if ( defined $condition->{user} ) { + push @conditions, 'u.name=?'; push @bind_values, $condition->{user}; } - if (defined $condition->{user_id}){ - push @conditions, 'ur.user_id=?'; + if ( defined $condition->{user_id} ) { + push @conditions, 'ur.user_id=?'; push @bind_values, $condition->{user_id}; } - if (defined $condition->{studio_id}){ - push @conditions, 'ur.studio_id=?'; + if ( defined $condition->{studio_id} ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if (defined $condition->{project_id}){ - push @conditions, 'ur.project_id=?'; + if ( defined $condition->{project_id} ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - my $conditions=''; - $conditions= " and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select distinct r.* from calcms_users u, calcms_user_roles ur, calcms_roles r where ur.user_id=u.id and ur.role_id=r.id $conditions }; - my $dbh=db::connect($config); - my $user_roles=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $user_roles = db::get( $dbh, $query, \@bind_values ); #return roles, if the contain an admin role - for my $role(@$user_roles){ - return $user_roles if $role->{role}eq'Admin'; + for my $role (@$user_roles) { + return $user_roles if $role->{role} eq 'Admin'; } - #get all admin roles - delete $condition->{studio_id} if defined $condition->{studio_id}; - delete $condition->{project_id} if defined $condition->{project_id}; - my $admin_roles=get_admin_user_roles($config, $condition); + #get all admin roles + delete $condition->{studio_id} if defined $condition->{studio_id}; + delete $condition->{project_id} if defined $condition->{project_id}; + my $admin_roles = get_admin_user_roles( $config, $condition ); #add admin roles to user roles - my @user_roles=(@$admin_roles, @$user_roles); - $user_roles=\@user_roles; + my @user_roles = ( @$admin_roles, @$user_roles ); + $user_roles = \@user_roles; return $user_roles; } #return admin user roles for given conditions: project_id, studio_id, user, user_id -sub get_admin_user_roles{ - my $config=shift; - my $condition=shift; +sub get_admin_user_roles { + my $config = shift; + my $condition = shift; - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'u.name=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'u.name=?'; push @bind_values, $condition->{user}; } - if ((defined $condition->{user_id}) && ($condition->{user_id} ne '')){ - push @conditions, 'ur.user_id=?'; + if ( ( defined $condition->{user_id} ) && ( $condition->{user_id} ne '' ) ) { + push @conditions, 'ur.user_id=?'; push @bind_values, $condition->{user_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'ur.studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'ur.studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'ur.project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'ur.project_id=?'; push @bind_values, $condition->{project_id}; } - my $conditions=''; - $conditions=" and ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " and " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select distinct r.*, ur.studio_id, ur.project_id from calcms_users u, calcms_user_roles ur, calcms_roles r where ur.user_id=u.id and ur.role_id=r.id and r.role='Admin' @@ -468,42 +462,48 @@ sub get_admin_user_roles{ limit 1 }; - my $dbh=db::connect($config); - my $user_roles=db::get($dbh, $query, \@bind_values); + my $dbh = db::connect($config); + my $user_roles = db::get( $dbh, $query, \@bind_values ); return $user_roles; } # read permissions for given conditions and add to user_permissions # return user_permissions # studio_id, user_id, name -sub get_user_permissions{ - my $config=shift; - my $conditions=shift; - my $user_permissions=shift; +sub get_user_permissions { + my $config = shift; + my $conditions = shift; + my $user_permissions = shift; - my $user_roles = get_user_roles($config, $conditions); - my $admin_roles = get_admin_user_roles($config, $conditions); - my @user_roles=(@$admin_roles,@$user_roles); + my $user_roles = get_user_roles( $config, $conditions ); + my $admin_roles = get_admin_user_roles( $config, $conditions ); + my @user_roles = ( @$admin_roles, @$user_roles ); #set default permissions - $user_permissions={} unless(defined $user_permissions); - $user_permissions->{is_admin}=1 if(scalar @$admin_roles>0); + $user_permissions = {} unless ( defined $user_permissions ); + $user_permissions->{is_admin} = 1 if ( scalar @$admin_roles > 0 ); - my $max_level=0; - # aggregate max permissions - # should be limited by project and studio - for my $user_role (@user_roles){ - if ($user_role->{level}>$max_level){ - $user_permissions->{level} = $user_role->{level}; - $user_permissions->{id} = $user_role->{id}; - $user_permissions->{role} = $user_role->{role}; - $user_permissions->{studio_id} = $user_role->{studio_id}; - $user_permissions->{project_id}= $user_role->{project_id}; - $max_level = $user_role->{level}; + my $max_level = 0; + + # aggregate max permissions + # should be limited by project and studio + for my $user_role (@user_roles) { + if ( $user_role->{level} > $max_level ) { + $user_permissions->{level} = $user_role->{level}; + $user_permissions->{id} = $user_role->{id}; + $user_permissions->{role} = $user_role->{role}; + $user_permissions->{studio_id} = $user_role->{studio_id}; + $user_permissions->{project_id} = $user_role->{project_id}; + $max_level = $user_role->{level}; } - for my $permission (keys %$user_role){ - if (($permission ne 'level') && ($permission ne 'id') && ($permission ne 'role') && ($permission ne 'studio_id') && ($permission ne 'project_id')){ - $user_permissions->{$permission}=1 if ((defined $user_role->{$permission}) && ($user_role->{$permission} ne '0')); + for my $permission ( keys %$user_role ) { + if ( ( $permission ne 'level' ) + && ( $permission ne 'id' ) + && ( $permission ne 'role' ) + && ( $permission ne 'studio_id' ) + && ( $permission ne 'project_id' ) ) + { + $user_permissions->{$permission} = 1 if ( ( defined $user_role->{$permission} ) && ( $user_role->{$permission} ne '0' ) ); } } } @@ -511,325 +511,322 @@ sub get_user_permissions{ } #get user id by user name -sub get_user_id{ - my $config=shift; - my $user=shift; +sub get_user_id { + my $config = shift; + my $user = shift; - return undef unless (defined $user); + return undef unless ( defined $user ); - my $query=qq{ + my $query = qq{ select id from calcms_users where binary name=? }; - my $dbh=db::connect($config); - my $users=db::get($dbh, $query, [$user]); - return undef if (@$users==0); + my $dbh = db::connect($config); + my $users = db::get( $dbh, $query, [$user] ); + return undef if ( @$users == 0 ); return $users->[0]->{id}; } #get role id by role name -sub get_role_id{ - my $config=shift; - my $role=shift; +sub get_role_id { + my $config = shift; + my $role = shift; - return undef unless (defined $role); + return undef unless ( defined $role ); - my $query=qq{ + my $query = qq{ select id from calcms_roles where role=? }; - my $dbh=db::connect($config); - my $roles=db::get($dbh, $query, [$role]); - return undef if (@$roles==0); + my $dbh = db::connect($config); + my $roles = db::get( $dbh, $query, [$role] ); + return undef if ( @$roles == 0 ); return $roles->[0]->{id}; } # assign a role to an user (for a studio) -sub assign_user_role{ - my $config=shift; - my $options=shift; - - #print STDERR Dumper($options); +sub assign_user_role { + my $config = shift; + my $options = shift; + + #print STDERR Dumper($options); return undef unless defined $options->{project_id}; return undef unless defined $options->{studio_id}; return undef unless defined $options->{user_id}; return undef unless defined $options->{role_id}; #return if already exists - my $query=qq{ + my $query = qq{ select * from calcms_user_roles where project_id=? and studio_id=? and user_id=? and role_id=? }; - my $dbh=db::connect($config); - my $user_roles=db::get($dbh, $query, [$options->{project_id}, $options->{studio_id}, $options->{user_id}, $options->{role_id}]); - return undef if (@$user_roles>0); + my $dbh = db::connect($config); + my $user_roles = db::get( $dbh, $query, [ $options->{project_id}, $options->{studio_id}, $options->{user_id}, $options->{role_id} ] ); + return undef if ( @$user_roles > 0 ); #insert entry - my $entry={ + my $entry = { project_id => $options->{project_id}, - studio_id => $options->{studio_id}, + studio_id => $options->{studio_id}, user_id => $options->{user_id}, role_id => $options->{role_id}, - created_at => time::time_to_datetime(time()) + created_at => time::time_to_datetime( time() ) }; - return db::insert($dbh, 'calcms_user_roles', $entry); + return db::insert( $dbh, 'calcms_user_roles', $entry ); } # unassign a user from a role of (for a studio) -sub remove_user_role{ - my $config=shift; - my $options=shift; - +sub remove_user_role { + my $config = shift; + my $options = shift; + return undef unless defined $options->{project_id}; return undef unless defined $options->{studio_id}; return undef unless defined $options->{user_id}; return undef unless defined $options->{role_id}; - my $query=qq{ + my $query = qq{ delete from calcms_user_roles where project_id=? and studio_id=? and user_id=? and role_id=? }; - my $bind_values=[ $options->{project_id}, $options->{studio_id}, $options->{user_id}, $options->{role_id} ]; - #print STDERR Dumper($query).Dumper($bind_values); - my $dbh=db::connect($config); - my $result=db::put($dbh, $query, $bind_values); - # successfully return even if no entry exists - return 1; + my $bind_values = [ $options->{project_id}, $options->{studio_id}, $options->{user_id}, $options->{role_id} ]; + + #print STDERR Dumper($query).Dumper($bind_values); + my $dbh = db::connect($config); + my $result = db::put( $dbh, $query, $bind_values ); + + # successfully return even if no entry exists + return 1; } #checks -sub is_user_assigned_to_studio{ - my $request=shift; - my $options=shift; +sub is_user_assigned_to_studio { + my $request = shift; + my $options = shift; my $config = $request->{config}; - return 0 unless defined $request->{user}; - return 0 unless defined $options->{studio_id}; - return 0 unless defined $options->{project_id}; + return 0 unless defined $request->{user}; + return 0 unless defined $options->{studio_id}; + return 0 unless defined $options->{project_id}; - my $options2={ - user => $request->{user}, - studio_id => $options->{studio_id}, - project_id => $options->{project_id} - }; + my $options2 = { + user => $request->{user}, + studio_id => $options->{studio_id}, + project_id => $options->{project_id} + }; - my $user_studios=uac::get_studios_by_user($config, $options2); - return 1 if(@$user_studios==1); + my $user_studios = uac::get_studios_by_user( $config, $options2 ); + return 1 if ( @$user_studios == 1 ); return 0; } # print errors at get_user_presets and check for project id and studio id # call after header is printed -sub check{ - my $config=shift; - my $params=shift; - my $user_presets=shift; +sub check { + my $config = shift; + my $params = shift; + my $user_presets = shift; - if (defined $user_presets->{error}){ - uac::print_error($user_presets->{error}); - return undef; - } + if ( defined $user_presets->{error} ) { + uac::print_error( $user_presets->{error} ); + return undef; + } - my $project_check=project::check($config, { project_id => $params->{project_id} } ); - if($project_check ne '1'){ - uac::print_error($project_check); - return undef; - } + my $project_check = project::check( $config, { project_id => $params->{project_id} } ); + if ( $project_check ne '1' ) { + uac::print_error($project_check); + return undef; + } - my $studio_check=studios::check($config, { studio_id => $params->{studio_id} } ); - if($studio_check ne '1'){ - uac::print_error($studio_check); - return undef; - } - return 1; + my $studio_check = studios::check( $config, { studio_id => $params->{studio_id} } ); + if ( $studio_check ne '1' ) { + uac::print_error($studio_check); + return undef; + } + return 1; } # get user, projects and studios user is assigned to for selected values from params # set permissions for selected project and studio -# return request -sub get_user_presets{ - my $config = shift; - my $options = shift; +# return request +sub get_user_presets { + my $config = shift; + my $options = shift; - my $user = $options->{user}||''; - my $error = undef; - return {error=>"no user selected"} if ($user eq''); - - my $project_id = $options->{project_id}||''; - my $studio_id = $options->{studio_id}||''; - $config->{access}->{write}=0; + my $user = $options->{user} || ''; + my $error = undef; + return { error => "no user selected" } if ( $user eq '' ); - #get - my $admin_roles = get_admin_user_roles($config, {user=>$user}); + my $project_id = $options->{project_id} || ''; + my $studio_id = $options->{studio_id} || ''; + $config->{access}->{write} = 0; - #get all projects by user - my $projects = uac::get_projects_by_user($config, {user=>$user}); - return {error=>"no project is assigned to user"} if(@$projects==0); + #get + my $admin_roles = get_admin_user_roles( $config, { user => $user } ); - $projects=project::get($config) if(@$admin_roles>0); - my @projects=reverse sort {$a->{end_date} cmp $b->{end_date}} (@$projects); - $projects=\@projects; + #get all projects by user + my $projects = uac::get_projects_by_user( $config, { user => $user } ); + return { error => "no project is assigned to user" } if ( @$projects == 0 ); - if ($project_id ne'' && $project_id ne'-1'){ - my $projectFound=0; - for my $project(@$projects){ - if ($project->{project_id} eq $project_id){ - $projectFound=1; - last; - }; - } - return {error=>"project is not assigned to user"} if($projectFound==0); - }else{ - $project_id=$projects->[0]->{project_id}; - } - #print STDERR "project:$project_id\n"; + $projects = project::get($config) if ( @$admin_roles > 0 ); + my @projects = reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects); + $projects = \@projects; - #check if studios are assigned to project - my $studios = project::get_studios($config, {project_id => $project_id}); - $error="no studio is assigned to project" if (@$studios==0); + if ( $project_id ne '' && $project_id ne '-1' ) { + my $projectFound = 0; + for my $project (@$projects) { + if ( $project->{project_id} eq $project_id ) { + $projectFound = 1; + last; + } + } + return { error => "project is not assigned to user" } if ( $projectFound == 0 ); + } else { + $project_id = $projects->[0]->{project_id}; + } - if(@$admin_roles==0){ - #get all studios by user - $studios=uac::get_studios_by_user($config, {user=>$user, project_id=>$project_id}); - $error="no studio is assigned to user" if (@$studios==0); - if (($studio_id ne '')&&($studio_id ne '-1')){ - my $studioFound=0; - for my $studio(@$studios){ - if ($studio->{id} eq $studio_id){ - $studioFound=1; - last; - }; - } - $error="studio is not assigned to user" if($studioFound==0); - }else{ - $studio_id =$studios->[0]->{id}; - } - }else{ - #for admin get studios by project - $studios = studios::get($config, {project_id => $project_id}); - if (($studio_id ne '')&&($studio_id ne '-1')){ - my $studioFound=0; - for my $studio(@$studios){ - if ($studio->{id} eq $studio_id){ - $studioFound=1; - last; - }; - } - $error="studio is not assigned to project" if($studioFound==0); - }else{ - $studio_id =$studios->[0]->{id}; - } - } + #print STDERR "project:$project_id\n"; - my $permissions=uac::get_user_permissions($config, {user=>$user, project_id=>$project_id, studio_id=>$studio_id}); + #check if studios are assigned to project + my $studios = project::get_studios( $config, { project_id => $project_id } ); + $error = "no studio is assigned to project" if ( @$studios == 0 ); - #only admin is allowed to select all projects -# if($permissions->{is_admin}==1){ -# $projects=project::get($config); -# } + if ( @$admin_roles == 0 ) { + + #get all studios by user + $studios = uac::get_studios_by_user( $config, { user => $user, project_id => $project_id } ); + $error = "no studio is assigned to user" if ( @$studios == 0 ); + if ( ( $studio_id ne '' ) && ( $studio_id ne '-1' ) ) { + my $studioFound = 0; + for my $studio (@$studios) { + if ( $studio->{id} eq $studio_id ) { + $studioFound = 1; + last; + } + } + $error = "studio is not assigned to user" if ( $studioFound == 0 ); + } else { + $studio_id = $studios->[0]->{id}; + } + } else { + + #for admin get studios by project + $studios = studios::get( $config, { project_id => $project_id } ); + if ( ( $studio_id ne '' ) && ( $studio_id ne '-1' ) ) { + my $studioFound = 0; + for my $studio (@$studios) { + if ( $studio->{id} eq $studio_id ) { + $studioFound = 1; + last; + } + } + $error = "studio is not assigned to project" if ( $studioFound == 0 ); + } else { + $studio_id = $studios->[0]->{id}; + } + } + + my $permissions = uac::get_user_permissions( $config, { user => $user, project_id => $project_id, studio_id => $studio_id } ); + + #only admin is allowed to select all projects + # if($permissions->{is_admin}==1){ + # $projects=project::get($config); + # } #set studios and projects as selected, TODO:do in JS - my $selectedProject={}; - for my $project(@$projects){ - if ($project_id eq $project->{project_id}){ - $project->{selected}='selected="selected"'; - $selectedProject=$project; + my $selectedProject = {}; + for my $project (@$projects) { + if ( $project_id eq $project->{project_id} ) { + $project->{selected} = 'selected="selected"'; + $selectedProject = $project; last; - }; + } } - my $selectedStudio={}; - for my $studio(@$studios){ - if ($studio_id eq $studio->{id}){ - $studio->{selected}='selected="selected"'; - $selectedStudio=$studio; + my $selectedStudio = {}; + for my $studio (@$studios) { + if ( $studio_id eq $studio->{id} ) { + $studio->{selected} = 'selected="selected"'; + $selectedStudio = $studio; last; - }; + } } - my $logout_url=(split(/\//, $0))[-1]; + my $logout_url = ( split( /\//, $0 ) )[-1]; #print STDERR "ok\n"; - my $result={ - user => $user, - logout_url => $logout_url, + my $result = { + user => $user, + logout_url => $logout_url, - project_id => $project_id, # from parameter or default - projects => $projects, - project => $selectedProject, + project_id => $project_id, # from parameter or default + projects => $projects, + project => $selectedProject, - studio_id => $studio_id, # from parameter or default - studios => $studios, - studio => $selectedStudio, + studio_id => $studio_id, # from parameter or default + studios => $studios, + studio => $selectedStudio, - permissions => $permissions, # from parameter or default - config => $config + permissions => $permissions, # from parameter or default + config => $config }; - $result->{error}=$error if defined $error; + $result->{error} = $error if defined $error; return $result; } #set user preset properties to request -sub prepare_request{ - my $request=shift; - my $user_presets=shift; +sub prepare_request { + my $request = shift; + my $user_presets = shift; - for my $key (keys %$user_presets){ - $request->{$key}=$user_presets->{$key}; + for my $key ( keys %$user_presets ) { + $request->{$key} = $user_presets->{$key}; } + #enrich menu parameters - for my $key ('studio_id', 'project_id', 'studio', 'project', 'studios', 'projects', 'user', 'logout_url'){ - $request->{params}->{checked}->{presets}->{$key}=$user_presets->{$key}; + for my $key ( 'studio_id', 'project_id', 'studio', 'project', 'studios', 'projects', 'user', 'logout_url' ) { + $request->{params}->{checked}->{presets}->{$key} = $user_presets->{$key}; } return $request; } #TODO: shift to permissions sub entry -sub set_template_permissions{ - my $permissions = shift; - my $params = shift; +sub set_template_permissions { + my $permissions = shift; + my $params = shift; - for my $usecase (keys %$permissions){ - $params->{'allow'}->{$usecase}=1 if ($permissions->{$usecase}eq'1'); + for my $usecase ( keys %$permissions ) { + $params->{'allow'}->{$usecase} = 1 if ( $permissions->{$usecase} eq '1' ); } return $params; } #print error message -sub permissions_denied{ - my $message=shift; - $message=~s/_/ /g; - print '
    Sorry! Missing permissions to '.$message.'
    '."\n"; - print STDERR 'Sorry! Missing permissions to '.$message."\n"; +sub permissions_denied { + my $message = shift; + $message =~ s/_/ /g; + print '
    Sorry! Missing permissions to ' . $message . '
    ' . "\n"; + print STDERR 'Sorry! Missing permissions to ' . $message . "\n"; } -sub print_info{ - print '
    ' - .' ' - .$_[0] - .'
    '."\n"; +sub print_info { + print '
    ' . ' ' . $_[0] . '
    ' . "\n"; } -sub print_warn{ - print '
    ' - .' ' - .$_[0] - .'
    '."\n"; +sub print_warn { + print '
    ' . ' ' . $_[0] . '
    ' . "\n"; } -sub print_error{ - my $message=shift; - print STDERR "ERROR:".$message."\n"; - print '
    ' - .' ' - .$message. - '
    '."\n"; +sub print_error { + my $message = shift; + print STDERR "ERROR:" . $message . "\n"; + print '
    ' . ' ' . $message . '
    ' . "\n"; } #do not delete last line! diff --git a/lib/calcms/user_settings.pm b/lib/calcms/user_settings.pm index a142885..07b06bb 100644 --- a/lib/calcms/user_settings.pm +++ b/lib/calcms/user_settings.pm @@ -1,216 +1,230 @@ -package user_settings; +package user_settings; use warnings "all"; use strict; use Data::Dumper; -use series_dates; +use series_dates(); # table: calcms_user_settings # columns: user, colors require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(getColors getColorCss get insert update delete get_columns defaultColors); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(getColors getColorCss get insert update delete get_columns defaultColors); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -our $defaultColors=[ - { - name => 'color_event', - css => '#content .event', - color => '#c5e1a5' - },{ - name => 'color_draft', - css => '#content .draft', - color => '#eeeeee', - },{ - name => 'color_schedule', - css => '#content .schedule', - color => '#dde4e6', - },{ - name => 'color_published', - css => '#content .event.published', - color => '#a5d6a7', - },{ - name => 'color_no_series', - css => '#content .event.no_series', - color => '#fff59d', - },{ - name => 'color_marked', - css => '#content .event.marked', - color => '#81d4fa', - },{ - name => 'color_event_error', - css => '#content.conflicts .event.error', - color => '#ffab91', - },{ - name => 'color_schedule_error', - css => '#content.conflicts .schedule.error', - color => '#ffcc80' - },{ - name => 'color_work', - css => '#content .work', - color => '#b39ddb' - },{ - name => 'color_playout', - css => '#content .play', - color => '#90caf9' - } +our $defaultColors = [ + { + name => 'color_event', + css => '#content .event', + color => '#c5e1a5' + }, + { + name => 'color_draft', + css => '#content .draft', + color => '#eeeeee', + }, + { + name => 'color_schedule', + css => '#content .schedule', + color => '#dde4e6', + }, + { + name => 'color_published', + css => '#content .event.published', + color => '#a5d6a7', + }, + { + name => 'color_no_series', + css => '#content .event.no_series', + color => '#fff59d', + }, + { + name => 'color_marked', + css => '#content .event.marked', + color => '#81d4fa', + }, + { + name => 'color_event_error', + css => '#content.conflicts .event.error', + color => '#ffab91', + }, + { + name => 'color_schedule_error', + css => '#content.conflicts .schedule.error', + color => '#ffcc80' + }, + { + name => 'color_work', + css => '#content .work', + color => '#b39ddb' + }, + { + name => 'color_playout', + css => '#content .play', + color => '#90caf9' + } ]; -sub getColors{ - my $config=shift; - my $conditions=shift; - return unless defined $conditions->{user}; - my $user=$conditions->{user}; +sub getColors { + my $config = shift; + my $conditions = shift; + return unless defined $conditions->{user}; + my $user = $conditions->{user}; - #get defaultColors - my $colors=[]; - my $colorMap={}; - for my $defaultColor (@$defaultColors){ - my $color= { - name => $defaultColor->{name}, - css => $defaultColor->{css}, - color => $defaultColor->{color}, - }; - push @$colors,$color; - $colorMap->{$color->{css}}=$color; - } + #get defaultColors + my $colors = []; + my $colorMap = {}; + for my $defaultColor (@$defaultColors) { + my $color = { + name => $defaultColor->{name}, + css => $defaultColor->{css}, + color => $defaultColor->{color}, + }; + push @$colors, $color; + $colorMap->{ $color->{css} } = $color; + } - my $settings = user_settings::get($config, {user => $user }); - $settings->{colors} |=''; - #overwrite colors from user settings - for my $line (split(/\n+/, $settings->{colors})){ - my ($key,$value)=split(/\=/,$line); - $key=~s/^\s+//; - $key=~s/\s+$//; - $value=~s/^\s+//; - $value=~s/\s+$//; - $colorMap->{$key}->{color}=$value if (($key ne '')&&($value ne '')&&(defined $colorMap->{$key})); - } - return $colors; + my $settings = user_settings::get( $config, { user => $user } ); + $settings->{colors} |= ''; + + #overwrite colors from user settings + for my $line ( split( /\n+/, $settings->{colors} ) ) { + my ( $key, $value ) = split( /\=/, $line ); + $key =~ s/^\s+//; + $key =~ s/\s+$//; + $value =~ s/^\s+//; + $value =~ s/\s+$//; + $colorMap->{$key}->{color} = $value if ( ( $key ne '' ) && ( $value ne '' ) && ( defined $colorMap->{$key} ) ); + } + return $colors; } -sub getColorCss{ - my $config=shift; - my $conditions=shift; - return unless defined $conditions->{user}; - - my $shift=20; - my $limit=220; - - my $colors=getColors($config, $conditions); - my $style="\n"; - return $style; +sub getColorCss { + my $config = shift; + my $conditions = shift; + return unless defined $conditions->{user}; + + my $shift = 20; + my $limit = 220; + + my $colors = getColors( $config, $conditions ); + my $style = "\n"; + return $style; } +sub get_columns { + my $config = shift; -sub get_columns{ - my $config=shift; - - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_user_settings'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_user_settings' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'user=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'user=?'; push @bind_values, $condition->{user}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_user_settings $conditions }; + #print $query."\n"; #print Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - return $entries->[0]||undef; + my $entries = db::get( $dbh, $query, \@bind_values ); + return $entries->[0] || undef; } -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; - return unless(defined $entry->{user}); - return unless(defined $entry->{colors}); - my $dbh=db::connect($config); - return db::insert($dbh, 'calcms_user_settings', $entry); + return unless ( defined $entry->{user} ); + return unless ( defined $entry->{colors} ); + my $dbh = db::connect($config); + return db::insert( $dbh, 'calcms_user_settings', $entry ); } -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; - return unless(defined $entry->{user}); - return unless(defined $entry->{colors}); + return unless ( defined $entry->{user} ); + return unless ( defined $entry->{colors} ); - my $dbh=db::connect($config); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); - push @bind_values,$entry->{user}; + my $dbh = db::connect($config); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); + push @bind_values, $entry->{user}; - my $query=qq{ + my $query = qq{ update calcms_user_settings set $values where user=? }; - db::put($dbh, $query, \@bind_values); + db::put( $dbh, $query, \@bind_values ); print "done\n"; } -sub delete{ - my $config=shift; - my $entry=shift; - - return unless(defined $entry->{user}); +sub delete { + my $config = shift; + my $entry = shift; - my $dbh=db::connect($config); + return unless ( defined $entry->{user} ); - my $query=qq{ + my $dbh = db::connect($config); + + my $query = qq{ delete from calcms_user_settings where user=? }; - my $bind_values=[$entry->{user}]; + my $bind_values = [ $entry->{user} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - db::put($dbh, $query, $bind_values); + db::put( $dbh, $query, $bind_values ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/user_stats.pm b/lib/calcms/user_stats.pm index aa537e4..6f80503 100644 --- a/lib/calcms/user_stats.pm +++ b/lib/calcms/user_stats.pm @@ -1,117 +1,118 @@ #!/bin/perl - -package user_stats; + +package user_stats; use warnings "all"; use strict; use Data::Dumper; require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get update insert get_stats increase); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get update insert get_stats increase); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_user_stats'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_user_stats' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'user=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'user=?'; push @bind_values, $condition->{user}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_user_stats $conditions order by modified_at desc $limit }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $results=db::get($dbh, $query, \@bind_values); + #print STDERR Dumper($query).Dumper(\@bind_values); + + my $results = db::get( $dbh, $query, \@bind_values ); return $results; } -sub get_stats{ - my $config=shift; - my $condition=shift; +sub get_stats { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{series_id}) && ($condition->{series_id} ne '')){ - push @conditions, 'series_id=?'; + if ( ( defined $condition->{series_id} ) && ( $condition->{series_id} ne '' ) ) { + push @conditions, 'series_id=?'; push @bind_values, $condition->{series_id}; } - if ((defined $condition->{user}) && ($condition->{user} ne '')){ - push @conditions, 'user=?'; + if ( ( defined $condition->{user} ) && ( $condition->{user} ne '' ) ) { + push @conditions, 'user=?'; push @bind_values, $condition->{user}; } - my $limit=''; - if ((defined $condition->{limit}) && ($condition->{limit} ne '')){ - $limit= 'limit '.$condition->{limit}; - } + my $limit = ''; + if ( ( defined $condition->{limit} ) && ( $condition->{limit} ne '' ) ) { + $limit = 'limit ' . $condition->{limit}; + } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select user, project_id, studio_id, max(modified_at) modified_at, sum(create_events) create_events, @@ -125,121 +126,126 @@ sub get_stats{ group by user, project_id, studio_id $limit }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $results=db::get($dbh, $query, \@bind_values); - for my $result (@$results){ - $result->{score}=0; - for my $column ('create_events','update_events','delete_events','create_series','update_series','delete_series'){ - $result->{score}+=$result->{$column}; - } + #print STDERR Dumper($query).Dumper(\@bind_values); + + my $results = db::get( $dbh, $query, \@bind_values ); + for my $result (@$results) { + $result->{score} = 0; + for my $column ( 'create_events', 'update_events', 'delete_events', 'create_series', 'update_series', 'delete_series' ) { + $result->{score} += $result->{$column}; + } } - my @results=reverse sort {$a->{score} <=> $b->{score}} @$results; + my @results = reverse sort { $a->{score} <=> $b->{score} } @$results; return \@results; } -sub insert{ - my $config=shift; - my $stats=shift; +sub insert { + my $config = shift; + my $stats = shift; - return undef unless defined $stats->{project_id}; - return undef unless defined $stats->{studio_id}; - return undef unless defined $stats->{series_id}; - return undef unless defined $stats->{user}; + return undef unless defined $stats->{project_id}; + return undef unless defined $stats->{studio_id}; + return undef unless defined $stats->{series_id}; + return undef unless defined $stats->{user}; - #TODO:filter for existing attributes - my $columns=get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column}=$stats->{$column} if defined $stats->{$column}; - } - $entry->{modified_at}= time::time_to_datetime(time()); - - my $dbh=db::connect($config); - my $id=db::insert($dbh, 'calcms_user_stats', $entry); - return $id; + #TODO:filter for existing attributes + my $columns = get_columns($config); + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $stats->{$column} if defined $stats->{$column}; + } + $entry->{modified_at} = time::time_to_datetime( time() ); + + my $dbh = db::connect($config); + my $id = db::insert( $dbh, 'calcms_user_stats', $entry ); + return $id; } # update project -sub update{ - my $config=shift; - my $stats=shift; +sub update { + my $config = shift; + my $stats = shift; - return undef unless defined $stats->{project_id}; - return undef unless defined $stats->{studio_id}; - return undef unless defined $stats->{series_id}; - return undef unless defined $stats->{user}; + return undef unless defined $stats->{project_id}; + return undef unless defined $stats->{studio_id}; + return undef unless defined $stats->{series_id}; + return undef unless defined $stats->{user}; - my $columns=get_columns($config); - my $entry={}; - for my $column (keys %$columns){ - $entry->{$column}=$stats->{$column} if defined $stats->{$column}; - } - $entry->{modified_at}= time::time_to_datetime(time()); - - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); + my $columns = get_columns($config); + my $entry = {}; + for my $column ( keys %$columns ) { + $entry->{$column} = $stats->{$column} if defined $stats->{$column}; + } + $entry->{modified_at} = time::time_to_datetime( time() ); + + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); push @bind_values, $entry->{user}; push @bind_values, $entry->{project_id}; push @bind_values, $entry->{studio_id}; push @bind_values, $entry->{series_id}; - my $query=qq{ + my $query = qq{ update calcms_user_stats set $values where user=? and project_id=? and studio_id=? and series_id=? }; - #print STDERR Dumper($query).Dumper(\@bind_values); - my $dbh=db::connect($config); - return db::put($dbh, $query, \@bind_values); + + #print STDERR Dumper($query).Dumper(\@bind_values); + my $dbh = db::connect($config); + return db::put( $dbh, $query, \@bind_values ); } -sub increase{ - my $config=shift; - my $usecase=shift; - my $options=shift; +sub increase { + my $config = shift; + my $usecase = shift; + my $options = shift; - #print STDERR Dumper($usecase)." ".Dumper($options); + #print STDERR Dumper($usecase)." ".Dumper($options); - return undef unless defined $usecase; - return undef unless defined $options->{project_id}; - return undef unless defined $options->{studio_id}; - return undef unless defined $options->{series_id}; - return undef unless defined $options->{user}; + return undef unless defined $usecase; + return undef unless defined $options->{project_id}; + return undef unless defined $options->{studio_id}; + return undef unless defined $options->{series_id}; + return undef unless defined $options->{user}; - #print STDERR "ok\n"; + #print STDERR "ok\n"; - my $columns=get_columns($config); - #print STDERR "columns:".Dumper($columns); - return undef unless defined $columns->{$usecase}; + my $columns = get_columns($config); - my $entries= get($config,$options); - #print STDERR "exist:".Dumper($columns); + #print STDERR "columns:".Dumper($columns); + return undef unless defined $columns->{$usecase}; - if (@$entries==0){ - my $entry={ - project_id => $options->{project_id}, - studio_id => $options->{studio_id}, - series_id => $options->{series_id}, - user => $options->{user}, - $usecase => 1, - }; - #print STDERR "user_stats::insert\n"; - return insert($config, $entry); - }elsif (@$entries==1){ - my $entry=$entries->[0]; - $entry->{$usecase}++ if defined - #print STDERR "user_stats::update\n"; - return update($config, $entry); - }else{ - print STDERR "user_stats: to few options given: $usecase,".Dumper($options)."\n"; - } + my $entries = get( $config, $options ); + + #print STDERR "exist:".Dumper($columns); + + if ( @$entries == 0 ) { + my $entry = { + project_id => $options->{project_id}, + studio_id => $options->{studio_id}, + series_id => $options->{series_id}, + user => $options->{user}, + $usecase => 1, + }; + + #print STDERR "user_stats::insert\n"; + return insert( $config, $entry ); + } elsif ( @$entries == 1 ) { + my $entry = $entries->[0]; + $entry->{$usecase}++ if defined + + #print STDERR "user_stats::update\n"; + return update( $config, $entry ); + } else { + print STDERR "user_stats: to few options given: $usecase," . Dumper($options) . "\n"; + } } - -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/work_dates.pm b/lib/calcms/work_dates.pm index 8319f03..7f8d09f 100644 --- a/lib/calcms/work_dates.pm +++ b/lib/calcms/work_dates.pm @@ -1,101 +1,101 @@ -package work_dates; +package work_dates; use warnings "all"; use strict; use Data::Dumper; -use Date::Calc; -use time; -use db; -use log; -use studio_timeslot_dates; -use work_schedule; +use Date::Calc(); +use time(); +use db(); +use log(); +use studio_timeslot_dates(); +use work_schedule(); # schedule dates for work_schedule # table: calcms_work_dates # columns: id, studio_id, schedule_id, start(datetime), end(datetime) # TODO: delete column schedule_id require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete get_dates); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete get_dates); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_work_dates'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_work_dates' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } # get all work_dates for studio_id and schedule_id within given time range # calculate start_date, end_date, weeday, day from start and end(datetime) -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $date_range_include=0; - $date_range_include=1 if (defined $condition->{date_range_include}) && ($condition->{date_range_include}==1); + my $date_range_include = 0; + $date_range_include = 1 if ( defined $condition->{date_range_include} ) && ( $condition->{date_range_include} == 1 ); - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'schedule_id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'schedule_id=?'; push @bind_values, $condition->{schedule_id}; } - if ((defined $condition->{start_at}) && ($condition->{start_at} ne '')){ - push @conditions, 'start=?'; + if ( ( defined $condition->{start_at} ) && ( $condition->{start_at} ne '' ) ) { + push @conditions, 'start=?'; push @bind_values, $condition->{start_at}; } - if ((defined $condition->{from}) && ($condition->{from} ne '')){ - if ($date_range_include==1){ - push @conditions, 'end_date>=?'; - push @bind_values, $condition->{from}; - }else{ - push @conditions, 'start_date>=?'; - push @bind_values, $condition->{from}; - } + if ( ( defined $condition->{from} ) && ( $condition->{from} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'end_date>=?'; + push @bind_values, $condition->{from}; + } else { + push @conditions, 'start_date>=?'; + push @bind_values, $condition->{from}; + } } - if ((defined $condition->{till}) && ($condition->{till} ne '')){ - if ($date_range_include==1){ - push @conditions, 'start_date<=?'; - push @bind_values, $condition->{till}; - }else{ - push @conditions, 'end_date<=?'; - push @bind_values, $condition->{till}; - } + if ( ( defined $condition->{till} ) && ( $condition->{till} ne '' ) ) { + if ( $date_range_include == 1 ) { + push @conditions, 'start_date<=?'; + push @bind_values, $condition->{till}; + } else { + push @conditions, 'end_date<=?'; + push @bind_values, $condition->{till}; + } } - if ((defined $condition->{exclude}) && ($condition->{exclude} ne '')){ - push @conditions, 'exclude=?'; + if ( ( defined $condition->{exclude} ) && ( $condition->{exclude} ne '' ) ) { + push @conditions, 'exclude=?'; push @bind_values, $condition->{exclude}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select date(start) start_date ,date(end) end_date ,dayname(start) weekday @@ -113,271 +113,281 @@ sub get{ $conditions order by start }; + #print STDERR $query."\n"; #print STDERR Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); - for my $entry (@$entries){ - $entry->{weekday}=substr($entry->{weekday},0,2); + my $entries = db::get( $dbh, $query, \@bind_values ); + for my $entry (@$entries) { + $entry->{weekday} = substr( $entry->{weekday}, 0, 2 ); } - + return $entries; } - #update work dates for all schedules of a work and studio_id -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; - return undef unless defined $entry->{project_id} ; - return undef unless defined $entry->{studio_id} ; - return undef unless defined $entry->{schedule_id} ; + return undef unless defined $entry->{project_id}; + return undef unless defined $entry->{studio_id}; + return undef unless defined $entry->{schedule_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); #delete all existing work dates (by project, studio and schedule id) - work_dates::delete($config, $entry); + work_dates::delete( $config, $entry ); - my $day_start=$config->{date}->{day_starting_hour}; + my $day_start = $config->{date}->{day_starting_hour}; #get all schedules for schedule id ordered by exclude, date - my $schedules=work_schedule::get($config, { - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - schedule_id => $entry->{schedule_id}, - }); - + my $schedules = work_schedule::get( + $config, + { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + schedule_id => $entry->{schedule_id}, + } + ); + #add scheduled work dates and remove exluded dates - my $work_dates={}; + my $work_dates = {}; - #TODO:set schedules exclude to 0 if not 1 - #insert all normal dates (not excludes) - for my $schedule (@$schedules){ - my $dates=get_schedule_dates($schedule, {exclude => 0}); - for my $date (@$dates){ - $date->{exclude}=0; - $work_dates->{$date->{start}}=$date; - #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); + #TODO:set schedules exclude to 0 if not 1 + #insert all normal dates (not excludes) + for my $schedule (@$schedules) { + my $dates = get_schedule_dates( $schedule, { exclude => 0 } ); + for my $date (@$dates) { + $date->{exclude} = 0; + $work_dates->{ $date->{start} } = $date; + + #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); } } - #insert / overwrite all exlude dates - for my $schedule (@$schedules){ - my $dates=get_schedule_dates($schedule, {exclude => 1}); - for my $date (@$dates){ - $date->{exclude}=1; - $work_dates->{$date->{start}}=$date; - #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); + #insert / overwrite all exlude dates + for my $schedule (@$schedules) { + my $dates = get_schedule_dates( $schedule, { exclude => 1 } ); + for my $date (@$dates) { + $date->{exclude} = 1; + $work_dates->{ $date->{start} } = $date; + + #print STDERR Dumper($date)."\n" if ($date->{start} eq'2014-02-05 19:00:00'); } } - #print STDERR Dumper($work_dates->{'2014-02-05 19:00:00'}); + #print STDERR Dumper($work_dates->{'2014-02-05 19:00:00'}); - my $request={ - config => $config - }; + my $request = { config => $config }; + + my $i = 0; + my $j = 0; + for my $date ( keys %$work_dates ) { + my $work_date = $work_dates->{$date}; - my $i=0; - my $j=0; - for my $date (keys %$work_dates){ - my $work_date=$work_dates->{$date}; #insert date - my $entry={ - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - schedule_id => $entry->{schedule_id}, - title => $entry->{title}, - type => $entry->{type}, - schedule_id => $entry->{schedule_id}, - start => $work_date->{start}, - end => $work_date->{end}, - exclude => $work_date->{exclude} - }; - if(studio_timeslot_dates::can_studio_edit_events($config, $entry)==1){ # by studio_id, start, end - $entry->{start_date}= time::add_hours_to_datetime($entry->{start}, -$day_start); - $entry->{end_date}= time::add_hours_to_datetime($entry->{end}, -$day_start); - db::insert($dbh, 'calcms_work_dates', $entry); - #print STDERR "$entry->{start_date}\n"; - $i++; - }else{ - $j++; - #print STDERR Dumper($entry); - } - } - #print STDERR "$i work_dates updates\n"; - return $j." dates out of studio times, ".$i; + my $entry = { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + schedule_id => $entry->{schedule_id}, + title => $entry->{title}, + type => $entry->{type}, + schedule_id => $entry->{schedule_id}, + start => $work_date->{start}, + end => $work_date->{end}, + exclude => $work_date->{exclude} + }; + if ( studio_timeslot_dates::can_studio_edit_events( $config, $entry ) == 1 ) { # by studio_id, start, end + $entry->{start_date} = time::add_hours_to_datetime( $entry->{start}, -$day_start ); + $entry->{end_date} = time::add_hours_to_datetime( $entry->{end}, -$day_start ); + db::insert( $dbh, 'calcms_work_dates', $entry ); + + #print STDERR "$entry->{start_date}\n"; + $i++; + } else { + $j++; + + #print STDERR Dumper($entry); + } + } + + #print STDERR "$i work_dates updates\n"; + return $j . " dates out of studio times, " . $i; } -sub get_schedule_dates{ - my $schedule=shift; - my $options=shift; +sub get_schedule_dates { + my $schedule = shift; + my $options = shift; - my $is_exclude=$options->{exclude}||0; - my $dates=[]; - return $dates if (($is_exclude eq'1') && ($schedule->{exclude}ne'1')); - return $dates if (($is_exclude eq'0') && ($schedule->{exclude}eq'1')); + my $is_exclude = $options->{exclude} || 0; + my $dates = []; + return $dates if ( ( $is_exclude eq '1' ) && ( $schedule->{exclude} ne '1' ) ); + return $dates if ( ( $is_exclude eq '0' ) && ( $schedule->{exclude} eq '1' ) ); - if ($schedule->{period_type}eq'single'){ - $dates=get_single_date($schedule->{start}, $schedule->{duration}) ; - }elsif($schedule->{period_type}eq'days'){ - $dates=get_dates($schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{frequency}) ; - }elsif($schedule->{period_type}eq'week_of_month'){ - $dates=get_week_of_month_dates($schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{week_of_month}, $schedule->{weekday}, $schedule->{month}); - }else{ - print STDERR "unknown schedule period_type\n"; - } - return $dates; + if ( $schedule->{period_type} eq 'single' ) { + $dates = get_single_date( $schedule->{start}, $schedule->{duration} ); + } elsif ( $schedule->{period_type} eq 'days' ) { + $dates = get_dates( $schedule->{start}, $schedule->{end}, $schedule->{duration}, $schedule->{frequency} ); + } elsif ( $schedule->{period_type} eq 'week_of_month' ) { + $dates = get_week_of_month_dates( + $schedule->{start}, $schedule->{end}, $schedule->{duration}, + $schedule->{week_of_month}, $schedule->{weekday}, $schedule->{month} + ); + } else { + print STDERR "unknown schedule period_type\n"; + } + return $dates; } +sub get_week_of_month_dates { + my $start = shift; # datetime string + my $end = shift; # datetime string + my $duration = shift; # in minutes + my $week = shift; # every nth week of month + my $weekday = shift; # weekday [1..7] + my $frequency = shift; # every 1st,2nd,3th time -sub get_week_of_month_dates{ - my $start =shift; # datetime string - my $end =shift; # datetime string - my $duration =shift; # in minutes - my $week =shift; # every nth week of month - my $weekday =shift; # weekday [1..7] - my $frequency =shift; # every 1st,2nd,3th time + return undef if $start eq ''; + return undef if $end eq ''; + return undef if $duration eq ''; + return undef if $week eq ''; + return undef if $weekday eq ''; + return undef if $frequency eq ''; + return undef if $frequency == 0; - return undef if $start eq''; - return undef if $end eq''; - return undef if $duration eq''; - return undef if $week eq''; - return undef if $weekday eq''; - return undef if $frequency eq''; - return undef if $frequency==0; + my $start_dates = time::get_nth_weekday_in_month( $start, $end, $week, $weekday ); - my $start_dates=time::get_nth_weekday_in_month($start, $end, $week, $weekday); + my $results = []; - my $results=[]; - - my $c=-1; - for my $start_datetime (@$start_dates){ - $c++; - my @start = @{time::datetime_to_array($start_datetime)}; - next unless @start>=6; - next if (($c % $frequency)!=0); + my $c = -1; + for my $start_datetime (@$start_dates) { + $c++; + my @start = @{ time::datetime_to_array($start_datetime) }; + next unless @start >= 6; + next if ( ( $c % $frequency ) != 0 ); my @end_datetime = Date::Calc::Add_Delta_DHMS( - $start[0], $start[1], $start[2], # start date - $start[3], $start[4], $start[5], # start time - 0, 0, $duration, 0 # delta days, hours, minutes, seconds + $start[0], $start[1], $start[2], # start date + $start[3], $start[4], $start[5], # start time + 0, 0, $duration, 0 # delta days, hours, minutes, seconds ); - my $end_datetime=time::array_to_datetime(\@end_datetime); + my $end_datetime = time::array_to_datetime( \@end_datetime ); - push @$results, { - start => $start_datetime, - end => $end_datetime - }; - } - return $results; + push @$results, + { + start => $start_datetime, + end => $end_datetime + }; + } + return $results; } #add duration to a single date -sub get_single_date{ +sub get_single_date { my $start_datetime = shift; - my $duration = shift; + my $duration = shift; - my @start = @{time::datetime_to_array($start_datetime)}; - return unless @start>=6; + my @start = @{ time::datetime_to_array($start_datetime) }; + return unless @start >= 6; my @end_datetime = Date::Calc::Add_Delta_DHMS( - $start[0], $start[1], $start[2], # start date + $start[0], $start[1], $start[2], # start date $start[3], $start[4], $start[5], # start time 0, 0, $duration, 0 # delta days, hours, minutes, seconds ); - my $date={ - start => $start_datetime, - end => time::array_to_datetime(\@end_datetime) - }; + my $date = { + start => $start_datetime, + end => time::array_to_datetime( \@end_datetime ) + }; return [$date]; } #calculate all dates between start_datetime and end_date with duration(minutes) and frequency(days) -sub get_dates{ +sub get_dates { my $start_datetime = shift; my $end_date = shift; - my $duration = shift; # in minutes - my $frequency = shift; # in days - #print "start_datetime:$start_datetime end_date:$end_date duration:$duration frequency:$frequency\n"; + my $duration = shift; # in minutes + my $frequency = shift; # in days + #print "start_datetime:$start_datetime end_date:$end_date duration:$duration frequency:$frequency\n"; - my @start = @{time::datetime_to_array($start_datetime)}; - return unless @start>=6; - my @start_date = ($start[0], $start[1], $start[2]); - my $start_time = sprintf('%02d:%02d:%02d', $start[3], $start[4], $start[5]); + my @start = @{ time::datetime_to_array($start_datetime) }; + return unless @start >= 6; + my @start_date = ( $start[0], $start[1], $start[2] ); + my $start_time = sprintf( '%02d:%02d:%02d', $start[3], $start[4], $start[5] ); - #print STDERR "$start_datetime,$end_date,$duration,$frequency\n"; + #print STDERR "$start_datetime,$end_date,$duration,$frequency\n"; - #return on single date - my $date={}; - $date->{start}= sprintf("%04d-%02d-%02d",@start_date).' '.$start_time; + #return on single date + my $date = {}; + $date->{start} = sprintf( "%04d-%02d-%02d", @start_date ) . ' ' . $start_time; return undef if $duration eq ''; - return undef if (($frequency eq '')||($end_date eq'')); + return undef if ( ( $frequency eq '' ) || ( $end_date eq '' ) ); - #continue on recurring date - my @end = @{time::datetime_to_array($end_date)}; - return unless @end>=3; - my @end_date = ($end[0], $end[1], $end[2]); + #continue on recurring date + my @end = @{ time::datetime_to_array($end_date) }; + return unless @end >= 3; + my @end_date = ( $end[0], $end[1], $end[2] ); - my $today=time::time_to_date(); - my ($year, $month, $day)=split(/\-/,$today); + my $today = time::time_to_date(); + my ( $year, $month, $day ) = split( /\-/, $today ); - #do not show dates one month back - my $not_before= sprintf("%04d-%02d-%02d", Date::Calc::Add_Delta_Days($year, $month, $day, -30)); + #do not show dates one month back + my $not_before = sprintf( "%04d-%02d-%02d", Date::Calc::Add_Delta_Days( $year, $month, $day, -30 ) ); - my $dates=[]; - return $dates if ($end_date lt $today); - return $dates if ($frequency<1); + my $dates = []; + return $dates if ( $end_date lt $today ); + return $dates if ( $frequency < 1 ); + + my $j = Date::Calc::Delta_Days( @start_date, @end_date ); + my $c = 0; + for ( my $i = 0 ; $i <= $j ; $i += $frequency ) { + my @date = Date::Calc::Add_Delta_Days( $start[0], $start[1], $start[2], $i ); + my $date = {}; + $date->{start} = sprintf( "%04d-%02d-%02d", @date ) . ' ' . $start_time; - my $j = Date::Calc::Delta_Days(@start_date, @end_date); - my $c=0; - for (my $i = 0; $i <= $j; $i+=$frequency ){ - my @date = Date::Calc::Add_Delta_Days($start[0], $start[1], $start[2], $i); - my $date={}; - $date->{start}=sprintf("%04d-%02d-%02d",@date).' '.$start_time; - my @end_datetime = Date::Calc::Add_Delta_DHMS( - $date[0], $date[1], $date[2], # start date - $start[3], $start[4], $start[5], # start time - 0, 0, $duration, 0 # delta days, hours, minutes, seconds + $date[0], $date[1], $date[2], # start date + $start[3], $start[4], $start[5], # start time + 0, 0, $duration, 0 # delta days, hours, minutes, seconds ); - $date->{end}=time::array_to_datetime(\@end_datetime); + $date->{end} = time::array_to_datetime( \@end_datetime ); - last if ($c>200); + last if ( $c > 200 ); $c++; - next if $date->{end} lt $not_before; - push @$dates,$date; + next if $date->{end} lt $not_before; + push @$dates, $date; } return $dates; } #remove all work_dates for studio_id and schedule_id -sub delete{ - my $config=shift; - my $entry=shift; - +sub delete { + my $config = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{schedule_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ delete from calcms_work_dates where project_id=? and studio_id=? and schedule_id=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{schedule_id}]; + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{schedule_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } - -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/lib/calcms/work_schedule.pm b/lib/calcms/work_schedule.pm index 253ebb7..b14d2ac 100644 --- a/lib/calcms/work_schedule.pm +++ b/lib/calcms/work_schedule.pm @@ -1,154 +1,156 @@ -package work_schedule; +package work_schedule; use warnings "all"; use strict; use Data::Dumper; -use series_dates; +use series_dates(); # table: calcms_work_schedule -# columns: id, studio_id, series_id, - # start (datetime), - # duration (minutes), - # frequency (days), - # end (date), - # weekday (1..7) - # week_of_month (1..5) - # month +# columns: id, studio_id, series_id, +# start (datetime), +# duration (minutes), +# frequency (days), +# end (date), +# weekday (1..7) +# week_of_month (1..5) +# month require Exporter; -our @ISA = qw(Exporter); -our @EXPORT_OK = qw(get_columns get insert update delete); -our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] ); +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(get_columns get insert update delete); +our %EXPORT_TAGS = ( 'all' => [@EXPORT_OK] ); sub debug; -sub get_columns{ - my $config=shift; +sub get_columns { + my $config = shift; - my $dbh=db::connect($config); - my $cols=db::get_columns($dbh, 'calcms_work_schedule'); - my $columns={}; - for my $col (@$cols){ - $columns->{$col}=1; + my $dbh = db::connect($config); + my $cols = db::get_columns( $dbh, 'calcms_work_schedule' ); + my $columns = {}; + for my $col (@$cols) { + $columns->{$col} = 1; } return $columns; } #map schedule id to id -sub get{ - my $config=shift; - my $condition=shift; +sub get { + my $config = shift; + my $condition = shift; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my @conditions=(); - my @bind_values=(); + my @conditions = (); + my @bind_values = (); - if ((defined $condition->{project_id}) && ($condition->{project_id} ne '')){ - push @conditions, 'project_id=?'; + if ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { + push @conditions, 'project_id=?'; push @bind_values, $condition->{project_id}; } - if ((defined $condition->{studio_id}) && ($condition->{studio_id} ne '')){ - push @conditions, 'studio_id=?'; + if ( ( defined $condition->{studio_id} ) && ( $condition->{studio_id} ne '' ) ) { + push @conditions, 'studio_id=?'; push @bind_values, $condition->{studio_id}; } - if ((defined $condition->{schedule_id}) && ($condition->{schedule_id} ne '')){ - push @conditions, 'schedule_id=?'; + if ( ( defined $condition->{schedule_id} ) && ( $condition->{schedule_id} ne '' ) ) { + push @conditions, 'schedule_id=?'; push @bind_values, $condition->{schedule_id}; } - if ((defined $condition->{start}) && ($condition->{start} ne '')){ - push @conditions, 'start=?'; + if ( ( defined $condition->{start} ) && ( $condition->{start} ne '' ) ) { + push @conditions, 'start=?'; push @bind_values, $condition->{start}; } - if ((defined $condition->{exclude}) && ($condition->{exclude} ne '')){ - push @conditions, 'exclude=?'; + if ( ( defined $condition->{exclude} ) && ( $condition->{exclude} ne '' ) ) { + push @conditions, 'exclude=?'; push @bind_values, $condition->{exclude}; } - if ((defined $condition->{period_type}) && ($condition->{period_type} ne '')){ - push @conditions, 'period_type=?'; + if ( ( defined $condition->{period_type} ) && ( $condition->{period_type} ne '' ) ) { + push @conditions, 'period_type=?'; push @bind_values, $condition->{period_type}; } - my $conditions=''; - $conditions=" where ".join(" and ",@conditions) if (@conditions>0); + my $conditions = ''; + $conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); - my $query=qq{ + my $query = qq{ select * from calcms_work_schedule $conditions order by exclude, start }; + #print STDERR $query."\n".Dumper(\@bind_values); - my $entries=db::get($dbh, $query, \@bind_values); + my $entries = db::get( $dbh, $query, \@bind_values ); return $entries; } -sub insert{ - my $config=shift; - my $entry=shift; +sub insert { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{start}; - my $dbh=db::connect($config); - return db::insert($dbh, 'calcms_work_schedule', $entry); + my $dbh = db::connect($config); + return db::insert( $dbh, 'calcms_work_schedule', $entry ); } #schedule id to id -sub update{ - my $config=shift; - my $entry=shift; +sub update { + my $config = shift; + my $entry = shift; return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{schedule_id}; return undef unless defined $entry->{start}; - my $dbh=db::connect($config); - my $values =join(",", map {$_.'=?'} (keys %$entry)); - my @bind_values =map {$entry->{$_}} (keys %$entry); + my $dbh = db::connect($config); + my $values = join( ",", map { $_ . '=?' } ( keys %$entry ) ); + my @bind_values = map { $entry->{$_} } ( keys %$entry ); - push @bind_values,$entry->{project_id}; - push @bind_values,$entry->{studio_id}; - push @bind_values,$entry->{schedule_id}; + push @bind_values, $entry->{project_id}; + push @bind_values, $entry->{studio_id}; + push @bind_values, $entry->{schedule_id}; - my $query=qq{ + my $query = qq{ update calcms_work_schedule set $values where project_id=? and studio_id=? and schedule_id=? }; - return db::put($dbh, $query, \@bind_values); + return db::put( $dbh, $query, \@bind_values ); print "done\n"; } #map schedule id to id -sub delete{ - my $config=shift; - my $entry=shift; - +sub delete { + my $config = shift; + my $entry = shift; + return undef unless defined $entry->{project_id}; return undef unless defined $entry->{studio_id}; return undef unless defined $entry->{schedule_id}; - my $dbh=db::connect($config); + my $dbh = db::connect($config); - my $query=qq{ + my $query = qq{ delete from calcms_work_schedule where project_id=? and studio_id=? and schedule_id=? }; - my $bind_values=[$entry->{project_id}, $entry->{studio_id}, $entry->{schedule_id}]; + my $bind_values = [ $entry->{project_id}, $entry->{studio_id}, $entry->{schedule_id} ]; + #print '
    $query'.$query.Dumper($bind_values).'
    '; - return db::put($dbh, $query, $bind_values); + return db::put( $dbh, $query, $bind_values ); } -sub error{ - my $msg=shift; +sub error { + my $msg = shift; print "ERROR: $msg
    \n"; } diff --git a/website/agenda/add_comment.cgi b/website/agenda/add_comment.cgi index 6cc1285..d30760f 100755 --- a/website/agenda/add_comment.cgi +++ b/website/agenda/add_comment.cgi @@ -37,7 +37,6 @@ my $request={ config => $config, }; $params=$request->{params}->{checked}; -log::init($request); print $cgi->header('text/plain')."\n"; diff --git a/website/agenda/aggregate.cgi b/website/agenda/aggregate.cgi index e91480f..9e55dac 100755 --- a/website/agenda/aggregate.cgi +++ b/website/agenda/aggregate.cgi @@ -55,10 +55,8 @@ if ( $0 =~ /aggregate.*?\.cgi$/ ) { }, }; $params = $request->{params}->{checked}; - #print STDERR Dumper($params); my $mem = 0; - log::init($request); #get result from cache my $cache = aggregator::get_cache( $config, $request ); @@ -159,18 +157,14 @@ if ( $0 =~ /aggregate.*?\.cgi$/ ) { print $output_header; print $content; - # $r->print("done"); - if ( $config->{cache}->{use_cache} eq '1' ) { $cache->{content} = $content; - log::write( $config, 'cache_file', $cache->{filename} ) if ($debug); cache::save($cache); } # $config=undef; $content = undef; $cache = undef; - log::mem( $config, 'aggregate done', $mem ) if ( $mem_debug > 0 ); } sub load_file { diff --git a/website/agenda/cal.cgi b/website/agenda/cal.cgi index 298e77c..e5961cd 100755 --- a/website/agenda/cal.cgi +++ b/website/agenda/cal.cgi @@ -34,8 +34,6 @@ if ( $0 =~ /cal.*?\.cgi$/ ) { }; $params = $request->{params}->{checked}; - log::init($request); - my $out = ''; calendar::get_cached_or_render( $out, $config, $request ); print $out. "\n"; diff --git a/website/agenda/category.cgi b/website/agenda/category.cgi index 2971875..9f16fa6 100755 --- a/website/agenda/category.cgi +++ b/website/agenda/category.cgi @@ -2,7 +2,6 @@ use strict; use warnings; - use Data::Dumper; use CGI qw(header param Vars); $CGI::POST_MAX = 1000; @@ -33,9 +32,6 @@ my $request = { checked => check_params( $config, $params ), }, }; - -log::init($request); - $params = $request->{params}->{checked}; my $cache = {}; diff --git a/website/agenda/comments.cgi b/website/agenda/comments.cgi index 972dd4a..c750458 100755 --- a/website/agenda/comments.cgi +++ b/website/agenda/comments.cgi @@ -2,7 +2,6 @@ use warnings "all"; use strict; - use CGI qw(header param Vars); $CGI::POST_MAX = 1000; $CGI::DISABLE_UPLOADS = 1; @@ -17,7 +16,6 @@ use markup(); use time(); use cache(); use log(); - my $r = shift; ( my $cgi, my $params, my $error ) = params::get($r); @@ -34,7 +32,6 @@ if ( $0 =~ /comments.*?\.cgi$/ ) { checked => comments::check_params( $config, $params ), }, }; - log::init($request); my $output = ''; comments::get_cached_or_render( $output, $config, $request, 'filter_locked' ); diff --git a/website/agenda/events.cgi b/website/agenda/events.cgi index d23bc57..d3d2eb9 100755 --- a/website/agenda/events.cgi +++ b/website/agenda/events.cgi @@ -45,9 +45,6 @@ if ( $0 =~ /events.*?\.cgi$/ ) { }, }; - #events::init($request); - log::init($request); - my $output = ''; events::get_cached_or_render( $output, $config, $request ); print $output. "\n"; diff --git a/website/agenda/planung/assign_series.cgi b/website/agenda/planung/assign_series.cgi index 2d38276..1cb164c 100755 --- a/website/agenda/planung/assign_series.cgi +++ b/website/agenda/planung/assign_series.cgi @@ -58,7 +58,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; diff --git a/website/agenda/planung/assignments.cgi b/website/agenda/planung/assignments.cgi index c75f687..967e954 100755 --- a/website/agenda/planung/assignments.cgi +++ b/website/agenda/planung/assignments.cgi @@ -58,7 +58,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; @@ -224,10 +223,10 @@ sub assign_events { checked => events::check_params( $config, { - event_id => $entry->{event_id}, - template => 'no', - limit => 1, - archive => 'all', + event_id => $entry->{event_id}, + template => 'no', + limit => 1, + archive => 'all', } ) }, diff --git a/website/agenda/planung/audio_recordings.cgi b/website/agenda/planung/audio_recordings.cgi index 8bf83cd..ef2aca6 100755 --- a/website/agenda/planung/audio_recordings.cgi +++ b/website/agenda/planung/audio_recordings.cgi @@ -81,11 +81,7 @@ my $request = { }, }; -#delete $params->{presets}; -#print Dumper($request->{params}->{checked}); - $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; @@ -534,13 +530,12 @@ sub getEventDuration{ my $events = events::get( $config, $request ); if (scalar @$events == 0){ print STDERR "getEventDuration: no event found with event_id=$eventId\n"; - }; + } my $event = $events->[0]; my $duration = time::get_duration_seconds( $event->{start}, $event->{end}, $config->{date}->{time_zone} ); return $duration; } - sub check_params { my $params = shift; diff --git a/website/agenda/planung/calendar.cgi b/website/agenda/planung/calendar.cgi index 8509410..267877f 100644 --- a/website/agenda/planung/calendar.cgi +++ b/website/agenda/planung/calendar.cgi @@ -6,7 +6,6 @@ use Data::Dumper; use URI::Escape(); use Encode(); use utf8(); - use params(); use config(); use log(); @@ -81,7 +80,6 @@ my $request = { }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; @@ -245,8 +243,8 @@ sub showCalendar { delete $options->{till_date} if ( $params->{list} == 1 ); delete $options->{date_range_include} if ( $params->{list} == 1 ); } - - $options->{draft}=0 unless $params->{list}==1; + + $options->{draft} = 0 unless $params->{list} == 1; #get events sorted by date $events = getSeriesEvents( $config, $request, $options, $params ); @@ -397,11 +395,12 @@ sub showCalendar { $date->{title} .= ( $date->{channels} || '' ) . ' channels
    ' if defined $date->{channels}; $date->{title} .= int( ( $date->{'stream_size'} || '0' ) / ( 1024 * 1024 ) ) . 'MB
    ' if defined $date->{'stream_size'}; $date->{title} .= $format if defined $format; - $date->{title} .= 'library: ' . ( $date->{writing_library} || '' ) . '
    ' if defined $date->{'writing_library'}; - $date->{title} .= 'path: ' . ( $date->{file} || '' ) . '
    ' if defined $date->{file}; - $date->{title} .= 'updated_at: ' . ( $date->{updated_at} || '' ) . '
    ' if defined $date->{updated_at}; - $date->{title} .= 'modified_at: ' . ( $date->{modified_at} || '' ) . '
    ' if defined $date->{modified_at}; - #print STDERR Dumper($date) if $date->{file}=~/180503/; + $date->{title} .= 'library: ' . ( $date->{writing_library} || '' ) . '
    ' if defined $date->{'writing_library'}; + $date->{title} .= 'path: ' . ( $date->{file} || '' ) . '
    ' if defined $date->{file}; + $date->{title} .= 'updated_at: ' . ( $date->{updated_at} || '' ) . '
    ' if defined $date->{updated_at}; + $date->{title} .= 'modified_at: ' . ( $date->{modified_at} || '' ) . '
    ' if defined $date->{modified_at}; + + #print STDERR Dumper($date) if $date->{file}=~/180503/; #$date->{title}.= 'rms_image: ' .($date->{rms_image}||'').'
    ' if defined $date->{rms_image}; $date->{rms_image} = URI::Escape::uri_unescape( $date->{rms_image} ) if defined $date->{rms_image}; @@ -426,8 +425,8 @@ sub showCalendar { $events_by_start->{ $date->{start} }->{duration} = $date->{duration} || 0; $events_by_start->{ $date->{start} }->{rms_left} = $date->{rms_left} || 0; $events_by_start->{ $date->{start} }->{rms_right} = $date->{rms_right} || 0; - $events_by_start->{ $date->{start} }->{playout_modified_at} = $date->{modified_at}; - $events_by_start->{ $date->{start} }->{playout_updated_at} = $date->{updated_at} ; + $events_by_start->{ $date->{start} }->{playout_modified_at} = $date->{modified_at}; + $events_by_start->{ $date->{start} }->{playout_updated_at} = $date->{updated_at}; } push @$events, $date; } @@ -490,19 +489,21 @@ sub showCalendar { # calculate positions and find schedule errors (depending on position) for my $date ( sort ( keys %$events_by_day ) ) { - my $events = $events_by_day->{$date} ; + my $events = $events_by_day->{$date}; calc_positions( $events, $cal_options ); find_errors($events); } - for my $event (@$events){ - next unless defined $event->{uploaded_at}; - #print STDERR "uploadAt=$event->{uploaded_at}, playoutModified:$event->{playout_modified_at}, playoutUpdatedAt:$event->{playout_updated_at}\n"; - next if (defined $event->{playout_updated_at}) && ( $event->{uploaded_at} lt $event->{playout_updated_at} ); - #print STDERR Dumper($event); - #$event->{upload} ='pending' ; - #$event->{title}.='
    pending'; - } + for my $event (@$events) { + next unless defined $event->{uploaded_at}; + +#print STDERR "uploadAt=$event->{uploaded_at}, playoutModified:$event->{playout_modified_at}, playoutUpdatedAt:$event->{playout_updated_at}\n"; + next if ( defined $event->{playout_updated_at} ) && ( $event->{uploaded_at} lt $event->{playout_updated_at} ); + + #print STDERR Dumper($event); + #$event->{upload} ='pending' ; + #$event->{title}.='
    pending'; + } if ( $params->{list} == 1 ) { showEventList( $config, $permissions, $params, $events_by_day ); @@ -557,7 +558,7 @@ sub formatDuration { my $duration = shift; return '' unless defined $duration; return '' if $duration eq ''; - my $result = int( ( $duration + 3600 ) * 10 + 0.5) % 600; + my $result = int( ( $duration + 3600 ) * 10 + 0.5 ) % 600; my $class = "ok"; $class = "warn" if $result > 1; $class = "error" if $result > 10; @@ -788,8 +789,8 @@ sub showEventList { $event->{user_title} ||= ''; $event->{episode} ||= ''; $event->{rerun} ||= ''; - $event->{draft} ||= ''; - $id ||= ''; + $event->{draft} ||= ''; + $id ||= ''; $class ||= ''; my $archived = $event->{archived} || '-'; @@ -807,10 +808,9 @@ sub showEventList { $rerun = " [" . markup::base26( $event->{recurrence_count} + 1 ) . "]" if ( defined $event->{recurrence_count} ) && ( $event->{recurrence_count} ne '' ) && ( $event->{recurrence_count} > 0 ); - - my $draft = $event->{draft} || '0'; - $draft='-' if $draft eq '0'; - $draft='x' if $draft eq '1'; + my $draft = $event->{draft} || '0'; + $draft = '-' if $draft eq '0'; + $draft = 'x' if $draft eq '1'; my $title = $event->{title}; $title .= ': ' . $event->{user_title} if $event->{user_title} ne ''; @@ -1320,8 +1320,7 @@ sub addEventsToSeries { + . $params->{loc}->{button_assign_event_series} . q{ @@ -1403,7 +1402,7 @@ sub print_event { $height = ''; } -# my $date = $event->{origStart} || $event->{start} || ''; + # my $date = $event->{origStart} || $event->{start} || ''; my $content = $event->{content} || ''; if ( $class =~ /schedule/ ) { @@ -1417,26 +1416,26 @@ sub print_event { $attr .= ' start="' . $event->{start} . '"' if defined $event->{start}; } - if (defined $event->{upload}){ - $content.='
    uploading '; - } + if ( defined $event->{upload} ) { + $content .= '
    uploading '; + } if ($showIcons) { $content = '
    ' . $content . '
    '; } - my $time=''; - $time= qq{ time="$event->{time}"} if $class=~m/time/; + my $time = ''; + $time = qq{ time="$event->{time}"} if $class =~ m/time/; - my $date=''; - $date= qq{ date="$event->{date}"} if $class=~m/date/; + my $date = ''; + $date = qq{ date="$event->{date}"} if $class =~ m/date/; - my $line= q{
    $content
    } ; - $line.= "\n"; - return $line; + my $line = q{
    $content
    }; + $line .= "\n"; + return $line; } sub getFrequency { @@ -1484,7 +1483,7 @@ sub find_errors { next if defined $event->{grid}; next if defined $event->{work}; next if defined $event->{play}; - next if (defined $event->{draft}) && ($event->{draft} == 1); + next if ( defined $event->{draft} ) && ( $event->{draft} == 1 ); next unless defined $event->{ystart}; next unless defined $event->{yend}; $event->{check_errors} = 1; @@ -1754,7 +1753,7 @@ sub getSeriesEvents { #get events (directly from database to get the ones, not assigned, yet) delete $options->{studio_id}; delete $options->{project_id}; - $options->{recordings}=1; + $options->{recordings} = 1; my $request2 = { params => { @@ -1764,7 +1763,7 @@ sub getSeriesEvents { permissions => $request->{permissions} }; $request2->{params}->{checked}->{published} = 'all'; - $request2->{params}->{checked}->{draft} = '1' if $params->{list}==1; + $request2->{params}->{checked}->{draft} = '1' if $params->{list} == 1; #delete $request2->{params}->{checked}->{locations_to_exclude} # if ( ( $params->{studio_id} == -1 ) && ( defined $request2->{params}->{checked}->{locations_to_exclude} ) ); @@ -1883,4 +1882,3 @@ sub check_params { return $checked; } - diff --git a/website/agenda/planung/comment.cgi b/website/agenda/planung/comment.cgi index 4c8c795..b51465a 100755 --- a/website/agenda/planung/comment.cgi +++ b/website/agenda/planung/comment.cgi @@ -58,7 +58,6 @@ my $request = { #set user at params->presets->user $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; diff --git a/website/agenda/planung/create_events.cgi b/website/agenda/planung/create_events.cgi index 2d68254..20f2abf 100755 --- a/website/agenda/planung/create_events.cgi +++ b/website/agenda/planung/create_events.cgi @@ -52,7 +52,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; @@ -75,13 +74,13 @@ unless ( $permissions->{create_event_from_schedule} == 1 ) { return; } -if ( $params->{action} eq 'create_events') { - create_events( $config, $request ); -}else{ - show_events( $config, $request ); +if ( $params->{action} eq 'create_events' ) { + create_events( $config, $request ); +} else { + show_events( $config, $request ); } -sub show_events{ +sub show_events { my $config = shift; my $request = shift; @@ -91,11 +90,11 @@ sub show_events{ uac::permissions_denied('assign_series_events'); return; } - template::process( 'print', $params->{template}, $params ); - + template::process( 'print', $params->{template}, $params ); + } -sub create_events{ +sub create_events { my $config = shift; my $request = shift; @@ -106,56 +105,58 @@ sub create_events{ return; } - print STDERR "create events\n"; + print STDERR "create events\n"; - my $project_id = $params->{project_id}; - my $studio_id = $params->{studio_id}; - my $from_date = $params->{from_date}; - my $till_date = $params->{till_date}; - my $duration = $params->{duration}; + my $project_id = $params->{project_id}; + my $studio_id = $params->{studio_id}; + my $from_date = $params->{from_date}; + my $till_date = $params->{till_date}; + my $duration = $params->{duration}; - $from_date = time::time_to_datetime(); - if ($from_date=~/(\d\d\d\d\-\d\d\-\d\d \d\d)/){ - $from_date = $1.':00'; - } - $till_date = time::add_days_to_datetime($from_date, $duration); - if ($from_date=~/(\d\d\d\d\-\d\d\-\d\d)/){ - $from_date = $1; - } - if ($till_date=~/(\d\d\d\d\-\d\d\-\d\d)/){ - $till_date = $1; - } - $params->{from_date}=$from_date; - $params->{till_date}=$till_date; + $from_date = time::time_to_datetime(); + if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d \d\d)/ ) { + $from_date = $1 . ':00'; + } + $till_date = time::add_days_to_datetime( $from_date, $duration ); + if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { + $from_date = $1; + } + if ( $till_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { + $till_date = $1; + } + $params->{from_date} = $from_date; + $params->{till_date} = $till_date; - print STDERR "create events from $from_date to $till_date\n"; + print STDERR "create events from $from_date to $till_date\n"; - my $dates = series_dates::getDatesWithoutEvent( - $config, { - project_id => $project_id, - studio_id => $studio_id, - from => $from_date, - till => $till_date - } - ); - print STDERR "
    found ".(scalar @$dates)." dates\n";
    -    my $events=[];
    -    for my $date (@$dates){
    -        #print STDERR $date->{start}."\n";
    -        push @$events, createEvent($config, $request, $date);
    -    }
    -    $params->{created_events} = $events;
    -    $params->{created_total} = scalar(@$events);
    -    template::process( 'print', $params->{template}, $params );
    +	my $dates = series_dates::getDatesWithoutEvent(
    +		$config,
    +		{
    +			project_id => $project_id,
    +			studio_id  => $studio_id,
    +			from       => $from_date,
    +			till       => $till_date
    +		}
    +	);
    +	print STDERR "
    found " . ( scalar @$dates ) . " dates\n";
    +	my $events = [];
    +	for my $date (@$dates) {
    +
    +		#print STDERR $date->{start}."\n";
    +		push @$events, createEvent( $config, $request, $date );
    +	}
    +	$params->{created_events} = $events;
    +	$params->{created_total}  = scalar(@$events);
    +	template::process( 'print', $params->{template}, $params );
     }
     
    -sub createEvent{
    -    my $config      = shift;
    -	my $request     = shift;
    -    my $date        = shift;
    +sub createEvent {
    +	my $config  = shift;
    +	my $request = shift;
    +	my $date    = shift;
     
     	my $permissions = $request->{permissions};
    -    my $user        = $request->{user};
    +	my $user        = $request->{user};
     
     	$date->{show_new_event_from_schedule} = 1;
     	unless ( $permissions->{create_event_from_schedule} == 1 ) {
    @@ -163,15 +164,15 @@ sub createEvent{
     		return;
     	}
     
    -    $date->{start_date} = $date->{start};
    -    my $event = eventOps::getNewEvent($config, $date, 'show_new_event_from_schedule');
    +	$date->{start_date} = $date->{start};
    +	my $event = eventOps::getNewEvent( $config, $date, 'show_new_event_from_schedule' );
     
    -    return undef unless defined $event;
    +	return undef unless defined $event;
     
    -    $event->{start_date} = $event->{start};
    -    eventOps::createEvent($request, $event, 'create_event_from_schedule');
    -    print STDERR Dumper($date);
    -    return $event;
    +	$event->{start_date} = $event->{start};
    +	eventOps::createEvent( $request, $event, 'create_event_from_schedule' );
    +	print STDERR Dumper($date);
    +	return $event;
     
     }
     
    @@ -195,7 +196,7 @@ sub check_params {
     	}
     
     	#numeric values
    -	$checked->{exclude} = 0;
    +	$checked->{exclude}  = 0;
     	$checked->{duration} = 28;
     	for my $param ( 'id', 'project_id', 'studio_id', 'duration' ) {
     		if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
    @@ -214,4 +215,3 @@ sub check_params {
     	return $checked;
     }
     
    -
    diff --git a/website/agenda/planung/error_log.cgi b/website/agenda/planung/error_log.cgi
    index ea761cd..b05fdd6 100755
    --- a/website/agenda/planung/error_log.cgi
    +++ b/website/agenda/planung/error_log.cgi
    @@ -34,7 +34,6 @@ my $request = {
     	},
     };
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     #process header
     my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
    diff --git a/website/agenda/planung/event.cgi b/website/agenda/planung/event.cgi
    index 8268644..2e9b046 100755
    --- a/website/agenda/planung/event.cgi
    +++ b/website/agenda/planung/event.cgi
    @@ -4,7 +4,7 @@ use strict;
     use warnings;
     no warnings 'redefine';
     
    -use URI::Escape();
    +#use URI::Escape();
     use Encode();
     use Data::Dumper;
     use MIME::Base64();
    @@ -68,7 +68,6 @@ my $request = {
     
     #set user at params->presets->user
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
    @@ -169,6 +168,7 @@ sub show_event {
     	unless ( defined $event ) {
     		uac::print_error("event not found");
     	}
    +
     	#print STDERR "show:".Dumper($event->{draft});
     	#print STDERR "show event".Dumper($event);
     
    @@ -201,15 +201,16 @@ sub show_event {
     				#project_id => $params->{project_id},
     				#studio_id  => $params->{studio_id},
     				#series_id  => $params->{series_id},
    -				event_id    => $params->{source_event_id},
    -				draft       => 0,
    +				event_id => $params->{source_event_id},
    +				draft    => 0,
     			}
     		);
     		if ( defined $event2 ) {
     			for my $attr (
    -				'title', 'user_title',         'excerpt',     'user_excerpt', 'content', 'topic',
    -				'image', 'image_label', 'series_image', 'series_image_label', 
    -				'live no_event_sync', 'podcast_url', 'archive_url'
    +				'title',        'user_title',         'excerpt',            'user_excerpt',
    +				'content',      'topic',              'image',              'image_label',
    +				'series_image', 'series_image_label', 'live no_event_sync', 'podcast_url',
    +				'archive_url'
     			  )
     			{
     				$event->{$attr} = $event2->{$attr};
    @@ -222,7 +223,7 @@ sub show_event {
     	$event->{rerun} = 1 if ( $event->{rerun} =~ /a-z/ );
     	$event->{series_id} = $params->{series_id};
     
    -	$event->{duration}  = events::get_duration( $config, $event );
    +	$event->{duration} = events::get_duration( $config, $event );
     	$event->{durations} = \@durations;
     	if ( defined $event->{duration} ) {
     		for my $duration ( @{ $event->{durations} } ) {
    @@ -231,7 +232,7 @@ sub show_event {
     	}
     	$event->{start} =~ s/(\d\d:\d\d)\:\d\d/$1/;
     	$event->{end} =~ s/(\d\d:\d\d)\:\d\d/$1/;
    -	
    +
     	# overwrite event with old one
     	#my $series_events=get_series_events($config,{
     	#    project_id => $params->{project_id},
    @@ -421,7 +422,7 @@ sub show_new_event {
     		return 1;
     	}
     
    -    my $event = eventOps::getNewEvent($config, $params, $params->{action});
    +	my $event = eventOps::getNewEvent( $config, $params, $params->{action} );
     
     	#copy event to template params
     	for my $key ( keys %$event ) {
    @@ -559,24 +560,26 @@ sub save_event {
     	my $found = 0;
     
     	#content fields
    -	for my $key ( 'content', 'topic', 'title', 'excerpt', 'episode', 
    -	    'image', 'series_image', 'image_label', 'series_image_label',
    -	    'podcast_url', 'archive_url' ) {
    +	for my $key (
    +		'content',      'topic',       'title',              'excerpt',     'episode', 'image',
    +		'series_image', 'image_label', 'series_image_label', 'podcast_url', 'archive_url'
    +	  )
    +	{
     		next unless defined $permissions->{ 'update_event_field_' . $key };
     		if ( $permissions->{ 'update_event_field_' . $key } eq '1' ) {
    -		    next unless defined $params->{$key};
    +			next unless defined $params->{$key};
     			$entry->{$key} = $params->{$key};
     			$found++;
     		}
     	}
     
    -    #print STDERR "event to update1: ".Dumper($entry);
    +	#print STDERR "event to update1: ".Dumper($entry);
     
     	#user extension fields
     	for my $key ( 'title', 'excerpt' ) {
     		next unless defined $permissions->{ 'update_event_field_' . $key . '_extension' };
     		if ( $permissions->{ 'update_event_field_' . $key . '_extension' } eq '1' ) {
    -		    next unless defined $params->{ 'user_' . $key };
    +			next unless defined $params->{ 'user_' . $key };
     			$entry->{ 'user_' . $key } = $params->{ 'user_' . $key };
     			$found++;
     		}
    @@ -607,10 +610,11 @@ sub save_event {
     		uac::print_error("event not found");
     		return;
     	}
    -    
    -    $entry->{image}        = images::normalizeName($entry->{image});
    -    $entry->{series_image} = images::normalizeName($entry->{series_image});
    -    #print STDERR "event to update2: ".Dumper($entry);
    +
    +	$entry->{image}        = images::normalizeName( $entry->{image} );
    +	$entry->{series_image} = images::normalizeName( $entry->{series_image} );
    +
    +	#print STDERR "event to update2: ".Dumper($entry);
     
     	$config->{access}->{write} = 1;
     
    @@ -669,10 +673,10 @@ sub create_event {
     	my $config  = shift;
     	my $request = shift;
     
    -	my $params     = $request->{params}->{checked};
    -	my $event      = $request->{params}->{checked};
    -    my $action     = $params->{action};
    -    return eventOps::createEvent($request, $event, $action);
    +	my $params = $request->{params}->{checked};
    +	my $event  = $request->{params}->{checked};
    +	my $action = $params->{action};
    +	return eventOps::createEvent( $request, $event, $action );
     
     }
     
    @@ -709,7 +713,8 @@ sub download {
     					event_id => $params->{event_id},
     					template => 'no',
     					limit    => 1,
    -                    #no_exclude => 1
    +
    +					#no_exclude => 1
     				}
     			)
     		},
    @@ -738,7 +743,7 @@ sub download {
     	if ( @files > 0 ) {
     		my $file = $files[0];
     		my $key  = int( rand(99999999999999999) );
    -		$key = encode_base64($key);
    +		$key = MIME::Base64::encode_base64($key);
     		$key =~ s/[^a-zA-Z0-9]//g;
     
     		#decode filename
    @@ -810,14 +815,15 @@ sub check_params {
     	for my $param ( 'live', 'published', 'playout', 'archived', 'rerun', 'draft', 'disable_event_sync', 'get_rerun' ) {
     		if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /([01])/ ) ) {
     			$checked->{$param} = $1;
    +
     			# print STDERR "check $param = $1\n";
     		}
     	}
     
     	#strings
     	for my $param (
    -		'series_name',  'title',      'excerpt',      'content',     'topic', 'program', 'category', 'image', 'series_image',
    -		'user_content', 'user_title', 'user_excerpt', 'podcast_url', 'archive_url'
    +		'series_name',  'title',        'excerpt',    'content',      'topic',       'program', 'category', 'image',
    +		'series_image', 'user_content', 'user_title', 'user_excerpt', 'podcast_url', 'archive_url'
     	  )
     	{
     		if ( defined $params->{$param} ) {
    diff --git a/website/agenda/planung/event_history.cgi b/website/agenda/planung/event_history.cgi
    index 1dcae56..934d4d8 100755
    --- a/website/agenda/planung/event_history.cgi
    +++ b/website/agenda/planung/event_history.cgi
    @@ -51,7 +51,6 @@ my $request = {
     
     #set user at params->presets->user
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
    diff --git a/website/agenda/planung/help.cgi b/website/agenda/planung/help.cgi
    index 5eedaba..01ddfc0 100755
    --- a/website/agenda/planung/help.cgi
    +++ b/website/agenda/planung/help.cgi
    @@ -50,7 +50,6 @@ my $request = {
     	},
     };
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
    diff --git a/website/agenda/planung/image.cgi b/website/agenda/planung/image.cgi
    index 4fc9709..d1d6d5b 100755
    --- a/website/agenda/planung/image.cgi
    +++ b/website/agenda/planung/image.cgi
    @@ -8,7 +8,7 @@ use Data::Dumper;
     
     use File::stat();
     use Time::localtime();
    -use CGI::Simple;# qw(header param Vars escapeHTML uploadInfo cgi_error);
    +use CGI::Simple();
     use URI::Escape();
     
     use time();
    @@ -60,7 +60,6 @@ my $request = {
     	}
     };
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     $params = $request->{params}->{checked};
     
     #show header
    @@ -72,7 +71,7 @@ return unless defined uac::check( $config, $params, $user_presets );
     my $local_media_dir = $config->{locations}->{local_media_dir};
     my $local_media_url = $config->{locations}->{local_media_url};
     
    -log::error( $config, 'cannot locate media dir' . $local_media_dir ) unless -e $local_media_dir ;
    +log::error( $config, 'cannot locate media dir' . $local_media_dir ) unless -e $local_media_dir;
     uac::permissions_denied('reading from local media dir') unless -r $local_media_dir;
     uac::permissions_denied('writing to local media dir')   unless -w $local_media_dir;
     
    @@ -111,20 +110,23 @@ sub show_image {
     	$config->{access}->{write} = 0;
     	my $dbh = db::connect( $config, undef );
     
    -    my $projectId        = $params->{project_id};
    -    my $studioId         = $params->{studio_id};
    +	my $projectId        = $params->{project_id};
    +	my $studioId         = $params->{studio_id};
     	my $selectedFilename = $params->{filename} || '';
     
    -	my $filenames        = {};
    -	my $results          = [];
    +	my $filenames = {};
    +	my $results   = [];
     
     	# add images from series
     	if ( defined $params->{series_id} ) {
    -		my $seriesImages = series::get_images( $config, {
    -		    project_id => $projectId,
    -		    studio_id  => $studioId,
    -		    series_id  => $params->{series_id}
    -		} );
    +		my $seriesImages = series::get_images(
    +			$config,
    +			{
    +				project_id => $projectId,
    +				studio_id  => $studioId,
    +				series_id  => $params->{series_id}
    +			}
    +		);
     
     		for my $image (@$seriesImages) {
     			my $filename = $image->{filename};
    @@ -135,16 +137,19 @@ sub show_image {
     	}
     
     	#load images matching by search
    -	if ( $params->{search}=~/\S/ ) {
    +	if ( $params->{search} =~ /\S/ ) {
     
     		#remove filename from search
     		#delete $params->{filename};
     		#delete $params->{series_id};
    -		my $searchImages = images::get( $config, {
    -		    project_id => $projectId,
    -		    studio_id  => $studioId,
    -		    search     => $params->{search}
    -		} );
    +		my $searchImages = images::get(
    +			$config,
    +			{
    +				project_id => $projectId,
    +				studio_id  => $studioId,
    +				search     => $params->{search}
    +			}
    +		);
     
     		for my $image (@$searchImages) {
     			my $filename = $image->{filename};
    @@ -155,22 +160,27 @@ sub show_image {
     	}
     
     	#load selected image, if not already loaded
    -	my $selectedImage=undef;
    +	my $selectedImage = undef;
     	if ( $selectedFilename ne '' ) {
     		if ( defined $filenames->{$selectedFilename} ) {
     			$selectedImage = $filenames->{$selectedFilename};
     		} else {
    +
     			#print STDERR "getByName:".Dumper($params);
     
     			#put selected image to the top
    -			my $imagesByNames = images::get( $config, {
    -			    project_id => $projectId,
    -			    studio_id  => $studioId,
    -			    filename   => $selectedFilename
    -			} );
    +			my $imagesByNames = images::get(
    +				$config,
    +				{
    +					project_id => $projectId,
    +					studio_id  => $studioId,
    +					filename   => $selectedFilename
    +				}
    +			);
    +
     			#print STDERR Dumper($imagesByNames);
    -			$selectedImage = $imagesByNames->[0] if scalar(@$imagesByNames) > 0;		
    -	    }
    +			$selectedImage = $imagesByNames->[0] if scalar(@$imagesByNames) > 0;
    +		}
     
     		my $finalResults = [];
     
    @@ -188,12 +198,12 @@ sub show_image {
     		$results = $finalResults;
     	}
     
    -	if ( scalar @$results !=0 ) {
    -	    if ( $params->{template} =~ /edit/ ) {
    -	        my $result = $results->[0];
    -            $result->{missing_licence}=1 if (! defined $result->{licence} ) || ( $result->{licence}!~/\S/);
    -		    $results = [ $result ] ;
    -	    }
    +	if ( scalar @$results != 0 ) {
    +		if ( $params->{template} =~ /edit/ ) {
    +			my $result = $results->[0];
    +			$result->{missing_licence} = 1 if ( !defined $result->{licence} ) || ( $result->{licence} !~ /\S/ );
    +			$results = [$result];
    +		}
     
     		$results = modify_results( $results, $permissions, $user, $local_media_url );
     	}
    @@ -213,8 +223,9 @@ sub show_image {
     
     	#    print STDERR
     	$template_params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'image' } );
    -	$template_params= uac::set_template_permissions( $permissions, $template_params );
    -    $template_params->{no_results}=1 if scalar @$results==0;
    +	$template_params = uac::set_template_permissions( $permissions, $template_params );
    +	$template_params->{no_results} = 1 if scalar @$results == 0;
    +
     	#set global values for update and delete, per image values are evaluated later
     	$template_params->{allow}->{update_image} =
     	  $template_params->{allow}->{update_image_own} || $template_params->{allow}->{seriesupdate_image_others};
    @@ -252,8 +263,8 @@ sub save_image {
     
     	my $image = {};
     	$image->{filename}    = $params->{save_image};
    -	$image->{name}        = $params->{update_name}        if $params->{update_name} ne '' ;
    -	$image->{description} = $params->{update_description} if $params->{update_description} ne '' ;
    +	$image->{name}        = $params->{update_name} if $params->{update_name} ne '';
    +	$image->{description} = $params->{update_description} if $params->{update_description} ne '';
     	$image->{project_id}  = $params->{project_id};
     	$image->{studio_id}   = $params->{studio_id};
     	$image->{licence}     = $params->{licence};
    @@ -262,12 +273,13 @@ sub save_image {
     
     	$image->{name} = 'new' if $image->{name} eq '';
     
    -    images::checkLicence($config, $image);
    +	images::checkLicence( $config, $image );
     
     	$config->{access}->{write} = 1;
     	my $dbh = db::connect($config);
     
     	print STDERR "going to save\n";
    +
     	#print STDERR Dumper($image);
     
     	my $entries = images::get(
    @@ -290,8 +302,8 @@ sub save_image {
     	my $entry = $entries->[0];
     	if ( defined $entry ) {
     		images::update( $dbh, $image );
    -		images::publish(  $config, $image->{filename}) if (($image->{public}==1) && ($entry->{public}==0));
    -		images::depublish($config, $image->{filename}) if (($image->{public}==0) && ($entry->{public}==1));
    +		images::publish( $config, $image->{filename} ) if ( ( $image->{public} == 1 ) && ( $entry->{public} == 0 ) );
    +		images::depublish( $config, $image->{filename} ) if ( ( $image->{public} == 0 ) && ( $entry->{public} == 1 ) );
     	} else {
     		$image->{created_by} = $user;
     		images::insert( $dbh, $image );
    @@ -323,6 +335,7 @@ sub delete_image {
     		filename   => $params->{delete_image},
     	};
     	my $result = images::delete( $dbh, $image );
    +
     	#print STDERR "delete result=" . Dumper($result);
     
     	return;
    @@ -437,7 +450,7 @@ sub check_params {
     	}
     
     	#checkboxes
    -	for my $param ( 'public' ) {
    +	for my $param ('public') {
     		if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /([01])/ ) ) {
     			$checked->{$param} = $1;
     		}
    @@ -454,6 +467,7 @@ sub check_params {
     
     	$checked->{from} = time::check_date( $params->{from} );
     	$checked->{till} = time::check_date( $params->{till} );
    +
     	#print STDERR 'checked:'.Dumper ($checked);
     
     	return $checked;
    diff --git a/website/agenda/planung/imageUpload.cgi b/website/agenda/planung/imageUpload.cgi
    index c9dc52a..5b73d05 100755
    --- a/website/agenda/planung/imageUpload.cgi
    +++ b/website/agenda/planung/imageUpload.cgi
    @@ -320,13 +320,13 @@ sub process_image {
     	my $md5_filename = shift;
     	my $content      = shift;
     
    -	my $upload_path = images::getInternalPath($config, {type=>'upload', filename=> $md5_filename . '.' . $extension});
    -	my $thumb_path  = images::getInternalPath($config, {type=>'thumbs', filename=> $md5_filename . '.jpg'});
    -	my $icon_path   = images::getInternalPath($config, {type=>'icons',  filename=> $md5_filename . '.jpg'});
    -	my $image_path  = images::getInternalPath($config, {type=>'images', filename=> $md5_filename . '.jpg'});
    +	my $upload_path = images::getInternalPath( $config, { type => 'upload', filename => $md5_filename . '.' . $extension } );
    +	my $thumb_path  = images::getInternalPath( $config, { type => 'thumbs', filename => $md5_filename . '.jpg' } );
    +	my $icon_path   = images::getInternalPath( $config, { type => 'icons',  filename => $md5_filename . '.jpg' } );
    +	my $image_path  = images::getInternalPath( $config, { type => 'images', filename => $md5_filename . '.jpg' } );
     
     	#copy file to upload space
    -	my $result=images::writeFile($upload_path, $content);
    +	my $result = images::writeFile( $upload_path, $content );
     	return $result if defined $result->{error};
     
     	#write image
    @@ -350,7 +350,6 @@ sub process_image {
     
     	#$image->Normalize();
     	$image->Write( 'jpg:' . $image_path );
    -
     	#write thumb
     	my $thumb = $image;
     	$thumb->Trim2Square;
    diff --git a/website/agenda/planung/localization.cgi b/website/agenda/planung/localization.cgi
    index bd312c7..9fad211 100755
    --- a/website/agenda/planung/localization.cgi
    +++ b/website/agenda/planung/localization.cgi
    @@ -34,7 +34,7 @@ $params = $request->{params}->{checked};
     my $loc = localization::get( $config, { user => $user, file => $params->{usecase} } );
     my $header = "Content-type:application/json; charset=UTF-8;\n\n";
     $loc->{usecase} = $params->{usecase};
    -my $json = to_json( $loc, { pretty => 1 } );
    +my $json = JSON::to_json( $loc, { pretty => 1 } );
     my @json_lines = ();
     
     for my $line ( split /\n/, $json ) {
    diff --git a/website/agenda/planung/notify_events.cgi b/website/agenda/planung/notify_events.cgi
    index 9a2a187..8fb515e 100755
    --- a/website/agenda/planung/notify_events.cgi
    +++ b/website/agenda/planung/notify_events.cgi
    @@ -56,12 +56,11 @@ my $request = {
     
     #set user at params->presets->user
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
     #show header
    -unless ( params::isJson() || ( $params->{template}=~/\.txt/ ) ) {
    +unless ( params::isJson() || ( $params->{template} =~ /\.txt/ ) ) {
     	my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
     	$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
     	template::process( 'print', template::check('default.html'), $headerParams );
    @@ -124,7 +123,7 @@ sub show_events {
     
     	$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'notify_events' } );
     	template::process( 'print', $params->{template}, $params );
    -	
    +
     }
     
     sub sendMail {
    diff --git a/website/agenda/planung/playout.cgi b/website/agenda/planung/playout.cgi
    index 4b491a1..142dd9d 100644
    --- a/website/agenda/planung/playout.cgi
    +++ b/website/agenda/planung/playout.cgi
    @@ -63,7 +63,6 @@ my $request = {
     	},
     };
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
    diff --git a/website/agenda/planung/projects.cgi b/website/agenda/planung/projects.cgi
    index 71eefff..14a60bb 100755
    --- a/website/agenda/planung/projects.cgi
    +++ b/website/agenda/planung/projects.cgi
    @@ -47,7 +47,6 @@ my $request = {
     	},
     };
     $request = uac::prepare_request( $request, $user_presets );
    -log::init($request);
     
     $params = $request->{params}->{checked};
     
    diff --git a/website/agenda/planung/requestPassword.cgi b/website/agenda/planung/requestPassword.cgi
    index 79debb6..c73a1ff 100644
    --- a/website/agenda/planung/requestPassword.cgi
    +++ b/website/agenda/planung/requestPassword.cgi
    @@ -1,4 +1,4 @@
    -#! /usr/bin/perl -w 
    +#! /usr/bin/perl -w
     
     use warnings "all";
     use strict;
    @@ -30,99 +30,101 @@ print qq{
     
     };
     
    -if ( defined $params->{user}){
    -    sendToken($config, $params);
    -    return;
    -}else{
    -    my $result=checkToken($config, $params);
    -    return;
    +if ( defined $params->{user} ) {
    +	sendToken( $config, $params );
    +	return;
    +} else {
    +	my $result = checkToken( $config, $params );
    +	return;
     }
     
    -sub sendToken{
    -    my $config=shift;
    -    my $params=shift;
    -    my $entry = password_requests::sendToken($config, { user => $params->{user} });
    -    if (defined $entry){
    -        print "Please check you mails\n"
    -    }else{
    -        print "Sorry\n";
    -    }
    +sub sendToken {
    +	my $config = shift;
    +	my $params = shift;
    +	my $entry  = password_requests::sendToken( $config, { user => $params->{user} } );
    +	if ( defined $entry ) {
    +		print "Please check you mails\n";
    +	} else {
    +		print "Sorry\n";
    +	}
     }
     
    -sub checkToken{
    -    my $config=shift;
    -    my $params=shift;
    +sub checkToken {
    +	my $config = shift;
    +	my $params = shift;
     
    -    my $token = $params->{token};
    +	my $token = $params->{token};
     
    -    my $entry = password_requests::get($config, { token => $token });
    -    unless (defined $entry){
    -        print "invalid token\n";
    -        return undef;
    -    }
    +	my $entry = password_requests::get( $config, { token => $token } );
    +	unless ( defined $entry ) {
    +		print "invalid token\n";
    +		return undef;
    +	}
     
    -    print STDERR Dumper($entry);
    -    my $created_at = $entry->{created_at};
    -    unless (defined $created_at){
    -        print "invalid token age\n";
    -        return undef;
    -    }
    +	print STDERR Dumper($entry);
    +	my $created_at = $entry->{created_at};
    +	unless ( defined $created_at ) {
    +		print "invalid token age\n";
    +		return undef;
    +	}
     
    -    my $age = time() - time::datetime_to_time($created_at);
    -    if ($age > 600) {
    -        print "token is too old\n";
    -        password_requests::delete($config, { token => $token });
    -        return undef;
    -    }
    +	my $age = time() - time::datetime_to_time($created_at);
    +	if ( $age > 600 ) {
    +		print "token is too old\n";
    +		password_requests::delete( $config, { token => $token } );
    +		return undef;
    +	}
     
    -    $config->{access}->{write} = 1;
    -    $entry->{max_attempts}++;
    -    password_requests::update($config, $entry);
    -    $config->{access}->{write} = 0;
    +	$config->{access}->{write} = 1;
    +	$entry->{max_attempts}++;
    +	password_requests::update( $config, $entry );
    +	$config->{access}->{write} = 0;
     
    -    if ($entry->{max_attempts}>10){
    -        print "too many failed attempts, please request a new token by mail\n";
    -        password_requests::delete($config, { token => $token });
    -        return undef;
    -    }
    +	if ( $entry->{max_attempts} > 10 ) {
    +		print "too many failed attempts, please request a new token by mail\n";
    +		password_requests::delete( $config, { token => $token } );
    +		return undef;
    +	}
     
    -    unless ((defined $params->{user_password}) && (defined $params->{user_password2})){
    -        printForm($token);
    -        return undef;
    -    }
    -   
    -    if ($params->{action} eq 'change'){
    -        my $user  = $entry->{user};
    -        my $request = {
    -            config => $config,
    -            params => { checked => $params }
    -        };
    -        my $result = password_requests::changePassword($config, $request, $user);
    +	unless ( ( defined $params->{user_password} ) && ( defined $params->{user_password2} ) ) {
    +		printForm($token);
    +		return undef;
    +	}
     
    -        if (defined $result->{error}){
    -            #print "sorry\n";
    -            print $result->{error}."\n";
    -            printForm($token);
    -        }
    +	if ( $params->{action} eq 'change' ) {
    +		my $user    = $entry->{user};
    +		my $request = {
    +			config => $config,
    +			params => { checked => $params }
    +		};
    +		my $result = password_requests::changePassword( $config, $request, $user );
     
    -        if (defined $result->{success}){
    -            #print "success\n";
    -            print $result->{success}."\n";
    -            password_requests::delete($config, { user => $user });
    -            my $url=$config->{locations}->{editor_base_url};
    -            print qq{
    +		if ( defined $result->{error} ) {
    +
    +			#print "sorry\n";
    +			print $result->{error} . "\n";
    +			printForm($token);
    +		}
    +
    +		if ( defined $result->{success} ) {
    +
    +			#print "success\n";
    +			print $result->{success} . "\n";
    +			password_requests::delete( $config, { user => $user } );
    +			my $url = $config->{locations}->{editor_base_url};
    +			print qq{
                     
                 };
    -        }
    -    }
    +		}
    +	}
     
     }
     
    -sub printForm{
    -    my $token=shift;
    -    print qq{
    +sub printForm {
    +	my $token = shift;
    +	print qq{
             
    @@ -136,7 +138,7 @@ sub printForm{ sub check_params { my $params = shift; - my $checked = {}; + my $checked = {}; #my $template = ''; #$checked->{template} = template::check( $params->{template}, 'requestPassword' ); @@ -147,7 +149,7 @@ sub check_params { } $checked->{debug} = $debug; - for my $param ( 'user','token', 'user_password', 'user_password2' ) { + for my $param ( 'user', 'token', 'user_password', 'user_password2' ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /\S/ ) ) { $checked->{$param} = $params->{$param}; } diff --git a/website/agenda/planung/roles.cgi b/website/agenda/planung/roles.cgi index 7c5b246..1b33f1e 100755 --- a/website/agenda/planung/roles.cgi +++ b/website/agenda/planung/roles.cgi @@ -57,8 +57,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/planung/selectEvent.cgi b/website/agenda/planung/selectEvent.cgi index 0bed64c..195c012 100755 --- a/website/agenda/planung/selectEvent.cgi +++ b/website/agenda/planung/selectEvent.cgi @@ -46,7 +46,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; $params = uac::set_template_permissions( $request->{permissions}, $params ); diff --git a/website/agenda/planung/selectSeries.cgi b/website/agenda/planung/selectSeries.cgi index df9fe2e..86c0c03 100755 --- a/website/agenda/planung/selectSeries.cgi +++ b/website/agenda/planung/selectSeries.cgi @@ -45,7 +45,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; $params = uac::set_template_permissions( $request->{permissions}, $params ); diff --git a/website/agenda/planung/series.cgi b/website/agenda/planung/series.cgi index ef103f6..fbf14ad 100755 --- a/website/agenda/planung/series.cgi +++ b/website/agenda/planung/series.cgi @@ -60,8 +60,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header @@ -429,13 +427,16 @@ sub save_series { #print STDERR Dumper($entry); $config->{access}->{write} = 1; my $result = series::update( $config, $entry ); - - series_events::update_series_images($config,{ - project_id => $entry->{project_id}, - studio_id => $entry->{studio_id}, - series_id => $entry->{series_id}, + + series_events::update_series_images( + $config, + { + project_id => $entry->{project_id}, + studio_id => $entry->{studio_id}, + series_id => $entry->{series_id}, series_image => $params->{image} - }); + } + ); user_stats::increase( $config, @@ -590,7 +591,7 @@ sub assign_event { my $config = shift; my $request = shift; - print STDERR "assign event\n"; + print STDERR "assign event\n"; my $params = $request->{params}->{checked}; my $permissions = $request->{permissions}; @@ -608,7 +609,8 @@ sub assign_event { return undef; } } - #print STDERR "found all parameters:\n".Dumper($entry); + + #print STDERR "found all parameters:\n".Dumper($entry); # check if event exists, # this has to use events::get, since it cannot check for series_id @@ -618,11 +620,12 @@ sub assign_event { checked => events::check_params( $config, { - event_id => $entry->{event_id}, - template => 'no', - limit => 1, - archive => 'all', -# no_exclude => 1 + event_id => $entry->{event_id}, + template => 'no', + limit => 1, + archive => 'all', + + # no_exclude => 1 } ) }, @@ -632,11 +635,12 @@ sub assign_event { $request2->{params}->{checked}->{published} = 'all'; my $events = events::get( $config, $request2 ); + #print STDERR "found events:".Dumper($events); - if (scalar (@$events) != 1){ - uac::print_error("no event found for event_id=$entry->{event_id}, archive=all"); - return undef; - } + if ( scalar(@$events) != 1 ) { + uac::print_error("no event found for event_id=$entry->{event_id}, archive=all"); + return undef; + } my $event = $events->[0]; @@ -837,19 +841,19 @@ sub reassign_event { $request->{params}->{checked}->{series_id} = $new_series_id; my $result = assign_event( $config, $request ); - unless (defined $result){ - uac::print_error("could not assign event"); - return undef; - } + unless ( defined $result ) { + uac::print_error("could not assign event"); + return undef; + } $request->{params}->{checked}->{series_id} = $series_id; $result = unassign_event( $config, $request ); - unless (defined $result){ - uac::print_error("could not unassign event"); - return undef; - } + unless ( defined $result ) { + uac::print_error("could not unassign event"); + return undef; + } - #print STDERR " event\n"; + #print STDERR " event\n"; my $url = 'event.cgi?project_id=' . $project_id . '&studio_id=' . $studio_id . '&series_id=' . $new_series_id . '&event_id=' . $event_id; print qq{} . "\n"; @@ -944,8 +948,8 @@ sub list_series { return; } - 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 $studios = studios::get( $config, @@ -959,13 +963,13 @@ sub list_series { for my $studio (@$studios) { $studio_by_id->{ $studio->{id} } = $studio; } - my $studio = $studio_by_id->{ $studio_id }; + my $studio = $studio_by_id->{$studio_id}; my $series_conditions = { project_id => $project_id, studio_id => $studio_id }; - my $series = series::get_event_age( $config, $series_conditions ); + my $series = series::get_event_age( $config, $series_conditions ); my $newSeries = []; my $oldSeries = []; @@ -980,9 +984,12 @@ sub list_series { $params->{newSeries} = $newSeries; $params->{oldSeries} = $oldSeries; - $params->{image} = studios::getImageById($config, {project_id => $project_id, studio_id => $studio_id} ) if ( (!defined $params->{image}) || ($params->{image} eq '') ); - $params->{image} = project::getImageById($config, {project_id => $project_id} ) if ( (!defined $params->{image}) || ($params->{image} eq '') ); - #print STDERR Dumper $params->{image}; + $params->{image} = studios::getImageById( $config, { project_id => $project_id, studio_id => $studio_id } ) + if ( ( !defined $params->{image} ) || ( $params->{image} eq '' ) ); + $params->{image} = project::getImageById( $config, { project_id => $project_id } ) + if ( ( !defined $params->{image} ) || ( $params->{image} eq '' ) ); + + #print STDERR Dumper $params->{image}; $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'all,series' } ); template::process( 'print', $params->{template}, $params ); @@ -1079,10 +1086,13 @@ sub show_series { my $location = $studio->{location}; - # set default image from studio - $serie->{image} = studios::getImageById($config, {project_id => $project_id, studio_id => $studio_id} ) if ( (!defined $serie->{image}) || ($serie->{image} eq '') ); - $serie->{image} = project::getImageById($config, {project_id => $project_id} ) if ( (!defined $serie->{image}) || ($serie->{image} eq '') ); - #print STDERR Dumper $serie->{image}; + # set default image from studio + $serie->{image} = studios::getImageById( $config, { project_id => $project_id, studio_id => $studio_id } ) + if ( ( !defined $serie->{image} ) || ( $serie->{image} eq '' ) ); + $serie->{image} = project::getImageById( $config, { project_id => $project_id } ) + if ( ( !defined $serie->{image} ) || ( $serie->{image} eq '' ) ); + + #print STDERR Dumper $serie->{image}; #add users $serie->{series_users} = series::get_users( @@ -1093,7 +1103,7 @@ sub show_series { series_id => $serie->{series_id} } ); - uac::print_warn( "There is no user assigned, yet. Please assign a user!" ) if scalar @{$serie->{series_users}} ==0; + uac::print_warn("There is no user assigned, yet. Please assign a user!") if scalar @{ $serie->{series_users} } == 0; #add events $serie->{events} = series::get_events( diff --git a/website/agenda/planung/show-playout.cgi b/website/agenda/planung/show-playout.cgi index 6d8b791..1724f23 100755 --- a/website/agenda/planung/show-playout.cgi +++ b/website/agenda/planung/show-playout.cgi @@ -53,8 +53,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/planung/showImage.cgi b/website/agenda/planung/showImage.cgi index e699f64..3b92530 100644 --- a/website/agenda/planung/showImage.cgi +++ b/website/agenda/planung/showImage.cgi @@ -47,8 +47,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header @@ -68,26 +66,26 @@ sub showImage { return; } - unless (defined $params->{filename}){ + unless ( defined $params->{filename} ) { uac::permissions_denied('missing filename'); - return; - } + return; + } - my $filename = images::getInternalPath($config, $params); - unless (-e $filename){ + my $filename = images::getInternalPath( $config, $params ); + unless ( -e $filename ) { uac::permissions_denied("read $filename"); - return; - } + return; + } - my $image=images::readFile($filename); - if (defined $image->{error}){ + my $image = images::readFile($filename); + if ( defined $image->{error} ) { uac::permissions_denied("read $filename, $image->{error}"); - return; - } + return; + } - binmode STDOUT; - print "Content-type:image/jpeg; charset=UTF-8;\n\n"; - print $image->{content}; + binmode STDOUT; + print "Content-type:image/jpeg; charset=UTF-8;\n\n"; + print $image->{content}; return; } @@ -103,22 +101,22 @@ sub check_params { $checked->{debug} = $debug; #numeric values - for my $param ( 'filename') { + for my $param ('filename') { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[A-Za-z\_\-\.\d\/]+$/ ) ) { $checked->{$param} = $params->{$param}; - $checked->{$param} =~s/^.*\///g; + $checked->{$param} =~ s/^.*\///g; } } - $checked->{type}='thumbs'; - for my $param ( 'type') { + $checked->{type} = 'thumbs'; + for my $param ('type') { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^(thumbs|images|icons)$/ ) ) { $checked->{$param} = $params->{$param}; } } #numeric values - for my $param ( 'project_id', 'studio_id', 'series_id', 'event_id') { + for my $param ( 'project_id', 'studio_id', 'series_id', 'event_id' ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[\-\d]+$/ ) ) { $checked->{$param} = $params->{$param}; } diff --git a/website/agenda/planung/studio_timeslots.cgi b/website/agenda/planung/studio_timeslots.cgi index 501720d..e2cbee1 100755 --- a/website/agenda/planung/studio_timeslots.cgi +++ b/website/agenda/planung/studio_timeslots.cgi @@ -53,8 +53,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/planung/studios.cgi b/website/agenda/planung/studios.cgi index 581173f..2bbe513 100755 --- a/website/agenda/planung/studios.cgi +++ b/website/agenda/planung/studios.cgi @@ -47,8 +47,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/planung/templates/.old/.htaccess b/website/agenda/planung/templates/.old/.htaccess deleted file mode 100644 index 3a42882..0000000 --- a/website/agenda/planung/templates/.old/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/website/agenda/planung/templates/.old/event_edit_user_content.ok.html b/website/agenda/planung/templates/.old/event_edit_user_content.ok.html deleted file mode 100644 index c3ee2ef..0000000 --- a/website/agenda/planung/templates/.old/event_edit_user_content.ok.html +++ /dev/null @@ -1,378 +0,0 @@ - - - - - edit event - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - -
    - -
    - - - - - - - - - -
    - -
    - - - - - - - -
    -
    -
    -
    - -
    -
    Event
    - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    when - - , , -
    -
    - start - - - duration - end -
    - -
    status - - checked="checked" value="1"> live - - - - checked="checked" value="1"> published - - - - checked="checked" value="1"> preproduced - - - - checked="checked" value="1"> archived - - - - checked="checked" value="1"> rerun - - - - checked="checked" value="1"> no sync - -
    episode
    - -
    content
    - - - - - - style="display:none" > - - - - - - - - - -
    excerpt
    description - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    title - - - - - - - - - - - - - -
    excerpt - - - - - -
    user excerpt - - - - - -
    current topics - - - - - -
    content - - - - - -
    - image - - - - - - - -
    - - - - - -
    -
    - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - -
    last modified at by .
    -
    - -
    - -
    -
    - - - diff --git a/website/agenda/planung/templates/.old/event_manager.html b/website/agenda/planung/templates/.old/event_manager.html deleted file mode 100644 index 5cc9c36..0000000 --- a/website/agenda/planung/templates/.old/event_manager.html +++ /dev/null @@ -1,152 +0,0 @@ - - -

    Sendungen verwalten

    - - - -projects: - - - | - - - - - - -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ProgammWochentagDatumStartEndeBildSendereiheTitelAuszug
    - - - - - - - - - - - - - - - - - - -

    Kommentare , - mehr... - - -

    - diff --git a/website/agenda/planung/templates/.old/menu.html b/website/agenda/planung/templates/.old/menu.html deleted file mode 100644 index 8960289..0000000 --- a/website/agenda/planung/templates/.old/menu.html +++ /dev/null @@ -1,283 +0,0 @@ - - - -
    -
    - - -
    - -
    -
    - diff --git a/website/agenda/planung/templates/.old/select_studio.html b/website/agenda/planung/templates/.old/select_studio.html deleted file mode 100644 index 85cb716..0000000 --- a/website/agenda/planung/templates/.old/select_studio.html +++ /dev/null @@ -1,24 +0,0 @@ - -
    - - logout -
    - diff --git a/website/agenda/planung/user_settings.cgi b/website/agenda/planung/user_settings.cgi index 1939c7c..7f1d19d 100755 --- a/website/agenda/planung/user_settings.cgi +++ b/website/agenda/planung/user_settings.cgi @@ -45,7 +45,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); $params = $request->{params}->{checked}; diff --git a/website/agenda/planung/user_stats.cgi b/website/agenda/planung/user_stats.cgi index 05a5bdf..1469899 100755 --- a/website/agenda/planung/user_stats.cgi +++ b/website/agenda/planung/user_stats.cgi @@ -47,8 +47,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/planung/users.cgi b/website/agenda/planung/users.cgi index bc14783..8d9dec9 100755 --- a/website/agenda/planung/users.cgi +++ b/website/agenda/planung/users.cgi @@ -17,7 +17,6 @@ use password_requests(); my $r = shift; ( my $cgi, my $params, my $error ) = params::get($r); - my $config = config::get('../config/config.cgi'); my $debug = $config->{system}->{debug}; my ( $user, $expires ) = auth::get_user( $cgi, $config ); @@ -44,8 +43,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header @@ -201,15 +198,16 @@ sub update_user { return; } - #print Dumper($params); - my $users= uac::get_users($config, {email => $params->{user_email}}); - if (scalar (@$users) > 0){ - #print Dumper($users); + #print Dumper($params); + my $users = uac::get_users( $config, { email => $params->{user_email} } ); + if ( scalar(@$users) > 0 ) { + + #print Dumper($users); error('There is already a user registered for the given email address'); return; - } + } - return unless password_requests::checkPassword( $params->{user_password} ) ; + return unless password_requests::checkPassword( $params->{user_password} ); if ( $params->{user_password} ne $params->{user_password2} ) { error('password mismatch'); @@ -245,18 +243,17 @@ sub change_password { my $params = $request->{params}->{checked}; my $permissions = $request->{permissions}; - my $result = password_requests::changePassword($config, $request, $userName); + my $result = password_requests::changePassword( $config, $request, $userName ); $params->{errors} = $result->{error} if defined $result->{error}; - $params->{info} = $result->{success} if defined $result->{success}; - $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'users' } ); + $params->{info} = $result->{success} if defined $result->{success}; + $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'users' } ); uac::set_template_permissions( $permissions, $params ); #print Dumper($permissions); template::process( 'print', template::check('change_password'), $params ); } - sub delete_user { my $config = shift; my $request = shift; @@ -423,16 +420,16 @@ sub check_params { $checked->{studio_id} = -1; } - for my $param ( 'user_name', 'user_full_name', 'user_email') { + for my $param ( 'user_name', 'user_full_name', 'user_email' ) { if ( defined $params->{$param} ) { my $value = $params->{$param}; - $value =~s/^\s+//g; - $value =~s/\s+$//g; - $checked->{$param} = $value; + $value =~ s/^\s+//g; + $value =~ s/\s+$//g; + $checked->{$param} = $value; } } - for my $param ( 'user_password', 'user_password2' ) { + for my $param ( 'user_password', 'user_password2' ) { if ( defined $params->{$param} ) { $checked->{$param} = $params->{$param}; } diff --git a/website/agenda/planung/work_time.cgi b/website/agenda/planung/work_time.cgi index e04305a..7a2cd48 100755 --- a/website/agenda/planung/work_time.cgi +++ b/website/agenda/planung/work_time.cgi @@ -54,8 +54,6 @@ my $request = { }, }; $request = uac::prepare_request( $request, $user_presets ); -log::init($request); - $params = $request->{params}->{checked}; #process header diff --git a/website/agenda/series.cgi b/website/agenda/series.cgi index 3eadc5c..d842f07 100755 --- a/website/agenda/series.cgi +++ b/website/agenda/series.cgi @@ -71,7 +71,6 @@ sub list_series { template::process( 'print', 'templates/series.html', $params ); } - sub check_params { my $params = shift; diff --git a/website/agenda/series_names.cgi b/website/agenda/series_names.cgi index ef50def..9f1bc4d 100755 --- a/website/agenda/series_names.cgi +++ b/website/agenda/series_names.cgi @@ -2,7 +2,6 @@ #use utf8; use warnings "all"; - #use diagnostics; use strict; use Data::Dumper; @@ -36,7 +35,6 @@ my $request = { checked => check_params( $config, $params ) }, }; -log::init($request); $params = $request->{params}->{checked}; @@ -44,7 +42,6 @@ $params = $request->{params}->{checked}; my $cache = {}; if ( $config->{cache}->{use_cache} eq '1' ) { cache::configure('series_names.html'); - log::write( $config, 'cache_files', cache::get_map() ) if ($debug); $cache = cache::load( $config, $params ); if ( defined $cache->{content} ) { print $cache->{content};