[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - added invisible 'global/search_form' and 'global/search' Actions

Yvo Schubbe cvs-admin at zope.org
Wed May 8 09:28:44 UTC 2013


Log message for revision 130229:
  - added invisible 'global/search_form' and 'global/search' Actions

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/actions.xml
  U   Products.CMFDefault/trunk/Products/CMFDefault/profiles/views_support/actions.xml
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/absolut/main_template.pt
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/main_template.pt
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/CHANGES.txt	2013-05-08 09:28:41 UTC (rev 130229)
@@ -4,6 +4,10 @@
 2.3.0 (unreleased)
 ------------------
 
+- Actions: Added invisible 'global/search_form' and 'global/search' Actions.
+  The URLs of the search form and the search results pages are no longer
+  hard-wired in main_template, making it easier to switch to browser views.
+
 - Fixed AttributeError for allowDiscussion when importing a
   GenericSetup structure tarball.
   See https://bugs.launchpad.net/zope-cmf/+bug/1042836/

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -478,7 +478,19 @@
         getSiteManager().registerUtility(tool, IActionsTool)
         self.assertEqual(view.workflow_actions, ACTIONS['workflow'])
 
+    def test_search_form_url(self):
+        view = self._makeOne()
+        tool = DummyActionsTool()
+        getSiteManager().registerUtility(tool, IActionsTool)
+        self.assertEqual(view.search_form_url, u'site/search_form')
 
+    def test_search_url(self):
+        view = self._makeOne()
+        tool = DummyActionsTool()
+        getSiteManager().registerUtility(tool, IActionsTool)
+        self.assertEqual(view.search_url, u'site/search')
+
+
 class DummyContext:
 
     pass
@@ -531,7 +543,7 @@
     pass
 
 
-class DummyActionsTool:
+class DummyActionsTool(object):
 
     def __init__(self, actions=None):
         if actions is None:
@@ -541,7 +553,10 @@
     def listFilteredActionsFor(self, context):
         return self.actions
 
+    def getActionInfo(self, action_chain):
+        return {'url': u'site/{1}'.format(*action_chain.split('/'))}
 
+
 class DummyWorkflowTool:
 
     review_state = 'DUMMY'

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -275,3 +275,13 @@
     @memoize
     def add_actions(self):
         return self.actions.get('folder/add', ())
+
+    @property
+    @memoize
+    def search_form_url(self):
+        return self.atool.getActionInfo('global/search_form')['url']
+
+    @property
+    @memoize
+    def search_url(self):
+        return self.atool.getActionInfo('global/search')['url']

Modified: Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/actions.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/actions.xml	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/default/actions.xml	2013-05-08 09:28:41 UTC (rev 130229)
@@ -239,6 +239,30 @@
    </property>
    <property name="visible">False</property>
   </object>
+  <object name="search_form" meta_type="CMF Action" i18n:domain="cmf_default">
+   <property name="title" i18n:translate="">Search Form</property>
+   <property name="description" i18n:translate=""></property>
+   <property name="url_expr">string:${portal_url}/search_form</property>
+   <property name="link_target"></property>
+   <property name="icon_expr"></property>
+   <property name="available_expr"></property>
+   <property name="permissions">
+    <element value="View"/>
+   </property>
+   <property name="visible">False</property>
+  </object>
+  <object name="search" meta_type="CMF Action" i18n:domain="cmf_default">
+   <property name="title" i18n:translate="">Search</property>
+   <property name="description" i18n:translate=""></property>
+   <property name="url_expr">string:${portal_url}/search</property>
+   <property name="link_target"></property>
+   <property name="icon_expr"></property>
+   <property name="available_expr"></property>
+   <property name="permissions">
+    <element value="View"/>
+   </property>
+   <property name="visible">False</property>
+  </object>
   <object name="undo" meta_type="CMF Action" i18n:domain="cmf_default">
    <property name="title" i18n:translate="">Undo</property>
    <property name="description" i18n:translate=""></property>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/profiles/views_support/actions.xml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/profiles/views_support/actions.xml	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/profiles/views_support/actions.xml	2013-05-08 09:28:41 UTC (rev 130229)
@@ -33,6 +33,12 @@
   <object name="members_register" meta_type="CMF Action">
    <property name="url_expr">string:${portal_url}/@@join.html</property>
   </object>
+  <object name="search_form" meta_type="CMF Action">
+   <property name="url_expr">string:${portal_url}/@@search.html</property>
+  </object>
+  <object name="search" meta_type="CMF Action">
+   <property name="url_expr">string:${portal_url}/@@search.html</property>
+  </object>
   <object name="configPortal" meta_type="CMF Action">
    <property name="url_expr">string:${portal_url}/@@configure.html</property>
   </object>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/absolut/main_template.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/absolut/main_template.pt	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/absolut/main_template.pt	2013-05-08 09:28:41 UTC (rev 130229)
@@ -69,11 +69,11 @@
     </li>
     <li>
     <a href="search_form"
-       tal:attributes="href string:${portal_url}/@@search.html"
+       tal:attributes="href globals/search_form_url"
        i18n:translate="">search</a>
     </li>
      <form action="search" method="get"
-              tal:attributes="action string:${portal_url}/@@search.html">
+           tal:attributes="action globals/search_url">
      <input name="form.SearchableText" type="search" />
      <input type="hidden" name="b_start" value="0" />
      <input type="image" name="form.actions.search" value="go" src="go.gif"

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/getMainGlobals.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -57,6 +57,8 @@
            'isAnon': isAnon,
            'wf_state': wtool.getInfoFor(context, 'review_state', ''),
            'show_actionicons': ptool.getProperty('enable_actionicons'),
-           'status_message': message}
+           'status_message': message,
+           'search_form_url': atool.getActionInfo('global/search_form')['url'],
+           'search_url': atool.getActionInfo('global/search')['url']}
 
 return decode(globals, context)

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/main_template.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/main_template.pt	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/main_template.pt	2013-05-08 09:28:41 UTC (rev 130229)
@@ -69,7 +69,7 @@
 
    <td id="NavBar" i18n:domain="cmf_default">
    <form action="search" method="get"
