add moderate-comments view.
svn path=/plone.app.discussion/trunk/; revision=27369
This commit is contained in:
parent
c1696a9756
commit
1e71258a0d
@ -8,6 +8,15 @@
|
||||
<!-- Traversal adapter -->
|
||||
<adapter factory=".traversal.ConversationNamespace" name="conversation" />
|
||||
|
||||
<!-- Moderation view -->
|
||||
<browser:page
|
||||
for="Products.CMFCore.interfaces.ISiteRoot"
|
||||
name="moderate-comments"
|
||||
layer="..interfaces.IDiscussionLayer"
|
||||
class=".moderation.View"
|
||||
permission="cmf.ManagePortal"
|
||||
/>
|
||||
|
||||
<!-- Comments viewlet -->
|
||||
<browser:viewlet
|
||||
name="plone.comments"
|
||||
|
125
plone/app/discussion/browser/moderation.pt
Normal file
125
plone/app/discussion/browser/moderation.pt
Normal file
@ -0,0 +1,125 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
|
||||
xmlns:tal="http://xml.zope.org/namespaces/tal"
|
||||
xmlns:metal="http://xml.zope.org/namespaces/metal"
|
||||
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
|
||||
lang="en"
|
||||
metal:use-macro="context/main_template/macros/master"
|
||||
i18n:domain="collective.discussionplus">
|
||||
<body>
|
||||
|
||||
<metal:scripts fill-slot="javascript_head_slot">
|
||||
<script type="text/javascript">
|
||||
(function($) {$().ready(function() {
|
||||
$('form.background-form').submit(function(e) {
|
||||
e.preventDefault();
|
||||
var target = $(this).attr('action');
|
||||
var params = $(this).serialize();
|
||||
var cell = $(this).parent().get(0);
|
||||
var row = $(cell).parent().get(0);
|
||||
$.post(target, params, function(data) {
|
||||
$(row).fadeOut("normal", function() {
|
||||
$(this).remove();
|
||||
if($('#review-comments tbody tr').length == 0) {
|
||||
$('#comments-help').fadeOut();
|
||||
$('#review-comments').fadeOut("normal", function() {
|
||||
$('#no-comments-message').fadeIn();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});})(jQuery);
|
||||
</script>
|
||||
</metal:scripts>
|
||||
|
||||
<metal:main fill-slot="main">
|
||||
<tal:main-macro metal:define-macro="main"
|
||||
tal:define="items view/comments_pending_review">
|
||||
|
||||
<h1 class="documentFirstHeading" i18n:translate="title_review">
|
||||
Review comments
|
||||
</h1>
|
||||
|
||||
<p id="no-comments-message" i18n:translate="message_nothing_to_review"
|
||||
tal:attributes="style python:len(items) > 0 and 'display: none' or None">
|
||||
No comments to review. To look for more comments,
|
||||
<a i18n:name="refresh-link" i18n:translate="message_click_to_refresh"
|
||||
tal:attributes="href context/@@plone_context_state/current_page_url">
|
||||
click here to refresh.
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p id="comments-help" tal:condition="items" class="discreet" i18n:translate="description_review">
|
||||
Comments for review are listed below. For each one, click
|
||||
<em>Delete</em> to remove the comment or <em>Publish</em> to
|
||||
publish it. Note that at most <span i18n:name="limit" tal:content="view/limit" />
|
||||
comments will be shown at a time. If there are further comments,
|
||||
you will be able to see them once you have published or deleted
|
||||
the first batch.
|
||||
</p>
|
||||
|
||||
<table id="review-comments" class="listing nosort" style="width: 100%" tal:condition="items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th i18n:translate="heading_author">Author</th>
|
||||
<th i18n:translate="heading_date">Date</th>
|
||||
<th i18n:translate="heading_context">Context</th>
|
||||
<th i18n:translate="heading_subject">Subject</th>
|
||||
<th i18n:translate="heading_comment">Comment</th>
|
||||
<th i18n:translate="heading_action">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tal:block repeat="item items">
|
||||
<tr style="vertical-align: top" class="commentrow">
|
||||
|
||||
<td tal:content="item/Creator" />
|
||||
<td tal:content="python:view.format_time(item.ModificationDate)" />
|
||||
<td>
|
||||
<!--<a tal:attributes="href item/getURL"
|
||||
tal:content="item/comment_subject" />-->
|
||||
</td>
|
||||
<td>
|
||||
<a tal:attributes="href item/getURL"
|
||||
tal:content="item/Title" />
|
||||
</td>
|
||||
|
||||
<td tal:content="structure python:view.cook(item.Description)" />
|
||||
<td style="width: 11em">
|
||||
<form action=""
|
||||
class="background-form"
|
||||
method="post"
|
||||
style="display: inline"
|
||||
tal:attributes="action string:${item/getURL}/@@review-publish-comment">
|
||||
<input type="hidden" name="comment_id" tal:attributes="value item/getId" />
|
||||
<input type="hidden" name="action" tal:attributes="value view/transition" />
|
||||
<input class="context comment-publish-button"
|
||||
type="submit"
|
||||
value="Publish"
|
||||
i18n:attributes="value label_publish"
|
||||
/>
|
||||
</form>
|
||||
<form action=""
|
||||
method="post"
|
||||
class="background-form"
|
||||
style="display: inline"
|
||||
tal:attributes="action string:${item/getURL}/@@review-delete-comment">
|
||||
<input type="hidden" name="comment_id" tal:attributes="value item/getId" />
|
||||
<input class="destructive comment-delete-button"
|
||||
type="submit"
|
||||
value="Delete"
|
||||
i18n:attributes="value label_delete;"
|
||||
/>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</tal:block>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</tal:main-macro>
|
||||
</metal:main>
|
||||
|
||||
</body>
|
||||
</html>
|
40
plone/app/discussion/browser/moderation.py
Normal file
40
plone/app/discussion/browser/moderation.py
Normal file
@ -0,0 +1,40 @@
|
||||
from Acquisition import aq_inner, aq_parent
|
||||
|
||||
from Products.Five.browser import BrowserView
|
||||
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
from Products.CMFCore.utils import getToolByName
|
||||
|
||||
class View(BrowserView):
|
||||
"""
|
||||
"""
|
||||
|
||||
template = ViewPageTemplateFile('moderation.pt')
|
||||
|
||||
def __call__(self):
|
||||
return self.template()
|
||||
|
||||
def cook(self, text):
|
||||
return ""
|
||||
|
||||
def format_time(self, time):
|
||||
context = aq_inner(self.context)
|
||||
util = getToolByName(context, 'translation_service')
|
||||
return util.ulocalized_time(time, 1, context, domain='plonelocales')
|
||||
|
||||
def comments_pending_review(self):
|
||||
|
||||
self.state = self.request.get('review_state', 'pending')
|
||||
self.transition = self.request.get('publish_transition', 'pending')
|
||||
self.limit = self.request.get('limit', 100)
|
||||
|
||||
context = aq_inner(self.context)
|
||||
catalog = getToolByName(context, 'portal_catalog')
|
||||
|
||||
return catalog(
|
||||
path='/'.join(context.getPhysicalPath()),
|
||||
portal_type='Discussion Item',
|
||||
review_state=self.state,
|
||||
sort_on='created',
|
||||
sort_limit=self.limit,
|
||||
)
|
16
plone/app/discussion/profiles/default/actions.xml
Normal file
16
plone/app/discussion/profiles/default/actions.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<object name="portal_actions" xmlns:i18n="http://xml.zope.org/namespaces/i18n">
|
||||
<object name="site_actions">
|
||||
<object name="review-comments" meta_type="CMF Action" i18n:domain="plone.app.discussion">
|
||||
<property name="title" i18n:translate="">Moderate comments</property>
|
||||
<property name="description" i18n:translate=""></property>
|
||||
<property name="url_expr">string:$portal_url/@@moderate-comments</property>
|
||||
<property name="icon_expr"></property>
|
||||
<property name="available_expr"></property>
|
||||
<property name="permissions">
|
||||
<element value="Review comments"/>
|
||||
</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
Loading…
Reference in New Issue
Block a user