add event creation batch, lib changes for past changes

This commit is contained in:
Milan
2018-03-17 13:38:36 +01:00
parent aadf3fd06e
commit 077d9c5a53
15 changed files with 885 additions and 114 deletions

View File

@@ -2,9 +2,14 @@ package eventOps;
use warnings "all";
use strict;
use uac;
use events;
use series;
use series_dates;
use time;
use studios;
use series_events;
use user_stats;
require Exporter;
our @ISA = qw(Exporter);
@@ -52,10 +57,11 @@ sub setAttributesFromSeriesTemplate{
}
sub setAttributesFromSchedule{
my $config=shift;
my $params=shift;
my $event=shift;
my $config = shift;
my $params = shift;
my $event = shift;
#print 'setAttributesFromSchedule:'.Dumper($params);
#set attributes from schedule
my $schedules=series_dates::get(
$config, {
@@ -134,3 +140,189 @@ sub getRecurrenceBaseId{
return $event->{event_id};
}
# get a new event for given series
sub getNewEvent{
my $config = shift;
my $params = shift;
my $action = shift;
# check for missing parameters
my $required_fields = [ 'project_id', 'studio_id', 'series_id' ];
push @$required_fields, 'start_date' if ( $action eq 'show_new_event_from_schedule' );
my $event = {};
for my $attr (@$required_fields) {
unless ( defined $params->{$attr} ) {
uac::print_error( "missing " . $attr );
return undef;
}
$event->{$attr} = $params->{$attr};
}
my $serie = eventOps::setAttributesFromSeriesTemplate( $config, $params, $event );
#print Dumper($params);
if ( $action eq 'show_new_event_from_schedule' ) {
eventOps::setAttributesFromSchedule( $config, $params, $event );
} else {
eventOps::setAttributesForCurrentTime( $serie, $event );
}
if ( defined $params->{source_event_id} ) {
#overwrite by existing event (rerun)
eventOps::setAttributesFromOtherEvent( $config, $params, $event );
}
$event = events::calc_dates( $config, $event );
if ( $serie->{has_single_events} eq '1' ) {
$event->{has_single_events} = 1;
$event->{series_name} = undef;
$event->{episode} = undef;
}
#get next episode
$event->{episode} = series::get_next_episode(
$config,
{
project_id => $params->{project_id},
studio_id => $params->{studio_id},
series_id => $params->{series_id},
}
);
delete $event->{episode} if $event->{episode} == 0;
$event->{disable_event_sync} = 1;
$event->{published} = 1;
$event->{new_event} = 1;
return $event;
}
# add user, action
sub createEvent{
my $request = shift;
my $event = shift;
my $action = shift;
my $config = $request->{config};
my $permissions = $request->{permissions};
my $user = $request->{user};
my $checklist = [ 'studio', 'user', 'create_events', 'studio_timeslots' ];
if ( $action eq 'create_event_from_schedule' ) {
push @$checklist, 'schedule' if $action eq 'create_event_from_schedule';
}
#use Data::Dumper;
#print Dumper($checklist);
#print Dumper($request);
#print Dumper($event);
my $start = $event->{start_date},
my $end = time::add_minutes_to_datetime( $event->{start_date}, $event->{duration} );
#print Dumper($start);
#print Dumper($end);
my $result = series_events::check_permission(
$request,
{
permission => 'create_event,create_event_of_series',
check_for => $checklist,
project_id => $event->{project_id},
studio_id => $event->{studio_id},
series_id => $event->{series_id},
start_date => $event->{start_date},
draft => $event->{draft},
start => $start,
end => $end,
}
);
#print Dumper(" start_date => $event->{start_date}");
unless ( $result eq '1' ) {
uac::print_error($result);
return undef;
}
#get series name from series
my $series = series::get(
$config,
{
project_id => $event->{project_id},
studio_id => $event->{studio_id},
series_id => $event->{series_id},
}
);
if ( @$series != 1 ) {
uac::print_error("series not found");
return undef;
}
my $serie = $series->[0];
#get studio location from studios
my $studios = studios::get(
$config,
{
project_id => $event->{project_id},
studio_id => $event->{studio_id}
}
);
unless ( defined $studios ) {
uac::print_error("studio not found");
return undef;
}
unless ( @$studios == 1 ) {
uac::print_error("studio not found");
return undef;
}
my $studio = $studios->[0];
$config->{access}->{write} = 1;
#insert event content and save history
my $event_id = series_events::insert_event(
$config,
{
project_id => $event->{project_id},
studio => $studio,
serie => $serie,
event => $event,
user => $user
}
);
uac::print_error("could not insert event") if $event_id <= 0;
#assign event to series
$result = series::assign_event(
$config,
{
project_id => $event->{project_id},
studio_id => $event->{studio_id},
series_id => $event->{series_id},
event_id => $event_id
}
);
uac::print_error("could not assign event") unless defined $result;
#update recurrences
$event->{event_id} = $event_id;
series::update_recurring_events( $config, $event );
# update user stats
user_stats::increase(
$config,
'create_events',
{
project_id => $event->{project_id},
studio_id => $event->{studio_id},
series_id => $event->{series_id},
user => $user
}
);
return $event_id;
}
return 1;