changeset 2923:9bd98daf0b0f

Let sys_admin import fairway dimensions without restrictions
author Tom Gottfried <tom@intevation.de>
date Wed, 03 Apr 2019 17:19:26 +0200
parents 372dc8382389
children d2dba0638ef1
files pkg/imports/fd.go
diffstat 1 files changed, 22 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/fd.go	Wed Apr 03 17:08:18 2019 +0200
+++ b/pkg/imports/fd.go	Wed Apr 03 17:19:26 2019 +0200
@@ -142,9 +142,9 @@
   SELECT users.current_user_area_utm() AS a
 )
 DELETE FROM waterway.fairway_dimensions
-WHERE ST_Covers(
-  (SELECT a FROM resp),
-  ST_Transform(area::geometry, (SELECT ST_SRID(a) FROM resp)))
+WHERE (pg_has_role('sys_admin', 'MEMBER')
+    OR ST_Covers((SELECT a FROM resp),
+      ST_Transform(area::geometry, (SELECT ST_SRID(a) FROM resp))))
   AND staging_done
   AND level_of_service = $1::smallint`
 
@@ -154,19 +154,25 @@
 WITH resp AS (
   SELECT users.current_user_area_utm() AS a
 )
-INSERT INTO waterway.fairway_dimensions (area, level_of_service, min_width, max_width, min_depth, date_info, source_organization)
-SELECT ST_Transform(clipped.geom, 4326)::geography, $3, $4, $5, $6, $7, $8 FROM (
-    SELECT (ST_Dump(
-       ST_Intersection(
-         (SELECT ST_Buffer(a, -0.0001) FROM resp),
-         ST_MakeValid(ST_Transform(
-           ST_GeomFromWKB($1, $2::integer),
-           (SELECT ST_SRID(a) FROM resp)
-         ))
-       )
-     )).geom AS geom
-  ) AS clipped
-  WHERE clipped.geom IS NOT NULL
+INSERT INTO waterway.fairway_dimensions (
+  area,
+  level_of_service,
+  min_width,
+  max_width,
+  min_depth,
+  date_info,
+  source_organization)
+SELECT ST_Transform(dmp.geom, 4326), $3, $4, $5, $6, $7, $8
+  FROM ST_GeomFromWKB($1, $2::integer) AS new_fd (new_fd),
+    ST_Dump(
+      CASE WHEN pg_has_role('sys_admin', 'MEMBER')
+        THEN ST_MakeValid(ST_Transform(
+          new_fd, best_utm(ST_Transform(new_fd, 4326))))
+        ELSE ST_CollectionExtract(ST_Intersection(
+            (SELECT ST_Buffer(a, -0.0001) FROM resp),
+            ST_MakeValid(ST_Transform(new_fd, (SELECT ST_SRID(a) FROM resp)))),
+          3)
+        END) AS dmp
 RETURNING id,
   ST_X(ST_Centroid(area::geometry)),
   ST_Y(ST_Centroid(area::geometry))