Ensure than an empty requestor is preserved across "Add More Files"

The use if $ARGS{Requestor} || 'something' as the default value for the
Requestor field means that if emptied, and the create does not go
through -- either because the "Add More Files" button was pressed, or
fields vailed validation, or an extension halted it -- then the
Requestor will pop back to being the current user.

Preserve the user's wishes, by using a defined-or to only set the
default if it was _unsubmitted_.  Note that this is a minor behavior
change, in that external links to Create.html?Requestors=&Queue=1
previously got the current user as the requestor, instead of no
requestors.  However, this is an unlikely scenario, and they are now
actually getting what they asked.

This leaves the remaining defaults to use ||; changing them is left to a
more comprehensive branch.
Preserve the current selection in "Add Columns" and "Show Columns"

The selection in "Show Columns" is approximate, and fails in the case
where a column appears more than once.  Guaranteedly selecting the
correct row would require re-deriving the new row number from the last
button pushed -- which, while possible, would require repetition of
code, and is unnecessary in most cases.

Fixes I#16972.
Warnings avoidance for when no "Show Columns" is selected
Suppress base64'd content in non-english "Content changed from..." message

The previous check only functioned if the user's language was English,
as the call to ->SetSubValues returns a localized string.  Rather than
special-casing on the wording, instead override the message based on the
return code.

Fixes I#24665.
Never return 'Changed (base64) to (base64)' as a message

Similar to d24effb1, but even more so -- the end-user cares not for
giant base64 blobs.
Remove mostly-duplicate code for Rules which can never trigger

PreviewScrips includes a mostly-duplicated block of code to preview
emails produced by Rules, the mechanism behind Approvals.  However, this
code is unnecessary because /Ticket/Update.html is not accessible for
tickets of type 'approval' (the only objects which could currently
trigger Rules in a stock RT), because /Tickets/autohandler redirects all
but a small number of files under /Tickets/ to /Approvals/ instead.
/Ticket/Update.html is not in the whitelist, and thus cannot render for
Approvals.

Furthermore, the code checks $rule->{hints}{class} to determine if it
should display the rule; no rule ever has a ->{hints} set on it, and
never has, since the introduction of this code in 6d14f535.  As such,
even if /Ticket/Update.html were accessible, or some local customization
made use of Rules for something other than Approvals, they would still
not appear in PreviewScrips.

Remove the duplicated and unused code.
When charting, do two searches if the query isn't distinct

If a search has joins which result in a non-distinct ticket result, the
SUM() aggregator is incorrect.  Notably, if UseSQLForACLChecks is
enabled, and a global role right exists, it causes a LEFT JOIN to ticket
role groups -- which cause all maching tickets to show up four times,
multiplying SUM(TimeWorked) (for instance) by four.

As we can determine if the query will be non-distinct before making it,
split it into a SELECT DISTINCT search that returns ticket ids, followed
by a search over those ticket ids, grouped appropriately.  This comes at
a small speed penalty for such searches, but provides the only clear
route for correctness in SUM() metrics.
add a basic textarea cf test (cf type Text) for issues#30378
Rewite HasEntry logic that determines if new custom field value matches existing value.

_ProcessObjectCustomFieldUpdates calls AddCustomFieldValue with a 'Value'
parameter unconditionally instead of deciding if it should pass 'LargeContent'
instead when the content is long enough, so HasEntry always returns false
for LargeContent data.

This commit makes HasEntry check $value against LargeContent instead of
expecting $large_content to be passed.

fixes issues#30378
Header position on print

When a ticket gets printed from RT, the subject is misplaced overlapping
part of the other areas as the ticket.

Fixes #30362.
Mention SelfService in AllowUserAutocompleteForUnprivileged docs

Most folks will search for SelfService before Unprivileged when looking
for this option.  It's obvious to us that they're equated, but not to
all admins.
Merge branch '4.2/clarify-selfservice-unprivileged-autocomplete' into 4.2-trunk
Merge branch '4.2/header-position-on-print' into 4.2-trunk
Merge branch '4.2/hasentry-for-largecontent' into 4.2-trunk
Allow links to capitalized things

Our docs/ directory contains a bunch of stuff that isn't lower cased.
Similarly, one might write include a URI with capital letters.

I'm less concerned about the two more hardcoded config names or email
addresses being mixed case in our README/UPGRADING docs.
Include _ in URLs

RTIR's readme links to RTIR_Config.pm in a URI which gets linked as
...RTIR</a>_Config.html
Merge branch '4.2/static-docs-README-links' into 4.2-trunk
Allow upper-case "D" to signify days, in addition to "d"

Fixes: #30449
Allow this bulk update string to be loc'd
Interpret README files as UTF-8

Otherwise multi-byte characters get assumed to be latin-1, and are
HTML-encoded as multiple such.