expose verison words to do a more strict version check in rt-setup-database
Remove unimplemented user override of DefaultSummaryRows

479a311 added DefaultSummaryRows to the lsit of user-overridable
options, but failed to change any of the calls to
->Get('DefaultSummaryRows') to respect the user's setting.  Remove the
value from the list of user-configurable settings, as it would merely
serve as a default for the per-user preference already found on the
/Prefs/MyRT.html page.  Having a per-user configurable default setting
for a per-user configurable preference makes no sense.
don't not escape in BuildFormatString

it's not necessary and would cause double-escape bug(#17002)
validate user name on both "create" and "update"

see also #18722
update ModifyACL description in RT::Class

trs: for #21054 I believe your first intuition was correct; it's just changing the copy
Pull down recent translations from launchpad.

This also extracts a number of new translatable strings added between
4.0.8 and 4.0.9
on search by watcher load user when possible

Load user when we know that this will be one user record.
This allows us put id into SQL instead of name/email address.

EmailAddress is unique, but we don't have unique index and
can not create one until we have solution for storing NULLs
in DB.

With the change mysql can better estimate number of records
in CachedGroupMembers table and pick better plans.
check/shortcircuit _RecordNote's results in case it fails

because the following _SetTold depends on the success of _RecordNote.
see also #20489 for an example to trigger this(not a good one though)
Now that SubjectTag is a column, you should be able to sort by it
Tests showing incorrect BriefDescription for link transactions

The BriefDescription subs for AddLink and DeleteLink transactions
had code to handle a link value that was a string and not a URI,
but this test shows that the method doesn't return the expected
string.
Detect non-URI value for BriefDescription on transaction links

The AddLink and DeleteLink subs in BriefDescription relied on
$URI->Resolver to return false for a non-URI value, but it
returns the base object which evaluates to true. The FromURI
call explicitly returns undef if it can't determine the URI scheme
so use it in the evaluation.
Merge branch '4.0/display-link-strings-in-transaction-brief-description' into 4.0-trunk
Merge branch '4.0/check-record-note-results-in-correspond' into 4.0-trunk
typo of Told
Remove the indent from a non-code block in POD
Let list of headers used for one-time recipient suggestions be adjusted

Extensions or local customizations may want to add RT-Send-To or
Reply-To, or remove Bcc, From, etc.
Preserve the state of the per-transaction squelching checkboxes

Now unchecked recipients are preserved across attachment uploads,
article inclusions, and any other action which submits the form but
doesn't submit the update.

Refactors the code to process squelched recipients for use outside of
Ticket/Update.html.

Resolves #18761.
Ensure that Custom Fields submitted are saved to the database.

There was a regression in 4.0.9 (a64a16d1c) which meant that even if you
had SeeQueue, CreateTicket, ModifyCustomField and SeeCustomField and the
custom field appeared for editing, it would be lost during the
submission.  If you had ShowTicket, it worked fine.
Check the id from the table and by loading the Object.

An optimization was added in a64a16d1c so that if you were trying to
find the "Custom Field Object" from a Ticket, it would shortcut and
return $ticket->Queue rather than loading $ticket->QueueObj->Id.

Unfortunately, $ticket->Queue is protected by ShowTicket while
$ticket->QueueObj->Id is protected by SeeQueue.  It's not uncommon in RT
for a user to be granted SeeQueue and CreateTicket but not be given
ShowTicket (a dropbox queue where you create tickets but then don't see
them anymore).

In this setup on 4.0.9, any custom field values entered on
Ticket/Create.html will be silently discarded because $ticket->Queue
returns undef. This results in the Custom Field not being found and
AddCustomFieldValue not saving it.

This was revealed in the RTIR test suite which tests just such a
scenario using Constituencies (you can submit a ticket that you then
can't see because it belongs to a separate Constituency).
Ignore bare disabled queues in the simple search.

Typing General into simple search results in a search for Queue =
'General', even if your General Queue is disabled.  You can still search
for queue:General and search in a disabled Queue.