Commit 224f1e75 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

erp5_base: implement getDocumentValueList() in FolderMixin so that we can use DMS API everywhere.

parent 70bdbf67
""" """
This script is part of ERP5 Web
ERP5 Web is a business template of ERP5 which provides a way
to create web sites which can display selected
ERP5 contents through multiple custom web layouts.
This script returns a list of document values (ie. objects or brains) This script returns a list of document values (ie. objects or brains)
which are considered as part of this section. It can be which are considered as part of this section. It can be
a list of web pages (usual case), a list of products a list of web pages (usual case), a list of products
...@@ -40,7 +34,7 @@ ...@@ -40,7 +34,7 @@
SUGGESTIONS: SUGGESTIONS:
- Prevent showing duplicate references - Prevent showing duplicate references
- Add documents associated to this section through 'aggregate'. - Add documents associated to this section through 'aggregate'.
- Display only the latest version and the appropriate language. - Display only the latest version and the appropriate language.
...@@ -52,41 +46,48 @@ try: ...@@ -52,41 +46,48 @@ try:
portal = container.getPortalObject() portal = container.getPortalObject()
kw = portal.portal_catalog.getSQLCatalog().getCannonicalArgumentDict(kw) kw = portal.portal_catalog.getSQLCatalog().getCannonicalArgumentDict(kw)
# First find the Web Section or Web Site we belong to # Try to find the Web Section or Web Site we belong to
current_section = context.getWebSectionValue() current_section = context.getWebSectionValue()
if current_section is None:
if all_versions is None: current_section = context
all_versions = context.getLayoutProperty('layout_all_versions', default=False) else:
if all_languages is None: if all_versions is None:
all_languages = context.getLayoutProperty('layout_all_languages', default=False) all_versions = current_section.getLayoutProperty('layout_all_versions', default=False)
if all_languages is None:
all_languages = current_section.getLayoutProperty('layout_all_languages', default=False)
# Build the list of parameters # Build the list of parameters
if not language: if not language:
language = portal.Localizer.get_selected_language() language = portal.Localizer.get_selected_language()
if validation_state is None: if 'portal_type' not in kw:
kw['portal_type'] = portal.getPortalDocumentTypeList()
if 'validation_state' not in kw:
# XXX hardcoded validation state list. # XXX hardcoded validation state list.
# Use predicate or layout property instead # Use predicate or layout property instead
validation_state = ('released', 'released_alive', 'published', kw['validation_state'] = ('released', 'released_alive', 'published',
'published_alive', 'shared', 'shared_alive', 'published_alive', 'shared', 'shared_alive',
'public', 'validated') 'public', 'validated')
kw['validation_state'] = validation_state
if 'order_by_list' not in kw: if 'order_by_list' not in kw:
# XXX Do not sort by default, as it increases query time # XXX Do not sort by default, as it increases query time
kw['order_by_list'] = [('int_index', 'DESC'), ('reference', 'DESC')] kw['order_by_list'] = [('int_index', 'DESC'), ('reference', 'DESC')]
if effective_date is None: if 'effective_date' not in kw:
if now is None: if now is None:
now = DateTime() now = DateTime()
effective_date = ComplexQuery( kw['effective_date'] = ComplexQuery(
SimpleQuery(effective_date=None), SimpleQuery(effective_date=None),
SimpleQuery(effective_date=now, comparison_operator='<='), SimpleQuery(effective_date=now, comparison_operator='<='),
logical_operator='or', logical_operator='or',
) )
kw['effective_date'] = effective_date
if not all_versions: if all_versions:
if not all_languages:
kw['language'] = language
return current_section.searchResults(src__=src__, **kw)
else:
group_by_list = set(kw.get('group_by_list', [])) group_by_list = set(kw.get('group_by_list', []))
if all_languages: if all_languages:
kw['group_by_list'] = list(group_by_list.union(('reference', 'language'))) kw['group_by_list'] = list(group_by_list.union(('reference', 'language')))
...@@ -99,14 +100,10 @@ try: ...@@ -99,14 +100,10 @@ try:
kw.setdefault('select_dict', {}).update( kw.setdefault('select_dict', {}).update(
(x.replace('.', '_') + '__ext__', x) (x.replace('.', '_') + '__ext__', x)
for x in extra_column_set if not x.endswith('__score__')) for x in extra_column_set if not x.endswith('__score__'))
return current_section.WebSection_zGetDocumentValueList(language=language, return current_section.Base_zGetDocumentValueList(language=language,
all_languages=all_languages, all_languages=all_languages,
src__=src__, src__=src__,
kw=kw) kw=kw)
else:
if not all_languages:
kw['language'] = language
return current_section.searchResults(src__=src__, **kw)
except Unauthorized: except Unauthorized:
return [] return []
...@@ -50,11 +50,11 @@ ...@@ -50,11 +50,11 @@
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>language=None, validation_state=None, all_languages=None, all_versions=None, effective_date=None, now=None, src__=0, **kw</string> </value> <value> <string>language=None, all_languages=None, all_versions=None, now=None, src__=0, **kw</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>WebSection_getDocumentValueListBase</string> </value> <value> <string>Base_getDocumentValueList</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
<dtml-let query="buildSQLQuery(query=portal_catalog.getSecurityQuery(**kw), **kw)" <dtml-let query="(_.has_key('buildSQLQuery') and buildSQLQuery or portal_catalog.buildSQLQuery)(query=portal_catalog.getSecurityQuery(**kw), **kw)"
selection_domain="kw.get('selection_domain', None)" selection_domain="kw.get('selection_domain', None)"
selection_report="kw.get('selection_report', None)" selection_report="kw.get('selection_report', None)"
optimizer_switch_key_list="portal_catalog.getSQLCatalog().getOptimizerSwitchKeyList()"> optimizer_switch_key_list="portal_catalog.getSQLCatalog().getOptimizerSwitchKeyList()">
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
CONCAT(CASE my_versioning.language CONCAT(CASE my_versioning.language
WHEN <dtml-sqlvar language type="string"> THEN '4' WHEN <dtml-sqlvar language type="string"> THEN '4'
WHEN '' THEN '3' WHEN '' THEN '3'
WHEN 'en' THEN '2' WHEN <dtml-sqlvar expr="Localizer.get_default_language() or 'en'" type="string"> THEN '2'
ELSE '1' END, ELSE '1' END,
my_versioning.version) AS priority my_versioning.version) AS priority
<dtml-if "query['select_expression']">,<dtml-var "query['select_expression']"></dtml-if> <dtml-if "query['select_expression']">,<dtml-var "query['select_expression']"></dtml-if>
......
...@@ -50,7 +50,7 @@ kw</string> </value> ...@@ -50,7 +50,7 @@ kw</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>WebSection_zGetDocumentValueList</string> </value> <value> <string>Base_zGetDocumentValueList</string> </value>
</item> </item>
<item> <item>
<key> <string>max_cache_</string> </key> <key> <string>max_cache_</string> </key>
......
# This script returns a list of document values return context.Base_getDocumentValueList(**kw)
return context.WebSection_getDocumentValueListBase(**kw)
...@@ -312,38 +312,6 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin): ...@@ -312,38 +312,6 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin):
return result return result
security.declareProtected(Permissions.View, 'getDocumentValueList')
def getDocumentValueList(self, **kw):
"""
Return the list of documents which belong to the
current section. The API is designed to
support additional parameters so that it is possible
to group documents by reference, version, language, etc.
or to implement filtering of documents.
This method must be implemented through a
portal type dependent script:
WebSection_getDocumentValueList
"""
cache = getReadOnlyTransactionCache()
if cache is not None:
key = ('getDocumentValueList', self) + tuple(kw.items())
try:
return cache[key]
except KeyError:
pass
result = self._getTypeBasedMethod('getDocumentValueList',
fallback_script_id='WebSection_getDocumentValueList')(**kw)
if cache is not None:
cache[key] = result
if result is not None and not kw.get('src__', 0):
result = [doc.__of__(self) for doc in result]
return result
security.declareProtected(Permissions.View, 'getPermanentURL') security.declareProtected(Permissions.View, 'getPermanentURL')
def getPermanentURL(self, document, view=True): def getPermanentURL(self, document, view=True):
""" """
......
search_method = getattr(context, 'getDocumentValueList', # Use getDocumentValueList for ERP5 Web
context.getPortalObject().portal_catalog) if context.getWebSectionValue() is None:
search_method = context.getPortalObject().portal_catalog
else:
search_method = context.getDocumentValueList
return search_method(**kw) return search_method(**kw)
...@@ -361,7 +361,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -361,7 +361,7 @@ Hé Hé Hé!""", page.asText().strip())
websection.getAggregateReferenceList()) websection.getAggregateReferenceList())
# even though we create many pages we should get only one # even though we create many pages we should get only one
# this is the most recent one since all share the same reference # this is the most recent one since all share the same reference
self.assertEqual(1, len(websection.WebSection_getDocumentValueList())) self.assertEqual(1, len(websection.getDocumentValueList()))
# use already created few pages in different languages with same reference # use already created few pages in different languages with same reference
# and check that we always get the right one based on selected # and check that we always get the right one based on selected
...@@ -484,7 +484,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -484,7 +484,7 @@ Hé Hé Hé!""", page.asText().strip())
base_url = base_list[0] base_url = base_list[0]
self.assertEqual(base_url, "%s/%s/" % (website.absolute_url(), web_page_en.getReference())) self.assertEqual(base_url, "%s/%s/" % (website.absolute_url(), web_page_en.getReference()))
def test_07_WebSection_getDocumentValueList(self): def test_07_getDocumentValueList(self):
""" Check getting getDocumentValueList from Web Section. """ Check getting getDocumentValueList from Web Section.
""" """
portal = self.getPortal() portal = self.getPortal()
...@@ -531,7 +531,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -531,7 +531,7 @@ Hé Hé Hé!""", page.asText().strip())
sequence_count = 0 sequence_count = 0
for sequence in [sequence_one, sequence_two, sequence_three]: for sequence in [sequence_one, sequence_two, sequence_three]:
sequence_count += 1 sequence_count += 1
message = '\ntest_07_WebSection_getDocumentValueList (Sequence %s)' \ message = '\ntest_07_getDocumentValueList (Sequence %s)' \
% (sequence_count) % (sequence_count)
ZopeTestCase._print(message) ZopeTestCase._print(message)
...@@ -604,7 +604,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -604,7 +604,7 @@ Hé Hé Hé!""", page.asText().strip())
[w.getLanguage() for w in ja_document_value_list]) [w.getLanguage() for w in ja_document_value_list])
# Tests for all_languages parameter (language parameter is simply ignored) # Tests for all_languages parameter (language parameter is simply ignored)
en_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1) en_document_value_list = websection.getDocumentValueList(all_languages=1)
self.assertEqual(13, len(en_document_value_list)) self.assertEqual(13, len(en_document_value_list))
self.assertEqual(4, len([w.getLanguage() for w in en_document_value_list \ self.assertEqual(4, len([w.getLanguage() for w in en_document_value_list \
if w.getLanguage() == 'en'])) if w.getLanguage() == 'en']))
...@@ -613,7 +613,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -613,7 +613,7 @@ Hé Hé Hé!""", page.asText().strip())
self.assertEqual(4, len([w.getLanguage() for w in en_document_value_list \ self.assertEqual(4, len([w.getLanguage() for w in en_document_value_list \
if w.getLanguage() == 'ja'])) if w.getLanguage() == 'ja']))
pt_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1, pt_document_value_list = websection.getDocumentValueList(all_languages=1,
language='pt') language='pt')
self.assertEqual(13, len(pt_document_value_list)) self.assertEqual(13, len(pt_document_value_list))
self.assertEqual(4, len([w.getLanguage() for w in pt_document_value_list \ self.assertEqual(4, len([w.getLanguage() for w in pt_document_value_list \
...@@ -624,16 +624,16 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -624,16 +624,16 @@ Hé Hé Hé!""", page.asText().strip())
if w.getLanguage() == 'ja'])) if w.getLanguage() == 'ja']))
# Tests for all_languages and all_versions # Tests for all_languages and all_versions
en_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1, en_document_value_list = websection.getDocumentValueList(all_languages=1,
all_versions=1) all_versions=1)
pt_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1, pt_document_value_list = websection.getDocumentValueList(all_languages=1,
all_versions=1, all_versions=1,
language='pt') language='pt')
ja_document_value_list = websection.WebSection_getDocumentValueListBase(all_languages=1, ja_document_value_list = websection.getDocumentValueList(all_languages=1,
all_versions=1, all_versions=1,
language='ja') language='ja')
for document_value_list in [en_document_value_list, pt_document_value_list, for document_value_list in [en_document_value_list, pt_document_value_list,
ja_document_value_list]: ja_document_value_list]:
...@@ -665,22 +665,22 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -665,22 +665,22 @@ Hé Hé Hé!""", page.asText().strip())
self.assertEqual(['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'E', 'F'], self.assertEqual(['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'E', 'F'],
[w.getReference() for w in \ [w.getReference() for w in \
websection.WebSection_getDocumentValueListBase(all_languages=1, websection.getDocumentValueList(all_languages=1,
sort_on=[('reference', 'ASC')])]) sort_on=[('reference', 'ASC')])])
self.assertEqual(['01', '02', '03', '04', '05', '06', '07', '08', '09', '11', '12', '13', '16'], self.assertEqual(['01', '02', '03', '04', '05', '06', '07', '08', '09', '11', '12', '13', '16'],
[w.getTitle() for w in \ [w.getTitle() for w in \
websection.WebSection_getDocumentValueListBase(all_languages=1, websection.getDocumentValueList(all_languages=1,
sort_on=[('title', 'ASC')])]) sort_on=[('title', 'ASC')])])
self.assertEqual(['F', 'E', 'D', 'C', 'C', 'C', 'B', 'B', 'B', 'A', 'A', 'A', 'A'], self.assertEqual(['F', 'E', 'D', 'C', 'C', 'C', 'B', 'B', 'B', 'A', 'A', 'A', 'A'],
[w.getReference() for w in \ [w.getReference() for w in \
websection.WebSection_getDocumentValueListBase(all_languages=1, websection.getDocumentValueList(all_languages=1,
sort_on=[('reference', 'DESC')])]) sort_on=[('reference', 'DESC')])])
self.assertEqual(['16', '13', '12', '11', '09', '08', '07', '06', '05', '04', '03', '02', '01'], self.assertEqual(['16', '13', '12', '11', '09', '08', '07', '06', '05', '04', '03', '02', '01'],
[w.getTitle() for w in \ [w.getTitle() for w in \
websection.WebSection_getDocumentValueListBase(all_languages=1, websection.getDocumentValueList(all_languages=1,
sort_on=[('title', 'DESC')])]) sort_on=[('title', 'DESC')])])
self.web_page_module.manage_delObjects(list(self.web_page_module.objectIds())) self.web_page_module.manage_delObjects(list(self.web_page_module.objectIds()))
...@@ -1567,7 +1567,7 @@ Hé Hé Hé!""", page.asText().strip()) ...@@ -1567,7 +1567,7 @@ Hé Hé Hé!""", page.asText().strip())
document = section.WebSection_getDocumentValue(reference, now=date) document = section.WebSection_getDocumentValue(reference, now=date)
self.assertNotEqual(document, None) self.assertNotEqual(document, None)
self.assertEqual(document.getPath(), expected_document.getPath()) self.assertEqual(document.getPath(), expected_document.getPath())
document_list = section.WebSection_getDocumentValueList(now=date) document_list = section.getDocumentValueList(now=date)
self.assertEqual(len(document_list), 1) self.assertEqual(len(document_list), 1)
self.assertEqual(document_list[0].getPath(), expected_document.getPath()) self.assertEqual(document_list[0].getPath(), expected_document.getPath())
# document1 is visible & listed before date2 # document1 is visible & listed before date2
...@@ -1700,8 +1700,8 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1700,8 +1700,8 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
self.assertSameSet((), self.assertSameSet((),
section.get_local_roles_for_userid(person_user_id)) section.get_local_roles_for_userid(person_user_id))
def test_03_WebSection_getDocumentValueListSecurity(self): def test_03_getDocumentValueListSecurity(self):
""" Test WebSection_getDocumentValueList behaviour and security""" """ Test getDocumentValueList behaviour and security"""
self.loginByUserName('admin') self.loginByUserName('admin')
site = self.portal.web_site_module.newContent(portal_type='Web Site', site = self.portal.web_site_module.newContent(portal_type='Web Site',
id='site') id='site')
...@@ -1752,28 +1752,28 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1752,28 +1752,28 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
self.tic() self.tic()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
self.loginByUserName('erp5user') self.loginByUserName('erp5user')
page_en_0.publish() page_en_0.publish()
self.tic() self.tic()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
self.assertEqual(page_en_0.getUid(), self.assertEqual(page_en_0.getUid(),
section.WebSection_getDocumentValueList()[0].getUid()) section.getDocumentValueList()[0].getUid())
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
# By Anonymous # By Anonymous
self.logout() self.logout()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
self.assertEqual(page_en_0.getUid(), self.assertEqual(page_en_0.getUid(),
section.WebSection_getDocumentValueList()[0].getUid()) section.getDocumentValueList()[0].getUid())
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
# Second Object # Second Object
self.loginByUserName('erp5user') self.loginByUserName('erp5user')
...@@ -1781,18 +1781,18 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1781,18 +1781,18 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
self.tic() self.tic()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
self.assertEqual(page_en_1.getUid(), self.assertEqual(page_en_1.getUid(),
section.WebSection_getDocumentValueList()[0].getUid()) section.getDocumentValueList()[0].getUid())
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
# By Anonymous # By Anonymous
self.logout() self.logout()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
self.assertEqual(page_en_1.getUid(), self.assertEqual(page_en_1.getUid(),
section.WebSection_getDocumentValueList()[0].getUid()) section.getDocumentValueList()[0].getUid())
# Trird Object # Trird Object
self.loginByUserName('erp5user') self.loginByUserName('erp5user')
...@@ -1800,16 +1800,16 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1800,16 +1800,16 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
self.tic() self.tic()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(2, len(section.WebSection_getDocumentValueList())) self.assertEqual(2, len(section.getDocumentValueList()))
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
# By Anonymous # By Anonymous
self.logout() self.logout()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(2, len(section.WebSection_getDocumentValueList())) self.assertEqual(2, len(section.getDocumentValueList()))
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(0, len(section.WebSection_getDocumentValueList())) self.assertEqual(0, len(section.getDocumentValueList()))
# First Japanese Object # First Japanese Object
self.loginByUserName('erp5user') self.loginByUserName('erp5user')
...@@ -1817,18 +1817,18 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -1817,18 +1817,18 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
self.tic() self.tic()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(2, len(section.WebSection_getDocumentValueList())) self.assertEqual(2, len(section.getDocumentValueList()))
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
# By Anonymous # By Anonymous
self.logout() self.logout()
self.portal.Localizer.changeLanguage('en') self.portal.Localizer.changeLanguage('en')
self.assertEqual(2, len(section.WebSection_getDocumentValueList())) self.assertEqual(2, len(section.getDocumentValueList()))
self.portal.Localizer.changeLanguage('jp') self.portal.Localizer.changeLanguage('jp')
self.assertEqual(1, len(section.WebSection_getDocumentValueList())) self.assertEqual(1, len(section.getDocumentValueList()))
self.assertEqual(page_jp_0.getUid(), self.assertEqual(page_jp_0.getUid(),
section.WebSection_getDocumentValueList()[0].getUid()) section.getDocumentValueList()[0].getUid())
def test_04_ExpireUserAction(self): def test_04_ExpireUserAction(self):
""" Test the expire user action""" """ Test the expire user action"""
...@@ -2056,10 +2056,10 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase): ...@@ -2056,10 +2056,10 @@ class TestERP5WebWithSimpleSecurity(ERP5TypeTestCase):
web_page_no_follow_up.publish() web_page_no_follow_up.publish()
self.tic() self.tic()
self.assertEqual(1, len(website.WebSection_getDocumentValueList())) self.assertEqual(1, len(website.getDocumentValueList()))
self.logout() self.logout()
self.assertEqual(1, len(website.WebSection_getDocumentValueList())) self.assertEqual(1, len(website.getDocumentValueList()))
def test_WebSiteModuleDefaultSecurity(self): def test_WebSiteModuleDefaultSecurity(self):
""" """
......
...@@ -42,6 +42,7 @@ from Products.CMFCore.CMFCatalogAware import CMFCatalogAware ...@@ -42,6 +42,7 @@ from Products.CMFCore.CMFCatalogAware import CMFCatalogAware
from Products.CMFCore.PortalFolder import ContentFilter from Products.CMFCore.PortalFolder import ContentFilter
from Products.ERP5Type.Base import Base from Products.ERP5Type.Base import Base
from Products.ERP5Type.Cache import getReadOnlyTransactionCache
from Products.ERP5Type.ConsistencyMessage import ConsistencyMessage from Products.ERP5Type.ConsistencyMessage import ConsistencyMessage
from Products.ERP5Type.CopySupport import CopyContainer from Products.ERP5Type.CopySupport import CopyContainer
from Products.ERP5Type import PropertySheet from Products.ERP5Type import PropertySheet
...@@ -431,6 +432,42 @@ class FolderMixIn(ExtensionClass.Base): ...@@ -431,6 +432,42 @@ class FolderMixIn(ExtensionClass.Base):
else: else:
return None return None
security.declareProtected(Permissions.View, 'getDocumentValueList')
def getDocumentValueList(self, **kw):
"""
Return the list of documents which belong to the
current section. The API is designed to
support additional parameters so that it is possible
to group documents by reference, version, language, etc.
or to implement filtering of documents.
This method must be implemented through a
portal type dependent script like :
Base_getDocumentValueList
"""
cache = getReadOnlyTransactionCache()
if cache is not None:
key = ('getDocumentValueList', self) + tuple(kw.items())
try:
return cache[key]
except KeyError:
pass
_getTypeBasedMethod = getattr(self, '_getTypeBasedMethod', None)
if _getTypeBasedMethod is None:
result = self.Base_getDocumentValueList(**kw)
else:
result = _getTypeBasedMethod('getDocumentValueList',
fallback_script_id='Base_getDocumentValueList')(**kw)
if cache is not None:
cache[key] = result
if result is not None and not kw.get('src__', 0):
result = [doc.__of__(self) for doc in result]
return result
def _recurseCallMethod(self, method_id, method_args=(), method_kw={}, def _recurseCallMethod(self, method_id, method_args=(), method_kw={},
restricted=False, id_list=None, min_id=None, **kw): restricted=False, id_list=None, min_id=None, **kw):
"""Run a script by activity on objects found recursively from this folder """Run a script by activity on objects found recursively from this folder
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment