<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
    xmlns:i18n="http://namespaces.zope.org/i18n"
    xmlns:monkey="http://namespaces.plone.org/monkey"
    xmlns:zcml="http://namespaces.zope.org/zcml"
    xmlns:five="http://namespaces.zope.org/five"
    i18n_domain="plone.app.discussion">

    <five:registerPackage package="." />

    <include package="plone.indexer" />
    <include package="plone.app.registry" />
    <include package="plone.uuid" />
    <include package="plone.app.uuid" />

    <include file="permissions.zcml" />
    <include file="notifications.zcml" />
    <include file="subscribers.zcml" />
    <include file="upgrades.zcml" />
    <include package=".browser" />

    <i18n:registerTranslations directory="locales" />

    <!-- Register the installation GenericSetup extension profile -->
    <genericsetup:registerProfile
        name="default"
        title="Plone Discussions"
        description="Commenting infrastructure for Plone"
        directory="profiles/default"
        provides="Products.GenericSetup.interfaces.EXTENSION"
        for="Products.CMFPlone.interfaces.IPloneSiteRoot"
        />

    <!-- Monkey Patches -->

    <include package="collective.monkeypatcher" />

    <monkey:patch
        description="This allows Catalog Tool to find comments
                     during clear-and-rebuild catalog"
        class="Products.CMFPlone.CatalogTool.CatalogTool"
        original="clearFindAndRebuild"
        replacement=".patches.patchedClearFindAndRebuild"
        />

    <!-- Comments -->

    <class class=".comment.Comment">
        <require interface=".interfaces.IComment" permission="zope2.View" />
        <require attributes="Title Creator getId getText" permission="zope2.View" />
    </class>

    <class class=".comment.Comment">
        <implements interface="plone.uuid.interfaces.IAttributeUUID" />
    </class>

    <utility
        component=".comment.CommentFactory"
        name="plone.Comment"
        />

    <!-- Conversations -->

    <class class=".conversation.Conversation">
        <require interface=".interfaces.IConversation" permission="zope2.View" />
    </class>

    <adapter factory=".conversation.conversationAdapterFactory" />

    <adapter factory=".conversation.ConversationReplies" />
    <adapter factory=".conversation.CommentReplies" />

    <!-- Captcha Vocabulary -->
    <utility component=".vocabularies.captcha_vocabulary"
             name="plone.app.discussion.vocabularies.CaptchaVocabulary"
             provides="zope.schema.interfaces.IVocabularyFactory" />

    <!-- Text Transform Vocabulary -->
    <utility component=".vocabularies.text_transform_vocabulary"
             name="plone.app.discussion.vocabularies.TextTransformVocabulary"
             provides="zope.schema.interfaces.IVocabularyFactory" />

    <configure zcml:condition="installed plone.formwidget.captcha">
      <include package="plone.formwidget.captcha" />
    </configure>

    <configure zcml:condition="installed plone.formwidget.recaptcha">
      <include package="plone.formwidget.recaptcha" />
    </configure>

    <!-- Conversation indexes -->
    <adapter name="total_comments" factory=".catalog.total_comments" />
    <adapter name="last_comment_date" factory=".catalog.last_comment_date" />
    <adapter name="commentators" factory=".catalog.commentators" />
    <adapter name="in_response_to" factory=".catalog.in_response_to" />

    <!-- Comment indexes -->
    <adapter name="UID" factory=".catalog.UID" />
    <adapter name="Title" factory=".catalog.title" />
    <adapter name="Creator" factory=".catalog.creator" />
    <adapter name="Description" factory=".catalog.description" />
    <adapter name="SearchableText" factory=".catalog.searchable_text" />
    <adapter name="effective" factory=".catalog.effective" />
    <adapter name="created" factory=".catalog.created" />
    <adapter name="modified" factory=".catalog.modified" />
    <adapter name="total_comments" factory=".catalog.comments_total_comments" />
    <adapter name="last_comment_date" factory=".catalog.comments_last_comment_date" />
    <adapter name="commentators" factory=".catalog.comments_commentators" />

</configure>
