setuphandler cleanup
[zope-bootstrap.git] / src / koehsel.policy / koehsel / policy / setuphandlers.py
1 from Products.CMFCore.utils import getToolByName
2 from Acquisition import aq_base
3 from zope import event
4 from Products.Archetypes.event import ObjectInitializedEvent
5 from plone.app.controlpanel.security import SecurityControlPanelAdapter
6
7 INSTALL_PRODUCTS = [
8     'easyshop.core', 
9     'koehsel.theme',
10 ]
11
12 SITE_OWNER = 'admin'
13 SITE_NAME = 'site'
14
15 def siteSetupContent(site):
16
17     try: site.shop
18     except AttributeError: pass
19     else: return
20
21     wf = getToolByName(site, 'portal_workflow')    
22
23     # Change front-page stuff
24     
25     fp = getattr(site,'front-page')
26     fp.setTitle("Startsteite")
27     fp.setDescription("")
28     fp.setText("")
29     fp.setPresentation(False)
30     fp.reindexObject()
31
32     # Create easy-shop instance
33
34     shop = makeObject(container=site, type_name='EasyShop', id='shop', 
35                       title='Shop', shopOwner='admin')
36
37     if wf.getInfoFor(shop,'review_state','') != 'published':
38         wf.doActionFor(shop,'publish',comment='site setup')
39
40     # Hide Users, News and Events
41
42     for id in ('Members', 'news', 'events'):
43         ob = getattr(site,id)
44         if wf.getInfoFor(ob,'review_state','') != 'private':
45             wf.doActionFor(ob,'retract',comment='site setup')
46
47     # Add sample user
48     
49     mt = getToolByName(site,'portal_membership')
50     mt.addMember(id='shop', password='shop', roles=('Member',), domains=())
51     member = mt.getMemberById('shop')
52     member.setMemberProperties({'fullname': 'Shop Testuser'},
53                                {'email': 'test@localhost'})
54
55
56 def makeObject(container, type_name, id, **kw):
57     """Create an object in CONTAINER with type TYPE_NAME and id ID. Additional keyword args
58 specify additional factory arguments. After creation, the object is published if needed."""
59     id = container.invokeFactory(id=id, type_name=type_name, **kw)
60     ob = getattr(container,id)
61     event.notify(ObjectInitializedEvent(ob))
62     if hasattr(aq_base(ob), 'at_post_create_script'):
63         ob.at_post_create_script()
64     if hasattr(aq_base(ob), 'manage_afterPortalFactoryCreate'):
65         ob.manage_afterPortalFactoryCreate()
66     return ob
67
68
69 def siteSetup(context):
70
71     if context.readDataFile('koehsel.policy_setup.txt') is None:
72         return
73
74     site = context.getSite()
75
76     # Install products
77
78     qi = getToolByName(site, 'portal_quickinstaller')
79     for p in INSTALL_PRODUCTS:
80         if not qi.isProductInstalled(p):
81             qi.installProduct(p)
82
83     # Enable Self-Registration
84
85     scpa = SecurityControlPanelAdapter(site)
86     scpa.set_enable_self_reg(True)
87
88     # If not already installed, initialize development content
89
90     siteSetupContent(site)
91
92
93 def contentSetup(app):
94     app.manage_addProduct['CMFPlone'].addPloneSite(id=SITE_NAME,
95                                                    extension_ids=['koehsel.policy:default'])
96
97
98 # Called via hackery in __init__.py on every site start
99 def appInit(app):
100     try: getattr(app,SITE_NAME)
101     except AttributeError: pass
102     else: return
103
104     from Testing.makerequest import makerequest
105     from AccessControl.SecurityManagement import newSecurityManager
106     import transaction, AccessControl
107
108     # Call 'contentSetup' as SITE_OWNER user with a valid REQUEST
109     req = makerequest(app)
110     newSecurityManager(req.REQUEST, app.acl_users.getUserById(SITE_OWNER).__of__(app.acl_users))
111     contentSetup(req)
112     transaction.commit()
113     newSecurityManager(None, AccessControl.User.system)