示例#1
0
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)
示例#2
0
 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))
示例#3
0
文件: views.py 项目: sourada/mapstory
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)
示例#4
0
文件: tests.py 项目: sourada/mapstory
 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))
示例#5
0
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]))
示例#6
0
文件: views.py 项目: cholmes/mapstory
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]))
示例#7
0
文件: views.py 项目: sourada/mapstory
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]))