RT: Request Tracker

RT 4.4.5 Release Notes

RT 4.4.5beta1 -- 2021-07-26
===========================

RT 4.4.5beta1 is now available for testing. The list of changes
included with this release is below.

https://download.bestpractical.com/pub/rt/devel/rt-4.4.5beta1.tar.gz
https://download.bestpractical.com/pub/rt/devel/rt-4.4.5beta1.tar.gz.asc

SHA-256 sums

5e6a6ecd395456bd89a3915b7f47ccb461892bfe0b2b3c0868431d64f15c7101  rt-4.4.5beta1.tar.gz
3bcc9ab83b673664f485677d58e3f395e57083f74693fbf52fa4b6ed36b8f5d5  rt-4.4.5beta1.tar.gz.asc

General user features
  * Update Starts on SLA changes even if Starts was already set
  * Accept usernames for email input fields on ticket create/update
  * Support group:NAME and group:ID in non-single role input fields
  * Create an autocompleter for Principals (works with both users and groups)
  * Support more characters for user/group names in non-single role input fields
  * Normalize and validate time inputs
  * Support to generate different dashboard content for each recipient
  * Use user timezone for date "=" queries in ticket search
  * Add "Create Via Email" and "Create Via Web" conditions
  * Fix table wrapping error in Ticket/Update.html
  * Don't escape queue name in title generation stage as it'll be escaped later
  * Allow to squelch recipients that also exist in one time inputs
  * Show all valid statuses on Asset bulk update page
  * In the datepicker, reset the time part after date input is cleared
  * Support columns as values in ticket search (ticket values on right-hand side in searches)
  * Support a friendly syntax for custom field columns as values in ticket search
  * Allow to specify CF Content/LargeContent columns in the keyword part of SQL
  * Support role searches like Owner = CF.cid or Owner = Creator
  * Improve UI of unread messages notification
  * Sync one time inputs back to checkboxes on ticket update page
  * Automatically load more txns to fill browser window on scroll history mode
  * Fix duplicated closing tag for attachment delete links
  * Remove search string including numbers in ticket autocomplete search on select
  * Fix RecentlyViewedTickets to deal with shredded/merged tickets
  * Fix bug that kept 11 tickets in the "recently visited" list instead of 10
  * Show dependencies (like dashboards) and confirm before deleting saved searches
  * Fill up cells of record's last row in search results
  * Add support of "Lifecycle =" and "Queue LIKE" to GetReferencedQueues for more search options
  * Support copying saved charts like searches
  * Fix wrongly duplicated one-time addresses on ticket update page
  * Add various missing ColumnMap entries
  * Fix error when removing multiple holders of an asset
  * Add basic stacked bar chart support
  * Remove extra closing div on Login/Logout pages
  * Add option to disable ticket linking in articles by class
  * Add entry hint as custom field tooltip
  * Disable submit on enter when input's autocomplete list shows up
  * Support quoted custom fields as values
  * Exclude end time when limiting txn date to a day
  * Trigger UpdateCc/UpdateBcc input change only once when clicking "All recipients"
  * Sync one-time checkboxes to text inputs in a consistent way
  * Translate selfservice articles search button
  * Support shallow searches for ticket roles
  * Support to search user defined group names in watcher limit
  * Support order by watcher's custom fields for ticket search
  * Support more watcher fields including user cfs in search result format
  * Add more watcher fields including user cfs to OrderBy/Columns in search builder
  * Upgrade OrderBy "Owner" to new version "Owner.Name" in saved searchs
  * Create a standard RT Time Worked report
  * Add grouping by custom roles for ticket search charts
  * Reduce space used by Current search on Query Builder to avoid saved search overlap
  * Group by direct members of role groups for ticket search charts
  * Use Name as the default watcher field in search results
  * Allow clearing roles on bulk updates page