-         tal:attributes="action string:${portal_url}/search">
+         tal:attributes="action globals/search_url">
     <a href="."
        tal:attributes="href string:${portal_url}/"
        i18n:translate="">home</a>&nbsp;
@@ -83,7 +83,7 @@
        tal:attributes="href string:${portal_url}/recent_news"
        i18n:translate="">news</a>&nbsp;
     <a href="search_form"
-       tal:attributes="href string:${portal_url}/search_form"
+       tal:attributes="href globals/search_form_url"
        i18n:translate="">search</a>
 
     <input name="SearchableText" size="16" />

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -6,15 +6,14 @@
 from Products.CMFDefault.utils import Message as _
 from Products.CMFDefault.utils import thousands_commas
 
+atool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IActionsTool')
 ctool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ICatalogTool')
-utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
-portal_url = utool()
 epoch = DateTime('1970/01/01 00:00:01 GMT')
 
 
 options = {}
 
-target = '%s/search' % portal_url
+target = atool.getActionInfo('global/search')['url']
 kw = context.REQUEST.form.copy()
 for k, v in kw.items():
     if k in ('review_state', 'Title', 'Subject', 'Description', 'portal_type',

Modified: Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/skins/zpt_generic/search_form.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -5,11 +5,10 @@
 from Products.CMFDefault.utils import decode
 from Products.CMFDefault.utils import Message as _
 
+atool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IActionsTool')
 ctool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ICatalogTool')
 mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
 ttool = getUtilityByInterfaceName('Products.CMFCore.interfaces.ITypesTool')
-utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
-portal_url = utool()
 
 
 options = {}
@@ -34,7 +33,7 @@
 options['listTypeInfos'] = ttool.listTypeInfo()
 
 buttons = []
-target = '%s/search' % portal_url
+target = atool.getActionInfo('global/search')['url']
 buttons.append( {'name': 'search', 'value': _(u'Search')} )
 options['form'] = { 'action': target,
                     'listButtonInfos': tuple(buttons) }

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2013-05-02 11:13:16 UTC (rev 130228)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2013-05-08 09:28:41 UTC (rev 130229)
@@ -120,6 +120,14 @@
     except (KeyError, AttributeError):
         return True
     try:
+        atool['global'].search_form # 'global' is a reserved word in Python
+    except (KeyError, AttributeError):
+        return True
+    try:
+        atool['global'].search # 'global' is a reserved word in Python
+    except (KeyError, AttributeError):
+        return True
+    try:
         atool['global'].syndication # 'global' is a reserved word in Python
     except (KeyError, AttributeError):
         return True
@@ -136,6 +144,10 @@
     logger.info("'change_password' action added.")
     getMultiAdapter((atool, environ), IBody).body = _ACTIONS_REGISTER_XML
     logger.info("'members_register' action added.")
+    getMultiAdapter((atool, environ), IBody).body = _ACTIONS_SEARCH_FORM_XML
+    logger.info("'search_form' action added.")
+    getMultiAdapter((atool, environ), IBody).body = _ACTIONS_SEARCH_XML
+    logger.info("'search' action added.")
     getMultiAdapter((atool, environ), IBody).body = _ACTIONS_SYNDICATION_XML
     logger.info("'portal syndication settings' action added.")
 
@@ -185,6 +197,48 @@
 </object>
 """
 
+_ACTIONS_SEARCH_FORM_XML = """\
+<object name="portal_actions" meta_type="CMF Actions Tool"
+   xmlns:i18n="http://xml.zope.org/namespaces/i18n">
+ <object name="global" meta_type="CMF Action Category">
+  <object insert-after="members_delete" name="search_form"
+     meta_type="CMF Action" i18n:domain="cmf_default">
+   <property name="title" i18n:translate="">Search Form</property>
+   <property name="description" i18n:translate=""></property>
+   <property name="url_expr">string:${portal_url}/search_form</property>
+   <property name="link_target"></property>
+   <property name="icon_expr"></property>
+   <property name="available_expr"></property>
+   <property name="permissions">
+    <element value="View"/>
+   </property>
+   <property name="visible">False</property>
+  </object>
+ </object>
+</object>
+"""
+
+_ACTIONS_SEARCH_XML = """\
+<object name="portal_actions" meta_type="CMF Actions Tool"
+   xmlns:i18n="http://xml.zope.org/namespaces/i18n">
+ <object name="global" meta_type="CMF Action Category">
+  <object insert-after="search_form" name="search" meta_type="CMF Action"
+     i18n:domain="cmf_default">
+   <property name="title" i18n:translate="">Search</property>
+   <property name="description" i18n:translate=""></property>
+   <property name="url_expr">string:${portal_url}/search</property>
+   <property name="link_target"></property>
+   <property name="icon_expr"></property>
+   <property name="available_expr"></property>
+   <property name="permissions">
+    <element value="View"/>
+   </property>
+   <property name="visible">False</property>
+  </object>
+ </object>
+</object>
+"""
+
 _ACTIONS_SYNDICATION_XML = """\
 <object name="portal_actions" meta_type="CMF Actions Tool"
    xmlns:i18n="http://xml.zope.org/namespaces/i18n">



More information about the checkins mailing list