Some more design notes/sketchings. Nothing that works yet.
svn path=/plone.app.discussion/trunk/; revision=26918
This commit is contained in:
@@ -6,57 +6,6 @@ from zope.i18nmessageid import MessageFactory
|
||||
|
||||
_ = MessageFactory('plone.app.discussion')
|
||||
|
||||
class IReplies(IIterableMapping, IWriteMapping):
|
||||
"""A set of related comments
|
||||
|
||||
This acts as a mapping (dict) with string keys and values being other
|
||||
discussion items in reply to this discussion item.
|
||||
"""
|
||||
|
||||
class IHasReplies(Interface):
|
||||
"""Common interface for objects that have replies.
|
||||
"""
|
||||
|
||||
replies = schema.Object(title=_(u"Replies"), schema=IReplies)
|
||||
|
||||
class IComment(IHasReplies):
|
||||
"""A comment
|
||||
"""
|
||||
|
||||
portal_type = schema.ASCIILine(title=_(u"Portal type"), default="Discussion Item")
|
||||
|
||||
__parent__ = schema.Object(title=_(u"In reply to"), description=_(u"Another comment or a content item"), schema=Interface)
|
||||
__name__ = schema.TextLine(title=_(u"Name"))
|
||||
|
||||
ancestor = schema.Object(title=_(u"The original content object the comment is for"), schema=Interface)
|
||||
|
||||
title = schema.TextLine(title=_(u"Subject"))
|
||||
|
||||
mime_type = schema.ASCIILine(title=_(u"MIME type"), default="text/plain")
|
||||
text = schema.Text(title=_(u"Comment text"))
|
||||
|
||||
creator = schema.TextLine(title=_(u"Author name (for display)"))
|
||||
creation_date = schema.Date(title=_(u"Creation date"))
|
||||
modification_date = schema.Date(title=_(u"Modification date"))
|
||||
|
||||
# for logged in comments - set to None for anonymous
|
||||
author_username = schema.TextLine(title=_(u"Author username"), required=False)
|
||||
|
||||
# for anonymous comments only, set to None for logged in comments
|
||||
author_name = schema.TextLine(title=_(u"Author name"), required=False)
|
||||
author_email = schema.TextLine(title=_(u"Author email address"), required=False)
|
||||
|
||||
class IDiscussable(IHasReplies):
|
||||
"""Adapt a content item to this interface to determine whether discussions
|
||||
are currently enabled, and obtain a list of comments.
|
||||
"""
|
||||
|
||||
enabled = schema.Bool(title=_(u"Is commenting enabled?"))
|
||||
|
||||
total_comments = schema.Int(title=_(u"Total number of comments on this item"), min=0, readonly=True)
|
||||
last_comment_date = schema.Date(title=_(u"Date of the most recent comment"), readonly=True)
|
||||
commentators = schema.Set(title=_(u"The set of unique commentators (usernames)"), readonly=True)
|
||||
|
||||
class IDiscussionSettings(Interface):
|
||||
"""Global discussion settings. This describes records stored in the
|
||||
configuration registry and obtainable via plone.registry.
|
||||
@@ -65,4 +14,100 @@ class IDiscussionSettings(Interface):
|
||||
globally_enabled = schema.Bool(title=_(u"Globally enabled"),
|
||||
description=_(u"Use this setting to enable or disable comments globally"),
|
||||
default=True)
|
||||
|
||||
index_comments = schema.Bool(title=_(u"Index comments"),
|
||||
description=_(u"Enable this option to ensure that comments are searchable. "
|
||||
"Turning this off may improve performance for sites with large "
|
||||
"volumes of comments that do not wish to make them searcahble using "
|
||||
"the standard search tools."),
|
||||
default=True)
|
||||
|
||||
class IConversation(IIterableMapping, IWriteMapping):
|
||||
"""A conversation about a content object.
|
||||
|
||||
This is a persistent object in its own right and manages all comments.
|
||||
|
||||
The dict interface allows access to all comments. They are stored by
|
||||
integer key, in the order they were added.
|
||||
|
||||
To get replies at the top level, adapt the conversation to IReplies.
|
||||
|
||||
The conversation can be traversed to via the ++comments++ namespace.
|
||||
For example, path/to/object/++comments++/123 retrieves comment 123.
|
||||
|
||||
The __parent__ of the conversation (and the acquisition parent during
|
||||
traversal) is the content object. The conversation is the __parent__
|
||||
(and acquisition parent) for all comments, regardless of threading.
|
||||
"""
|
||||
|
||||
enabled = schema.Bool(title=_(u"Is commenting enabled?"))
|
||||
|
||||
total_comments = schema.Int(title=_(u"Total number of comments on this item"), min=0, readonly=True)
|
||||
last_comment_date = schema.Date(title=_(u"Date of the most recent comment"), readonly=True)
|
||||
commentators = schema.Set(title=_(u"The set of unique commentators (usernames)"), readonly=True)
|
||||
|
||||
def getComments(start=0, size=None):
|
||||
"""Return a batch of comment objects for rendering. The 'start'
|
||||
parameter is the id of the comment from which to start the batch.
|
||||
The 'size' parameter is the number of comments to return in the
|
||||
batch.
|
||||
|
||||
The comments are returned in creation date order, in the exact batche
|
||||
size specified.
|
||||
"""
|
||||
|
||||
def getThreads(start=0, size=None, root=None, depth=None):
|
||||
"""Return a batch of comment objects for rendering. The 'start'
|
||||
parameter is the id of the comment from which to start the batch.
|
||||
The 'size' parameter is the number of comments to return in the
|
||||
batch. 'root', if given, is the id of the comment to which reply
|
||||
threads will be found. If not given, all threads are returned.
|
||||
If 'depth' is given, it can be used to limit the depth of threads
|
||||
returned. For example, depth=1 will return only direct replies.
|
||||
|
||||
Comments are returned as a recursive list of '(comment, children)',
|
||||
where 'children' is a similar list of (comment, children), or an empty
|
||||
list of a comment has no direct replies.
|
||||
|
||||
The returned number of comments may be bigger than the batch size,
|
||||
in order to give enough context to show the full lineage of the
|
||||
starting comment.
|
||||
"""
|
||||
|
||||
class IReplies(IIterableMapping, IWriteMapping):
|
||||
"""A set of related comments in reply to a given content object or
|
||||
another comment.
|
||||
|
||||
Adapt a conversation or another comment to this interface to obtain the
|
||||
direct replies.
|
||||
"""
|
||||
|
||||
class IComment(Interface):
|
||||
"""A comment.
|
||||
|
||||
Comments are indexed in the catalog and subject to workflow and security.
|
||||
"""
|
||||
|
||||
portal_type = schema.ASCIILine(title=_(u"Portal type"), default="Discussion Item")
|
||||
|
||||
__parent__ = schema.Object(title=_(u"Conversation"), schema=Interface)
|
||||
__name__ = schema.TextLine(title=_(u"Name"))
|
||||
|
||||
comment_id = schema.Int(title=_(u"A comment id unique to this conversation"))
|
||||
in_reply_to = schema.Int(title=_(u"Id of comment this comment is in reply to"), required=False)
|
||||
|
||||
title = schema.TextLine(title=_(u"Subject"))
|
||||
|
||||
mime_type = schema.ASCIILine(title=_(u"MIME type"), default="text/plain")
|
||||
text = schema.Text(title=_(u"Comment text"))
|
||||
|
||||
creator = schema.TextLine(title=_(u"Author name (for display)"))
|
||||
creation_date = schema.Date(title=_(u"Creation date"))
|
||||
modification_date = schema.Date(title=_(u"Modification date"))
|
||||
|
||||
# for logged in comments - set to None for anonymous
|
||||
author_username = schema.TextLine(title=_(u"Author username"), required=False)
|
||||
|
||||
# for anonymous comments only, set to None for logged in comments
|
||||
author_name = schema.TextLine(title=_(u"Author name"), required=False)
|
||||
author_email = schema.TextLine(title=_(u"Author email address"), required=False)
|
||||
|
||||
Reference in New Issue
Block a user