[311] | 1 | ## Script (Python) "content_status_modify" |
---|
| 2 | ##bind container=container |
---|
| 3 | ##bind context=context |
---|
| 4 | ##bind namespace= |
---|
| 5 | ##bind script=script |
---|
| 6 | ##bind subpath=traverse_subpath |
---|
| 7 | ##parameters=workflow_action, REQUEST=None, **kw |
---|
| 8 | ##title= |
---|
| 9 | ## |
---|
[486] | 10 | # $Id: content_status_modify.py 486 2006-09-06 10:09:39Z joachim $ |
---|
[311] | 11 | """ |
---|
| 12 | FIXME: add docstring. |
---|
| 13 | """ |
---|
| 14 | |
---|
| 15 | wftool = context.portal_workflow |
---|
| 16 | |
---|
| 17 | if REQUEST is not None: |
---|
| 18 | kw.update(REQUEST.form) |
---|
| 19 | |
---|
| 20 | comments = kw.get('comments', '') |
---|
| 21 | |
---|
| 22 | folder = context.aq_parent |
---|
| 23 | id = context.getId() |
---|
| 24 | url = None |
---|
| 25 | |
---|
| 26 | psm = 'psm_status_changed' |
---|
| 27 | |
---|
| 28 | if workflow_action in ('retract','approve'): |
---|
| 29 | # accept, reject, ... |
---|
| 30 | if comments: |
---|
| 31 | del kw['comments'] |
---|
| 32 | kw['comment'] = comments |
---|
| 33 | res = wftool.doActionFor(context, workflow_action, dest_container=context, **kw) |
---|
| 34 | if same_type(res, ()): |
---|
| 35 | if res[0] == 'ObjectMoved': |
---|
| 36 | rpath = res[1] |
---|
| 37 | url = context.portal_url() |
---|
| 38 | if not url.endswith('/'): |
---|
| 39 | url += '/' |
---|
| 40 | url += rpath |
---|
| 41 | elif workflow_action != 'copy_submit': |
---|
| 42 | # accept, reject, ... |
---|
| 43 | if comments: |
---|
| 44 | del kw['comments'] |
---|
| 45 | kw['comment'] = comments |
---|
| 46 | res = wftool.doActionFor(context, workflow_action, **kw) |
---|
| 47 | if same_type(res, ()): |
---|
| 48 | if res[0] == 'ObjectMoved': |
---|
| 49 | rpath = res[1] |
---|
| 50 | url = context.portal_url() |
---|
| 51 | if not url.endswith('/'): |
---|
| 52 | url += '/' |
---|
| 53 | url += rpath |
---|
| 54 | else: |
---|
| 55 | # No section has been specified |
---|
| 56 | # XXX We should get a list in here |
---|
| 57 | if REQUEST and len(REQUEST.form) < 3: |
---|
| 58 | psm = 'psm_you_must_select_sections_for_publishing' |
---|
| 59 | |
---|
| 60 | # publishing: copy and initalize proxy into one or more sections |
---|
| 61 | allowed_transitions = wftool.getAllowedPublishingTransitions(context) |
---|
| 62 | for transition in allowed_transitions: |
---|
| 63 | rpaths = kw.get(transition) |
---|
| 64 | if rpaths: |
---|
| 65 | if same_type(rpaths, ''): |
---|
| 66 | rpaths = (rpaths,) |
---|
| 67 | for rpath in rpaths: |
---|
| 68 | wftool.doActionFor(context, workflow_action, |
---|
| 69 | dest_container=rpath, |
---|
| 70 | initial_transition=transition, |
---|
| 71 | comment=comments) |
---|
| 72 | |
---|
| 73 | if REQUEST is not None: |
---|
| 74 | # If the object has been deleted, we can't redirect to it. |
---|
| 75 | if url is None: |
---|
| 76 | if id in folder.objectIds(): |
---|
| 77 | url = context.absolute_url() |
---|
| 78 | else: |
---|
| 79 | url = folder.absolute_url() |
---|
| 80 | |
---|
| 81 | if psm == 'psm_you_must_select_sections_for_publishing': |
---|
| 82 | redirect_url = '%s/content_submit_form?%s' % ( |
---|
| 83 | url, 'portal_status_message=%s'%psm) |
---|
| 84 | else: |
---|
| 85 | redirect_url = '%s/?%s' % (url, 'portal_status_message=%s'%psm) |
---|
| 86 | REQUEST.RESPONSE.redirect(redirect_url) |
---|