def register_layer(self, relpath, name, out, add=True): """Register a file system directory as skin layer """ print >>out, "register skin layers" skinstool = getToolByName(self, 'portal_skins') if name not in skinstool.objectIds(): kupu_plone_skin_dir = minimalpath(os.path.join(kupu_package_dir, relpath)) createDirectoryView(skinstool, kupu_plone_skin_dir, name) print >>out, "The layer '%s' was added to the skins tool" % name if not add: return # put this layer into all known skins for skinName in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skinName) path = [i.strip() for i in path.split(',')] try: if name not in path: path.insert(path.index('custom')+1, name) except ValueError: if name not in path: path.append(name) path = ','.join(path) skinstool.addSkinSelection(skinName, path)
def install(self): """ Install this product """ out = [] typesTool = getToolByName(self, 'portal_types') skinsTool = getToolByName(self, 'portal_skins') # add in the directory view pointing to our skin if layer_name not in skinsTool.objectIds(): createDirectoryView(skinsTool, layer_location, layer_name) out.append('Added "%s" directory view to portal_skins' % layer_name) # add in the layer to all our skins skins = skinsTool.getSkinSelections() for skin in skins: path = skinsTool.getSkinPath(skin) path = [ p.strip() for p in path.split(',') ] if layer_name not in path: path.insert(path.index('custom')+1, layer_name) path = ", ".join(path) skinsTool.addSkinSelection(skin, path) out.append('Added "%s" to "%s" skins' % (layer_name, skin)) else: out.append('Skipping "%s" skin' % skin) return "\n".join(out)
def register_layer(self, relpath, name, out, add=True): """Register a file system directory as skin layer """ print >> out, "register skin layers" skinstool = getToolByName(self, 'portal_skins') if name not in skinstool.objectIds(): kupu_plone_skin_dir = minimalpath( os.path.join(kupu_package_dir, relpath)) createDirectoryView(skinstool, kupu_plone_skin_dir, name) print >> out, "The layer '%s' was added to the skins tool" % name if not add: return # put this layer into all known skins for skinName in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skinName) path = [i.strip() for i in path.split(',')] try: if name not in path: path.insert(path.index('custom') + 1, name) except ValueError: if name not in path: path.append(name) path = ','.join(path) skinstool.addSkinSelection(skinName, path)
def _initBBBObjects(self, node): for child in node.childNodes: if child.nodeName != 'skin-directory': continue parent = self.context obj_id = str(child.getAttribute('id')) obj_dir = str(child.getAttribute('directory')) if obj_id not in parent.objectIds(): createDirectoryView(self.context, obj_dir, obj_id)
def add(portal, name, location): portal_skins = getToolByName(portal, "portal_skins") if name not in portal_skins.objectIds(): createDirectoryView(portal_skins, location, name) skins = portal_skins.getSkinSelections() for skin in skins: path = portal_skins.getSkinPath(skin) path = [ p.strip() for p in path.split(',') ] if name not in path: if 'custom' in path: pos = path.index('custom') + 1 else: pos = 0 path.insert(pos, name) path = ", ".join(path) portal_skins.addSkinSelection(skin, path)
def add(portal, name, location): portal_skins = getToolByName(portal, "portal_skins") if name not in portal_skins.objectIds(): createDirectoryView(portal_skins, location, name) skins = portal_skins.getSkinSelections() for skin in skins: path = portal_skins.getSkinPath(skin) path = [p.strip() for p in path.split(',')] if name not in path: if 'custom' in path: pos = path.index('custom') + 1 else: pos = 0 path.insert(pos, name) path = ", ".join(path) portal_skins.addSkinSelection(skin, path)
def _registerDirectory(self, obj=None, ignore=None): from Products.CMFCore.DirectoryView import _dirreg from Products.CMFCore.DirectoryView import createDirectoryView if ignore is None: from Products.CMFCore.DirectoryView import ignore filepath = join(self.tempname, self._skinname) subpath = basename(self.tempname) if subpath != 'tests': # we have a temp dir in tests subpath = 'tests/%s' % subpath reg_key = 'Products.CMFCore:%s/%s' % (subpath, self._skinname) _dirreg.registerDirectoryByKey(filepath, reg_key, ignore=ignore) if obj is not None: ob = obj.ob = DummyFolder() info = _dirreg.getDirectoryInfo(reg_key) for entry in info.getSubdirs(): entry_reg_key = '/'.join((reg_key, entry)) createDirectoryView(ob, entry_reg_key, entry)
def install(self): """ Install this product """ out = [] installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) out.append("Successfully installed types for %s." % PROJECTNAME) skinsTool = getToolByName(self, 'portal_skins') out = [] SKIN_ROOT = 'Products/CcOrg/skins' SKINS = [os.path.join(SKIN_ROOT, n) for n in os.listdir(SKIN_ROOT) if os.path.isdir(os.path.join(SKIN_ROOT, n))] portal_skins = skinsTool.getSkinSelections() for skinlocation in SKINS: skinname = skinlocation.split('/')[-1] # make sure we're not traversing into version control if skinname.lower() in ('cvs', '.svn'): continue if skinname not in skinsTool.objectIds(): createDirectoryView(skinsTool, skinlocation, skinname) out.append('Added "%s" directory view to portal_skins' % skinname) for skin in portal_skins: path = skinsTool.getSkinPath(skin) path = [ p.strip() for p in path.split(',') ] if skinname not in path: path.insert(path.index('custom')+1, skinname) path = ", ".join(path) skinsTool.addSkinSelection(skin, path) out.append('Added "%s" to "%s" skins' % (skinname, skin)) else: out.append('Skipping "%s" skin' % skin) return "\n".join(out)
def install_skins(self): st = getToolByName(self.context, 'portal_skins') skins = ['Plone Default', 'Plone Tableless'] if not hasattr(aq_base(st), 'plone_kss'): createDirectoryView(st, 'Products.CMFPlone:skins/plone_kss') if not hasattr(aq_base(st), 'archetypes_kss'): createDirectoryView(st, 'Products.Archetypes:skins/archetypes_kss') selections = st._getSelections() for s in skins: if not selections.has_key(s): continue path = st.getSkinPath(s) path = [p.strip() for p in path.split(',')] path_changed = False if not 'plone_kss' in path: path.append('plone_kss') path_changed = True if not 'archetypes_kss' in path: path.append('archetypes_kss') path_changed = True if path_changed: st.addSkinSelection(s, ','.join(path)) logger.info('Added missing skins to %s' % s)
def installDeprecated(portal, out): # register login skin st = getToolByName(portal, 'portal_skins', None) if st is None: return if not hasattr(aq_base(st), 'plone_deprecated'): createDirectoryView(st, 'Products.CMFPlone:skins/plone_deprecated') out.append('Added directory view for plone_deprecated') # add deprecated skin to default skins skins = ['Plone Default', 'Plone Tableless'] selections = st._getSelections() for s in skins: if not selections.has_key(s): continue path = st.getSkinPath(s) path = [p.strip() for p in path.split(',')] if not 'plone_deprecated' in path: if 'plone_3rdParty' in path: path.insert(path.index('plone_3rdParty'), 'plone_deprecated') else: path.append('plone_deprecated') st.addSkinSelection(s, ','.join(path)) out.append('Added plone_deprecated to %s' % s)
def install(self): """ Install this product """ out = [] typesTool = getToolByName(self, 'portal_types') skinsTool = getToolByName(self, 'portal_skins') if id not in typesTool.objectIds(): typesTool.manage_addTypeInformation( fti_klass.meta_type, id = plone_product_name, typeinfo_name = "%s: %s" % (product_name, product_name) ) out.append('Registered with the types tool') else: out.append('Object "%s" already existed in the types tool' % (id)) # add in the directory view pointing to our skin if layer_name not in skinsTool.objectIds(): createDirectoryView(skinsTool, layer_location, layer_name) out.append('Added "%s" directory view to portal_skins' % layer_name) # add in the layer to all our skins skins = skinsTool.getSkinSelections() for skin in skins: path = skinsTool.getSkinPath(skin) path = [ p.strip() for p in path.split(',') ] if layer_name not in path: path.insert(path.index('custom')+1, layer_name) path = ", ".join(path) skinsTool.addSkinSelection(skin, path) out.append('Added "%s" to "%s" skins' % (layer_name, skin)) else: out.append('Skipping "%s" skin' % skin) return "\n".join(out)
def importSkinsTool( context ): """ Import skins tool FSDirViews and skin paths from an XML file o 'context' must implement IImportContext. o Register via Python: registry = site.portal_setup.getImportStepRegistry() registry.registerStep( 'importSkinsTool' , '20040518-01' , Products.CMFSetup.skins.importSkinsTool , () , 'Skins Tool import' , 'Import skins tool FSDVs and skin paths.' ) o Register via XML: <setup-step id="importSkinsTool" version="20040524-01" handler="Products.CMFSetup.skins.importSkinsTool" title="Skins Tool import" >Import skins tool FSDVs and skin paths.</setup-step> """ site = context.getSite() encoding = context.getEncoding() skins_tool = getToolByName( site, 'portal_skins' ) if context.shouldPurge(): skins_tool._getSelections().clear() for id in skins_tool.objectIds( DirectoryView.meta_type ): skins_tool._delObject(id) text = context.readDataFile( _FILENAME ) if text is not None: stc = SkinsToolConfigurator( site ).__of__( site ) ( default_skin , request_var , allow_arbitrary , persist_cookie , skin_dirs , skin_paths ) = stc.parseXML( text, encoding ) tool = getToolByName( site, 'portal_skins' ) tool.default_skin = str( default_skin ) tool.request_varname = str( request_var ) tool.allow_any = allow_arbitrary and 1 or 0 tool.cookie_persistence = persist_cookie and 1 or 0 for id, directory in skin_dirs: createDirectoryView( tool, directory, id ) for path_name, layers in skin_paths: tool.addSkinSelection( path_name, ', '.join( layers ) ) # # Purge and rebuild the skin path, now that we have added our stuff. # site._v_skindata = None skins_tool.setupCurrentSkin( site.REQUEST ) return 'Skins tool imported'
def importSkinsTool( context ): """ Import skins tool FSDirViews and skin paths from an XML file o 'context' must implement IImportContext. o Register via Python: registry = site.portal_setup.getImportStepRegistry() registry.registerStep( 'importSkinsTool' , '20040518-01' , Products.CMFSetup.skins.importSkinsTool , () , 'Skins Tool import' , 'Import skins tool FSDVs and skin paths.' ) o Register via XML: <setup-step id="importSkinsTool" version="20040524-01" handler="Products.CMFSetup.skins.importSkinsTool" title="Skins Tool import" >Import skins tool FSDVs and skin paths.</setup-step> """ site = context.getSite() encoding = context.getEncoding() stool = getToolByName(site, 'portal_skins') if context.shouldPurge(): stool.request_varname = 'portal_skin' stool.allow_any = 0 stool.cookie_persistence = 0 stool._getSelections().clear() for id in stool.objectIds(DirectoryView.meta_type): stool._delObject(id) text = context.readDataFile( _FILENAME ) if text is not None: stc = SkinsToolConfigurator( site, encoding ) tool_info = stc.parseXML( text ) if 'default_skin' in tool_info: stool.default_skin = str(tool_info['default_skin']) if 'request_varname' in tool_info: stool.request_varname = str(tool_info['request_varname']) if 'allow_any' in tool_info: stool.allow_any = tool_info['allow_any'] and 1 or 0 if 'cookie_persistence' in tool_info: stool.cookie_persistence = \ tool_info['cookie_persistence'] and 1 or 0 for dir_info in tool_info['skin_dirs']: dir_id = dir_info['id'] if dir_id in stool.objectIds(DirectoryView.meta_type): stool._delObject(dir_id) createDirectoryView(stool, dir_info['directory'], dir_id) for path_info in tool_info['skin_paths']: path_id = path_info['id'] if path_id == '*': for path_id, path in stool._getSelections().items(): path = _updatePath(path, path_info['layers']) stool.addSkinSelection(path_id, path) else: if stool._getSelections().has_key(path_id): path = stool._getSelections()[path_id] else: path = '' path = _updatePath(path, path_info['layers']) stool.addSkinSelection(path_id, path) # # Purge and rebuild the skin path, now that we have added our stuff. # Don't bother if no REQUEST is present, e.g. when running unit tests # request = getattr(site, 'REQUEST', None) if request is not None: site._v_skindata = None stool.setupCurrentSkin(request) return 'Skins tool imported'
def importSkinsTool(context): """ Import skins tool FSDirViews and skin paths from an XML file o 'context' must implement IImportContext. o Register via Python: registry = site.portal_setup.getImportStepRegistry() registry.registerStep( 'importSkinsTool' , '20040518-01' , Products.CMFSetup.skins.importSkinsTool , () , 'Skins Tool import' , 'Import skins tool FSDVs and skin paths.' ) o Register via XML: <setup-step id="importSkinsTool" version="20040524-01" handler="Products.CMFSetup.skins.importSkinsTool" title="Skins Tool import" >Import skins tool FSDVs and skin paths.</setup-step> """ site = context.getSite() encoding = context.getEncoding() stool = getToolByName(site, 'portal_skins') if context.shouldPurge(): stool.request_varname = 'portal_skin' stool.allow_any = 0 stool.cookie_persistence = 0 stool._getSelections().clear() for id in stool.objectIds(DirectoryView.meta_type): stool._delObject(id) text = context.readDataFile(_FILENAME) if text is not None: stc = SkinsToolConfigurator(site, encoding) tool_info = stc.parseXML(text) if 'default_skin' in tool_info: stool.default_skin = str(tool_info['default_skin']) if 'request_varname' in tool_info: stool.request_varname = str(tool_info['request_varname']) if 'allow_any' in tool_info: stool.allow_any = tool_info['allow_any'] and 1 or 0 if 'cookie_persistence' in tool_info: stool.cookie_persistence = \ tool_info['cookie_persistence'] and 1 or 0 for dir_info in tool_info['skin_dirs']: dir_id = dir_info['id'] if dir_id in stool.objectIds(DirectoryView.meta_type): stool._delObject(dir_id) createDirectoryView(stool, dir_info['directory'], dir_id) for path_info in tool_info['skin_paths']: path_id = path_info['id'] if path_id == '*': for path_id, path in stool._getSelections().items(): path = _updatePath(path, path_info['layers']) stool.addSkinSelection(path_id, path) else: if stool._getSelections().has_key(path_id): path = stool._getSelections()[path_id] else: path = '' path = _updatePath(path, path_info['layers']) stool.addSkinSelection(path_id, path) # # Purge and rebuild the skin path, now that we have added our stuff. # Don't bother if no REQUEST is present, e.g. when running unit tests # request = getattr(site, 'REQUEST', None) if request is not None: site._v_skindata = None stool.setupCurrentSkin(request) return 'Skins tool imported'
def install(self): """ install the IMU Product """ out = StringIO() portal = self.portal_url.getPortalObject() out.write('Install IMU portal types to portal_types tool\n') # setup the new types typestool = portal.portal_types newTypes = [ IMUResearch , IMUSeminar , IMUPublication , IMUConsulting ] for i in newTypes: t = i.factory_type_information if t['id'] in typestool.objectIds(): typestool._delObject(t['id']) cfm = apply(ContentFactoryMetadata, (), t) typestool._setObject(t['id'], cfm) skinFolder = 'imu' skinstool = portal.portal_skins if skinFolder in skinstool.objectIds(): skinstool.manage_delObjects([skinFolder,]) sp = os.path.join( Globals.package_home( module_globals ), 'skins', skinFolder ) createDirectoryView(skinstool, sp, skinFolder) out.write('Skinfolder '+skinFolder+' added to portal_skins\n') # setup imu skin path skinname = 'imu' path=[elem.strip() for elem in skinstool.getSkinPath('elevateIT Default').split(',')] path.insert(path.index('custom')+1, skinname) skinstool.addSkinSelection(skinname, ','.join(path)) out.write("skin imu created\n") skinstool.default_skin=skinname # left_slots = ( 'here/portlet_nav_imu/macros/portlet', # 'here/portlet_nav_standorte/macros/portlet' ) # # right_slots = ( 'here/portlet_calendar/macros/portlet' # , 'here/portlet_news/macros/portlet' ) # # portal._updateProperty('left_slots', left_slots ) # portal._updateProperty('right_slots', right_slots ) # out.write('Portlet slots changed. We only need menu portlet in left slot.\n') # update portal properties sp = portal.portal_properties.site_properties sp._updateProperty('localTimeFormat', '%d.%m.%Y') sp._updateProperty('localLongTimeFormat', '%d.%m.%Y %H:%M') if sp.hasProperty('listMandants'): sp._delProperty('listMandants') if not sp.hasProperty('listProjecttypes'): sp._setProperty('listProjecttypes', ('Auftragsforschung', 'Sachverstand', 'Seminare', 'Grundlagenforschung', 'zweckbetr. Forschung'), 'lines') out.write("site properties updated\n") cityfolders = ['muenchen', 'berlin_dresden', 'karlsruhe', 'nuernberg', 'stuttgart'] if not portal.hasProperty('cityfolders'): portal._setProperty('cityfolders', cityfolders, 'lines') out.write("properties cityfolders added\n") # set seminar as calendar type ct = portal.portal_calendar.calendar_types ct.append('Seminar') portal.portal_calendar.calendar_types = ct out.write("Seminar added to portal calendars calendar types\n") # setup default language languageTool = portal.portal_languages.setDefaultLanguage('de') memberdata = portal.portal_memberdata if memberdata.hasProperty('language'): memberdata._updateProperty('language', 'de') else: memberdata._setProperty('language', 'de', 'string') out.write("default language set to de\n") # add second navigation portlettool = portal.portal_utilities to_utf8 = portlettool.to_utf8 ll=['de',] if not hasattr(portal, 'navigation'): portal.manage_addProduct['elevateIT'].addNavigation(id='navigation', localizer_languages=ll) n = portal.navigation n._setPortalTypeName( 'Navigation' ) n.setTitle(to_utf8('Navigation')) portal.portal_workflow.doActionFor(n, 'publish', comment='navigation object should be public now.') out.write("add navigation\n") if not hasattr(portal, 'navigation_standorte'): portal.manage_addProduct['elevateIT'].addNavigation(id='navigation_standorte', localizer_languages=ll) n = portal.navigation_standorte n._setPortalTypeName( 'Navigation' ) n.setTitle(to_utf8('Navigation')) out.write("add navigation_standorte\n") # add action upload projects at = portal.portal_actions na = {"id":"upload_research", "name":"Upload research", "action":"string:${folder_url}/upload_research_form", "condition":"python:'research' in folder.absolute_url(1).split('/')", "permission":"Modify portal content", "category":"objectAdmin", "visible":1} if not na['id'] in [x.id for x in at.listActions()]: at.addAction(na['id'], na['name'], na['action'], na['condition'], na['permission'], na['category'], na['visible']) out.write("Action upload projects added\n") else: out.write("Action upload projects already exists\n") # add catalog indexes ind = ['mandant'] ctool = portal.portal_catalog for i in ind: if i not in ctool.indexes(): ctool.manage_addIndex(i, 'FieldIndex') out.write("Index %s added\n" % i) class Extra: """ Just a dummy to build records for the Lexicon. """ pass zcind = ['projectnumber'] extra = Extra() extra.index_type = 'Okapi BM25 Rank' extra.lexicon_id = 'plone_lexicon' for i in zcind: if i not in ctool.indexes(): extra.doc_attr = '' ctool.addIndex(i, 'ZCTextIndex', extra) return out.getvalue()
def install(self): """ Install this product """ out = [] skinsTool = getToolByName(self, 'portal_skins') # add in the directory view pointing to our skin if layer_name not in skinsTool.objectIds(): createDirectoryView(skinsTool, layer_location, layer_name) out.append('Added "%s" directory view to portal_skins' % layer_name) # add in the layer to all our skins skins = skinsTool.getSkinSelections() for skin in skins: path = skinsTool.getSkinPath(skin) path = [ p.strip() for p in path.split(',') ] if layer_name not in path: if 'custom' in path: pos = path.index('custom') + 1 else: pos = 0 path.insert(pos, layer_name) path = ", ".join(path) skinsTool.addSkinSelection(skin, path) out.append('Added "%s" to "%s" skins' % (layer_name, skin)) else: out.append('Skipping "%s" skin' % skin) try: ctool = getToolByName(self, unique_id) except AttributeError: self.manage_addProduct['Clouseau'].manage_addTool('Clouseau', None) cp = getToolByName(self, "portal_controlpanel") if "Clouseau" not in [ c.id for c in cp._actions ]: cp.registerConfiglet( "Clouseau", "Clouseau", "string:${portal_url}/clouseau_list", category="Products", permission="Manage portal", appId="Clouseau", imageUrl="clouseau.png",) cssreg = getToolByName(self, 'portal_css', None) skins = ["SyntaxHighlighter.css", "clouseau.css"] if cssreg is not None: for skin in skins: stylesheet_ids = cssreg.getResourceIds() if skin not in stylesheet_ids: cssreg.registerStylesheet(skin) out.append("Registered %s" % skin) # add in the clearspell js jsreg = getToolByName(self, 'portal_javascripts', None) scripts = ["clouseau_trigger.js",] if jsreg is not None: for script in scripts: if script not in jsreg.getResourceIds(): jsreg.registerScript(script) out.append('Registered %s' % script) actionsTool = getToolByName(self, 'portal_actions', None) if actionsTool is not None: for action in actionsTool.listActions(): if action.getId() == 'clouseau_view': break # We already have the action else: actionsTool.addAction('clouseau_view', name='Python prompt', action='''python:"javascript:showClouseau('%s');" % '/'.join(object.getPhysicalPath())''', condition='python:portal.clouseau_tool.enabled', permission=ManagePortal, category='document_actions', visible=1, ) out.append("Added 'clouseau_view' action to actions tool.") iconsTool = getToolByName(self, 'portal_actionicons', None) if iconsTool is not None: for icon in iconsTool.listActionIcons(): if icon.getActionId() == 'clouseau_view': break # We already have the icon else: iconsTool.addActionIcon( category='plone', action_id='clouseau_view', icon_expr='clouseau.png', title='Python prompt', ) out.append("Added 'clouseau_view' icon to actionicons tool.") return "\n".join(out)