def getDefaultPage(self, obj, request=None): """Given a folderish item, find out if it has a default-page using the following lookup rules: 1. A content object called 'index_html' wins 2. If the folder implements IBrowserDefault, query this 3. Else, look up the property default_page on the object - Note that in this case, the returned id may *not* be of an object in the folder, since it could be acquired from a parent folder or skin layer 4. Else, look up the property default_page in site_properties for magic ids and test these The id of the first matching item is then used to lookup a translation and if found, its id is returned. If no default page is set, None is returned. If a non-folderish item is passed in, return None always. """ if request is None: if hasattr(self, 'REQUEST'): request = self.REQUEST if request: return utils.getDefaultPage(obj, request) else: # In case its executed from an event that does not have request return None
def renameObjectsByPaths(self, paths, new_ids, new_titles, handle_errors=True, REQUEST=None): """ CMFPlone override """ smanager = getSecurityManager() obj = self if not smanager.checkPermission('Delete objects', obj) and not \ smanager.checkPermission('Copy or Move', obj): return Unauthorized("You may not modify this object") failure = {} success = {} # use the portal for traversal in case we have relative paths portal = getToolByName(self, 'portal_url').getPortalObject() traverse = portal.restrictedTraverse for i, path in enumerate(paths): new_id = new_ids[i] new_title = new_titles[i] if handle_errors: sp = transaction.savepoint(optimistic=True) try: obj = traverse(path, None) obid = obj.getId() title = obj.Title() change_title = new_title and title != new_title changed = False if change_title: getSecurityManager().validate(obj, obj, 'setTitle', obj.setTitle) obj.setTitle(new_title) notify(ObjectModifiedEvent(obj)) changed = True if new_id and obid != new_id: parent = aq_parent(aq_inner(obj)) # Don't forget default page. if hasattr(parent, 'getDefaultPage'): default_page = getDefaultPage(parent, request=REQUEST) if default_page == obid: parent.setDefaultPage(new_id) parent.manage_renameObjects((obid,), (new_id,)) changed = True elif change_title: # the rename will have already triggered a reindex obj.reindexObject() if changed: success[path] = (new_id, new_title) except ConflictError: raise except Exception, e: if handle_errors: # skip this object but continue with sub-objects. sp.rollback() failure[path] = e else: raise
def is_subsection(self, context, view): # if isDefaultPage(context): # if ISectionIntro.providedBy(context) or ISectionIntro.providedBy(view): return False while not INavigationRoot.providedBy(context): context = aq_parent(context) if ISectionIntro.providedBy(context): return True default_page = getDefaultPage(context, self.request) if default_page and ISectionIntro.providedBy( getattr(context, default_page)): return True return False
def render(self): cat = getToolByName(self.context, 'portal_catalog') query = dict(portal_type='Folder', Language='all') res = cat(query) cnt = 0 log.info('Total no. of folders found: {0}'.format(len(res))) for r in res: try: obj = r.getObject() except: log.warn("Stale catalog entry for {0}".format(r.getPath())) continue if obj.Description() == '': default_page = getDefaultPage(obj, self.request) if default_page: obj.setDescription(getattr(obj, default_page).Description()) obj.reindexObject() cnt += 1 if cnt % 10 == 0: log.info("Handled {0} folders".format(cnt)) return "Finished settings descriptions, handled a total of {0}".format(cnt)
def render(self): cat = getToolByName(self.context, 'portal_catalog') query = dict(portal_type='Folder', Language='all') res = cat(query) cnt = 0 log.info('Total no. of folders found: {0}'.format(len(res))) for r in res: try: obj = r.getObject() except: log.warn("Stale catalog entry for {0}".format(r.getPath())) continue if obj.Description() == '': default_page = getDefaultPage(obj, self.request) if default_page: obj.setDescription( getattr(obj, default_page).Description()) obj.reindexObject() cnt += 1 if cnt % 10 == 0: log.info("Handled {0} folders".format(cnt)) return "Finished settings descriptions, handled a total of {0}".format( cnt)
def renameObjectsByPaths(self, paths, new_ids, new_titles, handle_errors=True, REQUEST=None): """ CMFPlone override """ smanager = getSecurityManager() obj = self if not smanager.checkPermission('Delete objects', obj) and not \ smanager.checkPermission('Copy or Move', obj): return Unauthorized("You may not modify this object") failure = {} success = {} # use the portal for traversal in case we have relative paths portal = getToolByName(self, 'portal_url').getPortalObject() traverse = portal.restrictedTraverse for i, path in enumerate(paths): new_id = new_ids[i] new_title = new_titles[i] if handle_errors: sp = transaction.savepoint(optimistic=True) try: obj = traverse(path, None) obid = obj.getId() title = obj.Title() change_title = new_title and title != new_title changed = False if change_title: getSecurityManager().validate(obj, obj, 'setTitle', obj.setTitle) obj.setTitle(new_title) notify(ObjectModifiedEvent(obj)) changed = True if new_id and obid != new_id: parent = aq_parent(aq_inner(obj)) # Don't forget default page. if hasattr(parent, 'getDefaultPage'): default_page = getDefaultPage(parent, request=REQUEST) if default_page == obid: parent.setDefaultPage(new_id) parent.manage_renameObjects((obid, ), (new_id, )) changed = True elif change_title: # the rename will have already triggered a reindex obj.reindexObject() if changed: success[path] = (new_id, new_title) except ConflictError: raise except Exception, e: if handle_errors: # skip this object but continue with sub-objects. sp.rollback() failure[path] = e else: raise