# HG changeset patch
# User Christian Boos <cboos@neuf.fr>
# Date 1206712277 -3600
# Node ID baa36083f3a2a4e5de7ab0ad48c8542db50feb0a
# Parent fa5a3be904424e558dd86a3d9ecb4b6dc233e9ac
Move the support for user-friendly /newticket URLs to the process_request method, so that request pre-processors can see the request arguments unmodified. Fixes #5025.
Also reintroduces r6565, to avoid a regression on #5022.
diff --git a/trac/templates/error.html b/trac/templates/error.html
|
a
|
b
|
|
| 51 | 51 | </head> |
| 52 | 52 | |
| 53 | 53 | <py:def function="create_ticket(teo=False)"> |
| 54 | | <input type="hidden" name="__preview" value="1" /> |
| | 54 | <input type="hidden" name="preview" value="1" /> |
| 55 | 55 | <input type="hidden" name="reporter" value="${get_reporter_id(req)}" /> |
| 56 | 56 | <input py:if="teo" type="hidden" name="version" |
| 57 | 57 | value="${'dev' in trac.version and 'devel' or trac.version}" /> |
diff --git a/trac/ticket/web_ui.py b/trac/ticket/web_ui.py
|
a
|
b
|
|
| 38 | 38 | from trac.ticket.notification import TicketNotifyEmail |
| 39 | 39 | from trac.timeline.api import ITimelineEventProvider |
| 40 | 40 | from trac.util import get_reporter_id, partition |
| 41 | | from trac.util.compat import any |
| | 41 | from trac.util.compat import any, set |
| 42 | 42 | from trac.util.datefmt import to_timestamp, utc |
| 43 | 43 | from trac.util.text import CRLF, shorten_line, obfuscate_email_address |
| 44 | 44 | from trac.util.presentation import separated |
| … |
… |
|
| 139 | 139 | |
| 140 | 140 | def match_request(self, req): |
| 141 | 141 | if re.match(r'/newticket/?$', req.path_info) is not None: |
| 142 | | if req.method != 'POST': |
| 143 | | for k in req.args.keys(): |
| 144 | | if k.startswith('__'): # non field argument |
| 145 | | req.args[k[2:]] = req.args[k] |
| 146 | | else: |
| 147 | | req.args['field_'+k] = req.args[k] |
| 148 | | del req.args[k] |
| 149 | 142 | return True |
| 150 | 143 | match = re.match(r'/ticket/([0-9]+)$', req.path_info) |
| 151 | 144 | if match: |
| … |
… |
|
| 154 | 147 | |
| 155 | 148 | def process_request(self, req): |
| 156 | 149 | if 'id' in req.args: |
| | 150 | if req.path_info.startswith('/newticket'): |
| | 151 | raise TracError(_("id can't be set for a new ticket request.")) |
| 157 | 152 | return self._process_ticket_request(req) |
| 158 | 153 | return self._process_newticket_request(req) |
| 159 | 154 | |
| … |
… |
|
| 340 | 335 | def _process_newticket_request(self, req): |
| 341 | 336 | req.perm.require('TICKET_CREATE') |
| 342 | 337 | ticket = Ticket(self.env) |
| | 338 | |
| | 339 | # support user-friendly URLs like /newticket?version=0.11&priority=low |
| | 340 | field_names = set([f['name'] for f in ticket.fields]) |
| | 341 | if req.method != 'POST': |
| | 342 | for k in req.args.keys(): |
| | 343 | if k in field_names: |
| | 344 | req.args['field_'+k] = req.args[k] |
| | 345 | del req.args[k] |
| | 346 | # '__preview' used by deployed 0.11dev Tracs (up to beta2) |
| | 347 | if '__preview' in req.args: |
| | 348 | req.args['preview'] = True |
| | 349 | del req.args['__preview'] |
| 343 | 350 | |
| 344 | 351 | if req.method == 'POST' and 'field_owner' in req.args and \ |
| 345 | 352 | 'TICKET_MODIFY' not in req.perm: |