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)
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])
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)
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)
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(), [])