summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-05-07 13:04:10 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-05-07 13:04:47 +0200
commit55a09a3c8f6446475b7a9c9693f19e5fb8830509 (patch)
treeb614d1f5be7b25ef67fb7d4397dd9a96fb91201d
parent7f06e73b305f7abcfcfd2968f65649f75b9d1a75 (diff)
downloadChimère-55a09a3c8f6446475b7a9c9693f19e5fb8830509.tar.bz2
Chimère-55a09a3c8f6446475b7a9c9693f19e5fb8830509.zip
Reactivate categories filtering by area
-rw-r--r--chimere/forms.py8
-rw-r--r--chimere/models.py22
-rw-r--r--chimere/static/chimere/css/styles.css6
-rw-r--r--chimere/static/chimere/img/layer-switcher-maximize.pngbin594 -> 566 bytes
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js5
-rw-r--r--chimere/templates/chimere/blocks/map_params.html1
-rw-r--r--chimere/templatetags/chimere_tags.py2
-rw-r--r--chimere/views.py30
8 files changed, 51 insertions, 23 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 84ae27b..ed6b5d7 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -125,10 +125,14 @@ class MarkerAdminFormBase(forms.ModelForm):
keys['initial'].update(property_dct)
else:
keys['initial'] = property_dct
+ subcategories = keys.pop('subcategories') \
+ if 'subcategories' in keys else []
super(MarkerAdminFormBase, self).__init__(*args, **keys)
if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = DatePickerWidget()
self.fields['end_date'].widget = DatePickerWidget()
+ if subcategories:
+ self.fields['categories'].choices = subcategories
def clean(self):
'''
@@ -203,10 +207,14 @@ class RouteAdminForm(forms.ModelForm):
keys['initial'].update(property_dct)
else:
keys['initial'] = property_dct
+ subcategories = keys.pop('subcategories') \
+ if 'subcategories' in keys else []
super(RouteAdminForm, self).__init__(*args, **keys)
if settings.CHIMERE_DAYS_BEFORE_EVENT:
self.fields['start_date'].widget = DatePickerWidget()
self.fields['end_date'].widget = DatePickerWidget()
+ if subcategories:
+ self.fields['categories'].choices = subcategories
def save(self, *args, **keys):
"""
diff --git a/chimere/models.py b/chimere/models.py
index 5fe213b..8b508a9 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -179,9 +179,6 @@ class SubCategory(models.Model):
# if there some restrictions with categories limit them
if area.subcategories.count():
sub_ids = [sub.id for sub in area.subcategories.all()]
- # if no area is defined for a category don't filter it
- sub_ids += [sub.id for sub in subcategories
- if not sub.areas.count()]
subcategories = subcategories.filter(id__in=sub_ids)
for sub_category in subcategories:
if sub_category.category not in sub_categories:
@@ -715,10 +712,21 @@ class SimpleArea:
return True
return False
- def getCategories(self, status='A', filter_available=True):
+ def getCategories(self, status='A', filter_available=True, area_name=None):
"""
Get categories for this area
"""
+ wheres = []
+ if area_name:
+ subcategory_pks = []
+ for cat, subcats in SubCategory.getAvailable(area_name=area_name):
+ for subcat in subcats:
+ subcategory_pks.append(unicode(subcat.pk))
+ if filter_available:
+ wheres += ['subcat.available = TRUE', 'cat.available = TRUE']
+ wheres += ['subcat.id in (%s)' % ",".join(subcategory_pks)]
+ where = " where " + " and ".join(wheres) if wheres else ""
+
equal_status = ''
if len(status) == 1:
equal_status = "='%s'" % status[0]
@@ -747,8 +755,7 @@ class SimpleArea:
sql += '''
inner join chimere_marker_categories mc on mc.subcategory_id=subcat.id and
mc.marker_id=mark.id'''
- if filter_available:
- sql += ' where subcat.available = TRUE and cat.available = TRUE'
+ sql += where
subcats = set(SubCategory.objects.raw(sql))
sql = sql_main + '''
inner join chimere_route rt on (ST_Intersects(%s, rt.route) or
@@ -759,8 +766,7 @@ class SimpleArea:
sql += '''
inner join chimere_route_categories rc on rc.subcategory_id=subcat.id and
rc.route_id=rt.id'''
- if filter_available:
- sql += ' where subcat.available = TRUE and cat.available = TRUE'
+ sql += where
subcats.union(SubCategory.objects.raw(sql))
return subcats
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 1c5d923..8f0316a 100644
--- a/chimere/static/chimere/css/styles.css
+++ b/chimere/static/chimere/css/styles.css
@@ -24,14 +24,14 @@ h2, h3, th, .action li, .action li a,
color:#333;
}
-/* backgroundcolor definition */
+/* background-color definition */
body, h2, h3, th,
.ui-widget-header,
.action li.selected,
#content .olControlLayerSwitcher .layersDiv,
#content .olControlLayerSwitcher span{
- background-color:#4ea30d;
+ background-color:#449506;
}
.ui-widget-header{
@@ -254,7 +254,7 @@ ul#action-2 {
#utils-div{
left:28px;
- bottom:20px;
+ bottom:50px;
padding:0.3em;
padding-right:1.4em;
width:auto;
diff --git a/chimere/static/chimere/img/layer-switcher-maximize.png b/chimere/static/chimere/img/layer-switcher-maximize.png
index f23bef8..8b1e686 100644
--- a/chimere/static/chimere/img/layer-switcher-maximize.png
+++ b/chimere/static/chimere/img/layer-switcher-maximize.png
Binary files differ
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index f395333..565ad27 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -44,6 +44,7 @@ See the file COPYING for details.
dynamic_categories: false,
display_submited: false,
display_feature: null,
+ area_id: null,
checked_categories: [],
zoom: null,
lat: null,
@@ -237,7 +238,9 @@ See the file COPYING for details.
current_extent = current_extent.toArray().join('_')
current_extent = current_extent.replace(/\./g, 'D');
current_extent = current_extent.replace(/-/g, 'M');
- var uri = extra_url + "getAvailableCategories/";
+ var uri = extra_url
+ if (settings.area_id) uri += settings.area_id + "/";
+ uri += "getAvailableCategories/";
var params = {"current_extent": current_extent}
if (settings.display_submited) params["status"] = "A_S";
$.ajax({url: uri,
diff --git a/chimere/templates/chimere/blocks/map_params.html b/chimere/templates/chimere/blocks/map_params.html
index 794798b..5ba7145 100644
--- a/chimere/templates/chimere/blocks/map_params.html
+++ b/chimere/templates/chimere/blocks/map_params.html
@@ -17,6 +17,7 @@
{% if p_display_submited %}chimere_init_options["display_submited"] = {{ p_display_submited }};{% endif %}
chimere_init_options["checked_categories"] = {% if p_checked_categories %}[{{p_checked_categories}}]{% else %} {{ CHIMERE_DEFAULT_CATEGORIES }}{% endif %};
var p_current_feature{% if p_current_feature %} = {{ p_current_feature }}{% endif %};
+ {% if area_id %}chimere_init_options['area_id'] = "{{area_id}}";{% endif %}
$("#map").chimere(chimere_init_options);
{% if zoom %}
$('#maps').chimere('zoom', {'area':{{zoom}} });
diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py
index 11ef3bc..ec713b9 100644
--- a/chimere/templatetags/chimere_tags.py
+++ b/chimere/templatetags/chimere_tags.py
@@ -111,6 +111,8 @@ def map_params(context):
context_data['icon_height'] = settings.CHIMERE_ICON_HEIGHT
area_name = context['area_name'] if 'area_name' in context else 'area_name'
context_data['map_layers'] = ", ".join(get_map_layers(area_name))
+ if area_name:
+ context_data['area_id'] = area_name
if area_name and 'zoomout' in context and context['zoomout']:
try:
area = Area.objects.get(urn=area_name)
diff --git a/chimere/views.py b/chimere/views.py
index a9c0480..5acf369 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -110,9 +110,14 @@ def get_edit_page(redirect_url, item_cls, item_form):
"""
Edition page
"""
- def func(request, area_name="", item_id=None):
+ def func(request, area_name="", item_id=None, subcategories=[]):
response_dct = get_base_response(area_name)
+ listed_subcats = []
+ if subcategories:
+ for cat, subcats in subcategories:
+ listed_subcats.append((unicode(cat),
+ [(subcat.pk, subcat.name) for subcat in subcats]))
# if an item_id is provided: modification
init_item, ref_item = None, None
if item_id:
@@ -138,7 +143,8 @@ def get_edit_page(redirect_url, item_cls, item_form):
request.session.session_key):
inst = init_item
- form = item_form(request.POST, request.FILES, instance=inst)
+ form = item_form(request.POST, request.FILES, instance=inst,
+ subcategories=listed_subcats)
formset_multi = MultimediaFileFormSet(request.POST, request.FILES,
initial=init_multi, prefix='multimedia')
formset_picture = PictureFileFormSet(request.POST, request.FILES,
@@ -179,7 +185,7 @@ def get_edit_page(redirect_url, item_cls, item_form):
response_dct['error_message'] = _(u"There are missing field(s)"
u" and/or errors in the submited form.")
else:
- form = item_form(instance=init_item)
+ form = item_form(instance=init_item, subcategories=listed_subcats)
formset_multi = MultimediaFileFormSet(initial=init_multi,
prefix='multimedia')
formset_picture = PictureFileFormSet(initial=init_picture,
@@ -194,7 +200,9 @@ def edit(request, area_name="", item_id=None, submited=False):
"""
Edition page
"""
- response, values = get_edit_marker(request, area_name, item_id)
+ sub_categories = SubCategory.getAvailable(['M', 'B'], area_name)
+ response, values = get_edit_marker(request, area_name, item_id,
+ subcategories=sub_categories)
if response:
return response
item_id, init_item, response_dct, form, formset_multi, formset_picture = \
@@ -212,8 +220,7 @@ def edit(request, area_name="", item_id=None, submited=False):
'dated':settings.CHIMERE_DAYS_BEFORE_EVENT,
'extra_head':form.media,
'marker_id':item_id,
- 'sub_categories':SubCategory.getAvailable(['M', 'B'],
- area_name),
+ 'sub_categories':sub_categories,
'point_widget':PointChooserWidget().render('point',
init_item.point if init_item else None,
area_name=area_name),
@@ -294,7 +301,9 @@ def editRoute(request, area_name="", item_id=None, submited=False):
"""
Route edition page
"""
- response, values = get_edit_route(request, area_name, item_id)
+ sub_categories = SubCategory.getAvailable(['M', 'B'], area_name)
+ response, values = get_edit_route(request, area_name, item_id,
+ subcategories=sub_categories)
if response:
return response
item_id, init_item, response_dct, form, formset_multi, formset_picture = \
@@ -312,8 +321,7 @@ def editRoute(request, area_name="", item_id=None, submited=False):
'formset_picture':formset_picture,
'dated':settings.CHIMERE_DAYS_BEFORE_EVENT,
'extra_head':form.media,
- 'sub_categories':SubCategory.getAvailable(['R', 'B'],
- area_name),
+ 'sub_categories':sub_categories,
'route_widget':RouteChooserWidget().render('route',
init_item.route if init_item else None,
area_name=area_name, routefile_id='',),
@@ -492,7 +500,7 @@ def get_available_categories(request, area_name=None, area=None, status='A',
if not settings.CHIMERE_DYNAMIC_CATEGORIES:
# Categories are not updated dynamicaly when the user move the map
# so we return ALL the categories
- subcategories = SubCategory.getAvailable()
+ subcategories = SubCategory.getAvailable(area_name=area_name)
context_data['sub_categories'] = subcategories
return render_to_response('chimere/blocks/categories.html', context_data,
context_instance=RequestContext(request))
@@ -509,7 +517,7 @@ def get_available_categories(request, area_name=None, area=None, status='A',
# bad extent format
return HttpResponse(default_message)
# if not force and area.isIn(SimpleArea(cookie.AREA):return
- categories = area.getCategories(status)
+ categories = area.getCategories(status, area_name=area_name)
if not categories:
return HttpResponse(default_message)
get_cat = lambda subcat: subcat.category