Commit 1bf4f812 authored by Sebastien Robin's avatar Sebastien Robin

sorry, this one was missing


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@1973 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 27391f32
#!/usr/bin/python
#
# Authors : Tarek Ziade tziade@nuxeo.com
# Robin Sebastien seb@nexedi.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published
# # by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
"""
ERP5CPS Installer
HOWTO USE THAT ?
- Log into the ZMI as manager
- Go to your CPS root directory
- Create an External Method with the following parameters:
id : ERP5CPS INSTALLER (or whatever)
title : ERP5CPS INSTALLER (or whatever)
Module Name : ERP5CPS.install
Function Name : install
- save it
- click now the test tab of this external method.
"""
import sys, os
from zLOG import LOG,INFO,DEBUG,TRACE
from OFS.ObjectManager import BadRequestException, BadRequest
from Products.ExternalMethod.ExternalMethod import ExternalMethod
from Products.CMFCore.CMFCorePermissions import View, ModifyPortalContent
from Products.DCWorkflow.Transitions import TRIGGER_USER_ACTION
from Products.CPSCore.CPSWorkflow import TRANSITION_BEHAVIOR_PUBLISHING
from Products.CPSInstaller.CPSInstaller import CPSInstaller
from Products.ERP5.ERP5Site import ERP5Site
from Products.ERP5.ERP5Site import ERP5Generator
from Products.ERP5CPS.ERP5CPSSite import ERP5CPSGenerator
from Products.ERP5CPS import ERP5CPSBoxes
from Products.CMFCore.utils import getToolByName
from os import path
SECTIONS_ID = 'sections'
WORKSPACES_ID = 'workspaces'
SKINS = { 'erp5cps_default': 'Products/ERP5CPS/skins/erp5cps_default',
'erp5cps_style': 'Products/ERP5CPS/skins/erp5cps_style',
'erp5cps_images': 'Products/ERP5CPS/skins/erp5cps_images',
'pro': 'Products/ERP5/skins/pro',
'erp5': 'Products/ERP5/skins/erp5',
'activity': 'Products/CMFActivity/skins/activity',
}
class ERP5CPSInstaller(CPSInstaller,ERP5Generator):
"""ERP5 CPS installer class definition
"""
product_name = 'ERP5CPS'
def log(self,message):
CPSInstaller.log(self,message)
LOG('ERP5CPSInstaller',INFO,message)
def install(self):
"""Main call
"""
self.log("Starting ERP5CPS specific install")
self.updateCPS()
self.verifySkins(SKINS)
self.defineSkins()
self.setupTranslations()
self.installMandatoryProducts()
self.installTreeLoader()
self.setupBoxes()
self.finalize()
#self.reindexCatalog()
self.installERP5()
self.log("End of specific ERP5CPS install")
def updateCPS(self):
"""Update CPS
"""
self.portal.cpsupdate()
def defineSkins(self):
"""check skin order for ERP5/CPS compatibility
"""
portal_skin = getattr(self.portal,'portal_skins')
layers = portal_skin.selections
for key in layers.keys():
selection = layers[key]
position = selection.find('pro')
if position >= 0:
splitted = selection.split(', ')
try:
index_pos = splitted.index('pro')
except:
raise str(splitted)
del(splitted[index_pos])
splitted.append('pro')
selection = ', '.join(splitted)
layers[key] = selection
def installERP5(self):
"""
Install ERP5
"""
gen = ERP5Generator()
gen.setupTools(self.portal)
gen.setupBusinessTemplate(self.portal)
def installProduct(self,ModuleName,
InstallModuleName='install',MethodName='install'):
""" creates an external method for a
product install and launches it
"""
objectName ="cpserp5_"+ModuleName+"_installer"
objectName = objectName.lower()
# Install the product
self.log(ModuleName+" INSTALL [ START ]")
installer = ExternalMethod(objectName,
"",
ModuleName+"."+InstallModuleName,
MethodName)
try:
self.portal._setObject(objectName,installer)
except BadRequestException:
self.log("External Method for "+ModuleName+" already installed")
method_link = getattr(self.portal,objectName)
method_link()
self.log(ModuleName+" INSTALL [ STOP ]")
def installMandatoryProducts(self):
"""Installs the mandatory products for ERP5CPS
"""
pass
# Installing required products
def installTreeLoader(self):
"""Install tree loader
"""
if 'loadTree' not in self.portal.objectIds():
self.log(" Adding loadTree")
loadTree = ExternalMethod('loadTree',
'loadTree',
'CPSDefault.loadTree',
'loadTree')
self.portal._setObject('loadTree', loadTree)
self.log(" Protecting loadTree")
self.portal.loadTree.manage_permission(
'View', roles=['Manager'], acquire=0
)
self.portal.loadTree.manage_permission(
'Access contents information', roles=['Manager'], acquire=0
)
def setupBoxes(self):
"""Setup Boxes
"""
self.log("Adding ERP5CPS default boxes")
idbc = self.portal.portal_boxes.getBoxContainerId(self.portal)
self.log("Checking /%s" % idbc )
if idbc not in self.portal.objectIds():
self.log(" Creating")
self.portal.manage_addProduct['CPSDefault'].addBoxContainer()
# importing boxes
boxes = ERP5CPSBoxes.getBoxes()
guard_boxes = ERP5CPSBoxes.getGuardBoxes()
ttool = self.portal.portal_types
box_container = self.portal[idbc]
existing_boxes = box_container.objectIds()
for box in boxes.keys():
if box not in existing_boxes:
self.log("Creation of box: %s" % box)
apply(ttool.constructContent,
(boxes[box]['type'], box_container,
box, None), {})
ob = getattr(box_container, box)
ob.manage_changeProperties(**boxes[box])
else:
ob = getattr(box_container, box)
# defining guards
if guard_boxes.has_key(box):
guard_box = guard_boxes[box]
self.log("Setting up guards for box: %s" % box)
ob.setGuardProperties(guard_box)
def install(self):
installer = ERP5CPSInstaller(self)
installer.install()
return installer.logResult()
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