From ce078ef976d83395dc19c9a1576529a5a0678514 Mon Sep 17 00:00:00 2001 From: Flavio Curella Date: Mon, 4 Aug 2014 11:14:45 -0500 Subject: [PATCH] Fixed #19139 -- Made OpenLayersWidget follow GeoModelAdmin's modifiable attribute Thanks Tim Graham for the review. --- django/contrib/gis/admin/widgets.py | 3 +++ .../gis/templates/gis/admin/openlayers.html | 2 ++ django/contrib/gis/tests/geoadmin/admin.py | 5 ++++ django/contrib/gis/tests/geoadmin/tests.py | 25 ++++++++++++++++--- 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 django/contrib/gis/tests/geoadmin/admin.py diff --git a/django/contrib/gis/admin/widgets.py b/django/contrib/gis/admin/widgets.py index b098b7e7a2..292038ff84 100644 --- a/django/contrib/gis/admin/widgets.py +++ b/django/contrib/gis/admin/widgets.py @@ -22,6 +22,9 @@ class OpenLayersWidget(Textarea): # Update the template parameters with any attributes passed in. if attrs: self.params.update(attrs) + self.params['editable'] = self.params['modifiable'] + else: + self.params['editable'] = True # Defaulting the WKT value to a blank string -- this # will be tested in the JavaScript and the appropriate diff --git a/django/contrib/gis/templates/gis/admin/openlayers.html b/django/contrib/gis/templates/gis/admin/openlayers.html index 8d441cd664..592c6c9e71 100644 --- a/django/contrib/gis/templates/gis/admin/openlayers.html +++ b/django/contrib/gis/templates/gis/admin/openlayers.html @@ -31,7 +31,9 @@ //]]>
+{% if editable %} Delete all Features +{% endif %} {% if display_wkt %}

WKT debugging window:

{% endif %} diff --git a/django/contrib/gis/tests/geoadmin/admin.py b/django/contrib/gis/tests/geoadmin/admin.py new file mode 100644 index 0000000000..ab39c28885 --- /dev/null +++ b/django/contrib/gis/tests/geoadmin/admin.py @@ -0,0 +1,5 @@ +from django.contrib.gis import admin + + +class UnmodifiableAdmin(admin.OSMGeoAdmin): + modifiable = False diff --git a/django/contrib/gis/tests/geoadmin/tests.py b/django/contrib/gis/tests/geoadmin/tests.py index 84cb491ad1..86c8ce9a1a 100644 --- a/django/contrib/gis/tests/geoadmin/tests.py +++ b/django/contrib/gis/tests/geoadmin/tests.py @@ -7,6 +7,7 @@ if HAS_GEOS: from django.contrib.gis import admin from django.contrib.gis.geos import Point + from .admin import UnmodifiableAdmin from .models import City @@ -20,13 +21,31 @@ class GeoAdminTest(TestCase): self.assertTrue(any(geoadmin.openlayers_url in js for js in admin_js)) def test_olmap_OSM_rendering(self): - geoadmin = admin.site._registry[City] - result = geoadmin.get_map_widget(City._meta.get_field('point'))( - ).render('point', Point(-79.460734, 40.18476)) + delete_all_btn = """Delete all Features""" + + original_geoadmin = admin.site._registry[City] + params = original_geoadmin.get_map_widget(City._meta.get_field('point')).params + result = original_geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) self.assertIn( """geodjango_point.layers.base = new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");""", result) + self.assertIn(delete_all_btn, result) + + admin.site.unregister(City) + admin.site.register(City, UnmodifiableAdmin) + try: + geoadmin = admin.site._registry[City] + params = geoadmin.get_map_widget(City._meta.get_field('point')).params + result = geoadmin.get_map_widget(City._meta.get_field('point'))( + ).render('point', Point(-79.460734, 40.18476), params) + + self.assertNotIn(delete_all_btn, result) + finally: + admin.site.unregister(City) + admin.site.register(City, original_geoadmin.__class__) + def test_olmap_WMS_rendering(self): geoadmin = admin.GeoModelAdmin(City, admin.site) result = geoadmin.get_map_widget(City._meta.get_field('point'))(