source: products/qPloneSkinDump/branches/pastescript/skin_template/setuphandlers.py @ 1061

Last change on this file since 1061 was 1, checked in by myroslav, 19 years ago

Building directory structure

  • Property svn:eol-style set to native
File size: 5.2 KB
Line 
1from zope.dottedname.resolve import resolve
2from zope.component import getUtility, getSiteManager, getMultiAdapter
3
4from plone.portlets.interfaces import IPortletAssignmentMapping, IPortletManager, IPlacelessPortletManager
5from plone.portlets.interfaces import IPortletContext, IPortletDataProvider
6from plone.portlets.interfaces import ILocalPortletAssignmentManager
7from plone.portlets.storage import PortletCategoryMapping, PortletAssignmentMapping
8from plone.app.portlets import portlets
9
10from plone.app.customerize.registration import *
11
12from Products.CMFCore.utils import getToolByName
13from Products.GenericSetup.utils import _getDottedName, _resolveDottedName
14
15from Products.%(product_name)s.config import *
16from Products.%(product_name)s.utils import *
17
18import sys
19from logging import getLogger
20logger = getLogger('%(product_name)s')
21
22def assignPortlet(mapping, info):
23    name = info['name']
24    try:
25        assignment = _resolveDottedName(info['class'])
26    except:
27        e,v,tr = sys.exc_info()
28        logger.info('Debug from setup portlets handler: %%s: %%s (%%s)' , info['class'], str(v), str(e))
29        return False
30    else:
31        portlet = assignment(**info['kwargs'])
32        if mapping.get(name, None) is not None:
33            del mapping[name]
34        mapping[name] = portlet
35        return portlet
36
37def setupSiteWidePortlets(site, data, managers):
38
39    for name, info in data:
40        manager = managers.get(name, None)
41        if manager is not None:
42            for category, keys in info.items():
43                catmapping = manager.get(category, None)
44                if catmapping is None:
45                    catmapping = manager[category] = PortletCategoryMapping()
46                for key, assignments in keys.items():
47                    mapping = catmapping.get(key, None)
48                    if mapping is None:
49                        mapping = catmapping[key] = PortletAssignmentMapping()
50                    for assignment in assignments.values():
51                        assignPortlet(mapping, assignment)
52
53def setupPortletsForContext(context, data, managers):
54
55    for name, info in data:
56        manager = managers.get(name, None)
57        if manager is not None:
58            if info['assignments']:
59                # set portlet assignments
60                mapping = getMultiAdapter((context, manager), IPortletAssignmentMapping, context=context)
61                for assignment in info['assignments']:
62                    assignPortlet(mapping, assignment)
63            if info['blacklists']:
64                # set blacklists
65                localassignmentmanager = getMultiAdapter((context, manager), ILocalPortletAssignmentManager, context=context)
66                for category, status in info['blacklists']:
67                    localassignmentmanager.setBlacklistStatus(category, status)
68
69def importPortlets(context):
70    site = context.getSite()
71
72    components = getSiteManager(site)
73    ms = [r for r in components.registeredUtilities() if r.provided.isOrExtends(IPortletManager)]
74    context_managers = {}
75    for m in ms:
76        if not m.provided.isOrExtends(IPlacelessPortletManager):
77            context_managers[m.name] = getUtility(IPortletManager, name=m.name, context=site)
78
79    managers = {}
80    for m in ms:
81        managers[m.name] = getUtility(IPortletManager, name=m.name, context=site)
82
83    for path, info in SLOT_STRUCTURE:
84        if path == '__site-wide-portlets__':
85            setupSiteWidePortlets(site, info, managers)
86        else:
87            try:
88                obj = site.restrictedTraverse(path)
89            except:
90                e,v,tr = sys.exc_info()
91                logger.info('Debug from importPortlets handler: %%s: %%s (%%s)' , path, str(v), str(e))
92            else:
93                setupPortletsForContext(obj, info, context_managers)
94
95def importZexps(context):
96    site = context.getSite()
97    if checkIfImport():
98        performImportToPortal(site)
99
100def importVarious(context):
101    site = context.getSite()
102    out = StringIO()
103    if FINAL_CUSTOMIZATION_FUNCTIONS:
104        dummy = [func(site, out) for func in FINAL_CUSTOMIZATION_FUNCTIONS]
105
106def importCustomViews(context):
107    site = context.getSite()
108
109    for view in CUSTOM_VIEWS:
110        for_name = view['for_name']
111        view_name = view['view_name']
112        type_name = view['type_name']
113        kwargs = view['kwargs']
114
115        reg = findTemplateViewRegistration(for_name, type_name, view_name)
116        viewzpt_id = str(generateIdFromRegistration(reg))
117
118        container = getUtility(IViewTemplateContainer)
119        if viewzpt_id in container.objectIds():
120            continue
121
122        attr, pt = findViewletTemplate(reg.factory)
123        if pt:
124            ptname = basename(pt.filename)
125        else:
126            ptname = None
127        viewzpt = TTWViewTemplate(
128            id = viewzpt_id,
129            text = kwargs['text'],
130            encoding = kwargs['encoding'],
131            content_type = kwargs['content_type'],
132            view = getViewClassFromRegistration(reg),
133            permission = getViewPermissionFromRegistration(reg),
134            name = ptname)
135        container.addTemplate(viewzpt_id, viewzpt)
136
137        sm = getSiteManager(site)
138        sm.registerAdapter(viewzpt, required = reg.required, provided = reg.provided, name = reg.name)
Note: See TracBrowser for help on using the repository browser.