[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/ Search functions now match PythonScript and batching is supported.
Charlie Clark
charlie at begeistert.org
Mon Oct 11 14:21:29 EDT 2010
Log message for revision 117457:
Search functions now match PythonScript and batching is supported.
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py
U Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.pt
U Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py 2010-10-11 14:43:28 UTC (rev 117456)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/interfaces.py 2010-10-11 18:21:28 UTC (rev 117457)
@@ -27,46 +27,48 @@
def status_vocab(context):
"""Provides a list of workflow states"""
catalog = getToolByName(context, 'portal_catalog')
- values = [(u'--any--', "None")]
- values += [(v, v) for v in catalog.uniqueValuesFor('review_state')]
- return SimpleVocabulary.fromItems(values)
+ values = [SimpleTerm(None, None, _(u"--any--"))]
+ values += [SimpleTerm(v, v, v)
+ for v in catalog.uniqueValuesFor('review_state')]
+ return SimpleVocabulary(values)
directlyProvides(status_vocab, IContextSourceBinder)
def subject_vocab(context):
"""Provides a list of subject keywords"""
catalog = getToolByName(context, 'portal_catalog')
- values = [(u'--any--', "None")]
- values += [(v, v) for v in catalog.uniqueValuesFor('Subject')]
- return SimpleVocabulary.fromItems(values)
+ values = [SimpleTerm(None, None, _(u"--any--"))]
+ values += [SimpleTerm(v, v, v)
+ for v in catalog.uniqueValuesFor('Subject')]
+ return SimpleVocabulary(values)
directlyProvides(subject_vocab, IContextSourceBinder)
def date_vocab(context):
"""Provides a list of dates for searching with"""
mtool = getToolByName(context, 'portal_membership')
- dates = [SimpleTerm(date(1970, 1, 1), date(1970, 1, 1), 'Ever')]
+ dates = [SimpleTerm(date(1970, 1, 1), date(1970, 1, 1), _(u'Ever'))]
if not mtool.isAnonymousUser():
login_time = mtool.getAuthenticatedMember().last_login_time
if not hasattr(login_time, 'parts'):
login_time = DateTime(login_time)
login = date(*login_time.parts()[:3])
dates.append(SimpleTerm(
- login, login, 'Last login')
+ login, login, _(u'Last login'))
)
today = date.today()
dates.append(SimpleTerm(today - timedelta(days=1),
today - timedelta(days=1),
- u'Yesterday'
+ _(u'Yesterday')
)
)
dates.append(SimpleTerm(today - timedelta(days=7),
today - timedelta(days=7),
- u'Last week'
+ _(u'Last week')
)
)
dates.append(SimpleTerm(today - timedelta(days=31),
today - timedelta(days=31),
- u'Last month'
+ _(u'Last month')
)
)
return SimpleVocabulary(dates)
@@ -76,7 +78,7 @@
"""Provides a list of portal types"""
ttool = getToolByName(context, 'portal_types')
types = ttool.listTypeInfo()
- terms = [SimpleTerm("None", "None", u'--any--')]
+ terms = [SimpleTerm(None, None, _(u"--any--"))]
terms += [SimpleTerm(t.getId(), t.getId(), t.Title()) for t in types]
return SimpleVocabulary(terms)
directlyProvides(type_vocab, IContextSourceBinder)
@@ -94,10 +96,10 @@
value_type=Choice(
source=status_vocab
),
- required=False
+ required=False,
)
- search_text = TextLine(
+ SearchableText = TextLine(
title=_(u"Full Text"),
description=_(
u"For a simple text search, enter your search term"
@@ -151,7 +153,7 @@
required=False,
)
- creator = ASCIILine(
+ listCreators = ASCIILine(
title=_(u"Creator"),
description=_(
u"To find items by a particular user only, enter their"
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.pt 2010-10-11 14:43:28 UTC (rev 117456)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.pt 2010-10-11 18:21:28 UTC (rev 117457)
@@ -25,7 +25,7 @@
</fieldset>
<div class="buttons">
- <tal:loop tal:repeat="action view/actions"
+ <tal:loop tal:repeat="action view/search"
tal:replace="structure action/render" />
</div>
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py 2010-10-11 14:43:28 UTC (rev 117456)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/search/search.py 2010-10-11 18:21:28 UTC (rev 117457)
@@ -52,8 +52,9 @@
form_fields['Subject'].custom_widget = ChoiceMultiSelectWidget
form_fields['portal_type'].custom_widget = ChoiceMultiSelectWidget
prefix = 'form'
+ _query = {}
- actions = form.Actions(
+ search = form.Actions(
form.Action(
name='search',
label=_(u"Search"),
@@ -62,42 +63,79 @@
),
)
- #def __init__(self, *args):
- #super(Search, self).__init__(*args)
- #self.hidden_fields += self.form_fields
+ # for handling searches from the search box
+ image = form.Actions(
+ form.Action(
+ name='search.x',
+ label=_(u"Search"),
+ success='handle_search',
+ failure='handle_failure',
+ ),
+ form.Action(
+ name='search.y',
+ label=_(u"Search"),
+ success='handle_search',
+ failure='handle_failure',
+ ),
+ )
+ actions = search + image
+
@property
+ @memoize
def catalog(self):
return self._getTool('portal_catalog')
@property
- def types(self):
- return self._getTool('portal_types')
+ @memoize
+ def is_anonymous(self):
+ mtool = self._getTool('portal_membership')
+ return mtool.isAnonymousUser()
+ @memoize
+ def _getHiddenVars(self):
+ data = {}
+ if hasattr(self, 'hidden_widgets'):
+ form.getWidgetsData(self.hidden_widgets, self.prefix, data)
+ if hasattr(self, '_query'):
+ data.update(self._query)
+ else:
+ data = self.request.form
+ return data
+
+ @property
+ @memoize
+ def search_fields(self):
+ if self.is_anonymous:
+ return self.form_fields.omit('review_state')
+ else:
+ return self.form_fields
+
def setUpWidgets(self, ignore_request=False):
- """Create widgets for the folder contents."""
+ if "form.b_start" in self.request.form \
+ or "b_start" in self.request.form:
+ self.template = self.results
super(Search, self).setUpWidgets(ignore_request)
self.widgets = form.setUpWidgets(
- self.form_fields, self.prefix, self.context,
+ self.search_fields, self.prefix, self.context,
self.request, ignore_request=ignore_request)
def handle_search(self, action, data):
for k, v in data.items():
if k in ('review_state', 'Title', 'Subject', 'Description',
- 'portal_type', 'listCreators'):
- if type(v) == type([]):
- v = filter(None, v)
- if not v:
+ 'portal_type', 'listCreators', 'SearchableText'):
+ if not v or v == u"None":
del data[k]
elif k == 'created' and v == EPOCH:
del data[k]
-
- self._items = self.catalog.searchResults(data)
+ self._query = data
self.template = self.results
+ @memoize
def _get_items(self):
- return getattr(self, '_items', ())
+ return self.catalog.searchResults(self._query)
+ @memoize
def listBatchItems(self):
return( {'description': item.Description,
'icon': item.getIconURL,
More information about the checkins
mailing list