add 'delete' action to comments

This commit is contained in:
Helmut Merz 2014-04-27 22:38:51 +02:00
parent 8ab637c402
commit 21ac74f764
4 changed files with 47 additions and 5 deletions

View file

@ -561,6 +561,14 @@
factory="loops.browser.concept.TabbedPage"
permission="zope.View" />
<!-- delete object action -->
<page
name="delete_object"
for="loops.interfaces.INode"
class="loops.browser.form.DeleteObject"
permission="zope.ManageContent" />
<!-- dialogs/forms (end-user views) -->
<page

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2012 Helmut Merz helmutm@cy55.de
# Copyright (c) 2014 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -20,12 +20,13 @@
Classes for form presentation and processing.
"""
from urllib import urlencode
from zope.app.container.contained import ObjectRemovedEvent
from zope import component, interface, schema
from zope.component import adapts
from zope.event import notify
from zope.interface import Interface
from zope.lifecycleevent import ObjectCreatedEvent, ObjectModifiedEvent
from zope.app.container.interfaces import INameChooser
from zope.app.container.contained import ObjectAddedEvent
from zope.app.pagetemplate import ViewPageTemplateFile
@ -35,7 +36,7 @@ from zope.publisher.browser import FileUpload
from zope.publisher.interfaces import BadRequest
from zope.security.interfaces import ForbiddenAttribute, Unauthorized
from zope.security.proxy import isinstance, removeSecurityProxy
from zope.traversing.api import getName
from zope.traversing.api import getName, getParent
from cybertools.ajax import innerHtml
from cybertools.browser.form import FormController
@ -68,6 +69,25 @@ from loops.util import _
from loops.versioning.interfaces import IVersionable
# delete object
class DeleteObject(NodeView):
isTopLevel = True
def __call__(self):
# todo: check permission; check security code
form = self.request.form
obj = util.getObjectForUid(form['uid'])
container = getParent(obj)
notify(ObjectRemovedEvent(obj))
del container[getName(obj)]
message = 'The object requested has been deleted.'
params = [('loops.message', message.encode('UTF-8'))]
nextUrl = '%s?%s' % (self.request.URL[-1], urlencode(params))
return self.request.response.redirect(nextUrl)
# forms
class ObjectForm(NodeView):

View file

@ -27,7 +27,7 @@ from zope.security import checkPermission
from cybertools.browser.action import actions
from cybertools.tracking.btree import TrackingStorage
from loops.browser.action import DialogAction
from loops.browser.action import Action, DialogAction
from loops.browser.common import BaseView
from loops.browser.form import ObjectForm, EditObject
from loops.browser.node import NodeView
@ -101,7 +101,20 @@ class CommentsView(NodeView):
stateful=comment.track,
url=url,
onClick=onClick)
return [stateAct]
actions = [stateAct]
if not checkPermission('loops.EditRestricted', self.context):
return actions
baseUrl = self.page.virtualTargetUrl
url = '%s/delete_object?uid=%s' % (baseUrl, trackUid)
onClick = _("return confirm('Do you really want to delete this object?')")
delAct = Action(self,
url=url,
description=_('Delete Comment'),
icon='cybertools.icons/delete.png',
cssClass='icon-action',
onClick=onClick)
actions.append(delAct)
return actions
class CommentDetails(TrackDetails):

View file

@ -62,6 +62,7 @@ class StateAction(Action):
url = None
definition = None
cssClass = 'icon-action'
@Lazy
def stateful(self):