Administration
  * Generalize Owner logic in Shredder to any Single role group
  * In shredder, remove SetWatcher rows in transaction history as well
  * Add setting $AssetMultipleOwner to allow many owners on assets
  * Default --libs-group value from "bin" to "root"
  * Add --dry-run option to rt-crontool
  * In validator, ensure tickets and queues have all of their default role groups, individually
  * In validator, prompt to create missing default role groups
  * Skip merged tickets in role groups validation
  * Allow to create missing queue-level custom role groups when needed
  * For external auth, support cf mappings like CF.foo and UserCF.foo
  * Support array and code in attr_map of external auth
  * Don't quote table names in shredder SQL output
  * Avoid "Wide character in print" warnings when generating shredder SQL output
  * Add QuoteWrapWidth option for text quoted during reply/comment
  * Set the $AttachmentListCount config's default value to 5
  * Clarify external auth logging when users are not found
  * Fix removal of scrips when shredding queues
  * Avoid errors in shredder when Organization has a hyphen
  * Avoid errors in shredder when username has a hyphen
  * Avoid errors in shredder when queue name have a hyphen
  * Log number of records returned from LDAP search
  * Support searching NULL(unset) values on user/group admin pages
  * Only show hints for user CFs configured in external settings on create
  * Fix removal of custom fields when shredding queues
  * Add transaction records for dashboard/savedsearch changes
  * For articles, do not encode HTML if skip Escape HTML option selected
  * In rt-crontool, add reload-ticket option to refresh metadata before processing
  * Avoid a known problem version of Mojo::DOM::CSS
  * Update DBIx::SearchBuilder to 1.68 to avoid segfaults on MariaDB 10.2+
  * Add parallel support for crontool
  * Add Parallel::ForkManager to dependency for parallel crontool
  * Log the object that exceeds DependenciesLimit in shredder
  * Remove SetOwner rows in transaction history on user shred
  * Add ExternalAuth to the exceptions for requiring a password
  * Reset ObjectCustomField sort order when re-enabling a Custom Field
  * Update ObjectCustomField sort order only if necessary on re-enable
  * Pass SavedChartSearchId from chart portlet
  * Skip rights check when setting default object custom field values
  * Add support to clear mason cache via web interface
  * Add LDAP email authentication to External Auth
  * Don't shred subgroups' member relationships when shredding ticket role groups
  * Provide a way to select privileged and unprivileged users in admin
  * Remember IncludeSystemGroups value on page navigation
  * Add statement-log option to render statement logs in CLI
  * Support to set sort order of applied custom roles
  * Show custom roles in correct order on queue watcher and ticket pages
  * Add no-sqldump option to rt-shredder to avoid generating backups
  * Add paging support for group Members page
  * Tweak css for page links to not overflow in Firefox
  * Add $ShowSearchNavigation option to skip building search navigation links
  * Add ability to search for disabled users

Email Encryption/Signing
  * Support separate certificates for SMIME encryption and signing
  * Add encryption and signing options for digest email
  * Provide an option to skip GnuPG tests
  * Handle encrypted outgoing emails in digest email
  * Add OtherCertificatesToSend option for SMIME
  * Set path to GnuPG binary in GnuPG::Interface constructor
  * Fix uninitialized warnings of $latest_user_main_key for gpg 2.2
  * Handle FAILURE keyword for gpg 2.2
  * Add gpg.conf for gpg 2.2 so we can specify passphrase in command line
  * Update warning message tests for gpg 2.2
  * Don't override fingerprint if it exists already
  * Make t/mail/crypt-gnupg.t pass with gpg 2.2
  * Quit gpg-agent after tests for gpg 2.2
  * Move signed_old_style_with_attachment.eml to emails directory
  * Always use temp gpg homedir to get a cleaner env
  * Add extra ignored keywords for gnupg 2.2.x
  * Fix unit test to cope with variations in how different versions of OpenSSL print certificates
  * Default cert-digest-algo from SHA1 to SHA256
  * Bump GnuPG::Interface to 1.00 to support gpg 2.2
  * Report the cert authority in an "assured by ..." clause
  * Report the S/MIME signer correctly when there is no EmailAddress
  * Fix a bug in the logic that suppresses the "email is unsigned" warning
  * Add AgorithmName to info returned by ParseKeysInfo
  * For GnuPG, add a tooltip with additional info about the signature
  * Add ability to download GnuPG public keys
  * Store and display additional info about S/MIME signatures
  * Extract email addresses from S/MIME certificates as specified in RFC 5750
  * Support SMIME certificate revocation using OCSP/CRL
  * Add deprecation warnings to RT::Test::GnuPG and RT::Test::SMIME.
  * Allow specification of outbound signing/encryption protocol on a per-queue basis
  * In Admin/Users/Keys.html, do not call "UseForOutgoing" when we have no $Queue object
  * Explain conversion of legacy list args to a hash in CheckRecipients
  * Add RT::Attachment->CryptStatus method
  * Fix error if a CA certificate does not define CRLDistributionPoints
  * Keep entire GnuPG fingerprint; don't truncate to 8 characters
  * Include S/MIME certificate serial number in tooltip
  * Add ability to download S/MIME certificates
  * Switch from key to fingerprint for user PrivateKey
  * Add admin page to manage GnuPG keys
  * Show "Preferred GnuPG key" input only if GnuPG is enabled
  * Migrate remaining RT::Test::SMIME in tests to RT::Test::Crypt
  * Bump GnuPG::Interface to 1.02 to fix secret key deletion issue for gnupg 2.2
  * Disable using WKD on GnuPG tests that might attempt to use the network

