コード例 #1
0
ファイル: views.py プロジェクト: jahangir091/geodash
def map_detail(request, mapid, snapshot=None, template='maps/map_detail.html'):
    '''
    The view that show details of each map
    '''

    try:
        user_role = request.GET['user_role']
    except:
        user_role = None

    map_obj = _resolve_map(request, mapid, 'base.view_resourcebase',
                           _PERMISSION_MSG_VIEW)

    # Update count for popularity ranking,
    # but do not includes admins or resource owners
    if request.user != map_obj.owner and not request.user.is_superuser:
        Map.objects.filter(id=map_obj.id).update(
            popular_count=F('popular_count') + 1)

    if snapshot is None:
        config = map_obj.viewer_json(request.user)
    else:
        config = snapshot_config(snapshot, map_obj, request.user)

    config = json.dumps(config)
    layers = MapLayer.objects.filter(map=map_obj.id)
    approve_form = ResourceApproveForm()
    deny_form = ResourceDenyForm()

    context_dict = {
        'config':
        config,
        'resource':
        map_obj,
        'layers':
        layers,
        'perms_list':
        get_perms(request.user, map_obj.get_self_resource()),
        'permissions_json':
        _perms_info_json(map_obj),
        "documents":
        get_related_documents(map_obj),
        "user_role":
        user_role,
        "status":
        map_obj.status,
        "approve_form":
        approve_form,
        "deny_form":
        deny_form,
        "denied_comments":
        MapAuditActivity.objects.filter(map_submission_activity__map=map_obj),
    }

    if settings.SOCIAL_ORIGINS:
        context_dict["social_links"] = build_social_links(request, map_obj)

    return render_to_response(template, RequestContext(request, context_dict))
コード例 #2
0
ファイル: views.py プロジェクト: cjahangir/geodash
def layer_approve(request, layer_pk):
    if request.method == 'POST':
        form = ResourceApproveForm(request.POST)
        if form.is_valid():

            try:
                layer = Layer.objects.get(id=layer_pk)
            except Layer.DoesNotExist:
                return HttpResponse("requested layer does not exists")
            else:
                group = layer.group
                if request.user not in group.get_managers():
                    return HttpResponse("you are not allowed to approve this layer")
                layer_submission_activity = LayerSubmissionActivity.objects.get(layer=layer, group=group, iteration=layer.current_iteration)
                layer_audit_activity = LayerAuditActivity(layer_submission_activity=layer_submission_activity)
                comment_body = request.POST.get('comment')
                comment_subject = request.POST.get('comment_subject')
                layer.status = 'ACTIVE'
                layer.last_auditor = request.user
                layer.save()

                layer_submission_activity.is_audited = True
                layer_submission_activity.save()

                layer_audit_activity.comment_subject = comment_subject
                layer_audit_activity.comment_body = comment_body
                layer_audit_activity.result = 'APPROVED'
                layer_audit_activity.auditor = request.user
                layer_audit_activity.save()

            messages.info(request, 'approved layer succesfully')
            return HttpResponseRedirect(reverse('admin-workspace-layer'))
        else:
            messages.info(request, 'Please write an approve comment and try again')
            return HttpResponseRedirect(reverse('admin-workspace-layer'))
    else:
        return HttpResponseRedirect(reverse('admin-workspace-layer'))
コード例 #3
0
ファイル: views.py プロジェクト: cjahangir/geodash
def map_approve(request, map_pk):
    if request.method == 'POST':
        form = ResourceApproveForm(request.POST)
        if form.is_valid():
            try:
                map = Map.objects.get(id=map_pk)
            except Map.DoesNotExist:
                return HttpResponse("requested map does not exists")
            else:
                group = map.group
                if request.user not in group.get_managers():
                    return HttpResponse("you are not allowed to approve this map")
                map_submission_activity = MapSubmissionActivity.objects.get(map=map, group=group, iteration=map.current_iteration)
                map_audit_activity = MapAuditActivity(map_submission_activity=map_submission_activity)
                comment_body = request.POST.get('comment')
                comment_subject = request.POST.get('comment_subject')
                map.status = 'ACTIVE'
                map.last_auditor = request.user
                map.save()

                map_submission_activity.is_audited = True
                map_submission_activity.save()

                map_audit_activity.comment_subject = comment_subject
                map_audit_activity.comment_body = comment_body
                map_audit_activity.result = 'APPROVED'
                map_audit_activity.auditor = request.user
                map_audit_activity.save()

            messages.info(request, 'approved map succesfully')
            return HttpResponseRedirect(reverse('admin-workspace-map'))
        else:
            messages.info(request, 'Please write an approve comment and try again')
            return HttpResponseRedirect(reverse('admin-workspace-map'))
    else:
        return HttpResponseRedirect(reverse('admin-workspace-map'))
