Skip to content

Commit 339986d

Browse files
authoredNov 18, 2016
Merge pull request #3781 from mhugent/wms_project_variables
Set project expression variables in server
2 parents 520a137 + 4cc85fd commit 339986d

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed
 

‎src/server/qgsserverprojectparser.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,17 @@ QgsServerProjectParser::QgsServerProjectParser( QDomDocument* xmlDoc, const QStr
8080
{
8181
QgsProject::instance()->setFileName( mProjectPath );
8282
}
83+
84+
// Set the project scope variables
85+
QStringList variableNames = readListEntry( "Variables", "variableNames" );
86+
QStringList variableValues = readListEntry( "Variables", "variableValues" );
87+
88+
//read values
89+
90+
//append standard values
91+
92+
QgsProject::instance()->writeEntry( "Variables", "/variableNames", variableNames );
93+
QgsProject::instance()->writeEntry( "Variables", "/variableValues", variableValues );
8394
}
8495

8596
QgsServerProjectParser::QgsServerProjectParser()
@@ -1612,4 +1623,34 @@ void QgsServerProjectParser::addGetFeatureLayers( const QDomElement& layerElem )
16121623
}
16131624
}
16141625

1626+
QStringList QgsServerProjectParser::readListEntry( const QString& scope, const QString& key ) const
1627+
{
1628+
QStringList entryList;
1629+
QDomElement propertiesElement = propertiesElem();
1630+
if ( propertiesElement.isNull() )
1631+
{
1632+
return entryList;
1633+
}
1634+
1635+
QDomElement scopeElem = propertiesElement.firstChildElement( scope );
1636+
if ( scopeElem.isNull() )
1637+
{
1638+
return entryList;
1639+
}
1640+
1641+
QDomElement keyElem = scopeElem.firstChildElement( key );
1642+
if ( keyElem.isNull() )
1643+
{
1644+
return entryList;
1645+
}
1646+
1647+
QDomNodeList valueNodeList = keyElem.elementsByTagName( "value" );
1648+
for ( int i = 0; i < valueNodeList.size(); ++i )
1649+
{
1650+
entryList.append( valueNodeList.at( i ).toElement().text() );
1651+
}
1652+
1653+
return entryList;
1654+
}
1655+
16151656

‎src/server/qgsserverprojectparser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ class SERVER_EXPORT QgsServerProjectParser
175175

176176
/** Adds sublayers of an embedded group to layer set*/
177177
static void sublayersOfEmbeddedGroup( const QString& projectFilePath, const QString& groupName, QSet<QString>& layerSet );
178+
179+
/** Reads list entry from project properties*/
180+
QStringList readListEntry( const QString& scope, const QString& key ) const;
178181
};
179182

180183
#endif // QGSSERVERPROJECTPARSER_H

‎src/server/qgswmsserver.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2079,6 +2079,15 @@ int QgsWMSServer::configureMapRender( const QPaintDevice* paintDevice ) const
20792079
mMapRenderer->setOutputUnits( QgsMapRenderer::Pixels ); //SLD units are in pixels normally
20802080
}
20812081

2082+
//Clear expression context and set project variables
2083+
QgsRenderContext* ctx = mMapRenderer->rendererContext();
2084+
if ( ctx )
2085+
{
2086+
QgsExpressionContext newContext;
2087+
newContext.appendScope( QgsExpressionContextUtils::projectScope() );
2088+
ctx->setExpressionContext( newContext );
2089+
}
2090+
20822091
return 0;
20832092
}
20842093

0 commit comments

Comments
 (0)