def mapstory_view(request, slug, snapshot=None, template='composer_new/composer.html'): """ The view that returns the map viewer opened to the mapstory with the given ID. """ story_obj = _resolve_map( request, slug, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = story_obj.viewer_json(request, access_token) else: config = snapshot_config(snapshot, story_obj, request.user) config['about']['detail_url'] = slug layers = json.dumps({"defaultLayer": BaselayerDefault.objects.first().layer.name, "layers": map(lambda x: x.to_object(), Baselayer.objects.all())}) return render_to_response(template, RequestContext(request, { 'config': json.dumps(config), 'composerMode': False, 'layers': layers }))
def get_context_data(self, **kwargs): """Prepare context data.""" mapid = self.kwargs.get('mapid') snapshot = self.kwargs.get('snapshot') request = self.request map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = map_obj.viewer_json(request.user, access_token) else: config = snapshot_config(snapshot, map_obj, request.user, access_token) # list all required layers layers = Layer.objects.all() map_layers = MapLayer.objects.filter( map_id=mapid).order_by('stack_order') context = { 'config': json.dumps(config), 'create': False, 'layers': layers, 'resource': map_obj, 'map_layers': map_layers, 'preview': getattr(settings, 'LAYER_PREVIEW_LIBRARY', '') } return context
def map_view_wm(request, mapid, snapshot=None, layer_name=None, template='maps/map_view.html'): """ The view that returns the map composer opened to the map with the given map ID. """ map_obj = _resolve_map( request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = map_obj.viewer_json(request.user, access_token) else: config = snapshot_config(snapshot, map_obj, request.user, access_token) if layer_name: config = add_layers_to_map_config(request, map_obj, (layer_name, ), False) config = gxp2wm(config) return render_to_response(template, RequestContext(request, { 'config': json.dumps(config), 'map': map_obj, 'preview': getattr( settings, 'LAYER_PREVIEW_LIBRARY', '') }))
def get_context_data(self, **kwargs): # list all required layers mapid = self.kwargs.get('mapid') snapshot = self.kwargs.get('snapshot') request = self.request map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) layers = Layer.objects.all() map_layers = MapLayer.objects.filter( map_id=mapid).order_by('stack_order') context = { 'create': False, 'config': json.dumps(config), 'layers': layers, 'map_layers': map_layers, 'map': map_obj, 'preview': getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } return context
def get_context_data(self, **kwargs): # list all required layers mapid = self.kwargs.get('mapid') snapshot = self.kwargs.get('snapshot') request = self.request map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) layers = Layer.objects.all() map_layers = MapLayer.objects.filter( map_id=mapid).order_by('stack_order') context = { 'create': False, 'config': json.dumps(config), 'layers': layers, 'map_layers': map_layers, 'map': map_obj, 'preview': getattr( settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } return context
def mapstory_view(request, slug, snapshot=None, template='composer_new/composer.html'): """ The view that returns the map viewer opened to the mapstory with the given ID. """ story_obj = _resolve_map(request, slug, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = story_obj.viewer_json(request, access_token) else: config = snapshot_config(snapshot, story_obj, request.user) config['about']['detail_url'] = slug return render_to_response( template, RequestContext(request, { 'config': json.dumps(config), 'composerMode': False, }))
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: 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) if request.method == "POST": if 'keywords' in request.POST: keywords_form = KeywordsForm(request.POST, instance=map_obj) 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) context_dict = { 'config': config, 'resource': map_obj, 'layers': layers, 'permissions_json': _perms_info_json(map_obj), "documents": get_related_documents(map_obj), "keywords_form": keywords_form, "published_form": published_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: 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) if request.method == "POST": keywords_form = KeywordsForm(request.POST, instance=map_obj) published_form = PublishStatusForm(request.POST, instance=map_obj) if published_form.is_valid(): map_obj.is_published = published_form.cleaned_data['is_published'] map_obj.save() if keywords_form.is_valid(): new_keywords = keywords_form.cleaned_data['keywords'] map_obj.keywords.clear() map_obj.keywords.add(*new_keywords) map_obj.save() return HttpResponseRedirect( reverse('map_detail', args=(map_obj.id, ))) else: keywords_form = KeywordsForm(instance=map_obj) published_form = PublishStatusForm(instance=map_obj) context_dict = { 'config': config, 'resource': map_obj, 'layers': layers, 'permissions_json': _perms_info_json(map_obj), "documents": get_related_documents(map_obj), "keywords_form": keywords_form, "published_form": published_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 mapstory_view(request, storyid, snapshot=None, template='maps/mapstory_map_viewer.html'): """ The view that returns the map viewer opened to the mapstory with the given ID. """ story_obj = _resolve_map(request, storyid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = story_obj.viewer_json(request.user) else: config = snapshot_config(snapshot, story_obj, request.user) return render_to_response(template, RequestContext(request, { 'config': json.dumps(config) }))
def mapstory_view(request, storyid, snapshot=None, template='viewer/story_viewer.html'): """ The view that returns the map viewer opened to the mapstory with the given ID. """ story_obj = _resolve_map(request, storyid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = story_obj.viewer_json(request.user) else: config = snapshot_config(snapshot, story_obj, request.user) return render_to_response(template, RequestContext(request, { 'config': json.dumps(config) }))
def mapstory_view(request, slug, snapshot=None, template='composer_new/composer.html'): """ The view that returns the map viewer opened to the mapstory with the given ID. """ story_obj = _resolve_map(request, slug, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = story_obj.viewer_json(request, access_token) else: config = snapshot_config(snapshot, story_obj, request.user) config['about']['detail_url'] = slug layers = json.dumps({ "defaultLayer": BaselayerDefault.objects.first().layer.name, "layers": map(lambda x: x.to_object(), Baselayer.objects.all()) }) return render_to_response( template, RequestContext(request, { 'config': json.dumps(config), 'composerMode': False, 'layers': layers }))
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) print layers 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) context_dict = { 'config': config, 'resource': map_obj, 'layers': layers, 'permissions_json': _perms_info_json(map_obj), 'documents': get_related_documents(map_obj), 'keywords_form': keywords_form, 'published_form': published_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 get_context_data(self, **kwargs): request = self.request if request and 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None snapshot = self.kwargs.get('snapshot') DEFAULT_MAP_CONFIG, DEFAULT_BASE_LAYERS = default_map_config(request) layers = Layer.objects.all() if request.method == 'GET' and 'copy' in request.GET: """Prepare context data.""" request = self.request mapid = self.request.GET['copy'] map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) # list all required layers map_layers = MapLayer.objects.filter( map_id=mapid).order_by('stack_order') context = { 'config': json.dumps(config), 'create': False, 'layers': layers, 'map': map_obj, 'map_layers': map_layers, 'preview': getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } return context else: if request.method == 'GET': params = request.GET elif request.method == 'POST': params = request.POST else: return self.render_to_response(status=405) if 'layer' in params: bbox = None map_obj = Map(projection=getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857')) for layer_name in params.getlist('layer'): try: layer = _resolve_layer(request, layer_name) except ObjectDoesNotExist: # bad layer, skip continue if not request.user.has_perm( 'view_resourcebase', obj=layer.get_self_resource()): # invisible layer, skip inclusion continue layer_bbox = layer.bbox # assert False, str(layer_bbox) if bbox is None: bbox = list(layer_bbox[0:4]) else: bbox[0] = min(bbox[0], layer_bbox[0]) bbox[1] = min(bbox[1], layer_bbox[1]) bbox[2] = max(bbox[2], layer_bbox[2]) bbox[3] = max(bbox[3], layer_bbox[3]) config = layer.attribute_config() # Add required parameters for GXP lazy-loading config["title"] = layer.title config["queryable"] = True config["srs"] = getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857') config["bbox"] = bbox if config["srs"] != 'EPSG:3857' \ else llbbox_to_mercator( [float(coord) for coord in bbox]) if layer.storeType == "remoteStore": service = layer.remote_service # Probably not a good idea to send the access token to every remote service. # This should never match, so no access token should be sent to remote services. ogc_server_url = urlsplit( ogc_server_settings.PUBLIC_LOCATION).netloc service_url = urlsplit(service.base_url).netloc if access_token and ogc_server_url == service_url and \ 'access_token' not in service.base_url: url = '%s?access_token=%s' % (service.base_url, access_token) else: url = service.base_url map_layers = MapLayer(map=map_obj, name=layer.typename, ows_url=layer.ows_url, layer_params=json.dumps(config), visibility=True, source_params=json.dumps({ "ptype": service.ptype, "remote": True, "url": url, "name": service.name, "title": "[R] %s" % service.title })) else: ogc_server_url = urlsplit( ogc_server_settings.PUBLIC_LOCATION).netloc layer_url = urlsplit(layer.ows_url).netloc if access_token and ogc_server_url == layer_url and \ 'access_token' not in layer.ows_url: url = layer.ows_url + '?access_token=' + \ access_token else: url = layer.ows_url map_layers = MapLayer( map=map_obj, name=layer.typename, ows_url=url, # use DjangoJSONEncoder to handle Decimal values layer_params=json.dumps(config, cls=DjangoJSONEncoder), visibility=True) if bbox and len(bbox) >= 4: minx, miny, maxx, maxy = [float(coord) for coord in bbox] x = (minx + maxx) / 2 y = (miny + maxy) / 2 if getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857') == "EPSG:4326": center = list((x, y)) else: center = list(forward_mercator((x, y))) if center[1] == float('-inf'): center[1] = 0 BBOX_DIFFERENCE_THRESHOLD = 1e-5 # Check if the bbox is invalid valid_x = (maxx - minx)**2 > BBOX_DIFFERENCE_THRESHOLD valid_y = (maxy - miny)**2 > BBOX_DIFFERENCE_THRESHOLD if valid_x: width_zoom = math.log(360 / abs(maxx - minx), 2) else: width_zoom = 15 if valid_y: height_zoom = math.log(360 / abs(maxy - miny), 2) else: height_zoom = 15 map_obj.center_x = center[0] map_obj.center_y = center[1] map_obj.zoom = math.ceil(min(width_zoom, height_zoom)) map_obj.handle_moderated_uploads() if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) config['fromLayer'] = True context = { 'config': json.dumps(config), 'create': True, 'layers': layers, 'map': map_obj, 'map_layers': map_layers, 'preview': getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } else: # list all required layers layers = Layer.objects.all() context = {'create': True, 'layers': layers} return context
def get_context_data(self, **kwargs): request = self.request if request and 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None snapshot = self.kwargs.get('snapshot') DEFAULT_MAP_CONFIG, DEFAULT_BASE_LAYERS = default_map_config(request) layers = Layer.objects.all() if request.method == 'GET' and 'copy' in request.GET: """Prepare context data.""" request = self.request mapid = self.request.GET['copy'] map_obj = _resolve_map( request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) # list all required layers map_layers = MapLayer.objects.filter( map_id=mapid).order_by('stack_order') context = { 'config': json.dumps(config), 'create': False, 'layers': layers, 'map': map_obj, 'map_layers': map_layers, 'preview': getattr( settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } return context else: if request.method == 'GET': params = request.GET elif request.method == 'POST': params = request.POST else: return self.render_to_response(status=405) if 'layer' in params: bbox = None map_obj = Map(projection=getattr( settings, 'DEFAULT_MAP_CRS', 'EPSG:3857')) for layer_name in params.getlist('layer'): try: layer = _resolve_layer(request, layer_name) except ObjectDoesNotExist: # bad layer, skip continue if not request.user.has_perm( 'view_resourcebase', obj=layer.get_self_resource()): # invisible layer, skip inclusion continue layer_bbox = layer.bbox # assert False, str(layer_bbox) if bbox is None: bbox = list(layer_bbox[0:4]) else: bbox[0] = min(bbox[0], layer_bbox[0]) bbox[1] = min(bbox[1], layer_bbox[1]) bbox[2] = max(bbox[2], layer_bbox[2]) bbox[3] = max(bbox[3], layer_bbox[3]) config = layer.attribute_config() # Add required parameters for GXP lazy-loading config["title"] = layer.title config["queryable"] = True config["srs"] = getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857') config["bbox"] = bbox if config["srs"] != 'EPSG:3857' \ else llbbox_to_mercator( [float(coord) for coord in bbox]) if layer.storeType == "remoteStore": service = layer.remote_service # Probably not a good idea to send the access token to every remote service. # This should never match, so no access token should be sent to remote services. ogc_server_url = urlparse.urlsplit( ogc_server_settings.PUBLIC_LOCATION).netloc service_url = urlparse.urlsplit( service.base_url).netloc if access_token and ogc_server_url == service_url and \ 'access_token' not in service.base_url: url = '%s?access_token=%s' % (service.base_url, access_token) else: url = service.base_url map_layers = MapLayer(map=map_obj, name=layer.typename, ows_url=layer.ows_url, layer_params=json.dumps(config), visibility=True, source_params=json.dumps({ "ptype": service.ptype, "remote": True, "url": url, "name": service.name, "title": "[R] %s" % service.title})) else: ogc_server_url = urlparse.urlsplit( ogc_server_settings.PUBLIC_LOCATION).netloc layer_url = urlparse.urlsplit(layer.ows_url).netloc if access_token and ogc_server_url == layer_url and \ 'access_token' not in layer.ows_url: url = layer.ows_url + '?access_token=' + \ access_token else: url = layer.ows_url map_layers = MapLayer( map=map_obj, name=layer.typename, ows_url=url, # use DjangoJSONEncoder to handle Decimal values layer_params=json.dumps( config, cls=DjangoJSONEncoder), visibility=True ) if bbox and len(bbox) >= 4: minx, miny, maxx, maxy = [float(coord) for coord in bbox] x = (minx + maxx) / 2 y = (miny + maxy) / 2 if getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857') == "EPSG:4326": center = list((x, y)) else: center = list(forward_mercator((x, y))) if center[1] == float('-inf'): center[1] = 0 BBOX_DIFFERENCE_THRESHOLD = 1e-5 # Check if the bbox is invalid valid_x = (maxx - minx) ** 2 > BBOX_DIFFERENCE_THRESHOLD valid_y = (maxy - miny) ** 2 > BBOX_DIFFERENCE_THRESHOLD if valid_x: width_zoom = math.log(360 / abs(maxx - minx), 2) else: width_zoom = 15 if valid_y: height_zoom = math.log(360 / abs(maxy - miny), 2) else: height_zoom = 15 map_obj.center_x = center[0] map_obj.center_y = center[1] map_obj.zoom = math.ceil(min(width_zoom, height_zoom)) map_obj.handle_moderated_uploads() if snapshot is None: config = map_obj.viewer_json(request) else: config = snapshot_config(snapshot, map_obj, request) config['fromLayer'] = True context = { 'config': json.dumps(config), 'create': True, 'layers': layers, 'map': map_obj, 'map_layers': map_layers, 'preview': getattr( settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', '') } else: # list all required layers layers = Layer.objects.all() context = { 'create': True, 'layers': layers } return context
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, slug, snapshot=None, template='maps/map_detail.html'): ''' The view that show details of each map ''' # MapStory specific change from mapid parameter to slug parameter map_obj = _resolve_map( request, slug, '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 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = map_obj.viewer_json(request, access_token) else: config = snapshot_config(snapshot, map_obj, request.user, access_token) config = json.dumps(config) layers = MapLayer.objects.filter(map=map_obj.id) links = map_obj.link_set.download() group = None if map_obj.group: try: group = GroupProfile.objects.get(slug=map_obj.group.name) except GroupProfile.DoesNotExist: group = None ### # MapStory Specific Changes ### chapters = map_obj.chapters # Overwrite the layers list so that we can add all layers from all 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(): new_keywords = keywords_form.cleaned_data['keywords'] map_obj.keywords.add(*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 = map_obj.get_thumbnail_url update_es_index(MapStory, MapStory.objects.get(id=map_obj.id)) # This will get URL encoded later and is used for the social media share URL share_url = "https://%s/story/%s" % (request.get_host(), map_obj.slug) share_title = "%s by %s." % (map_obj.title, map_obj.owner) share_description = map_obj.abstract # Check if user is admin in one of those organizations org_admin_memberships = [] memberships = OrganizationMembership.objects.filter( user_id=request.user.pk) for membership in memberships.all(): if membership.is_admin: org_admin_memberships.append(membership) if len(org_admin_memberships) < 1: org_admin_memberships = None ini_memberships = InitiativeMembership.objects.filter( user_id=request.user.pk) ini_admin_memberships = [] for m in ini_memberships.all(): if m.is_admin: ini_admin_memberships.append(m) if len(ini_admin_memberships) < 1: ini_admin_memberships = None ### # End MapStory Specific Changes ### context_dict = { 'config': config, 'resource': map_obj, 'group': group, '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), 'links': links, # MapStory Specific Additions 'keywords': keywords, 'keywords_form': keywords_form, 'published_form': published_form, 'thumbnail': map_thumbnail, 'share_url': share_url, 'share_title': share_title, 'share_description': share_description, 'organizations': org_admin_memberships, 'initiatives': ini_admin_memberships, } context_dict["preview"] = getattr( settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'geoext') context_dict["crs"] = getattr( settings, 'DEFAULT_MAP_CRS', 'EPSG:900913') if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, map_obj) # Favorites if request.user.is_authenticated(): context_dict["favorite_info"] = get_favorite_info( request.user, map_obj) return render(request, template, context=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, slug, snapshot=None, template='maps/map_detail.html'): ''' The view that show details of each map ''' # MapStory specific change from mapid parameter to slug parameter map_obj = _resolve_map(request, slug, '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 'access_token' in request.session: access_token = request.session['access_token'] else: access_token = None if snapshot is None: config = map_obj.viewer_json(request, access_token) else: config = snapshot_config(snapshot, map_obj, request.user, access_token) config = json.dumps(config) layers = MapLayer.objects.filter(map=map_obj.id) links = map_obj.link_set.download() group = None if map_obj.group: try: group = GroupProfile.objects.get(slug=map_obj.group.name) except GroupProfile.DoesNotExist: group = None ### # MapStory Specific Changes ### chapters = map_obj.chapters # Overwrite the layers list so that we can add all layers from all 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(): new_keywords = keywords_form.cleaned_data['keywords'] map_obj.keywords.add(*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 = map_obj.get_thumbnail_url update_es_index(MapStory, MapStory.objects.get(id=map_obj.id)) # This will get URL encoded later and is used for the social media share URL share_url = "https://%s/story/%s" % (request.get_host(), map_obj.slug) share_title = "%s by %s." % (map_obj.title, map_obj.owner) share_description = map_obj.abstract # Check if user is admin in one of those organizations org_admin_memberships = [] memberships = OrganizationMembership.objects.filter( user_id=request.user.pk) for membership in memberships.all(): if membership.is_admin: org_admin_memberships.append(membership) if len(org_admin_memberships) < 1: org_admin_memberships = None ini_memberships = InitiativeMembership.objects.filter( user_id=request.user.pk) ini_admin_memberships = [] for m in ini_memberships.all(): if m.is_admin: ini_admin_memberships.append(m) if len(ini_admin_memberships) < 1: ini_admin_memberships = None ### # End MapStory Specific Changes ### context_dict = { 'config': config, 'resource': map_obj, 'group': group, '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), 'links': links, # MapStory Specific Additions 'keywords': keywords, 'keywords_form': keywords_form, 'published_form': published_form, 'thumbnail': map_thumbnail, 'share_url': share_url, 'share_title': share_title, 'share_description': share_description, 'organizations': org_admin_memberships, 'initiatives': ini_admin_memberships, } context_dict["preview"] = getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'geoext') context_dict["crs"] = getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:900913') if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, map_obj) # Favorites if request.user.is_authenticated(): context_dict["favorite_info"] = get_favorite_info( request.user, map_obj) return render(request, template, context=context_dict)