diff options
-rw-r--r-- | chimere/rss/feeds.py | 94 | ||||
-rw-r--r-- | chimere/rss/views.py | 92 | ||||
-rw-r--r-- | chimere/settings.py.example | 7 |
3 files changed, 113 insertions, 80 deletions
diff --git a/chimere/rss/feeds.py b/chimere/rss/feeds.py index c24281c..af7956b 100644 --- a/chimere/rss/feeds.py +++ b/chimere/rss/feeds.py @@ -32,7 +32,6 @@ class LatestPOIsByCategory(Feed): ''' Last Points of interests by category in Feeds ''' - title_template = "rss_title.html" description_template = "rss_descr.html" # Get extra url, after rss/category/ -> bits[0]=id of category @@ -42,7 +41,7 @@ class LatestPOIsByCategory(Feed): return Category.objects.get(id__exact=bits[0]) # Define the title of the feed, here The name of the category def title(self, obj): - return "Chimere - %s" % obj.name + return u"%s - %s" % (settings.PROJECT_NAME, obj.name) # Define the link of the feed. Feeds agregators update at this link def link(self, obj): if not obj: @@ -57,15 +56,19 @@ class LatestPOIsByCategory(Feed): # Get thirst the attribute point of the marker # Then we had to transform this to the good system metric. From srid=4326 to srid=900913 coord = item.point - coord.transform(settings.EPSG_PROJECTION) - return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + #coord.transform(settings.EPSG_PROJECTION) + lnk = settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + \ +str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + return lnk # Date of the Marker when it has been available def item_pubdate(self,item): - return item.avail_date + return item.available_date # Requests to marker where its category match the category is requested AND its status is available # This returns a list of the 15 last markers/POIs ordering by date def items(self, obj): - return Marker.objects.filter(subcategory__category__id__exact=obj.id, status__exact='A').order_by('-avail_date')[:15] + return Marker.objects.filter(status__exact='A', + categories__subcategory__category__id__exact=obj.id).order_by( + '-available_date')[:15] class LatestPOIsBySubCategory(Feed): ''' @@ -73,14 +76,14 @@ class LatestPOIsBySubCategory(Feed): ''' title_template = "rss_title.html" description_template = "rss_descr.html" - def get_object(self, bits): if len(bits) != 1: raise ObjectDoesNotExist return SubCategory.objects.get(id__exact=bits[0]) def title(self, obj): - return obj.category.name + "Chimere - %s" % obj.name + return obj.category.name + u"%s - %s" % (settings.PROJECT_NAME, + obj.name) def link(self, obj): if not obj: @@ -93,14 +96,16 @@ class LatestPOIsBySubCategory(Feed): def item_link(self, item): # Renvoyer le permalink du POI : coord = item.point - coord.transform(settings.EPSG_PROJECTION) - return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + #coord.transform(settings.EPSG_PROJECTION) + return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + \ +str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' def item_pubdate(self,item): - return item.avail_date + return item.available_date def items(self, obj): - return Marker.objects.filter(subcategory__id__exact=obj.id, status__exact='A').order_by('-avail_date')[:15] + return Marker.objects.filter(categories_subcategory__id__exact=obj.id, + status__exact='A').order_by('-available_date')[:15] class LatestPOIs(Feed): ''' @@ -110,7 +115,7 @@ class LatestPOIs(Feed): description_template = "rss_descr.html" def title(self): - return "Chimere - Last POIs" + return u"%s - Last POIs" % settings.PROJECT_NAME def link(self): return settings.BASE_URL + 'rss/categories/' @@ -121,14 +126,16 @@ class LatestPOIs(Feed): def item_link(self, item): # Renvoyer le permalink du POI : coord = item.point - coord.transform(settings.EPSG_PROJECTION) - return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + #coord.transform(settings.EPSG_PROJECTION) + return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + \ +str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' def item_pubdate(self,item): - return item.avail_date + return item.available_date def items(self): - return Marker.objects.filter(status__exact='A').order_by('-avail_date')[:15] + return Marker.objects.filter(status__exact='A' + ).order_by('-available_date')[:15] class LatestPOIsByZone(Feed): @@ -146,18 +153,19 @@ class LatestPOIsByZone(Feed): def get_object(self, bits): if len(bits) != 1: raise ObjectDoesNotExist - # Get the extra url. Parameters are the coordinates of the zone (the upper left and lower right points) + # Get the extra url. Parameters are the coordinates of the zone (the + # upper left and lower right points) # Then define the upper right and lower left points coordinates = str(bits[0]).split(',') upper_left_lat = float(coordinates[0]) upper_left_lon = float(coordinates[1]) lower_right_lat = float(coordinates[2]) lower_right_lon = float(coordinates[3]) - + """ upper_right_lat = upper_left_lat upper_right_lon = lower_right_lon lower_left_lat = lower_right_lat - lower_left_lon = upper_left_lon + lower_left_lon = upper_left_lon""" # Define a Polygon with the 4 points of the zone. # Cordinates are define with a srid=900913, use by google, yahoo but no OpenStreeMap areaBox = Polygon(((upper_left_lon, upper_left_lat), @@ -167,36 +175,42 @@ class LatestPOIsByZone(Feed): (upper_left_lon, upper_left_lat)), srid=settings.EPSG_PROJECTION) # OSM uses the standard srid=4326, wich uses the real pairs latitude/longitude in degrees. - areaBox.transform(settings.EPSG_DISPLAY_PROJECTION) + #areaBox.transform(settings.EPSG_DISPLAY_PROJECTION) return areaBox - + def title(self, obj): - return "Chimere - Last POIs by area" + return u"%s - Last POIs by area" % settings.PROJECT_NAME # Define the link of the feed. It's the same url as we get in the method get_object def link(self, obj): if not obj: raise FeedDoesNotExist - return settings.BASE_URL + 'rss/area/' + str(self.upper_left_lat) + ',' + str(self.upper_left_lon) + ',' + str(self.lower_right_lat) + ',' + str(self.lower_right_lon) + return settings.BASE_URL + 'rss/area/' \ + + str(self.upper_left_lat) + ',' + str(self.upper_left_lon) + \ + ',' + str(self.lower_right_lat) + ',' + str(self.lower_right_lon) def description(self, obj): return "" - + # Link of the item/POI. Here the link is the permalink of the marker/POI def item_link(self, item): # Return the permalink of the POI : # Get thirst the attribute point of the marker # Then we had to transform this to the good system metric. From srid=4326 to srid=900913 coord = item.point - coord.transform(settings.EPSG_PROJECTION) - return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + #coord.transform(settings.EPSG_PROJECTION) + return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + \ +str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + # Return the date of the Marker def item_pubdate(self,item): - return item.avail_date + return item.available_date + # Request to return Markers WHERE there points are containes in the zone which is requested. # This returns a list of the 15 last markers/POIs ordering by date def items(self, obj): - return Marker.objects.filter(point__contained=obj, status__exact='A').order_by('-avail_date')[:15] + return Marker.objects.filter(point__contained=obj, status__exact='A' + ).order_by('-available_date')[:15] class LatestPOIsByZoneID(Feed): ''' @@ -204,15 +218,14 @@ class LatestPOIsByZoneID(Feed): ''' title_template = "rss_title.html" description_template = "rss_descr.html" - + def get_object(self, bits): if len(bits) != 1: raise ObjectDoesNotExist - return Area.objects.get(id__exact=bits[0]) def title(self, obj): - return "Chimere - Last POIs of %s" % obj.name + return u"%s - Last POIs of %s" % (settings.PROJECT_NAME, obj.name) def link(self, obj): if not obj: @@ -225,29 +238,28 @@ class LatestPOIsByZoneID(Feed): def item_link(self, item): coord = item.point coord.transform(settings.EPSG_PROJECTION) - return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' + return settings.BASE_URL + '?zoom=16&lat=' + str(coord.y) + '&lon=' + \ +str(coord.x) + '&layers=BTT&checked_categories=1&display_submited=false' def item_pubdate(self,item): - return item.avail_date + return item.available_date def items(self, obj): upper_left_lat = float(obj.upper_left_corner.x) upper_left_lon = float(obj.upper_left_corner.y) lower_right_lat = float(obj.lower_right_corner.x) lower_right_lon = float(obj.lower_right_corner.y) - + ''' upper_right_lat = upper_left_lat upper_right_lon = lower_right_lon lower_left_lat = lower_right_lat lower_left_lon = upper_left_lon - - areaBox = Polygon(((upper_left_lon, upper_left_lat), + ''' + areaBox = Polygon(((upper_left_lon, upper_left_lat), (upper_right_lon, upper_right_lat), (lower_right_lon, lower_right_lat), (lower_left_lon, lower_left_lat), (upper_left_lon, upper_left_lat)), srid=settings.EPSG_PROJECTION) - - areaBox.transform(settings.EPSG_DISPLAY_PROJECTION) - - return Marker.objects.filter(point__contained=areaBox) + #areaBox.transform(settings.EPSG_DISPLAY_PROJECTION) + return Marker.objects.filter(point__contained=areaBox) diff --git a/chimere/rss/views.py b/chimere/rss/views.py index 12269cd..dc42584 100644 --- a/chimere/rss/views.py +++ b/chimere/rss/views.py @@ -36,11 +36,11 @@ from chimere.main.actions import actions from chimere.main.models import Category, SubCategory, PropertyModel, Marker, \ Route, News, Area, Color -# Pierre CLARENC : 19/01/2010 : Add AreaWidget +# Pierre CLARENC : 19/01/2010 : Add AreaWidget from chimere.main.widgets import getMapJS, PointChooserWidget, \ RouteChooserWidget, URL_OSM_JS, URL_OSM_CSS, AreaWidget # Pierre CLARENC : 19/01/2010 : End -# Pierre CLARENC : 19/01/2010 : Add AreaAdminForm +# Pierre CLARENC : 19/01/2010 : Add AreaAdminForm from chimere.main.forms import MarkerForm, RouteForm, AreaForm, notifyStaff # Pierre CLARENC : 19/01/2010 : End @@ -50,96 +50,114 @@ def rss(request): ''' # If the form has been submited if request.method == "POST": - - # User has defined the kind of POI he is interested in : POI in a area (GET method is used for the link with RSS icon in the browser) + # User has defined the kind of POI he is interested in : POI in a area + # (GET method is used for the link with RSS icon in the browser) if 'rss_category' in request.POST: #User wants to follow all the new POI if request.POST['rss_category'] == 'global': feeds_link = '/' + settings.EXTRA_URL + 'rss/global/' return HttpResponseRedirect(feeds_link) # User wants to follow all the new POI by category or subcategory - elif request.POST['rss_category'] == 'poi': + elif request.POST['rss_category'] == 'poi': response_dct = {'actions':actions, 'action_selected':'rss', - 'media_path':settings.MEDIA_URL, - 'extra_url':settings.EXTRA_URL, - 'category_rss_feed':'category', - 'sub_categories':SubCategory.getAvailable(['M', 'B']) + 'media_path':settings.MEDIA_URL, + 'extra_url':settings.EXTRA_URL, + 'category_rss_feed':'category', + 'sub_categories':SubCategory.getAvailable(['M', 'B']) } return render_to_response('rss.html', response_dct) # User wants to follow all the new POI situated in a defined area - elif request.POST['rss_category'] == 'area': + elif request.POST['rss_category'] == 'area': # An unbound form - form = AreaForm() + form = AreaForm() response_dct = {'actions':actions, 'action_selected':'rss', 'media_path':settings.MEDIA_URL, 'extra_url':settings.EXTRA_URL, 'map_layer':settings.MAP_LAYER, 'extra_head':form.media, - 'form':form, - 'category_rss_feed':'area', + 'form':form, + 'category_rss_feed':'area', 'area_id':Area.getAvailable(), - 'area_widget':AreaWidget().render('area', None) + 'area_widget':AreaWidget().render('area', None) } return render_to_response('rss.html', response_dct) # Error when submitting the form else: + error = _("Error - Please choose a correct choice in the list") response_dct = {'actions':actions, 'action_selected':'rss', 'media_path':settings.MEDIA_URL, 'extra_url':settings.EXTRA_URL, - 'error_message':'Error - Please choose a correct choice in the list', + 'error_message':error, 'category_rss_feed':'category', - 'sub_categories':SubCategory.getAvailable(['M', 'B']) + 'sub_categories':SubCategory.getAvailable(['M', + 'B']) } return render_to_response('rss.html', response_dct) - # User has specified the category or subcategory he wants to follow => we redirect him towards the related rss feed - if 'subcategory' in request.POST and request.POST['subcategory'] != '': + # User has specified the category or subcategory he wants to follow => + # we redirect him towards the related rss feed + if 'subcategory' in request.POST and request.POST['subcategory'] != '': idCat = request.POST['subcategory'] if idCat.find("cat_") != -1 : - list_Cat = idCat.split('_') - feeds_link = '/' + settings.EXTRA_URL + 'rss/category/' + list_Cat[1] + list_Cat = idCat.split('_') + feeds_link = '/' + settings.EXTRA_URL + 'rss/category/' + feeds_link += list_Cat[1] return HttpResponseRedirect(feeds_link) else: - feeds_link = '/' + settings.EXTRA_URL + 'rss/subcategory/' + idCat - return HttpResponseRedirect(feeds_link) + feeds_link = '/' + settings.EXTRA_URL + 'rss/subcategory/' + \ + idCat + return HttpResponseRedirect(feeds_link) - # User has specified the ID of the area he wants to follow + # User has specified the ID of the area he wants to follow if 'id_area' in request.POST and request.POST['id_area'] != '': - feeds_link = '/' + settings.EXTRA_URL + 'rss/areaid/' + request.POST['id_area'] + feeds_link = '/' + settings.EXTRA_URL + 'rss/areaid/' \ + + request.POST['id_area'] return HttpResponseRedirect(feeds_link) - # User has specified the area he wants to follow => we redirect him towards the related rss feed (using upper left and lower right coordinates) - elif 'upper_left_lat' in request.POST and request.POST['upper_left_lat'] != '' and 'upper_left_lon' in request.POST and request.POST['upper_left_lon'] != '' and 'lower_right_lon' in request.POST and request.POST['lower_right_lon'] != '' and 'lower_right_lat' in request.POST and request.POST['lower_right_lat'] != '' : - feeds_link = '/' + settings.EXTRA_URL + 'rss/area/' + request.POST['upper_left_lat'] + ',' + request.POST['upper_left_lon'] + ',' + request.POST['lower_right_lat'] + ',' + request.POST['lower_right_lon'] + # User has specified the area he wants to follow => we redirect him + # towards the related rss feed (using upper left and lower right + # coordinates) + elif 'upper_left_lat' in request.POST and \ + request.POST['upper_left_lat'] != '' and \ + 'upper_left_lon' in request.POST and \ + request.POST['upper_left_lon'] != '' and \ + 'lower_right_lon' in request.POST and \ + request.POST['lower_right_lon'] != '' and \ + 'lower_right_lat' in request.POST and \ + request.POST['lower_right_lat'] != '' : + feeds_link = '/' + settings.EXTRA_URL + 'rss/area/' + \ +request.POST['upper_left_lat'] + ',' + request.POST['upper_left_lon'] + ',' + \ +request.POST['lower_right_lat'] + ',' + request.POST['lower_right_lon'] return HttpResponseRedirect(feeds_link) - - # GET method is used for linking with the RSS icon in the browser when user wants to choose a category to follow + + # GET method is used for linking with the RSS icon in the browser when user + # wants to choose a category to follow elif request.method == "GET" and 'rss_category' in request.GET: if request.GET['rss_category'] == 'global': feeds_link = '/' + settings.EXTRA_URL + 'rss/global/' return HttpResponseRedirect(feeds_link) if request.GET['rss_category'] == 'poi': response_dct = {'actions':actions, 'action_selected':'rss', - 'media_path':settings.MEDIA_URL, - 'extra_url':settings.EXTRA_URL, - 'category_rss_feed':'category', - 'sub_categories':SubCategory.getAvailable(['M', 'B']) + 'media_path':settings.MEDIA_URL, + 'extra_url':settings.EXTRA_URL, + 'category_rss_feed':'category', + 'sub_categories':SubCategory.getAvailable(['M', 'B']) } return render_to_response('rss.html', response_dct) if request.GET['rss_category'] == 'area': # An unbound form - form = AreaForm() + form = AreaForm() response_dct = {'actions':actions, 'action_selected':'rss', 'media_path':settings.MEDIA_URL, 'extra_url':settings.EXTRA_URL, 'map_layer':settings.MAP_LAYER, 'extra_head':form.media, - 'form':form, - 'category_rss_feed':'area', + 'form':form, + 'category_rss_feed':'area', 'area_id':Area.getAvailable(), - 'area_widget':AreaWidget().render('area', None) + 'area_widget':AreaWidget().render('area', None) } return render_to_response('rss.html', response_dct) diff --git a/chimere/settings.py.example b/chimere/settings.py.example index 54118a9..48785d5 100644 --- a/chimere/settings.py.example +++ b/chimere/settings.py.example @@ -128,12 +128,12 @@ MIDDLEWARE_CLASSES = ( ROOT_URLCONF = 'chimere.urls' -TEMPLATE_DIRS = ( +TEMPLATE_DIRS = [ # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. ROOT_PATH + 'templates', -) +] INSTALLED_APPS = ( 'django.contrib.auth', @@ -147,3 +147,6 @@ INSTALLED_APPS = ( # activate it if you want to use RSS feeds 'chimere.rss' ) + +if 'chimere.rss' in INSTALLED_APPS: + TEMPLATE_DIRS.append(ROOT_PATH + 'rss/templates') |