@@ -2916,21 +2916,46 @@ QString QgsWMSServer::replaceValueMapAndRelation( QgsVectorLayer* vl, int idx, c
2916
2916
return attributeVal;
2917
2917
}
2918
2918
2919
- int keyId = layer->fieldNameIndex ( vrdata.mKey );
2920
- int valueId = layer->fieldNameIndex ( vrdata.mValue );
2921
- if ( keyId == -1 || valueId == -1 )
2919
+ QString outputString;
2920
+ if ( vrdata.mAllowMulti )
2922
2921
{
2923
- return attributeVal;
2922
+ QString valueString = attributeVal;
2923
+ QStringList valueList = valueString.remove ( QChar ( ' {' ) ).remove ( QChar ( ' }' ) ).split ( " ," );
2924
+ for ( int i = 0 ; i < valueList.size (); ++i )
2925
+ {
2926
+ if ( i > 0 )
2927
+ {
2928
+ outputString += " ;" ;
2929
+ }
2930
+ outputString += relationValue ( valueList.at ( i ), layer, vrdata.mKey , vrdata.mValue );
2931
+ }
2924
2932
}
2933
+ return outputString;
2934
+ }
2935
+ return attributeVal;
2936
+ }
2925
2937
2926
- QgsFeatureIterator fIt = layer->getFeatures ( QgsFeatureRequest ().setFlags ( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes ( QgsAttributeList () << keyId << valueId ) );
2927
- QgsFeature f;
2928
- while ( fIt .nextFeature ( f ) )
2938
+ QString QgsWMSServer::relationValue ( const QString& attributeVal, QgsVectorLayer* layer, const QString& key, const QString& value )
2939
+ {
2940
+ if ( !layer )
2941
+ {
2942
+ return attributeVal;
2943
+ }
2944
+
2945
+ int keyId = layer->fieldNameIndex ( key );
2946
+ int valueId = layer->fieldNameIndex ( value );
2947
+ if ( keyId == -1 || valueId == -1 )
2948
+ {
2949
+ return attributeVal;
2950
+ }
2951
+
2952
+ QgsFeatureIterator fIt = layer->getFeatures ( QgsFeatureRequest ().setFlags ( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes ( QgsAttributeList () << keyId << valueId ) );
2953
+ QgsFeature f;
2954
+ while ( fIt .nextFeature ( f ) )
2955
+ {
2956
+ if ( f.attribute ( key ).toString () == attributeVal )
2929
2957
{
2930
- if ( f.attribute ( vrdata.mKey ).toString () == attributeVal )
2931
- {
2932
- return f.attribute ( vrdata.mValue ).toString ();
2933
- }
2958
+ return f.attribute ( value ).toString ();
2934
2959
}
2935
2960
}
2936
2961
return attributeVal;
0 commit comments