@@ -1524,31 +1524,34 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
1524
1524
" AND,OR,IN,<,>=,>,>=,!=,',',(,). Not allowed are semicolons in the filter expression." );
1525
1525
}
1526
1526
1527
- // we know the layer name, but need to go through the list because a layer could be there several times...
1528
- int listPos = 1 ;
1529
- QStringList::const_iterator layerIt = layerList.constBegin ();
1530
- for ( ; layerIt != layerList.constEnd (); ++layerIt )
1527
+ // we need to find the maplayer objects matching the layer name
1528
+ QList<QgsMapLayer*> layersToFilter;
1529
+ QMap<QString, QgsMapLayer*>& layerMap = QgsMapLayerRegistry::instance ()->mapLayers ();
1530
+
1531
+ QMap<QString, QgsMapLayer*>::iterator layerIt = layerMap.begin ();
1532
+ for ( ; layerIt != layerMap.end (); ++layerIt )
1533
+ {
1534
+ if ( layerIt.value () && layerIt.value ()->name () == eqSplit.at ( 0 ) )
1535
+ {
1536
+ layersToFilter.push_back ( layerIt.value () );
1537
+ }
1538
+ }
1539
+
1540
+ QList<QgsMapLayer*>::iterator filterIt = layersToFilter.begin ();
1541
+ for ( ; filterIt != layersToFilter.end (); ++filterIt )
1531
1542
{
1532
- if ( *layerIt == eqSplit.at ( 0 ) )
1543
+ QgsVectorLayer* filteredLayer = dynamic_cast <QgsVectorLayer*>( *filterIt );
1544
+ if ( filteredLayer )
1533
1545
{
1534
- QString layerId = layerIds. at ( layerIds. size () - listPos );
1535
- QgsVectorLayer* filteredLayer = dynamic_cast <QgsVectorLayer*>( QgsMapLayerRegistry::instance ()-> mapLayer ( layerId ) );
1536
- if ( filteredLayer )
1546
+ filterMap. insert ( filteredLayer-> id (), filteredLayer-> subsetString () );
1547
+ QString newSubsetString = eqSplit. at ( 1 );
1548
+ if ( ! filteredLayer-> subsetString (). isEmpty () )
1537
1549
{
1538
- if ( filteredLayer )
1539
- {
1540
- filterMap.insert ( layerId, filteredLayer->subsetString () );
1541
- QString newSubsetString = eqSplit.at ( 1 );
1542
- if ( !filteredLayer->subsetString ().isEmpty () )
1543
- {
1544
- newSubsetString.prepend ( " AND " );
1545
- newSubsetString.prepend ( filteredLayer->subsetString () );
1546
- }
1547
- filteredLayer->setSubsetString ( newSubsetString );
1548
- }
1550
+ newSubsetString.prepend ( " AND " );
1551
+ newSubsetString.prepend ( filteredLayer->subsetString () );
1549
1552
}
1553
+ filteredLayer->setSubsetString ( newSubsetString );
1550
1554
}
1551
- ++listPos;
1552
1555
}
1553
1556
}
1554
1557
0 commit comments