fix template configuration

This commit is contained in:
Milan
2018-09-06 23:06:48 +02:00
parent 2481490e7d
commit e043493847
30 changed files with 4482 additions and 4487 deletions

View File

@@ -204,7 +204,7 @@ sub update {
set $set set $set
where $conditions where $conditions
}; };
print STDERR Dumper($query) . Dumper($bind_values); #print STDERR Dumper($query) . Dumper($bind_values);
my $result = db::put( $dbh, $query, $bind_values ); my $result = db::put( $dbh, $query, $bind_values );
images::setSeriesLabels( $dbh, $image ); images::setSeriesLabels( $dbh, $image );
@@ -491,10 +491,10 @@ sub setEventLabels {
where image=? where image=?
}; };
my $bind_values = [ $image->{licence}, $image->{filename} ]; my $bind_values = [ $image->{licence}, $image->{filename} ];
print STDERR Dumper($query) . Dumper($bind_values); #print STDERR Dumper($query) . Dumper($bind_values);
my $results = db::put( $dbh, $query, $bind_values ); my $results = db::put( $dbh, $query, $bind_values );
print STDERR Dumper($results) . " changes\n"; #print STDERR Dumper($results) . " changes\n";
return $results; return $results;
} }
@@ -521,10 +521,10 @@ sub setSeriesLabels {
where series_image=? where series_image=?
}; };
my $bind_values = [ $image->{licence}, $image->{filename} ]; my $bind_values = [ $image->{licence}, $image->{filename} ];
print STDERR Dumper($query) . Dumper($bind_values); #print STDERR Dumper($query) . Dumper($bind_values);
my $results = db::put( $dbh, $query, $bind_values ); my $results = db::put( $dbh, $query, $bind_values );
print STDERR Dumper($results) . " changes\n"; #print STDERR Dumper($results) . " changes\n";
return $results; return $results;
} }

View File

@@ -307,7 +307,7 @@ sub plain_to_xml {
} }
sub fix_utf8 { sub fix_utf8 {
$_[0] = decode( 'cp1252', $_[0] ); $_[0] = Encode::decode( 'cp1252', $_[0] );
return $_[0]; return $_[0];
} }

View File