コード例 #4
0
ファイル: views.py プロジェクト: cjahangir/geodash
def document_approve(request, document_pk):
    if request.method == 'POST':
        form = ResourceApproveForm(request.POST)
        if form.is_valid():
            try:
                document = Document.objects.get(id=document_pk)
            except Document.DoesNotExist:
                return HttpResponse("requested document does not exists")
            else:
                group = document.group
                if request.user not in group.get_managers():
                    return HttpResponse("you are not allowed to approve this document")
                document_submission_activity = DocumentSubmissionActivity.objects.get(document=document, group=group, iteration=document.current_iteration)
                document_audit_activity = DocumentAuditActivity(document_submission_activity=document_submission_activity)
                comment_body = request.POST.get('comment')
                comment_subject = request.POST.get('comment_subject')
                document.status = 'ACTIVE'
                document.last_auditor = request.user
                document.save()

                document_submission_activity.is_audited = True
                document_submission_activity.save()

                document_audit_activity.comment_subject = comment_subject
                document_audit_activity.comment_body = comment_body
                document_audit_activity.result = 'APPROVED'
                document_audit_activity.auditor = request.user
                document_audit_activity.save()

            messages.info(request, 'approved document succesfully')
            return HttpResponseRedirect(reverse('admin-workspace-document'))
        else:
            messages.info(request, 'Please write an approve comment and try again')
            return HttpResponseRedirect(reverse('admin-workspace-document'))
    else:
        return HttpResponseRedirect(reverse('admin-workspace-document'))
コード例 #5
0
ファイル: views.py プロジェクト: StreamsTech/nsdi-geodash
def map_approve(request, map_pk):
    if request.method == 'POST':
        form = ResourceApproveForm(request.POST)
        if form.is_valid():
            try:
                map = Map.objects.get(id=map_pk)
            except Map.DoesNotExist:
                return Http404("requested map does not exists")
            else:
                group = map.group
                if request.user not in group.get_managers():
                    if request.user != map.owner:
                        return HttpResponse(
                        loader.render_to_string(
                            '401.html', RequestContext(
                            request, {
                            'error_message': _("You are not allowed to approve this map.")})), status=401)
                    # return HttpResponse("you are not allowed to approve this map")
                map_submission_activity = MapSubmissionActivity.objects.get(map=map, group=group, iteration=map.current_iteration)
                map_audit_activity = MapAuditActivity(map_submission_activity=map_submission_activity)
                comment_body = request.POST.get('comment')
                comment_subject = request.POST.get('comment_subject')
                map.status = 'ACTIVE'
                map.last_auditor = request.user
                map.save()

                permissions = _perms_info_json(map)
                perm_dict = json.loads(permissions)
                if request.POST.get('view_permission'):
                    if not 'AnonymousUser' in perm_dict['users']:
                        perm_dict['users']['AnonymousUser'] = []
                        perm_dict['users']['AnonymousUser'].append('view_resourcebase')
                    else:
                        if not 'view_resourcebase' in perm_dict['users']['AnonymousUser']:
                            perm_dict['users']['AnonymousUser'].append('view_resourcebase')

                if request.POST.get('download_permission'):
                    if not 'AnonymousUser' in perm_dict['users']:
                        perm_dict['users']['AnonymousUser'] = []
                        perm_dict['users']['AnonymousUser'].append('download_resourcebase')
                    else:
                        if not 'download_resourcebase' in perm_dict['users']['AnonymousUser']:
                            perm_dict['users']['AnonymousUser'].append('download_resourcebase')

                map.set_permissions(perm_dict)



                # notify map owner that someone have approved the map
                if request.user != map.owner:
                    recipient = map.owner
                    notify.send(request.user, recipient=recipient, actor=request.user,
                    target=map, verb='approved your map')

                map_submission_activity.is_audited = True
                map_submission_activity.save()

                map_audit_activity.comment_subject = comment_subject
                map_audit_activity.comment_body = comment_body
                map_audit_activity.result = 'APPROVED'
                map_audit_activity.auditor = request.user
                map_audit_activity.save()

            messages.info(request, 'Approved map succesfully')
            return HttpResponseRedirect(reverse('admin-workspace-map'))
        else:
            messages.info(request, 'Please write an approve comment and try again')
            return HttpResponseRedirect(reverse('admin-workspace-map'))
    else:
        return HttpResponseRedirect(reverse('admin-workspace-map'))
