diff --git a/install/create.sql b/install/create.sql
index 360c4a2..369f74d 100644
--- a/install/create.sql
+++ b/install/create.sql
@@ -1282,4 +1282,25 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- Dump completed on 2020-12-21 13:16:22
+
+DROP TABLE IF EXISTS `calcms_user_selected_events`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `calcms_user_selected_events` (
+ `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `user` varchar(45) NOT NULL,
+ `project_id` int(10) unsigned DEFAULT NULL,
+ `studio_id` int(10) unsigned DEFAULT NULL,
+ `series_id` int(10) unsigned DEFAULT NULL,
+ `filter_project_studio` int(1) unsigned DEFAULT NULL,
+ `filter_series` int(1) unsigned DEFAULT NULL,
+ `selected_project` int(10) unsigned DEFAULT NULL,
+ `selected_studio` int(10) unsigned DEFAULT NULL,
+ `selected_series` int(10) unsigned DEFAULT NULL,
+ `selected_event` int(10) unsigned DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `unique` (`user`,`project_id`,`studio_id`,`series_id`,`filter_project_studio`,`filter_series`),
+ KEY `user` (`user`,`project_id`,`studio_id`,`series_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
diff --git a/lib/calcms/user_selected_events.pm b/lib/calcms/user_selected_events.pm
new file mode 100644
index 0000000..a8a36da
--- /dev/null
+++ b/lib/calcms/user_selected_events.pm
@@ -0,0 +1,127 @@
+package user_selected_events;
+
+use strict;
+use warnings;
+no warnings 'redefine';
+
+use Data::Dumper;
+
+# table: calcms_user_selected_events
+# columns: user, project_id, studio_id, series_id, <- selection
+# project_studio_filter, series_filter <- optional filter params
+# selected_project, selected_studio, selected_series, selected_event <-result
+
+sub debug;
+
+sub get_columns($) {
+ my $config = shift;
+
+ my $dbh = db::connect($config);
+ return db::get_columns_hash( $dbh, 'calcms_user_selected_events' );
+}
+
+sub get ($$) {
+ my $config = shift;
+ my $condition = shift;
+
+ my @conditions = ();
+ my @bind_values = ();
+
+ return unless defined $condition->{user};
+ return unless defined $condition->{project_id};
+ return unless defined $condition->{studio_id};
+ return unless defined $condition->{series_id};
+
+ for my $field ('user', 'project_id', 'studio_id', 'series_id',
+ 'filter_project_studio', 'filter_series'
+ ){
+ if ( ( defined $condition->{$field} ) && ( $condition->{$field} ne '' ) ) {
+ push @conditions, $field.'=?';
+ push @bind_values, $condition->{$field};
+ }
+ }
+
+ my $conditions = '';
+ $conditions = " where " . join( " and ", @conditions ) if scalar(@conditions) > 0;
+
+ my $query = qq{
+ select *
+ from calcms_user_selected_events
+ $conditions
+ };
+
+ my $dbh = db::connect($config);
+ my $entries = db::get( $dbh, $query, \@bind_values );
+ return $entries->[0] || undef;
+}
+
+sub insert ($$) {
+ my $config = shift;
+ my $entry = shift;
+
+ return unless defined $entry->{user};
+ return unless defined $entry->{project_id};
+ return unless defined $entry->{studio_id};
+ return unless defined $entry->{series_id};
+ return unless defined $entry->{selected_event};
+
+ my $dbh = db::connect($config);
+ print STDERR "insert".Dumper($entry );
+ return db::insert( $dbh, 'calcms_user_selected_events', $entry );
+}
+
+sub update($$) {
+ my $config = shift;
+ my $entry = shift;
+
+ my $fields = [
+ 'user', 'project_id', 'studio_id', 'series_id',
+ 'filter_project_studio', 'filter_series'
+ ];
+ for (@$fields){
+ return unless defined $entry->{$_}
+ };
+
+ my @keys = sort keys %$entry;
+ my $values = join( ",", map { $_ . '=?' } @keys );
+ my @bind_values = map { $entry->{$_} } ( @keys, @$fields );
+ my $conditions = join (' and ', map { $_.'=?' } @$fields );
+
+ my $query = qq{
+ update calcms_user_selected_events
+ set $values
+ where $conditions
+ };
+
+ print STDERR "update".Dumper($query ).Dumper(\@bind_values);
+ my $dbh = db::connect($config);
+ return db::put( $dbh, $query, \@bind_values );
+}
+
+sub delete ($$) {
+ my $config = shift;
+ my $entry = shift;
+
+ return unless defined $entry->{user};
+ return unless defined $entry->{project_id};
+ return unless defined $entry->{studio_id};
+ return unless defined $entry->{series_id};
+
+ my $query = qq{
+ delete
+ from calcms_user_selected_events
+ where user=? and project_id=? and studio_id=? and series_id=?
+ };
+ my $bind_values = [ $entry->{user}, $entry->{project_id}, $entry->{studio_id}, $entry->{series_id} ];
+
+ my $dbh = db::connect($config);
+ return db::put( $dbh, $query, $bind_values );
+}
+
+sub error ($) {
+ my $msg = shift;
+ print "ERROR: $msg
\n";
+}
+
+#do not delete last line!
+1;
diff --git a/website/agenda/planung/js/select-event.js b/website/agenda/planung/js/select-event.js
index e4e6b52..d8c0fcc 100644
--- a/website/agenda/planung/js/select-event.js
+++ b/website/agenda/planung/js/select-event.js
@@ -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
diff --git a/website/agenda/planung/select-event.cgi b/website/agenda/planung/select-event.cgi
index 2bc576f..e26d587 100755
--- a/website/agenda/planung/select-event.cgi
+++ b/website/agenda/planung/select-event.cgi
@@ -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;
}
diff --git a/website/agenda/planung/templates/assign-series.html b/website/agenda/planung/templates/assign-series.html
index 3624349..9240b8b 100644
--- a/website/agenda/planung/templates/assign-series.html
+++ b/website/agenda/planung/templates/assign-series.html
@@ -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 @@
}
- assign series to project