def map_metadata(request, mapid, template='maps/map_metadata.html'): ''' The view that displays a form for editing map metadata ''' map_obj = _resolve_map(request, mapid, msg=_PERMISSION_MSG_METADATA) if request.method == "POST": # Change metadata, return to map info page map_form = MapForm(request.POST, instance=map_obj, prefix="map") if map_form.is_valid(): map_obj = map_form.save(commit=False) if map_form.cleaned_data["keywords"]: map_obj.keywords.add(*map_form.cleaned_data["keywords"]) else: map_obj.keywords.clear() map_obj.save() return HttpResponseRedirect(reverse('map_detail', args=(map_obj.id,))) else: # Show form map_form = MapForm(instance=map_obj, prefix="map") return render_to_response(template, RequestContext(request, { "map": map_obj, "map_form": map_form }))
def map_metadata(request, mapid, template='maps/map_metadata.html'): map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int( request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm( request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) the_map.category = new_category the_map.save() return HttpResponseRedirect( reverse( 'map_detail', args=( map_obj.id, ))) if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm( instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True return render_to_response(template, RequestContext(request, { "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, }))
def map_metadata(request, mapid, template='maps/map_metadata.html', ajax=True): map_obj = _resolve_map(request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_regions = map_form.cleaned_data['regions'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() the_map = map_form.instance if new_poc is not None and new_author is not None: the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract if new_keywords: the_map.keywords.clear() the_map.keywords.add(*new_keywords) if new_regions: the_map.regions.clear() the_map.regions.add(*new_regions) the_map.category = new_category the_map.save() if getattr(settings, 'SLACK_ENABLED', False): try: from geonode.contrib.slack.utils import build_slack_message_map, send_slack_messages send_slack_messages( build_slack_message_map("map_edit", the_map)) except BaseException: logger.error("Could not send slack message for modified map.") if not ajax: return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) message = map_obj.id return HttpResponse(json.dumps({'message': message})) # - POST Request Ends here - # Request.GET if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None config = map_obj.viewer_json(request.user, access_token) layers = MapLayer.objects.filter(map=map_obj.id) metadata_author_groups = [] if request.user.is_superuser or request.user.is_staff: metadata_author_groups = GroupProfile.objects.all() else: try: all_metadata_author_groups = chain( request.user.group_list_all(), GroupProfile.objects.exclude(access="private").exclude( access="public-invite")) except BaseException: all_metadata_author_groups = GroupProfile.objects.exclude( access="private").exclude(access="public-invite") [ metadata_author_groups.append(item) for item in all_metadata_author_groups if item not in metadata_author_groups ] if settings.ADMIN_MODERATE_UPLOADS: if not request.user.is_superuser: map_form.fields['is_published'].widget.attrs.update( {'disabled': 'true'}) can_change_metadata = request.user.has_perm( 'change_resourcebase_metadata', map_obj.get_self_resource()) try: is_manager = request.user.groupmember_set.all().filter( role='manager').exists() except BaseException: is_manager = False if not is_manager or not can_change_metadata: map_form.fields['is_approved'].widget.attrs.update( {'disabled': 'true'}) return render(request, template, context={ "config": json.dumps(config), "resource": map_obj, "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "layers": layers, "preview": getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'geoext'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857'), "metadata_author_groups": metadata_author_groups, "GROUP_MANDATORY_RESOURCES": getattr(settings, 'GROUP_MANDATORY_RESOURCES', False), })
def map_metadata(request, mapid, template="maps/map_metadata.html", ajax=True): try: map_obj = _resolve_map(request, mapid, "base.change_resourcebase_metadata", _PERMISSION_MSG_VIEW) except PermissionDenied: return HttpResponse(MSG_NOT_ALLOWED, status=403) except Exception: raise Http404(MSG_NOT_FOUND) if not map_obj: raise Http404(MSG_NOT_FOUND) # Add metadata_author or poc if missing map_obj.add_missing_metadata_author_or_poc() current_keywords = [keyword.name for keyword in map_obj.keywords.all()] poc = map_obj.poc topic_thesaurus = map_obj.tkeywords.all() metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource", user=request.user) category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST and request.POST["category_choice_field"] else None) if hasattr(settings, 'THESAURUS'): tkeywords_form = TKeywordForm(request.POST) else: tkeywords_form = ThesaurusAvailableForm(request.POST, prefix='tkeywords') else: map_form = MapForm(instance=map_obj, prefix="resource", user=request.user) map_form.disable_keywords_widget_for_non_superuser(request.user) category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) # Keywords from THESAURUS management map_tkeywords = map_obj.tkeywords.all() tkeywords_list = '' # Create THESAURUS widgets lang = 'en' if hasattr(settings, 'THESAURUS') and settings.THESAURUS: warnings.warn( 'The settings for Thesaurus has been moved to Model, \ this feature will be removed in next releases', DeprecationWarning) tkeywords_list = '' if map_tkeywords and len(map_tkeywords) > 0: tkeywords_ids = map_tkeywords.values_list('id', flat=True) if hasattr(settings, 'THESAURUS') and settings.THESAURUS: el = settings.THESAURUS thesaurus_name = el['name'] try: t = Thesaurus.objects.get(identifier=thesaurus_name) for tk in t.thesaurus.filter(pk__in=tkeywords_ids): tkl = tk.keyword.filter(lang=lang) if len(tkl) > 0: tkl_ids = ",".join( map(str, tkl.values_list('id', flat=True))) tkeywords_list += f",{tkl_ids}" if len( tkeywords_list) > 0 else tkl_ids except Exception: tb = traceback.format_exc() logger.error(tb) tkeywords_form = TKeywordForm(instance=map_obj) else: tkeywords_form = ThesaurusAvailableForm(prefix='tkeywords') # set initial values for thesaurus form for tid in tkeywords_form.fields: values = [] values = [ keyword.id for keyword in topic_thesaurus if int(tid) == keyword.thesaurus.id ] tkeywords_form.fields[tid].initial = values if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid() and tkeywords_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = current_keywords if request.keyword_readonly else map_form.cleaned_data[ 'keywords'] new_regions = map_form.cleaned_data['regions'] new_title = map_form.cleaned_data['title'] new_abstract = map_form.cleaned_data['abstract'] new_category = None if category_form and 'category_choice_field' in category_form.cleaned_data and\ category_form.cleaned_data['category_choice_field']: new_category = TopicCategory.objects.get( id=int(category_form.cleaned_data['category_choice_field'])) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: map_obj.poc = new_poc map_obj.metadata_author = new_author map_obj.title = new_title map_obj.abstract = new_abstract map_obj.keywords.clear() map_obj.keywords.add(*new_keywords) map_obj.regions.clear() map_obj.regions.add(*new_regions) map_obj.category = new_category register_event(request, EventType.EVENT_CHANGE_METADATA, map_obj) if not ajax: return HttpResponseRedirect(hookset.map_detail_url(map_obj)) message = map_obj.id try: # Keywords from THESAURUS management # Rewritten to work with updated autocomplete if not tkeywords_form.is_valid(): return HttpResponse( json.dumps({'message': "Invalid thesaurus keywords"}, status_code=400)) thesaurus_setting = getattr(settings, 'THESAURUS', None) if thesaurus_setting: tkeywords_data = tkeywords_form.cleaned_data['tkeywords'] tkeywords_data = tkeywords_data.filter( thesaurus__identifier=thesaurus_setting['name']) map_obj.tkeywords.set(tkeywords_data) elif Thesaurus.objects.all().exists(): fields = tkeywords_form.cleaned_data map_obj.tkeywords.set(tkeywords_form.cleanx(fields)) except Exception: tb = traceback.format_exc() logger.error(tb) map_obj.save(notify=True) return HttpResponse(json.dumps({'message': message})) # - POST Request Ends here - # Request.GET if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True layers = MapLayer.objects.filter(map=map_obj.id) metadata_author_groups = get_user_visible_groups(request.user) if settings.ADMIN_MODERATE_UPLOADS: if not request.user.is_superuser: can_change_metadata = request.user.has_perm( 'change_resourcebase_metadata', map_obj.get_self_resource()) try: is_manager = request.user.groupmember_set.all().filter( role='manager').exists() except Exception: is_manager = False if not is_manager or not can_change_metadata: if settings.RESOURCE_PUBLISHING: map_form.fields['is_published'].widget.attrs.update( {'disabled': 'true'}) map_form.fields['is_approved'].widget.attrs.update( {'disabled': 'true'}) register_event(request, EventType.EVENT_VIEW_METADATA, map_obj) return render( request, template, context={ "resource": map_obj, "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "tkeywords_form": tkeywords_form, "layers": layers, "preview": getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857'), "metadata_author_groups": metadata_author_groups, "TOPICCATEGORY_MANDATORY": getattr(settings, 'TOPICCATEGORY_MANDATORY', False), "GROUP_MANDATORY_RESOURCES": getattr(settings, 'GROUP_MANDATORY_RESOURCES', False), "UI_MANDATORY_FIELDS": list( set(getattr(settings, 'UI_DEFAULT_MANDATORY_FIELDS', [])) | set(getattr(settings, 'UI_REQUIRED_FIELDS', []))) })
def map_metadata(request, mapid, template='maps/map_metadata.html'): map_obj = _resolve_map(request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) the_map.category = new_category the_map.save() if getattr(settings, 'SLACK_ENABLED', False): try: from geonode.contrib.slack.utils import build_slack_message_map, send_slack_messages send_slack_messages( build_slack_message_map("map_edit", the_map)) except: print "Could not send slack message for modified map." return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True return render_to_response( template, RequestContext( request, { "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, }))
def map_metadata(request, mapid, template='maps/map_metadata.html'): map_obj = _resolve_map(request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) the_map.category = new_category the_map.save() if getattr(settings, 'SLACK_ENABLED', False): try: from geonode.contrib.slack.utils import build_slack_message_map, send_slack_messages send_slack_messages( build_slack_message_map("map_edit", the_map)) except: print "Could not send slack message for modified map." return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None config = map_obj.viewer_json(request.user, access_token) layers = MapLayer.objects.filter(map=map_obj.id) metadata_author_groups = [] if request.user.is_superuser: metadata_author_groups = GroupProfile.objects.all() else: metadata_author_groups = metadata_author.group_list_all() return render_to_response( template, RequestContext( request, { "config": json.dumps(config), "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "layers": layers, "preview": getattr(settings, 'LAYER_PREVIEW_LIBRARY', 'leaflet'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:900913'), "metadata_author_groups": metadata_author_groups, }))
def map_metadata( request, mapid, template='maps/map_metadata.html', ajax=True): map_obj = _resolve_map( request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm(request.POST, prefix="category_choice_field", initial=int( request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_regions = map_form.cleaned_data['regions'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm( request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() the_map = map_form.instance if new_poc is not None and new_author is not None: the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract if new_keywords: the_map.keywords.clear() the_map.keywords.add(*new_keywords) if new_regions: the_map.regions.clear() the_map.regions.add(*new_regions) the_map.category = new_category the_map.save() if getattr(settings, 'SLACK_ENABLED', False): try: from geonode.contrib.slack.utils import build_slack_message_map, send_slack_messages send_slack_messages( build_slack_message_map( "map_edit", the_map)) except BaseException: logger.error("Could not send slack message for modified map.") if not ajax: return HttpResponseRedirect( reverse( 'map_detail', args=( map_obj.id, ))) message = map_obj.id return HttpResponse(json.dumps({'message': message})) # - POST Request Ends here - # Request.GET if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm( instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True config = map_obj.viewer_json(request) layers = MapLayer.objects.filter(map=map_obj.id) metadata_author_groups = [] if request.user.is_superuser or request.user.is_staff: metadata_author_groups = GroupProfile.objects.all() else: try: all_metadata_author_groups = chain( request.user.group_list_all(), GroupProfile.objects.exclude( access="private").exclude(access="public-invite")) except BaseException: all_metadata_author_groups = GroupProfile.objects.exclude( access="private").exclude(access="public-invite") [metadata_author_groups.append(item) for item in all_metadata_author_groups if item not in metadata_author_groups] if settings.ADMIN_MODERATE_UPLOADS: if not request.user.is_superuser: map_form.fields['is_published'].widget.attrs.update( {'disabled': 'true'}) can_change_metadata = request.user.has_perm( 'change_resourcebase_metadata', map_obj.get_self_resource()) try: is_manager = request.user.groupmember_set.all().filter(role='manager').exists() except BaseException: is_manager = False if not is_manager or not can_change_metadata: map_form.fields['is_approved'].widget.attrs.update( {'disabled': 'true'}) return render(request, template, context={ "config": json.dumps(config), "resource": map_obj, "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "layers": layers, "preview": getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'geoext'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857'), "metadata_author_groups": metadata_author_groups, "GROUP_MANDATORY_RESOURCES": getattr(settings, 'GROUP_MANDATORY_RESOURCES', False), })
def map_metadata(request, mapid, template='maps/map_metadata.html', ajax=True): map_obj = _resolve_map(request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) # Add metadata_author or poc if missing map_obj.add_missing_metadata_author_or_poc() current_keywords = [keyword.name for keyword in map_obj.keywords.all()] poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST and request.POST["category_choice_field"] else None) tkeywords_form = TKeywordForm(request.POST) else: map_form = MapForm(instance=map_obj, prefix="resource") map_form.disable_keywords_widget_for_non_superuser(request.user) category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) # Keywords from THESAURUS management map_tkeywords = map_obj.tkeywords.all() tkeywords_list = '' lang = 'en' # TODO: use user's language if map_tkeywords and len(map_tkeywords) > 0: tkeywords_ids = map_tkeywords.values_list('id', flat=True) if hasattr(settings, 'THESAURUS') and settings.THESAURUS: el = settings.THESAURUS thesaurus_name = el['name'] try: t = Thesaurus.objects.get(identifier=thesaurus_name) for tk in t.thesaurus.filter(pk__in=tkeywords_ids): tkl = tk.keyword.filter(lang=lang) if len(tkl) > 0: tkl_ids = ",".join( map(str, tkl.values_list('id', flat=True))) tkeywords_list += "," + \ tkl_ids if len( tkeywords_list) > 0 else tkl_ids except Exception: tb = traceback.format_exc() logger.error(tb) tkeywords_form = TKeywordForm(instance=map_obj) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = current_keywords if request.keyword_readonly else map_form.cleaned_data[ 'keywords'] new_regions = map_form.cleaned_data['regions'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = None if category_form and 'category_choice_field' in category_form.cleaned_data and\ category_form.cleaned_data['category_choice_field']: new_category = TopicCategory.objects.get( id=int(category_form.cleaned_data['category_choice_field'])) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: map_obj.poc = new_poc map_obj.metadata_author = new_author map_obj.title = new_title map_obj.abstract = new_abstract map_obj.keywords.clear() map_obj.keywords.add(*new_keywords) map_obj.regions.clear() map_obj.regions.add(*new_regions) map_obj.category = new_category map_obj.save(notify=True) register_event(request, EventType.EVENT_CHANGE_METADATA, map_obj) if not ajax: return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) message = map_obj.id try: # Keywords from THESAURUS management # Rewritten to work with updated autocomplete if not tkeywords_form.is_valid(): return HttpResponse( json.dumps({'message': "Invalid thesaurus keywords"}, status_code=400)) tkeywords_data = tkeywords_form.cleaned_data['tkeywords'] thesaurus_setting = getattr(settings, 'THESAURUS', None) if thesaurus_setting: tkeywords_data = tkeywords_data.filter( thesaurus__identifier=thesaurus_setting['name']) map_obj.tkeywords.set(tkeywords_data) except Exception: tb = traceback.format_exc() logger.error(tb) return HttpResponse(json.dumps({'message': message})) # - POST Request Ends here - # Request.GET if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True config = map_obj.viewer_json(request) layers = MapLayer.objects.filter(map=map_obj.id) metadata_author_groups = [] if request.user.is_superuser or request.user.is_staff: metadata_author_groups = GroupProfile.objects.all() else: try: all_metadata_author_groups = chain( request.user.group_list_all(), GroupProfile.objects.exclude(access="private").exclude( access="public-invite")) except Exception: all_metadata_author_groups = GroupProfile.objects.exclude( access="private").exclude(access="public-invite") [ metadata_author_groups.append(item) for item in all_metadata_author_groups if item not in metadata_author_groups ] if settings.ADMIN_MODERATE_UPLOADS: if not request.user.is_superuser: if settings.RESOURCE_PUBLISHING: map_form.fields['is_published'].widget.attrs.update( {'disabled': 'true'}) can_change_metadata = request.user.has_perm( 'change_resourcebase_metadata', map_obj.get_self_resource()) try: is_manager = request.user.groupmember_set.all().filter( role='manager').exists() except Exception: is_manager = False if not is_manager or not can_change_metadata: map_form.fields['is_approved'].widget.attrs.update( {'disabled': 'true'}) register_event(request, EventType.EVENT_VIEW_METADATA, map_obj) return render(request, template, context={ "config": json.dumps(config), "resource": map_obj, "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "tkeywords_form": tkeywords_form, "layers": layers, "preview": getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857'), "metadata_author_groups": metadata_author_groups, "TOPICCATEGORY_MANDATORY": getattr(settings, 'TOPICCATEGORY_MANDATORY', False), "GROUP_MANDATORY_RESOURCES": getattr(settings, 'GROUP_MANDATORY_RESOURCES', False), })
def map_metadata(request, mapid, template="maps/map_metadata.html"): map_obj = _resolve_map(request, mapid, msg=_PERMISSION_MSG_METADATA) poc = map_obj.poc metadata_author = map_obj.metadata_author if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") else: map_form = MapForm(instance=map_obj, prefix="resource") if request.method == "POST" and map_form.is_valid(): new_poc = map_form.cleaned_data["poc"] new_author = map_form.cleaned_data["metadata_author"] new_keywords = map_form.cleaned_data["keywords"] new_title = strip_tags(map_form.cleaned_data["title"]) new_abstract = strip_tags(map_form.cleaned_data["abstract"]) if new_poc is None: if poc.user is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author.user is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) return HttpResponseRedirect(reverse("map_detail", args=(map_obj.id,))) if poc.user is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields["poc"].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author.user is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields["metadata_author"].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True return render_to_response( template, RequestContext( request, {"map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form} ), )
def map_metadata(request, mapid, template='maps/map_metadata.html'): map_obj = _resolve_map(request, mapid, msg=_PERMISSION_MSG_METADATA) poc = map_obj.poc metadata_author = map_obj.metadata_author if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") else: map_form = MapForm(instance=map_obj, prefix="resource") if request.method == "POST" and map_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) if new_poc is None: if poc.user is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author.user is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) if poc.user is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author.user is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True return render_to_response( template, RequestContext( request, { "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, }))
def map_metadata(request, mapid, template='maps/map_metadata.html'): if not mapid.isdigit(): map_obj = _resolve_map_custom(request, mapid, 'urlsuffix', 'base.view_resourcebase', _PERMISSION_MSG_METADATA) else: map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_METADATA) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int(request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm(request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) the_map.category = new_category the_map.save() return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm(instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True return render_to_response( template, RequestContext( request, { "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, }))
def map_metadata(request, mapid, template='maps/map_metadata.html'): map_obj = _resolve_map(request, mapid, 'base.change_resourcebase_metadata', _PERMISSION_MSG_VIEW) poc = map_obj.poc metadata_author = map_obj.metadata_author topic_category = map_obj.category if request.method == "POST": map_form = MapForm(request.POST, instance=map_obj, prefix="resource") category_form = CategoryForm( request.POST, prefix="category_choice_field", initial=int( request.POST["category_choice_field"]) if "category_choice_field" in request.POST else None) else: map_form = MapForm(instance=map_obj, prefix="resource") category_form = CategoryForm( prefix="category_choice_field", initial=topic_category.id if topic_category else None) if request.method == "POST" and map_form.is_valid( ) and category_form.is_valid(): new_poc = map_form.cleaned_data['poc'] new_author = map_form.cleaned_data['metadata_author'] new_keywords = map_form.cleaned_data['keywords'] new_title = strip_tags(map_form.cleaned_data['title']) new_abstract = strip_tags(map_form.cleaned_data['abstract']) new_category = TopicCategory.objects.get( id=category_form.cleaned_data['category_choice_field']) if new_poc is None: if poc is None: poc_form = ProfileForm( request.POST, prefix="poc", instance=poc) else: poc_form = ProfileForm(request.POST, prefix="poc") if poc_form.has_changed and poc_form.is_valid(): new_poc = poc_form.save() if new_author is None: if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author", instance=metadata_author) else: author_form = ProfileForm(request.POST, prefix="author") if author_form.has_changed and author_form.is_valid(): new_author = author_form.save() if new_poc is not None and new_author is not None: the_map = map_form.save() the_map.poc = new_poc the_map.metadata_author = new_author the_map.title = new_title the_map.abstract = new_abstract the_map.save() the_map.keywords.clear() the_map.keywords.add(*new_keywords) the_map.category = new_category the_map.save() if getattr(settings, 'SLACK_ENABLED', False): try: from geonode.contrib.slack.utils import build_slack_message_map, send_slack_messages send_slack_messages(build_slack_message_map("map_edit", the_map)) except: print "Could not send slack message for modified map." return HttpResponseRedirect( reverse( 'map_detail', args=( map_obj.id, ))) if poc is None: poc_form = ProfileForm(request.POST, prefix="poc") else: if poc is None: poc_form = ProfileForm(instance=poc, prefix="poc") else: map_form.fields['poc'].initial = poc.id poc_form = ProfileForm(prefix="poc") poc_form.hidden = True if metadata_author is None: author_form = ProfileForm(request.POST, prefix="author") else: if metadata_author is None: author_form = ProfileForm( instance=metadata_author, prefix="author") else: map_form.fields['metadata_author'].initial = metadata_author.id author_form = ProfileForm(prefix="author") author_form.hidden = True if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None config = map_obj.viewer_json(request.user, access_token) layers = MapLayer.objects.filter(map=map_obj.id) return render_to_response(template, RequestContext(request, { "config": json.dumps(config), "map": map_obj, "map_form": map_form, "poc_form": poc_form, "author_form": author_form, "category_form": category_form, "layers": layers, "preview": getattr(settings, 'LAYER_PREVIEW_LIBRARY', 'leaflet'), "crs": getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:900913'), }))