p_tools.append('add_feat')
if can_change_attributes(request.user, mapid):
p_tools.append('edit_attr')
+ if can_change_attributes(request.user, mapid) and settings.GRACE_MAP_L49_ID == int(mapid):
+ p_tools.append('del_obj')
if can_change_geometries(request.user, mapid):
p_tools.append('edit_geom')
if settings.GRACE_MAP_L49_ID != int(mapid):
return HttpResponse()
+def process_del(request, objects, map_projection, check_rights):
+ """
+ Process del
+ Param: POST Json with feature to del
+ """
+
+ params = request.POST
+ source = params['source']
+
+ forbidden_msg = _("You are not allowed to modify information in this zone.")
+ too_many_obj_msg = _("Too many object in the selection. Please select only one.")
+
+ # Check zone right for the current user
+ if check_rights :
+ auth_geom = request.user.get_profile().get_geometry_extent()
+ if auth_geom :
+ ext_coords = ((auth_geom[0], auth_geom[1]), (auth_geom[0], auth_geom[3]), (auth_geom[2], auth_geom[3]), (auth_geom[2], auth_geom[1]), (auth_geom[0], auth_geom[1]))
+ auth_poly_geom = Polygon(ext_coords)
+ else :
+ response_content = {'records': []}
+ response = HttpResponse()
+ response_content['records'].append({
+ 'status': False,
+ 'msg': forbidden_msg
+ })
+ simplejson.dump(response_content, response, ensure_ascii=False, separators=(',', ':'))
+ return response
+
+ for feature in objects:
+ geom = feature.get('geom')
+ if geom :
+ # See if auth_geom contains geom. If not, refuse the modification : not allowed
+ wkt_str = "SRID=%s;%s" % (map_projection, geom)
+ geometry = GEOSGeometry(wkt_str)
+ srid = settings.GRACE_DATA_PROJECTION
+ geometry = geometry.transform(srid, clone=True)
+
+ intersect = auth_poly_geom.intersects(geometry)
+ if not intersect:
+ response_content = {'records': []}
+ response = HttpResponse()
+ response_content['records'].append({
+ 'status': False,
+ 'msg': forbidden_msg
+ })
+ simplejson.dump(response_content, response, ensure_ascii=False, separators=(',', ':'))
+ return response
+
+ # Check that there's only one object.
+ if len(objects) > 1 :
+ response_content = {'records': []}
+ response = HttpResponse()
+ response_content['records'].append({
+ 'status': False,
+ 'msg': too_many_obj_msg
+ })
+ simplejson.dump(response_content, response, ensure_ascii=False, separators=(',', ':'))
+ return response
+
+ # We must force some value (date_maj, source_maj)
+ new_object = {}
+ for key, feature in enumerate(objects):
+ new_feature = {}
+ table_name = feature.get('table_name')
+
+ # Complete with needed informations
+ new_feature['table_name'] = table_name
+ new_feature['fid'] = feature.get('fid')
+ new_feature['delete'] = True
+
+ # Affect new dictionnary
+ objects[key] = new_feature
+
+ sync_gracedb(objects)
+
+ return HttpResponse()
+
+
@csrf_exempt
def save_feature(request):
"""
return process_save(request, objects, map_projection, False, False)
+@csrf_exempt
+def del_feature(request):
+ """
+ Delete feature
+ Param: POST Json with feature to delete
+ """
+ params = request.POST
+ objects = simplejson.loads(params['data'])
+ map_projection = params['map_projection']
+ return process_del(request, objects, map_projection, True)
+
from grace.authent.registration_form import GraceRegistrationForm
from grace.authent.forms import ContactForm
-from grace.carto.views import view_map, list_layers, route_to_ref_node, save_feature, save_feature_geom, get_associated_features, get_main_features, add_feature
+from grace.carto.views import view_map, list_layers, route_to_ref_node, save_feature, save_feature_geom, get_associated_features, get_main_features, add_feature, del_feature
from grace.processing_file.views import json_job_list, undo_import
from grace.download.views import download_view, downloads_list, download_layer, download_sql
from grace.webservices.views import webservices_view, webservices_list
(r'^route/$', route_to_ref_node),
#save feature to DB
(r'^feature/save/$', save_feature),
+ #del feature to DB
+ (r'^feature/del/$', del_feature),
#save feature's geometry to DB
(r'^feature/save_geom/$', save_feature_geom),
#add feature to DB