r13321 - in MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk: docs src/archetypes/referencebrowserwidget/browser src/archetypes/referencebrowserwidget/skins/referencebrowser src/archetypes/referencebrowserwidget/tests

"Tom Gross" <[email protected]>
Newsgroups gmane.comp.web.zope.plone.archetypes.cvs
Message-ID <[email protected]>
Author: tom_gross
Date: Fri Dec  3 10:40:28 2010
New Revision: 13321

Modified:
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/docs/HISTORY.txt
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/base.py
   MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py
Log:
Use URL quoting of ``at_url`` everywhere and quote in Python code not in
templates. (refs #11297)


Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/docs/HISTORY.txt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/docs/HISTORY.txt	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/docs/HISTORY.txt	Fri Dec  3 10:40:28 2010
@@ -10,6 +10,10 @@
 * Made sure to always quote ``at_url`` when forwarding it in the templates.
   [deo]
 
+* Use URL quoting of ``at_url`` everywhere and quote in Python code not in
+  templates. Fixes http://dev.plone.org/plone/ticket/11297
+  [tom_gross]
+
 2.0 - 06.09.2010
 ----------------
 

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt	Fri Dec  3 10:40:28 2010
@@ -20,7 +20,6 @@
                   allow_browse widget/allow_browse;
                   image_portal_types widget/image_portal_types;
                   image_method widget/image_method|string:;
-                  pss modules/Products/PythonScripts/standard;
                   ">
 
     <dl id="message" class="portalMessage info"
@@ -86,7 +85,7 @@
       <input type="hidden" name="fieldRealName" value=""
              tal:attributes="value fieldRealName" />
       <input type="hidden" name="at_url" value=""
-             tal:attributes="value python:pss.url_quote(view.at_url)" />
+             tal:attributes="value view/at_url" />
       <input type="hidden" name="multiValued" value=""
              tal:attributes="value multiValued" />
       <input type="hidden" name="close_window" value=""

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py	Fri Dec  3 10:40:28 2010
@@ -1,4 +1,5 @@
 from types import ListType, TupleType
+import urllib
 
 import zope.interface
 
@@ -99,6 +100,11 @@
                                 name='plone_tools')
         return tools.url().getPortalPath()
 
+    def getAtURL(self):
+        context = aq_inner(self.context)
+        return urllib.quote('/'.join(context.getPhysicalPath()))
+
+
 class QueryCatalogView(BrowserView):
 
     def __call__(self, show_all=0,
@@ -161,7 +167,7 @@
     def __init__(self, context, request):
         super(ReferenceBrowserPopup, self).__init__(context, request)
 
-        self.at_url = request.get('at_url')
+        self.at_url = urllib.quote(request.get('at_url'))
         self.fieldName = request.get('fieldName')
         self.fieldRealName = request.get('fieldRealName')
         self.search_text = request.get('searchValue', '')
@@ -190,7 +196,7 @@
             self.has_brain = True
             self.brainuid = at_brain.UID
         else:
-            self.at_obj = context.restrictedTraverse(self.at_url)
+            self.at_obj = context.restrictedTraverse(urllib.unquote(self.at_url))
         self.field = self.at_obj.Schema()[self.fieldRealName]
         self.widget = self.field.widget
         self.multiValued = int(self.field.multiValued)

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/skins/referencebrowser/referencebrowser.pt	Fri Dec  3 10:40:28 2010
@@ -184,8 +184,7 @@
       </tal:multi>
       <div style="clear: both"
           tal:define="
-              pss modules/Products/PythonScripts/standard;
-              global at_url at_url|python:pss.url_quote('/'.join(here.getPhysicalPath()));
+              at_url helper/getAtURL;
               startup_directory python:helper.getStartupDirectory(field)">
         <input type="button" class="searchButton addreference" value="Add..."
                i18n:attributes="value label_add;"

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/base.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/base.py	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/base.py	Fri Dec  3 10:40:28 2010
@@ -81,10 +81,19 @@
     basic_auth = '%s:%s' % (default_user, default_password)
 
 class DummySession(dict):
-    
+
     def set(self, key, value):
         self[key] = value
 
+
+class DummyObject(object):
+
+    def __init__(self, location):
+        self.location = location
+
+    def getPhysicalPath(self):
+        return self.location.split('/')
+
 class PopupBaseTestCase(TestCase):
 
     def afterSetUp(self):
@@ -98,7 +107,7 @@
         self.obj.reindexObject()
         self.request = self.app.REQUEST
         setattr(self.request, 'SESSION', DummySession())
-        
+
     def _getPopup(self, obj=None, request=None):
         if obj is None:
             obj = self.obj

Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py	(original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py	Fri Dec  3 10:40:28 2010
@@ -31,6 +31,7 @@
 from archetypes.referencebrowserwidget.tests.base import FunctionalTestCase
 from archetypes.referencebrowserwidget.tests.base import PopupBaseTestCase
 from archetypes.referencebrowserwidget.tests.base import normalize
+from archetypes.referencebrowserwidget.tests.base import DummyObject
 from archetypes.referencebrowserwidget.interfaces import (
     IFieldRelation, IReferenceBrowserHelperView)
 from archetypes.referencebrowserwidget.browser.view import \
@@ -274,6 +275,16 @@
         refbrain = catalog(id='ref')[0]
         assert popup.title_or_id(refbrain) == 'Lorem Ipsum'
 
+    def test_at_url(self):
+        makeContent(self.folder, portal_type='RefBrowserDemo', id='with space')
+        obj = self.folder['with space']
+        fieldname = 'singleRef'
+        self.request.set('at_url', '/plone/layer1/layer2/with space')
+        self.request.set('fieldName', fieldname)
+        self.request.set('fieldRealName', fieldname)
+        popup = self._getPopup(obj=obj)
+        self.assertEqual(popup.at_url, '/plone/layer1/layer2/with%20space')
+
 class PopupBreadcrumbTestCase(PopupBaseTestCase):
     """ Test the popup breadcrumbs """
 
@@ -443,6 +454,16 @@
         self.assertEqual(helper.getFieldRelations(field, uid),
                          [self.folder.doc2])
 
+    def test_getaturl(self):
+        context = DummyObject('/plone/layer1/layer2')
+        request = TestRequest()
+        helper = ReferenceBrowserHelperView(context, request)
+        self.assertEqual(helper.getAtURL(), '/plone/layer1/layer2')
+
+        context = DummyObject('/plone/layer1/with space')
+        helper = ReferenceBrowserHelperView(context, request)
+        self.assertEqual(helper.getAtURL(), '/plone/layer1/with%20space')
+
 
 class IntegrationTestCase(FunctionalTestCase):
     """ Browser/publish tests of referencebrowser widget

------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.