def updateMenu(site): pu = getToolByName(site, 'plone_utils') pa = getToolByName(site, 'portal_actions') portal_props = getToolByName(site, 'portal_properties') # collect all portal tabs context_state = getMultiAdapter((site, site.REQUEST), name=u'plone_context_state') actions = context_state.actions() portal_tabs_view = getMultiAdapter((site, site.REQUEST), name='portal_tabs_view') portal_tabs = portal_tabs_view.topLevelTabs(actions=actions) # dump to html value = u"" enc = portal_props.site_properties.getProperty('default_charset', 'utf-8') for tab in portal_tabs: value += TAB_HTML_SNIPPET % {'id': toUnicode(tab['id'], enc), 'url': toUnicode(tab['url'], enc), 'desc': toUnicode(tab['description'], enc), 'name': toUnicode(tab['name'], enc)} if not hasattr(portal_props.aq_base, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties') ap = getattr(portal_props.aq_base, PROPERTY_SHEET) safeEditProperty(ap, PROPERTY_FIELD, value, 'text')
def install(self): out=StringIO() portal = getToolByName(self, 'portal_url').getPortalObject() if not hasattr(portal, TOOL_ID): constructTransientObjectContainer(portal, id=TOOL_ID, timeout_mins=60) safeEditProperty(self, 'captcha_key', generateKey(8)) Layers = [] Layers += LAYERS qi = getToolByName(self, 'portal_quickinstaller') mtool = getToolByName(self, 'portal_migration') plone_version = mtool.getFileSystemVersion() if plone_version.startswith('2.1'): plone_version = '2.1.2' elif plone_version.startswith('2.0'): plone_version = '2.0.5' elif plone_version.startswith('2.5'): plone_version = '2.5' else: raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-2.5") DiscussionLayer = LAYER_DISCUSSION if qi.isProductInstalled('qPloneComments'): DiscussionLayer = LAYER_QCOMMENTS if qi.isProductInstalled('PloneFormMailer'): formmailer_layer = LAYER_FORMMAILER+'/'+plone_version Layers.append(formmailer_layer) discussion_layer = DiscussionLayer+'/'+plone_version Layers.append(discussion_layer) out.write('Call setupSkin... \n') setupSkin(self, out, Layers)
def install(self): out=StringIO() portal = getToolByName(self, 'portal_url').getPortalObject() # add captchas_tool install_tool(self, out) safeEditProperty(self, 'captcha_key', generateKey(8)) # add Property sheet to portal_properies pp = getToolByName(self, 'portal_properties') if not 'qPloneCaptchas' in pp.objectIds(): pp.addPropertySheet(id='qPloneCaptchas', title= '%s Properties' % 'qPloneCaptchas') out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' ) props_sheet = pp['qPloneCaptchas'] updateProperties(props_sheet, out, PROPERTIES) Layers = [] Layers += LAYERS Layers.append(LAYER_STATIC_CAPTCHAS) mtool = getToolByName(self, 'portal_migration') plone_version = mtool.getFileSystemVersion() if plone_version.startswith('2.1'): plone_version = '2.1.2' elif plone_version.startswith('2.0'): plone_version = '2.0.5' elif plone_version.startswith('2.5'): plone_version = '2.5' elif plone_version.startswith('3.0'): plone_version = '3.0' elif plone_version.startswith('3.1'): plone_version = '3.1' else: raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3") DiscussionLayer = LAYER_DISCUSSION qi = getToolByName(self, 'portal_quickinstaller') if qi.isProductInstalled('PloneFormMailer'): formmailer_layer = LAYER_FORMMAILER+'/'+ plone_version Layers.append(formmailer_layer) discussion_layer = '/'.join([DiscussionLayer, plone_version]) Layers.append(discussion_layer) join_form_layer = '/'.join([LAYER_JOIN_FORM, plone_version]) Layers.append(join_form_layer) sendto_form_layer = '/'.join([LAYER_SENDTO_FORM, plone_version]) Layers.append(sendto_form_layer) out.write('Call setupSkin... \n') setupSkin(self, out, Layers) # Add Configlet. Delete old version before adding, if exist one. controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(CONFIGLET_ID) controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products', action='string:${portal_url}/%s' % CONFIGLET_ID, appId=PRODUCT_NAME, permission=ManagePortal, imageUrl='group.gif') return out.getvalue()
def updateMenu(self): out = '' pu = getToolByName(self, 'plone_utils') if hasattr(pu, 'createTopLevelTabs'): pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self) tl_tabs = pu.createTopLevelTabs(pactions) for act in tl_tabs: out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">' % \ (act['id'], act['url']) + act['name'] + '</a></li>\n' else: portal = getToolByName(self, 'portal_url').getPortalObject() portal_act = getToolByName(self, 'portal_actions') actions=portal_act._cloneActions() for act in actions: if act.category == 'portal_tabs': out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">%s</a></li>\n' % \ (act.id, \ Expression(act.getActionExpression())(createExprContext(portal, portal, portal)), \ act.title) portal_props = getToolByName(self, 'portal_properties') if not hasattr(portal_props, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties') ap = getattr(portal_props, PROPERTY_SHEET) safeEditProperty(ap, 'menu', out, 'text')
def removeFromTemplates(self, ids): raw_templates = self.getProperty('templates', []) filtered = [] for t in raw_templates: id, path, title = t.split('|') if id not in ids: filtered.append(t) safeEditProperty(self, 'templates', filtered, 'lines')
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 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 addProperty(self, out): """ Add property sheet to portal_properties """ portal_props = getToolByName(self, 'portal_properties') if not hasattr(portal_props, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, 'Maps Properties') out.write('Added %s property sheet...\n' % PROPERTY_SHEET) ap = getattr(portal_props, PROPERTY_SHEET) if not hasattr(ap, PROPERTY_FIELD): safeEditProperty(ap, PROPERTY_FIELD, MAP_API_KEYS, 'lines') out.write('Added %s property field to %s property sheet...\n' % (PROPERTY_FIELD, PROPERTY_SHEET)) else: out.write('Skipped adding property...\n')
def addPropertySheet(self, out): """ Add seo_properties property sheet to portal_properties and some needed field to it """ portal_props = getToolByName(self, 'portal_properties') if not hasattr(portal_props, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, SHEET_TITLE) out.write('Added %s property sheet to portal_properties\n' % PROPERTY_SHEET) else: out.write('Skipped adding %s property sheet to portal_properties\n' % PROPERTY_SHEET) sheet = getattr(portal_props, PROPERTY_SHEET) safeEditProperty(sheet, 'stop_words', STOP_WORDS, 'lines') out.write('Added \'stop_words\' property field to %s property sheet\n' % PROPERTY_SHEET) safeEditProperty(sheet, 'fields', FIELDS, 'lines') out.write('Added \'fields\' property field to %s property sheet\n' % PROPERTY_SHEET)
def addPropertySheet(self, out): """ Add tabs_properties property sheet to portal_properties and some needed field to it """ portal_props = getToolByName(self, 'portal_properties') if not hasattr(portal_props, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, SHEET_TITLE) out.write('Added %s property sheet to portal_properties\n' % PROPERTY_SHEET) else: out.write('Skipped adding %s property sheet to portal_properties\n' % PROPERTY_SHEET) sheet = getattr(portal_props, PROPERTY_SHEET) if not hasattr(sheet, FIELD_NAME): safeEditProperty(sheet, FIELD_NAME, PROPERTY_FIELD, 'lines') out.write('Added %s property field to %s property sheet\n' % (FIELD_NAME, PROPERTY_SHEET)) else: out.write('Skipped adding %s property field to %s property sheet\n' % (FIELD_NAME, PROPERTY_SHEET))
def setTemplate(self, id, title, obj): raw_templates = list(self.getProperty('templates', [])) url = getToolByName(self, 'portal_url').getRelativeContentURL(obj) filtered = [] added = False for t in raw_templates: _id, path, _title = t.split('|') if path == url: filtered.append("%s|%s|%s" % (id, url, title)) added = True elif _id == id: raise "Duplicated tempalte id!" else: filtered.append(t) if not added: filtered.append("%s|%s|%s" % (id, url, title)) safeEditProperty(self, 'templates', filtered, 'lines')
def updateMenu(site): pu = getToolByName(site, 'plone_utils') pa = getToolByName(site, 'portal_actions') portal_props = getToolByName(site, 'portal_properties') # collect all portal tabs context_state = getMultiAdapter((site, site.REQUEST), name=u'plone_context_state') actions = context_state.actions() portal_tabs_view = getMultiAdapter((site, site.REQUEST), name='portal_tabs_view') portal_tabs = portal_tabs_view.topLevelTabs(actions=actions) # dump to html value = '' for tab in portal_tabs: value += '<li id="portaltab-%s" class="plain">\n' % tab['id'] value += ' <a href="%s" accesskey="t" title="%s">%s</a>\n' % (tab['url'], tab['description'], tab['name']) value += '</li>\n' if not hasattr(portal_props.aq_base, PROPERTY_SHEET): portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties') ap = getattr(portal_props.aq_base, PROPERTY_SHEET) safeEditProperty(ap, PROPERTY_FIELD, value, 'text')
def install(self): out = StringIO() installTypes(self, out, listTypes(PROJECTNAME), PROJECTNAME) portal = getToolByName(self, 'portal_url').getPortalObject() if not hasattr(portal, TOOL_ID): portal.invokeFactory(id=TOOL_ID, type_name='PingTool') # Add PortalActions Tool Configlet. Delete old version before adding, if exist one. controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(TOOL_ID) controlpanel_tool.registerConfiglet(id=TOOL_ID, name='Ping Tool', category='Products', action='string:${portal_url}/'+TOOL_ID+'/folder_contents', appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif') # Add 'portal_actionstool' to action provider list, if not yet exist action_tool = getToolByName(portal, 'portal_actions') if TOOL_ID not in action_tool.listActionProviders(): action_tool.addActionProvider(TOOL_ID) install_subskin(self,out,GLOBALS) for site in SITES_LIST: portal.portal_pingtool.invokeFactory(id = site[0], type_name = "PingInfo", title = site[1],url = site[2]) pp = getToolByName(self,'portal_properties') np = getattr(pp,'navtree_properties') meta_types = list(np.getProperty('metaTypesNotToList')) if 'PingTool' not in meta_types: meta_types.append('PingTool') safeEditProperty(np,'metaTypesNotToList', meta_types, 'lines') print >> out, "\nSuccessfully installed %s." % PROJECTNAME return out.getvalue()
def __init__(self): # Properties to be edited by site manager safeEditProperty(self, 'max_chain_length', 1, data_type='int')
def setMaxChainLength(self, max_chain_length): """Set the max workflow chain length""" safeEditProperty(self, 'max_chain_length', max_chain_length, data_type='int')
def changePortalSettings(self, portal): p = portal.portal_properties.site_properties safeEditProperty(p, 'default_language', 'zh', 'string')
def init_portal(self, out): urltool = getToolByName(self, 'portal_url') portal = urltool.getPortalObject() ### CONFIG root properties ### portal.title = PORTAL_TITLE portal.description = PORTAL_DESC portal.validate_email = PORTAL_CHECKMAIL portal.default_charset = PORTAL_CHARSET portal.enable_permalink = PORTAL_FIXLINK safeEditProperty(portal, 'default_page', PORTAL_DEFAULT_VIEW, 'string') ## left_slots # TODO save & restore old slots # old_left_slots = list(portal.left_slots) left_slots = PORTAL_LEFTSLOTS portal._updateProperty('left_slots', left_slots) ## right_slots # TODO save & restore old slots # old_right_slots = list(portal.right_slots) right_slots = PORTAL_RIGHTSLOTS portal._updateProperty('right_slots', right_slots) ### PORTAL PROPERTIES ### props = portal.portal_properties.site_properties # visible_ids boolean true (short name) safeEditProperty(props, 'visible_ids', VISIBLE_IDS, 'boolean') # calendar_starting_year (2006) safeEditProperty(props, 'calendar_starting_year', CALENDAR_START, 'int') # allowRolesToAddKeywords lines Member addLinesToProperty(props, 'allowRolesToAddKeywords', 'Member') ## portal_properties/navtree_properties navprops = portal.portal_properties.navtree_properties navprops.manage_changeProperties(enable_wf_state_filtering=True, wf_states_to_show=['published', 'open'], topLevel=1, bottomLevel=4) addLinesToProperty(navprops, 'metaTypesNotToList', TYPESNOTTOLIST) ### PORTAL MEMBERSHIP ### membership = portal.portal_membership membership.setMemberAreaType('Weblog') type_tool = portal.portal_types member_folder = membership.getMembersFolder() mtype = member_folder.getPortalTypeName() cur_id = member_folder.getId() if cur_id != MEMBERS_FOLDER_ID: # hack to rename type_tool[mtype].global_allow = True #member_folder.manage_renameObjects(MEMBERS_FOLDER_ID, id=MEMBERS_FOLDER_ID, text=MEMBERS_FOLDER_DESC) # portal.manage_renameObjects([cur_id], [MEMBERS_FOLDER_ID]) type_tool[mtype].global_allow = False member_folder.setTitle(MEMBERS_FOLDER_ID) member_folder.setDescription(MEMBERS_FOLDER_DESC) # membership.setMembersFolderById(MEMBERS_FOLDER_ID) # delete default index_html if 'index_html' in member_folder.objectIds(): member_folder.manage_delObjects('index_html') member_folder.reindexObject() # change default view safeEditProperty(member_folder, 'default_page', MEMBER_DEFAULT_VIEW, 'string') # Set member Manage Portal permission on user home member_folder.manage_permission(ManagePortal, ['Manager', 'Owner'], acquire=False) member_folder.manage_permission(AddWeblogPerm, ['Manager'], acquire=False) #member_folder.manage_permission(AddContentPanelsPerm, ['Manager'], acquire=False) member_folder.manage_permission(AddGroupSpacePerm, ['Manager'], acquire=False) # set member folder slots safeEditProperty(member_folder, 'left_slots', ROOT_MEMBER_LEFTSLOTS, 'lines') safeEditProperty(member_folder, 'right_slots', ROOT_MEMBER_RIGHTSLOTS, 'lines') ### ADD USER GROUPS gtool = portal.portal_groups existing = gtool.listGroupIds() for grp in USERGROUPS: if grp[0] not in existing: gtool.addGroup(grp[0], roles=grp[1]) out.write("Added %s group to portal_groups with %s role.\n" % (grp[0], grp[1])) ### MISC settings # GrufSpaces - enable use_groupspace_areas portal.portal_properties.grufspaces_properties.use_groupspace_areas = 1 # close site - Disable Add portal member portal.manage_permission(AddPortalMember, ['Manager'], acquire=False) # Enable Reply to Item portal.manage_permission(ReplyToItem, ['Anonymous', 'Authenticated'], acquire=True) # KUPU enable linkbyuid kupuTool = getToolByName(self, 'kupu_library_tool') kupuTool.linkbyuid = True
def addMemberData(portal, out): """Add the must_change_password property to member data""" mt = safeGetMemberDataTool(portal) if mt is not None: safeEditProperty(mt, 'must_change_password', 0, 'boolean') out.append('Added must_change_password property to member data')