Skip to content

Commit e991380

Browse files
committed
[BUGFIX][Server] In GetPrint, legend as to be fixed when it is not auto update or filter by map
In release-2_14, a legend is fixed when it is not linked to a map. In release-2_18, a legend as to be fixed when it is not auto update or filter by map. Actually a legend with no auto update and a layer missing in the request, the missing layer is repalced by `(?)` It's fixed a regression in some. To fix this regression, layers needed in legen composer has to be loaded before the composer items has been parsed.
1 parent 514d036 commit e991380

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/server/qgswmsprojectparser.cpp

+27-2
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,30 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
491491
return nullptr;
492492
}
493493

494+
// load layers for legends before loaded legends
495+
const QHash< QString, QDomElement > &projectLayerElements = mProjectParser->projectLayerElementsById();
496+
QDomNodeList treeLayerNodeList = compositionElem.elementsByTagName( "layer-tree-layer" );
497+
for ( int i = 0; i < treeLayerNodeList.size(); ++i )
498+
{
499+
QDomElement treeLayerElem = treeLayerNodeList.at( i ).toElement();
500+
QString layerId = treeLayerElem.attribute( "id" );
501+
QgsMapLayer * layer = QgsMapLayerRegistry::instance()->mapLayer( layerId );
502+
if ( layer )
503+
{
504+
continue;
505+
}
506+
507+
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find( layerId );
508+
if ( layerElemIt != projectLayerElements.constEnd() )
509+
{
510+
layer = mProjectParser->createLayerFromElement( layerElemIt.value(), true );
511+
}
512+
if ( layer )
513+
{
514+
QgsMapLayerRegistry::instance()->addMapLayer( layer );
515+
}
516+
}
517+
494518
composition->addItemsFromXML( compositionElem, *( mProjectParser->xmlDocument() ) );
495519

496520
labelList.clear();
@@ -527,11 +551,12 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
527551
if ( legend->autoUpdateModel() )
528552
{
529553
model->setRootGroup( projectLayerTreeGroup() );
554+
legend->synchronizeWithModel();
530555
}
531556
// if the legend has no map
532557
// we will load all layers
533558
const QgsComposerMap* map = legend->composerMap();
534-
if ( !map )
559+
if ( !map || ( !legend->autoUpdateModel() && !legend->legendFilterByMapEnabled() ) )
535560
{
536561
QgsLayerTreeGroup* root = model->rootGroup();
537562
QStringList layerIds = root->findLayerIds();
@@ -553,7 +578,6 @@ QgsComposition* QgsWMSProjectParser::initComposition( const QString& composerTem
553578
layer = nodeLayer->layer();
554579
if ( !layer )
555580
{
556-
const QHash< QString, QDomElement > &projectLayerElements = mProjectParser->projectLayerElementsById();
557581
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find( layerId );
558582
if ( layerElemIt != projectLayerElements.constEnd() )
559583
{
@@ -2387,6 +2411,7 @@ QgsLayerTreeGroup* QgsWMSProjectParser::projectLayerTreeGroup() const
23872411
QgsLayerTreeUtils::readOldLegend( rootGroup, mProjectParser->legendElem() );
23882412
return rootGroup;
23892413
}
2414+
23902415
return QgsLayerTreeGroup::readXML( layerTreeElem );
23912416
}
23922417

0 commit comments

Comments
 (0)