@@ -71,6 +71,8 @@ QgsProjectParser::QgsProjectParser( QDomDocument* xmlDoc, const QString& filePat
71
71
mLegendGroupElements .push_back ( groupNodeList.at ( i ).toElement () );
72
72
}
73
73
}
74
+
75
+ mRestrictedLayers = restrictedLayers ();
74
76
}
75
77
}
76
78
@@ -367,6 +369,10 @@ void QgsProjectParser::addLayers( QDomDocument &doc,
367
369
{
368
370
layerElem.setAttribute ( " queryable" , " 1" );
369
371
QString name = currentChildElem.attribute ( " name" );
372
+ if ( mRestrictedLayers .contains ( name ) ) // unpublished group
373
+ {
374
+ continue ;
375
+ }
370
376
QDomElement nameElem = doc.createElement ( " Name" );
371
377
QDomText nameText = doc.createTextNode ( name );
372
378
nameElem.appendChild ( nameText );
@@ -434,6 +440,10 @@ void QgsProjectParser::addLayers( QDomDocument &doc,
434
440
continue ;
435
441
}
436
442
443
+ if ( mRestrictedLayers .contains ( currentLayer->name () ) ) // unpublished layer
444
+ {
445
+ continue ;
446
+ }
437
447
if ( nonIdentifiableLayers.contains ( currentLayer->id () ) )
438
448
{
439
449
layerElem.setAttribute ( " queryable" , " 0" );
@@ -665,6 +675,13 @@ QList<QgsMapLayer*> QgsProjectParser::mapLayerFromStyle( const QString& lName, c
665
675
Q_UNUSED ( styleName );
666
676
QList<QgsMapLayer*> layerList;
667
677
678
+ // first check if the layer name refers an unpublished layer / group
679
+ QSet<QString> rLayers = restrictedLayers ();
680
+ if ( mRestrictedLayers .contains ( lName ) )
681
+ {
682
+ return layerList;
683
+ }
684
+
668
685
if ( !mXMLDoc )
669
686
{
670
687
return layerList;
@@ -2017,3 +2034,66 @@ void QgsProjectParser::projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap )
2017
2034
}
2018
2035
}
2019
2036
}
2037
+
2038
+ QSet<QString> QgsProjectParser::restrictedLayers () const
2039
+ {
2040
+ QSet<QString> restrictedLayerSet;
2041
+
2042
+ if ( !mXMLDoc )
2043
+ {
2044
+ return restrictedLayerSet;
2045
+ }
2046
+
2047
+ // names of unpublished layers / groups
2048
+ QDomElement propertiesElem = mXMLDoc ->documentElement ().firstChildElement ( " properties" );
2049
+ if ( !propertiesElem.isNull () )
2050
+ {
2051
+ QDomElement wmsLayerRestrictionElem = propertiesElem.firstChildElement ( " WMSRestrictedLayers" );
2052
+ if ( !wmsLayerRestrictionElem.isNull () )
2053
+ {
2054
+ QStringList restrictedLayersAndGroups;
2055
+ QDomNodeList wmsLayerRestrictionValues = wmsLayerRestrictionElem.elementsByTagName ( " value" );
2056
+ for ( int i = 0 ; i < wmsLayerRestrictionValues.size (); ++i )
2057
+ {
2058
+ restrictedLayerSet.insert ( wmsLayerRestrictionValues.at ( i ).toElement ().text () );
2059
+ }
2060
+ }
2061
+ }
2062
+
2063
+ // get legend dom element
2064
+ if ( restrictedLayerSet.size () < 1 || !mXMLDoc )
2065
+ {
2066
+ return restrictedLayerSet;
2067
+ }
2068
+
2069
+ QDomElement legendElem = mXMLDoc ->documentElement ().firstChildElement ( " legend" );
2070
+ if ( legendElem.isNull () )
2071
+ {
2072
+ return restrictedLayerSet;
2073
+ }
2074
+
2075
+ // go through all legend groups and insert names of subgroups / sublayers if there is a match
2076
+ QDomNodeList legendGroupList = legendElem.elementsByTagName ( " legendgroup" );
2077
+ for ( int i = 0 ; i < legendGroupList.size (); ++i )
2078
+ {
2079
+ // get name
2080
+ QDomElement groupElem = legendGroupList.at ( i ).toElement ();
2081
+ QString groupName = groupElem.attribute ( " name" );
2082
+ if ( restrictedLayerSet.contains ( groupName ) )
2083
+ {
2084
+ // match: add names of subgroups and sublayers to set
2085
+ QDomNodeList subgroupList = groupElem.elementsByTagName ( " legendgroup" );
2086
+ for ( int j = 0 ; j < subgroupList.size (); ++j )
2087
+ {
2088
+ restrictedLayerSet.insert ( subgroupList.at ( j ).toElement ().attribute ( " name" ) );
2089
+ }
2090
+ QDomNodeList sublayerList = groupElem.elementsByTagName ( " legendlayer" );
2091
+ for ( int k = 0 ; k < sublayerList.size (); ++k )
2092
+ {
2093
+ restrictedLayerSet.insert ( sublayerList.at ( k ).toElement ().attribute ( " name" ) );
2094
+ }
2095
+ }
2096
+ }
2097
+
2098
+ return restrictedLayerSet;
2099
+ }
0 commit comments