Skip to content

Commit 27bf440

Browse files
committed
Server: fix loading of dependent layers when using the getFeature() function (ticket #12090)
1 parent db17513 commit 27bf440

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/server/qgsserverprojectparser.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <QDomDocument>
2929
#include <QFileInfo>
3030
#include <QStringList>
31+
#include <QTextStream>
3132
#include <QUrl>
3233

3334
QgsServerProjectParser::QgsServerProjectParser( QDomDocument* xmlDoc, const QString& filePath )
@@ -151,6 +152,7 @@ QgsMapLayer* QgsServerProjectParser::createLayerFromElement( const QDomElement&
151152

152153
addJoinLayersForElement( elem, useCache );
153154
addValueRelationLayersForElement( elem, useCache );
155+
addGetFeatureLayers( elem, useCache );
154156

155157
QDomElement dataSourceElem = elem.firstChildElement( "datasource" );
156158
QString uri = dataSourceElem.text();
@@ -1422,3 +1424,39 @@ void QgsServerProjectParser::addValueRelationLayersForElement( const QDomElement
14221424
}
14231425
}
14241426
}
1427+
1428+
void QgsServerProjectParser::addGetFeatureLayers( const QDomElement& layerElem, bool useCache ) const
1429+
{
1430+
QString str;
1431+
QTextStream stream( &str );
1432+
layerElem.save( stream, 2 );
1433+
1434+
QRegExp rx( "getFeature\\('([^']*)'" );
1435+
int idx = 0;
1436+
while (( idx = rx.indexIn( str, idx ) ) != -1 )
1437+
{
1438+
QString name = rx.cap( 1 );
1439+
QgsMapLayer* ml = 0;
1440+
QHash< QString, QDomElement >::const_iterator layerElemIt = mProjectLayerElementsById.find( name );
1441+
if ( layerElemIt != mProjectLayerElementsById.constEnd() )
1442+
{
1443+
ml = createLayerFromElement( layerElemIt.value() );
1444+
}
1445+
else
1446+
{
1447+
layerElemIt = mProjectLayerElementsByName.find( name );
1448+
if ( layerElemIt != mProjectLayerElementsByName.constEnd() )
1449+
{
1450+
ml = createLayerFromElement( layerElemIt.value() );
1451+
}
1452+
}
1453+
1454+
if ( ml )
1455+
{
1456+
QgsMapLayerRegistry::instance()->addMapLayer( ml, false, false );
1457+
}
1458+
idx += rx.matchedLength();
1459+
}
1460+
}
1461+
1462+

src/server/qgsserverprojectparser.h

+2
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ class QgsServerProjectParser
113113
void addJoinLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
114114

115115
void addValueRelationLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
116+
/**Add layers which are necessary for the evaluation of the expression function 'getFeature( layer, attributField, value)'*/
117+
void addGetFeatureLayers( const QDomElement& layerElem, bool useCache = true ) const;
116118

117119
/**Returns the text of the <id> element for a layer element
118120
@return id or a null string in case of error*/

0 commit comments

Comments
 (0)