@@ -51,6 +51,8 @@ var lizTimemanager = function() {
5151 $ ( "#tmSlider" ) . slider ( ) ;
5252
5353 var filter = null ;
54+ // Layer filters present before the time manager took control (#6773)
55+ var tmBaseFilters = { } ;
5456 var tmAnimationTimer ;
5557 var tmCurrentDate ;
5658 var tmStartDate = - Infinity ; // lower bound of when values
@@ -71,6 +73,14 @@ var lizTimemanager = function() {
7173 */
7274 function activateTimemanager ( ) {
7375
76+ // Remember any filter already applied to the time-managed
77+ // layers (e.g. from the form filter panel), so the time
78+ // filter is combined with it instead of replacing it (#6773)
79+ tmBaseFilters = { } ;
80+ for ( var bl in config . timemanagerLayers ) {
81+ tmBaseFilters [ bl ] = getLayerBaseFilter ( bl ) ;
82+ }
83+
7484 // hourglass
7585 //$('#loading').dialog('open');
7686
@@ -328,6 +338,37 @@ var lizTimemanager = function() {
328338 }
329339
330340
341+ /**
342+ * Get the WMS-safe expression filter currently applied to a layer,
343+ * without the WMS layer-name prefix. Returns null when none (#6773).
344+ *
345+ * The full filter method stores a WMS-safe filter (built from the
346+ * primary key) in request_params.filter, prefixed with the WMS
347+ * layer name; exp_filter may instead hold a '$id ...' expression
348+ * which QGIS Server rejects, so it must not be reused as-is.
349+ * @param layerName
350+ */
351+ function getLayerBaseFilter ( layerName ) {
352+ var lConfig = config . layers [ layerName ] ;
353+ if ( ! lConfig || ! lConfig [ 'request_params' ] ) {
354+ return null ;
355+ }
356+ var rp = lConfig [ 'request_params' ] ;
357+ if ( rp [ 'filter' ] ) {
358+ var wmsName = lConfig [ 'shortname' ] || lConfig [ 'name' ] ;
359+ if ( wmsName && rp [ 'filter' ] . indexOf ( wmsName + ':' ) === 0 ) {
360+ return rp [ 'filter' ] . substring ( wmsName . length + 1 ) ;
361+ }
362+ return rp [ 'filter' ] ;
363+ }
364+ // Simple filter method: exp_filter is a clean expression.
365+ // Skip it if it relies on '$id' (not allowed by QGIS Server).
366+ if ( rp [ 'exp_filter' ] && rp [ 'exp_filter' ] . indexOf ( '$id' ) === - 1 ) {
367+ return rp [ 'exp_filter' ] ;
368+ }
369+ return null ;
370+ }
371+
331372 /**
332373 *
333374 * @param lowerBoundary
@@ -341,8 +382,17 @@ var lizTimemanager = function() {
341382
342383 // Set filter for each vector layer
343384 for ( var l in config . timemanagerLayers ) {
344- filter = buildDateFilter ( config . timemanagerLayers [ l ] , lowerBoundary , upperBoundary ) ;
345- lizMap . triggerLayerFilter ( l , filter ) ;
385+ var dateFilter = buildDateFilter ( config . timemanagerLayers [ l ] , lowerBoundary , upperBoundary ) ;
386+ // Combine the time filter with any filter already on the
387+ // layer (e.g. from the form filter panel) so both apply (#6773)
388+ var baseFilter = tmBaseFilters [ l ] || null ;
389+ var layerFilter ;
390+ if ( baseFilter && dateFilter ) {
391+ layerFilter = '( ' + baseFilter + ' ) AND ( ' + dateFilter + ' )' ;
392+ } else {
393+ layerFilter = dateFilter || baseFilter ;
394+ }
395+ lizMap . triggerLayerFilter ( l , layerFilter ) ;
346396 }
347397 }
348398
@@ -504,19 +554,26 @@ var lizTimemanager = function() {
504554 *
505555 */
506556 function unFilterTimeLayers ( ) {
507- // Remove filter
557+ // Remove the time filter; restore any filter the layer had
558+ // before the time manager took control (#6773)
508559 for ( var layerName in lizMap . config . timemanagerLayers ) {
509- lizMap . deactivateMaplayerFilter ( layerName ) ;
510- // Refresh plots and popups
511- lizMap . config . layers [ layerName ] [ 'request_params' ] [ 'filtertoken' ] = null ;
512- lizMap . events . triggerEvent ( "layerFilterParamChanged" ,
513- {
514- 'featureType' : layerName ,
515- 'filter' : null ,
516- 'updateDrawing' : false
517- }
518- ) ;
560+ var baseFilter = tmBaseFilters [ layerName ] || null ;
561+ if ( baseFilter ) {
562+ lizMap . triggerLayerFilter ( layerName , baseFilter ) ;
563+ } else {
564+ lizMap . deactivateMaplayerFilter ( layerName ) ;
565+ // Refresh plots and popups
566+ lizMap . config . layers [ layerName ] [ 'request_params' ] [ 'filtertoken' ] = null ;
567+ lizMap . events . triggerEvent ( "layerFilterParamChanged" ,
568+ {
569+ 'featureType' : layerName ,
570+ 'filter' : null ,
571+ 'updateDrawing' : false
572+ }
573+ ) ;
574+ }
519575 }
576+ tmBaseFilters = { } ;
520577 }
521578
522579 /**
0 commit comments