copying events: save user selection

On copying events from another studio selection will be saved.
The next time one wants to copy saved presets are preselected.
This simplifies to frequently rebroadcast shows from another project.
This commit is contained in:
Milan
2021-02-01 22:58:23 +01:00
parent 2f35676c24
commit ef84ca07a3
7 changed files with 348 additions and 18 deletions

View File

@@ -88,8 +88,33 @@ function updateEventSelection(resultElemId){
// set selected eventId at external result selector
function selectEventAction(resultElemId){
var eventId=$('#selectEvent #eventId').val();
var projectId = $('#selectEvent #projectId').val();
var studioId = $('#selectEvent #studioId').val();
var seriesId = $('#selectEvent #seriesId').val();
var eventId = $('#selectEvent #eventId').val();
if (eventId<=0) return;
var filterProjectStudio = $('#selectEvent #selectProjectStudio').length!=0 ? 1:0;
var filterSeries = $('#selectEvent #selectSeries').length!=0 ? 1:0;
var url = "user-selected-event.cgi";
url += "?project_id=" + getProjectId();
url += "&studio_id=" + getStudioId();
url += "&series_id=" + getUrlParameter("series_id");
url += "&filter_project_studio=" + filterProjectStudio;
url += "&filter_series=" + filterSeries;
url += "&selected_project=" + projectId;
url += "&selected_studio=" + studioId;
url += "&selected_series=" + seriesId;
url += "&selected_event=" + eventId;
$.get(url).done(function() {
console.log("success: "+url)
}).fail(function() {
console.log("failed: "+url)
});
// set the result value
$('#'+resultElemId).val( eventId );
// trigger the change event for invisble form elements

View File

@@ -16,6 +16,7 @@ use uac();
use series();
use localization();
use user_selected_events();
binmode STDOUT, ":utf8";
@@ -70,11 +71,21 @@ sub show_events {
return;
}
my $entry = {
user => $request->{user},
project_id => $params->{p_id},
studio_id => $params->{s_id},
series_id => $params->{series_id},
filter_project_studio => $params->{selectProjectStudio},
filter_series => $params->{selectSeries},
};
my $preset = user_selected_events::get($config, $entry);
# get user projects
my $user_projects = uac::get_projects_by_user( $config, { user => $request->{user} } );
my $projects = {};
my $project_by_id = {};
for my $project (@$user_projects) {
$projects->{ $project->{project_id} } = $project;
$project_by_id->{ $project->{project_id} } = $project;
}
# get user studios
@@ -82,32 +93,64 @@ sub show_events {
for my $studio (@$user_studios) {
my $project_id = $studio->{project_id};
my $studio_id = $studio->{id};
$studio->{project_name} = $projects->{$project_id}->{name};
$studio->{selected} = 1 if ( $project_id eq $params->{p_id} ) && ( $studio_id eq $params->{s_id} );
$studio->{project_name} = $project_by_id->{$project_id}->{name};
if ($preset) {
$studio->{selected} = 1 if $project_id eq $preset->{selected_project} and $studio_id eq $preset->{selected_studio};
} else {
$studio->{selected} = 1 if $project_id eq $params->{p_id} and $studio_id eq $params->{s_id};
}
}
# get series
my $options = {};
$options->{project_id} = $params->{p_id} if defined $params->{p_id};
$options->{studio_id} = $params->{s_id} if defined $params->{s_id};
if ($preset){
$options->{project_id} = $preset->{selected_project};
$options->{studio_id} = $preset->{selected_studio};
}else{
$options->{project_id} = $params->{p_id} if defined $params->{p_id};
$options->{studio_id} = $params->{s_id} if defined $params->{s_id};
}
my $series = series::get( $config, $options );
for my $serie (@$series) {
$serie->{selected} = 1 if ( defined $params->{series_id} ) && ( $serie->{series_id} eq $params->{series_id} );
if ( defined $params->{series_id} ){
if ($preset){
$serie->{selected} = 1 if $serie->{series_id} eq $preset->{selected_series};
} else {
$serie->{selected} = 1 if $serie->{series_id} eq $params->{series_id};
}
}
$serie->{series_name} = 'Einzelsendung' if $serie->{series_name} eq '_single_';
}
# get events
$options->{series_id} = $params->{series_id} if defined $params->{series_id};
if ($preset){
$options->{series_id} = $preset->{selected_series};
}else{
$options->{series_id} = $params->{series_id} if defined $params->{series_id};
}
$options->{from_date} = $params->{from_date} if defined $params->{from_date};
$options->{till_date} = $params->{till_date} if defined $params->{till_date};
$options->{set_no_listen_keys} = 1;
my $events = series::get_events( $config, $options );
my $preset_year = '';
for my $event ( @$events ) {
if ($preset and $preset->{selected_event} eq $event->{id}){
$event->{selected} = 1;
$preset_year = (split /\-/, $event->{start_date})[0];
}
}
# filter by year
my $years = [];
for my $year ( 2005 .. 2025 ) {
my $date = { year => $year };
$date->{selected} = 1 if ( defined $params->{from_date} ) && ( $params->{from_date} eq $year . '-01-01' );
if ( $preset ){
$date->{selected} = 1 if $preset_year eq $year;
}else{
$date->{selected} = 1 if ( defined $params->{from_date} ) && ( $params->{from_date} eq $year . '-01-01' );
}
push @$years, $date;
}

View File

@@ -15,7 +15,9 @@
if (series_id=='')return false;
$('#assignments_form input[name="series_id"]').val(series_id);
var url="assign-series.cgi?project_id="+project_id+'&studio_id='+studio_id+'&series_id='+series_id+'&action=assign_series';
$('#assignments_form input[name="action"]').val("assign_series");
//var url="assign-series.cgi?project_id="+project_id+'&studio_id='+studio_id+'&series_id='+series_id+'&action=assign_series';
//console.log("url:"+url);
$('#assignments_form').submit();
return false;
}
@@ -24,9 +26,12 @@
if (project_id=='')return false;
if (studio_id=='')return false;
if (series_id=='')return false;
$('#assignments_form input[name="series_id"]').val(series_id);
var url="assign-series.cgi?project_id="+project_id+'&studio_id='+studio_id+'&series_id='+series_id+'&action=unassign_series';
$('#assignments_form input[name="action"]').val("unassign_series");
alert("unassign");
//var url="assign-series.cgi?project_id="+project_id+'&studio_id='+studio_id+'&series_id='+series_id+'&action=unassign_series';
//console.log("url:"+url);
$('#assignments_form').submit();
return false;
}
@@ -39,7 +44,7 @@
}
</style>
assign series to project <b><TMPL_VAR project_name></b> and studio <b><TMPL_VAR studio_name></b>
assign and unassign series to project <b><TMPL_VAR project_name></b> and studio <b><TMPL_VAR studio_name></b>
<!-- view series -->
<div id="view_<TMPL_VAR .series_id>" class="view" style="clear:both">
@@ -49,7 +54,7 @@
<select style="float:left;max-width:600px;" id="series_id">
<option value="">--select--</option>
<TMPL_LOOP series>
<option value="<TMPL_VAR series_id>"><b><TMPL_VAR series_name> - <TMPL_VAR title></b> [<TMPL_VAR project_name> - <TMPL_VAR studio_name>]
<option value="<TMPL_VAR series_id>"><b><TMPL_VAR series_name> - <TMPL_VAR title></b> [<TMPL_VAR project_name> - <TMPL_VAR studio_name> - <TMPL_VAR series_id>]
</TMPL_LOOP>
</select>
@@ -57,7 +62,6 @@
<input type="hidden" name="project_id" value="<TMPL_VAR .project_id>">
<input type="hidden" name="studio_id" value="<TMPL_VAR .studio_id>">
<input type="hidden" name="series_id" value="<TMPL_VAR .series_id>">
<input type="hidden" name="action" value="assign_series">
<button target="_blank"
onclick="assign_series('<TMPL_VAR .project_id>', '<TMPL_VAR .studio_id>', $('#series_id').val());return false;"
style="float:left"

