Skip to content

Commit d6889a4

Browse files
committed
Merge branch 'server_value_relation'
2 parents 5417639 + 5f12661 commit d6889a4

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

src/mapserver/qgswmsserver.cpp

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2916,21 +2916,46 @@ QString QgsWMSServer::replaceValueMapAndRelation( QgsVectorLayer* vl, int idx, c
29162916
return attributeVal;
29172917
}
29182918

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 )
29222921
{
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+
}
29242932
}
2933+
return outputString;
2934+
}
2935+
return attributeVal;
2936+
}
29252937

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 )
29292957
{
2930-
if ( f.attribute( vrdata.mKey ).toString() == attributeVal )
2931-
{
2932-
return f.attribute( vrdata.mValue ).toString();
2933-
}
2958+
return f.attribute( value ).toString();
29342959
}
29352960
}
29362961
return attributeVal;

src/mapserver/qgswmsserver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ class QgsWMSServer: public QgsOWSServer
254254

255255
/**Replaces attribute value with ValueRelation or ValueRelation if defined. Otherwise returns the original value*/
256256
static QString replaceValueMapAndRelation( QgsVectorLayer* vl, int idx, const QString& attributeVal );
257+
static QString relationValue( const QString& attributeVal, QgsVectorLayer* layer, const QString& key, const QString& value );
257258
};
258259

259260
#endif

0 commit comments

Comments
 (0)