from Products.CMFCore.utils import getToolByName from Products.CMFPlone import PloneMessageFactory as _ def checkMemoryTextLength(self, info): object = info.object memtool = getToolByName(self, 'memories_tool') putils = getToolByName(self, 'plone_utils') pworkflow = getToolByName(self, 'portal_workflow') siteprops = getToolByName(self, 'portal_properties').site_properties if object.meta_type == 'GeoLocation': # Allowed characters per one memory text memory_allowed_characters = siteprops.getProperty('memory_allowed_length', None) if not memory_allowed_characters: memory_allowed_characters = 4500 # This memory text has characters memory_has_characters = memtool.givePlainTextCharactersNumber(object.getText()) if memory_has_characters < memory_allowed_characters: pass else: # The state should be changed back to private pworkflow.doActionFor(object, 'retract', comment='Memory text is too long.') # Tell the user about the action message = _(u'Your memory has ${has_chars} characters. Your memory can not be published until it has less than ${allowed_characters}.', mapping={u'has_chars':memory_has_characters,u'allowed_characters':memory_allowed_characters}) putils.addPortalMessage(message, type='warning')