View File

@@ -59,7 +59,7 @@
<td>
<select id="eventId" onchange=selectEventAction('<TMPL_VAR resultElemId>')>
<option value="-1"><TMPL_VAR .loc.label_select></option>
<TMPL_LOOP events><option value="<TMPL_VAR id>"><TMPL_VAR start> - <TMPL_VAR full_title></option>
<TMPL_LOOP events><option value="<TMPL_VAR id>" <TMPL_IF selected>selected="selected"</TMPL_IF>><TMPL_VAR start> - <TMPL_VAR full_title></option>
</TMPL_LOOPS>
</select>
</td>

View File

@@ -0,0 +1,110 @@
#!/usr/bin/perl
use strict;
use warnings;
no warnings 'redefine';
use Data::Dumper;
use params();
use config();
use entry();
use log();
use template();
use auth();
use uac();
use series();
use localization();
use user_selected_events();
binmode STDOUT, ":utf8";
my $r = shift;
( my $cgi, my $params, my $error ) = params::get($r);
my $config = config::get('../config/config.cgi');
my $debug = $config->{system}->{debug};
my ( $user, $expires ) = auth::get_user( $config, $params, $cgi );
return if ( ( !defined $user ) || ( $user eq '' ) );
my $user_presets = uac::get_user_presets(
$config,
{
project_id => $params->{project_id},
studio_id => $params->{studio_id},
user => $user
}
);
$params->{default_studio_id} = $user_presets->{studio_id};
$params = uac::setDefaultStudio( $params, $user_presets );
$params = uac::setDefaultProject( $params, $user_presets );
my $request = {
url => $ENV{QUERY_STRING} || '',
params => {
original => $params,
checked => check_params( $config, $params ),
},
};
$request = uac::prepare_request( $request, $user_presets );
print "Content-type:text/plain; charset=UTF-8;\n\n";
return unless uac::check( $config, $params, {} ) == 1;
log_event_selection( $config, $request, $user );
sub get_select_fields {
return [
'project_id', 'studio_id',
'series_id', 'filter_project_studio', 'filter_series'
];
}
sub get_value_fields {
return [
'selected_project', 'selected_studio',
'selected_series', 'selected_event'
];
}
sub log_event_selection {
my $config = shift;
my $request = shift;
my $user = shift;
my $params = $request->{params}->{checked};
my $permissions = $request->{permissions};
unless ( $permissions->{read_event} == 1 ) {
uac::permissions_denied('read_event');
return;
}
my $select_fields = get_select_fields();
my $value_fields = get_value_fields();
my $entry = { user => $user };
$entry->{$_} = $params->{$_} for @$select_fields;
my $preset = user_selected_events::get( $config, $entry );
$entry->{$_} = $params->{$_} for ( @$select_fields, @$value_fields);
for ( @$select_fields, @$value_fields ) {
uac::print_error("missing $_") unless defined $entry->{$_};
}
if ($preset) {
print "update\n";
user_selected_events::update( $config, $entry );
} else {
print "insert\n";
user_selected_events::insert( $config, $entry );
}
}
sub check_params {
my $config = shift;
my $params = shift;
my @fields = ( @{get_select_fields()}, @{get_value_fields()} );
my $checked = {};
entry::set_numbers( $checked, $params, \@fields );
return $checked;
}