diff --git a/python/server/auto_generated/qgsserverprojectutils.sip.in b/python/server/auto_generated/qgsserverprojectutils.sip.in
index fcc9baeb894..84f8b19361f 100644
--- a/python/server/auto_generated/qgsserverprojectutils.sip.in
+++ b/python/server/auto_generated/qgsserverprojectutils.sip.in
@@ -212,6 +212,15 @@ Returns if the geometry is displayed as Well Known Text in GetFeatureInfo reques
:param project: the QGIS project
:return: if the geometry is displayed as Well Known Text in GetFeatureInfo request.
+%End
+
+ bool wmsFeatureInfoUseAttributeFormSettings( const QgsProject &project );
+%Docstring
+Returns if feature form settings should be considered for the format of the feature info response
+
+:param project: the QGIS project
+
+:return: true if the feature form settings shall be considered for the feature info response
%End
bool wmsFeatureInfoSegmentizeWktGeometry( const QgsProject &project );
diff --git a/src/app/qgsprojectproperties.cpp b/src/app/qgsprojectproperties.cpp
index 15db4f9118d..32e4da9f806 100644
--- a/src/app/qgsprojectproperties.cpp
+++ b/src/app/qgsprojectproperties.cpp
@@ -665,6 +665,9 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
mLayerRestrictionsListWidget->addItems( values );
}
+ bool useAttributeFormSettings = QgsProject::instance()->readBoolEntry( QStringLiteral( "WMSFeatureInfoUseAttributeFormSettings" ), QStringLiteral( "/" ) );
+ mUseAttributeFormSettingsCheckBox->setChecked( useAttributeFormSettings );
+
bool addWktGeometry = QgsProject::instance()->readBoolEntry( QStringLiteral( "WMSAddWktGeometry" ), QStringLiteral( "/" ) );
mAddWktGeometryCheckBox->setChecked( addWktGeometry );
@@ -1393,6 +1396,7 @@ void QgsProjectProperties::apply()
QgsProject::instance()->removeEntry( QStringLiteral( "WMSRestrictedLayers" ), QStringLiteral( "/" ) );
}
+ QgsProject::instance()->writeEntry( QStringLiteral( "WMSFeatureInfoUseAttributeFormSettings" ), QStringLiteral( "/" ), mUseAttributeFormSettingsCheckBox->isChecked() );
QgsProject::instance()->writeEntry( QStringLiteral( "WMSAddWktGeometry" ), QStringLiteral( "/" ), mAddWktGeometryCheckBox->isChecked() );
QgsProject::instance()->writeEntry( QStringLiteral( "WMSSegmentizeFeatureInfoGeometry" ), QStringLiteral( "/" ), mSegmentizeFeatureInfoGeometryCheckBox->isChecked() );
QgsProject::instance()->writeEntry( QStringLiteral( "WMSUseLayerIDs" ), QStringLiteral( "/" ), mWmsUseLayerIDs->isChecked() );
diff --git a/src/server/qgsserverprojectutils.cpp b/src/server/qgsserverprojectutils.cpp
index 85e33bb1439..ae9e075de2f 100644
--- a/src/server/qgsserverprojectutils.cpp
+++ b/src/server/qgsserverprojectutils.cpp
@@ -172,6 +172,13 @@ bool QgsServerProjectUtils::wmsFeatureInfoAddWktGeometry( const QgsProject &proj
|| wktGeom.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
}
+bool QgsServerProjectUtils::wmsFeatureInfoUseAttributeFormSettings( const QgsProject &project )
+{
+ QString useFormSettings = project.readEntry( QStringLiteral( "WMSFeatureInfoUseAttributeFormSettings" ), QStringLiteral( "/" ), "" );
+ return useFormSettings.compare( QLatin1String( "enabled" ), Qt::CaseInsensitive ) == 0
+ || useFormSettings.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
+}
+
bool QgsServerProjectUtils::wmsFeatureInfoSegmentizeWktGeometry( const QgsProject &project )
{
QString segmGeom = project.readEntry( QStringLiteral( "WMSSegmentizeFeatureInfoGeometry" ), QStringLiteral( "/" ), "" );
diff --git a/src/server/qgsserverprojectutils.h b/src/server/qgsserverprojectutils.h
index 0577e276fbb..923b8a002ca 100644
--- a/src/server/qgsserverprojectutils.h
+++ b/src/server/qgsserverprojectutils.h
@@ -207,6 +207,13 @@ namespace QgsServerProjectUtils
*/
SERVER_EXPORT bool wmsFeatureInfoAddWktGeometry( const QgsProject &project );
+ /**
+ * Returns if feature form settings should be considered for the format of the feature info response
+ * \param project the QGIS project
+ * \returns true if the feature form settings shall be considered for the feature info response
+ */
+ SERVER_EXPORT bool wmsFeatureInfoUseAttributeFormSettings( const QgsProject &project );
+
/**
* Returns if the geometry has to be segmentize in GetFeatureInfo request.
* \param project the QGIS project
diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp
index b749b8d7fd6..28e7bbdc290 100644
--- a/src/server/services/wms/qgswmsrenderer.cpp
+++ b/src/server/services/wms/qgswmsrenderer.cpp
@@ -1566,7 +1566,7 @@ namespace QgsWms
featureAttributes = feature.attributes();
QgsEditFormConfig editConfig = layer->editFormConfig();
- if ( editConfig.layout() == QgsEditFormConfig::TabLayout )
+ if ( QgsServerProjectUtils::wmsFeatureInfoUseAttributeFormSettings( *mProject ) && editConfig.layout() == QgsEditFormConfig::TabLayout )
{
writeAttributesTabLayout( editConfig, layer, fields, featureAttributes, infoDocument, featureElement, renderContext );
}
diff --git a/src/server/services/wms/qgswmsrenderer.h b/src/server/services/wms/qgswmsrenderer.h
index 571989edc1d..e88eb2975d8 100644
--- a/src/server/services/wms/qgswmsrenderer.h
+++ b/src/server/services/wms/qgswmsrenderer.h
@@ -223,11 +223,40 @@ namespace QgsWms
QgsRectangle *featureBBox = nullptr,
QgsGeometry *filterGeom = nullptr ) const;
- //!Recursively called to write tab layout groups to XML
+ /**
+ * Recursively called to write tab layout groups to XML
+ * \param group the tab layout group
+ * \param layer The vector layer
+ * \param fields attribute fields
+ * \param featureAttributes the feature attributes
+ * \param doc Feature info XML document
+ * \param featureElem the feature XML element
+ * \param renderContext Context to use for feature rendering
+ */
void writeAttributesTabGroup( const QgsAttributeEditorElement *group, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext ) const;
- //!Writes attributes to XML document using the group/attribute layout defined in the tab layout
+
+ /**
+ * Writes attributes to XML document using the group/attribute layout defined in the tab layout
+ * \param config editor config object
+ * \param layer The vector layer
+ * \param fields attribute fields
+ * \param featureAttributes the feature attributes
+ * \param doc Feature info XML document
+ * \param featureElem the feature XML element
+ * \param renderContext Context to use for feature rendering
+ */
void writeAttributesTabLayout( QgsEditFormConfig &config, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext ) const;
- //! Writes a vectorlayer attribute into the XML document
+
+ /**
+ * Writes a vectorlayer attribute into the XML document
+ * \param index of attribute to be written
+ * \param layer The vector layer
+ * \param fields attribute fields
+ * \param featureAttributes the feature attributes
+ * \param doc Feature info XML document
+ * \param featureElem the feature XML element
+ * \param renderContext Context to use for feature rendering
+ */
void writeVectorLayerAttribute( int attributeIndex, QgsVectorLayer *layer, const QgsFields &fields, QgsAttributes &featureAttributes, QDomDocument &doc, QDomElement &featureElem, QgsRenderContext &renderContext ) const;
//! Appends feature info xml for the layer to the layer element of the dom document
diff --git a/src/ui/qgsprojectpropertiesbase.ui b/src/ui/qgsprojectpropertiesbase.ui
index 5e2a6f98bda..8689e283044 100644
--- a/src/ui/qgsprojectpropertiesbase.ui
+++ b/src/ui/qgsprojectpropertiesbase.ui
@@ -269,7 +269,7 @@
- 2
+ 0
@@ -297,9 +297,9 @@
0
- -16
+ 0
671
- 695
+ 821
@@ -954,8 +954,8 @@
0
0
- 337
- 74
+ 692
+ 673
@@ -1007,8 +1007,8 @@
0
0
- 604
- 105
+ 692
+ 673
@@ -1067,8 +1067,8 @@
0
0
- 291
- 563
+ 692
+ 673
@@ -1643,8 +1643,8 @@
0
0
- 179
- 56
+ 692
+ 673
@@ -1705,8 +1705,8 @@
0
0
- 653
- 3187
+ 685
+ 3591
@@ -2037,72 +2037,79 @@
projowsserver
- -
-
-
- Exclude layers
+
-
+
+
+ Add geometry to feature response
-
- true
-
-
- false
-
-
- false
-
-
- true
-
-
-
-
-
-
- -
-
-
- Add layer to exclude
-
-
-
-
-
-
- :/images/themes/default/symbologyAdd.svg:/images/themes/default/symbologyAdd.svg
-
-
-
- -
-
-
- Remove selected layer
-
-
-
-
-
-
- :/images/themes/default/symbologyRemove.svg:/images/themes/default/symbologyRemove.svg
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 0
- 20
-
-
-
-
-
- -
+
-
+
+
-
+
+
+ Quality for JPEG images ( 10 : smaller image - 100 : best quality )
+
+
+
+ -
+
+
+ 10
+
+
+ 100
+
+
+ 5
+
+
+ 90
+
+
+
+
+
+ -
+
+
-
+
+
+ Maximum features for Atlas print requests
+
+
+
+ -
+
+
+ 9999999
+
+
+ 1
+
+
+
+
+
+ -
+
+
-
+
+
+ When using tiles set this to the size of the larger symbols to avoid cut symbols at tile boundaries. This works by drawing features that are outside the tile extent.
+
+
+ Tile buffer in pixels
+
+
+
+ -
+
+
+
+
+ -
-
@@ -2149,241 +2156,6 @@
- -
-
-
- CRS restrictions
-
-
- true
-
-
- false
-
-
- false
-
-
- true
-
-
-
-
-
-
- Remove selected CRS
-
-
-
- :/images/themes/default/symbologyRemove.svg:/images/themes/default/symbologyRemove.svg
-
-
-
- -
-
-
- -
-
-
- Fetch all CRS's from layers
-
-
- Used
-
-
-
- -
-
-
- Add new CRS
-
-
-
- :/images/themes/default/symbologyAdd.svg:/images/themes/default/symbologyAdd.svg
-
-
-
-
-
-
- -
-
-
-
-
-
- Maximum features for Atlas print requests
-
-
-
- -
-
-
- 9999999
-
-
- 1
-
-
-
-
-
- -
-
-
- Use layer ids as names
-
-
-
- -
-
-
-
-
-
- GetFeatureInfo geometry precision (decimal places)
-
-
-
- -
-
-
- 1
-
-
- 17
-
-
- 8
-
-
-
-
-
- -
-
-
-
-
-
- Default map units per mm in legend
-
-
-
-
-
- -
-
-
- Ad&vertised extent
-
-
- true
-
-
- false
-
-
- false
-
-
- true
-
-
-
-
-
-
-
-
-
-
- -
-
-
- Min. &Y
-
-
- mWMSExtMinY
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
- -
-
-
- Min. &X
-
-
- mWMSExtMinX
-
-
-
- -
-
-
-
-
-
-
- -
-
-
- Max. X
-
-
- mWMSExtMaxX
-
-
-
- -
-
-
- Use Current Canvas Extent
-
-
-
- -
-
-
- Max. Y
-
-
- mWMSExtMaxY
-
-
-
- -
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
- -
-
-
- Add geometry to feature response
-
-
-
-
@@ -2516,13 +2288,202 @@
- -
+
-
+
+
+ CRS restrictions
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+
-
+
+
+ Remove selected CRS
+
+
+
+ :/images/themes/default/symbologyRemove.svg:/images/themes/default/symbologyRemove.svg
+
+
+
+ -
+
+
+ -
+
+
+ Fetch all CRS's from layers
+
+
+ Used
+
+
+
+ -
+
+
+ Add new CRS
+
+
+
+ :/images/themes/default/symbologyAdd.svg:/images/themes/default/symbologyAdd.svg
+
+
+
+
+
+
+ -
+
+
+ Ad&vertised extent
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+
-
+
+
+
+
+
+
+ -
+
+
+ Min. &Y
+
+
+ mWMSExtMinY
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Min. &X
+
+
+ mWMSExtMinX
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+ Max. X
+
+
+ mWMSExtMaxX
+
+
+
+ -
+
+
+ Use Current Canvas Extent
+
+
+
+ -
+
+
+ Max. Y
+
+
+ mWMSExtMaxY
+
+
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ -
Segmentize feature info geometry
+ -
+
+
-
+
+
+ GetFeatureInfo geometry precision (decimal places)
+
+
+
+ -
+
+
+ 1
+
+
+ 17
+
+
+ 8
+
+
+
+
+
-
@@ -2588,7 +2549,7 @@
- -
+
-
-
@@ -2602,49 +2563,95 @@
- -
-
+
-
+
+
+ Use layer ids as names
+
+
+
+ -
+
-
-
+
- Quality for JPEG images ( 10 : smaller image - 100 : best quality )
-
-
-
- -
-
-
- 10
-
-
- 100
-
-
- 5
-
-
- 90
+ Default map units per mm in legend
- -
-
-
-
-
-
- When using tiles set this to the size of the larger symbols to avoid cut symbols at tile boundaries. This works by drawing features that are outside the tile extent.
-
-
- Tile buffer in pixels
-
-
-
- -
-
-
-
+ -
+
+
+ Exclude layers
+
+
+ true
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+
-
+
+
+ -
+
+
+ Add layer to exclude
+
+
+
+
+
+
+ :/images/themes/default/symbologyAdd.svg:/images/themes/default/symbologyAdd.svg
+
+
+
+ -
+
+
+ Remove selected layer
+
+
+
+
+
+
+ :/images/themes/default/symbologyRemove.svg:/images/themes/default/symbologyRemove.svg
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 0
+ 20
+
+
+
+
+
+
+
+ -
+
+
+ Use attribute form settings for GetFeatureInfo response
+
+