From 7d90b31f427f0d2e985d97003fafea282d43384f Mon Sep 17 00:00:00 2001 From: Riccardo Beltrami Date: Wed, 26 Feb 2025 11:27:26 +0100 Subject: [PATCH] filter editable features by feature id --- .../modules/lizmap/classes/qgisVectorLayer.class.php | 6 +++++- lizmap/modules/lizmap/lib/Request/WMSRequest.php | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php b/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php index 6ee83623ea..652c0c1193 100644 --- a/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php +++ b/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php @@ -1173,9 +1173,11 @@ public function isFeatureEditable($feature) * when there is a filter by login (or by polygon). This allows to deactivate the editing icon * for the non-editable features inside the popup and attribute table. * + * @param array $wfsParams Extra WFS parameters to filter the layer : FEATUREID or EXP_FILTER could be use + * * @return array Data containing the status (restricted|unrestricted) and the features if restricted */ - public function editableFeatures() + public function editableFeatures($wfsParams = array()) { // Editable features are a restricted list $restricted_empty_data = array( @@ -1254,6 +1256,8 @@ public function editableFeatures() 'GEOMETRYNAME' => 'none', ); + $params = array_merge($params, $wfsParams); + // Perform the request to get the editable features $wfsRequest = new \Lizmap\Request\WFSRequest($project, $params, lizmap::getServices()); // Activate edition context to get filtered layer for edition diff --git a/lizmap/modules/lizmap/lib/Request/WMSRequest.php b/lizmap/modules/lizmap/lib/Request/WMSRequest.php index d139614f8e..83d4cf782a 100644 --- a/lizmap/modules/lizmap/lib/Request/WMSRequest.php +++ b/lizmap/modules/lizmap/lib/Request/WMSRequest.php @@ -776,8 +776,16 @@ protected function gfiVectorXmlToHtml($layerId, $layerName, $layerTitle, $layer, // edition can be restricted on current feature $qgisLayer = $this->project->getLayer($layerId); + // get wfs name /** @var \qgisVectorLayer $qgisLayer */ - $editableFeatures = $qgisLayer->editableFeatures(); + $typename = $qgisLayer->getWfsTypeName(); + + // additional WFS parameter for features filtering + $wfsParams = array( + 'FEATUREID' => $typename.'.'.$id, + ); + + $editableFeatures = $qgisLayer->editableFeatures($wfsParams); $editionRestricted = ''; if (array_key_exists('status', $editableFeatures) && $editableFeatures['status'] === 'restricted') { $editionRestricted = 'edition-restricted="true"';