X-Git-Url: https://scm.cri.ensmp.fr/git/GroupUserFolder.git/blobdiff_plain/e9d14b6b5cc9cd4775c60cb340b5c4c787536fc3:/Installation.py..3e1ba4932c34812cf2f6f3569b0f0dbea97b7a0b:/Products/GroupUserFolder/static/gitweb.css diff --git a/Installation.py b/Installation.py deleted file mode 100644 index 1be3578..0000000 --- a/Installation.py +++ /dev/null @@ -1,247 +0,0 @@ -# -*- coding: utf-8 -*- -## GroupUserFolder -## Copyright (C)2006 Ingeniweb - -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. - -## 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; see the file COPYING. If not, write to the -## Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -""" - -""" -__version__ = "$Revision: $" -# $Source: $ -# $Id: Installation.py 30098 2006-09-08 12:35:01Z encolpe $ -__docformat__ = 'restructuredtext' - - -from cStringIO import StringIO -import string -from Products.CMFCore.utils import getToolByName -from Products.CMFCore.TypesTool import ContentFactoryMetadata -from Products.CMFCore.DirectoryView import addDirectoryViews -from Products.CMFPlone.migrations.migration_util import safeEditProperty - -class Installation: - def __init__(self, root): - self.root=root - self.out=StringIO() - self.typesTool = getToolByName(self.root, 'portal_types') - self.skinsTool = getToolByName(self.root, 'portal_skins') - self.portal_properties = getToolByName(self.root, 'portal_properties') - self.navigation_properties = self.portal_properties.navigation_properties - self.form_properties = self.portal_properties.form_properties - - def report(self): - self.out.write('Installation completed.\n') - return self.out.getvalue() - - def setupTools(self, product_name, tools): - addTool = self.root.manage_addProduct[product_name].manage_addTool - for tool, title in tools: - found = 0 - for obj in self.root.objectValues(): - if obj.meta_type == tool: - found = 1 - if not found: - addTool(tool, None) - - found = 0 - root=self.root - for obj in root.objectValues(): - if obj.meta_type == tool: - obj.title=title - self.out.write("Added '%s' tool.\n" % (tool,)) - found = 1 - if not found: - self.out.write("Couldn't add '%s' tool.\n" % (tool,)) - - def installSubSkin(self, skinFolder): - """ Install a subskin, i.e. a folder/directoryview. - """ - for skin in self.skinsTool.getSkinSelections(): - path = self.skinsTool.getSkinPath(skin) - path = map( string.strip, string.split( path,',' ) ) - if not skinFolder in path: - try: - path.insert( path.index( 'custom')+1, skinFolder ) - except ValueError: - path.append(skinFolder) - path = string.join( path, ', ' ) - self.skinsTool.addSkinSelection( skin, path ) - self.out.write('Subskin successfully installed into %s.\n' % skin) - else: - self.out.write('*** Subskin was already installed into %s.\n' % skin) - - def setupCustomModelsSkin(self, skin_name): - """ Install custom skin folder - """ - try: - self.skinsTool.manage_addProduct['OFSP'].manage_addFolder(skin_name + 'CustomModels') - except: - self.out.write('*** Skin %sCustomModels already existed in portal_skins.\n' % skin_name) - self.installSubSkin('%sCustomModels' % skin_name) - - def setupTypesandSkins(self, fti_list, skin_name, install_globals): - """ - setup of types and skins - """ - - # Former types deletion (added by PJG) - for f in fti_list: - if f['id'] in self.typesTool.objectIds(): - self.out.write('*** Object "%s" already existed in the types tool => deleting\n' % (f['id'])) - self.typesTool._delObject(f['id']) - - # Type re-creation - for f in fti_list: - # Plone1 : if cmfformcontroller is not available and plone1_action key is defined, - # use this key instead of the regular 'action' key. - if (not self.hasFormController()) and f.has_key('plone1_action'): - f['action'] = f['plone1_action'] - - # Regular FTI processing - cfm = apply(ContentFactoryMetadata, (), f) - self.typesTool._setObject(f['id'], cfm) - self.out.write('Type "%s" registered with the types tool\n' % (f['id'])) - - # Install de chaque nouvelle subskin/layer - try: - addDirectoryViews(self.skinsTool, 'skins', install_globals) - self.out.write( "Added directory views to portal_skins.\n" ) - except: - self.out.write( '*** Unable to add directory views to portal_skins.\n') - - # Param de chaque nouvelle subskin/layer - self.installSubSkin(skin_name) - - def isPlone2(self,): - """ - isPlone2(self,) => return true if we're using Plone2 ! :-) - """ - return self.hasFormController() - - def hasFormController(self,): - """ - hasFormController(self,) => Return 1 if CMFFC is available - """ - if 'portal_form_controller' in self.root.objectIds(): - return 1 - else: - return None - - def addFormValidators(self, mapping): - """ - Adds the form validators. - DON'T ADD ANYTHING IF CMFFORMCONTROLLER IS INSTALLED - """ - # Plone2 management - if self.hasFormController(): - return - for (key, value) in mapping: - safeEditProperty(self.form_properties, key, value) - - def addNavigationTransitions(self, transitions): - """ - Adds Navigation Transitions in portal properties - """ - # Plone2 management - if self.hasFormController(): - return - for (key, value) in transitions: - safeEditProperty(self.navigation_properties, key, value) - - def setPermissions(self, perms_list): - """ - setPermissions(self) => Set standard permissions / roles - """ - # As a default behavior, newly-created permissions are granted to owner and manager. - # To change this, just comment this code and grab back the code commented below to - # make it suit your needs. - for perm in perms_list: - self.root.manage_permission( - perm, - ('Manager', 'Owner'), - acquire = 1 - ) - self.out.write("Reseted default permissions\n") - - def installMessageCatalog(self, plone, prodglobals, domain, poPrefix): - """Sets up the a message catalog for this product - according to the available languages in both: - - .pot files in the "i18n" folder of this product - - MessageCatalog available for this domain - Typical use, create below this function: - def installCatalog(self): - installMessageCatalog(self, Products.MyProduct, 'mydomain', 'potfile_') - return - This assumes that you set the domain 'mydomain' in 'translation_service' - and the .../Products/YourProduct/i18n/potfile_en.po (...) contain your messages. - - @param plone: the plone site - @type plone: a 'Plone site' object - @param prodglobals: see PloneSkinRegistrar.__init__ - @param domain: the domain nick in Plone 'translation_service' - @type domain: string or None for the default domain - (you shouldn't use the default domain) - @param poPrefix: .po files to use start with that prefix. - i.e. use 'foo_' to install words from 'foo_fr.po', 'foo_en.po' (...) - @type poPrefix: string - """ - - installInfo = ( - "!! I18N INSTALLATION CANCELED !!\n" - "It seems that your Plone instance does not have the i18n features installed correctly.\n" - "You should have a 'translation_service' object in your Plone root.\n" - "This object should have the '%(domain)s' domain registered and associated\n" - "with an **existing** MessageCatalog object.\n" - "Fix all this first and come back here." % locals()) - # - # Find Plone i18n resources - # - try: - ts = getattr(plone, 'translation_service') - except AttributeError, e: - return installInfo - found = 0 - for nick, path in ts.getDomainInfo(): - if nick == domain: - found = 1 - break - if not found: - return installInfo - try: - mc = ts.restrictedTraverse(path) - except (AttributeError, KeyError), e: - return installInfo - self.out.write("Installing I18N messages into '%s'\n" % '/'.join(mc.getPhysicalPath())) - enabledLangs = [nick for nick, lang in mc.get_languages_tuple()] - self.out.write("This MessageCatalog has %s languages enabled.\n" % ", ".join(enabledLangs)) - # - # Find .po files - # - i18nPath = os.path.join(prodglobals['__path__'][0], 'i18n') - poPtn = os.path.join(i18nPath, poPrefix + '*.po') - poFiles = glob.glob(poPtn) - rxFindLanguage = re.compile(poPrefix +r'(.*)\.po') - poRsrc = {} - for file in poFiles: - k = rxFindLanguage.findall(file)[0] - poRsrc[k] = file - self.out.write("This Product provides messages for %s languages.\n" % ", ".join(poRsrc.keys())) - for lang in enabledLangs: - if poRsrc.has_key(lang): - self.out.write("Adding support for language %s.\n" % lang) - fh = open(poRsrc[lang]) - mc.manage_import(lang, fh.read()) - fh.close() - self.out.write("Done !")