@@ -53,7 +53,7 @@ sub get {
my $query = ''; my $query = '';
unless ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) { unless ( ( defined $condition->{project_id} ) && ( $condition->{project_id} ne '' ) ) {
my $conditions = ''; my $conditions = '';
$conditions = " where " . join( " and ", @conditions ) if ( @conditions > 0 ); $conditions = " where " . join( " and ", @conditions ) if ( scalar @conditions > 0 );
$query = qq{ $query = qq{
select * select *
from calcms_studios s from calcms_studios s
@@ -62,11 +62,10 @@ sub get {
}; };
} else { } else {
push @conditions, 's.id=ps.studio_id'; push @conditions, 's.id=ps.studio_id';
push @conditions, 'ps.project_id=?'; push @conditions, 'ps.project_id=?';
push @bind_values, $condition->{project_id}; push @bind_values, $condition->{project_id};
my $conditions = '';
$condition .= " where " . join( " and ", @conditions ) if ( scalar @conditions > 0 ); my $conditions = " where " . join( " and ", @conditions );
$query = qq{ $query = qq{
select * select *
from calcms_studios s, calcms_project_studios ps from calcms_studios s, calcms_project_studios ps

View File

@@ -77,7 +77,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params($config, $params),
}, },
}; };
@@ -540,6 +540,7 @@ sub getEventDuration {
} }
sub check_params { sub check_params {
my $config = shift;
my $params = shift; my $params = shift;
my $checked = {}; my $checked = {};

View File

@@ -4,7 +4,7 @@ use warnings "all";
use strict; use strict;
use Data::Dumper; use Data::Dumper;
use URI::Escape(); use URI::Escape();
use Encode(); #use Encode();
use utf8(); use utf8();
use params(); use params();
use config(); use config();
@@ -52,8 +52,6 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
$params->{expires} = $expires; $params->{expires} = $expires;
#print STDERR Dumper($params);
my $scriptName = 'calendar.cgi'; my $scriptName = 'calendar.cgi';
#add "all" studio to select box #add "all" studio to select box
@@ -75,7 +73,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params( $params, $config ), checked => check_params( $config, $params ),
}, },
}; };
@@ -83,7 +81,6 @@ $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
#print STDERR Dumper($request);
if ( if (
( (
( defined $params->{action} ) && ( ( $params->{action} eq 'show' ) ( defined $params->{action} ) && ( ( $params->{action} eq 'show' )
@@ -1802,8 +1799,8 @@ sub getSeriesEvents {
} }
sub check_params { sub check_params {
my $params = shift;
my $config = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $template = ''; my $template = '';

View File

@@ -32,7 +32,7 @@ my $r = shift;
my $config = config::get('../config/config.cgi'); my $config = config::get('../config/config.cgi');
my $debug = $config->{system}->{debug}; my $debug = $config->{system}->{debug};
my ( $user, $expires ) = auth::get_user( $cgi, $config ); my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( !defined $user ) || ( $user eq '' ) ; return if ( !defined $user ) || ( $user eq '' );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
@@ -52,7 +52,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
@@ -68,7 +68,7 @@ if ( ( params::isJson() ) || ( defined $params->{action} ) ) {
} else { } else {
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
print q{ print q{
<script src="js/datetime.js" type="text/javascript"></script> <script src="js/datetime.js" type="text/javascript"></script>
} unless (params::isJson); } unless (params::isJson);
@@ -139,7 +139,7 @@ sub showComments {
$events = comments::get_events( $dbh, $config, $request, $comments ); $events = comments::get_events( $dbh, $config, $request, $comments );
my $language = $config->{date}->{language} || 'en'; my $language = $config->{date}->{language} || 'en';
for my $event (@$events) { for my $event (@$events) {
$event->{start} = time::date_time_format($config, $event->{start}, $language ); $event->{start} = time::date_time_format( $config, $event->{start}, $language );
$comment_count += $event->{comment_count} if ( defined $event->{comment_count} ); $comment_count += $event->{comment_count} if ( defined $event->{comment_count} );
$event->{cache_base_url} = $config->{cache}->{base_url}; $event->{cache_base_url} = $config->{cache}->{base_url};
} }
@@ -157,20 +157,20 @@ sub showComments {
$template_parameters->{projects} = project::get_with_dates($config); $template_parameters->{projects} = project::get_with_dates($config);
$template_parameters->{controllers} = $config->{controllers}; $template_parameters->{controllers} = $config->{controllers};
$template_parameters->{allow} = $permissions; $template_parameters->{allow} = $permissions;
$template_parameters->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'comment' } ); $template_parameters->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'comment' } );
#fill and output template #fill and output template
template::process($config, 'print', $params->{template}, $template_parameters ); template::process( $config, 'print', $params->{template}, $template_parameters );
} }
sub modify_comments { sub modify_comments {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $results = shift; my $results = shift;
my $language = $config->{date}->{language} || 'en'; my $language = $config->{date}->{language} || 'en';
for my $result (@$results) { for my $result (@$results) {
$result->{start_date_name} = time::date_format($config, $result->{created_at}, $language ); $result->{start_date_name} = time::date_format( $config, $result->{created_at}, $language );
$result->{start_time_name} = time::time_format( $result->{created_at} ); $result->{start_time_name} = time::time_format( $result->{created_at} );
$result->{ $result->{lock_status} } = 1; $result->{ $result->{lock_status} } = 1;
$result->{ $result->{news_status} } = 1; $result->{ $result->{news_status} } = 1;
@@ -238,6 +238,7 @@ sub setRead {
} }
sub check_params { sub check_params {
my $config = shift;
my $params = shift; my $params = shift;
my $checked = {}; my $checked = {};
@@ -253,9 +254,9 @@ sub check_params {
#template #template
my $template = ''; my $template = '';
if ( defined $checked->{action} ) { if ( defined $checked->{action} ) {
$template = template::check($config, $params->{template}, 'edit_comment' ) if $checked->{action} eq 'showComment'; $template = template::check( $config, $params->{template}, 'edit_comment' ) if $checked->{action} eq 'showComment';
} else { } else {
$template = template::check($config, $params->{template}, 'comments' ); $template = template::check( $config, $params->{template}, 'comments' );
} }
$checked->{template} = $template; $checked->{template} = $template;

View File

@@ -30,12 +30,12 @@ return if ( ( !defined $user ) || ( $user eq '' ) );
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
user => $user user => $user
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -45,11 +45,11 @@ $params->{project_id} = $user_presets->{project_id}
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -58,7 +58,7 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
print q{ print q{
@@ -70,148 +70,149 @@ print q{
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{create_event_from_schedule} == 1 ) { unless ( $permissions->{create_event_from_schedule} == 1 ) {
uac::permissions_denied('create_event_from_schedule'); uac::permissions_denied('create_event_from_schedule');
return; return;
} }
if ( $params->{action} eq 'create_events' ) { if ( $params->{action} eq 'create_events' ) {
create_events( $config, $request ); create_events( $config, $request );
} else { } else {
show_events( $config, $request ); show_events( $config, $request );
} }
sub show_events { sub show_events {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{assign_series_events} == 1 ) { unless ( $permissions->{assign_series_events} == 1 ) {
uac::permissions_denied('assign_series_events'); uac::permissions_denied('assign_series_events');
return; return;
} }
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub create_events { sub create_events {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{assign_series_events} == 1 ) { unless ( $permissions->{assign_series_events} == 1 ) {
uac::permissions_denied('assign_series_events'); uac::permissions_denied('assign_series_events');
return; return;
} }
print STDERR "create events\n"; print STDERR "create events\n";
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $from_date = $params->{from_date}; my $from_date = $params->{from_date};
my $till_date = $params->{till_date}; my $till_date = $params->{till_date};
my $duration = $params->{duration}; my $duration = $params->{duration};
$from_date = time::time_to_datetime(); $from_date = time::time_to_datetime();
if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d \d\d)/ ) { if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d \d\d)/ ) {
$from_date = $1 . ':00'; $from_date = $1 . ':00';
} }
$till_date = time::add_days_to_datetime( $from_date, $duration ); $till_date = time::add_days_to_datetime( $from_date, $duration );
if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { if ( $from_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) {
$from_date = $1; $from_date = $1;
} }
if ( $till_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) { if ( $till_date =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) {
$till_date = $1; $till_date = $1;
} }
$params->{from_date} = $from_date; $params->{from_date} = $from_date;
$params->{till_date} = $till_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( my $dates = series_dates::getDatesWithoutEvent(
$config, $config,
{ {
project_id => $project_id, project_id => $project_id,
studio_id => $studio_id, studio_id => $studio_id,
from => $from_date, from => $from_date,
till => $till_date till => $till_date
} }
); );
print STDERR "<pre>found " . ( scalar @$dates ) . " dates\n"; print STDERR "<pre>found " . ( scalar @$dates ) . " dates\n";
my $events = []; my $events = [];
for my $date (@$dates) { for my $date (@$dates) {
#print STDERR $date->{start}."\n"; #print STDERR $date->{start}."\n";
push @$events, createEvent( $config, $request, $date ); push @$events, createEvent( $config, $request, $date );
} }
$params->{created_events} = $events; $params->{created_events} = $events;
$params->{created_total} = scalar(@$events); $params->{created_total} = scalar(@$events);
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub createEvent { sub createEvent {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $date = shift; my $date = shift;
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
my $user = $request->{user}; my $user = $request->{user};
$date->{show_new_event_from_schedule} = 1; $date->{show_new_event_from_schedule} = 1;
unless ( $permissions->{create_event_from_schedule} == 1 ) { unless ( $permissions->{create_event_from_schedule} == 1 ) {
uac::permissions_denied('create_event_from_schedule'); uac::permissions_denied('create_event_from_schedule');
return; return;
} }
$date->{start_date} = $date->{start}; $date->{start_date} = $date->{start};
my $event = eventOps::getNewEvent( $config, $date, 'show_new_event_from_schedule' ); 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}; $event->{start_date} = $event->{start};
eventOps::createEvent( $request, $event, 'create_event_from_schedule' ); eventOps::createEvent( $request, $event, 'create_event_from_schedule' );
print STDERR Dumper($date); print STDERR Dumper($date);
return $event; return $event;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#actions and roles #actions and roles
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(create_events)$/ ) { if ( $params->{action} =~ /^(create_events)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#numeric values #numeric values
$checked->{exclude} = 0; $checked->{exclude} = 0;
$checked->{duration} = 28; $checked->{duration} = 28;
for my $param ( 'id', 'project_id', 'studio_id', 'duration' ) { for my $param ( 'id', 'project_id', 'studio_id', 'duration' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
$checked->{template} = template::check($config, $params->{template}, 'create_events' ); $checked->{template} = template::check( $config, $params->{template}, 'create_events' );
return $checked; return $checked;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,6 @@ use warnings "all";
use strict; use strict;
use URI::Escape(); use URI::Escape();
use Encode();
use Data::Dumper; use Data::Dumper;
use MIME::Base64(); use MIME::Base64();
use Text::Diff::FormattedHTML(); use Text::Diff::FormattedHTML();
@@ -40,11 +39,11 @@ $params->{studio_id} = $params->{default_studio_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
#print STDERR Dumper($request)."\n"; #print STDERR Dumper($request)."\n";
@@ -57,7 +56,7 @@ $params = $request->{params}->{checked};
#show header #show header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process( $config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
print q{ print q{
@@ -68,168 +67,169 @@ print q{
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
if ( $params->{action} eq 'diff' ) { if ( $params->{action} eq 'diff' ) {
compare( $config, $request ); compare( $config, $request );
return; return;
} }
show_history( $config, $request ); show_history( $config, $request );
#show existing event history #show existing event history
sub show_history { sub show_history {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
for my $attr ('studio_id') { # 'series_id','event_id' for my $attr ('studio_id') { # 'series_id','event_id'
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to show changes" ); uac::print_error( "missing " . $attr . " to show changes" );
return; return;
} }
} }
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::print_error("missing permissions to show changes"); uac::print_error("missing permissions to show changes");
return; return;
} }
my $options = { my $options = {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
limit => 200 limit => 200
}; };
$options->{series_id} = $params->{series_id} if defined $params->{series_id}; $options->{series_id} = $params->{series_id} if defined $params->{series_id};
$options->{event_id} = $params->{event_id} if defined $params->{event_id}; $options->{event_id} = $params->{event_id} if defined $params->{event_id};
my $events = event_history::get( $config, $options ); my $events = event_history::get( $config, $options );
#print STDERR Dumper($events); #print STDERR Dumper($events);
return unless defined $events; return unless defined $events;
$params->{events} = $events; $params->{events} = $events;
for my $permission ( keys %{$permissions} ) { for my $permission ( keys %{$permissions} ) {
$params->{'allow'}->{$permission} = $request->{permissions}->{$permission}; $params->{'allow'}->{$permission} = $request->{permissions}->{$permission};
} }
#print STDERR Dumper($params); #print STDERR Dumper($params);
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'event_history' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'event_history' } );
template::process($config, 'print', template::check($config, 'event_history'), $params ); template::process( $config, 'print', template::check( $config, 'event_history' ), $params );
} }
#show existing event history #show existing event history
sub compare { sub compare {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
for my $attr ( 'project_id', 'studio_id', 'event_id', 'v1', 'v2' ) { for my $attr ( 'project_id', 'studio_id', 'event_id', 'v1', 'v2' ) {
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to show changes" ); uac::print_error( "missing " . $attr . " to show changes" );
return; return;
} }
} }
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::print_error("missing permissions to show changes"); uac::print_error("missing permissions to show changes");
return; return;
} }
print qq{<link href="css/diff.css" rel="stylesheet">} . "\n"; print qq{<link href="css/diff.css" rel="stylesheet">} . "\n";
if ( $params->{v1} > $params->{v2} ) { if ( $params->{v1} > $params->{v2} ) {
my $t = $params->{v1}; my $t = $params->{v1};
$params->{v1} = $params->{v2}; $params->{v1} = $params->{v2};
$params->{v2} = $t; $params->{v2} = $t;
} }
my $options = { my $options = {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
series_id => $params->{series_id}, series_id => $params->{series_id},
event_id => $params->{event_id}, event_id => $params->{event_id},
change_id => $params->{v1}, change_id => $params->{v1},
limit => 2 limit => 2
}; };
my $events = event_history::get( $config, $options ); my $events = event_history::get( $config, $options );
return unless @$events == 1; return unless @$events == 1;
my $v1 = $events->[0]; my $v1 = $events->[0];
$options->{change_id} = $params->{v2}; $options->{change_id} = $params->{v2};
$events = event_history::get( $config, $options ); $events = event_history::get( $config, $options );
return unless @$events == 1; return unless @$events == 1;
my $v2 = $events->[0]; my $v2 = $events->[0];
my $t1 = eventToText($v1); my $t1 = eventToText($v1);
my $t2 = eventToText($v2); my $t2 = eventToText($v2);
if ( $t1 eq $t2 ) { if ( $t1 eq $t2 ) {
print "no changes\n"; print "no changes\n";
return; return;
} }
#print "<style>".diff_css."</style>"; #print "<style>".diff_css."</style>";
#print '<pre>'; #print '<pre>';
#my $diff=diff_strings( { vertical => 1 }, $t1, $t2); #my $diff=diff_strings( { vertical => 1 }, $t1, $t2);
my $diff = diff_strings( {}, $t1, $t2 ); my $diff = diff_strings( {}, $t1, $t2 );
#print Text::Diff::diff(\$t1, \$t2, { STYLE => "Table" }); #print Text::Diff::diff(\$t1, \$t2, { STYLE => "Table" });
#print Text::Diff::diff($v1, $v2, { STYLE => "Table" }); #print Text::Diff::diff($v1, $v2, { STYLE => "Table" });
print $diff; print $diff;
#print '</pre>'; #print '</pre>';
} }
sub eventToText { sub eventToText {
my $event = shift; my $event = shift;
my $s = events::get_keys($event)->{full_title} . "\n"; my $s = events::get_keys($event)->{full_title} . "\n";
$s .= $event->{excerpt} . "\n"; $s .= $event->{excerpt} . "\n";
$s .= $event->{user_excerpt} . "\n"; $s .= $event->{user_excerpt} . "\n";
$s .= $event->{topic} . "\n"; $s .= $event->{topic} . "\n";
$s .= $event->{content} . "\n"; $s .= $event->{content} . "\n";
#print STDERR "DUMP\n$s"; #print STDERR "DUMP\n$s";
return $s; return $s;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $template = ''; my $template = '';
$checked->{template} = template::check($config, $params->{template}, 'event_history' ); $checked->{template} = template::check( $config, $params->{template}, 'event_history' );
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#numeric values #numeric values
for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id', 'user_id', 'series_id', 'event_id', 'v1', 'v2' ) { for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id', 'user_id', 'series_id', 'event_id', 'v1', 'v2' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
#actions and roles #actions and roles
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(show|diff)$/ ) { if ( $params->{action} =~ /^(show|diff)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#print STDERR Dumper($checked); #print STDERR Dumper($checked);
return $checked; return $checked;
} }

View File

@@ -5,7 +5,6 @@ use strict;
use Data::Dumper; use Data::Dumper;
use URI::Escape(); use URI::Escape();
use Encode();
use params(); use params();
use config(); use config();
@@ -29,12 +28,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -43,11 +42,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -56,7 +55,7 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
my $toc = $headerParams->{loc}->{toc}; my $toc = $headerParams->{loc}->{toc};
@@ -129,13 +128,13 @@ $( document ).ready(function() {
print markup::creole_to_html( getHelp( $headerParams->{loc}->{region} ) ); print markup::creole_to_html( getHelp( $headerParams->{loc}->{region} ) );
sub getHelp { sub getHelp {
my $region = shift; my $region = shift;
return getGermanHelp() if $region eq 'de'; return getGermanHelp() if $region eq 'de';
return getEnglishHelp(); return getEnglishHelp();
} }
sub getGermanHelp { sub getGermanHelp {
return q{ return q{
<div id="toc"><h1 class="hide">Inhaltsverzeichnis</h1></div> <div id="toc"><h1 class="hide">Inhaltsverzeichnis</h1></div>
@@ -379,7 +378,7 @@ Folgende Status-Felder gibt es:
} }
sub getEnglishHelp { sub getEnglishHelp {
return q{ return q{
<div id="toc"><h1 class="hide">Table of Contents</h1></div> <div id="toc"><h1 class="hide">Table of Contents</h1></div>
= Menu = Menu
@@ -617,29 +616,30 @@ There are following status fields:
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#numeric values #numeric values
$checked->{exclude} = 0; $checked->{exclude} = 0;
for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id' ) { for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
return $checked; return $checked;
} }

View File

@@ -39,12 +39,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -53,11 +53,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
} }
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -65,7 +65,7 @@ $params = $request->{params}->{checked};
#show header #show header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'ajax_header.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'ajax_header.html' ), $headerParams );
return unless defined uac::check( $config, $params, $user_presets ); return unless defined uac::check( $config, $params, $user_presets );
my $local_media_dir = $config->{locations}->{local_media_dir}; my $local_media_dir = $config->{locations}->{local_media_dir};
@@ -76,400 +76,401 @@ uac::permissions_denied('reading from local media dir') unless -r $local_media_d
uac::permissions_denied('writing to local media dir') unless -w $local_media_dir; uac::permissions_denied('writing to local media dir') unless -w $local_media_dir;
if ( $params->{delete_image} ne '' ) { if ( $params->{delete_image} ne '' ) {
delete_image( $config, $request, $user, $local_media_dir ); delete_image( $config, $request, $user, $local_media_dir );
return; return;
} elsif ( $params->{save_image} ne '' ) { } elsif ( $params->{save_image} ne '' ) {
save_image( $config, $request, $user ); save_image( $config, $request, $user );
return; return;
} }
show_image( $config, $request, $user, $local_media_url ); show_image( $config, $request, $user, $local_media_url );
sub show_image { sub show_image {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $user = shift; my $user = shift;
my $local_media_url = shift; my $local_media_url = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( defined $params->{project_id} ) { unless ( defined $params->{project_id} ) {
uac::print_error("missing project id"); uac::print_error("missing project id");
return undef; return undef;
} }
unless ( defined $params->{studio_id} ) { unless ( defined $params->{studio_id} ) {
uac::print_error("missing studio id"); uac::print_error("missing studio id");
return undef; return undef;
} }
if ( $permissions->{read_image} ne '1' ) { if ( $permissions->{read_image} ne '1' ) {
uac::permissions_denied("read image"); uac::permissions_denied("read image");
return 0; return 0;
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
my $dbh = db::connect( $config, undef ); my $dbh = db::connect( $config, undef );
my $projectId = $params->{project_id}; my $projectId = $params->{project_id};
my $studioId = $params->{studio_id}; my $studioId = $params->{studio_id};
my $selectedFilename = $params->{filename} || ''; my $selectedFilename = $params->{filename} || '';
my $filenames = {}; my $filenames = {};
my $results = []; my $results = [];
# add images from series # add images from series
if ( defined $params->{series_id} ) { if ( defined $params->{series_id} ) {
my $seriesImages = series::get_images( my $seriesImages = series::get_images(
$config, $config,
{ {
project_id => $projectId, project_id => $projectId,
studio_id => $studioId, studio_id => $studioId,
series_id => $params->{series_id} series_id => $params->{series_id}
} }
); );
for my $image (@$seriesImages) { for my $image (@$seriesImages) {
my $filename = $image->{filename}; my $filename = $image->{filename};
next if defined $filenames->{$filename}; next if defined $filenames->{$filename};
$filenames->{$filename} = $image; $filenames->{$filename} = $image;
push @$results, $image; push @$results, $image;
} }
} }
#load images matching by search #load images matching by search
if ( $params->{search} =~ /\S/ ) { if ( $params->{search} =~ /\S/ ) {
#remove filename from search #remove filename from search
#delete $params->{filename}; #delete $params->{filename};
#delete $params->{series_id}; #delete $params->{series_id};
my $searchImages = images::get( my $searchImages = images::get(
$config, $config,
{ {
project_id => $projectId, project_id => $projectId,
studio_id => $studioId, studio_id => $studioId,
search => $params->{search} search => $params->{search}
} }
); );
for my $image (@$searchImages) { for my $image (@$searchImages) {
my $filename = $image->{filename}; my $filename = $image->{filename};
next if defined $filenames->{$filename}; next if defined $filenames->{$filename};
$filenames->{$filename} = $image; $filenames->{$filename} = $image;
push @$results, $image; push @$results, $image;
} }
} }
#load selected image, if not already loaded #load selected image, if not already loaded
my $selectedImage = undef; my $selectedImage = undef;
if ( $selectedFilename ne '' ) { if ( $selectedFilename ne '' ) {
if ( defined $filenames->{$selectedFilename} ) { if ( defined $filenames->{$selectedFilename} ) {
$selectedImage = $filenames->{$selectedFilename}; $selectedImage = $filenames->{$selectedFilename};
} else { } else {
#print STDERR "getByName:".Dumper($params); #print STDERR "getByName:".Dumper($params);
#put selected image to the top #put selected image to the top
my $imagesByNames = images::get( my $imagesByNames = images::get(
$config, $config,
{ {
project_id => $projectId, project_id => $projectId,
studio_id => $studioId, studio_id => $studioId,
filename => $selectedFilename filename => $selectedFilename
} }
); );
#print STDERR Dumper($imagesByNames); #print STDERR Dumper($imagesByNames);
$selectedImage = $imagesByNames->[0] if scalar @$imagesByNames > 0; $selectedImage = $imagesByNames->[0] if scalar @$imagesByNames > 0;
} }
my $finalResults = []; my $finalResults = [];
# put selected image first # put selected image first
$selectedFilename = 'not-found'; $selectedFilename = 'not-found';
if ( defined $selectedImage ) { if ( defined $selectedImage ) {
push @$finalResults, $selectedImage; push @$finalResults, $selectedImage;
$selectedFilename = $selectedImage->{filename}; $selectedFilename = $selectedImage->{filename};
} }
# then other images # then other images
for my $image (@$results) { for my $image (@$results) {
push @$finalResults, $image if $image->{filename} ne $selectedFilename; push @$finalResults, $image if $image->{filename} ne $selectedFilename;
} }
$results = $finalResults; $results = $finalResults;
} }
if ( scalar @$results != 0 ) { if ( scalar @$results != 0 ) {
if ( $params->{template} =~ /edit/ ) { if ( $params->{template} =~ /edit/ ) {
my $result = $results->[0]; my $result = $results->[0];
$result->{missing_licence} = 1 if ( !defined $result->{licence} ) || ( $result->{licence} !~ /\S/ ); $result->{missing_licence} = 1 if ( !defined $result->{licence} ) || ( $result->{licence} !~ /\S/ );
$results = [$result]; $results = [$result];
} }
$results = modify_results( $results, $permissions, $user, $local_media_url ); $results = modify_results( $results, $permissions, $user, $local_media_url );
} }
my $search = $params->{search} || ''; my $search = $params->{search} || '';
$search =~ s/\%+/ /g; $search =~ s/\%+/ /g;
my $template_params = { my $template_params = {
'search' => $search, 'search' => $search,
'images' => $results, 'images' => $results,
'count' => scalar @$results, 'count' => scalar @$results,
'projects' => project::get_with_dates($config), 'projects' => project::get_with_dates($config),
'project_id' => $params->{project_id}, 'project_id' => $params->{project_id},
'studio_id' => $params->{studio_id}, 'studio_id' => $params->{studio_id},
'filename' => $params->{filename} 'filename' => $params->{filename}
}; };
# print STDERR # print STDERR
$template_params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'image' } ); $template_params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'image' } );
$template_params = uac::set_template_permissions( $permissions, $template_params ); $template_params = uac::set_template_permissions( $permissions, $template_params );
$template_params->{no_results} = 1 if scalar @$results == 0; $template_params->{no_results} = 1 if scalar @$results == 0;
#set global values for update and delete, per image values are evaluated later #set global values for update and delete, per image values are evaluated later
$template_params->{allow}->{update_image} = $template_params->{allow}->{update_image} =
$template_params->{allow}->{update_image_own} || $template_params->{allow}->{seriesupdate_image_others}; $template_params->{allow}->{update_image_own} || $template_params->{allow}->{seriesupdate_image_others};
$template_params->{allow}->{delete_image} = $template_params->{allow}->{delete_image} =
$template_params->{allow}->{delete_image_own} || $template_params->{allow}->{delete_image_others}; $template_params->{allow}->{delete_image_own} || $template_params->{allow}->{delete_image_others};
template::process($config, 'print', $params->{template}, $template_params ); template::process( $config, 'print', $params->{template}, $template_params );
} }
sub print_js_error { sub print_js_error {
my $message = shift; my $message = shift;
print qq{<!-- print qq{<!--
ERROR: $message ERROR: $message
--> -->
}; };
print STDERR $message . "\n"; print STDERR $message . "\n";
} }
sub save_image { sub save_image {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $user = shift; my $user = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( check_permission( $config, $user, $permissions, 'update_image', $params->{save_image} ) eq '1' ) { unless ( check_permission( $config, $user, $permissions, 'update_image', $params->{save_image} ) eq '1' ) {
print_js_error("missing permission to update image"); print_js_error("missing permission to update image");
return 0; return 0;
} }
if ( ( $params->{update_name} eq '' ) && ( $params->{update_description} eq '' ) ) { if ( ( $params->{update_name} eq '' ) && ( $params->{update_description} eq '' ) ) {
print_js_error("empty name or empty description!"); print_js_error("empty name or empty description!");
return 0; return 0;
} }
my $image = {}; my $image = {};
$image->{filename} = $params->{save_image}; $image->{filename} = $params->{save_image};
$image->{name} = $params->{update_name} if $params->{update_name} ne ''; $image->{name} = $params->{update_name} if $params->{update_name} ne '';
$image->{description} = $params->{update_description} if $params->{update_description} ne ''; $image->{description} = $params->{update_description} if $params->{update_description} ne '';
$image->{project_id} = $params->{project_id}; $image->{project_id} = $params->{project_id};
$image->{studio_id} = $params->{studio_id}; $image->{studio_id} = $params->{studio_id};
$image->{licence} = $params->{licence}; $image->{licence} = $params->{licence};
$image->{public} = $params->{public}; $image->{public} = $params->{public};
$image->{modified_by} = $user; $image->{modified_by} = $user;
$image->{name} = 'new' if $image->{name} eq ''; $image->{name} = 'new' if $image->{name} eq '';
images::checkLicence( $config, $image ); images::checkLicence( $config, $image );
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
my $dbh = db::connect($config); my $dbh = db::connect($config);
print STDERR "going to save\n"; print STDERR "going to save\n";
#print STDERR Dumper($image); #print STDERR Dumper($image);
my $entries = images::get( my $entries = images::get(
$config, $config,
{ {
filename => $image->{filename}, filename => $image->{filename},
project_id => $image->{project_id}, project_id => $image->{project_id},
studio_id => $image->{studio_id} studio_id => $image->{studio_id}
} }
); );
if ( scalar @$entries > 1 ) { if ( scalar @$entries > 1 ) {
print_js_error('more than one matching result found'); print_js_error('more than one matching result found');
return 0; return 0;
} }
if ( scalar @$entries == 0 ) { if ( scalar @$entries == 0 ) {
print_js_error('image not found in database (for this studio)'); print_js_error('image not found in database (for this studio)');
return 0; return 0;
} }
my $entry = $entries->[0]; my $entry = $entries->[0];
if ( defined $entry ) { if ( defined $entry ) {
images::update( $dbh, $image ); images::update( $dbh, $image );
images::publish( $config, $image->{filename} ) if ( ( $image->{public} == 1 ) && ( $entry->{public} == 0 ) ); 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::depublish( $config, $image->{filename} ) if ( ( $image->{public} == 0 ) && ( $entry->{public} == 1 ) );
} else { } else {
$image->{created_by} = $user; $image->{created_by} = $user;
images::insert( $dbh, $image ); images::insert( $dbh, $image );
} }
} }
sub delete_image { sub delete_image {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $user = shift; my $user = shift;
my $local_media_dir = shift; my $local_media_dir = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( check_permission( $config, $user, $permissions, 'delete_image', $params->{delete_image} ) eq '1' ) { unless ( check_permission( $config, $user, $permissions, 'delete_image', $params->{delete_image} ) eq '1' ) {
uac::permissions_denied('delete image'); uac::permissions_denied('delete image');
return 0; return 0;
} }
#print $cgi->header(); #print $cgi->header();
#print "Content-type:text/html; charset=UTF-8;\n\n"; #print "Content-type:text/html; charset=UTF-8;\n\n";
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
my $dbh = db::connect($config); my $dbh = db::connect($config);
my $image = { my $image = {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
filename => $params->{delete_image}, filename => $params->{delete_image},
}; };
my $result = images::delete( $dbh, $image ); my $result = images::delete( $dbh, $image );
#print STDERR "delete result=" . Dumper($result); #print STDERR "delete result=" . Dumper($result);
return; return;
my $action_result = ''; my $action_result = '';
my $errors = ''; my $errors = '';
$result = images::delete_files( $config, $local_media_dir, $params->{delete_image}, $action_result, $errors ); $result = images::delete_files( $config, $local_media_dir, $params->{delete_image}, $action_result, $errors );
#use Data::Dumper;print STDERR "delete\n".Dumper($params); #use Data::Dumper;print STDERR "delete\n".Dumper($params);
print "deleted<br />$action_result<br />$errors\n"; print "deleted<br />$action_result<br />$errors\n";
} }
sub check_permission { sub check_permission {
my $config = shift; my $config = shift;
my $user = shift; my $user = shift;
my $permissions = shift; my $permissions = shift;
my $permission = shift; my $permission = shift;
my $filename = shift; my $filename = shift;
return 0 unless defined $user; return 0 unless defined $user;
return 0 if ( $user eq '' ); return 0 if ( $user eq '' );
if ( $permissions->{ $permission . '_others' } eq '1' ) { if ( $permissions->{ $permission . '_others' } eq '1' ) {
print STDERR "$user has update_image_others\n"; print STDERR "$user has update_image_others\n";
return 1; return 1;
} elsif ( $permissions->{ $permission . '_own' } eq '1' ) { } elsif ( $permissions->{ $permission . '_own' } eq '1' ) {
print STDERR "$user has update_image_own\n"; print STDERR "$user has update_image_own\n";
#check if image was created by user #check if image was created by user
my $results = images::get( my $results = images::get(
$config, $config,
{ {
filename => $filename, filename => $filename,
created_by => $user created_by => $user
} }
); );
return 1 if ( @$results == 1 ); return 1 if ( @$results == 1 );
return 0; return 0;
} }
return 0; return 0;
} }
sub modify_results { sub modify_results {
my $results = shift; my $results = shift;
my $permissions = shift; my $permissions = shift;
my $user = shift; my $user = shift;
my $local_media_url = shift; my $local_media_url = shift;
for my $result (@$results) { for my $result (@$results) {
unless ( defined $result->{filename} ) { unless ( defined $result->{filename} ) {
$result = undef; $result = undef;
next; next;
} }
$result->{image_url} = $local_media_url . '/images/' . $result->{filename}; $result->{image_url} = $local_media_url . '/images/' . $result->{filename};
$result->{thumb_url} = $local_media_url . '/thumbs/' . $result->{filename}; $result->{thumb_url} = $local_media_url . '/thumbs/' . $result->{filename};
$result->{icon_url} = $local_media_url . '/icons/' . $result->{filename}; $result->{icon_url} = $local_media_url . '/icons/' . $result->{filename};
#reduce #reduce
for my $permission ( 'update_image', 'delete_image' ) { for my $permission ( 'update_image', 'delete_image' ) {
if ( ( defined $permissions->{ $permission . '_others' } ) && ( $permissions->{ $permission . '_others' } eq '1' ) ) { if ( ( defined $permissions->{ $permission . '_others' } ) && ( $permissions->{ $permission . '_others' } eq '1' ) ) {
$result->{$permission} = 1; $result->{$permission} = 1;
} elsif ( ( defined $permissions->{ $permission . '_own' } ) && ( $permissions->{ $permission . '_own' } eq '1' ) ) { } elsif ( ( defined $permissions->{ $permission . '_own' } ) && ( $permissions->{ $permission . '_own' } eq '1' ) ) {
next if ( $user eq '' ); next if ( $user eq '' );
$result->{$permission} = 1 if ( $user eq $result->{created_by} ); $result->{$permission} = 1 if ( $user eq $result->{created_by} );
} }
} }
} }
return $results; return $results;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = { template => template::check($config, $params->{template}, 'image.html' ) }; my $checked = { template => template::check( $config, $params->{template}, 'image.html' ) };
#numeric values #numeric values
$checked->{limit} = 100; $checked->{limit} = 100;
for my $param ( 'project_id', 'studio_id', 'series_id', 'default_studio_id', 'limit' ) { for my $param ( 'project_id', 'studio_id', 'series_id', 'default_studio_id', 'limit' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
$checked->{limit} = 100 unless defined $checked->{limit}; $checked->{limit} = 100 unless defined $checked->{limit};
$checked->{limit} = 100 if ( $checked->{limit} > 100 ); $checked->{limit} = 100 if ( $checked->{limit} > 100 );
#string #string
$checked->{search} = ''; $checked->{search} = '';
if ( ( defined $params->{search} ) && ( $params->{search} =~ /^\s*(.+?)\s*$/ ) ) { if ( ( defined $params->{search} ) && ( $params->{search} =~ /^\s*(.+?)\s*$/ ) ) {
$checked->{search} = $1; $checked->{search} = $1;
} }
for my $attr ( 'update_name', 'update_description', 'licence' ) { for my $attr ( 'update_name', 'update_description', 'licence' ) {
$checked->{$attr} = ''; $checked->{$attr} = '';
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /^\s*(.+?)\s*$/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /^\s*(.+?)\s*$/ ) ) {
$checked->{$attr} = $params->{$attr}; $checked->{$attr} = $params->{$attr};
} }
} }
#Words #Words
$checked->{delete_image} = ''; $checked->{delete_image} = '';
$checked->{save_image} = ''; $checked->{save_image} = '';
for my $attr ( 'save_image', 'delete_image', 'show', 'filename' ) { for my $attr ( 'save_image', 'delete_image', 'show', 'filename' ) {
$checked->{$attr} = ''; $checked->{$attr} = '';
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\S+)/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\S+)/ ) ) {
$checked->{$attr} = $params->{$attr}; $checked->{$attr} = $params->{$attr};
} }
} }
#checkboxes #checkboxes
for my $param ('public') { for my $param ('public') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /([01])/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /([01])/ ) ) {
$checked->{$param} = $1; $checked->{$param} = $1;
} }
} }
#map show to filename, but overwrite if filename given #map show to filename, but overwrite if filename given
if ( $checked->{show} ne '' ) { if ( $checked->{show} ne '' ) {
$checked->{filename} = $checked->{show}; $checked->{filename} = $checked->{show};
delete $checked->{show}; delete $checked->{show};
$checked->{limit} = 1; $checked->{limit} = 1;
} elsif ( $checked->{filename} ne '' ) { } elsif ( $checked->{filename} ne '' ) {
delete $checked->{show}; delete $checked->{show};
} }
$checked->{from} = time::check_date( $params->{from} ); $checked->{from} = time::check_date( $params->{from} );
$checked->{till} = time::check_date( $params->{till} ); $checked->{till} = time::check_date( $params->{till} );
#print STDERR 'checked:'.Dumper ($checked); #print STDERR 'checked:'.Dumper ($checked);
return $checked; return $checked;
} }

