Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 35 additions & 3 deletions src/plone/app/content/browser/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from plone.base.utils import get_user_friendly_types
from plone.base.utils import safe_text
from plone.locking.interfaces import ILockable
from plone.registry.interfaces import IRegistry
from Products.CMFCore.utils import getToolByName
from Products.Five.browser import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
Expand All @@ -19,6 +20,8 @@
from zope import schema
from zope.component import getMultiAdapter
from zope.component import queryMultiAdapter
from zope.component import queryUtility
from zope.component.hooks import getSite
from zope.container.interfaces import INameChooser
from zope.event import notify
from zope.interface import Interface
Expand Down Expand Up @@ -85,9 +88,38 @@ def handle_delete(self, action):
# unlock object as it is locked by current user
ILockable(self.context).unlock()
parent.manage_delObjects(self.context.getId())
IStatusMessage(self.request).add(
_("${title} has been deleted.", mapping={"title": title})
)

# Check if recycle bin is enabled and show appropriate message
try:
recyclebin_enabled_view = getMultiAdapter(
(getSite(), self.request), name="recyclebin-enabled"
)
recycling_enabled = recyclebin_enabled_view()
except Exception:
recycling_enabled = False
Comment thread
davisagli marked this conversation as resolved.
Outdated

if recycling_enabled:
# Get retention period from registry (default to 30 days if not found)
registry = queryUtility(IRegistry)
retention_period = 30 # default
if registry is not None:
try:
retention_period = registry.get(
"plone-recyclebin.retention_period", 30
)
except Exception:
retention_period = 30
Comment thread
davisagli marked this conversation as resolved.
Outdated

IStatusMessage(self.request).add(
_(
"${title} has been moved to the recycle bin. It can be restored by administrators and will be permanently deleted after ${days} days.",
mapping={"title": title, "days": retention_period},
)
)
Comment thread
davisagli marked this conversation as resolved.
Outdated
else:
IStatusMessage(self.request).add(
_("${title} has been deleted.", mapping={"title": title})
)
else:
IStatusMessage(self.request).add(
_('"${title}" has already been deleted', mapping={"title": title})
Expand Down
32 changes: 31 additions & 1 deletion src/plone/app/content/browser/contents/delete.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
from plone.app.content.interfaces import IStructureAction
from plone.base import PloneMessageFactory as _
from plone.locking.interfaces import ILockable
from plone.registry.interfaces import IRegistry
from Products.CMFCore.utils import getToolByName
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.component import getMultiAdapter
from zope.component import queryUtility
from zope.component.hooks import getSite
from zope.i18n import translate
from zope.interface import implementer
Expand Down Expand Up @@ -43,9 +45,37 @@ def get_options(self):

class DeleteActionView(ContentsBaseAction):
required_obj_permission = delete_objects
success_msg = _("Successfully delete items")
failure_msg = _("Failed to delete items")

@property
def success_msg(self):
"""Dynamic success message that includes recycle bin information."""
# Check if recycle bin is enabled
try:
recyclebin_enabled_view = getMultiAdapter(
(getSite(), self.request), name="recyclebin-enabled"
)
recycling_enabled = recyclebin_enabled_view()
except Exception:
recycling_enabled = False

if not recycling_enabled:
return _("Successfully deleted items")

# Get retention period from registry (default to 30 days if not found)
registry = queryUtility(IRegistry)
retention_period = 30 # default
if registry is not None:
try:
retention_period = registry.get("plone-recyclebin.retention_period", 30)
except Exception:
retention_period = 30

return _(
"Successfully moved items to recycle bin. Items can be restored by administrators and will be permanently deleted after ${days} days.",
mapping={"days": retention_period},
)

def __call__(self):
if self.request.form.get("render") == "yes":
confirm_view = getMultiAdapter(
Expand Down