def last_modifier(self):
        # Let's see if we have any last_modifier annotation
        raw_last_modifier = self._raw_last_modifier()
        if raw_last_modifier:
            return raw_last_modifier

        # If we are here: try with with history support if is available.
        history = queryMultiAdapter((self.context, self.request),
                                    interface=Interface, name=u"contenthistory")

        # Security is in the view definition. Here we act as an omnipotent user
        old_sm = getSecurityManager()
        tmp_user = UnrestrictedUser(old_sm.getUser().getId() or '', '', ['Manager'], '')
        newSecurityManager(None, tmp_user)

        try:
            if not history and sys.version_info < (2, 6):
                # We didn't found any history... is this a Plone 3? Let's try with the old history viewlet
                # To be sure of that let's do it only if we are using Python 2.4
                # Please remove this abomination when Plone 3.3 compatibity will be dropped
                history = ContentHistoryViewlet(self.context, self.request, None, manager=None)
                history.update()
            if history:
                full_history = history.fullHistory()
                if full_history:
                    return full_history[0].get('actorid') or full_history[0].get('actor').get('username')
        finally:
            setSecurityManager(old_sm)
Exemple #2
0
    def test_revisionHistory(self):
        repo_tool = self.portal.portal_repository
        request = self.app.REQUEST
        context = getattr(self.folder, 'd1')
        viewlet = ContentHistoryViewlet(context, request, None, None)
        viewlet.update()

        # after creating the item the is a first revision
        history = viewlet.revisionHistory()
        self.assertEqual(len(history), 1)

        repo_tool.save(context, comment='Initial Revision')
        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertEqual(len(history), 2)
        self.assertEqual(history[0]['comments'], 'Initial Revision')

        repo_tool.save(context, comment='Second Revision')
        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertTrue(
            'http://nohost/plone/Members/test_user_1_/d1/@@history?one=2&two=1'
            in history[0]['diff_previous_url']
        )

        # check diff link does not appear if content is not diffable
        diff_tool = self.portal.portal_diff
        diff_tool.setDiffForPortalType('Document', {})
        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertFalse('diff_previous_url' in history[0])
Exemple #3
0
    def test_revertAbility(self):
        # check revert URL is generated only if the user has the appropriate permission
        repo_tool = self.portal.portal_repository
        request = self.app.REQUEST
        context = getattr(self.folder, 'd1')
        self.loginAsPortalOwner()
        repo_tool.save(context, comment='Initial Revision')
        repo_tool.save(context, comment='Second Revision')

        viewlet = ContentHistoryViewlet(context, request, None, None)

        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertEqual(history[0]['revert_url'], 'http://nohost/plone/Members/test_user_1_/d1/revertversion')

        self.portal.manage_permission('CMFEditions: Revert to previous versions', [], False)

        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertEqual(history[0]['revert_url'], None)
Exemple #4
0
    def test_revertAbility(self):
        # check revert URL is generated only if the user has the appropriate permission
        repo_tool = self.portal.portal_repository
        request = self.app.REQUEST
        context = getattr(self.folder, 'd1')
        self.loginAsPortalOwner()
        repo_tool.save(context, comment='Initial Revision')
        repo_tool.save(context, comment='Second Revision')

        viewlet = ContentHistoryViewlet(context, request, None, None)

        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertTrue(
            'http://nohost/plone/Members/test_user_1_/d1/revertversion' in history[0]['revert_url'])  # noqa

        self.portal.manage_permission('CMFEditions: Revert to previous versions', [], False)

        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertEqual(history[0]['revert_url'], None)
    def test_revisionHistory(self):
        repo_tool = self.portal.portal_repository
        request = self.app.REQUEST
        context = getattr(self.folder, "d1")
        self.loginAsPortalOwner()
        repo_tool.save(context, comment="Initial Revision")

        viewlet = ContentHistoryViewlet(context, request, None, None)
        viewlet.update()

        history = viewlet.revisionHistory()
        self.assertEqual(len(history), 1)
        self.assertEqual(history[0]["comments"], "Initial Revision")

        repo_tool.save(context, comment="Second Revision")
        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertTrue(
            "http://nohost/plone/Members/test_user_1_/d1/@@history?one=1&two=0" in history[0]["diff_previous_url"]
        )

        # check diff link does not appear if content is not diffable
        diff_tool = self.portal.portal_diff
        diff_tool.setDiffForPortalType("Document", {})
        viewlet.update()
        history = viewlet.revisionHistory()
        self.assertFalse("diff_previous_url" in history[0])
    def test_statictime_full_history(self):
        frozen_time = datetime(1950, 7, 31, 17, 30)
        statictime = StaticTime(modified=frozen_time)

        statictime.start()
        doc1 = self.create_document("doc1")
        doc1.setTitle("Current version")
        api.content.transition(doc1, "publish")
        viewlet = ContentHistoryViewlet(doc1, doc1.REQUEST, None)
        viewlet.update()

        history = viewlet.fullHistory()

        real_datetimes = list(map(itemgetter("time"), history))
        self.assertEqual(
            real_datetimes,
            [
                DateTime("1950/07/31 17:30:00 UTC"),
                -612855000.0,
                DateTime("1950/07/31 19:30:00 UTC"),
            ],
        )

        statictime.stop()
        doc2 = self.create_document("doc2")
        doc2.setTitle("Current version")
        api.content.transition(doc2, "publish")
        viewlet = ContentHistoryViewlet(doc2, doc2.REQUEST, None)
        viewlet.update()

        history = viewlet.fullHistory()

        fake_datetimes = list(map(itemgetter("time"), history))
        for ts in fake_datetimes:
            self.assert_roughly_now(ts)

        self.assert_of_same_type(fake_datetimes, real_datetimes)
Exemple #7
0
 def test_emptyHistory(self):
     request = self.app.REQUEST
     context = getattr(self.folder, 'd1')
     viewlet = ContentHistoryViewlet(context, request, None, None)
     viewlet.update()
     self.assertEqual(viewlet.revisionHistory(), [])