View File

@@ -13,7 +13,7 @@ require 'CGI.pm';
use Date::Calc(); use Date::Calc();
use Time::Local(); use Time::Local();
use Image::Magick(); use Image::Magick();
use Image::Magick::Square(); use Image::Magick::Square;
use config(); use config();
use auth(); use auth();
@@ -43,76 +43,60 @@ my $error = '';
#get image from multiform before anything else #get image from multiform before anything else
if ( defined $r ) { if ( defined $r ) {
#Apache2::Request #Apache2::Request
# print "Content-type:text/html; charset=UTF-8; \n\n<br><br><br>Apache2::Request<br>\n"; my $apr = Apache2::Request->new( $r, POST_MAX => $upload_limit, TEMP_DIR => $tmp_dir );
my $apr = Apache2::Request->new( $r, POST_MAX => $upload_limit, TEMP_DIR => $tmp_dir );
#copy params to hash #copy params to hash
my $body = $apr->body(); my $body = $apr->body();
if ( defined $body ) { if ( defined $body ) {
for my $key ( keys %$body ) { for my $key ( keys %$body ) {
$params->{ scalar($key) } = scalar( $apr->param($key) );
}
}
# print "$key=".$apr->param($key)."<br>\n"; my $status = $apr->parse;
$params->{ scalar($key) } = scalar( $apr->param($key) ); # unless ($key eq'image'); $status = '' if ( $status =~ /missing input data/i );
} if ( $status =~ /limit/i ) {
} $error = $status;
} else {
$upload = $apr->upload('image') if ( defined $params->{image} );
}
# print Dumper($params); $cgi = new CGI();
# print Dumper($apr);
my $status = $apr->parse;
# print "Status:$status<br>";
$status = '' if ( $status =~ /missing input data/i );
if ( $status =~ /limit/i ) {
$error = $status;
} else {
$upload = $apr->upload('image') if ( defined $params->{image} );
}
#dont get params parsed
# $CGI::POST_MAX = $upload_limit;
# $CGI::TMPDIRECTORY=$tmp_dir;
$cgi = new CGI();
# my %params=$cgi->Vars();
# $params=\%params;
# $error=$cgi->cgi_error()||$error;
} else { } else {
#CGI fallback #CGI fallback
# print "Content-type:text/html; charset=UTF-8; \n\n<br><br><br>CGI<br>\n"; $CGI::POST_MAX = $upload_limit;
$CGI::POST_MAX = $upload_limit; $CGI::TMPDIRECTORY = $tmp_dir;
$CGI::TMPDIRECTORY = $tmp_dir; $cgi = new CGI();
$cgi = new CGI(); $error = $cgi->cgi_error() || $error;
$error = $cgi->cgi_error() || $error; my %params = $cgi->Vars();
my %params = $cgi->Vars(); $params = \%params;
$params = \%params;
} }
print "Content-type:text/html; charset=UTF-8;\n\n"; print "Content-type:text/html; charset=UTF-8;\n\n";
my ( $user, $expires ) = auth::get_user( $cgi, $config ); my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' );
$params->{project_id} = $user_presets->{project_id} $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -121,37 +105,40 @@ return unless defined uac::check( $config, $params, $user_presets );
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
$params->{action} = '' unless ( defined $params->{action} ); $params->{action} = '' unless defined $params->{action};
if ( $permissions->{create_image} ne '1' ) { if ( $permissions->{create_image} ne '1' ) {
uac::permissions_denied("create image"); uac::permissions_denied("create image");
return 0; return 0;
} }
my $file_info = undef; my $file_info = undef;
if ( $error ne '' ) { if ( $error ne '' ) {
if ( $error =~ /limit/ ) { if ( $error =~ /limit/ ) {
$params->{error} .= "Image size is limited to " . int( $upload_limit / 1000000 ) . " MB!" . "Please make it smaller and try again!"; $params->{error} .= "Image size is limited to " . int( $upload_limit / 1000000 ) . " MB!" . "Please make it smaller and try again!";
} else { } else {
$params->{error} .= "Error:'$error'"; $params->{error} .= "Error:'$error'";
} }
} elsif ( $params->{action} eq 'upload' ) { } elsif ( $params->{action} eq 'upload' ) {
$file_info = upload_file( $config, $cgi, $upload, $user ); $file_info = upload_file( $config, $cgi, $upload, $user );
$params->{error} .= $file_info->{error}; $params->{error} .= $file_info->{error};
$params = update_database( $config, $params, $file_info, $user ) if ( $params->{error} eq '' ); $params = update_database( $config, $params, $file_info, $user ) if $params->{error} eq '';
} }
print STDERR $params->{error} . "\n" if defined $params->{error};
print STDERR "upload error: $params->{error}\n" if $params->{error} ne '';
my $out = ''; my $out = '';
template::process( $config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
print $cgi->cgi_error() if defined $cgi; print $cgi->cgi_error() if (defined $cgi) && (defined $cgi->cgi_error());
return if $params->{action} eq '';
#return; $params->{action_result} ||= '';
$params->{filename} ||= '';
return if ( $params->{action} eq '' ); $params->{image_id} ||= '';
$params->{name} ||= '';
if ( $params->{error} eq '' ) { if ( $params->{error} eq '' ) {
print qq{ print qq{
<div id="output">success</div> <div id="output">success</div>
<div id="message"> <div id="message">
$params->{action_result} $params->{action_result}
@@ -165,256 +152,244 @@ if ( $params->{error} eq '' ) {
}; };
} else { } else {
print qq{ print qq{
<div id="output">failed</div> <div id="output">failed</div>
<div id="message">$params->{error}</div> <div id="message">$params->{error}</div>
}; };
} }
sub upload_file { sub upload_file {
my $config = shift; my $config = shift;
my $cgi = shift; my $cgi = shift;
my $upload = shift; my $upload = shift;
my $user = shift; my $user = shift;
my $result = get_filename( $cgi, $upload ); my $result = get_filename( $cgi, $upload );
return $result if ( $result->{error} ne '' ); return $result if ( $result->{error} ne '' );
my $file = $result->{fh}; my $file = $result->{fh};
my $filename = $result->{filename}; my $filename = $result->{filename};
$result = check_filename($filename); $result = check_filename($filename);
print STDERR $result . "\n"; #print STDERR $result . "\n";
return $result if ( $result->{error} ne '' ); return $result if ( $result->{error} ne '' );
my $extension = $result->{extension} || ''; my $extension = $result->{extension} || '';
#read file from handle #read file from handle
my $data; my $data;
my $content = ''; my $content = '';
print STDERR $file . "\n"; #print STDERR $file . "\n";
#unless (-e $file){} binmode $file;
binmode $file; while ( read $file, $data, 1024 ) {
while ( read $file, $data, 1024 ) { $content .= $data;
$content .= $data; }
}
#set filename to MD5 from content #set filename to MD5 from content
my $md5_filename = Digest::MD5::md5_base64($content); my $md5_filename = Digest::MD5::md5_base64($content);
$md5_filename =~ s/[\/\+]/_/gi; $md5_filename =~ s/[\/\+]/_/gi;
return process_image( $config, $filename, $extension, $md5_filename, $content ); return process_image( $config, $filename, $extension, $md5_filename, $content );
} }
sub update_database { sub update_database {
my $config = shift; my $config = shift;
my $params = shift; my $params = shift;
my $file_info = shift; my $file_info = shift;
my $user = shift; my $user = shift;
$params->{upload_path} = $file_info->{upload_path}; $params->{upload_path} = $file_info->{upload_path};
$params->{upload_filename} = $file_info->{upload_filename}; $params->{upload_filename} = $file_info->{upload_filename};
$params->{filename} = $file_info->{filename}; $params->{filename} = $file_info->{filename};
$params->{thumb_path} = $file_info->{thumb_path}; $params->{thumb_path} = $file_info->{thumb_path};
$params->{image_path} = $file_info->{image_path}; $params->{image_path} = $file_info->{image_path};
$params->{icon_path} = $file_info->{icon_path}; $params->{icon_path} = $file_info->{icon_path};
$params->{local_media_url} = $config->{locations}->{local_media_url}; $params->{local_media_url} = $config->{locations}->{local_media_url};
my $name = $params->{name} || ''; my $name = $params->{name} || '';
$name = 'neu' unless $params =~ /\S/; $name = 'neu' unless $params =~ /\S/;
my $image = { my $image = {
filename => $params->{filename}, filename => $params->{filename},
name => $name, name => $name,
description => $params->{description}, description => $params->{description},
modified_by => $user, modified_by => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
licence => $params->{licence} licence => $params->{licence}
}; };
#connect #connect
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
my $dbh = db::connect($config); my $dbh = db::connect($config);
my $entries = images::get( $config, { filename => $image->{filename} } ); my $entries = images::get( $config, { filename => $image->{filename} } );
if ( ( defined $entries ) && ( scalar(@$entries) > 0 ) ) { if ( ( defined $entries ) && ( scalar(@$entries) > 0 ) ) {
images::update( $dbh, $image ); images::update( $dbh, $image );
my $entry = $entries->[0]; my $entry = $entries->[0];
$params->{image_id} = $entry->{id}; $params->{image_id} = $entry->{id};
} else { } else {
$image->{created_by} = $user; $image->{created_by} = $user;
$params->{image_id} = images::insert( $dbh, $image ); $params->{image_id} = images::insert( $dbh, $image );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
$params->{action_result} = 'done!'; $params->{action_result} = 'done!';
return $params; return $params;
} }
#get filename and filehandle from upload #get filename and filehandle from upload
sub get_filename { sub get_filename {
my $cgi = shift; my $cgi = shift;
my $upload = shift; my $upload = shift;
if ( defined $upload ) { # try apache2 module
if ( defined $upload ) {
my $filename = $upload->filename();
return {
filename => $filename,
fh => $upload->fh(),
error => ''
};
}
# try apache2 module # fallback to CGI module
my $filename = $upload->filename(); my $file = $cgi->param("image");
return { if ( $file =~ /\|/ ) {
filename => $filename, return { error => "is no file" };
fh => $upload->fh(), }
error => ''
};
} my $file_info = $cgi->uploadInfo($file);
if ( defined $file_info ) {
my $filename = $file_info->{'Content-Disposition'} || '';
if ( $filename =~ /filename=\"(.*?)\"/ ) {
$filename = $1;
return {
filename => $filename,
fh => $file,
error => ''
};
# fallback to CGI module }
my $file = $cgi->param("image"); }
if ( $file =~ /\|/ ) {
return { error => "is no file" };
}
my $file_info = $cgi->uploadInfo($file); #error
if ( defined $file_info ) { return { error => 'Could not detect file name!' };
my $filename = $file_info->{'Content-Disposition'} || '';
if ( $filename =~ /filename=\"(.*?)\"/ ) {
$filename = $1;
return {
filename => $filename,
fh => $file,
error => ''
};
}
}
#error
return { error => 'Could not detect file name!' };
} }
sub check_filename { sub check_filename {
my $filename = shift; my $filename = shift;
my @valid_extensions = ( 'png', 'jpeg', 'jpg', 'gif', 'pdf', 'txt', 'bmp', 'ps', 'eps', 'wmf' ); my @valid_extensions = ( 'png', 'jpeg', 'jpg', 'gif', 'pdf', 'txt', 'bmp', 'ps', 'eps', 'wmf' );
if ( $filename =~ /\.([a-zA-Z]{3,5})$/ ) { if ( $filename =~ /\.([a-zA-Z]{3,5})$/ ) {
my $extension = lc $1; my $extension = lc $1;
unless ( grep( /$extension/, @valid_extensions ) ) { unless ( grep( /$extension/, @valid_extensions ) ) {
return { error => 'Following file formats are supported: ' . join( ",", @valid_extensions ) . '!' }; return { error => 'Following file formats are supported: ' . join( ",", @valid_extensions ) . '!' };
} }
return { return {
extension => $extension, extension => $extension,
error => '' error => ''
}; };
} else { } else {
return { error => 'Not matching file extension found! Supported are: ' . join( ",", @valid_extensions ) . '!' }; return { error => 'Not matching file extension found! Supported are: ' . join( ",", @valid_extensions ) . '!' };
} }
} }
sub process_image { sub process_image {
my $config = shift; my $config = shift;
my $filename = shift; my $filename = shift;
my $extension = shift; my $extension = shift;
my $md5_filename = shift; my $md5_filename = shift;
my $content = shift; my $content = shift;
my $upload_path = images::getInternalPath( $config, { type => 'upload', filename => $md5_filename . '.' . $extension } ); 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 $thumb_path = images::getInternalPath( $config, { type => 'thumbs', filename => $md5_filename . '.jpg' } );
my $icon_path = images::getInternalPath( $config, { type => 'icons', 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 $image_path = images::getInternalPath( $config, { type => 'images', filename => $md5_filename . '.jpg' } );
#copy file to upload space #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}; return $result if defined $result->{error};
#write image #write image
my $image = new Image::Magick; my $image = new Image::Magick;
$image->Read($upload_path); $image->Read($upload_path);
my $x = $image->Get('width') || 0; my $x = $image->Get('width') || 0;
my $y = $image->Get('height') || 0; my $y = $image->Get('height') || 0;
if ( ( $x == 0 ) || ( $y == 0 ) ) { if ( ( $x == 0 ) || ( $y == 0 ) ) {
return { error => 'Could not read image!' }; return { error => 'Could not read image!' };
log::error( $config, 'Cannot read image $filename!' ); log::error( $config, 'Cannot read image $filename!' );
} }
#set max size image #set max size image
if ( $x > 0 && $y > 0 ) { if ( $x > 0 && $y > 0 ) {
if ( $x > $y ) { if ( $x > $y ) {
$image->Resize( width => '600', height => int( 600 * $y / $x ) ); $image->Resize( width => '600', height => int( 600 * $y / $x ) );
} else { } else {
$image->Resize( width => int( 600 * $x / $y ), height => '600' ); $image->Resize( width => int( 600 * $x / $y ), height => '600' );
} }
} }
#$image->Normalize(); #$image->Normalize();
$image->Write( 'jpg:' . $image_path ); $image->Write( 'jpg:' . $image_path );
#write thumb #write thumb
my $thumb = $image; my $thumb = $image;
$thumb->Trim2Square; $thumb->Trim2Square;
$thumb->Resize( width => 150, height => 150 ); $thumb->Resize( width => 150, height => 150 );
$thumb->Write( 'jpg:' . $thumb_path ); $thumb->Write( 'jpg:' . $thumb_path );
my $icon = $image; my $icon = $image;
$icon->Trim2Square; $icon->Trim2Square;
$icon->Resize( width => 25, height => 25 ); $icon->Resize( width => 25, height => 25 );
$icon->Write( 'jpg:' . $icon_path ); $icon->Write( 'jpg:' . $icon_path );
unless ( -e $thumb_path ) { return { error => 'could not create thumb file!' } unless -e $thumb_path;
return { error => 'could not create thumb file!' }; return { error => 'could not create icon file!' } unless -e $icon_path;
} return { error => 'could not create image file!' } unless -e $image_path;
unless ( -e $icon_path ) {
return { error => 'could not create icon file!' };
}
unless ( -e $image_path ) {
return { error => 'could not create image file!' };
}
return { return {
upload_filename => $filename, upload_filename => $filename,
filename => $md5_filename . '.jpg',
filename => $md5_filename . '.jpg', thumb_path => $thumb_path,
thumb_path => $thumb_path, icon_path => $icon_path,
icon_path => $icon_path, image_path => $image_path,
image_path => $image_path, error => ''
};
error => ''
};
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
$checked->{template} = template::check($config, $params->{template}, 'imageUpload' ); $checked->{template} = template::check( $config, $params->{template}, 'imageUpload' );
#numeric values #numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id' ) { for my $param ( 'project_id', 'studio_id', 'default_studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { $checked->{$param} = $params->{$param} if ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ );
$checked->{$param} = $params->{$param}; }
}
}
if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id};
} else {
$checked->{studio_id} = -1;
}
#string if ( defined $checked->{studio_id} ) {
for my $param ( 'debug', 'name', 'description', 'licence' ) { $checked->{default_studio_id} = $checked->{studio_id};
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\s*(.+?)\s*$/ ) ) { } else {
$checked->{$param} = $1; $checked->{studio_id} = -1;
} }
}
#Words #string
for my $attr ('action') { for my $param ( 'debug', 'name', 'description', 'licence' ) {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\S+)/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\s*(.+?)\s*$/ ) ) {
$checked->{$attr} = $params->{$attr}; $checked->{$param} = $1;
} }
} }
return $checked;
#Words
for my $attr ('action') {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\S+)/ ) ) {
$checked->{$attr} = $params->{$attr};
}
}
return $checked;
} }

View File

@@ -24,11 +24,11 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( $user eq '' ); return if ( $user eq '' );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
} }
}; };
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
my $loc = localization::get( $config, { user => $user, file => $params->{usecase} } ); my $loc = localization::get( $config, { user => $user, file => $params->{usecase} } );
@@ -38,25 +38,23 @@ my $json = JSON::to_json( $loc, { pretty => 1 } );
my @json_lines = (); my @json_lines = ();
for my $line ( split /\n/, $json ) { for my $line ( split /\n/, $json ) {
push @json_lines, "'" . $line . "'\n"; push @json_lines, "'" . $line . "'\n";
} }
$json = $header . $json; $json = $header . $json;
# .'var loc_text='.join('+',@json_lines).";\n"
# .'var loc = JQuery.parseJSON(loc_text)';
print $json; print $json;
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = { usecase => '' }; my $checked = { usecase => '' };
if ( defined $params->{usecase} ) { if ( defined $params->{usecase} ) {
if ( $params->{usecase} =~ /^([a-z\-\_\,]+)$/ ) { if ( $params->{usecase} =~ /^([a-z\-\_\,]+)$/ ) {
$checked->{usecase} = $1; $checked->{usecase} = $1;
} }
} }
return $checked; return $checked;
} }

View File

