Skip to content

Commit b7c566b

Browse files
committed
[BUGFIX][Server] Enhance cleaning propertyname and searching by propertyname
1 parent c1b9706 commit b7c566b

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/server/qgswfsprojectparser.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ QgsWFSProjectParser::QgsWFSProjectParser(
3535
#endif
3636
{
3737
mProjectParser = QgsConfigCache::instance()->serverConfiguration( filePath );
38+
mCleanTagNameRegExp = QRegExp( "(?![\\w\\d\\.-])." );
3839
}
3940

4041
QgsWFSProjectParser::~QgsWFSProjectParser()
@@ -464,7 +465,7 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
464465

465466
//xsd:element
466467
QDomElement attElem = doc.createElement( "element"/*xsd:element*/ );
467-
attElem.setAttribute( "name", attributeName.replace( " ", "_" ) );
468+
attElem.setAttribute( "name", attributeName.replace( " ", "_" ).replace( mCleanTagNameRegExp, "" ) );
468469
QVariant::Type attributeType = fields[idx].type();
469470
if ( attributeType == QVariant::Int )
470471
attElem.setAttribute( "type", "integer" );

src/server/qgswfsprojectparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class SERVER_EXPORT QgsWFSProjectParser
3737
);
3838
~QgsWFSProjectParser();
3939

40+
QRegExp getCleanTagNameRegExp() const { return mCleanTagNameRegExp; }
41+
4042
void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
4143
QString serviceUrl() const;
4244
QString wfsServiceUrl() const;
@@ -56,6 +58,7 @@ class SERVER_EXPORT QgsWFSProjectParser
5658

5759
private:
5860
QgsServerProjectParser* mProjectParser;
61+
QRegExp mCleanTagNameRegExp;
5962
#ifdef HAVE_SERVER_PYTHON_PLUGINS
6063
const QgsAccessControl* mAccessControl;
6164
#endif

src/server/qgswfsserver.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,10 +523,12 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
523523
QList<int> idxList;
524524
QgsFields fields = layer->pendingFields();
525525
// build corresponding propertyname
526+
QList<QString> fieldnames;
526527
QList<QString> propertynames;
527528
for ( int idx = 0; idx < fields.count(); ++idx )
528529
{
529-
propertynames.append( fields[idx].name().replace( " ", "_" ) );
530+
fieldnames.append( fields[idx].name() );
531+
propertynames.append( fields[idx].name().replace( " ", "_" ).replace( mConfigParser->getCleanTagNameRegExp(), "" ) );
530532
}
531533
QString fieldName;
532534
QDomElement propertyElem;
@@ -541,6 +543,10 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
541543
fieldName = fieldName.section( ":", 1, 1 );
542544
}
543545
int fieldNameIdx = propertynames.indexOf( fieldName );
546+
if ( fieldNameIdx == -1 )
547+
{
548+
fieldNameIdx = fieldnames.indexOf( fieldName );
549+
}
544550
if ( fieldNameIdx > -1 )
545551
{
546552
idxList.append( fieldNameIdx );
@@ -941,16 +947,22 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
941947
QList<int> idxList;
942948
QgsFields fields = layer->pendingFields();
943949
// build corresponding propertyname
950+
QList<QString> fieldnames;
944951
QList<QString> propertynames;
945952
for ( int idx = 0; idx < fields.count(); ++idx )
946953
{
947-
propertynames.append( fields[idx].name().replace( " ", "_" ) );
954+
fieldnames.append( fields[idx].name() );
955+
propertynames.append( fields[idx].name().replace( " ", "_" ).replace( mConfigParser->getCleanTagNameRegExp(), "" ) );
948956
}
949957
QString fieldName;
950958
for ( alstIt = attrList.begin(); alstIt != attrList.end(); ++alstIt )
951959
{
952960
fieldName = *alstIt;
953961
int fieldNameIdx = propertynames.indexOf( fieldName );
962+
if ( fieldNameIdx == -1 )
963+
{
964+
fieldNameIdx = fieldnames.indexOf( fieldName );
965+
}
954966
if ( fieldNameIdx > -1 )
955967
{
956968
idxList.append( fieldNameIdx );
@@ -2059,7 +2071,7 @@ QDomElement QgsWFSServer::createFeatureGML2( QgsFeature* feat, QDomDocument& doc
20592071
continue;
20602072
}
20612073

2062-
QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ) );
2074+
QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ).replace( mConfigParser->getCleanTagNameRegExp(), "" ) );
20632075
QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
20642076
fieldElem.appendChild( fieldText );
20652077
typeNameElement.appendChild( fieldElem );
@@ -2141,7 +2153,7 @@ QDomElement QgsWFSServer::createFeatureGML3( QgsFeature* feat, QDomDocument& doc
21412153
continue;
21422154
}
21432155

2144-
QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ) );
2156+
QDomElement fieldElem = doc.createElement( "qgs:" + attributeName.replace( " ", "_" ).replace( mConfigParser->getCleanTagNameRegExp(), "" ) );
21452157
QDomText fieldText = doc.createTextNode( featureAttributes[idx].toString() );
21462158
fieldElem.appendChild( fieldText );
21472159
typeNameElement.appendChild( fieldElem );

0 commit comments

Comments
 (0)