Developer
  * In Users autocomplete helper, add Initial callback to access incoming values
  * Fix Type/Recurse/MaxDepth params in Init callback of /Elements/ShowLinksOfType
  * Add EndOfHead callback to /Elements/Header
  * Add BeforeTitleBoxStart callback for ShowHistoryHeader
  * Add ARGSRef and HasTxnCFs args for Default callback of ShowTransaction
  * Parse Notify action argument assuming it's comma separated
  * Default lifecycle type to ticket on SelectStatus
  * Add support for setting user CFs on create
  * Add sort for external custom field values
  * Add callbacks to Forward.html
  * Add callbacks for customizing report queries
  * Pass ShowHints via a callback to provide a way to hide hints
  * Add Initial callback in self service Create.html
  * Add a callback to modify rights on ticket display sections
  * Add callback in Users autocomplete helper to modify users limit
  * Add attribute link support
  * Add callbacks to Admin->Groups->Members page
  * Allow RT_HOST to be set via environment variable for testing
  * Add configuration for CI testing with docker via TravisCI
  * Update configuration to move CI testing from TravisCI to Github Actions
  * Add ModifyContent callback to ShowTransactionAttachments
  * Don't touch attachment content's newlines in REST 1.0
  * Encode attachment filename to UTF-8 like other fields in REST 1.0
  * Force update MIME encoding for ticket creation via REST 1.0
  * Exclude MIME attachments when requesting a transaction's content
  * Add callback for displaying additional content on admin home page
  * Fix Type/Recurse/MaxDepth param names for Init callback of ShowLinksOfType
  * Add ModifySystemAttributes callback to system configuration page
  * Implement RT::Attribute::CurrentUserCanSee for transaction rights check
  * Allow for string of user IDs to be passed for exclusion from autocomplete results
  * Add BeforeOption callback to customize Prefs/Other.html
  * Add BeforeProcessArguments callback to group members
  * Add option to render TxnRecipients input in ShowSimplifiedRecipients
  * Tweak RT::Date to parse ISO-8601 combined date and time representations
  * Add ModifyCollectionListArgs callback to user admin index page
  * Add callbacks to user admin index page
  * Call ApplyTransactionBatch only in the most outer Atomic call
  * Don't call ApplyTransactionBatch in Atomic when in DryRun mode
  * Add ValidateValue callback in ValidateCustomFields
  * Pass term and args to ModifyUsersLimit so it can behave differently based on it
  * Add ModifyGroupsLimit callback for Groups autocomplete
  * Sync callbacks of Users/Groups autcomplete to Principals

Documentation
  * Fix configure's --libs-group help string
  * Add documentation for serializer/importer process
  * Document columns as values in ticket search
  * Move SignatureAboveQuote documentation to Message box properties
  * Fix pod warnings in RT::User docs
  * Document more helpful shredder indexes
  * Document DisplayTotalTimeWorked option and default to off
  * Document additional plackup options via rt-server
  * Document a fix for perl module permissions problem
  * Document new queue and lifecycle search options
  * Apply some changes from updated RT 5 docs
  * Add external docs images to local
  * Document recommended Apache MPM for RT
  * Cite explicit author for eye dropper icon
  * Add basic POD for RT::ObjectCustomFields
  * Document different sorting based on Postgresql local setting
  * Document the timezone comparison fix in UPGRADING
  * Update Articles docs to include disabling ticket linking
  * Document shrink-cgm-table upgrade step
  * Add context to the CF searching documentation
  * Add docs for new shallow search option
  * Clarify docs on how to pass additional CLI options to Init
  * Update rt-shredder documentation
  * Document the Transaction Batch bug fix
  * Document the database updates for the Owner.Name change
  * Convert pod link to private method to code format
  * Document custom role group search
  * Add docs for User Time Worked Report
  * Add docs describing chart group-by with roles
  * Document $UserAutocreateDefaultsOnLogin only once
  * Add --user to process dashboard subscriptions for a single user only