@@ -3,7 +3,8 @@
use warnings "all"; use warnings "all";
use strict; use strict;
use URI::Escape(); use URI::Escape();
use Encode();
#use Encode();
use Data::Dumper; use Data::Dumper;
use MIME::Lite(); use MIME::Lite();
@@ -31,12 +32,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -45,11 +46,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
#print STDERR Dumper($request)."\n"; #print STDERR Dumper($request)."\n";
@@ -61,221 +62,222 @@ $params = $request->{params}->{checked};
#show header #show header
unless ( params::isJson() || ( $params->{template} =~ /\.txt/ ) ) { unless ( params::isJson() || ( $params->{template} =~ /\.txt/ ) ) {
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process( $config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
} }
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
if ( $params->{action} eq 'send' ) { if ( $params->{action} eq 'send' ) {
sendMail( $config, $request ); sendMail( $config, $request );
return; return;
} }
show_events( $config, $request ); show_events( $config, $request );
#show existing event history #show existing event history
sub show_events { sub show_events {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
for my $attr ( 'project_id', 'studio_id', 'duration' ) { # 'series_id','event_id' for my $attr ( 'project_id', 'studio_id', 'duration' ) { # 'series_id','event_id'
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to show changes" ); uac::print_error( "missing " . $attr . " to show changes" );
return; return;
} }
} }
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::print_error("missing permissions to show changes"); uac::print_error("missing permissions to show changes");
return; return;
} }
# get events # get events
my $duration = $params->{duration}; my $duration = $params->{duration};
my $options = { my $options = {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
from_date => time::time_to_date(), from_date => time::time_to_date(),
till_date => time::time_to_date( time() + $duration * 24 * 60 * 60 ), till_date => time::time_to_date( time() + $duration * 24 * 60 * 60 ),
draft => 0, draft => 0,
published => 1 published => 1
}; };
my $events = series::get_events( $config, $options ); my $events = series::get_events( $config, $options );
# get series_users # get series_users
for my $event (@$events) { for my $event (@$events) {
my $mail = getMail( $config, $request, $event ); my $mail = getMail( $config, $request, $event );
$event->{mail} = $mail; $event->{mail} = $mail;
} }
return unless defined $events; return unless defined $events;
my @events = sort { $a->{start} cmp $b->{start} } @$events; my @events = sort { $a->{start} cmp $b->{start} } @$events;
$params->{events} = \@events; $params->{events} = \@events;
for my $permission ( keys %{$permissions} ) { for my $permission ( keys %{$permissions} ) {
$params->{'allow'}->{$permission} = $request->{permissions}->{$permission}; $params->{'allow'}->{$permission} = $request->{permissions}->{$permission};
} }
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'notify_events' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'notify_events' } );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub sendMail { sub sendMail {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
for my $attr ( 'project_id', 'studio_id', 'series_id', 'event_id' ) { for my $attr ( 'project_id', 'studio_id', 'series_id', 'event_id' ) {
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to send notification" ); uac::print_error( "missing " . $attr . " to send notification" );
return; return;
} }
} }
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::print_error("missing permissions to send notification"); uac::print_error("missing permissions to send notification");
return; return;
} }
my $options = { my $options = {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
series_id => $params->{series_id}, series_id => $params->{series_id},
event_id => $params->{event_id}, event_id => $params->{event_id},
draft => 0, draft => 0,
published => 0, published => 0,
}; };
my $events = series::get_events( $config, $options ); my $events = series::get_events( $config, $options );
unless ( scalar(@$events) == 1 ) { unless ( scalar(@$events) == 1 ) {
uac::print_error("did not found exactly one event"); uac::print_error("did not found exactly one event");
return; return;
} }
my $mail = getMail( $config, $request, $events->[0] ); my $mail = getMail( $config, $request, $events->[0] );
$mail->{To} = $params->{to} if defined $params->{to}; $mail->{To} = $params->{to} if defined $params->{to};
$mail->{Cc} = $params->{cc} if defined $params->{cc}; $mail->{Cc} = $params->{cc} if defined $params->{cc};
$mail->{Subject} = $params->{subject} if defined $params->{subject}; $mail->{Subject} = $params->{subject} if defined $params->{subject};
$mail->{Data} = $params->{content} if defined $params->{content}; $mail->{Data} = $params->{content} if defined $params->{content};
my $msg = MIME::Lite->new( my $msg = MIME::Lite->new(
'From' => $mail->{'From'}, 'From' => $mail->{'From'},
'To' => $mail->{'To'}, 'To' => $mail->{'To'},
'Cc' => $mail->{'Cc'}, 'Cc' => $mail->{'Cc'},
'Reply-To' => $mail->{'Reply-To'}, 'Reply-To' => $mail->{'Reply-To'},
'Subject' => $mail->{'Subject'}, 'Subject' => $mail->{'Subject'},
'Data' => $mail->{'Data'}, 'Data' => $mail->{'Data'},
); );
print '<pre>'; print '<pre>';
$msg->print( \*STDOUT ); $msg->print( \*STDOUT );
print '</pre>'; print '</pre>';
$msg->send; $msg->send;
} }
sub getMail { sub getMail {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $event = shift; my $event = shift;
my $users = series::get_users( my $users = series::get_users(
$config, $config,
{ {
project_id => $event->{project_id}, project_id => $event->{project_id},
studio_id => $event->{studio_id}, studio_id => $event->{studio_id},
series_id => $event->{series_id} series_id => $event->{series_id}
} }
); );
my $userNames = []; my $userNames = [];
my $userMails = []; my $userMails = [];
for my $user (@$users) { for my $user (@$users) {
push @$userNames, ( split( /\s+/, $user->{full_name} ) )[0]; push @$userNames, ( split( /\s+/, $user->{full_name} ) )[0];
push @$userMails, $user->{email}; push @$userMails, $user->{email};
} }
if ( scalar(@$userMails) == 0 ) { if ( scalar(@$userMails) == 0 ) {
$event->{noRecipient} = 1; $event->{noRecipient} = 1;
return; return;
} }
my $mail = { my $mail = {
'From' => 'programm@radiopiloten.de', 'From' => 'programm@radiopiloten.de',
'To' => join( ', ', @$userMails ), 'To' => join( ', ', @$userMails ),
'Cc' => 'programm@radiopiloten.de', 'Cc' => 'programm@radiopiloten.de',
'Reply-To' => 'programm@radiopiloten.de', 'Reply-To' => 'programm@radiopiloten.de',
'Subject' => "$event->{start} - $event->{full_title}", 'Subject' => "$event->{start} - $event->{full_title}",
'Data' => "Hallo " . join( ' und ', @$userNames ) . ",\n\n" 'Data' => "Hallo " . join( ' und ', @$userNames ) . ",\n\n"
}; };
$mail->{Data} .= "nur zur Erinnerung...\n\n"; $mail->{Data} .= "nur zur Erinnerung...\n\n";
$mail->{Data} .= "am $event->{weekday_name} ist die naechste '$event->{series_name}'-Sendung.\n\n"; $mail->{Data} .= "am $event->{weekday_name} ist die naechste '$event->{series_name}'-Sendung.\n\n";
$mail->{Data} .= "$event->{source_base_url}$event->{cache_base_url}/$config->{controllers}->{event}/$event->{event_id}.html\n\n"; $mail->{Data} .= "$event->{source_base_url}$event->{cache_base_url}/$config->{controllers}->{event}/$event->{event_id}.html\n\n";
$mail->{Data} .= "Gruss, $request->{user}\n"; $mail->{Data} .= "Gruss, $request->{user}\n";
return $mail; return $mail;
} }
sub eventToText { sub eventToText {
my $event = shift; my $event = shift;
my $s = events::get_keys($event)->{full_title} . "\n"; my $s = events::get_keys($event)->{full_title} . "\n";
$s .= $event->{excerpt} . "\n"; $s .= $event->{excerpt} . "\n";
$s .= $event->{user_excerpt} . "\n"; $s .= $event->{user_excerpt} . "\n";
$s .= $event->{topic} . "\n"; $s .= $event->{topic} . "\n";
$s .= $event->{content} . "\n"; $s .= $event->{content} . "\n";
#print STDERR "DUMP\n$s"; #print STDERR "DUMP\n$s";
return $s; return $s;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $template = ''; my $template = '';
$checked->{template} = template::check($config, $params->{template}, 'notify_events' ); $checked->{template} = template::check( $config, $params->{template}, 'notify_events' );
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#numeric values #numeric values
for my $param ( 'event_id', 'project_id', 'studio_id', 'default_studio_id', 'user_id', 'series_id', 'duration' ) { for my $param ( 'event_id', 'project_id', 'studio_id', 'default_studio_id', 'user_id', 'series_id', 'duration' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
for my $param ( 'subject', 'to', 'cc', 'content' ) { for my $param ( 'subject', 'to', 'cc', 'content' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /\S/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /\S/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
#actions and roles #actions and roles
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(send)$/ ) { if ( $params->{action} =~ /^(send)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
return $checked; return $checked;
} }

View File

@@ -5,7 +5,8 @@ use strict;
use Data::Dumper; use Data::Dumper;
use URI::Escape(); use URI::Escape();
use Encode();
#use Encode();
use localization(); use localization();
use params(); use params();
@@ -39,12 +40,12 @@ print "Content-type:text/html; charset=UTF-8;\n\n";
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
user => $user user => $user
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
@@ -56,11 +57,11 @@ $params->{project_id} = $user_presets->{project_id}
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -74,88 +75,89 @@ $headerParams->{loc} = localization::get( $config, { user => $user, file => 'men
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
deleteFromPlayout( $config, $request ) if ( $params->{action} eq 'delete' ); deleteFromPlayout( $config, $request ) if ( $params->{action} eq 'delete' );
} else { } else {
print "missing action\n"; print "missing action\n";
} }
return; return;
sub deleteFromPlayout { sub deleteFromPlayout {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_event_status_playout} == 1 ) { unless ( $permissions->{update_event_status_playout} == 1 ) {
uac::permissions_denied('update_event_status_playout'); uac::permissions_denied('update_event_status_playout');
return; return;
} }
for my $attr ( 'project_id', 'studio_id', 'start_date' ) { for my $attr ( 'project_id', 'studio_id', 'start_date' ) {
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr . " to show event" ); uac::print_error( "missing " . $attr . " to show event" );
return; return;
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
my $dbh = db::connect($config); my $dbh = db::connect($config);
my $result = playout::delete( my $result = playout::delete(
$config, $dbh, $config, $dbh,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
start => $params->{start_date} start => $params->{start_date}
} }
); );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
print "result:$result\n"; print "result:$result\n";
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#actions and roles #actions and roles
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(delete)$/ ) { if ( $params->{action} =~ /^(delete)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#numeric values #numeric values
$checked->{exclude} = 0; $checked->{exclude} = 0;
for my $param ( 'project_id', 'studio_id' ) { for my $param ( 'project_id', 'studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
#dates #dates
for my $param ('start_date') { for my $param ('start_date') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d\d\d\d\-\d\d\-\d\d \d\d\:\d\d)/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d\d\d\d\-\d\d\-\d\d \d\d\:\d\d)/ ) ) {
$checked->{$param} = $1 . ':00'; $checked->{$param} = $1 . ':00';
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
#$checked->{template}=template::check($config, $params->{template},'playout'); #$checked->{template}=template::check($config, $params->{template},'playout');
return $checked; return $checked;
} }

View File

@@ -26,12 +26,12 @@ return if ( $user eq '' );
my $permissions = roles::get_user_permissions($config); my $permissions = roles::get_user_permissions($config);
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -40,11 +40,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -53,7 +53,7 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
print q{ print q{
@@ -63,244 +63,245 @@ print q{
}; };
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
save_project( $config, $request ) if ( $params->{action} eq 'save' ); save_project( $config, $request ) if ( $params->{action} eq 'save' );
delete_project( $config, $request ) if ( $params->{action} eq 'delete' ); delete_project( $config, $request ) if ( $params->{action} eq 'delete' );
assign_studio( $config, $request ) if ( $params->{action} eq 'assign_studio' ); assign_studio( $config, $request ) if ( $params->{action} eq 'assign_studio' );
unassign_studio( $config, $request ) if ( $params->{action} eq 'unassign_studio' ); unassign_studio( $config, $request ) if ( $params->{action} eq 'unassign_studio' );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
show_projects( $config, $request ); show_projects( $config, $request );
sub delete_project { sub delete_project {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{delete_project} == 1 ) { unless ( $permissions->{delete_project} == 1 ) {
uac::permissions_denied('delete_project'); uac::permissions_denied('delete_project');
return; return;
} }
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $columns = project::get_columns($config); my $columns = project::get_columns($config);
my $entry = {}; my $entry = {};
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( defined $columns->{$param} ) { if ( defined $columns->{$param} ) {
$entry->{$param} = $params->{$param} || ''; $entry->{$param} = $params->{$param} || '';
} }
} }
my $project_id = $params->{pid} || ''; my $project_id = $params->{pid} || '';
if ( $project_id ne '' ) { if ( $project_id ne '' ) {
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
$entry->{project_id} = $project_id; $entry->{project_id} = $project_id;
delete $entry->{studio_id}; delete $entry->{studio_id};
project::delete( $config, $entry ); project::delete( $config, $entry );
uac::print_info("Project deleted"); uac::print_info("Project deleted");
} }
} }
sub save_project { sub save_project {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
#filter entry for studio columns #filter entry for studio columns
my $columns = project::get_columns($config); my $columns = project::get_columns($config);
my $entry = {}; my $entry = {};
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( defined $columns->{$param} ) { if ( defined $columns->{$param} ) {
$entry->{$param} = $params->{$param} || ''; $entry->{$param} = $params->{$param} || '';
} }
} }
my $project_id = $params->{pid} || ''; my $project_id = $params->{pid} || '';
if ( $project_id ne '' ) { if ( $project_id ne '' ) {
unless ( $permissions->{update_project} == 1 ) { unless ( $permissions->{update_project} == 1 ) {
uac::permissions_denied('update_project'); uac::permissions_denied('update_project');
return; return;
} }
$entry->{project_id} = $project_id; $entry->{project_id} = $project_id;
delete $entry->{studio_id}; delete $entry->{studio_id};
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
project::update( $config, $entry ); project::update( $config, $entry );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
uac::print_info("project saved"); uac::print_info("project saved");
} else { } else {
unless ( $permissions->{create_project} == 1 ) { unless ( $permissions->{create_project} == 1 ) {
uac::permissions_denied('create_project'); uac::permissions_denied('create_project');
return; return;
} }
my $projects = project::get( $config, { name => $entry->{name} } ); my $projects = project::get( $config, { name => $entry->{name} } );
if ( scalar @$projects > 0 ) { if ( scalar @$projects > 0 ) {
uac::print_error("project with name '$entry->{name}' already exists"); uac::print_error("project with name '$entry->{name}' already exists");
return; return;
} }
delete $entry->{project_id}; delete $entry->{project_id};
delete $entry->{studio_id}; delete $entry->{studio_id};
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
project::insert( $config, $entry ); project::insert( $config, $entry );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
uac::print_info("project created"); uac::print_info("project created");
} }
} }
sub assign_studio { sub assign_studio {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{assign_project_studio} == 1 ) { unless ( $permissions->{assign_project_studio} == 1 ) {
uac::permissions_denied('assign_project_studio'); uac::permissions_denied('assign_project_studio');
return; return;
} }
for my $param ( 'pid', 'sid' ) { for my $param ( 'pid', 'sid' ) {
unless ( defined $params->{$param} ) { unless ( defined $params->{$param} ) {
uac::print_error( 'missing ' . $param ); uac::print_error( 'missing ' . $param );
return; return;
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
project::assign_studio( project::assign_studio(
$config, $config,
{ {
project_id => $params->{pid}, project_id => $params->{pid},
studio_id => $params->{sid} studio_id => $params->{sid}
} }
); );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
uac::print_info("project assigned"); uac::print_info("project assigned");
} }
# TODO: unassign series from studio # TODO: unassign series from studio
sub unassign_studio { sub unassign_studio {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{assign_project_studio} == 1 ) { unless ( $permissions->{assign_project_studio} == 1 ) {
uac::permissions_denied('assign_project_studio'); uac::permissions_denied('assign_project_studio');
return; return;
} }
for my $param ( 'pid', 'sid' ) { for my $param ( 'pid', 'sid' ) {
unless ( defined $params->{$param} ) { unless ( defined $params->{$param} ) {
uac::print_error( 'missing ' . $param ); uac::print_error( 'missing ' . $param );
return; return;
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
project::unassign_studio( project::unassign_studio(
$config, $config,
{ {
project_id => $params->{pid}, project_id => $params->{pid},
studio_id => $params->{sid} studio_id => $params->{sid}
} }
); );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
uac::print_info("project unassigned"); uac::print_info("project unassigned");
} }
sub show_projects { sub show_projects {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_project} == 1 ) { unless ( $permissions->{read_project} == 1 ) {
uac::permissions_denied('read_project'); uac::permissions_denied('read_project');
return; return;
} }
my $projects = project::get($config); my $projects = project::get($config);
my $studios = studios::get($config); my $studios = studios::get($config);
my @projects = reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects); my @projects = reverse sort { $a->{end_date} cmp $b->{end_date} } (@$projects);
$projects = \@projects; $projects = \@projects;
for my $project (@$projects) { for my $project (@$projects) {
# get assigned studios # get assigned studios
my $project_studio_assignements = project::get_studio_assignments( $config, { project_id => $project->{project_id} } ); my $project_studio_assignements = project::get_studio_assignments( $config, { project_id => $project->{project_id} } );
$project->{pid} = $project->{project_id}; $project->{pid} = $project->{project_id};
# get assigned studios by id # get assigned studios by id
my $assigned_studio_by_id = {}; my $assigned_studio_by_id = {};
for my $studio (@$project_studio_assignements) { for my $studio (@$project_studio_assignements) {
$assigned_studio_by_id->{ $studio->{studio_id} } = 1; $assigned_studio_by_id->{ $studio->{studio_id} } = 1;
} }
my $assigned_studios = []; my $assigned_studios = [];
my $unassigned_studios = []; my $unassigned_studios = [];
for my $studio (@$studios) { for my $studio (@$studios) {
my %studio = %$studio; my %studio = %$studio;
$studio = \%studio; $studio = \%studio;
$studio->{pid} = $project->{pid}; $studio->{pid} = $project->{pid};
$studio->{sid} = $studio->{id}; $studio->{sid} = $studio->{id};
if ( defined $assigned_studio_by_id->{ $studio->{id} } ) { if ( defined $assigned_studio_by_id->{ $studio->{id} } ) {
push @$assigned_studios, $studio; push @$assigned_studios, $studio;
} else { } else {
push @$unassigned_studios, $studio; push @$unassigned_studios, $studio;
} }
} }
$project->{assigned_studios} = $assigned_studios; $project->{assigned_studios} = $assigned_studios;
$project->{unassigned_studios} = $unassigned_studios; $project->{unassigned_studios} = $unassigned_studios;
} }
$params->{projects} = $projects; $params->{projects} = $projects;
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'projects' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'projects' } );
uac::set_template_permissions( $permissions, $params ); uac::set_template_permissions( $permissions, $params );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#template #template
my $template = ''; my $template = '';
$template = template::check($config, $params->{template}, 'projects' ); $template = template::check( $config, $params->{template}, 'projects' );
$checked->{template} = $template; $checked->{template} = $template;
#actions #actions
my $action = ''; my $action = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(save|delete|assign_studio|unassign_studio)$/ ) { if ( $params->{action} =~ /^(save|delete|assign_studio|unassign_studio)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
for my $param ( 'name', 'title', 'subtitle', 'start_date', 'end_date', 'image', 'email' ) { for my $param ( 'name', 'title', 'subtitle', 'start_date', 'end_date', 'image', 'email' ) {
if ( defined $params->{$param} ) { if ( defined $params->{$param} ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
#numeric values #numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'pid', 'sid' ) { for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'pid', 'sid' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
return $checked; return $checked;
} }

View File

@@ -19,7 +19,7 @@ my $r = shift;
my $config = config::get('../config/config.cgi'); my $config = config::get('../config/config.cgi');
my $debug = $config->{system}->{debug}; my $debug = $config->{system}->{debug};
$params = check_params($params); $params = check_params( $config, $params );
print "Content-type:text/html\n\n"; print "Content-type:text/html\n\n";
print qq{<!DOCTYPE html> print qq{<!DOCTYPE html>
@@ -31,100 +31,100 @@ print qq{<!DOCTYPE html>
}; };
if ( defined $params->{user} ) { if ( defined $params->{user} ) {
sendToken( $config, $params ); sendToken( $config, $params );
return; return;
} else { } else {
my $result = checkToken( $config, $params ); my $result = checkToken( $config, $params );
return; return;
} }
sub sendToken { sub sendToken {
my $config = shift; my $config = shift;
my $params = shift; my $params = shift;
my $entry = password_requests::sendToken( $config, { user => $params->{user} } ); my $entry = password_requests::sendToken( $config, { user => $params->{user} } );
if ( defined $entry ) { if ( defined $entry ) {
print "Please check you mails\n"; print "Please check you mails\n";
} else { } else {
print "Sorry\n"; print "Sorry\n";
} }
} }
sub checkToken { sub checkToken {
my $config = shift; my $config = shift;
my $params = shift; my $params = shift;
my $token = $params->{token}; my $token = $params->{token};
my $entry = password_requests::get( $config, { token => $token } ); my $entry = password_requests::get( $config, { token => $token } );
unless ( defined $entry ) { unless ( defined $entry ) {
print "invalid token\n"; print "invalid token\n";
return undef; return undef;
} }
print STDERR Dumper($entry); print STDERR Dumper($entry);
my $created_at = $entry->{created_at}; my $created_at = $entry->{created_at};
unless ( defined $created_at ) { unless ( defined $created_at ) {
print "invalid token age\n"; print "invalid token age\n";
return undef; return undef;
} }
my $age = time() - time::datetime_to_time($created_at); my $age = time() - time::datetime_to_time($created_at);
if ( $age > 600 ) { if ( $age > 600 ) {
print "token is too old\n"; print "token is too old\n";
password_requests::delete( $config, { token => $token } ); password_requests::delete( $config, { token => $token } );
return undef; return undef;
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
$entry->{max_attempts}++; $entry->{max_attempts}++;
password_requests::update( $config, $entry ); password_requests::update( $config, $entry );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
if ( $entry->{max_attempts} > 10 ) { if ( $entry->{max_attempts} > 10 ) {
print "too many failed attempts, please request a new token by mail\n"; print "too many failed attempts, please request a new token by mail\n";
password_requests::delete( $config, { token => $token } ); password_requests::delete( $config, { token => $token } );
return undef; return undef;
} }
unless ( ( defined $params->{user_password} ) && ( defined $params->{user_password2} ) ) { unless ( ( defined $params->{user_password} ) && ( defined $params->{user_password2} ) ) {
printForm($token); printForm($token);
return undef; return undef;
} }
if ( $params->{action} eq 'change' ) { if ( $params->{action} eq 'change' ) {
my $user = $entry->{user}; my $user = $entry->{user};
my $request = { my $request = {
config => $config, config => $config,
params => { checked => $params } params => { checked => $params }
}; };
my $result = password_requests::changePassword( $config, $request, $user ); my $result = password_requests::changePassword( $config, $request, $user );
if ( defined $result->{error} ) { if ( defined $result->{error} ) {
#print "sorry\n"; #print "sorry\n";
print $result->{error} . "\n"; print $result->{error} . "\n";
printForm($token); printForm($token);
} }
if ( defined $result->{success} ) { if ( defined $result->{success} ) {
#print "success\n"; #print "success\n";
print $result->{success} . "\n"; print $result->{success} . "\n";
password_requests::delete( $config, { user => $user } ); password_requests::delete( $config, { user => $user } );
my $url = $config->{locations}->{editor_base_url}; my $url = $config->{locations}->{editor_base_url};
print qq{ print qq{
<script type="text/javascript"> <script type="text/javascript">
window.location = "$url"; window.location = "$url";
</script> </script>
}; };
} }
} }
} }
sub printForm { sub printForm {
my $token = shift; my $token = shift;
print qq{ print qq{
<form method="post"> <form method="post">
<input type="hidden" name="token" value="$token"> <input type="hidden" name="token" value="$token">
<input type="password" name="user_password" placeholder="enter new password"> <input type="password" name="user_password" placeholder="enter new password">
@@ -136,32 +136,33 @@ sub printForm {
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#my $template = ''; #my $template = '';
#$checked->{template} = template::check($config, $params->{template}, 'requestPassword' ); #$checked->{template} = template::check($config, $params->{template}, 'requestPassword' );
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $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/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /\S/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(change)$/ ) { if ( $params->{action} =~ /^(change)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
return $checked; return $checked;
} }

View File

@@ -26,23 +26,23 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
our $actions = { our $actions = {
read => 1, read => 1,
update => 2, update => 2,
assign => 3, assign => 3,
remove => 4, remove => 4,
disable => 5, disable => 5,
scan => 6, scan => 6,
create => 7, create => 7,
delete => 8, delete => 8,
}; };
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -50,11 +50,11 @@ $params->{studio_id} = $params->{default_studio_id}
$params->{project_id} = $user_presets->{project_id}; $params->{project_id} = $user_presets->{project_id};
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -62,11 +62,11 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'roles.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'roles.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
save_roles( $config, $request ) if ( $params->{action} eq 'save' ); save_roles( $config, $request ) if ( $params->{action} eq 'save' );
} }
#show current roles #show current roles
@@ -83,381 +83,382 @@ return;
# new roles will have role level 0 by default # new roles will have role level 0 by default
# #
sub save_roles { sub save_roles {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_role} == 1 ) { unless ( $permissions->{update_role} == 1 ) {
uac::permissions_denied('update_role'); uac::permissions_denied('update_role');
return; return;
} }
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $roles = uac::get_roles( $config, { project_id => $project_id, studio_id => $studio_id } ); my $roles = uac::get_roles( $config, { project_id => $project_id, studio_id => $studio_id } );
my $role_by_id = {}; my $role_by_id = {};
my $role_by_name = {}; my $role_by_name = {};
for my $role (@$roles) { for my $role (@$roles) {
$role_by_id->{ $role->{id} } = $role; $role_by_id->{ $role->{id} } = $role;
$role_by_name->{ $role->{role} } = $role; $role_by_name->{ $role->{role} } = $role;
} }
my $columns = uac::get_role_columns($config); my $columns = uac::get_role_columns($config);
#print '<pre>'.Dumper($columns).'</pre>'; #print '<pre>'.Dumper($columns).'</pre>';
#initialize all value ids (given by params matching to database columns) #initialize all value ids (given by params matching to database columns)
my $values = {}; my $values = {};
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( $param =~ /(.+?)\_(\d+)?$/ ) { if ( $param =~ /(.+?)\_(\d+)?$/ ) {
my $column = $1; my $column = $1;
my $id = $2 || ''; my $id = $2 || '';
next unless defined $columns->{$column}; next unless defined $columns->{$column};
$values->{$id} = {} if ( update_allowed( $permissions, $role_by_id, $id ) ); $values->{$id} = {} if ( update_allowed( $permissions, $role_by_id, $id ) );
} }
} }
#init checkbox values with 0 #init checkbox values with 0
for my $id ( keys %$values ) { for my $id ( keys %$values ) {
if ( update_allowed( $permissions, $role_by_id, $id ) ) { if ( update_allowed( $permissions, $role_by_id, $id ) ) {
for my $column ( keys %$columns ) { for my $column ( keys %$columns ) {
next if ( $column eq 'level' || $column eq 'role' || $column eq 'id' || $column eq 'project_id' || $column eq 'studio_id' ); next if ( $column eq 'level' || $column eq 'role' || $column eq 'id' || $column eq 'project_id' || $column eq 'studio_id' );
$values->{$id}->{$column} = 0; $values->{$id}->{$column} = 0;
} }
} }
} }
#set all checkbox values to 1 #set all checkbox values to 1
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( $param =~ /(.+?)\_(\d+)?$/ ) { if ( $param =~ /(.+?)\_(\d+)?$/ ) {
my $column = $1; my $column = $1;
my $id = $2 || ''; my $id = $2 || '';
next unless ( defined $columns->{$column} ); next unless ( defined $columns->{$column} );
if ( update_allowed( $permissions, $role_by_id, $id ) ) { if ( update_allowed( $permissions, $role_by_id, $id ) ) {
my $value = $params->{$param} || ''; my $value = $params->{$param} || '';
if ( $column eq 'level' ) { if ( $column eq 'level' ) {
if ( check_level( $permissions, $value ) == 1 ) { if ( check_level( $permissions, $value ) == 1 ) {
$values->{$id}->{$column} = $value; $values->{$id}->{$column} = $value;
} else { } else {
uac::permissions_denied("change the level of role!"); uac::permissions_denied("change the level of role!");
return; return;
} }
} elsif ( $column eq 'role' ) { } elsif ( $column eq 'role' ) {
$values->{$id}->{$column} = $value; $values->{$id}->{$column} = $value;
} elsif ( $column eq 'id' || $column eq 'project_id' || $column eq 'studio_id' ) { } elsif ( $column eq 'id' || $column eq 'project_id' || $column eq 'studio_id' ) {
#id and studio id will be set later #id and studio id will be set later
} else { } else {
$values->{$id}->{$column} = 1 if ( $value =~ /^\d+$/ ); $values->{$id}->{$column} = 1 if ( $value =~ /^\d+$/ );
} }
} }
} }
} }
#print STDERR Dumper($values); #print STDERR Dumper($values);
#order roles to update by level #order roles to update by level
for my $id ( sort { $values->{$a}->{level} <=> $values->{$b}->{level} } keys %$values ) { for my $id ( sort { $values->{$a}->{level} <=> $values->{$b}->{level} } keys %$values ) {
my $role = $values->{$id}; my $role = $values->{$id};
$role->{id} = $id || ''; $role->{id} = $id || '';
$role->{studio_id} = $studio_id; $role->{studio_id} = $studio_id;
$role->{project_id} = $project_id; $role->{project_id} = $project_id;
#if you are not admin #if you are not admin
next if check_level( $permissions, $role->{level} ) == 0; next if check_level( $permissions, $role->{level} ) == 0;
if ( $role->{project_id} eq '' ) { if ( $role->{project_id} eq '' ) {
uac::print_error('missing parameter project_id!'); uac::print_error('missing parameter project_id!');
next; next;
} }
if ( $role->{studio_id} eq '' ) { if ( $role->{studio_id} eq '' ) {
uac::print_error('missing parameter studio_id!'); uac::print_error('missing parameter studio_id!');
next; next;
} }
if ( ( $role->{role} eq '' ) && ( $id ne '' ) ) { if ( ( $role->{role} eq '' ) && ( $id ne '' ) ) {
uac::print_error('missing parameter role!'); uac::print_error('missing parameter role!');
next; next;
} }
my $role_from_db = undef; my $role_from_db = undef;
$role_from_db = $role_by_name->{ $role->{role} } if defined $role_by_name->{ $role->{role} }; $role_from_db = $role_by_name->{ $role->{role} } if defined $role_by_name->{ $role->{role} };
if ( $id eq '' ) { if ( $id eq '' ) {
#insert role #insert role
next if ( $role->{role} eq '' ); next if ( $role->{role} eq '' );
if ( defined $role_from_db ) { if ( defined $role_from_db ) {
uac::print_error("a role with name '$role->{role}' already exists!"); uac::print_error("a role with name '$role->{role}' already exists!");
next; next;
} }
$role->{level} = 0; $role->{level} = 0;
print "insert $id $role->{role}<br>\n"; print "insert $id $role->{role}<br>\n";
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
uac::insert_role( $config, $role ); uac::insert_role( $config, $role );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
} else { } else {
#update role #update role
if ( ( defined $role_from_db ) && ( $id ne $role_from_db->{id} ) ) { if ( ( defined $role_from_db ) && ( $id ne $role_from_db->{id} ) ) {
uac::print_error( 'you cannot rename role to existing role!' uac::print_error( 'you cannot rename role to existing role!'
. " '$role->{role}' ($id) != '$role_from_db->{role}' ($role_from_db->{id})" ); . " '$role->{role}' ($id) != '$role_from_db->{role}' ($role_from_db->{id})" );
next; next;
} }
print "update $role->{role}<br>\n"; print "update $role->{role}<br>\n";
#print '<div style="height:3em;overflow:auto;white-space:pre">'.Dumper($role).'</div>'; #print '<div style="height:3em;overflow:auto;white-space:pre">'.Dumper($role).'</div>';
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
uac::update_role( $config, $role ); uac::update_role( $config, $role );
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
} }
} }
print qq{<div class="ok head">changes saved</div>}; print qq{<div class="ok head">changes saved</div>};
} }
#check if update is allowed #check if update is allowed
sub update_allowed { sub update_allowed {
my $permissions = shift; my $permissions = shift;
my $role_by_id = shift; my $role_by_id = shift;
my $id = shift; my $id = shift;
return 0 unless defined $permissions; return 0 unless defined $permissions;
return 0 unless defined $role_by_id; return 0 unless defined $role_by_id;
return 0 unless defined $id; return 0 unless defined $id;
return 1 if $id eq ''; return 1 if $id eq '';
return 0 unless defined $role_by_id->{$id}; return 0 unless defined $role_by_id->{$id};
my $role = $role_by_id->{$id}; my $role = $role_by_id->{$id};
return check_level( $permissions, $role->{level} ); return check_level( $permissions, $role->{level} );
} }
#check if update is allowed #check if update is allowed
sub check_level { sub check_level {
my $permissions = shift; my $permissions = shift;
my $level = shift; my $level = shift;
return 0 unless defined $permissions; return 0 unless defined $permissions;
return 0 unless defined $level; return 0 unless defined $level;
return 1 if ( $permissions->{is_admin} ); return 1 if ( $permissions->{is_admin} );
return 1 if ( $permissions->{level} > $level ); return 1 if ( $permissions->{level} > $level );
return 0; return 0;
} }
# user has to be assigned to studio # user has to be assigned to studio
# user needs to have permissions read_role # user needs to have permissions read_role
sub show_roles { sub show_roles {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_role} == 1 ) { unless ( $permissions->{read_role} == 1 ) {
uac::permissions_denied('read_role'); uac::permissions_denied('read_role');
return; return;
} }
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $columns = uac::get_role_columns($config); my $columns = uac::get_role_columns($config);
#get user roles #get user roles
my $conditions = {}; my $conditions = {};
$conditions->{studio_id} = $params->{studio_id} if ( $params->{studio_id} ne '' ); $conditions->{studio_id} = $params->{studio_id} if ( $params->{studio_id} ne '' );
$conditions->{project_id} = $params->{project_id} if ( $params->{project_id} ne '' ); $conditions->{project_id} = $params->{project_id} if ( $params->{project_id} ne '' );
my $roles = uac::get_roles( $config, $conditions ); my $roles = uac::get_roles( $config, $conditions );
@$roles = reverse sort { $a->{level} cmp $b->{level} } (@$roles); @$roles = reverse sort { $a->{level} cmp $b->{level} } (@$roles);
#add new role template #add new role template
unshift @$roles, { role => '', level => '0' }; unshift @$roles, { role => '', level => '0' };
#print user role form #print user role form
my $out = qq{ my $out = qq{
<div id="edit_roles"> <div id="edit_roles">
<form method="post"> <form method="post">
<input type="hidden" name="project_id" value="$project_id"> <input type="hidden" name="project_id" value="$project_id">
<input type="hidden" name="studio_id" value="$studio_id"> <input type="hidden" name="studio_id" value="$studio_id">
}; };
if ( defined $permissions->{update_role} ) { if ( defined $permissions->{update_role} ) {
#add new user role button #add new user role button
$out .= q{ $out .= q{
<button id="add_user_role_button" onclick="add_user_role();return false;">add user role</button> <button id="add_user_role_button" onclick="add_user_role();return false;">add user role</button>
} }
} }
$out .= '<hr>'; $out .= '<hr>';
$out .= '<table class="table">'; $out .= '<table class="table">';
my $localization = localization::get( $config, { user => $params->{presets}->{user}, file => 'roles' } ); my $localization = localization::get( $config, { user => $params->{presets}->{user}, file => 'roles' } );
for my $key ( keys %$localization ) { for my $key ( keys %$localization ) {
$localization->{$key} =~ s/\(/<span class\=\"comment\">/; $localization->{$key} =~ s/\(/<span class\=\"comment\">/;
$localization->{$key} =~ s/\)/<\/span>/; $localization->{$key} =~ s/\)/<\/span>/;
} }
#add role row #add role row
$out .= qq{<tr>}; $out .= qq{<tr>};
my $description = $localization->{label_role} || 'role'; my $description = $localization->{label_role} || 'role';
$out .= qq{<td>$description</td>}; $out .= qq{<td>$description</td>};
for my $role (@$roles) { for my $role (@$roles) {
$role->{active} = ''; $role->{active} = '';
$role->{active} = ' disabled' if check_level( $permissions, $role->{level} ) == 0; $role->{active} = ' disabled' if check_level( $permissions, $role->{level} ) == 0;
$role->{active} = ' disabled' unless defined $permissions->{update_role}; $role->{active} = ' disabled' unless defined $permissions->{update_role};
} }
for my $role (@$roles) { for my $role (@$roles) {
#print Dumper($role); #print Dumper($role);
my $id = $role->{id} || ''; my $id = $role->{id} || '';
my $value = $role->{role} || ''; my $value = $role->{role} || '';
my $style = ''; my $style = '';
$style = ' id="new_user_role" class="editor" style="display:none"' if ( $id eq '' ); $style = ' id="new_user_role" class="editor" style="display:none"' if ( $id eq '' );
my $active = $role->{active}; my $active = $role->{active};
$out .= qq{<td$style><input name="role_$id" value="$value" class="role$active" title="$value"></td>}; $out .= qq{<td$style><input name="role_$id" value="$value" class="role$active" title="$value"></td>};
} }
$out .= qq{</tr>}; $out .= qq{</tr>};
#add level row #add level row
$out .= qq{<tr>}; $out .= qq{<tr>};
$description = $localization->{label_level} || 'level'; $description = $localization->{label_level} || 'level';
$out .= qq{<td>$description</td>}; $out .= qq{<td>$description</td>};
for my $role (@$roles) { for my $role (@$roles) {
my $id = $role->{id} || ''; my $id = $role->{id} || '';
my $value = $role->{level} || ''; my $value = $role->{level} || '';
my $style = ''; my $style = '';
$style = ' id="new_user_level" class="editor" style="display:none"' if ( $id eq '' ); $style = ' id="new_user_level" class="editor" style="display:none"' if ( $id eq '' );
my $active = $role->{active}; my $active = $role->{active};
$out .= qq{<td$style><input name="level_$id" value="$value" class="role$active" title="$value"></td>}; $out .= qq{<td$style><input name="level_$id" value="$value" class="role$active" title="$value"></td>};
} }
$out .= qq{</tr>}; $out .= qq{</tr>};
#add permission rows #add permission rows
$columns = sort_columns($columns); $columns = sort_columns($columns);
for my $key (@$columns) { for my $key (@$columns) {
next next
if ( $key eq 'level' if ( $key eq 'level'
|| $key eq 'role' || $key eq 'role'
|| $key eq 'id' || $key eq 'id'
|| $key eq 'project_id' || $key eq 'project_id'
|| $key eq 'studio_id' || $key eq 'studio_id'
|| $key eq 'modified_at' || $key eq 'modified_at'
|| $key eq 'created_at' ); || $key eq 'created_at' );
my $title = $key; my $title = $key;
$title =~ s/\_/ /g; $title =~ s/\_/ /g;
my $description = $localization->{ 'label_' . $key } || $key; my $description = $localization->{ 'label_' . $key } || $key;
$out .= qq{<tr>}; $out .= qq{<tr>};
$out .= qq{<td title="$title">$description</td>}; $out .= qq{<td title="$title">$description</td>};
for my $role (@$roles) { for my $role (@$roles) {
my $value = $role->{$key} || '0'; my $value = $role->{$key} || '0';
my $id = $role->{id} || ''; my $id = $role->{id} || '';
my $active = $role->{active}; my $active = $role->{active};
my $style = ''; my $style = '';
$style = ' class="editor' . $active . '" style="display:none"' if ( $id eq '' ); $style = ' class="editor' . $active . '" style="display:none"' if ( $id eq '' );
my $checked = ''; my $checked = '';
$checked = 'checked="checked"' if ( $value eq '1' ); $checked = 'checked="checked"' if ( $value eq '1' );
$active =~ s/\s//g; $active =~ s/\s//g;
$out .= qq{<td$style> $out .= qq{<td$style>
<input type="checkbox" name="} . $key . '_' . $id . qq{" value="$value" $checked class="$active"> <input type="checkbox" name="} . $key . '_' . $id . qq{" value="$value" $checked class="$active">
</td> </td>
}; };
} }
$out .= qq{</tr>}; $out .= qq{</tr>};
} }
$out .= '</table>'; $out .= '</table>';
$out .= '<input type="submit" name="action" value="save">' if ( defined $permissions->{update_role} ); $out .= '<input type="submit" name="action" value="save">' if ( defined $permissions->{update_role} );
$out .= '</form>'; $out .= '</form>';
$out .= '</div>'; $out .= '</div>';
print $out. "\n"; print $out. "\n";
} }
# sort columns by group and action # sort columns by group and action
sub sort_columns { sub sort_columns {
my $columns = shift; my $columns = shift;
my $column_level = {}; my $column_level = {};
my $groups = sort_groups($columns); my $groups = sort_groups($columns);
for my $column ( keys %$columns ) { for my $column ( keys %$columns ) {
my @words = split /_/, $column; my @words = split /_/, $column;
my $action = shift @words; my $action = shift @words;
my $group = join( ' ', @words ); my $group = join( ' ', @words );
#print "action:'$action' group:'$group' <br>\n"; #print "action:'$action' group:'$group' <br>\n";
my $index = $groups->{$group} || 0; my $index = $groups->{$group} || 0;
$index += $actions->{$action} if ( defined $actions->{$action} ); $index += $actions->{$action} if ( defined $actions->{$action} );
$column_level->{$column} = $index; $column_level->{$column} = $index;
# print $index."<br>"; # print $index."<br>";
} }
my @columns = sort { $column_level->{$a} <=> $column_level->{$b} } ( keys %$column_level ); my @columns = sort { $column_level->{$a} <=> $column_level->{$b} } ( keys %$column_level );
return \@columns; return \@columns;
} }
# sort columns by group # sort columns by group
sub sort_groups { sub sort_groups {
my $columns = shift; my $columns = shift;
my $groups = {}; my $groups = {};
#extract groups #extract groups
for my $column ( keys %$columns ) { for my $column ( keys %$columns ) {
my @words = split /_/, $column; my @words = split /_/, $column;
my $action = shift @words; my $action = shift @words;
my $group = join( ' ', @words ); my $group = join( ' ', @words );
$groups->{$group} = 1; $groups->{$group} = 1;
} }
#weigth groups #weigth groups
my $i = 0; my $i = 0;
for my $group ( sort keys %$groups ) { for my $group ( sort keys %$groups ) {
$groups->{$group} = $i; $groups->{$group} = $i;
$i += 100; $i += 100;
} }
#print "<pre>"; #print "<pre>";
#for my $group (sort {$groups->{$a} <=> $groups->{$b}} (keys %$groups)){ #for my $group (sort {$groups->{$a} <=> $groups->{$b}} (keys %$groups)){
# print "$groups->{$group}\t$group\n"; # print "$groups->{$group}\t$group\n";
#} #}
#print "</pre>"; #print "</pre>";
return $groups; return $groups;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#template #template
my $template = ''; my $template = '';
$template = template::check($config, $params->{template}, 'roles.html' ); $template = template::check( $config, $params->{template}, 'roles.html' );
$checked->{template} = $template; $checked->{template} = $template;
#actions #actions
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} eq 'save' ) { if ( $params->{action} eq 'save' ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#numeric values #numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id' ) { for my $param ( 'project_id', 'studio_id', 'default_studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
#permission fields #permission fields
for my $key ( keys %$params ) { for my $key ( keys %$params ) {
$checked->{$key} = $params->{$key} if ( $key =~ /^[a-z_]+_\d*$/ ); $checked->{$key} = $params->{$key} if ( $key =~ /^[a-z_]+_\d*$/ );
} }
return $checked; return $checked;
} }

View File

@@ -25,12 +25,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
user => $user user => $user
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -39,11 +39,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -59,120 +59,121 @@ show_events( $config, $request );
#TODO: filter by published, draft #TODO: filter by published, draft
sub show_events { sub show_events {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::permissions_denied('read_event'); uac::permissions_denied('read_event');
return; return;
} }
# get user projects # get user projects
my $user_projects = uac::get_projects_by_user( $config, { user => $request->{user} } ); my $user_projects = uac::get_projects_by_user( $config, { user => $request->{user} } );
my $projects = {}; my $projects = {};
for my $project (@$user_projects) { for my $project (@$user_projects) {
$projects->{ $project->{project_id} } = $project; $projects->{ $project->{project_id} } = $project;
} }
# get user studios # get user studios
my $user_studios = uac::get_studios_by_user( $config, { user => $request->{user} } ); my $user_studios = uac::get_studios_by_user( $config, { user => $request->{user} } );
for my $studio (@$user_studios) { for my $studio (@$user_studios) {
my $project_id = $studio->{project_id}; my $project_id = $studio->{project_id};
my $studio_id = $studio->{id}; my $studio_id = $studio->{id};
$studio->{project_name} = $projects->{$project_id}->{name}; $studio->{project_name} = $projects->{$project_id}->{name};
$studio->{selected} = 1 if ( $project_id eq $params->{p_id} ) && ( $studio_id eq $params->{s_id} ); $studio->{selected} = 1 if ( $project_id eq $params->{p_id} ) && ( $studio_id eq $params->{s_id} );
} }
# get series # get series
my $options = {}; my $options = {};
$options->{project_id} = $params->{p_id} if defined $params->{p_id}; $options->{project_id} = $params->{p_id} if defined $params->{p_id};
$options->{studio_id} = $params->{s_id} if defined $params->{s_id}; $options->{studio_id} = $params->{s_id} if defined $params->{s_id};
my $series = series::get( $config, $options ); my $series = series::get( $config, $options );
for my $serie (@$series) { for my $serie (@$series) {
$serie->{selected} = 1 if ( defined $params->{series_id} ) && ( $serie->{series_id} eq $params->{series_id} ); $serie->{selected} = 1 if ( defined $params->{series_id} ) && ( $serie->{series_id} eq $params->{series_id} );
$serie->{series_name} = 'Einzelsendung' if $serie->{series_name} eq '_single_'; $serie->{series_name} = 'Einzelsendung' if $serie->{series_name} eq '_single_';
} }
# get events # get events
$options->{series_id} = $params->{series_id} if defined $params->{series_id}; $options->{series_id} = $params->{series_id} if defined $params->{series_id};
$options->{from_date} = $params->{from_date} if defined $params->{from_date}; $options->{from_date} = $params->{from_date} if defined $params->{from_date};
$options->{till_date} = $params->{till_date} if defined $params->{till_date}; $options->{till_date} = $params->{till_date} if defined $params->{till_date};
my $events = series::get_events( $config, $options ); my $events = series::get_events( $config, $options );
# filter by year # filter by year
my $years = []; my $years = [];
for my $year ( 2005 .. 2025 ) { for my $year ( 2005 .. 2025 ) {
my $date = { year => $year }; my $date = { year => $year };
$date->{selected} = 1 if ( defined $params->{from_date} ) && ( $params->{from_date} eq $year . '-01-01' ); $date->{selected} = 1 if ( defined $params->{from_date} ) && ( $params->{from_date} eq $year . '-01-01' );
push @$years, $date; push @$years, $date;
} }
#print Dumper($params->{loc}); #print Dumper($params->{loc});
$params->{studios} = $user_studios; $params->{studios} = $user_studios;
$params->{series} = $series; $params->{series} = $series;
$params->{events} = $events; $params->{events} = $events;
$params->{years} = $years; $params->{years} = $years;
#print STDERR Dumper($params); #print STDERR Dumper($params);
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
return; return;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#numeric values #numeric values
for my $param ( 'id', 'project_id', 'studio_id', 'series_id', 'event_id', 'p_id', 's_id' ) { for my $param ( 'id', 'project_id', 'studio_id', 'series_id', 'event_id', 'p_id', 's_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[\-\d]+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[\-\d]+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
for my $param ( 'selectProjectStudio', 'selectSeries', 'selectRange' ) { for my $param ( 'selectProjectStudio', 'selectSeries', 'selectRange' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} eq '1' ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} eq '1' ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
for my $param ('resultElemId') { for my $param ('resultElemId') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[a-zA-ZöäüÖÄÜß_\d]+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[a-zA-ZöäüÖÄÜß_\d]+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
for my $param ( 'from_date', 'till_date' ) { for my $param ( 'from_date', 'till_date' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) {
$checked->{$param} = $1; $checked->{$param} = $1;
} }
} }
if ( ( defined $params->{year} ) && ( $params->{year} =~ /^\d\d\d\d$/ ) ) { if ( ( defined $params->{year} ) && ( $params->{year} =~ /^\d\d\d\d$/ ) ) {
$checked->{year} = $params->{year}; $checked->{year} = $params->{year};
} }
# set defaults for project and studio id if not given # set defaults for project and studio id if not given
$checked->{s_id} = $params->{studio_id} || '-1' unless defined $params->{s_id}; $checked->{s_id} = $params->{studio_id} || '-1' unless defined $params->{s_id};
$checked->{p_id} = $params->{project_id} || '-1' unless defined $params->{p_id}; $checked->{p_id} = $params->{project_id} || '-1' unless defined $params->{p_id};
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
$checked->{template} = template::check($config, $params->{template}, 'selectEvent' ); $checked->{template} = template::check( $config, $params->{template}, 'selectEvent' );
return $checked; return $checked;
} }

View File

@@ -41,7 +41,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params($config, $params),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -109,6 +109,7 @@ sub show_series {
} }
sub check_params { sub check_params {
my $config = shift;
my $params = shift; my $params = shift;
my $checked = {}; my $checked = {};

File diff suppressed because it is too large Load Diff

View File

@@ -48,7 +48,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -58,7 +58,7 @@ $params = $request->{params}->{checked};
unless ( params::isJson() ) { unless ( params::isJson() ) {
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
} }
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
@@ -75,7 +75,7 @@ showPlayout( $config, $request );
print STDERR "$0 ERROR: " . $params->{error} . "\n" if $params->{error} ne ''; print STDERR "$0 ERROR: " . $params->{error} . "\n" if $params->{error} ne '';
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'event,comment' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'event,comment' } );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
exit; exit;
@@ -170,11 +170,12 @@ sub formatLoudness {
} }
sub check_params { sub check_params {
my $config = shift;
my $params = shift; my $params = shift;
my $checked = {}; my $checked = {};
$checked->{error} = ''; $checked->{error} = '';
$checked->{template} = template::check($config, $params->{template}, 'show_playout' ); $checked->{template} = template::check( $config, $params->{template}, 'show_playout' );
#numeric values #numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'series_id', 'event_id', 'id' ) { for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'series_id', 'event_id', 'id' ) {

View File

@@ -26,12 +26,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
user => $user user => $user
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -40,11 +40,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -56,83 +56,84 @@ showImage( $config, $request );
#TODO: filter by published, draft #TODO: filter by published, draft
sub showImage { sub showImage {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_event} == 1 ) { unless ( $permissions->{read_event} == 1 ) {
uac::permissions_denied('read_image'); uac::permissions_denied('read_image');
return; return;
} }
unless ( defined $params->{filename} ) { unless ( defined $params->{filename} ) {
uac::permissions_denied('missing filename'); uac::permissions_denied('missing filename');
return; return;
} }
my $filename = images::getInternalPath( $config, $params ); my $filename = images::getInternalPath( $config, $params );
unless ( defined $filename ) { unless ( defined $filename ) {
uac::permissions_denied("could not find path"); uac::permissions_denied("could not find path");
return; return;
} }
unless ( -e $filename ) {
uac::permissions_denied("read $filename");
return;
}
my $image = images::readFile($filename); unless ( -e $filename ) {
if ( defined $image->{error} ) { uac::permissions_denied("read $filename");
uac::permissions_denied("read $filename, $image->{error}"); return;
return; }
}
binmode STDOUT; my $image = images::readFile($filename);
print "Content-type:image/jpeg; charset=UTF-8;\n\n"; if ( defined $image->{error} ) {
print $image->{content}; uac::permissions_denied("read $filename, $image->{error}");
return; return;
}
binmode STDOUT;
print "Content-type:image/jpeg; charset=UTF-8;\n\n";
print $image->{content};
return;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#numeric values #numeric values
for my $param ('filename') { for my $param ('filename') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[A-Za-z\_\-\.\d\/]+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[A-Za-z\_\-\.\d\/]+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
$checked->{$param} =~ s/^.*\///g; $checked->{$param} =~ s/^.*\///g;
} }
} }
$checked->{type} = 'thumbs'; $checked->{type} = 'thumbs';
for my $param ('type') { for my $param ('type') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^(thumbs|images|icons)$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^(thumbs|images|icons)$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
#numeric values #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]+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^[\-\d]+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
return $checked; return $checked;
} }

