def layer_detail(request, layername, template='layers/layer_detail.html'): layer = _resolve_layer( request, layername, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) # assert False, str(layer_bbox) config = layer.attribute_config() # only owners and admins can view unpublished layers if not layer.is_published: if request.user != layer.owner and not request.user.is_superuser: return HttpResponse(_PERMISSION_MSG_VIEW, status=403, content_type="text/plain") # TODO (Mapstory): This has been commented out to force the client to make a getCapabilities request in order # to pull in the time dimension data. Ideally we would cache time data just like the srs and bbox data to prevent # making the getCapabilities request. # Add required parameters for GXP lazy-loading #layer_bbox = layer.bbox #bbox = [float(coord) for coord in list(layer_bbox[0:4])] #srid = layer.srid # Transform WGS84 to Mercator. #config["srs"] = srid if srid != "EPSG:4326" else "EPSG:900913" #config["bbox"] = 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.name, 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="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) keywords = json.dumps([tag.name for tag in layer.keywords.all()]) if request.method == "POST": keywords_form = KeywordsForm(request.POST, instance=layer) metadata_form = MetadataForm(instance=layer) if 'keywords' in request.POST: if keywords_form.is_valid(): keywords_form.save() new_keywords = keywords_form.cleaned_data['keywords'] layer.keywords.set(*new_keywords) layer.save() metadata_form = MetadataForm(instance=layer) published_form = PublishStatusForm(instance=layer) elif 'title' in request.POST: metadata_form = MetadataForm(request.POST, instance=layer) if metadata_form.is_valid(): metadata_form.save() # update all the metadata if metadata_form.cleaned_data['category'] is not None: new_category = TopicCategory.objects.get(id=metadata_form.cleaned_data['category'].id) Layer.objects.filter(id=layer.id).update(category=new_category) layer.title = metadata_form.cleaned_data['title'] layer.language = metadata_form.cleaned_data['language'] layer.distribution_url = metadata_form.cleaned_data['distribution_url'] layer.data_quality_statement = metadata_form.cleaned_data['data_quality_statement'] layer.purpose = metadata_form.cleaned_data['purpose'] layer.is_published = metadata_form.cleaned_data['is_published'] layer.save() keywords_form = KeywordsForm(instance=layer) elif 'add_keyword' in request.POST: layer.keywords.add(request.POST['add_keyword']) layer.save() elif 'remove_keyword' in request.POST: layer.keywords.remove(request.POST['remove_keyword']) layer.save() else: keywords_form = KeywordsForm(instance=layer) metadata_form = MetadataForm(instance=layer) content_moderators = Group.objects.filter(name='content_moderator').first() thumbnail_dir = os.path.join(settings.MEDIA_ROOT, 'thumbs') default_thumbnail_array = layer.get_thumbnail_url().split('/') default_thumbnail_name = default_thumbnail_array[ len(default_thumbnail_array) - 1 ] default_thumbnail = os.path.join(thumbnail_dir, default_thumbnail_name) if request.method == 'POST': thumb_form = ThumbnailImageForm(request.POST, request.FILES) if thumb_form.is_valid(): new_img = ThumbnailImage( thumbnail_image=request.FILES['thumbnail_image'] ) new_img.save() user_upload_thumbnail = ThumbnailImage.objects.all()[0] user_upload_thumbnail_filepath = str( user_upload_thumbnail.thumbnail_image ) # only create backup for original thumbnail if os.path.isfile(default_thumbnail + '.bak') is False: os.rename(default_thumbnail, default_thumbnail + '.bak') os.rename(user_upload_thumbnail_filepath, default_thumbnail) else: thumb_form = ThumbnailImageForm() thumbnail = layer.get_thumbnail_url context_dict = { "resource": layer, "permissions_json": _perms_info_json(layer), "documents": get_related_documents(layer), "metadata": metadata, "keywords": keywords, "is_layer": True, "wps_enabled": settings.OGC_SERVER['default']['WPS_ENABLED'], "keywords_form": keywords_form, "metadata_form": metadata_form, "content_moderators": content_moderators, "thumbnail": thumbnail, "thumb_form": thumb_form } context_dict["viewer"] = json.dumps( map_obj.viewer_json(request.user, * (NON_WMS_BASE_LAYERS + [maplayer]))) context_dict["preview"] = getattr( settings, 'LAYER_PREVIEW_LIBRARY') 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 layer_property_names = [] for attrib in layer.attributes: if attrib.attribute not in settings.SCHEMA_DOWNLOAD_EXCLUDE and not (attrib.attribute.endswith('_xd') or attrib.attribute.endswith('_parsed')): layer_property_names.append(attrib.attribute) layer_attrib_string = ','.join(layer_property_names) shapefile_link = layer.link_set.download().filter(mime='SHAPE-ZIP').first() if shapefile_link is not None: shapefile_link = shapefile_link.url + '&featureID=fakeID' + '&propertyName=' + layer_attrib_string context_dict["shapefile_link"] = shapefile_link csv_link = layer.link_set.download().filter(mime='csv').first() if csv_link is not None: csv_link = csv_link.url + '&featureID=fakeID' + '&propertyName=' + layer_attrib_string context_dict["csv_link"] = csv_link if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, layer) return render_to_response(template, RequestContext(request, context_dict))
def layer_detail(request, layername, template='layers/layer_detail.html'): layer = _resolve_layer(request, layername, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) # assert False, str(layer_bbox) config = layer.attribute_config() # only owners and admins can view unpublished layers if not layer.is_published: if request.user != layer.owner and not request.user.is_superuser: return HttpResponse(_PERMISSION_MSG_VIEW, status=403, content_type="text/plain") # TODO (Mapstory): This has been commented out to force the client to make a getCapabilities request in order # to pull in the time dimension data. Ideally we would cache time data just like the srs and bbox data to prevent # making the getCapabilities request. # Add required parameters for GXP lazy-loading #layer_bbox = layer.bbox #bbox = [float(coord) for coord in list(layer_bbox[0:4])] #srid = layer.srid # Transform WGS84 to Mercator. #config["srs"] = srid if srid != "EPSG:4326" else "EPSG:900913" #config["bbox"] = 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.name, 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="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) keywords = json.dumps([tag.name for tag in layer.keywords.all()]) if request.method == "POST": keywords_form = KeywordsForm(request.POST, instance=layer) metadata_form = MetadataForm(instance=layer) if 'keywords' in request.POST: if keywords_form.is_valid(): keywords_form.save() new_keywords = keywords_form.cleaned_data['keywords'] layer.keywords.set(*new_keywords) layer.save() metadata_form = MetadataForm(instance=layer) published_form = PublishStatusForm(instance=layer) elif 'title' in request.POST: metadata_form = MetadataForm(request.POST, instance=layer) if metadata_form.is_valid(): metadata_form.save() # update all the metadata if metadata_form.cleaned_data['category'] is not None: new_category = TopicCategory.objects.get( id=metadata_form.cleaned_data['category'].id) Layer.objects.filter(id=layer.id).update( category=new_category) layer.title = metadata_form.cleaned_data['title'] layer.language = metadata_form.cleaned_data['language'] layer.distribution_url = metadata_form.cleaned_data[ 'distribution_url'] layer.data_quality_statement = metadata_form.cleaned_data[ 'data_quality_statement'] layer.purpose = metadata_form.cleaned_data['purpose'] layer.is_published = metadata_form.cleaned_data['is_published'] layer.save() keywords_form = KeywordsForm(instance=layer) elif 'add_keyword' in request.POST: layer.keywords.add(request.POST['add_keyword']) layer.save() elif 'remove_keyword' in request.POST: layer.keywords.remove(request.POST['remove_keyword']) layer.save() else: keywords_form = KeywordsForm(instance=layer) metadata_form = MetadataForm(instance=layer) content_moderators = Group.objects.filter(name='content_moderator').first() thumbnail_dir = os.path.join(settings.MEDIA_ROOT, 'thumbs') default_thumbnail_array = layer.get_thumbnail_url().split('/') default_thumbnail_name = default_thumbnail_array[ len(default_thumbnail_array) - 1] default_thumbnail = os.path.join(thumbnail_dir, default_thumbnail_name) if request.method == 'POST': thumb_form = ThumbnailImageForm(request.POST, request.FILES) if thumb_form.is_valid(): new_img = ThumbnailImage( thumbnail_image=request.FILES['thumbnail_image']) new_img.save() user_upload_thumbnail = ThumbnailImage.objects.all()[0] user_upload_thumbnail_filepath = str( user_upload_thumbnail.thumbnail_image) # only create backup for original thumbnail if os.path.isfile(default_thumbnail + '.bak') is False: os.rename(default_thumbnail, default_thumbnail + '.bak') os.rename(user_upload_thumbnail_filepath, default_thumbnail) else: thumb_form = ThumbnailImageForm() thumbnail = layer.get_thumbnail_url context_dict = { "resource": layer, "permissions_json": _perms_info_json(layer), "documents": get_related_documents(layer), "metadata": metadata, "keywords": keywords, "is_layer": True, "wps_enabled": settings.OGC_SERVER['default']['WPS_ENABLED'], "keywords_form": keywords_form, "metadata_form": metadata_form, "content_moderators": content_moderators, "thumbnail": thumbnail, "thumb_form": thumb_form } context_dict["viewer"] = json.dumps( map_obj.viewer_json(request.user, *(NON_WMS_BASE_LAYERS + [maplayer]))) context_dict["preview"] = getattr(settings, 'LAYER_PREVIEW_LIBRARY') 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 layer_property_names = [] for attrib in layer.attributes: if attrib.attribute not in settings.SCHEMA_DOWNLOAD_EXCLUDE and not ( attrib.attribute.endswith('_xd') or attrib.attribute.endswith('_parsed')): layer_property_names.append(attrib.attribute) layer_attrib_string = ','.join(layer_property_names) shapefile_link = layer.link_set.download().filter(mime='SHAPE-ZIP').first() if shapefile_link is not None: shapefile_link = shapefile_link.url + '&featureID=fakeID' + '&propertyName=' + layer_attrib_string context_dict["shapefile_link"] = shapefile_link csv_link = layer.link_set.download().filter(mime='csv').first() if csv_link is not None: csv_link = csv_link.url + '&featureID=fakeID' + '&propertyName=' + layer_attrib_string context_dict["csv_link"] = csv_link if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, layer) return render_to_response(template, RequestContext(request, context_dict))
def map_detail(request, mapid, snapshot=None, template='maps/map_detail.html'): ''' The view that show details of each map ''' 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: MapStory.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) chapters = map_obj.chapters layers = [] for chapter in chapters: layers = layers + list(chapter.local_layers) keywords = json.dumps([tag.name for tag in map_obj.keywords.all()]) if request.method == "POST": keywords_form = KeywordsForm(request.POST, instance=map_obj) published_form = PublishStatusForm(instance=map_obj) if 'keywords' in request.POST: if keywords_form.is_valid(): keywords_form.save() new_keywords = keywords_form.cleaned_data['keywords'] map_obj.keywords.set(*new_keywords) map_obj.save() published_form = PublishStatusForm(instance=map_obj) elif 'published_submit_btn' in request.POST: published_form = PublishStatusForm(request.POST, instance=map_obj) if published_form.is_valid(): published_form.save() map_obj.is_published = published_form.cleaned_data['is_published'] map_obj.save() keywords_form = KeywordsForm(instance=map_obj) elif 'add_keyword' in request.POST: map_obj.keywords.add(request.POST['add_keyword']) map_obj.save() elif 'remove_keyword' in request.POST: map_obj.keywords.remove(request.POST['remove_keyword']) map_obj.save() else: keywords_form = KeywordsForm(instance=map_obj) published_form = PublishStatusForm(instance=map_obj) map_thumbnail_dir = os.path.join(settings.MEDIA_ROOT, 'thumbs') map_default_thumbnail_array = map_obj.get_thumbnail_url().split('/') map_default_thumbnail_name = 'map' + str(mapid) + '.jpg' map_default_thumbnail = os.path.join(map_thumbnail_dir, map_default_thumbnail_name) # TODO: create function to handle map and layer thumbs if request.method == 'POST': map_thumb_form = ThumbnailImageForm(request.POST, request.FILES) if map_thumb_form.is_valid(): map_new_img = ThumbnailImage( thumbnail_image=request.FILES['thumbnail_image'] ) map_new_img.save() map_obj.save_thumbnail(map_default_thumbnail_name, map_new_img) map_user_upload_thumbnail = ThumbnailImage.objects.all()[0] map_user_upload_thumbnail_filepath = str( map_user_upload_thumbnail.thumbnail_image ) os.rename(map_user_upload_thumbnail_filepath, map_default_thumbnail) else: map_thumb_form = ThumbnailImageForm() map_thumbnail = map_obj.get_thumbnail_url update_es_index(MapStory, MapStory.objects.get(id=map_obj.id)) context_dict = { 'config': config, 'resource': map_obj, 'layers': layers, 'keywords': keywords, 'permissions_json': _perms_info_json(map_obj), 'documents': get_related_documents(map_obj), 'keywords_form': keywords_form, 'published_form': published_form, 'thumbnail': map_thumbnail, 'thumb_form': map_thumb_form } if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, map_obj) return render_to_response(template, RequestContext(request, context_dict))
def map_detail(request, mapid, snapshot=None, template='maps/map_detail.html'): ''' The view that show details of each map ''' 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: MapStory.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) chapters = map_obj.chapters layers = [] for chapter in chapters: layers = layers + list(chapter.local_layers) keywords = json.dumps([tag.name for tag in map_obj.keywords.all()]) if request.method == "POST": keywords_form = KeywordsForm(request.POST, instance=map_obj) published_form = PublishStatusForm(instance=map_obj) if 'keywords' in request.POST: if keywords_form.is_valid(): keywords_form.save() new_keywords = keywords_form.cleaned_data['keywords'] map_obj.keywords.set(*new_keywords) map_obj.save() published_form = PublishStatusForm(instance=map_obj) elif 'published_submit_btn' in request.POST: published_form = PublishStatusForm(request.POST, instance=map_obj) if published_form.is_valid(): published_form.save() map_obj.is_published = published_form.cleaned_data[ 'is_published'] map_obj.save() keywords_form = KeywordsForm(instance=map_obj) elif 'add_keyword' in request.POST: map_obj.keywords.add(request.POST['add_keyword']) map_obj.save() elif 'remove_keyword' in request.POST: map_obj.keywords.remove(request.POST['remove_keyword']) map_obj.save() else: keywords_form = KeywordsForm(instance=map_obj) published_form = PublishStatusForm(instance=map_obj) map_thumbnail_dir = os.path.join(settings.MEDIA_ROOT, 'thumbs') map_default_thumbnail_array = map_obj.get_thumbnail_url().split('/') map_default_thumbnail_name = 'map' + str(mapid) + '.jpg' map_default_thumbnail = os.path.join(map_thumbnail_dir, map_default_thumbnail_name) # TODO: create function to handle map and layer thumbs if request.method == 'POST': map_thumb_form = ThumbnailImageForm(request.POST, request.FILES) if map_thumb_form.is_valid(): map_new_img = ThumbnailImage( thumbnail_image=request.FILES['thumbnail_image']) map_new_img.save() map_obj.save_thumbnail(map_default_thumbnail_name, map_new_img) map_user_upload_thumbnail = ThumbnailImage.objects.all()[0] map_user_upload_thumbnail_filepath = str( map_user_upload_thumbnail.thumbnail_image) os.rename(map_user_upload_thumbnail_filepath, map_default_thumbnail) else: map_thumb_form = ThumbnailImageForm() map_thumbnail = map_obj.get_thumbnail_url update_es_index(MapStory, MapStory.objects.get(id=map_obj.id)) context_dict = { 'config': config, 'resource': map_obj, 'layers': layers, 'keywords': keywords, 'permissions_json': _perms_info_json(map_obj), 'documents': get_related_documents(map_obj), 'keywords_form': keywords_form, 'published_form': published_form, 'thumbnail': map_thumbnail, 'thumb_form': map_thumb_form } if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, map_obj) return render_to_response(template, RequestContext(request, context_dict))