Skip to content

Commit 747e6df

Browse files
committed
Inject editConfig url into GetProjectSettings
1 parent ce1d206 commit 747e6df

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

schemas/qwc-ogc-service.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@
117117
"legend": {
118118
"description": "Public base URL for Legend OnlineResources",
119119
"type": "string"
120+
},
121+
"edit_config": {
122+
"description": "Public base URL for editConfig OnlineResource",
123+
"type": "string"
120124
}
121125
}
122126
},

src/ogc_service.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ def collect_resource_layers(self, layer, hidden=False):
303303
'opacity': layer.get('opacity', 100),
304304
'hidden': hidden,
305305
'hide_sublayers': layer.get('hide_sublayers', False),
306-
'sublayers': [sublayer['name'] for sublayer in layer.get('layers', [])]
306+
'sublayers': [sublayer['name'] for sublayer in layer.get('layers', [])],
307+
'edit_layers': layer.get('edit_layers', [])
307308
}
308309
return result
309310

@@ -345,7 +346,8 @@ def service_permissions(self, identity, service_name, ows_type):
345346
'title': layer_resource['title'],
346347
'attributes': {},
347348
'queryable': False,
348-
'opacity': layer_resource['opacity']
349+
'opacity': layer_resource['opacity'],
350+
'edit_layers': layer_resource.get('edit_layers')
349351
}
350352
layer_name_from_title[layer_resource.get('title', layer_name)] = layer_name
351353
permitted_layer = permitted_layers[layer_name]

src/wms_handler.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,25 @@ def __filter_getcapabilities(self, response, permissions, params):
383383
})
384384
legendUrlEl.append(onlineResourceEl)
385385

386+
# Inject editConfig if layer is editable
387+
layer_name = nameEl.text if nameEl is not None else permissions['service_name'].split('/')[-1]
388+
if permissions['online_resources'].get('edit_config') and \
389+
permissions['permitted_layers'].get(layer_name, {}).get('edit_layers')\
390+
:
391+
editConfigEl = ElementTree.Element('EditConfig')
392+
editConfigEl.set('wms_name', permissions['service_name'])
393+
layerEl.append(editConfigEl)
394+
edit_layers = ",".join(permissions['permitted_layers'][layer_name]['edit_layers'])
395+
edit_config_url = permissions['online_resources']['edit_config'] + "&layers=" + edit_layers
396+
if edit_config_url.startswith("/"):
397+
edit_config_url = request.host_url.rstrip("/") + edit_config_url
398+
onlineResourceEl = ElementTree.Element('OnlineResource', {
399+
'{%s}href' % xlinkns: edit_config_url,
400+
'{%s}type' % xlinkns: 'simple'
401+
})
402+
editConfigEl.append(onlineResourceEl)
403+
404+
386405

387406
root_layer = root.find('%sCapability/%sLayer' % (np, np), ns)
388407
if root_layer is not None:

0 commit comments

Comments
 (0)