View File

@@ -5,7 +5,8 @@ use strict;
use Data::Dumper; use Data::Dumper;
use URI::Escape(); use URI::Escape();
use Encode();
#use Encode();
use params(); use params();
use config(); use config();
@@ -32,12 +33,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -46,11 +47,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -62,16 +63,16 @@ $headerParams->{loc} = localization::get( $config, { user => $user, file => 'all
my $action = $params->{action} || ''; my $action = $params->{action} || '';
if ( $action eq 'show_dates' ) { if ( $action eq 'show_dates' ) {
#print "Content-type:text/html\n\n"; #print "Content-type:text/html\n\n";
} else { } else {
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
} }
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
if ( $action eq 'show_dates' ) { if ( $action eq 'show_dates' ) {
print "Content-Type:text/html\n\n"; print "Content-Type:text/html\n\n";
} else { } else {
print q{ print q{
<script src="js/jquery-ui-timepicker.js" type="text/javascript"></script> <script src="js/jquery-ui-timepicker.js" type="text/javascript"></script>
<link href="css/jquery-ui-timepicker.css" type="text/css" rel="stylesheet" /> <link href="css/jquery-ui-timepicker.css" type="text/css" rel="stylesheet" />
<link href="css/theme.default.css" rel="stylesheet"> <link href="css/theme.default.css" rel="stylesheet">
@@ -82,12 +83,12 @@ if ( $action eq 'show_dates' ) {
} }
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
save_schedule( $config, $request ) if ( $params->{action} eq 'save_schedule' ); save_schedule( $config, $request ) if ( $params->{action} eq 'save_schedule' );
delete_schedule( $config, $request ) if ( $params->{action} eq 'delete_schedule' ); delete_schedule( $config, $request ) if ( $params->{action} eq 'delete_schedule' );
if ( $params->{action} eq 'show_dates' ) { if ( $params->{action} eq 'show_dates' ) {
showDates( $config, $request ); showDates( $config, $request );
return; return;
} }
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
@@ -96,322 +97,323 @@ return;
#insert or update a schedule and update all schedule dates #insert or update a schedule and update all schedule dates
sub save_schedule { sub save_schedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_studio_timeslot_schedule} == 1 ) { unless ( $permissions->{update_studio_timeslot_schedule} == 1 ) {
uac::permissions_denied('update_studio_timeslot_schedule'); uac::permissions_denied('update_studio_timeslot_schedule');
return; return;
} }
#print Dumper($params); #print Dumper($params);
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
for my $attr ( 'project_id', 'studio_id', 'start', 'end', 'end_date', 'schedule_studio_id' ) { for my $attr ( 'project_id', 'studio_id', 'start', 'end', 'end_date', 'schedule_studio_id' ) {
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( $attr . ' not given!' ); uac::print_error( $attr . ' not given!' );
return; return;
} }
} }
my $entry = {}; my $entry = {};
for my $attr ( 'project_id', 'start', 'end', 'end_date', 'frequency' ) { for my $attr ( 'project_id', 'start', 'end', 'end_date', 'frequency' ) {
$entry->{$attr} = $params->{$attr} if ( defined $params->{$attr} ); $entry->{$attr} = $params->{$attr} if ( defined $params->{$attr} );
} }
#set schedule's studio to value from schedule_studio_id #set schedule's studio to value from schedule_studio_id
$entry->{studio_id} = $params->{schedule_studio_id} if ( defined $params->{schedule_studio_id} ); $entry->{studio_id} = $params->{schedule_studio_id} if ( defined $params->{schedule_studio_id} );
if ( ( $entry->{end} ne '' ) && ( $entry->{end} le $entry->{start} ) ) { if ( ( $entry->{end} ne '' ) && ( $entry->{end} le $entry->{start} ) ) {
uac::print_error('start date should be before end date!'); uac::print_error('start date should be before end date!');
return; return;
} }
#print Dumper($entry); #print Dumper($entry);
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
if ( defined $params->{schedule_id} ) { if ( defined $params->{schedule_id} ) {
$entry->{schedule_id} = $params->{schedule_id}; $entry->{schedule_id} = $params->{schedule_id};
#print Dumper($entry); #print Dumper($entry);
studio_timeslot_schedule::update( $config, $entry ); studio_timeslot_schedule::update( $config, $entry );
#my $updates=0; #my $updates=0;
#print Dumper($entry); #print Dumper($entry);
my $updates = studio_timeslot_dates::update( $config, $entry ); my $updates = studio_timeslot_dates::update( $config, $entry );
uac::print_info("timeslot schedule saved. $updates dates scheduled"); uac::print_info("timeslot schedule saved. $updates dates scheduled");
} else { } else {
$entry->{schedule_id} = studio_timeslot_schedule::insert( $config, $entry ); $entry->{schedule_id} = studio_timeslot_schedule::insert( $config, $entry );
#my $updates=0; #my $updates=0;
my $updates = studio_timeslot_dates::update( $config, $entry ); my $updates = studio_timeslot_dates::update( $config, $entry );
uac::print_info("timeslot schedule added. $updates dates added"); uac::print_info("timeslot schedule added. $updates dates added");
} }
} }
sub delete_schedule { sub delete_schedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_studio_timeslot_schedule} == 1 ) { unless ( $permissions->{update_studio_timeslot_schedule} == 1 ) {
uac::permissions_denied('update_studio_timeslot_schedule'); uac::permissions_denied('update_studio_timeslot_schedule');
return; return;
} }
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $entry = {}; my $entry = {};
for my $attr ( 'project_id', 'studio_id', 'schedule_id' ) { for my $attr ( 'project_id', 'studio_id', 'schedule_id' ) {
if ( defined $params->{$attr} ) { if ( defined $params->{$attr} ) {
$entry->{$attr} = $params->{$attr}; $entry->{$attr} = $params->{$attr};
} else { } else {
uac::print_error( $attr . ' not given!' ); uac::print_error( $attr . ' not given!' );
return; return;
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
$entry->{schedule_id} = $params->{schedule_id}; $entry->{schedule_id} = $params->{schedule_id};
studio_timeslot_schedule::delete( $config, $entry ); studio_timeslot_schedule::delete( $config, $entry );
studio_timeslot_dates::update( $config, $entry ); studio_timeslot_dates::update( $config, $entry );
uac::print_info("timeslot schedule deleted"); uac::print_info("timeslot schedule deleted");
} }
sub showTimeslotSchedule { sub showTimeslotSchedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_studio_timeslot_schedule} == 1 ) { unless ( $permissions->{read_studio_timeslot_schedule} == 1 ) {
uac::permissions_denied('read_studio_timeslot_schedule'); uac::permissions_denied('read_studio_timeslot_schedule');
return; return;
} }
for my $param ( 'project_id', 'studio_id' ) { for my $param ( 'project_id', 'studio_id' ) {
unless ( defined $params->{$param} ) { unless ( defined $params->{$param} ) {
uac::print_error("missing $param"); uac::print_error("missing $param");
return; return;
} }
} }
#this will be updated later (especially allow_update_events) #this will be updated later (especially allow_update_events)
for my $permission ( keys %{ $request->{permissions} } ) { for my $permission ( keys %{ $request->{permissions} } ) {
$params->{'allow'}->{$permission} = $request->{permissions}->{$permission}; $params->{'allow'}->{$permission} = $request->{permissions}->{$permission};
} }
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'all,studio_timeslots' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'all,studio_timeslots' } );
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
#get project schedule #get project schedule
my $schedules = studio_timeslot_schedule::get( my $schedules = studio_timeslot_schedule::get(
$config, $config,
{ {
project_id => $project_id project_id => $project_id
# studio_id=>$studio_id # studio_id=>$studio_id
} }
); );
#list of all studios by id #list of all studios by id
my $studios = studios::get( $config, { project_id => $project_id } ); my $studios = studios::get( $config, { project_id => $project_id } );
#remove seconds from dates #remove seconds from dates
for my $schedule (@$schedules) { for my $schedule (@$schedules) {
$schedule->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $schedule->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
$schedule->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $schedule->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
#insert assigned studio #insert assigned studio
for my $studio (@$studios) { for my $studio (@$studios) {
my $entry = { my $entry = {
id => $studio->{id}, id => $studio->{id},
name => $studio->{name}, name => $studio->{name},
}; };
$entry->{selected} = 1 if ( $studio->{id} eq $schedule->{studio_id} ); $entry->{selected} = 1 if ( $studio->{id} eq $schedule->{studio_id} );
push @{ $schedule->{studios} }, $entry; push @{ $schedule->{studios} }, $entry;
} }
} }
my $result = { my $result = {
project_id => $project_id, project_id => $project_id,
studio_id => $studio_id studio_id => $studio_id
}; };
$result->{schedule} = $schedules; $result->{schedule} = $schedules;
$result->{studios} = $studios; $result->{studios} = $studios;
$result->{start} = $params->{start}; $result->{start} = $params->{start};
$result->{end} = $params->{end}; $result->{end} = $params->{end};
$result->{end_date} = $params->{end_date}; $result->{end_date} = $params->{end_date};
$result->{frequency} = $params->{frequency}; $result->{frequency} = $params->{frequency};
#remove seconds from datetimes #remove seconds from datetimes
$result->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $result->{start}; $result->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $result->{start};
$result->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $result->{end}; $result->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $result->{end};
#copy entry values to params #copy entry values to params
for my $key ( keys %$result ) { for my $key ( keys %$result ) {
$params->{$key} = $result->{$key}; $params->{$key} = $result->{$key};
} }
#print '<pre>'.Dumper($params).'</pre>'; #print '<pre>'.Dumper($params).'</pre>';
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub showDates { sub showDates {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_studio_timeslot_schedule} == 1 ) { unless ( $permissions->{read_studio_timeslot_schedule} == 1 ) {
uac::permissions_denied('read_studio_timeslot_schedule'); uac::permissions_denied('read_studio_timeslot_schedule');
return; return;
} }
for my $param ( 'project_id', 'studio_id' ) { for my $param ( 'project_id', 'studio_id' ) {
unless ( defined $params->{$param} ) { unless ( defined $params->{$param} ) {
uac::print_error("missing $param"); uac::print_error("missing $param");
return; return;
} }
} }
#this will be updated later (especially allow_update_events) #this will be updated later (especially allow_update_events)
for my $permission ( keys %{ $request->{permissions} } ) { for my $permission ( keys %{ $request->{permissions} } ) {
$params->{'allow'}->{$permission} = $request->{permissions}->{$permission}; $params->{'allow'}->{$permission} = $request->{permissions}->{$permission};
} }
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $fromDate = $params->{show_date} . '-01-01'; my $fromDate = $params->{show_date} . '-01-01';
my $tillDate = $params->{show_date} . '-12-31'; my $tillDate = $params->{show_date} . '-12-31';
#add timeslot dates #add timeslot dates
my $timeslot_dates = studio_timeslot_dates::get( my $timeslot_dates = studio_timeslot_dates::get(
$config, $config,
{ {
project_id => $project_id, project_id => $project_id,
# studio_id=>$studio_id, # studio_id=>$studio_id,
from => $fromDate, from => $fromDate,
till => $tillDate till => $tillDate
} }
); );
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'all,studio_timeslots' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'all,studio_timeslots' } );
my $language = $params->{loc}->{region}; my $language = $params->{loc}->{region};
# translate weekday names to selected language # translate weekday names to selected language
my $weekday = { my $weekday = {
'Mo' => $params->{loc}->{weekday_Mo}, 'Mo' => $params->{loc}->{weekday_Mo},
'Tu' => $params->{loc}->{weekday_Tu}, 'Tu' => $params->{loc}->{weekday_Tu},
'We' => $params->{loc}->{weekday_We}, 'We' => $params->{loc}->{weekday_We},
'Th' => $params->{loc}->{weekday_Th}, 'Th' => $params->{loc}->{weekday_Th},
'Fr' => $params->{loc}->{weekday_Fr}, 'Fr' => $params->{loc}->{weekday_Fr},
'Sa' => $params->{loc}->{weekday_Sa}, 'Sa' => $params->{loc}->{weekday_Sa},
'Su' => $params->{loc}->{weekday_Su}, 'Su' => $params->{loc}->{weekday_Su},
}; };
my $studios = studios::get( $config, { project_id => $project_id } ); my $studios = studios::get( $config, { project_id => $project_id } );
my $studio_by_id = {}; my $studio_by_id = {};
for my $studio (@$studios) { for my $studio (@$studios) {
$studio_by_id->{ $studio->{id} } = $studio; $studio_by_id->{ $studio->{id} } = $studio;
} }
#remove seconds from dates #remove seconds from dates
for my $date (@$timeslot_dates) { for my $date (@$timeslot_dates) {
#remove seconds from datetimes #remove seconds from datetimes
$date->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $date->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
$date->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $date->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
# translate weekday # translate weekday
if ( $language ne 'en' ) { if ( $language ne 'en' ) {
$date->{start_weekday} = $weekday->{ $date->{start_weekday} }; $date->{start_weekday} = $weekday->{ $date->{start_weekday} };
$date->{end_weekday} = $weekday->{ $date->{end_weekday} }; $date->{end_weekday} = $weekday->{ $date->{end_weekday} };
} }
$date->{studio_name} = $studio_by_id->{ $date->{studio_id} }->{name}; $date->{studio_name} = $studio_by_id->{ $date->{studio_id} }->{name};
} }
my $result = { my $result = {
project_id => $project_id, project_id => $project_id,
studio_id => $studio_id, studio_id => $studio_id,
dates => $timeslot_dates dates => $timeslot_dates
}; };
#copy entry values to params #copy entry values to params
for my $key ( keys %$result ) { for my $key ( keys %$result ) {
$params->{$key} = $result->{$key}; $params->{$key} = $result->{$key};
} }
my $template = template::check($config, 'studio_timeslot_dates'); my $template = template::check( $config, 'studio_timeslot_dates' );
template::process($config, 'print', $template, $params ); template::process( $config, 'print', $template, $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#actions and roles #actions and roles
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(show|save_schedule|delete_schedule|show_dates)$/ ) { if ( $params->{action} =~ /^(show|save_schedule|delete_schedule|show_dates)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#numeric values #numeric values
$checked->{exclude} = 0; $checked->{exclude} = 0;
for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id', 'schedule_id', 'schedule_studio_id' ) { for my $param ( 'id', 'project_id', 'studio_id', 'default_studio_id', 'schedule_id', 'schedule_studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( ( defined $params->{show_date} ) && ( $params->{show_date} =~ /^(\d\d\d\d)/ ) ) { if ( ( defined $params->{show_date} ) && ( $params->{show_date} =~ /^(\d\d\d\d)/ ) ) {
$checked->{show_date} = $1; $checked->{show_date} = $1;
} else { } else {
my $date = time::date_to_array( time::time_to_date() ); my $date = time::date_to_array( time::time_to_date() );
$checked->{show_date} = $date->[0]; $checked->{show_date} = $date->[0];
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
$checked->{template} = template::check($config, $params->{template}, 'studio_timeslots' ); $checked->{template} = template::check( $config, $params->{template}, 'studio_timeslots' );
for my $param ('frequency') { for my $param ('frequency') {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d+)/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d+)/ ) ) {
$checked->{$param} = $1; $checked->{$param} = $1;
} }
} }
for my $attr ( 'start', 'end' ) { for my $attr ( 'start', 'end' ) {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d[ T]\d\d\:\d\d)/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d[ T]\d\d\:\d\d)/ ) ) {
$checked->{$attr} = $1 . ':00'; $checked->{$attr} = $1 . ':00';
} }
} }
for my $attr ('end_date') { for my $attr ('end_date') {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) {
$checked->{$attr} = $1; $checked->{$attr} = $1;
} }
} }
return $checked; return $checked;
} }

