@@ -393,6 +393,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
393
393
long featureCounter = 0 ;
394
394
int layerPrec = 8 ;
395
395
396
+ QgsExpressionContext expressionContext;
397
+ expressionContext << QgsExpressionContextUtils::globalScope ()
398
+ << QgsExpressionContextUtils::projectScope ();
399
+
396
400
QDomDocument doc;
397
401
QString errorMsg;
398
402
if ( doc.setContent ( mParameters .value ( " REQUEST_BODY" ), true , &errorMsg ) )
@@ -434,6 +438,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
434
438
QgsVectorLayer* layer = dynamic_cast <QgsVectorLayer*>( currentLayer );
435
439
if ( layer && wfsLayersId.contains ( layer->id () ) )
436
440
{
441
+ expressionContext << QgsExpressionContextUtils::layerScope ( layer );
442
+
437
443
// is there alias info for this vector layer?
438
444
QMap< int , QString > layerAliasInfo;
439
445
const QMap< QString, QString >& aliasMap = layer->attributeAliases ();
@@ -599,7 +605,9 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
599
605
}
600
606
while ( fit.nextFeature ( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
601
607
{
602
- QVariant res = filter->evaluate ( &feature, fields );
608
+ expressionContext.setFeature ( feature );
609
+
610
+ QVariant res = filter->evaluate ( &expressionContext );
603
611
if ( filter->hasEvalError () )
604
612
{
605
613
throw QgsMapServiceException ( " RequestNotWellFormed" , filter->evalErrorString () );
@@ -783,6 +791,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
783
791
QgsVectorLayer* layer = dynamic_cast <QgsVectorLayer*>( currentLayer );
784
792
if ( layer && wfsLayersId.contains ( layer->id () ) )
785
793
{
794
+ expressionContext << QgsExpressionContextUtils::layerScope ( layer );
795
+
786
796
// is there alias info for this vector layer?
787
797
QMap< int , QString > layerAliasInfo;
788
798
const QMap< QString, QString >& aliasMap = layer->attributeAliases ();
@@ -908,7 +918,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
908
918
}
909
919
while ( fit.nextFeature ( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
910
920
{
911
- QVariant res = filter->evaluate ( &feature, fields );
921
+ expressionContext.setFeature ( feature );
922
+ QVariant res = filter->evaluate ( &expressionContext );
912
923
if ( filter->hasEvalError () )
913
924
{
914
925
throw QgsMapServiceException ( " RequestNotWellFormed" , QString ( " Expression filter eval error message: %1." ).arg ( filter->evalErrorString () ) );
@@ -1026,7 +1037,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
1026
1037
QgsFeatureIterator fit = layer->getFeatures ( req );
1027
1038
while ( fit.nextFeature ( feature ) && ( maxFeatures == -1 || featureCounter < maxFeat ) )
1028
1039
{
1029
- QVariant res = filter->evaluate ( &feature, fields );
1040
+ expressionContext.setFeature ( feature );
1041
+ QVariant res = filter->evaluate ( &expressionContext );
1030
1042
if ( filter->hasEvalError () )
1031
1043
{
1032
1044
throw QgsMapServiceException ( " RequestNotWellFormed" , QString ( " OGC expression filter eval error message: %1." ).arg ( filter->evalErrorString () ) );
@@ -1662,9 +1674,12 @@ QgsFeatureIds QgsWFSServer::getFeatureIdsFromFilter( QDomElement filterElem, Qgs
1662
1674
QgsFeature feature;
1663
1675
const QgsFields& fields = provider->fields ();
1664
1676
QgsFeatureIterator fit = layer->getFeatures ();
1677
+ QgsExpressionContext context = QgsExpressionContextUtils::createFeatureBasedContext ( feature, fields );
1678
+
1665
1679
while ( fit.nextFeature ( feature ) )
1666
1680
{
1667
- QVariant res = filter->evaluate ( &feature, fields );
1681
+ context.setFeature ( feature );
1682
+ QVariant res = filter->evaluate ( &context );
1668
1683
if ( filter->hasEvalError () )
1669
1684
{
1670
1685
throw QgsMapServiceException ( " RequestNotWellFormed" , filter->evalErrorString () );
0 commit comments