Edgewall Software

Ticket #2618: mid_air_collision_retry-r3341.patch

File mid_air_collision_retry-r3341.patch, 4.2 KB (added by cboos, 6 years ago)

Implements a Retry button on the "Mid Air Collision" error page.

  • trac/ticket/web_ui.py

     
    252252 
    253253        if req.method == 'POST': 
    254254            if not req.args.has_key('preview'): 
    255                 self._do_save(req, db, ticket) 
     255                return self._do_save(req, db, ticket) 
    256256            else: 
    257257                # Use user supplied values 
    258258                ticket.populate(req.args) 
    259259                self._validate_ticket(req, ticket) 
    260  
    261                 req.hdf['ticket.action'] = action 
    262                 req.hdf['ticket.ts'] = req.args.get('ts') 
    263                 req.hdf['ticket.reassign_owner'] = req.args.get('reassign_owner') \ 
    264                                                    or req.authname 
    265                 req.hdf['ticket.resolve_resolution'] = req.args.get('resolve_resolution') 
    266                 reporter_id = req.args.get('author') 
    267                 comment = req.args.get('comment') 
    268                 if comment: 
    269                     req.hdf['ticket.comment'] = comment 
    270                     # Wiki format a preview of comment 
    271                     req.hdf['ticket.comment_preview'] = wiki_to_html(comment, 
    272                                                                      self.env, 
    273                                                                      req, db) 
     260                self._populate_misc(req, db) 
    274261        else: 
    275262            req.hdf['ticket.reassign_owner'] = req.authname 
    276263            # Store a timestamp in order to detect "mid air collisions" 
     
    484471 
    485472        # Mid air collision? 
    486473        if int(req.args.get('ts')) != ticket.time_changed: 
    487             raise TracError("Sorry, can not save your changes. " 
    488                             "This ticket has been modified by someone else " 
    489                             "since you started", 'Mid Air Collision') 
     474            self._insert_ticket_data(req, None, ticket, 
     475                                     req.args.get('author')) 
     476            self._populate_misc(req, db) 
     477            return 'ticket_error.cs', None 
    490478 
    491479        self._validate_ticket(req, ticket) 
    492480 
     
    590578        actions = TicketSystem(self.env).get_available_actions(ticket, req.perm) 
    591579        for action in actions: 
    592580            req.hdf['ticket.actions.' + action] = '1' 
     581 
     582    def _populate_misc(self, req, db): 
     583        req.hdf['ticket.action'] = req.args.get('action', 'view') 
     584        req.hdf['ticket.ts'] = req.args.get('ts') 
     585        req.hdf['ticket.reassign_owner'] = req.args.get('reassign_owner') \ 
     586                                           or req.authname 
     587        req.hdf['ticket.resolve_resolution'] = req.args.get('resolve_resolution') 
     588        reporter_id = req.args.get('author') 
     589        comment = req.args.get('comment') 
     590        if comment: 
     591            req.hdf['ticket.comment'] = comment 
     592            # Wiki format a preview of comment 
     593            req.hdf['ticket.comment_preview'] = wiki_to_html( 
     594                comment, self.env, req, db) 
  • templates/ticket_error.cs

     
     1<?cs include "header.cs"?> 
     2 
     3<div id="ctxtnav" class="nav"></div> 
     4 
     5<div id="content" class="error"> 
     6 <h1>Mid Air Collision</h1> 
     7  <div class="message"> 
     8   <strong>Sorry, can not save your changes.</strong> 
     9   <p>This ticket has been modified by someone else since you started.</p> 
     10  </div> 
     11 
     12 <form action="<?cs var:ticket.href ?>#preview" method="post"> 
     13  <input type="hidden" name="author" value="<?cs var:ticket.reporter_id ?>" /><?cs 
     14  each:field = ticket.fields ?> 
     15   <input type="hidden" name="<?cs var:name(field) ?>" value="<?cs var:ticket[name(field)] ?>" /><?cs 
     16  /each ?> 
     17  <input type="hidden" name="reassign_owner" value="<?cs var:ticket.reassign_owner ?>" /> 
     18  <input type="hidden" name="action" value="<?cs var:ticket.action ?>" /> 
     19  <input type="hidden" name="ts" value="<?cs var:ticket.ts ?>" /> 
     20  <input type="hidden" name="comment" value="<?cs var:ticket.comment ?>" /> 
     21 
     22  <div class="buttons"> 
     23   <input type="submit" name="preview" value="Retry"  />&nbsp; 
     24  </div> 
     25 </form> 
     26</div> 
     27 
     28<?cs include "footer.cs"?>