def render(self): transition = self.request.form.get('transition', None) text = self.request.form.get('text', None) if transition is None or not text: msg = _(u'There were some errors. Required input is missing.') api.portal.show_message(message=msg, request=self.request, type='error') else: review_state = api.content.get_state(self.context) # we use the current state as a marker to indicate # no review state change if transition != review_state: # we need to make the transition first api.content.transition(self.context, transition) review_state = api.content.get_state(self.context) responses = IResponseContainer(self.context) responses.add(Response(review_state, text)) # notify the claim has a new response notify(ObjectModifiedEvent(self.context)) msg = _(u'Item created.') api.portal.show_message(message=msg, request=self.request) self.request.response.redirect(self.context.absolute_url())
def test_adding(self): adapter = IResponseContainer(self.claim) review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'First response.')) with api.env.adopt_roles(['Manager']): api.content.transition(self.claim, 'accept') review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'Second response.')) api.content.transition(self.claim, 'resolve') review_state = api.content.get_state(self.claim) adapter.add(Response(review_state, u'Third response.')) self.assertEqual(len(adapter), 3) # check the first response self.assertEqual(adapter[0].creator, 'test_user_1_') self.assertEqual(adapter[0].review_state, 'Pending') self.assertTrue(isinstance(adapter[0].date, datetime)) self.assertEqual(adapter[0].text, u'First response.') # same creator, we only adopted a rol to make the transition self.assertEqual(adapter[1].creator, 'test_user_1_') self.assertEqual(adapter[2].creator, 'test_user_1_') # dates are sequential self.assertTrue(adapter[0].date < adapter[1].date) self.assertTrue(adapter[1].date < adapter[2].date) # review states and text are ok self.assertEqual(adapter[1].review_state, 'Accepted') self.assertEqual(adapter[2].review_state, 'Resolved') self.assertEqual(adapter[1].text, u'Second response.') self.assertEqual(adapter[2].text, u'Third response.')
def set_claim_response(self, claim): """Return a list of Claim response objects as dictionaries. """ results = [] container = IResponseContainer(claim) for id, response in enumerate(container): if response is None: continue # response has been removed results.append(dict(id=id + 1, creator=type_cast(response.creator), date=type_cast(response.date), review_state=type_cast(response.review_state), text=type_cast(response.text))) return results
def _responses(self): """Return a list of responses for the current Claim. """ transforms = api.portal.get_tool('portal_transforms') responses = [] container = IResponseContainer(self.context) for id, response in enumerate(container): if response is None: continue # response has been removed responses.append( dict(id=id + 1, creator=response.creator, date=response.date, review_state=response.review_state, text=transforms.convertTo( 'text/html', response.text, context=self.context, mimetype='text/x-web-intelligent').getData())) return responses