From 6c4e5f0f0e9469d7e56d824d2b153cd25fb443ee Mon Sep 17 00:00:00 2001
From: Justin Bronn <jbronn@gmail.com>
Date: Tue, 13 Jan 2009 02:08:26 +0000
Subject: [PATCH] Fixed #9278, #9694 -- Geographic overlays now display in
 admin with right to left langauges; simplified transformation process in
 `OpenLayersWidget` to fix Ubuntu 8.10/Apache 2.2.9 crash; updated OpenLayers
 version to 2.7.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9733 bcc190cf-cafb-0310-a4f2-bffc1f526a37
---
 django/contrib/gis/admin/options.py            |  6 ++----
 django/contrib/gis/admin/widgets.py            | 18 ++++++++++++++----
 .../gis/templates/gis/admin/openlayers.html    |  8 ++++----
 3 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/django/contrib/gis/admin/options.py b/django/contrib/gis/admin/options.py
index 71fb87bf09d..26d60e55c81 100644
--- a/django/contrib/gis/admin/options.py
+++ b/django/contrib/gis/admin/options.py
@@ -28,12 +28,11 @@ class GeoModelAdmin(ModelAdmin):
     scale_text = True
     layerswitcher = True
     scrollable = True
-    admin_media_prefix = settings.ADMIN_MEDIA_PREFIX
     map_width = 600
     map_height = 400
     map_srid = 4326
     map_template = 'gis/admin/openlayers.html'
-    openlayers_url = 'http://openlayers.org/api/2.6/OpenLayers.js'
+    openlayers_url = 'http://openlayers.org/api/2.7/OpenLayers.js'
     wms_url = 'http://labs.metacarta.com/wms/vmap0'
     wms_layer = 'basic'
     wms_name = 'OpenLayers WMS'
@@ -76,8 +75,7 @@ class GeoModelAdmin(ModelAdmin):
         class OLMap(self.widget):
             template = self.map_template
             geom_type = db_field._geom
-            params = {'admin_media_prefix' : self.admin_media_prefix,
-                      'default_lon' : self.default_lon,
+            params = {'default_lon' : self.default_lon,
                       'default_lat' : self.default_lat,
                       'default_zoom' : self.default_zoom,
                       'display_wkt' : self.debug or self.display_wkt,
diff --git a/django/contrib/gis/admin/widgets.py b/django/contrib/gis/admin/widgets.py
index 27abc8f59ba..02e17646308 100644
--- a/django/contrib/gis/admin/widgets.py
+++ b/django/contrib/gis/admin/widgets.py
@@ -1,7 +1,15 @@
+from django.conf import settings
 from django.contrib.gis.gdal import OGRException
 from django.contrib.gis.geos import GEOSGeometry, GEOSException
 from django.forms.widgets import Textarea
-from django.template.loader import render_to_string
+from django.template import loader, Context
+from django.utils import translation
+
+# Creating a template context that contains Django settings
+# values needed by admin map templates.
+geo_context = Context({'ADMIN_MEDIA_PREFIX' : settings.ADMIN_MEDIA_PREFIX,
+                       'LANGUAGE_BIDI' : translation.get_language_bidi(),
+                       })
 
 class OpenLayersWidget(Textarea):
     """
@@ -40,8 +48,9 @@ class OpenLayersWidget(Textarea):
             srid = self.params['srid']
             if value.srid != srid: 
                 try:
-                    value.transform(srid)
-                    wkt = value.wkt
+                    ogr = value.ogr
+                    ogr.transform(srid)
+                    wkt = ogr.wkt
                 except OGRException:
                     wkt = ''
             else:
@@ -51,7 +60,8 @@ class OpenLayersWidget(Textarea):
             # geometry.
             self.params['wkt'] = wkt
 
-        return render_to_string(self.template, self.params)
+        return loader.render_to_string(self.template, self.params,
+                                       context_instance=geo_context)
     
     def map_options(self):
         "Builds the map options hash for the OpenLayers template."
diff --git a/django/contrib/gis/templates/gis/admin/openlayers.html b/django/contrib/gis/templates/gis/admin/openlayers.html
index acf82b284ef..361cac55b40 100644
--- a/django/contrib/gis/templates/gis/admin/openlayers.html
+++ b/django/contrib/gis/templates/gis/admin/openlayers.html
@@ -2,14 +2,14 @@
 <style type="text/css">
   #{{ id }}_map { width: {{ map_width }}px; height: {{ map_height }}px; }
   #{{ id }}_map .aligned label { float:inherit; }
-  #{{ id }}_admin_map { position: relative; vertical-align: top; float: left; }
+  #{{ id }}_admin_map { position: relative; vertical-align: top; float: {{ LANGUAGE_BIDI|yesno:"right,left" }}; }
   {% if not display_wkt %}#{{ id }} { display: none; }{% endif %}
   .olControlEditingToolbar .olControlModifyFeatureItemActive { 
-     background-image: url("{{ admin_media_prefix }}img/gis/move_vertex_on.png");
+     background-image: url("{{ ADMIN_MEDIA_PREFIX }}img/gis/move_vertex_on.png");
      background-repeat: no-repeat;
   }
   .olControlEditingToolbar .olControlModifyFeatureItemInactive { 
-     background-image: url("{{ admin_media_prefix }}img/gis/move_vertex_off.png");
+     background-image: url("{{ ADMIN_MEDIA_PREFIX }}img/gis/move_vertex_off.png");
      background-repeat: no-repeat;
   }
 </style>
@@ -29,7 +29,7 @@
 {% block openlayers %}{% include "gis/admin/openlayers.js" %}{% endblock %}
 //]]>
 </script>
-<div id="{{ id }}_map"></div>
+<div id="{{ id }}_map"{% if LANGUAGE_BIDI %} dir="ltr"{% endif %}></div>
 <a href="javascript:{{ module }}.clearFeatures()">Delete all Features</a>
 {% if display_wkt %}<p> WKT debugging window:</p>{% endif %}
 <textarea id="{{ id }}" class="vWKTField required" cols="150" rows="10" name="{{ field_name }}">{{ wkt }}</textarea>