from Acquisition import aq_base
from zope import event
from Products.Archetypes.event import ObjectInitializedEvent
+from plone.app.controlpanel.security import SecurityControlPanelAdapter
INSTALL_PRODUCTS = [
'easyshop.core',
]
SITE_OWNER = 'admin'
+SITE_NAME = 'site'
-def makePublicObject(container, type_name, id, **kw):
+def siteSetupContent(site):
+
+ try: site.shop
+ except AttributeError: pass
+ else: return
+
+ wf = getToolByName(site, 'portal_workflow')
+
+ # Change front-page stuff
+
+ fp = getattr(site,'front-page')
+ fp.setTitle("Startsteite")
+ fp.setDescription("")
+ fp.setText("")
+ fp.setPresentation(False)
+ fp.reindexObject()
+
+ # Create easy-shop instance
+
+ shop = makeObject(container=site, type_name='EasyShop', id='shop',
+ title='Shop', shopOwner='admin')
+
+ if wf.getInfoFor(shop,'review_state','') != 'published':
+ wf.doActionFor(shop,'publish',comment='site setup')
+
+ # Hide Users, News and Events
+
+ for id in ('Members', 'news', 'events'):
+ ob = getattr(site,id)
+ if wf.getInfoFor(ob,'review_state','') != 'private':
+ wf.doActionFor(ob,'retract',comment='site setup')
+
+ # Add sample user
+
+ mt = getToolByName(site,'portal_membership')
+ mt.addMember(id='shop', password='shop', roles=('Member',), domains=())
+ member = mt.getMemberById('shop')
+ member.setMemberProperties({'fullname': 'Shop Testuser'},
+ {'email': 'test@localhost'})
+
+
+def makeObject(container, type_name, id, **kw):
"""Create an object in CONTAINER with type TYPE_NAME and id ID. Additional keyword args
specify additional factory arguments. After creation, the object is published if needed."""
id = container.invokeFactory(id=id, type_name=type_name, **kw)
ob.at_post_create_script()
if hasattr(aq_base(ob), 'manage_afterPortalFactoryCreate'):
ob.manage_afterPortalFactoryCreate()
- wf = getToolByName(container, 'portal_workflow')
- if wf.getInfoFor(ob,'review_state','') != 'published':
- wf.doActionFor(ob,'publish',comment='site setup')
+ return ob
def siteSetup(context):
return
site = context.getSite()
- qi = getToolByName(site, 'portal_quickinstaller')
- wf = getToolByName(site, 'portal_workflow')
- # Install EasyShop product
+ # Install products
+ qi = getToolByName(site, 'portal_quickinstaller')
for p in INSTALL_PRODUCTS:
if not qi.isProductInstalled(p):
qi.installProduct(p)
- # Add and publish shop instance
+ # Enable Self-Registration
- try: site.shop
- except AttributeError:
- makePublicObject(container=site, type_name='EasyShop',
- id='shop', title='Shop', shopOwner='admin')
+ scpa = SecurityControlPanelAdapter(site)
+ scpa.set_enable_self_reg(True)
- # Hide Users, News and Events
+ # If not already installed, initialize development content
- for id in ('Members', 'news', 'events'):
- ob = getattr(site,id)
- if wf.getInfoFor(ob,'review_state','') != 'private':
- wf.doActionFor(ob,'retract',comment='site setup')
+ siteSetupContent(site)
def contentSetup(app):
- app.manage_addProduct['CMFPlone'].addPloneSite(id='site',
+ app.manage_addProduct['CMFPlone'].addPloneSite(id=SITE_NAME,
extension_ids=['koehsel.policy:default'])
# Called via hackery in __init__.py on every site start
def appInit(app):
- try: app.site
- except AttributeError:
-
- from Testing.makerequest import makerequest
- from AccessControl.SecurityManagement import newSecurityManager
- import transaction, AccessControl
-
- # Call 'contentSetup' as SITE_OWNER user with a valid REQUEST
- req = makerequest(app)
- newSecurityManager(req.REQUEST, app.acl_users.getUserById(SITE_OWNER).__of__(app.acl_users))
- contentSetup(req)
- transaction.commit()
- newSecurityManager(None, AccessControl.User.system)
+ try: getattr(app,SITE_NAME)
+ except AttributeError: pass
+ else: return
+
+ from Testing.makerequest import makerequest
+ from AccessControl.SecurityManagement import newSecurityManager
+ import transaction, AccessControl
+
+ # Call 'contentSetup' as SITE_OWNER user with a valid REQUEST
+ req = makerequest(app)
+ newSecurityManager(req.REQUEST, app.acl_users.getUserById(SITE_OWNER).__of__(app.acl_users))
+ contentSetup(req)
+ transaction.commit()
+ newSecurityManager(None, AccessControl.User.system)