Пример #1
0
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()
Пример #2
0
    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'])
Пример #3
0
    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'],
        )
Пример #4
0
    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'],
        )
Пример #5
0
    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'],
        )
Пример #6
0
 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'))
Пример #7
0
    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'))
Пример #8
0
    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
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
    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
Пример #12
0
    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'],
        )