Commit 0322c590 authored by Jean-Paul Smets's avatar Jean-Paul Smets

added new methods to create preset catalog tool instances


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@1450 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 60e90422
...@@ -33,7 +33,7 @@ from AccessControl import ClassSecurityInfo, getSecurityManager ...@@ -33,7 +33,7 @@ from AccessControl import ClassSecurityInfo, getSecurityManager
from Products.CMFCore.CatalogTool import IndexableObjectWrapper as CMFCoreIndexableObjectWrapper from Products.CMFCore.CatalogTool import IndexableObjectWrapper as CMFCoreIndexableObjectWrapper
from Products.CMFCore.utils import UniqueObject, _checkPermission, _getAuthenticatedUser, getToolByName from Products.CMFCore.utils import UniqueObject, _checkPermission, _getAuthenticatedUser, getToolByName
from Products.CMFCore.utils import _mergedLocalRoles from Products.CMFCore.utils import _mergedLocalRoles
from Globals import InitializeClass, DTMLFile, PersistentMapping from Globals import InitializeClass, DTMLFile, PersistentMapping, package_home
from Acquisition import aq_base, aq_inner, aq_parent from Acquisition import aq_base, aq_inner, aq_parent
from DateTime.DateTime import DateTime from DateTime.DateTime import DateTime
from BTrees.OIBTree import OIBTree from BTrees.OIBTree import OIBTree
...@@ -44,6 +44,8 @@ from Products.PageTemplates.Expressions import SecureModuleImporter ...@@ -44,6 +44,8 @@ from Products.PageTemplates.Expressions import SecureModuleImporter
from Products.CMFCore.Expression import Expression from Products.CMFCore.Expression import Expression
from Products.PageTemplates.Expressions import getEngine from Products.PageTemplates.Expressions import getEngine
import os, time, urllib
from zLOG import LOG from zLOG import LOG
class IndexableObjectWrapper(CMFCoreIndexableObjectWrapper): class IndexableObjectWrapper(CMFCoreIndexableObjectWrapper):
...@@ -124,6 +126,149 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool): ...@@ -124,6 +126,149 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool):
, 'manage_schema' ) , 'manage_schema' )
manage_schema = DTMLFile( 'dtml/manageSchema', globals() ) manage_schema = DTMLFile( 'dtml/manageSchema', globals() )
# Setup properties for various configs : CMF, ERP5, CPS, etc.
def setupPropertiesForConfig(self, config_id='erp5'):
if config_id.lower() == 'erp5':
self.sql_catalog_produce_reserved = 'z_produce_reserved_uid_list'
self.sql_catalog_clear_reserved = 'z_clear_reserved'
self.sql_catalog_object = ('z_update_object', 'z_catalog_category', 'z_catalog_movement',
'z_catalog_roles_and_users', 'z_catalog_stock', 'z_catalog_subject',)
self.sql_uncatalog_object = ('z0_uncatalog_category', 'z0_uncatalog_movement',
'z0_uncatalog_roles_and_users',
'z0_uncatalog_stock', 'z0_uncatalog_subject', 'z_uncatalog_object', )
self.sql_update_object = ('z0_uncatalog_category', 'z0_uncatalog_movement',
'z0_uncatalog_roles_and_users',
'z0_uncatalog_stock', 'z0_uncatalog_subject', 'z_catalog_category',
'z_catalog_movement', 'z_catalog_roles_and_users', 'z_catalog_stock',
'z_catalog_subject', 'z_update_object', )
self.sql_clear_catalog = ('z0_drop_catalog', 'z0_drop_category', 'z0_drop_movement',
'z0_drop_roles_and_users',
'z0_drop_stock', 'z0_drop_subject', 'z_create_catalog',
'z_create_category', 'z_create_movement', 'z_create_roles_and_users',
'z_create_stock', 'z_create_subject',
'z_clear_reserved', )
self.sql_search_results = 'z_search_results'
self.sql_count_results = 'z_count_results'
self.sql_getitem_by_path = 'z_getitem_by_path'
self.sql_getitem_by_uid = 'z_getitem_by_uid'
self.sql_catalog_schema = 'z_show_columns'
self.sql_unique_values = 'z_unique_values'
self.sql_catalog_paths = 'z_catalog_paths'
self.sql_catalog_keyword_search_keys = ('Description', 'SearchableText', 'Title', )
self.sql_catalog_full_text_search_keys = ('Description', 'SearchableText', 'Title', )
self.sql_catalog_request_keys = ()
self.sql_search_result_keys = ('catalog.uid', 'catalog.security_uid', 'catalog.path',
'catalog.relative_url', 'catalog.parent_uid', 'catalog.CreationDate',
'catalog.Creator', 'catalog.Date', 'catalog.Description',
'catalog.PrincipiaSearchSource', 'catalog.SearchableText',
'catalog.EffectiveDate',
'catalog.ExpiresDate', 'catalog.ModificationDate', 'catalog.Title',
'catalog.Type', 'catalog.bobobase_modification_time', 'catalog.created',
'catalog.effective', 'catalog.expires', 'catalog.getIcon',
'catalog.id', 'catalog.in_reply_to', 'catalog.meta_type',
'catalog.portal_type', 'catalog.modified', 'catalog.review_state',
'catalog.opportunity_state', 'catalog.default_source_reference',
'catalog.default_destination_reference',
'catalog.default_source_title', 'catalog.default_destination_title',
'catalog.default_source_section_title',
'catalog.default_destination_section_title', 'catalog.default_causality_id',
'catalog.location',
'catalog.ean13_code', 'catalog.validation_state',
'catalog.simulation_state',
'catalog.causality_state', 'catalog.discussion_state', 'catalog.invoice_state',
'catalog.payment_state', 'catalog.event_state', 'catalog.order_id',
'catalog.reference', 'catalog.source_reference',
'catalog.destination_reference', 'catalog.summary',)
self.sql_search_tables = ('catalog', 'category', 'roles_and_users', 'movement', 'subject', )
self.sql_catalog_tables = 'z_show_tables'
elif config_id.lower() == 'cps3':
self.sql_catalog_produce_reserved = 'z_produce_reserved_uid_list'
self.sql_catalog_clear_reserved = 'z_clear_reserved'
self.sql_catalog_object = ('z_update_object', 'z_catalog_roles_and_users', 'z_catalog_subject',
'z_catalog_local_users_with_roles', 'z_catalog_cps', )
self.sql_uncatalog_object = ('z0_uncatalog_roles_and_users', 'z0_uncatalog_cps',
'z0_uncatalog_local_users_with_roles', 'z0_uncatalog_subject',
'z_uncatalog_object', )
self.sql_update_object = ('z0_uncatalog_roles_and_users', 'z0_uncatalog_subject',
'z_catalog_roles_and_users', 'z_catalog_subject',
'z_update_object', 'z_update_cps')
self.sql_clear_catalog = ('z0_drop_catalog', 'z0_drop_roles_and_users', 'z0_drop_cps',
'z0_drop_local_users_with_roles', 'z0_drop_subject', 'z_create_catalog',
'z_create_roles_and_users', 'z_create_local_users_with_roles',
'z_create_subject', 'z_create_cps',
'z_clear_reserved', )
self.sql_search_results = 'z_search_results'
self.sql_count_results = 'z_count_results'
self.sql_getitem_by_path = 'z_getitem_by_path'
self.sql_getitem_by_uid = 'z_getitem_by_uid'
self.sql_catalog_schema = 'z_show_columns'
self.sql_unique_values = 'z_unique_values'
self.sql_catalog_paths = 'z_catalog_paths'
self.sql_catalog_keyword_search_keys = ('Description', 'SearchableText', 'Title', )
# XXX Not sure about local_users_with_roles.allowedRolesAndUser
# self.sql_catalog_keyword_search_keys = ('Description', 'SearchableText', 'Title',
# 'local_users_with_roles.allowedRolesAndUser' )
self.sql_catalog_full_text_search_keys = ('Description', 'SearchableText', 'Title', )
self.sql_catalog_request_keys = ()
# XXX Check if cps.* is useful or not for result_keys
self.sql_search_result_keys = ('catalog.uid', 'catalog.security_uid', 'catalog.path',
'catalog.relative_url', 'catalog.parent_uid', 'catalog.CreationDate',
'catalog.Creator', 'catalog.Date', 'catalog.Description',
'catalog.PrincipiaSearchSource', 'catalog.SearchableText',
'catalog.EffectiveDate',
'catalog.ExpiresDate', 'catalog.ModificationDate', 'catalog.Title',
'catalog.Type', 'catalog.bobobase_modification_time', 'catalog.created',
'catalog.effective', 'catalog.expires', 'catalog.getIcon',
'catalog.id', 'catalog.in_reply_to', 'catalog.meta_type',
'catalog.portal_type', 'catalog.modified', 'catalog.review_state',
'catalog.opportunity_state', 'catalog.default_source_reference',
'catalog.default_destination_reference',
'catalog.default_source_title', 'catalog.default_destination_title',
'catalog.default_source_section_title',
'catalog.default_destination_section_title', 'catalog.default_causality_id',
'catalog.location',
'catalog.ean13_code', 'catalog.validation_state',
'catalog.simulation_state',
'catalog.causality_state', 'catalog.discussion_state', 'catalog.invoice_state',
'catalog.payment_state', 'catalog.event_state', 'catalog.order_id',
'catalog.reference', 'catalog.source_reference',
'catalog.destination_reference', 'catalog.summary',)
self.sql_search_tables = ('catalog', 'cps', 'local_users_with_roles', 'roles_and_users', 'subject', )
self.sql_catalog_tables = 'z_show_tables'
# CPS specific
self.sql_catalog_topic_search_keys = ('cps_filter_sets',)
elif config_id.lower() == 'cmf':
pass
# XXX TODO
def addDefaultSQLMethods(self, config_id='erp5'):
addSQLMethod = self.manage_addProduct['ZSQLMethods'].manage_addZSQLMethod
product_path = package_home(globals())
zsql_dirs = []
# Common methods
zsql_dirs.append(os.path.join(product_path, 'sql', 'common_mysql'))
# Specific methods
if config_id.lower() == 'erp5':
zsql_dirs.append(os.path.join(product_path, 'sql', 'erp5_mysql'))
elif config_id.lower() == 'cps3':
zsql_dirs.append(os.path.join(product_path, 'sql', 'cps3_mysql'))
# XXX TODO : add other cases
#print ("zsql_dir = %s" % str(zsql_dir))
# Iterate over the sql directory. Add all sql methods in that directory.
for directory in zsql_dirs:
for entry in os.listdir(directory):
if len(entry) > 5 and entry[-5:] == '.zsql':
id = entry[:-5]
# Create an empty SQL method first.
addSQLMethod(id = id, title = '', connection_id = '', arguments = '', template = '')
sql_method = getattr(self, id)
# Set parameters of the SQL method from the contents of a .zsql file.
sql_method.fromFile(os.path.join(directory, entry))
def _listAllowedRolesAndUsers(self, user): def _listAllowedRolesAndUsers(self, user):
try: try:
...@@ -406,7 +551,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool): ...@@ -406,7 +551,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool):
vars = wf.getCatalogVariablesFor(object) vars = wf.getCatalogVariablesFor(object)
else: else:
vars = {} vars = {}
LOG('catalog_object vars', 0, str(vars)) #LOG('catalog_object vars', 0, str(vars))
w = IndexableObjectWrapper(vars, object) w = IndexableObjectWrapper(vars, object)
(security_uid, optimised_roles_and_users) = self.getSecurityUid(object, w) (security_uid, optimised_roles_and_users) = self.getSecurityUid(object, w)
#LOG('catalog_object optimised_roles_and_users', 0, str(optimised_roles_and_users)) #LOG('catalog_object optimised_roles_and_users', 0, str(optimised_roles_and_users))
...@@ -418,7 +563,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool): ...@@ -418,7 +563,7 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool):
vars['security_uid'] = security_uid vars['security_uid'] = security_uid
#LOG("IndexableObjectWrapper", 0,str(w.allowedRolesAndUsers())) #LOG("IndexableObjectWrapper", 0,str(w.allowedRolesAndUsers()))
#try: #try:
LOG('catalog_object wrapper', 0, str(w.__dict__)) #LOG('catalog_object wrapper', 0, str(w.__dict__))
ZCatalog.catalog_object(self, w, uid, idxs=idxs, is_object_moved=is_object_moved) ZCatalog.catalog_object(self, w, uid, idxs=idxs, is_object_moved=is_object_moved)
#except: #except:
# When we import data into Zope # When we import data into Zope
...@@ -511,5 +656,34 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool): ...@@ -511,5 +656,34 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool):
self._clearSecurityCache() self._clearSecurityCache()
return ZCatalog.manage_catalogClear(self, REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1) return ZCatalog.manage_catalogClear(self, REQUEST=REQUEST, RESPONSE=RESPONSE, URL1=URL1)
def manage_catalogIndexAll(self, REQUEST, RESPONSE, URL1):
""" adds all objects to the catalog starting from the parent """
elapse = time.time()
c_elapse = time.clock()
def reindex(oself, r_dict):
path = oself.getPhysicalPath()
if r_dict.has_key(path): return
r_dict[path] = 1
try:
oself.reindexObject()
get_transaction().commit() # Allows to reindex up to 10,000 objects without problems
except:
# XXX better exception handling required
pass
for o in oself.objectValues():
reindex(o, r_dict)
new_dict = {}
reindex(self.aq_parent, new_dict)
elapse = time.time() - elapse
c_elapse = time.clock() - c_elapse
RESPONSE.redirect(URL1 +
'/manage_catalogAdvanced?manage_tabs_message=' +
urllib.quote('Catalog Indexed<br>'
'Total time: %s<br>'
'Total CPU time: %s' % (`elapse`, `c_elapse`)))
InitializeClass(CatalogTool) InitializeClass(CatalogTool)
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