root/qPloneSkinDump/trunk/skin_template/fixes.py

Revision 1113 (checked in by mylan, 9 months ago)

Merged trunk with branches/plone_3.0 version

  • Property svn:eol-style set to native
Line 
1 from Acquisition import aq_base
2 from Products.CMFCore.utils import getToolByName
3 from Products.ZCatalog.ProgressHandler import ZLogHandler
4 from plone.app.linkintegrity.handlers import referencedRelationship as li_relation
5
6 portal_catalog = None
7 portal_repository = None
8 uid_catalog = None
9 reference_catalog = None
10
11 def fix_archivest(ob):
12     ''' Fix #7334 bug of CMFEdition.
13         Fixed in CMFEdition v1.1.5+
14     '''
15     if portal_repository.isVersionable(ob):
16         portal_repository.save(obj=ob, comment="")
17
18 def fix_catalog(ob):
19     ob.reindexObject()
20
21 def fix_linkintegrity(ob):
22     """Fix losed references."""
23     uobject = aq_base(ob)
24     if reference_catalog.isReferenceable(uobject):
25         ob_li_refs = reference_catalog.getReferences(ob, relationship=li_relation)
26         if ob_li_refs:
27             annotations = ob._getReferenceAnnotations()
28             uniqueUIDs = uid_catalog.uniqueValuesFor('UID')
29             # delete references to non-existent objects
30             [annotations._delObject(ref.id) for ref in ob_li_refs \
31              if not ref.targetUID in uniqueUIDs]
32        
33 def fix_all(ob):
34     """ Recursive function for perform registered
35         actions for all internal objects
36     """
37     [a(ob) for a in perobject_actions]
38
39     if getattr(ob, 'is_folderish', None):
40         [fix_all(o) for o in ob.objectValues()]
41
42 perobject_actions = [fix_archivest, fix_catalog, fix_linkintegrity]
43
44 def fix(context):
45     ''' Main fix function: fix defects of importing:
46         imported objects - absence in catalogs, some other issues'''
47     global portal_repository, portal_catalog
48     global uid_catalog, reference_catalog
49     portal_catalog = getToolByName(context,'portal_catalog')
50     portal_repository = getToolByName(context,'portal_repository')
51     uid_catalog = getToolByName(context,'uid_catalog')
52     reference_catalog = getToolByName(context,'reference_catalog')
53
54     fix_all(context)
55
Note: See TracBrowser for help on using the browser.