Beispiel #1
0
    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 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
Beispiel #3
0
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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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)
Beispiel #7
0
 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)
Beispiel #8
0
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