Internals
  * Probe system level cache to speed up right check procedure
  * With Perl 5.18 and later, warn if permissions prevent a site config from being loaded
  * Switch to SHA-256 for snapshot checksums as in release notes
  * Reuse CanonicalizePrincipal in DeleteRoleMember
  * Dump parsed source code instead of "DUMMY" for sub references in tests
  * Defer AJAX recipients update a little bit to get form's latest status
  * Switch to "POST" when updating ticket search result format via AJAX
  * Concatenate strings before encoding conversion to avoid character breakage
  * Set proper transfer encoding to avoid long lines in email
  * Fix uninitialized warning in ticket searches with __active__ and __inactive__ items
  * Add ObjectsForCreating method to support privacy in saved searches
  * For saved searches, split objects lists for creating and loading
  * Try harder to get custom field objects to inspect in searches
  * Use CanonicalizePrincipal to attempt to load users
  * Handle subject tag if prefixed with http:// by email clients
  * Only remove extra CF values when they are actually extra
  * Confirm record is defined before calling id
  * Remove delete of old CF values as AddValueForObject already handles it
  * Fall through to false on watcher rights check
  * Allow queue CF rights to apply on single-queue searches in charts
  * Clear user CFs from form args if set on create
  * Add multipart/form-data encoding to EditAboutMe form
  * Set QUOTEVALUE only if necessary to use default behavior as much as possible
  * Handle multipart attached emails when TreatAttachedEmailAsFiles is enabled
  * Load Test::MockTime earlier to fully replace time functions in core
  * Sort hashes in attribute content to avoid unnecessary updates
  * Include related transactions for attribute serialization
  * Check txn's fields for its relationship with ticket
  * Fix inconsistent datatypes error for Oracle upgrade
  * Include related links for attribute serialization
  * Use the correct CurrentUserCanSetOwner return value in menus and ticket display
  * Avoid running multiple rt-externalize-attachments simultaneously in tests
  * Cache Roles method for ticket/queue objects
  * Don't declare variables in modifier statements as behavior is not defined in Perl
  * Only keep enabled roles in registered list
  * Tweak AppliesToObjectPredicate as all registered custom roles are enabled
  * Avoid duplicated items in index.html in generated docs website
  * Make sure RT::Queue::CustomRoles returns an empty collection if no rights
  * Filter queue custom roles by checking current user's right
  * Fix "Case sensitive search by Queues.Name" warnings in GetReferencedQueues
  * Don't set RowsPerPage if we can't find the pre-defined value
  * Fall back GroupId to 0 to avoid SQL syntax error
  * Use subquery when possible in case ticket ids are too many for search chart
  * Add the missing WebPath to user RelatedData urls
  * Add the missing WebPath to links in article saved searches
  * Add username to SQL statment log
  * Prefix "main." to main columns to avoid "ambiguous column name" error
  * Don't enable/disable related groups when enabling/disabling custom roles
  * Group search on queue watchers page is case insensitive
  * Enable previously disabled custom role groups
  * Don't recursively add members to ticket role groups in CachedGroupMembers
  * Check direct group members in recursive member methods for ticket role groups
  * Check direct group members in rights check for ticket role groups
  * Exclude ticket role groups for recursive validity check in CachedGroupMembers
  * Update shrink-cgm-table to remove indirect members of ticket role groups
  * Check role's direct group members for ticket watcher searches
  * Check role's direct group members for ticket watcher group searches
  * Convert simple OR'd statements in TicketSQL to use IN for better performance
  * Convert more OR'd clauses to use "IN" for performance
  * Skip internal users in user list on admin page
  * Convert rt-crontool to RT::Interface::CLI Init function
  * Add a rule to explicitly handle verbose|v in CLI
  * Remove Requestors from ticket Accessible as it's not a core field
  * Exclude user defined groups in role groups for _WatcherJoin
  * On Pg 9 switch key/value pair if value is CF value and key is not
  * Support to create ticket/asset role groups lazily
  * Default PrincipalId to 0 to avoid SQL error for not-existing role groups
  * Improve RoleGroup method to create the group if asked
  * Optionally validate Requestor/AdminCc/Cc as they could be lazily created
  * Ensure values returned from DistinctFieldValues are utf8
  * Hide "Total" row for not-distinct results in search chart to avoid confusion

A complete changelog is available from git by running:
    git log rt-4.4.4..rt-4.4.5beta1
or visiting
    https://github.com/bestpractical/rt/compare/rt-4.4.4...rt-4.4.5beta1