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