View File

@@ -26,12 +26,12 @@ return if ( $user eq '' );
my $permissions = roles::get_user_permissions($config); my $permissions = roles::get_user_permissions($config);
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -40,11 +40,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -52,7 +52,7 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
print q{ print q{
@@ -61,183 +61,184 @@ print q{
}; };
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
save_studio( $config, $request ) if ( $params->{action} eq 'save' ); save_studio( $config, $request ) if ( $params->{action} eq 'save' );
delete_studio( $config, $request ) if ( $params->{action} eq 'delete' ); delete_studio( $config, $request ) if ( $params->{action} eq 'delete' );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
show_studios( $config, $request ); show_studios( $config, $request );
sub delete_studio { sub delete_studio {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_studio} == 1 ) { unless ( $permissions->{update_studio} == 1 ) {
uac::permissions_denied('update_studio'); uac::permissions_denied('update_studio');
return; return;
} }
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $columns = studios::get_columns($config); my $columns = studios::get_columns($config);
my $entry = {}; my $entry = {};
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( defined $columns->{$param} ) { if ( defined $columns->{$param} ) {
$entry->{$param} = $params->{$param} || ''; $entry->{$param} = $params->{$param} || '';
} }
} }
my $studio_id = $entry->{id} || ''; my $studio_id = $entry->{id} || '';
if ( $studio_id ne '' ) { if ( $studio_id ne '' ) {
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
project::unassign_studio( project::unassign_studio(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $studio_id studio_id => $studio_id
} }
); );
my $studio_assignments = project::get_studio_assignments( my $studio_assignments = project::get_studio_assignments(
$config, $config,
{ {
studio_id => $studio_id studio_id => $studio_id
} }
); );
unless ( scalar @$studio_assignments == 0 ) { unless ( scalar @$studio_assignments == 0 ) {
uac::print_info("Studio unassigned from project"); uac::print_info("Studio unassigned from project");
uac::print_warn("Studio is assigned to other projects, so it will not be deleted"); uac::print_warn("Studio is assigned to other projects, so it will not be deleted");
return undef; return undef;
} }
studios::delete( $config, $entry ); studios::delete( $config, $entry );
uac::print_info("Studio deleted"); uac::print_info("Studio deleted");
} }
} }
sub save_studio { sub save_studio {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_studio} == 1 ) { unless ( $permissions->{update_studio} == 1 ) {
uac::permissions_denied('update_studio'); uac::permissions_denied('update_studio');
return; return;
} }
#filter entry for studio columns #filter entry for studio columns
my $columns = studios::get_columns($config); my $columns = studios::get_columns($config);
my $entry = {}; my $entry = {};
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( defined $columns->{$param} ) { if ( defined $columns->{$param} ) {
$entry->{$param} = $params->{$param} || ''; $entry->{$param} = $params->{$param} || '';
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
if ( ( defined $entry->{id} ) && ( $entry ne '' ) ) { if ( ( defined $entry->{id} ) && ( $entry ne '' ) ) {
studios::update( $config, $entry ); studios::update( $config, $entry );
} else { } else {
my $studios = studios::get( $config, { name => $entry->{name} } ); my $studios = studios::get( $config, { name => $entry->{name} } );
if ( scalar @$studios > 0 ) { if ( scalar @$studios > 0 ) {
uac::print_error("studio with name '$entry->{name}' already exists"); uac::print_error("studio with name '$entry->{name}' already exists");
return; return;
} }
$entry->{id} = studios::insert( $config, $entry ); $entry->{id} = studios::insert( $config, $entry );
project::assign_studio( project::assign_studio(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $entry->{id} studio_id => $entry->{id}
} }
); );
} }
#insert series for single events (if not already existing) #insert series for single events (if not already existing)
my $studio_id = $entry->{id}; my $studio_id = $entry->{id};
my $single_series = series::get( my $single_series = series::get(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $studio_id, studio_id => $studio_id,
has_single_events => 1 has_single_events => 1
} }
); );
if ( scalar @$single_series == 0 ) { if ( scalar @$single_series == 0 ) {
series::insert( series::insert(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $studio_id, studio_id => $studio_id,
has_single_events => 1, has_single_events => 1,
count_episodes => 0, count_episodes => 0,
series_name => '_single_' series_name => '_single_'
} }
); );
} }
print qq{<div class="ok head">changes saved</div>}; print qq{<div class="ok head">changes saved</div>};
} }
sub show_studios { sub show_studios {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
my $studios = studios::get( my $studios = studios::get(
$config, $config,
{ {
project_id => $params->{project_id} project_id => $params->{project_id}
} }
); );
$params->{studios} = $studios; $params->{studios} = $studios;
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'studios' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'studios' } );
uac::set_template_permissions( $permissions, $params ); uac::set_template_permissions( $permissions, $params );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#template #template
my $template = ''; my $template = '';
$template = template::check($config, $params->{template}, 'studios' ); $template = template::check( $config, $params->{template}, 'studios' );
$checked->{template} = $template; $checked->{template} = $template;
#actions #actions
my $action = ''; my $action = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(save|delete)$/ ) { if ( $params->{action} =~ /^(save|delete)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
for my $param ( 'name', 'description', 'location', 'stream', 'google_calendar', 'image' ) { for my $param ( 'name', 'description', 'location', 'stream', 'google_calendar', 'image' ) {
if ( defined $params->{$param} ) { if ( defined $params->{$param} ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
#numeric values #numeric values
for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'id' ) { for my $param ( 'project_id', 'studio_id', 'default_studio_id', 'id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
return $checked; return $checked;
} }

View File

@@ -24,12 +24,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -38,11 +38,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -51,162 +51,163 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
our $errors = []; our $errors = [];
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
update_settings( $config, $request ) if ( $params->{action} eq 'save' ); update_settings( $config, $request ) if ( $params->{action} eq 'save' );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
show_settings( $config, $request ); show_settings( $config, $request );
sub show_settings { sub show_settings {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
# unless ($permissions->{read_user}==1){ # unless ($permissions->{read_user}==1){
# uac::permissions_denied('read_user'); # uac::permissions_denied('read_user');
# return; # return;
# } # }
my $user = $params->{presets}->{user}; my $user = $params->{presets}->{user};
my $colors = user_settings::getColors( $config, { user => $user } ); my $colors = user_settings::getColors( $config, { user => $user } );
#map colors to params #map colors to params
my @colors = (); my @colors = ();
my $c = 0; my $c = 0;
for my $color (@$colors) { for my $color (@$colors) {
push @colors, push @colors,
{ {
title => $color->{name}, title => $color->{name},
class => $color->{css}, class => $color->{css},
name => 'color_' . $c, name => 'color_' . $c,
value => $color->{color} value => $color->{color}
}; };
$c++; $c++;
} }
$params->{colors} = \@colors; $params->{colors} = \@colors;
$params->{css} = user_settings::getColorCss( $config, { user => $user } ); $params->{css} = user_settings::getColorCss( $config, { user => $user } );
$params->{permissions} = $permissions; $params->{permissions} = $permissions;
$params->{errors} = $errors; $params->{errors} = $errors;
my $user_settings = user_settings::get( $config, { user => $user } ); my $user_settings = user_settings::get( $config, { user => $user } );
my $language = $user_settings->{language} || 'en'; my $language = $user_settings->{language} || 'en';
$params->{language} = $language; $params->{language} = $language;
$params->{ 'language_' . $language } = 1; $params->{ 'language_' . $language } = 1;
my $period = $user_settings->{period} || 'month'; my $period = $user_settings->{period} || 'month';
$params->{ 'period_' . $period } = 1; $params->{ 'period_' . $period } = 1;
$params->{loc} = localization::get( $config, { language => $language, file => 'user_settings' } ); $params->{loc} = localization::get( $config, { language => $language, file => 'user_settings' } );
#print STDERR Dumper($params->{loc}); #print STDERR Dumper($params->{loc});
for my $color ( @{ $params->{colors} } ) { for my $color ( @{ $params->{colors} } ) {
$color->{title} = $params->{loc}->{ $color->{title} }; $color->{title} = $params->{loc}->{ $color->{title} };
} }
uac::set_template_permissions( $permissions, $params ); uac::set_template_permissions( $permissions, $params );
#print Dumper($permissions); #print Dumper($permissions);
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
#print '<pre>'.Dumper($user_settings); #print '<pre>'.Dumper($user_settings);
} }
sub update_settings { sub update_settings {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
my $user = $params->{presets}->{user}; my $user = $params->{presets}->{user};
# map params to colors # map params to colors
my @colors = (); my @colors = ();
my $c = 0; my $c = 0;
for my $color ( @{$user_settings::defaultColors} ) { for my $color ( @{$user_settings::defaultColors} ) {
if ( defined $params->{ 'color_' . $c } ) { if ( defined $params->{ 'color_' . $c } ) {
push @colors, $color->{css} . '=' . $params->{ 'color_' . $c }; push @colors, $color->{css} . '=' . $params->{ 'color_' . $c };
} else { } else {
push @colors, $color->{css} . '=' . $color->{color}; push @colors, $color->{css} . '=' . $color->{color};
} }
$c++; $c++;
} }
my $settings = { my $settings = {
user => $user, user => $user,
colors => join( "\n", @colors ), colors => join( "\n", @colors ),
language => $params->{language}, language => $params->{language},
period => $params->{period} period => $params->{period}
}; };
my $results = user_settings::get( $config, { user => $user } ); my $results = user_settings::get( $config, { user => $user } );
if ( defined $results ) { if ( defined $results ) {
uac::print_info("update"); uac::print_info("update");
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
user_settings::update( $config, $settings ); user_settings::update( $config, $settings );
} else { } else {
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
uac::print_info("insert"); uac::print_info("insert");
user_settings::insert( $config, $settings ); user_settings::insert( $config, $settings );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#template #template
my $template = ''; my $template = '';
$template = template::check($config, $params->{template}, 'user_settings' ); $template = template::check( $config, $params->{template}, 'user_settings' );
$checked->{template} = $template; $checked->{template} = $template;
#numeric values #numeric values
for my $param ( 'project_id', 'default_studio_id', 'studio_id' ) { for my $param ( 'project_id', 'default_studio_id', 'studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
for my $param ( keys %$params ) { for my $param ( keys %$params ) {
if ( ( defined $params->{$param} ) && ( $param =~ /^(color\_\d+)$/ ) ) { if ( ( defined $params->{$param} ) && ( $param =~ /^(color\_\d+)$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
$checked->{language} = 'en'; $checked->{language} = 'en';
if ( ( defined $params->{language} ) && ( $params->{language} =~ /^de$/ ) ) { if ( ( defined $params->{language} ) && ( $params->{language} =~ /^de$/ ) ) {
$checked->{language} = 'de'; $checked->{language} = 'de';
} }
if ( defined $params->{period} ) { if ( defined $params->{period} ) {
if ( $params->{period} =~ /(\S+)/ ) { if ( $params->{period} =~ /(\S+)/ ) {
$checked->{period} = $1; $checked->{period} = $1;
} }
} }
#actions #actions
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(save)$/ ) { if ( $params->{action} =~ /^(save)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
return $checked; return $checked;
} }
sub error { sub error {
push @$errors, { error => $_[0] }; push @$errors, { error => $_[0] };
} }

View File

@@ -26,12 +26,12 @@ my ( $user, $expires ) = auth::get_user( $cgi, $config );
return if ( ( !defined $user ) || ( $user eq '' ) ); return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
user => $user, user => $user,
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id} studio_id => $params->{studio_id}
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -40,11 +40,11 @@ $params->{project_id} = $user_presets->{project_id}
if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) ); if ( ( !( defined $params->{action} ) ) || ( $params->{action} eq '' ) || ( $params->{action} eq 'login' ) );
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -52,7 +52,7 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
our $errors = []; our $errors = [];
@@ -60,51 +60,52 @@ our $errors = [];
show_stats( $config, $request ); show_stats( $config, $request );
sub show_stats { sub show_stats {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_user_stats} ) { unless ( $permissions->{read_user_stats} ) {
uac::permissions_denied('read_user_stats'); uac::permissions_denied('read_user_stats');
return; return;
} }
print STDERR "continue\n"; print STDERR "continue\n";
$params->{user_stats} = user_stats::get_stats( $config, $params ); $params->{user_stats} = user_stats::get_stats( $config, $params );
$params->{permissions} = $permissions; $params->{permissions} = $permissions;
$params->{errors} = $errors; $params->{errors} = $errors;
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'user_stats' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'user_stats' } );
uac::set_template_permissions( $permissions, $params ); uac::set_template_permissions( $permissions, $params );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
#template #template
my $template = ''; my $template = '';
$template = template::check($config, $params->{template}, 'user_stats' ); $template = template::check( $config, $params->{template}, 'user_stats' );
$checked->{template} = $template; $checked->{template} = $template;
#numeric values #numeric values
for my $param ( 'project_id', 'default_studio_id', 'studio_id', 'series_id' ) { for my $param ( 'project_id', 'default_studio_id', 'studio_id', 'series_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
return $checked; return $checked;
} }
sub error { sub error {
push @$errors, { error => $_[0] }; push @$errors, { error => $_[0] };
} }

View File

@@ -39,7 +39,7 @@ my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params($config, $params),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
@@ -399,6 +399,7 @@ sub update_user_roles {
} }
sub check_params { sub check_params {
my $config = shift;
my $params = shift; my $params = shift;
my $checked = {}; my $checked = {};

View File

@@ -5,7 +5,8 @@ use strict;
use Data::Dumper; use Data::Dumper;
use URI::Escape(); use URI::Escape();
use Encode();
#use Encode();
use params(); use params();
use config(); use config();
@@ -32,12 +33,12 @@ return if ( ( !defined $user ) || ( $user eq '' ) );
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $user_presets = uac::get_user_presets( my $user_presets = uac::get_user_presets(
$config, $config,
{ {
project_id => $params->{project_id}, project_id => $params->{project_id},
studio_id => $params->{studio_id}, studio_id => $params->{studio_id},
user => $user user => $user
} }
); );
$params->{default_studio_id} = $user_presets->{studio_id}; $params->{default_studio_id} = $user_presets->{studio_id};
$params->{studio_id} = $params->{default_studio_id} $params->{studio_id} = $params->{default_studio_id}
@@ -47,11 +48,11 @@ $params->{project_id} = $user_presets->{project_id}
#print STDERR $params->{project_id}."\n"; #print STDERR $params->{project_id}."\n";
my $request = { my $request = {
url => $ENV{QUERY_STRING} || '', url => $ENV{QUERY_STRING} || '',
params => { params => {
original => $params, original => $params,
checked => check_params($params), checked => check_params( $config, $params ),
}, },
}; };
$request = uac::prepare_request( $request, $user_presets ); $request = uac::prepare_request( $request, $user_presets );
$params = $request->{params}->{checked}; $params = $request->{params}->{checked};
@@ -59,12 +60,12 @@ $params = $request->{params}->{checked};
#process header #process header
my $headerParams = uac::set_template_permissions( $request->{permissions}, $params ); my $headerParams = uac::set_template_permissions( $request->{permissions}, $params );
$headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } ); $headerParams->{loc} = localization::get( $config, { user => $user, file => 'menu' } );
template::process($config, 'print', template::check($config, 'default.html'), $headerParams ); template::process( $config, 'print', template::check( $config, 'default.html' ), $headerParams );
return unless uac::check( $config, $params, $user_presets ) == 1; return unless uac::check( $config, $params, $user_presets ) == 1;
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
save_schedule( $config, $request ) if ( $params->{action} eq 'save_schedule' ); save_schedule( $config, $request ) if ( $params->{action} eq 'save_schedule' );
delete_schedule( $config, $request ) if ( $params->{action} eq 'delete_schedule' ); delete_schedule( $config, $request ) if ( $params->{action} eq 'delete_schedule' );
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
@@ -74,267 +75,268 @@ return;
#insert or update a schedule and update all schedule dates #insert or update a schedule and update all schedule dates
sub save_schedule { sub save_schedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{update_schedule} == 1 ) { unless ( $permissions->{update_schedule} == 1 ) {
uac::permissions_denied('update_schedule'); uac::permissions_denied('update_schedule');
return; return;
} }
#print Dumper($params); #print Dumper($params);
for my $attr ( 'project_id', 'studio_id', 'start' ) { for my $attr ( 'project_id', 'studio_id', 'start' ) {
unless ( defined $params->{$attr} ) { unless ( defined $params->{$attr} ) {
uac::print_error( $attr . ' not given!' ); uac::print_error( $attr . ' not given!' );
return; return;
} }
} }
my $entry = {}; my $entry = {};
for my $attr ( for my $attr (
'project_id', 'studio_id', 'start', 'duration', 'exclude', 'period_type', 'end', 'frequency', 'project_id', 'studio_id', 'start', 'duration', 'exclude', 'period_type', 'end', 'frequency',
'weekday', 'week_of_month', 'month', 'title', 'type' 'weekday', 'week_of_month', 'month', 'title', 'type'
) )
{ {
$entry->{$attr} = $params->{$attr} if ( defined $params->{$attr} ); $entry->{$attr} = $params->{$attr} if ( defined $params->{$attr} );
} }
my $found = 0; my $found = 0;
for my $type ( 'single', 'days', 'week_of_month' ) { for my $type ( 'single', 'days', 'week_of_month' ) {
$found = 1 if ( $entry->{period_type} eq $type ); $found = 1 if ( $entry->{period_type} eq $type );
} }
if ( $found == 0 ) { if ( $found == 0 ) {
uac::print_error('no period type selected!'); uac::print_error('no period type selected!');
return; return;
} }
$entry->{exclude} = 0 if ( $entry->{exclude} ne '1' ); $entry->{exclude} = 0 if ( $entry->{exclude} ne '1' );
if ( ( $entry->{end} ne '' ) && ( $entry->{end} le $entry->{start} ) ) { if ( ( $entry->{end} ne '' ) && ( $entry->{end} le $entry->{start} ) ) {
uac::print_error('start date should be before end date!'); uac::print_error('start date should be before end date!');
return; return;
} }
#TODO: check if schedule is in studio_timeslots #TODO: check if schedule is in studio_timeslots
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
if ( defined $params->{schedule_id} ) { if ( defined $params->{schedule_id} ) {
$entry->{schedule_id} = $params->{schedule_id}; $entry->{schedule_id} = $params->{schedule_id};
work_schedule::update( $config, $entry ); work_schedule::update( $config, $entry );
#timeslots are checked inside #timeslots are checked inside
my $updates = work_dates::update( $config, $entry ); my $updates = work_dates::update( $config, $entry );
uac::print_info("schedule saved. $updates dates scheduled"); uac::print_info("schedule saved. $updates dates scheduled");
} else { } else {
my $schedule_id = work_schedule::insert( $config, $entry ); my $schedule_id = work_schedule::insert( $config, $entry );
$entry->{schedule_id} = $schedule_id; $entry->{schedule_id} = $schedule_id;
#timeslots are checked inside #timeslots are checked inside
my $updates = work_dates::update( $config, $entry ); my $updates = work_dates::update( $config, $entry );
uac::print_info("schedule added. $updates dates added"); uac::print_info("schedule added. $updates dates added");
} }
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
} }
sub delete_schedule { sub delete_schedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{delete_schedule} == 1 ) { unless ( $permissions->{delete_schedule} == 1 ) {
uac::permissions_denied('delete_schedule'); uac::permissions_denied('delete_schedule');
return; return;
} }
my $entry = {}; my $entry = {};
for my $attr ( 'project_id', 'studio_id', 'schedule_id' ) { for my $attr ( 'project_id', 'studio_id', 'schedule_id' ) {
if ( defined $params->{$attr} ) { if ( defined $params->{$attr} ) {
$entry->{$attr} = $params->{$attr}; $entry->{$attr} = $params->{$attr};
} else { } else {
uac::print_error( $attr . ' not given!' ); uac::print_error( $attr . ' not given!' );
return; return;
} }
} }
$config->{access}->{write} = 1; $config->{access}->{write} = 1;
$entry->{schedule_id} = $params->{schedule_id}; $entry->{schedule_id} = $params->{schedule_id};
work_schedule::delete( $config, $entry ); work_schedule::delete( $config, $entry );
work_dates::update( $config, $entry ); work_dates::update( $config, $entry );
uac::print_info("schedule deleted"); uac::print_info("schedule deleted");
} }
sub show_work_schedule { sub show_work_schedule {
my $config = shift; my $config = shift;
my $request = shift; my $request = shift;
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
my $params = $request->{params}->{checked}; my $params = $request->{params}->{checked};
my $permissions = $request->{permissions}; my $permissions = $request->{permissions};
unless ( $permissions->{read_series} == 1 ) { unless ( $permissions->{read_series} == 1 ) {
uac::permissions_denied('read_series'); uac::permissions_denied('read_series');
return; return;
} }
for my $param ( 'project_id', 'studio_id' ) { for my $param ( 'project_id', 'studio_id' ) {
unless ( defined $params->{$param} ) { unless ( defined $params->{$param} ) {
uac::print_error("missing $param"); uac::print_error("missing $param");
return; return;
} }
} }
#this will be updated later (especially allow_update_events) #this will be updated later (especially allow_update_events)
for my $permission ( keys %{ $request->{permissions} } ) { for my $permission ( keys %{ $request->{permissions} } ) {
$params->{'allow'}->{$permission} = $request->{permissions}->{$permission}; $params->{'allow'}->{$permission} = $request->{permissions}->{$permission};
} }
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
#add schedules #add schedules
my $schedules = work_schedule::get( my $schedules = work_schedule::get(
$config, $config,
{ {
project_id => $project_id, project_id => $project_id,
studio_id => $studio_id, studio_id => $studio_id,
} }
); );
#remove seconds from dates #remove seconds from dates
for my $schedule (@$schedules) { for my $schedule (@$schedules) {
$schedule->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $schedule->{start}; $schedule->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $schedule->{start};
$schedule->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $schedule->{end}; $schedule->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $schedule->{end};
#detect schedule type #detect schedule type
if ( $schedule->{period_type} eq '' ) { if ( $schedule->{period_type} eq '' ) {
$schedule->{period_type} = 'week_of_month'; $schedule->{period_type} = 'week_of_month';
$schedule->{period_type} = 'days' unless ( $schedule->{week_of_month} =~ /\d/ ); $schedule->{period_type} = 'days' unless ( $schedule->{week_of_month} =~ /\d/ );
$schedule->{period_type} = 'single' unless ( $schedule->{end} =~ /\d/ ); $schedule->{period_type} = 'single' unless ( $schedule->{end} =~ /\d/ );
} }
$schedule->{ 'period_type_' . $schedule->{period_type} } = 1; $schedule->{ 'period_type_' . $schedule->{period_type} } = 1;
if ( $params->{schedule_id} eq $schedule->{schedule_id} ) { if ( $params->{schedule_id} eq $schedule->{schedule_id} ) {
$schedule->{selected} = 1; $schedule->{selected} = 1;
} }
#print STDERR $schedule->{period_type}."\n"; #print STDERR $schedule->{period_type}."\n";
} }
my $serie = {}; my $serie = {};
$serie->{schedule} = $schedules; $serie->{schedule} = $schedules;
$serie->{start} = $params->{start}; $serie->{start} = $params->{start};
$serie->{end} = $params->{end}; $serie->{end} = $params->{end};
$serie->{frequency} = $params->{frequency}; $serie->{frequency} = $params->{frequency};
$serie->{duration} = $serie->{default_duration}; $serie->{duration} = $serie->{default_duration};
my $duration = $params->{duration} || ''; my $duration = $params->{duration} || '';
$serie->{duration} = $params->{duration} if $duration ne ''; $serie->{duration} = $params->{duration} if $duration ne '';
$serie->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $serie->{start}; $serie->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $serie->{start};
$serie->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $serie->{end}; $serie->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/ if defined $serie->{end};
#add series dates #add series dates
my $work_dates = work_dates::get( my $work_dates = work_dates::get(
$config, $config,
{ {
project_id => $project_id, project_id => $project_id,
studio_id => $studio_id, studio_id => $studio_id,
} }
); );
#remove seconds from dates #remove seconds from dates
for my $date (@$work_dates) { for my $date (@$work_dates) {
$date->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $date->{start} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
$date->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/; $date->{end} =~ s/(\d\d\:\d\d)\:\d\d/$1/;
} }
$serie->{work_dates} = $work_dates; $serie->{work_dates} = $work_dates;
$serie->{show_hint_to_add_schedule} = $params->{show_hint_to_add_schedule}; $serie->{show_hint_to_add_schedule} = $params->{show_hint_to_add_schedule};
#copy series to params #copy series to params
#$params->{series}=[$serie]; #$params->{series}=[$serie];
for my $key ( keys %$serie ) { for my $key ( keys %$serie ) {
$params->{$key} = $serie->{$key}; $params->{$key} = $serie->{$key};
} }
#print STDERR '<pre>'.Dumper($params).'</pre>'; #print STDERR '<pre>'.Dumper($params).'</pre>';
$params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'work_time' } ); $params->{loc} = localization::get( $config, { user => $params->{presets}->{user}, file => 'work_time' } );
template::process($config, 'print', $params->{template}, $params ); template::process( $config, 'print', $params->{template}, $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
#actions and roles #actions and roles
$checked->{action} = ''; $checked->{action} = '';
if ( defined $params->{action} ) { if ( defined $params->{action} ) {
if ( $params->{action} =~ /^(show|save_schedule|delete_schedule)$/ ) { if ( $params->{action} =~ /^(show|save_schedule|delete_schedule)$/ ) {
$checked->{action} = $params->{action}; $checked->{action} = $params->{action};
} }
} }
#numeric values #numeric values
$checked->{exclude} = 0; $checked->{exclude} = 0;
for my $param ( for my $param (
'project_id', 'studio_id', 'default_studio_id', 'schedule_id', 'project_id', 'studio_id', 'default_studio_id', 'schedule_id',
'exclude', 'show_hint_to_add_schedule', 'weekday week_of_month', 'month' 'exclude', 'show_hint_to_add_schedule', 'weekday week_of_month', 'month'
) )
{ {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
if ( defined $checked->{studio_id} ) { if ( defined $checked->{studio_id} ) {
$checked->{default_studio_id} = $checked->{studio_id}; $checked->{default_studio_id} = $checked->{studio_id};
} else { } else {
$checked->{studio_id} = -1; $checked->{studio_id} = -1;
} }
$checked->{template} = template::check($config, $params->{template}, 'edit_work_time' ); $checked->{template} = template::check( $config, $params->{template}, 'edit_work_time' );
if ( ( defined $checked->{action} ) && ( $checked->{action} eq 'save_schedule' ) ) { if ( ( defined $checked->{action} ) && ( $checked->{action} eq 'save_schedule' ) ) {
#set defaults #set defaults
$checked->{create_events} = 0; $checked->{create_events} = 0;
$checked->{publish_events} = 0; $checked->{publish_events} = 0;
} }
for my $param ( 'frequency', 'duration', 'default_duration' ) { for my $param ( 'frequency', 'duration', 'default_duration' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d+)/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /(\d+)/ ) ) {
$checked->{$param} = $1; $checked->{$param} = $1;
} }
} }
#scalars #scalars
for my $param ( 'from', 'till', 'period_type', 'type', 'title' ) { for my $param ( 'from', 'till', 'period_type', 'type', 'title' ) {
if ( defined $params->{$param} ) { if ( defined $params->{$param} ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
$checked->{$param} =~ s/^\s+//g; $checked->{$param} =~ s/^\s+//g;
$checked->{$param} =~ s/\s+$//g; $checked->{$param} =~ s/\s+$//g;
} }
} }
for my $attr ('start') { for my $attr ('start') {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d[ T]\d\d\:\d\d)/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d[ T]\d\d\:\d\d)/ ) ) {
$checked->{$attr} = $1 . ':00'; $checked->{$attr} = $1 . ':00';
} }
} }
for my $attr ('end') { for my $attr ('end') {
if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) { if ( ( defined $params->{$attr} ) && ( $params->{$attr} =~ /(\d\d\d\d\-\d\d\-\d\d)/ ) ) {
$checked->{$attr} = $1; $checked->{$attr} = $1;
} }
} }
return $checked; return $checked;
} }

