@@ -1247,8 +1247,6 @@ QByteArray* QgsWMSServer::getPrint( const QString& formatString )
12471247 }
12481248 delete theImage;
12491249
1250- QMap<QString, QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
1251-
12521250#ifdef HAVE_SERVER_PYTHON_PLUGINS
12531251 Q_FOREACH ( QgsMapLayer *layer, QgsMapLayerRegistry::instance ()->mapLayers () )
12541252 {
@@ -1257,7 +1255,11 @@ QByteArray* QgsWMSServer::getPrint( const QString& formatString )
12571255 throw QgsMapServiceException ( " Security" , " You are not allowed to access to the layer: " + layer->name () );
12581256 }
12591257 }
1258+ #endif
1259+
1260+ QHash<QgsMapLayer*, QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
12601261
1262+ #ifdef HAVE_SERVER_PYTHON_PLUGINS
12611263 applyAccessControlLayersFilters ( layersList, originalLayerFilters );
12621264#endif
12631265
@@ -1266,6 +1268,8 @@ QByteArray* QgsWMSServer::getPrint( const QString& formatString )
12661268 // GetPrint request needs a template parameter
12671269 if ( !mParameters .contains ( " TEMPLATE" ) )
12681270 {
1271+ restoreLayerFilters ( originalLayerFilters );
1272+ clearFeatureSelections ( selectedLayerIdList );
12691273 throw QgsMapServiceException ( " ParameterMissing" , " The TEMPLATE parameter is required for the GetPrint request" );
12701274 }
12711275
@@ -1340,6 +1344,8 @@ QByteArray* QgsWMSServer::getPrint( const QString& formatString )
13401344 }
13411345 else // unknown format
13421346 {
1347+ restoreLayerFilters ( originalLayerFilters );
1348+ clearFeatureSelections ( selectedLayerIdList );
13431349 throw QgsMapServiceException ( " InvalidFormat" , " Output format '" + formatString + " ' is not supported in the GetPrint request" );
13441350 }
13451351
@@ -1381,8 +1387,6 @@ QImage* QgsWMSServer::getMap( HitTest* hitTest )
13811387 QPainter thePainter ( theImage );
13821388 thePainter.setRenderHint ( QPainter::Antialiasing ); // make it look nicer
13831389
1384- QMap<QString, QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
1385-
13861390#ifdef HAVE_SERVER_PYTHON_PLUGINS
13871391 Q_FOREACH ( QgsMapLayer *layer, QgsMapLayerRegistry::instance ()->mapLayers () )
13881392 {
@@ -1391,7 +1395,11 @@ QImage* QgsWMSServer::getMap( HitTest* hitTest )
13911395 throw QgsMapServiceException ( " Security" , " You are not allowed to access to the layer: " + layer->name () );
13921396 }
13931397 }
1398+ #endif
1399+
1400+ QHash<QgsMapLayer*, QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
13941401
1402+ #ifdef HAVE_SERVER_PYTHON_PLUGINS
13951403 applyAccessControlLayersFilters ( layersList, originalLayerFilters );
13961404#endif
13971405
@@ -1618,7 +1626,7 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, const QString& version )
16181626
16191627 // get the layer registered in QgsMapLayerRegistry and apply possible filters
16201628 QStringList layerIds = layerSet ( layersList, stylesList, mMapRenderer ->destinationCrs () );
1621- QMap<QString , QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
1629+ QHash<QgsMapLayer* , QString> originalLayerFilters = applyRequestedLayerFilters ( layersList );
16221630#ifdef HAVE_SERVER_PYTHON_PLUGINS
16231631 applyAccessControlLayersFilters ( layersList, originalLayerFilters );
16241632#endif
@@ -1702,6 +1710,7 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, const QString& version )
17021710#ifdef HAVE_SERVER_PYTHON_PLUGINS
17031711 if ( !mAccessControl ->layerReadPermission ( currentLayer ) )
17041712 {
1713+ restoreLayerFilters ( originalLayerFilters );
17051714 throw QgsMapServiceException ( " Security" , " You are not allowed to access to the layer: " + currentLayer->name () );
17061715 }
17071716#endif
@@ -2486,9 +2495,9 @@ QStringList QgsWMSServer::layerSet( const QStringList &layersList,
24862495}
24872496
24882497
2489- QMap<QString , QString> QgsWMSServer::applyRequestedLayerFilters ( const QStringList& layerList ) const
2498+ QHash<QgsMapLayer* , QString> QgsWMSServer::applyRequestedLayerFilters ( const QStringList& layerList ) const
24902499{
2491- QMap<QString , QString> filterMap;
2500+ QHash<QgsMapLayer* , QString> filterMap;
24922501
24932502 if ( layerList.isEmpty () )
24942503 {
@@ -2539,7 +2548,7 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
25392548 QgsVectorLayer* filteredLayer = dynamic_cast <QgsVectorLayer*>( filter );
25402549 if ( filteredLayer )
25412550 {
2542- filterMap.insert ( filteredLayer-> id () , filteredLayer->subsetString () );
2551+ filterMap.insert ( filteredLayer, filteredLayer->subsetString () );
25432552 QString newSubsetString = eqSplit.at ( 1 );
25442553 if ( !filteredLayer->subsetString ().isEmpty () )
25452554 {
@@ -2556,10 +2565,10 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
25562565 if ( mMapRenderer && mMapRenderer ->extent ().isEmpty () )
25572566 {
25582567 QgsRectangle filterExtent;
2559- QMap<QString , QString>::const_iterator filterIt = filterMap.constBegin ();
2568+ QHash<QgsMapLayer* , QString>::const_iterator filterIt = filterMap.constBegin ();
25602569 for ( ; filterIt != filterMap.constEnd (); ++filterIt )
25612570 {
2562- QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance ()-> mapLayer ( filterIt.key () );
2571+ QgsMapLayer* mapLayer = filterIt.key ();
25632572 if ( !mapLayer )
25642573 {
25652574 continue ;
@@ -2582,7 +2591,7 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
25822591}
25832592
25842593#ifdef HAVE_SERVER_PYTHON_PLUGINS
2585- void QgsWMSServer::applyAccessControlLayersFilters ( const QStringList& layerList, QMap<QString , QString>& originalLayerFilters ) const
2594+ void QgsWMSServer::applyAccessControlLayersFilters ( const QStringList& layerList, QHash<QgsMapLayer* , QString>& originalLayerFilters ) const
25862595{
25872596 Q_FOREACH ( const QString& layerName, layerList )
25882597 {
0 commit comments