def beginDrafting(context, event): """When we enter the edit screen, set up the target key and draft cookie path. If there is exactly one draft for the given user id and target key, consider that to be the current draft. Also mark the request with IDrafting if applicable. """ storage = queryUtility(IDraftStorage) if storage is None or not storage.enabled: return request = getattr(context, 'REQUEST', None) if request is None: return current = ICurrentDraftManagement(request) # Update target key regardless - we could have a stale cookie current.targetKey = getObjectKey(context) if current.draftName is None: drafts = storage.getDrafts(current.userId, current.targetKey) if len(drafts) == 1: current.draftName = tuple(drafts.keys())[0] # Save the path now so that we can use it again later, even on URLs # (e.g. in AJAX dialogues) that are below this path. current.path = current.defaultPath current.mark() current.save()
def test_save(self): request = self.request response = request.response current = ICurrentDraftManagement(request) self.assertEquals(False, current.save()) self.failIf('plone.app.drafts.targetKey' in response.cookies) self.failIf('plone.app.drafts.draftName' in response.cookies) self.failIf('plone.app.drafts.userId' in response.cookies) self.failIf('plone.app.drafts.path' in response.cookies) current.targetKey = u"123" self.assertEquals(True, current.save()) self.assertEquals({'value': '123', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.targetKey']) self.failIf('plone.app.drafts.draftName' in response.cookies) self.failIf('plone.app.drafts.path' in response.cookies) current.targetKey = u"123" current.draftName = u"draft-1" self.assertEquals(True, current.save()) self.assertEquals({'value': '123', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.targetKey']) self.assertEquals({'value': 'draft-1', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.draftName']) self.failIf('plone.app.drafts.path' in response.cookies) current.targetKey = u"123" current.draftName = u"draft-1" current.path = '/test' self.assertEquals(True, current.save()) self.assertEquals({'value': '123', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.targetKey']) self.assertEquals({'value': 'draft-1', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.draftName']) self.assertEquals({'value': '/test', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.path'])
def test_save(self): request = self.request response = request.response current = ICurrentDraftManagement(request) self.assertEqual(False, current.save()) self.assertFalse('plone.app.drafts.targetKey' in response.cookies) self.assertFalse('plone.app.drafts.draftName' in response.cookies) self.assertFalse('plone.app.drafts.userId' in response.cookies) self.assertFalse('plone.app.drafts.path' in response.cookies) current.targetKey = u'123' self.assertEqual(True, current.save()) self.assertEqual( {'value': '123', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.targetKey'], ) self.assertFalse('plone.app.drafts.draftName' in response.cookies) self.assertFalse('plone.app.drafts.path' in response.cookies) current.targetKey = u'123' current.draftName = u'draft-1' self.assertEqual(True, current.save()) self.assertEqual( {'value': '123', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( {'value': 'draft-1', 'quoted': True, 'path': '/'}, response.cookies['plone.app.drafts.draftName'], ) self.assertFalse('plone.app.drafts.path' in response.cookies) current.targetKey = u'123' current.draftName = u'draft-1' current.path = '/test' # clear data del self.request.response.cookies['plone.app.drafts.targetKey'] del self.request.response.cookies['plone.app.drafts.draftName'] self.assertEqual(True, current.save()) self.assertEqual( {'value': '123', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( {'value': 'draft-1', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( {'value': '/test', 'quoted': True, 'path': '/test'}, response.cookies['plone.app.drafts.path'], )
def test_discard(self): request = self.request response = request.response current = ICurrentDraftManagement(request) current.discard() expires = 'Wed, 31-Dec-97 23:59:59 GMT' try: # expires date changed in ZPublisher.HTTPResponse # see https://github.com/zopefoundation/Zope/commit/77f483a22d6b0cb00883006cf38928cda77b75f9 # noqa zope_version = pkg_resources.get_distribution('Zope').version if parse_version(zope_version) >= parse_version('4.0b8'): expires = 'Wed, 31 Dec 1997 23:59:59 GMT' except Exception: pass deletedToken = { 'expires': expires, 'max_age': 0, 'path': '/', 'quoted': True, 'value': 'deleted' } self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], ) current.path = '/test' current.discard() deletedToken['path'] = '/test' self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], )
def test_discard(self): request = self.request response = request.response current = ICurrentDraftManagement(request) current.discard() expires = 'Wed, 31-Dec-97 23:59:59 GMT' try: # expires date changed in ZPublisher.HTTPResponse # see https://github.com/zopefoundation/Zope/commit/77f483a22d6b0cb00883006cf38928cda77b75f9 # noqa zope_version = pkg_resources.get_distribution('Zope').version if parse_version(zope_version) >= parse_version('4.0b8'): expires = 'Wed, 31 Dec 1997 23:59:59 GMT' except Exception: pass deletedToken = {'expires': expires, 'max_age': 0, 'path': '/', 'quoted': True, 'value': 'deleted'} self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], ) current.path = '/test' current.discard() deletedToken['path'] = '/test' self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], )
def test_path(self): request = self.request current = ICurrentDraftManagement(request) self.assertEquals(None, current.path) request.set('plone.app.drafts.path', u"/test") self.assertEquals(u"/test", current.path) current.path = u"/test/test-1" self.assertEquals(u"/test/test-1", current.path) self.assertEquals(u"/test", request.get('plone.app.drafts.path'))
def test_path(self): request = self.request current = ICurrentDraftManagement(request) self.assertEqual(None, current.path) request.set('plone.app.drafts.path', u'/test') self.assertEqual(u'/test', current.path) current.path = u'/test/test-1' self.assertEqual(u'/test/test-1', current.path) self.assertEqual(u'/test', request.get('plone.app.drafts.path'))
def __init__(self, form, request, context): fti = queryUtility(IDexterityFTI, name=form.portal_type) if isDraftable(fti): current = ICurrentDraftManagement(request) if current.targetKey is None: beginDrafting(context, None) current.path = '/'.join(context.getPhysicalPath()) current.targetKey = IUUID(context) current.save() else: current.mark() if current.draft: context = DraftProxy(current.draft, context) alsoProvides(request, IEditFormDrafting) super(DefaultEditFormFieldWidgets, self).__init__(form, request, context) # noqa
def __init__(self, form, request, context): fti = queryUtility(IDexterityFTI, name=form.portal_type) if isDraftable(fti): current = ICurrentDraftManagement(request) if current.targetKey is None: beginDrafting(context, None) current.path = '/'.join(context.getPhysicalPath()) current.targetKey = IUUID(context) current.save() else: current.mark() if current.draft: context = DraftProxy(current.draft, context) alsoProvides(request, IEditFormDrafting) super(DefaultEditFormFieldWidgets, self).__init__(form, request, context) # noqa
def __init__(self, form, request, context): fti = queryUtility(IDexterityFTI, name=form.portal_type) if isDraftable(fti): current = ICurrentDraftManagement(request) if current.targetKey != '++add++{0}'.format(form.portal_type): beginDrafting(context, None) current.path = '/'.join(context.getPhysicalPath()) current.targetKey = '++add++{0}'.format(form.portal_type) current.save() else: current.mark() target = getattr(current.draft, '_draftAddFormTarget', None) if current.draft and target: context = DraftProxy(current.draft, target.__of__(context)) alsoProvides(request, IAddFormDrafting) super(DefaultAddFormFieldWidgets, self).__init__(form, request, context) # noqa
def __init__(self, form, request, context): fti = queryUtility(IDexterityFTI, name=form.portal_type) if isDraftable(fti): current = ICurrentDraftManagement(request) if current.targetKey != '++add++{0}'.format(form.portal_type): beginDrafting(context, None) current.path = '/'.join(context.getPhysicalPath()) current.targetKey = '++add++{0}'.format(form.portal_type) current.save() else: current.mark() target = getattr(current.draft, '_draftAddFormTarget', None) if current.draft and target: context = DraftProxy(current.draft, target.__of__(context)) alsoProvides(request, IAddFormDrafting) super(DefaultAddFormFieldWidgets, self).__init__(form, request, context) # noqa
def test_discard(self): request = self.request response = request.response current = ICurrentDraftManagement(request) current.discard() deletedToken = {'expires': 'Wed, 31-Dec-97 23:59:59 GMT', 'max_age': 0, 'path': '/', 'quoted': True, 'value': 'deleted'} self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], ) current.path = '/test' current.discard() deletedToken['path'] = '/test' self.assertEqual( deletedToken, response.cookies['plone.app.drafts.targetKey'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.draftName'], ) self.assertEqual( deletedToken, response.cookies['plone.app.drafts.path'], )