View File

@@ -1,4 +1,4 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
use warnings "all"; use warnings "all";
use strict; use strict;
@@ -18,84 +18,85 @@ my $r = shift;
my $config = config::get('config/config.cgi'); my $config = config::get('config/config.cgi');
$params = check_params($params); $params = check_params( $config, $params );
list_series( $config, $params ); list_series( $config, $params );
sub list_series { sub list_series {
my $config = shift; my $config = shift;
my $params = shift; my $params = shift;
$config->{access}->{write} = 0; $config->{access}->{write} = 0;
my $project_id = $params->{project_id}; my $project_id = $params->{project_id};
my $studio_id = $params->{studio_id}; my $studio_id = $params->{studio_id};
my $location = $params->{location}; my $location = $params->{location};
if (defined $location){ if ( defined $location ) {
my $studios = studios::get( my $studios = studios::get(
$config, $config,
{ {
project_id => $project_id, project_id => $project_id,
location => $location location => $location
} }
); );
$studio_id = $studios->[0]->{id}; $studio_id = $studios->[0]->{id};
} }
my $conditions = {}; my $conditions = {};
$conditions->{project_id} = $project_id if defined $project_id; $conditions->{project_id} = $project_id if defined $project_id;
$conditions->{studio_id} = $studio_id if defined $studio_id; $conditions->{studio_id} = $studio_id if defined $studio_id;
if (scalar (keys %$conditions) == 0){ if ( scalar( keys %$conditions ) == 0 ) {
$params->{info} .= "missing parameters"; $params->{info} .= "missing parameters";
return; return;
} }
$params->{info}.= Dumper($conditions); $params->{info} .= Dumper($conditions);
my $series = series::get_event_age( $config, $conditions ); my $series = series::get_event_age( $config, $conditions );
my $series2 = []; my $series2 = [];
for my $serie ( sort { lc $a->{series_name} cmp lc $b->{series_name} } (@$series) ) { for my $serie ( sort { lc $a->{series_name} cmp lc $b->{series_name} } (@$series) ) {
next if $serie->{days_over} > 80 ; next if $serie->{days_over} > 80;
next if $serie->{days_over} == 0 ; next if $serie->{days_over} == 0;
next unless defined $serie->{series_name}; next unless defined $serie->{series_name};
next if $serie->{series_name} eq '_single_'; next if $serie->{series_name} eq '_single_';
push @$series2, $serie; push @$series2, $serie;
} }
$params->{series} = $series2; $params->{series} = $series2;
$params->{info}.="no results found" if scalar(@$series)==0; $params->{info} .= "no results found" if scalar(@$series) == 0;
$params->{info}=''; $params->{info} = '';
template::process($config, 'print', 'templates/series.html', $params ); template::process( $config, 'print', 'templates/series.html', $params );
} }
sub check_params { sub check_params {
my $params = shift; my $config = shift;
my $params = shift;
my $checked = {}; my $checked = {};
my $debug = $params->{debug} || ''; my $debug = $params->{debug} || '';
if ( $debug =~ /([a-z\_\,]+)/ ) { if ( $debug =~ /([a-z\_\,]+)/ ) {
$debug = $1; $debug = $1;
} }
$checked->{debug} = $debug; $checked->{debug} = $debug;
for my $param ('project_id', 'studio_id') { for my $param ( 'project_id', 'studio_id' ) {
if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) { if ( ( defined $params->{$param} ) && ( $params->{$param} =~ /^\d+$/ ) ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
} }
} }
for my $param ( 'location') { for my $param ('location') {
if ( defined $params->{$param} ) { if ( defined $params->{$param} ) {
$checked->{$param} = $params->{$param}; $checked->{$param} = $params->{$param};
$checked->{$param} =~ s/^\s+//g; $checked->{$param} =~ s/^\s+//g;
$checked->{$param} =~ s/\s+$//g; $checked->{$param} =~ s/\s+$//g;
} }
} }
return $checked; return $checked;
} }