expose verison words to do a more strict version check in rt-setup-database
if LANG is not english then tests got confused
User autocomplete: Add the class autocompletes-user for easier selecting later

This is nice because it means you can select/iterate all user
autocompleters using basic jQuery / CSS.

For the bespoke implementations, I add the class from JS so that if JS
doesn't run, the elements aren't tagged incorrectly.  That really only
matters if you're selecting elements with CSS (since your custom JS
won't be running either).
User autocomplete: Override the item render to conditionally use HTML from the server

Combined with the recent ModifySuggestion callback for
/Helpers/Autocomplete/Users, this lets customizers fully affect
rendering of the autocomplete suggestions.
Ensure that I18N::LangTags::Detect only finds the "C" locale in tests

The I18N::LangTags::Detect package, which RT uses to auto-detect the
user's language preference in the browser, also looks at several
environment variables which are more commonly set on the command line.
This is only an issue during tests, as we expect the language to always
be English.

Explicitly always remove all of the environment variables which
I18N::LangTags::Detect looks at, and set LANG=C to provide a reference
point.
With the Pg FTS, catch and skip attachments which contain invalid UTF8 bytes
Strengthen wording about our ability (or lack thereof) to FTS index on Pg
If we fail to index on Pg, ensure that we continue indexing past that point

Previously, failure to index (because of invalid bytes, or too-long
content) left the content index NULL.  As our check for where to resume
indexing is based on rows where the index IS NOT NULL, this could lead
to a pessimal condition where a large number of failures to index in a
row would prevent forward progress of the indexer.
When updating "text" fields "text", don't display old and new values

Fields which are stored as "text", such as the content of templates, or
custom actions or conditions on scrips, do not benefit from displaying
"xxx changed from yyy to zzz", as yyy and zzz are generally long
multi-line blocks of text, whose newlines are stripped during HTML
rendering.

Update the message to simply say the more concise "xxx updated", which
is already a locstring in use elsewhere in RT.
convert text part to binary when we can not decode

If we couldn't find or guess charset or if charset
is not supported or failed to parse properly then
RT was dropping email.

Now instead of dropping we set content type to
'application/octet-stream' and save original value
to X-RT-Original-Content-Type header. In this
case users can download part and deal with it.

In most cases it would be related to spam, but
there are valid charsets that are not supported
by Encode module.
test ?Q? header encoding with not supported charset
Merge branch '4.0/encoded-word-whitespace' into 4.0/unknown-email-charset
handle not supported charsets in Q/B encoded words

There is no good way to save original content. We
preserve only printable ascii characters, everything
else replaced with \x{FFFD} unicode code point.
Remove the bottom margin that superfish adds to menus

This caused nearby elements, such as column headings in search results,
to not be clickable.

See http://issues.bestpractical.com/Ticket/Display.html?id=19307
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.
Allow non-ExecuteCode users to create Simple templates

Previously, the type was set after creation time; but only users with
ExecuteCode are allowed to create Perl templates, making it effectively
impossible for non-ExecuteCode users to create new templates, even
Simple ones.

Pass the type of the template at Create time, making this into an
operation that such users have permission to do.

Submitted-by: Tim Cutts <tjrc@sanger.ac.uk>
Allow altering template type to Simple and changing Content simultaneously

The order in of the array passed to AttributesRef determines the order
in which updates are applied.  Because Content denies updates if the
current Type is 'Perl' and the user doesn't have ExecuteCode, this means
that it was impossible for such a user to update the Content in the same
submission as the type was changed to Simple.  Reorder the AttributesRef
such that Type comes before Content, thus ensuring that the ACL
surrounding Content will be satisfied by the time we attempt to update
it.
Default the Type according to the permissions of the current user
Encode the interface (Email/Web/Mobile/REST) that content came from

While examining the presence of the Recieved header was often used as a
stand-in for knowing if a transaction was initiated via email or not, it
is simpler to record the interface explicitly.  Store one of four values
in the X-RT-Interface MIME header: Email, Web, Mobile, or REST,
depending on the endpoint of the request that created the MIME object.
Avoid warnings with undef $From