Accessible via the 'Edit All' button on the search page. Search and bin
urls adjusted to @with_trailing_slash to give a known base from which to
build relative paths. Because mass-edit duplicates a search from the
search page; the actual search code is lifted directly from there.
There may be an opportunity for factoring here.
Mass-edit has two main parts: (1) the update_tickets method on the
Tracker's RootController which expects specialized POST data; and (2) a
small hunk of JavaScript, update_tickets(), that builds the specialized
POST request with a list of selected ticket ids and just the fields to
actually be set. Because of the conflation of user id None meaning
'nobody' and "no value" meaning "do not set this field", actually
setting assigned-to to 'nobody' requires a special sentinel value ('-').
Custom sums may not be set through mass-edit as (a) it's not sensible to
set a custom sum on a super-ticket, and (b) after setting all the values
we would then have to dirty_sums() across all the changed tickets,
possibly with much duplication of effort.