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') | 
