Ejemplo n.º 1
0
 def available(self):
     """
     Condition on the content types wanted for the gallery viewlet
     (it was first meant only for Organizations), now it is also used for
     folderish content types (collective.folderish)
     """
     context = self.context
     return IOrganization.providedBy(context) or IFolderishType.providedBy(context)
 def available(self):
     return not self.anonymous and IFolderishType.providedBy(self.context)
Ejemplo n.º 3
0
    def _enabled_for_archetypes(self):
        """ Returns True if discussion is enabled for this conversation.

        This method checks five different settings in order to figure out if
        discussion is enable on a specific content object:

        1) Check if discussion is enabled globally in the plone.app.discussion
           registry/control panel.

        2) If the current content object is a folder, always return False,
           since we don't allow comments on a folder. This setting is used to
           allow/ disallow comments for all content objects inside a folder,
           not for the folder itself. This does not apply to IFolderishType
           objects.

        3) Check if the allow_discussion boolean flag on the content object is
           set. If it is set to True or False, return the value. If it set to
           None, try further.

        4) Traverse to a folder with allow_discussion set to either True or
           False. If allow_discussion is not set (None), traverse further until
           we reach the PloneSiteRoot.

        5) Check if discussion is allowed for the content type.
        """
        context = aq_inner(self.context)

        # Fetch discussion registry
        registry = queryUtility(IRegistry)
        settings = registry.forInterface(IDiscussionSettings, check=False)

        # Check if discussion is allowed globally
        if not settings.globally_enabled:
            return False

        # Always return False if object is a folder, except for folderish types
        if (not IFolderishType.providedBy(context)
                and IFolderish.providedBy(context)
                and not INonStructuralFolder.providedBy(context)):
            return False

        def traverse_parents(context):
            # Run through the aq_chain of obj and check if discussion is
            # enabled in a parent folder.
            for obj in aq_chain(context):
                if not IPloneSiteRoot.providedBy(obj):
                    if (IFolderish.providedBy(obj)
                            and not INonStructuralFolder.providedBy(obj)):
                        flag = getattr(obj, 'allow_discussion', None)
                        if flag is not None:
                            return flag
            return None

        # If discussion is disabled for the object, bail out
        obj_flag = getattr(aq_base(context), 'allow_discussion', None)
        if obj_flag is False:
            return False

        # Check if traversal returned a folder with discussion_allowed set
        # to True or False.
        folder_allow_discussion = traverse_parents(context)

        if folder_allow_discussion:
            if not getattr(self, 'allow_discussion', None):
                return True
        else:
            if obj_flag:
                return True

        # Check if discussion is allowed on the content type
        portal_types = getToolByName(self, 'portal_types')
        document_fti = getattr(portal_types, context.portal_type)
        if not document_fti.getProperty('allow_discussion'):
            # If discussion is not allowed on the content type,
            # check if 'allow discussion' is overridden on the content object.
            if not obj_flag:
                return False

        return True
Ejemplo n.º 4
0
 def has_folderish_default(self):
     if not IFolderishType.providedBy(self.context):
         return False
     return isDefaultPage(self.context, self.request)