def publish_status(req, layer_or_map, layer_or_map_id): if req.method != 'POST': return HttpResponse('POST required', status=400) model = Map if layer_or_map == 'map' else Layer obj = _resolve_object(req, model, 'mapstory.change_publishingstatus', allow_owner=True, id=layer_or_map_id) status = req.POST['status'] # allow superuser to fix stuff no matter and we'll allow junk in Private if not req.user.is_superuser and status != 'Private': # verify metadata is completed or reject if isinstance(obj, Layer): layers = [obj] else: layers = obj.local_layers if not models.audit_map_metadata(obj): return HttpResponse('META', status=200) for l in layers: if not models.audit_layer_metadata(l): return HttpResponse('META', status=200) models.PublishingStatus.objects.set_status(obj, status) # this updates status of the current user's layers unless admin (does all) obj.publish.update_related(ignore_owner=req.user.is_superuser) return HttpResponse('OK', status=200)
def test_audit(self): self.bobby = User.objects.get(username='******') t = Topic.objects.create(name='xyz') layer = Layer.objects.create(owner=self.bobby, name='layer1',typename='layer1') self.assertFalse(audit_layer_metadata(layer)) atts = ('abstract','title','purpose','language','supplemental_information', 'data_quality_statement') for a in atts: setattr(layer, a, 'a') self.assertFalse(audit_layer_metadata(layer)) layer.topic_set.add(t) self.assertFalse(audit_layer_metadata(layer)) layer.keywords.add('FOOBARq') self.assertFalse(audit_layer_metadata(layer)) layer.has_thumbnail = lambda : True self.assertTrue(audit_layer_metadata(layer))
def publish_status(req, layer_or_map, layer_or_map_id): if req.method != 'POST': return HttpResponse('POST required',status=400) model = Map if layer_or_map == 'map' else Layer obj = _resolve_object(req, model, 'mapstory.change_publishingstatus', allow_owner=True, id=layer_or_map_id) status = req.POST['status'] # allow superuser to fix stuff no matter and we'll allow junk in Private if not req.user.is_superuser and status != 'Private': # verify metadata is completed or reject if isinstance(obj, Layer): layers = [obj] else: layers = obj.local_layers if not models.audit_map_metadata(obj): return HttpResponse('META', status=200) for l in layers: if not models.audit_layer_metadata(l): return HttpResponse('META', status=200) models.PublishingStatus.objects.set_status(obj, status) # this updates status of the current user's layers unless admin (does all) obj.publish.update_related(ignore_owner=req.user.is_superuser) return HttpResponse('OK', status=200)
def layer_metadata(request, layername): '''ugh, override the default''' layer = get_object_or_404(Layer, typename=layername) if not request.user.has_perm('maps.change_layer', obj=layer): return HttpResponse(loader.render_to_string( '401.html', RequestContext( request, { 'error_message': "You are not permitted to modify this layer's metadata" })), status=401) if request.method == "POST": form = LayerForm(request.POST, prefix="layer") if form.is_valid(): # @todo should we allow redacting metadata once the layer is 'published'? layer.title = form.cleaned_data['title'] layer.keywords.add(*form.cleaned_data['keywords']) layer.abstract = form.cleaned_data['abstract'] layer.purpose = form.cleaned_data['purpose'] layer.language = form.cleaned_data['language'] layer.supplemental_information = form.cleaned_data[ 'supplemental_information'] layer.data_quality_statement = form.cleaned_data[ 'data_quality_statement'] if not models.audit_layer_metadata(layer): msg = _error_response( ('The metadata was updated but is incomplete.<br>' 'You will not be able to publish until completed.')) # roll back to private if changes have invalidated metadata models.PublishingStatus.objects.set_status(layer, 'Private') resp = HttpResponse(msg, status=400) else: resp = HttpResponse('OK') layer.save() return resp else: errors = _error_response('There were errors in the data provided:', form.errors.as_ul(), 'alert-error') return HttpResponse(errors, status=400) # old 'geonode' api, just redirect to layer page return HttpResponseRedirect(reverse('data_detail', args=[layer.typename]))
def layer_metadata(request, layername): """ugh, override the default""" layer = get_object_or_404(Layer, typename=layername) if not request.user.has_perm("maps.change_layer", obj=layer): return HttpResponse( loader.render_to_string( "401.html", RequestContext(request, {"error_message": "You are not permitted to modify this layer's metadata"}), ), status=401, ) if request.method == "POST": form = LayerForm(request.POST, prefix="layer") if form.is_valid(): # @todo should we allow redacting metadata once the layer is 'published'? layer.title = form.cleaned_data["title"] layer.keywords.add(*form.cleaned_data["keywords"]) layer.abstract = form.cleaned_data["abstract"] layer.purpose = form.cleaned_data["purpose"] layer.language = form.cleaned_data["language"] layer.supplemental_information = form.cleaned_data["supplemental_information"] layer.data_quality_statement = form.cleaned_data["data_quality_statement"] if not models.audit_layer_metadata(layer): msg = _error_response( ( "The metadata was updated but is incomplete.<br>" "You will not be able to publish until completed." ) ) # roll back to private if changes have invalidated metadata models.PublishingStatus.objects.set_status(layer, "Private") resp = HttpResponse(msg, status=400) else: resp = HttpResponse("OK") layer.save() return resp else: errors = _error_response("There were errors in the data provided:", form.errors.as_ul(), "alert-error") return HttpResponse(errors, status=400) # old 'geonode' api, just redirect to layer page return HttpResponseRedirect(reverse("data_detail", args=[layer.typename]))
def layer_metadata(request, layername): '''ugh, override the default''' layer = get_object_or_404(Layer, typename=layername) if not request.user.has_perm('maps.change_layer', obj=layer): return HttpResponse(loader.render_to_string('401.html', RequestContext(request, {'error_message': "You are not permitted to modify this layer's metadata"})), status=401) if request.method == "POST": form = LayerForm(request.POST, prefix="layer") if form.is_valid(): # @todo should we allow redacting metadata once the layer is 'published'? layer.title = form.cleaned_data['title'] layer.keywords.add(*form.cleaned_data['keywords']) layer.abstract = form.cleaned_data['abstract'] layer.purpose = form.cleaned_data['purpose'] layer.language = form.cleaned_data['language'] layer.supplemental_information = form.cleaned_data['supplemental_information'] layer.data_quality_statement = form.cleaned_data['data_quality_statement'] if not models.audit_layer_metadata(layer): msg = _error_response(( 'The metadata was updated but is incomplete.<br>' 'You will not be able to publish until completed.' )) # roll back to private if changes have invalidated metadata models.PublishingStatus.objects.set_status(layer, 'Private') resp = HttpResponse(msg, status=400) else: resp = HttpResponse('OK') layer.save() return resp else: errors = _error_response('There were errors in the data provided:', form.errors.as_ul(), 'alert-error') return HttpResponse(errors, status=400) # old 'geonode' api, just redirect to layer page return HttpResponseRedirect(reverse('data_detail', args=[layer.typename]))