コード例 #6
0
ファイル: views.py プロジェクト: jahangir091/geodash
def layer_detail(request, layername, template='layers/layer_detail.html'):
    try:
        user_role = request.GET['user_role']
    except:
        user_role=None

    layer = _resolve_layer(
        request,
        layername,
        'base.view_resourcebase',
        _PERMISSION_MSG_VIEW)

    user = request.user
    edit_permit = False
    if layer.owner == user and layer.status in ['DRAFT', 'ACTIVE', 'DENIED']:
        edit_permit = True
    elif user in layer.group.get_managers() and layer.status in ['PENDING', 'ACTIVE', 'DENIED']:
        edit_permit = True

    if not edit_permit and layer.status=='ACTIVE':
        edit_permit = True

    # if the edit request is not valid then just return from here
    if not edit_permit:
        return HttpResponse(
                        loader.render_to_string(
                            '401.html', RequestContext(
                            request, {
                            'error_message': _("You dont have permission to edit this layer.")})), status=401)
        # return  HttpResponse('You dont have permission to edit this layer')

    # assert False, str(layer_bbox)
    config = layer.attribute_config()

    # Add required parameters for GXP lazy-loading
    layer_bbox = layer.bbox
    bbox = [float(coord) for coord in list(layer_bbox[0:4])]
    config["srs"] = getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:900913')
    config["bbox"] = bbox if config["srs"] != 'EPSG:900913' \
        else llbbox_to_mercator([float(coord) for coord in bbox])
    config["title"] = layer.title
    config["queryable"] = True

    if layer.storeType == "remoteStore":
        service = layer.service
        source_params = {
            "ptype": service.ptype,
            "remote": True,
            "url": service.base_url,
            "name": service.name}
        maplayer = GXPLayer(
            name=layer.typename,
            ows_url=layer.ows_url,
            layer_params=json.dumps(config),
            source_params=json.dumps(source_params))
    else:
        maplayer = GXPLayer(
            name=layer.typename,
            ows_url=layer.ows_url,
            layer_params=json.dumps(config))

    # Update count for popularity ranking,
    # but do not includes admins or resource owners
    if request.user != layer.owner and not request.user.is_superuser:
        Layer.objects.filter(
            id=layer.id).update(popular_count=F('popular_count') + 1)

    # center/zoom don't matter; the viewer will center on the layer bounds
    map_obj = GXPMap(projection=getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:900913'))

    NON_WMS_BASE_LAYERS = [
        la for la in default_map_config()[1] if la.ows_url is None]

    metadata = layer.link_set.metadata().filter(
        name__in=settings.DOWNLOAD_FORMATS_METADATA)

    granules = None
    all_granules = None
    filter = None
    if layer.is_mosaic:
        try:
            cat = gs_catalog
            cat._cache.clear()
            store = cat.get_store(layer.name)
            coverages = cat.mosaic_coverages(store)

            filter = None
            try:
                if request.GET["filter"]:
                    filter = request.GET["filter"]
            except:
                pass

            offset = 10 * (request.page - 1)
            granules = cat.mosaic_granules(coverages['coverages']['coverage'][0]['name'], store, limit=10,
                                           offset=offset, filter=filter)
            all_granules = cat.mosaic_granules(coverages['coverages']['coverage'][0]['name'], store, filter=filter)
        except:
            granules = {"features": []}
            all_granules = {"features": []}
    approve_form = ResourceApproveForm()
    deny_form = ResourceDenyForm()
    metadata_field_list = ['owner', 'title', 'date', 'date_type', 'edition', 'abstract', 'purpose',
                           'maintenance_frequency', 'regions', 'restriction_code_type', 'constraints_other', 'license',
                           'language', 'spatial_representation_type', 'resource_type', 'temporal_extent_start',
                           'temporal_extent_end', 'supplemental_information', 'data_quality_statement', 'thumbnail_url',
                            'elevation_regex', 'time_regex', 'keywords',
                           'category']
    if request.user == layer.owner or request.user in layer.group.get_managers():
        if not layer.attributes:
            messages.info(request, 'Please update layer metadata, missing some informations')
        elif not layer.metadata_author:
            messages.info(request, 'Please update layer metadata, missing some informations')
        else:
            for field in metadata_field_list:
                if not getattr(layer, layer._meta.get_field(field).name):
                    messages.info(request, 'Please update layer metadata, missing some informations')
                    break


    # layer_name = layer.service_typename
    # geoserver_user = OGC_SERVER['default']['USER']
    # geoserver_password = OGC_SERVER['default']['PASSWORD']
    # style_url = OGC_SERVER['default']['PUBLIC_LOCATION'] + "rest/layers/" + layer_name + ".json"
    # response1 = requests.get(style_url, auth=HTTPBasicAuth(geoserver_user, geoserver_password))
    # sld_file_name_url = response1.json()['layer']['defaultStyle']['href']
    # response2 = requests.get(sld_file_name_url, auth=HTTPBasicAuth(geoserver_user, geoserver_password))
    # file_name = response2.json()['style']['filename']
    # sld_file_url = OGC_SERVER['default']['PUBLIC_LOCATION'] + "rest/styles/" + file_name
    # sld_content = requests.get(sld_file_url, auth=HTTPBasicAuth(geoserver_user, geoserver_password)).content
    #
    # xlink = ''
    # try:
    #     dict1 = xmltodict.parse(sld_content)
    #     dict2 = dict1['sld:StyledLayerDescriptor']['sld:NamedLayer']['sld:UserStyle']['sld:FeatureTypeStyle']\
    #     ['sld:Rule']['sld:PointSymbolizer']
    #     xlink = dict2['sld:Graphic']['sld:ExternalGraphic']['sld:OnlineResource']['@xlink:href']
    # except:
    #     pass
    xlink = style_chart_legend_color(layer)

    context_dict = {
        "resource": layer,
        'perms_list': get_perms(request.user, layer.get_self_resource()),
        "permissions_json": _perms_info_json(layer),
        "documents": get_related_documents(layer),
        "metadata": metadata,
        "is_layer": True,
        "wps_enabled": settings.OGC_SERVER['default']['WPS_ENABLED'],
        "granules": granules,
        "all_granules": all_granules,
        "filter": filter,
        "user_role": user_role,
        "approve_form": approve_form,
        "deny_form": deny_form,
        "denied_comments": LayerAuditActivity.objects.filter(layer_submission_activity__layer=layer),
        "status": layer.status,
        "chart_link" : xlink
    }

    context_dict["viewer"] = json.dumps(
        map_obj.viewer_json(request.user, * (NON_WMS_BASE_LAYERS + [maplayer])))
    context_dict["preview"] = getattr(
        settings,
        'LAYER_PREVIEW_LIBRARY',
        'leaflet')

    if request.user.has_perm('download_resourcebase', layer.get_self_resource()):
        if layer.storeType == 'dataStore':
            links = layer.link_set.download().filter(
                name__in=settings.DOWNLOAD_FORMATS_VECTOR)
        else:
            links = layer.link_set.download().filter(
                name__in=settings.DOWNLOAD_FORMATS_RASTER)
        context_dict["links"] = links

    if settings.SOCIAL_ORIGINS:
        context_dict["social_links"] = build_social_links(request, layer)

    return render_to_response(template, RequestContext(request, context_dict))
コード例 #7
0
ファイル: views.py プロジェクト: jahangir091/geodash
def document_detail(request, docid):
    """
    The view that show details of each document
    """
    try:
        user_role = request.GET['user_role']
    except:
        user_role=None

    document = None
    try:
        document = _resolve_document(
            request,
            docid,
            'base.view_resourcebase',
            _PERMISSION_MSG_VIEW)

    except Http404:
        return HttpResponse(
            loader.render_to_string(
                '404.html', RequestContext(
                    request, {
                        })), status=404)

    except PermissionDenied:
        return HttpResponse(
            loader.render_to_string(
                '401.html', RequestContext(
                    request, {
                        'error_message': _("You are not allowed to view this document.")})), status=403)

    if document is None:
        return HttpResponse(
            'An unknown error has occured.',
            content_type="text/plain",
            status=401
        )

    else:
        try:
            related = document.content_type.get_object_for_this_type(
                id=document.object_id)
        except:
            related = ''

        # Update count for popularity ranking,
        # but do not includes admins or resource owners
        if request.user != document.owner and not request.user.is_superuser:
            Document.objects.filter(id=document.id).update(popular_count=F('popular_count') + 1)

        metadata = document.link_set.metadata().filter(
            name__in=settings.DOWNLOAD_FORMATS_METADATA)
        approve_form = ResourceApproveForm()
        deny_form = ResourceDenyForm()

        context_dict = {
            'perms_list': get_perms(request.user, document.get_self_resource()),
            'permissions_json': _perms_info_json(document),
            'resource': document,
            'metadata': metadata,
            'imgtypes': IMGTYPES,
            'related': related,
            "user_role": user_role,
            "status": document.status,
            "approve_form": approve_form,
            "deny_form": deny_form,
            "denied_comments": DocumentAuditActivity.objects.filter(document_submission_activity__document=document),

        }

        if settings.SOCIAL_ORIGINS:
            context_dict["social_links"] = build_social_links(request, document)

        if getattr(settings, 'EXIF_ENABLED', False):
            try:
                from geonode.contrib.exif.utils import exif_extract_dict
                exif = exif_extract_dict(document)
                if exif:
                    context_dict['exif_data'] = exif
            except:
                print "Exif extraction failed."

        return render_to_response(
            "documents/document_detail.html",
            RequestContext(request, context_dict))