[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/ Stub implementation of discussion views.

Charlie Clark cvs-admin at zope.org
Thu Sep 6 16:56:53 UTC 2012


Log message for revision 127757:
  Stub implementation of discussion views.

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/TODO.rst
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/__init__.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/configure.zcml
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/discussion.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/talkback.pt
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/__init__.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/discussion.txt
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/test_discussion.py
  A   Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/threads.pt
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/widgets/TODO.rst

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml	2012-09-06 13:44:15 UTC (rev 127756)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml	2012-09-06 16:56:48 UTC (rev 127757)
@@ -6,6 +6,8 @@
 
   <include package=".content"/>
 
+  <include package=".discussion"/>
+
   <include package=".membership"/>
 
   <include package=".search"/>

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/TODO.rst
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/TODO.rst	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/TODO.rst	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,9 @@
+Converting skins to views
+=========================
+
+Discussions
+
+- [?] viewThreadsAtBottom.pt (structure)
+- [?] talkback_tree.pt (macros)
+- [?] setup_talkback_tree.py
+- [?] discitem_delete.py


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/__init__.py
___________________________________________________________________
Added: svn:eol-style
   + native

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/configure.zcml	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/configure.zcml	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,22 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+
+  <browser:page
+      for="Products.CMFCore.interfaces.IContentish"
+      layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+      name="discuss.html"
+      class=".discussion.Discuss"
+      permission="cmf.ModifyPortalContent"
+      />
+
+
+  <!--<browser:page-->
+      <!--for="Products.CMFCore.interfaces.IPortalContent"-->
+      <!--layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"-->
+      <!--name="delete_discussion.html"-->
+      <!--class=".discussion.Delete"-->
+      <!--permission="cmf.ModifyPortalContent"-->
+      <!--/>-->
+
+</configure>
\ No newline at end of file

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/discussion.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/discussion.py	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/discussion.py	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,112 @@
+from zope.component import getUtility
+from zope.interface import Interface
+from zope.formlib import form
+from zope.schema import TextLine, Text
+
+from Products.CMFCore.interfaces import IDiscussionTool
+from Products.CMFDefault.formlib.form import EditFormBase
+from Products.CMFDefault.utils import Message as _
+from Products.PythonScripts.standard import structured_text
+from Products.CMFDefault.utils import html_marshal
+from Products.CMFDefault.browser.utils import decode, memoize
+
+
+class IDiscussion(Interface):
+
+
+    title = TextLine(
+        title=_("Title")
+    )
+
+    text = Text(
+        title=_("Text")
+    )
+
+
+class Discuss(EditFormBase):
+    """
+    Discuss an item
+    """
+
+    form_fields = form.FormFields(IDiscussion)
+    actions = form.Actions(
+        form.Action(
+            name="add",
+            label=_("Add"),
+            success="handle_add"
+            ),
+        form.Action(
+            name="edit",
+            label=_("Edit"),
+            success="handle_edit",
+            ),
+        form.Action(
+            name="preview",
+            label=_("Preview"),
+            success="handle_preview",
+            )
+    )
+
+    @property
+    @memoize
+    def atool(self):
+        return getUtility(IActionsTool)
+
+    #form = context.REQUEST.form
+    #is_preview = False
+    #if add and \
+            #context.validateHTML(**form) and \
+            #context.discussion_reply(**form):
+        #return
+    #elif preview and \
+            #context.validateHTML(**form):
+        #is_preview = True
+
+
+    #options = {}
+
+    #title = form.get('title', context.Title())
+    #text = form.get('text', '')
+    #options['is_preview'] = is_preview
+    #options['title'] = title
+    #options['text'] = text
+    #options['cooked_text'] = structured_text(text)
+
+    #if is_preview:
+        #hidden_vars = [ {'name': n, 'value': v}
+                        #for n, v in html_marshal(title=title, text=text) ]
+    #else:
+        #hidden_vars = []
+    #buttons = []
+    #target = atool.getActionInfo('object/reply', context)['url']
+    #buttons.append( {'name': 'add', 'value': _(u'Add')} )
+    #if is_preview:
+        #buttons.append( {'name': 'edit', 'value': _(u'Edit')} )
+    #else:
+        #buttons.append( {'name': 'preview', 'value': _(u'Preview')} )
+    #options['form'] = { 'action': target,
+                        #'listHiddenVarInfos': tuple(hidden_vars),
+                        #'listButtonInfos': tuple(buttons) }
+
+    #return context.discussion_reply_template(**decode(options, script))
+
+
+
+class Delete(EditFormBase):
+    """
+    Delete an item from a discussion
+    """
+
+    @property
+    @memoize
+    def dtool(self):
+        return getUtility(IDiscussionTool)
+
+    def __call__(self):
+        parent = self.context.inReplyTo()
+        talkback = self.dtool.getDiscussionFor(parent)
+        talkback.deleteReply(self.context.getId())
+
+    def setRedirect(self):
+        self.context.setStatus(True, _(u'Reply deleted.'))
+        self.context.setRedirect(parent, 'object/view')


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/discussion.py
___________________________________________________________________
Added: svn:eol-style
   + native

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/talkback.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/talkback.pt	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/talkback.pt	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,39 @@
+<html>
+<body>
+
+<table cellspacing="0" border="0" metal:define-macro="tree">
+ <tr tal:repeat="item python: context.setup_talkback_tree(context)">
+  <td colspan="1"
+     tal:condition="item/tree_indent"
+     tal:attributes="colspan item/tree_indent"></td>
+  <td width="16">
+   <a href="#" name=""
+      tal:condition="item/tree_url"
+      tal:attributes="name item/tree_id;
+                      href item/tree_url"
+      tal:content="structure item/tree_icon"><img src="/p_/pl"/></a>
+  </td>
+  <td colspan="1" tal:attributes="colspan item/tree_colspan">
+   <a href="" tal:attributes="href item/url"
+   ><img border="0" src="" tal:attributes="src item/icon" /></a>
+   <a href="" tal:attributes="href item/url"
+      tal:content="item/title">Title</a>,
+   by <tal:case tal:condition="item/creators"
+   ><tal:loop tal:repeat="creator item/creators"
+    ><tal:case tal:condition="not: repeat/creator/start"
+     ><tal:case tal:condition="not: repeat/creator/end">, </tal:case
+     ><tal:case tal:condition="repeat/creator/end"
+      > <tal:span i18n:translate="">and</tal:span> </tal:case></tal:case
+    ><tal:span tal:content="creator">creator</tal:span></tal:loop></tal:case
+  ><tal:case tal:condition="not: item/creators"
+   ><tal:span i18n:translate="">unknown</tal:span></tal:case>
+   on <tal:span tal:content="item/date">Today</tal:span
+  ><tal:case tal:condition="item/delete_url"> [
+   <a href="#" tal:attributes="href item/delete_url"
+        i18n:translate="">delete reply</a> ]</tal:case>
+  </td>
+ </tr>
+</table>
+
+</body>
+</html>


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/__init__.py
___________________________________________________________________
Added: svn:eol-style
   + native

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/discussion.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/discussion.txt	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/discussion.txt	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,34 @@
+Discussion Views
+----------------
+
+Set up site
+
+    >>> from zope.component.hooks import setSite
+    >>> setSite(app.site)
+
+Add an object
+
+    >>> from Products.CMFDefault.Document import Document
+    >>> obj_id = app.site._setObject('myDocument', Document('myDocument'))
+    >>> obj = app.site[obj_id]
+    >>> obj.portal_type = 'Document'
+    >>> obj.setTitle('TITLE')
+    >>> obj.setDescription('DESCRIPTION')
+
+    >>> uf = app.site.acl_users
+    >>> _ignored = uf._doAddUser('mgr', 'mgrpw', ['Manager'], [])
+
+Create the browser object we'll be using.
+
+    >>> from Testing.testbrowser import Browser
+    >>> browser = Browser()
+    >>> browser.handleErrors = False
+    >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+
+Enable discussion for the object
+
+    >>> from zope.component import getUtility
+    >>> from Products.CMFCore.interfaces import IDiscussionTool
+    >>> dtool = getUtility(IDiscussionTool)
+    >>> dtool.isDiscussionAllowedFor(obj)
+    False

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/test_discussion.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/test_discussion.py	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/test_discussion.py	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,28 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Test Products.CMFDefault.browser.rss
+"""
+
+import unittest
+from Testing import ZopeTestCase
+
+from Products.CMFDefault.testing import FunctionalLayer
+
+
+ftest_suite = ZopeTestCase.FunctionalDocFileSuite('discussion.txt')
+ftest_suite.layer = FunctionalLayer
+
+def test_suite():
+    return unittest.TestSuite((
+        ftest_suite,
+    ))


Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/tests/test_discussion.py
___________________________________________________________________
Added: svn:eol-style
   + native

Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/threads.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/threads.pt	                        (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/discussion/threads.pt	2012-09-06 16:56:48 UTC (rev 127757)
@@ -0,0 +1,6 @@
+<div tal:condition="context/talkback|nothing" i18n:domain="cmf_default">
+ <div tal:condition="python: context.talkback.hasReplies(context)">
+  <h4 i18n:translate="">Comments:</h4>
+  <metal:macro metal:use-macro="context/talkback_tree/macros/tree" />
+ </div>
+</div>

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/widgets/TODO.rst
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/widgets/TODO.rst	2012-09-06 13:44:15 UTC (rev 127756)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/widgets/TODO.rst	2012-09-06 16:56:48 UTC (rev 127757)
@@ -17,8 +17,3 @@
 --------------------------------
 - [x] getBaseTag.pt (structure) -> content_macros.pt
 - [x] content_byline.pt (macros) -> content_macros.pt
-
-- [?] viewThreadsAtBottom.pt (structure)
-- [?] talkback_tree.pt (macros)
-- [?] setup_talkback_tree.py
-- [?] discitem_delete.py



More information about the checkins mailing list