From 48c9b5de0f9b452fc9abded1db8e1457f52487a6 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 eae670100a..55a2b1227d 100644 --- a/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php +++ b/lizmap/modules/lizmap/classes/qgisVectorLayer.class.php @@ -1174,9 +1174,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( @@ -1255,6 +1257,8 @@ public function editableFeatures() 'GEOMETRYNAME' => 'none', ); + $params = array_merge($params, $wfsParams); + // Perform the request to get the editable features $wfsRequest = new 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 fe5d727487..da88e1bc97 100644 --- a/lizmap/modules/lizmap/lib/Request/WMSRequest.php +++ b/lizmap/modules/lizmap/lib/Request/WMSRequest.php @@ -781,8 +781,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"';