rt 4.2.14 (#13852)
authorIvan Kohler <ivan@freeside.biz>
Sun, 6 Aug 2017 17:11:28 +0000 (10:11 -0700)
committerIvan Kohler <ivan@freeside.biz>
Sun, 6 Aug 2017 17:11:28 +0000 (10:11 -0700)
891 files changed:
rt/Makefile.in
rt/README
rt/bin/rt
rt/bin/rt-crontool.in
rt/bin/rt-mailgate.in
rt/bin/rt.in
rt/configure
rt/devel/tools/change-loc-msgstr
rt/devel/tools/cmd-boilerplate
rt/devel/tools/css_tidy
rt/devel/tools/extract-message-catalog
rt/devel/tools/license_tag
rt/devel/tools/rt-apache
rt/devel/tools/rt-attributes-editor
rt/devel/tools/rt-message-catalog
rt/devel/tools/rt-parse-mail-log [new file with mode: 0755]
rt/devel/tools/rt-static-docs
rt/devel/tools/tweak-template-locstring
rt/docs/UPGRADING.mysql
rt/docs/customizing/styling_rt.pod
rt/docs/hacking.pod
rt/docs/security.pod
rt/etc/RT_Config.pm.in
rt/etc/acl.Pg
rt/etc/upgrade/3.8-ical-extension.in
rt/etc/upgrade/4.0-customfield-checkbox-extension
rt/etc/upgrade/4.0-customfield-checkbox-extension.in
rt/etc/upgrade/generate-rtaddressregexp.in
rt/etc/upgrade/sanity-check-stylesheets.in
rt/etc/upgrade/shrink-cgm-table.in
rt/etc/upgrade/shrink-transactions-table.in
rt/etc/upgrade/split-out-cf-categories.in
rt/etc/upgrade/switch-templates-to.in
rt/etc/upgrade/time-worked-history.in
rt/etc/upgrade/upgrade-articles
rt/etc/upgrade/upgrade-articles.in
rt/etc/upgrade/upgrade-mysql-schema.pl
rt/etc/upgrade/vulnerable-passwords.in
rt/lib/RT.pm
rt/lib/RT/ACE.pm
rt/lib/RT/ACL.pm
rt/lib/RT/Action.pm
rt/lib/RT/Action/AutoOpen.pm
rt/lib/RT/Action/AutoOpenInactive.pm
rt/lib/RT/Action/Autoreply.pm
rt/lib/RT/Action/CreateTickets.pm
rt/lib/RT/Action/EscalatePriority.pm
rt/lib/RT/Action/ExtractSubjectTag.pm
rt/lib/RT/Action/LinearEscalate.pm
rt/lib/RT/Action/Notify.pm
rt/lib/RT/Action/NotifyAsComment.pm
rt/lib/RT/Action/NotifyGroup.pm
rt/lib/RT/Action/NotifyGroupAsComment.pm
rt/lib/RT/Action/NotifyOwnerOrAdminCc.pm
rt/lib/RT/Action/OpenOnStarted.pm
rt/lib/RT/Action/RecordComment.pm
rt/lib/RT/Action/RecordCorrespondence.pm
rt/lib/RT/Action/SendEmail.pm
rt/lib/RT/Action/SendForward.pm
rt/lib/RT/Action/SetPriority.pm
rt/lib/RT/Action/SetStatus.pm
rt/lib/RT/Action/UserDefined.pm
rt/lib/RT/Approval.pm
rt/lib/RT/Approval/Rule.pm
rt/lib/RT/Approval/Rule/Created.pm
rt/lib/RT/Approval/Rule/NewPending.pm
rt/lib/RT/Approval/Rule/Passed.pm
rt/lib/RT/Approval/Rule/Rejected.pm
rt/lib/RT/Article.pm
rt/lib/RT/Articles.pm
rt/lib/RT/Attachment.pm
rt/lib/RT/Attachments.pm
rt/lib/RT/Attribute.pm
rt/lib/RT/Attributes.pm
rt/lib/RT/Base.pm
rt/lib/RT/CachedGroupMember.pm
rt/lib/RT/CachedGroupMembers.pm
rt/lib/RT/Class.pm
rt/lib/RT/Classes.pm
rt/lib/RT/Condition.pm
rt/lib/RT/Condition/AnyTransaction.pm
rt/lib/RT/Condition/BeforeDue.pm
rt/lib/RT/Condition/CloseTicket.pm
rt/lib/RT/Condition/Overdue.pm
rt/lib/RT/Condition/OwnerChange.pm
rt/lib/RT/Condition/PriorityChange.pm
rt/lib/RT/Condition/PriorityExceeds.pm
rt/lib/RT/Condition/QueueChange.pm
rt/lib/RT/Condition/ReopenTicket.pm
rt/lib/RT/Condition/StatusChange.pm
rt/lib/RT/Condition/UserDefined.pm
rt/lib/RT/Config.pm
rt/lib/RT/Crypt.pm
rt/lib/RT/Crypt/GnuPG.pm
rt/lib/RT/Crypt/GnuPG/CRLFHandle.pm
rt/lib/RT/Crypt/Role.pm
rt/lib/RT/Crypt/SMIME.pm
rt/lib/RT/CurrentUser.pm
rt/lib/RT/CustomField.pm
rt/lib/RT/CustomFieldValue.pm
rt/lib/RT/CustomFieldValues.pm
rt/lib/RT/CustomFieldValues/External.pm
rt/lib/RT/CustomFieldValues/Groups.pm
rt/lib/RT/CustomFields.pm
rt/lib/RT/Dashboard.pm
rt/lib/RT/Dashboard/Mailer.pm
rt/lib/RT/Dashboards.pm
rt/lib/RT/Date.pm
rt/lib/RT/DependencyWalker.pm
rt/lib/RT/DependencyWalker/FindDependencies.pm
rt/lib/RT/EmailParser.pm
rt/lib/RT/Generated.pm.in
rt/lib/RT/Graph/Tickets.pm
rt/lib/RT/Group.pm
rt/lib/RT/GroupMember.pm
rt/lib/RT/GroupMembers.pm
rt/lib/RT/Groups.pm
rt/lib/RT/Handle.pm
rt/lib/RT/I18N.pm
rt/lib/RT/I18N/cs.pm
rt/lib/RT/I18N/de.pm
rt/lib/RT/I18N/fr.pm
rt/lib/RT/I18N/i_default.pm
rt/lib/RT/I18N/ru.pm
rt/lib/RT/Installer.pm
rt/lib/RT/Interface/CLI.pm
rt/lib/RT/Interface/Email.pm
rt/lib/RT/Interface/Email/Auth/Crypt.pm
rt/lib/RT/Interface/Email/Auth/MailFrom.pm
rt/lib/RT/Interface/REST.pm
rt/lib/RT/Interface/Web.pm
rt/lib/RT/Interface/Web/Handler.pm
rt/lib/RT/Interface/Web/Menu.pm
rt/lib/RT/Interface/Web/Middleware/StaticHeaders.pm
rt/lib/RT/Interface/Web/QueryBuilder.pm
rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm
rt/lib/RT/Interface/Web/Request.pm
rt/lib/RT/Interface/Web/Session.pm
rt/lib/RT/Lifecycle.pm
rt/lib/RT/Lifecycle/Ticket.pm
rt/lib/RT/Link.pm
rt/lib/RT/Links.pm
rt/lib/RT/Migrate.pm
rt/lib/RT/Migrate/Importer.pm
rt/lib/RT/Migrate/Importer/File.pm
rt/lib/RT/Migrate/Incremental.pm
rt/lib/RT/Migrate/Serializer.pm
rt/lib/RT/Migrate/Serializer/File.pm
rt/lib/RT/Migrate/Serializer/IncrementalRecord.pm
rt/lib/RT/Migrate/Serializer/IncrementalRecords.pm
rt/lib/RT/ObjectClass.pm
rt/lib/RT/ObjectClasses.pm
rt/lib/RT/ObjectCustomField.pm
rt/lib/RT/ObjectCustomFieldValue.pm
rt/lib/RT/ObjectCustomFieldValues.pm
rt/lib/RT/ObjectCustomFields.pm
rt/lib/RT/ObjectScrip.pm
rt/lib/RT/ObjectScrips.pm
rt/lib/RT/ObjectTopic.pm
rt/lib/RT/ObjectTopics.pm
rt/lib/RT/PlackRunner.pm
rt/lib/RT/Plugin.pm
rt/lib/RT/Pod/HTML.pm
rt/lib/RT/Pod/HTMLBatch.pm
rt/lib/RT/Pod/Search.pm
rt/lib/RT/Principal.pm
rt/lib/RT/Principals.pm
rt/lib/RT/Queue.pm
rt/lib/RT/Queues.pm
rt/lib/RT/Record.pm
rt/lib/RT/Record/AddAndSort.pm
rt/lib/RT/Record/Role.pm
rt/lib/RT/Record/Role/Lifecycle.pm
rt/lib/RT/Record/Role/Links.pm
rt/lib/RT/Record/Role/Rights.pm
rt/lib/RT/Record/Role/Roles.pm
rt/lib/RT/Record/Role/Status.pm
rt/lib/RT/Reminders.pm
rt/lib/RT/Report/Tickets.pm
rt/lib/RT/Report/Tickets/Entry.pm
rt/lib/RT/Rule.pm
rt/lib/RT/Ruleset.pm
rt/lib/RT/SQL.pm
rt/lib/RT/SavedSearch.pm
rt/lib/RT/SavedSearches.pm
rt/lib/RT/Scrip.pm
rt/lib/RT/ScripAction.pm
rt/lib/RT/ScripActions.pm
rt/lib/RT/ScripCondition.pm
rt/lib/RT/ScripConditions.pm
rt/lib/RT/Scrips.pm
rt/lib/RT/Search.pm
rt/lib/RT/Search/ActiveTicketsInQueue.pm
rt/lib/RT/Search/FromSQL.pm
rt/lib/RT/Search/Simple.pm
rt/lib/RT/SearchBuilder.pm
rt/lib/RT/SearchBuilder/AddAndSort.pm
rt/lib/RT/SearchBuilder/Role.pm
rt/lib/RT/SearchBuilder/Role/Roles.pm
rt/lib/RT/SharedSetting.pm
rt/lib/RT/SharedSettings.pm
rt/lib/RT/Shredder.pm
rt/lib/RT/Shredder/Constants.pm
rt/lib/RT/Shredder/Dependencies.pm
rt/lib/RT/Shredder/Dependency.pm
rt/lib/RT/Shredder/Exceptions.pm
rt/lib/RT/Shredder/POD.pm
rt/lib/RT/Shredder/Plugin.pm
rt/lib/RT/Shredder/Plugin/Attachments.pm
rt/lib/RT/Shredder/Plugin/Base.pm
rt/lib/RT/Shredder/Plugin/Base/Dump.pm
rt/lib/RT/Shredder/Plugin/Base/Search.pm
rt/lib/RT/Shredder/Plugin/Objects.pm
rt/lib/RT/Shredder/Plugin/SQLDump.pm
rt/lib/RT/Shredder/Plugin/Summary.pm
rt/lib/RT/Shredder/Plugin/Tickets.pm
rt/lib/RT/Shredder/Plugin/Users.pm
rt/lib/RT/Squish.pm
rt/lib/RT/Squish/CSS.pm
rt/lib/RT/Squish/JS.pm
rt/lib/RT/StyleGuide.pod
rt/lib/RT/System.pm
rt/lib/RT/Template.pm
rt/lib/RT/Templates.pm
rt/lib/RT/Test.pm
rt/lib/RT/Test/Apache.pm
rt/lib/RT/Test/Email.pm
rt/lib/RT/Test/GnuPG.pm
rt/lib/RT/Test/SMIME.pm
rt/lib/RT/Test/Shredder.pm
rt/lib/RT/Test/Web.pm
rt/lib/RT/Ticket.pm
rt/lib/RT/Tickets.pm
rt/lib/RT/Topic.pm
rt/lib/RT/Topics.pm
rt/lib/RT/Transaction.pm
rt/lib/RT/Transactions.pm
rt/lib/RT/URI.pm
rt/lib/RT/URI/a.pm
rt/lib/RT/URI/base.pm
rt/lib/RT/URI/fsck_com_article.pm
rt/lib/RT/URI/fsck_com_rt.pm
rt/lib/RT/URI/t.pm
rt/lib/RT/User.pm
rt/lib/RT/Users.pm
rt/lib/RT/Util.pm
rt/sbin/rt-attributes-viewer.in
rt/sbin/rt-clean-sessions.in
rt/sbin/rt-dump-metadata.in
rt/sbin/rt-email-dashboards.in
rt/sbin/rt-email-digest.in
rt/sbin/rt-email-group-admin.in
rt/sbin/rt-fulltext-indexer.in
rt/sbin/rt-importer.in
rt/sbin/rt-preferences-viewer.in
rt/sbin/rt-serializer.in
rt/sbin/rt-server.fcgi.in
rt/sbin/rt-server.in
rt/sbin/rt-setup-database.in
rt/sbin/rt-setup-fulltext-index.in
rt/sbin/rt-shredder.in
rt/sbin/rt-test-dependencies.in
rt/sbin/rt-validate-aliases.in
rt/sbin/rt-validator.in
rt/sbin/standalone_httpd.in
rt/share/html/Admin/Articles/Classes/CustomFields.html
rt/share/html/Admin/Articles/Classes/GroupRights.html
rt/share/html/Admin/Articles/Classes/Modify.html
rt/share/html/Admin/Articles/Classes/Objects.html
rt/share/html/Admin/Articles/Classes/Topics.html
rt/share/html/Admin/Articles/Classes/UserRights.html
rt/share/html/Admin/Articles/Classes/index.html
rt/share/html/Admin/Articles/Elements/Topics
rt/share/html/Admin/Articles/index.html
rt/share/html/Admin/CustomFields/GroupRights.html
rt/share/html/Admin/CustomFields/Modify.html
rt/share/html/Admin/CustomFields/Objects.html
rt/share/html/Admin/CustomFields/UserRights.html
rt/share/html/Admin/CustomFields/index.html
rt/share/html/Admin/Elements/AddCustomFieldValue
rt/share/html/Admin/Elements/ConfigureDashboardsInMenu
rt/share/html/Admin/Elements/ConfigureMyRT
rt/share/html/Admin/Elements/EditCustomField
rt/share/html/Admin/Elements/EditCustomFieldValues
rt/share/html/Admin/Elements/EditCustomFieldValuesSource
rt/share/html/Admin/Elements/EditCustomFields
rt/share/html/Admin/Elements/EditQueueWatcherGroup
rt/share/html/Admin/Elements/EditQueueWatchers
rt/share/html/Admin/Elements/EditRights
rt/share/html/Admin/Elements/EditRightsCategoryTabs
rt/share/html/Admin/Elements/EditScrips
rt/share/html/Admin/Elements/EditTemplates
rt/share/html/Admin/Elements/Header
rt/share/html/Admin/Elements/LoggingSummary
rt/share/html/Admin/Elements/MembershipsPage
rt/share/html/Admin/Elements/ModifyTemplate
rt/share/html/Admin/Elements/Portal
rt/share/html/Admin/Elements/SelectCustomField
rt/share/html/Admin/Elements/SelectCustomFieldLookupType
rt/share/html/Admin/Elements/SelectCustomFieldRenderType
rt/share/html/Admin/Elements/SelectCustomFieldType
rt/share/html/Admin/Elements/SelectGroups
rt/share/html/Admin/Elements/SelectNewGroupMembers
rt/share/html/Admin/Elements/SelectScripAction
rt/share/html/Admin/Elements/SelectScripCondition
rt/share/html/Admin/Elements/SelectStage
rt/share/html/Admin/Elements/SelectStageForAdded
rt/share/html/Admin/Elements/SelectUsers
rt/share/html/Admin/Elements/ShowKeyInfo
rt/share/html/Admin/Elements/UpgradeHistory
rt/share/html/Admin/Elements/UpgradeHistoryRow
rt/share/html/Admin/Global/CustomFields/Class-Article.html
rt/share/html/Admin/Global/CustomFields/Groups.html
rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html
rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html
rt/share/html/Admin/Global/CustomFields/Queues.html
rt/share/html/Admin/Global/CustomFields/Users.html
rt/share/html/Admin/Global/CustomFields/index.html
rt/share/html/Admin/Global/DashboardsInMenu.html
rt/share/html/Admin/Global/GroupRights.html
rt/share/html/Admin/Global/MyRT.html
rt/share/html/Admin/Global/Scrips.html
rt/share/html/Admin/Global/Template.html
rt/share/html/Admin/Global/Templates.html
rt/share/html/Admin/Global/Topics.html
rt/share/html/Admin/Global/UserRights.html
rt/share/html/Admin/Global/index.html
rt/share/html/Admin/Groups/GroupRights.html
rt/share/html/Admin/Groups/History.html
rt/share/html/Admin/Groups/Members.html
rt/share/html/Admin/Groups/Memberships.html
rt/share/html/Admin/Groups/Modify.html
rt/share/html/Admin/Groups/UserRights.html
rt/share/html/Admin/Groups/index.html
rt/share/html/Admin/Queues/CustomField.html
rt/share/html/Admin/Queues/CustomFields.html
rt/share/html/Admin/Queues/GroupRights.html
rt/share/html/Admin/Queues/History.html
rt/share/html/Admin/Queues/Modify.html
rt/share/html/Admin/Queues/People.html
rt/share/html/Admin/Queues/Scrips.html
rt/share/html/Admin/Queues/Template.html
rt/share/html/Admin/Queues/Templates.html
rt/share/html/Admin/Queues/UserRights.html
rt/share/html/Admin/Queues/index.html
rt/share/html/Admin/Scrips/Create.html
rt/share/html/Admin/Scrips/Elements/EditBasics
rt/share/html/Admin/Scrips/Elements/EditCustomCode
rt/share/html/Admin/Scrips/Elements/SelectTemplate
rt/share/html/Admin/Scrips/Modify.html
rt/share/html/Admin/Scrips/Objects.html
rt/share/html/Admin/Scrips/index.html
rt/share/html/Admin/Tools/Configuration.html
rt/share/html/Admin/Tools/Queries.html
rt/share/html/Admin/Tools/Shredder/Dumps/dhandler
rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink
rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights
rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage
rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment
rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket
rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User
rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox
rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments
rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp
rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects
rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin
rt/share/html/Admin/Tools/Shredder/autohandler
rt/share/html/Admin/Tools/Shredder/index.html
rt/share/html/Admin/Tools/Theme.html
rt/share/html/Admin/Tools/index.html
rt/share/html/Admin/Users/CustomFields.html
rt/share/html/Admin/Users/DashboardsInMenu.html
rt/share/html/Admin/Users/History.html
rt/share/html/Admin/Users/Keys.html
rt/share/html/Admin/Users/Memberships.html
rt/share/html/Admin/Users/Modify.html
rt/share/html/Admin/Users/MyRT.html
rt/share/html/Admin/Users/index.html
rt/share/html/Admin/autohandler
rt/share/html/Admin/index.html
rt/share/html/Approvals/Display.html
rt/share/html/Approvals/Elements/Approve
rt/share/html/Approvals/Elements/PendingMyApproval
rt/share/html/Approvals/Elements/ShowDependency
rt/share/html/Approvals/autohandler
rt/share/html/Approvals/index.html
rt/share/html/Articles/Article/Delete.html
rt/share/html/Articles/Article/Display.html
rt/share/html/Articles/Article/Edit.html
rt/share/html/Articles/Article/Elements/EditBasics
rt/share/html/Articles/Article/Elements/EditCustomFields
rt/share/html/Articles/Article/Elements/EditLinks
rt/share/html/Articles/Article/Elements/EditTopics
rt/share/html/Articles/Article/Elements/LinkEntryInstructions
rt/share/html/Articles/Article/Elements/Preformatted
rt/share/html/Articles/Article/Elements/SearchByCustomField
rt/share/html/Articles/Article/Elements/SelectSavedSearches
rt/share/html/Articles/Article/Elements/SelectSearchPrivacy
rt/share/html/Articles/Article/Elements/ShowLinks
rt/share/html/Articles/Article/Elements/ShowSavedSearches
rt/share/html/Articles/Article/Elements/ShowSearchCriteria
rt/share/html/Articles/Article/Elements/ShowTopics
rt/share/html/Articles/Article/ExtractFromTicket.html
rt/share/html/Articles/Article/ExtractIntoClass.html
rt/share/html/Articles/Article/ExtractIntoTopic.html
rt/share/html/Articles/Article/History.html
rt/share/html/Articles/Article/PreCreate.html
rt/share/html/Articles/Article/Search.html
rt/share/html/Articles/Elements/BeforeMessageBox
rt/share/html/Articles/Elements/CheckSkipCreate
rt/share/html/Articles/Elements/CreateArticle
rt/share/html/Articles/Elements/GotoArticle
rt/share/html/Articles/Elements/IncludeArticle
rt/share/html/Articles/Elements/MaybeNeedsSetup
rt/share/html/Articles/Elements/NeedsSetup
rt/share/html/Articles/Elements/NewestArticles
rt/share/html/Articles/Elements/QuickSearch
rt/share/html/Articles/Elements/SelectClass
rt/share/html/Articles/Elements/ShowTopic
rt/share/html/Articles/Elements/ShowTopicLink
rt/share/html/Articles/Elements/SubjectOverride
rt/share/html/Articles/Elements/UpdatedArticles
rt/share/html/Articles/Topics.html
rt/share/html/Articles/index.html
rt/share/html/Dashboards/Elements/DashboardsForObject
rt/share/html/Dashboards/Elements/Deleted
rt/share/html/Dashboards/Elements/HiddenSearches
rt/share/html/Dashboards/Elements/ListOfDashboards
rt/share/html/Dashboards/Elements/SelectPrivacy
rt/share/html/Dashboards/Elements/ShowDashboards
rt/share/html/Dashboards/Elements/ShowPortlet/component
rt/share/html/Dashboards/Elements/ShowPortlet/dashboard
rt/share/html/Dashboards/Elements/ShowPortlet/search
rt/share/html/Dashboards/Modify.html
rt/share/html/Dashboards/Queries.html
rt/share/html/Dashboards/Render.html
rt/share/html/Dashboards/Subscription.html
rt/share/html/Dashboards/dhandler
rt/share/html/Dashboards/index.html
rt/share/html/Download/CustomFieldValue/dhandler
rt/share/html/Elements/AddLinks
rt/share/html/Elements/BulkCustomFields
rt/share/html/Elements/BulkLinks
rt/share/html/Elements/CSRF
rt/share/html/Elements/Callback
rt/share/html/Elements/Checkbox
rt/share/html/Elements/CollectionAsTable/Header
rt/share/html/Elements/CollectionAsTable/ParseFormat
rt/share/html/Elements/CollectionAsTable/Row
rt/share/html/Elements/CollectionList
rt/share/html/Elements/CollectionListPaging
rt/share/html/Elements/ColumnMap
rt/share/html/Elements/CreateTicket
rt/share/html/Elements/Crypt/KeyIssues
rt/share/html/Elements/Crypt/SelectKeyForEncryption
rt/share/html/Elements/Crypt/SelectKeyForSigning
rt/share/html/Elements/Crypt/SignEncryptWidget
rt/share/html/Elements/CryptStatus
rt/share/html/Elements/Dashboards
rt/share/html/Elements/EditCustomField
rt/share/html/Elements/EditCustomFieldAutocomplete
rt/share/html/Elements/EditCustomFieldBinary
rt/share/html/Elements/EditCustomFieldCombobox
rt/share/html/Elements/EditCustomFieldCustomGroupings
rt/share/html/Elements/EditCustomFieldDate
rt/share/html/Elements/EditCustomFieldDateTime
rt/share/html/Elements/EditCustomFieldFreeform
rt/share/html/Elements/EditCustomFieldIPAddress
rt/share/html/Elements/EditCustomFieldIPAddressRange
rt/share/html/Elements/EditCustomFieldImage
rt/share/html/Elements/EditCustomFieldSelect
rt/share/html/Elements/EditCustomFieldText
rt/share/html/Elements/EditCustomFieldWikitext
rt/share/html/Elements/EditCustomFields
rt/share/html/Elements/EditLinks
rt/share/html/Elements/EditPassword
rt/share/html/Elements/EditTimeValue
rt/share/html/Elements/EmailInput
rt/share/html/Elements/Error
rt/share/html/Elements/FindUser
rt/share/html/Elements/FoldStanzaJS
rt/share/html/Elements/Footer
rt/share/html/Elements/Framekiller
rt/share/html/Elements/GotoTicket
rt/share/html/Elements/GotoUser
rt/share/html/Elements/Header
rt/share/html/Elements/HeaderJavascript
rt/share/html/Elements/JavascriptConfig
rt/share/html/Elements/ListActions
rt/share/html/Elements/ListMenu
rt/share/html/Elements/Login
rt/share/html/Elements/LoginHelp
rt/share/html/Elements/LoginRedirectWarning
rt/share/html/Elements/Logo
rt/share/html/Elements/MakeClicky
rt/share/html/Elements/Menu
rt/share/html/Elements/MessageBox
rt/share/html/Elements/MyAdminQueues
rt/share/html/Elements/MyRT
rt/share/html/Elements/MyReminders
rt/share/html/Elements/MySupportQueues
rt/share/html/Elements/PageLayout
rt/share/html/Elements/PersonalQuickbar
rt/share/html/Elements/QueriesAsComment
rt/share/html/Elements/QueryString
rt/share/html/Elements/QueueSummaryByLifecycle
rt/share/html/Elements/QueueSummaryByStatus
rt/share/html/Elements/QuickCreate
rt/share/html/Elements/Quicksearch
rt/share/html/Elements/RT__Article/ColumnMap
rt/share/html/Elements/RT__Class/ColumnMap
rt/share/html/Elements/RT__CustomField/ColumnMap
rt/share/html/Elements/RT__Dashboard/ColumnMap
rt/share/html/Elements/RT__Group/ColumnMap
rt/share/html/Elements/RT__Queue/ColumnMap
rt/share/html/Elements/RT__SavedSearch/ColumnMap
rt/share/html/Elements/RT__Scrip/ColumnMap
rt/share/html/Elements/RT__Template/ColumnMap
rt/share/html/Elements/RT__Ticket/ColumnMap
rt/share/html/Elements/RT__Transaction/ColumnMap [new file with mode: 0644]
rt/share/html/Elements/RT__User/ColumnMap
rt/share/html/Elements/Refresh
rt/share/html/Elements/RefreshHomepage
rt/share/html/Elements/SavedSearches
rt/share/html/Elements/ScrubHTML
rt/share/html/Elements/Section
rt/share/html/Elements/SelectAttachmentField
rt/share/html/Elements/SelectBoolean
rt/share/html/Elements/SelectCustomFieldOperator
rt/share/html/Elements/SelectCustomFieldValue
rt/share/html/Elements/SelectDate
rt/share/html/Elements/SelectDateRelation
rt/share/html/Elements/SelectDateType
rt/share/html/Elements/SelectEqualityOperator
rt/share/html/Elements/SelectGroups
rt/share/html/Elements/SelectIPRelation
rt/share/html/Elements/SelectLang
rt/share/html/Elements/SelectMatch
rt/share/html/Elements/SelectNewTicketQueue
rt/share/html/Elements/SelectObject
rt/share/html/Elements/SelectOwner
rt/share/html/Elements/SelectOwnerAutocomplete
rt/share/html/Elements/SelectOwnerDropdown
rt/share/html/Elements/SelectPriority
rt/share/html/Elements/SelectQueue
rt/share/html/Elements/SelectResultsPerPage
rt/share/html/Elements/SelectStatus
rt/share/html/Elements/SelectTimeUnits
rt/share/html/Elements/SelectTimezone
rt/share/html/Elements/SelectUsers
rt/share/html/Elements/SelectWatcherType
rt/share/html/Elements/SetupSessionCookie
rt/share/html/Elements/ShowCustomFieldBinary
rt/share/html/Elements/ShowCustomFieldCustomGroupings
rt/share/html/Elements/ShowCustomFieldDate
rt/share/html/Elements/ShowCustomFieldDateTime
rt/share/html/Elements/ShowCustomFieldImage
rt/share/html/Elements/ShowCustomFieldText
rt/share/html/Elements/ShowCustomFieldWikitext
rt/share/html/Elements/ShowCustomFields
rt/share/html/Elements/ShowHistory
rt/share/html/Elements/ShowLink
rt/share/html/Elements/ShowLinks
rt/share/html/Elements/ShowLinksOfType
rt/share/html/Elements/ShowMemberships
rt/share/html/Elements/ShowMessageHeaders
rt/share/html/Elements/ShowMessageStanza
rt/share/html/Elements/ShowPrincipal
rt/share/html/Elements/ShowRecord
rt/share/html/Elements/ShowRelationLabel
rt/share/html/Elements/ShowReminders
rt/share/html/Elements/ShowSearch
rt/share/html/Elements/ShowTransaction
rt/share/html/Elements/ShowTransactionAttachments
rt/share/html/Elements/ShowUser
rt/share/html/Elements/ShowUserEmailFrequency
rt/share/html/Elements/SimpleSearch
rt/share/html/Elements/Submit
rt/share/html/Elements/TSVExport
rt/share/html/Elements/Tabs
rt/share/html/Elements/TicketList
rt/share/html/Elements/TitleBox
rt/share/html/Elements/TitleBoxEnd
rt/share/html/Elements/TitleBoxStart
rt/share/html/Elements/ValidateCustomFields
rt/share/html/Elements/WidgetBar
rt/share/html/Errors/WebRemoteUser/Deauthorized
rt/share/html/Errors/WebRemoteUser/NoInternalUser
rt/share/html/Errors/WebRemoteUser/NoRemoteUser
rt/share/html/Errors/WebRemoteUser/UserAutocreateDefaultsOnLogin
rt/share/html/Errors/WebRemoteUser/Wrapper
rt/share/html/Helpers/Autocomplete/CustomFieldValues
rt/share/html/Helpers/Autocomplete/Groups
rt/share/html/Helpers/Autocomplete/Owners
rt/share/html/Helpers/Autocomplete/Tickets
rt/share/html/Helpers/Autocomplete/Users
rt/share/html/Helpers/Autocomplete/autohandler
rt/share/html/Helpers/TicketHistory
rt/share/html/Helpers/Toggle/ShowRequestor
rt/share/html/Helpers/Toggle/TicketBookmark
rt/share/html/Helpers/UserInfo
rt/share/html/Helpers/autohandler
rt/share/html/Install/Basics.html
rt/share/html/Install/DatabaseDetails.html
rt/share/html/Install/DatabaseType.html
rt/share/html/Install/Elements/Errors
rt/share/html/Install/Elements/Wrapper
rt/share/html/Install/Finish.html
rt/share/html/Install/Global.html
rt/share/html/Install/Initialize.html
rt/share/html/Install/Sendmail.html
rt/share/html/Install/autohandler
rt/share/html/Install/index.html
rt/share/html/NoAuth/Helpers/CustomLogo/dhandler
rt/share/html/NoAuth/Login.html
rt/share/html/NoAuth/Logout.html
rt/share/html/NoAuth/RichText/autohandler
rt/share/html/NoAuth/css/aileron/AfterMenus
rt/share/html/NoAuth/css/aileron/InHeader
rt/share/html/NoAuth/css/autohandler
rt/share/html/NoAuth/css/ballard/InHeader
rt/share/html/NoAuth/css/dhandler
rt/share/html/NoAuth/css/rudder/AfterMenus
rt/share/html/NoAuth/css/rudder/InHeader
rt/share/html/NoAuth/css/web2/AfterMenus
rt/share/html/NoAuth/css/web2/InHeader
rt/share/html/NoAuth/iCal/dhandler
rt/share/html/NoAuth/js/autohandler
rt/share/html/NoAuth/js/dhandler
rt/share/html/NoAuth/rss/dhandler
rt/share/html/Prefs/DashboardsInMenu.html
rt/share/html/Prefs/MyRT.html
rt/share/html/Prefs/Other.html
rt/share/html/Prefs/Quicksearch.html
rt/share/html/Prefs/Search.html
rt/share/html/Prefs/SearchOptions.html
rt/share/html/REST/1.0/Forms/attachment/default
rt/share/html/REST/1.0/Forms/group/customfields
rt/share/html/REST/1.0/Forms/group/default
rt/share/html/REST/1.0/Forms/group/ns
rt/share/html/REST/1.0/Forms/queue/customfields
rt/share/html/REST/1.0/Forms/queue/default
rt/share/html/REST/1.0/Forms/queue/ns
rt/share/html/REST/1.0/Forms/queue/ticketcustomfields
rt/share/html/REST/1.0/Forms/ticket/attachments
rt/share/html/REST/1.0/Forms/ticket/comment
rt/share/html/REST/1.0/Forms/ticket/default
rt/share/html/REST/1.0/Forms/ticket/history
rt/share/html/REST/1.0/Forms/ticket/links
rt/share/html/REST/1.0/Forms/ticket/merge
rt/share/html/REST/1.0/Forms/ticket/take
rt/share/html/REST/1.0/Forms/transaction/default
rt/share/html/REST/1.0/Forms/user/default
rt/share/html/REST/1.0/Forms/user/ns
rt/share/html/REST/1.0/NoAuth/mail-gateway
rt/share/html/REST/1.0/autohandler
rt/share/html/REST/1.0/dhandler
rt/share/html/REST/1.0/logout
rt/share/html/REST/1.0/search/dhandler
rt/share/html/REST/1.0/ticket/comment
rt/share/html/REST/1.0/ticket/link
rt/share/html/REST/1.0/ticket/merge
rt/share/html/Search/Article.html
rt/share/html/Search/Build.html
rt/share/html/Search/Bulk.html
rt/share/html/Search/Chart
rt/share/html/Search/Chart.html
rt/share/html/Search/Edit.html
rt/share/html/Search/Elements/Article
rt/share/html/Search/Elements/BuildFormatString
rt/share/html/Search/Elements/Chart
rt/share/html/Search/Elements/ChartTable
rt/share/html/Search/Elements/ConditionRow
rt/share/html/Search/Elements/DisplayOptions
rt/share/html/Search/Elements/EditFormat
rt/share/html/Search/Elements/EditQuery
rt/share/html/Search/Elements/EditSearches
rt/share/html/Search/Elements/EditSort
rt/share/html/Search/Elements/Graph
rt/share/html/Search/Elements/NewListActions
rt/share/html/Search/Elements/PickBasics
rt/share/html/Search/Elements/PickCFs
rt/share/html/Search/Elements/PickCriteria
rt/share/html/Search/Elements/PickObjectCFs
rt/share/html/Search/Elements/PickTicketCFs
rt/share/html/Search/Elements/ResultsRSSView
rt/share/html/Search/Elements/SearchPrivacy
rt/share/html/Search/Elements/SearchesForObject
rt/share/html/Search/Elements/SelectAndOr
rt/share/html/Search/Elements/SelectChartFunction
rt/share/html/Search/Elements/SelectChartType
rt/share/html/Search/Elements/SelectGroup
rt/share/html/Search/Elements/SelectGroupBy
rt/share/html/Search/Elements/SelectLinks
rt/share/html/Search/Elements/SelectPersonType
rt/share/html/Search/Elements/SelectSearchObject
rt/share/html/Search/Elements/SelectSearchesForObjects
rt/share/html/Search/Results.html
rt/share/html/Search/Results.rdf
rt/share/html/Search/Results.tsv
rt/share/html/Search/Simple.html
rt/share/html/Search/index.html
rt/share/html/SelfService/Article/Display.html
rt/share/html/SelfService/Article/Search.html
rt/share/html/SelfService/Article/autohandler
rt/share/html/SelfService/Attachment/dhandler
rt/share/html/SelfService/Closed.html
rt/share/html/SelfService/Create.html
rt/share/html/SelfService/CreateTicketInQueue.html
rt/share/html/SelfService/Display.html
rt/share/html/SelfService/Elements/GotoTicket
rt/share/html/SelfService/Elements/Header
rt/share/html/SelfService/Elements/MyRequests
rt/share/html/SelfService/Elements/SearchArticle
rt/share/html/SelfService/Helpers/Autocomplete/CustomFieldValues
rt/share/html/SelfService/Helpers/Autocomplete/Users
rt/share/html/SelfService/Prefs.html
rt/share/html/SelfService/Update.html
rt/share/html/SelfService/index.html
rt/share/html/Ticket/Attachment/WithHeaders/dhandler
rt/share/html/Ticket/Attachment/dhandler
rt/share/html/Ticket/Create.html
rt/share/html/Ticket/Crypt.html
rt/share/html/Ticket/Display.html
rt/share/html/Ticket/Elements/AddAttachments
rt/share/html/Ticket/Elements/AddWatchers
rt/share/html/Ticket/Elements/Bookmark
rt/share/html/Ticket/Elements/ClickToShowHistory
rt/share/html/Ticket/Elements/DelayShowHistory
rt/share/html/Ticket/Elements/EditBasics
rt/share/html/Ticket/Elements/EditCustomFields
rt/share/html/Ticket/Elements/EditDates
rt/share/html/Ticket/Elements/EditMerge
rt/share/html/Ticket/Elements/EditPeople
rt/share/html/Ticket/Elements/EditTransactionCustomFields
rt/share/html/Ticket/Elements/EditWatchers
rt/share/html/Ticket/Elements/LoadTextAttachments
rt/share/html/Ticket/Elements/PreviewScrips
rt/share/html/Ticket/Elements/Reminders
rt/share/html/Ticket/Elements/SelectStatus
rt/share/html/Ticket/Elements/ShowAttachments
rt/share/html/Ticket/Elements/ShowBasics
rt/share/html/Ticket/Elements/ShowCustomFields
rt/share/html/Ticket/Elements/ShowDates
rt/share/html/Ticket/Elements/ShowDependencyStatus
rt/share/html/Ticket/Elements/ShowGroupMembers
rt/share/html/Ticket/Elements/ShowPeople
rt/share/html/Ticket/Elements/ShowPriority
rt/share/html/Ticket/Elements/ShowQueue
rt/share/html/Ticket/Elements/ShowRequestor
rt/share/html/Ticket/Elements/ShowRequestorExtraInfo
rt/share/html/Ticket/Elements/ShowRequestorTickets
rt/share/html/Ticket/Elements/ShowRequestorTicketsActive
rt/share/html/Ticket/Elements/ShowRequestorTicketsAll
rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive
rt/share/html/Ticket/Elements/ShowSimplifiedRecipients
rt/share/html/Ticket/Elements/ShowSummary
rt/share/html/Ticket/Elements/ShowTime
rt/share/html/Ticket/Elements/ShowUpdateStatus
rt/share/html/Ticket/Elements/UpdateCc
rt/share/html/Ticket/Forward.html
rt/share/html/Ticket/Graphs/Elements/EditGraphProperties
rt/share/html/Ticket/Graphs/Elements/ShowGraph
rt/share/html/Ticket/Graphs/Elements/ShowLegends
rt/share/html/Ticket/Graphs/dhandler
rt/share/html/Ticket/Graphs/index.html
rt/share/html/Ticket/History.html
rt/share/html/Ticket/Modify.html
rt/share/html/Ticket/ModifyAll.html
rt/share/html/Ticket/ModifyDates.html
rt/share/html/Ticket/ModifyLinks.html
rt/share/html/Ticket/ModifyPeople.html
rt/share/html/Ticket/Reminders.html
rt/share/html/Ticket/ShowEmailRecord.html
rt/share/html/Ticket/Update.html
rt/share/html/Ticket/autohandler
rt/share/html/Tools/MyDay.html
rt/share/html/Tools/MyReminders.html
rt/share/html/Tools/index.html
rt/share/html/User/Elements/Portlets/ActiveTickets
rt/share/html/User/Elements/Portlets/CreateTicket
rt/share/html/User/Elements/Portlets/ExtraInfo
rt/share/html/User/Elements/Portlets/InactiveTickets
rt/share/html/User/Elements/TicketList
rt/share/html/User/Elements/UserInfo
rt/share/html/User/History.html
rt/share/html/User/Prefs.html
rt/share/html/User/Search.html
rt/share/html/User/Summary.html
rt/share/html/Widgets/BulkEdit
rt/share/html/Widgets/BulkProcess
rt/share/html/Widgets/ComboBox
rt/share/html/Widgets/FinalizeWidgetArguments
rt/share/html/Widgets/Form/Boolean
rt/share/html/Widgets/Form/Integer
rt/share/html/Widgets/Form/Select
rt/share/html/Widgets/Form/String
rt/share/html/Widgets/SavedSearch
rt/share/html/Widgets/SelectionBox
rt/share/html/Widgets/TitleBox
rt/share/html/Widgets/TitleBoxEnd
rt/share/html/Widgets/TitleBoxStart
rt/share/html/autohandler
rt/share/html/dhandler
rt/share/html/index.html
rt/share/html/l
rt/share/html/l_unsafe
rt/share/html/m/_elements/footer
rt/share/html/m/_elements/full_site_link
rt/share/html/m/_elements/header
rt/share/html/m/_elements/login
rt/share/html/m/_elements/menu
rt/share/html/m/_elements/ticket_list
rt/share/html/m/_elements/ticket_menu
rt/share/html/m/_elements/wrapper
rt/share/html/m/dhandler
rt/share/html/m/index.html
rt/share/html/m/logout
rt/share/html/m/ticket/autohandler
rt/share/html/m/ticket/create
rt/share/html/m/ticket/history
rt/share/html/m/ticket/reply
rt/share/html/m/ticket/select_create_queue
rt/share/html/m/ticket/show
rt/share/html/m/tickets/search
rt/share/po/ar.po
rt/share/po/bg.po
rt/share/po/ca.po
rt/share/po/cs.po
rt/share/po/da.po
rt/share/po/de.po
rt/share/po/el.po
rt/share/po/en.po
rt/share/po/en_GB.po
rt/share/po/es.po
rt/share/po/et.po
rt/share/po/eu.po
rt/share/po/fa.po
rt/share/po/fi.po
rt/share/po/fr.po
rt/share/po/hr.po
rt/share/po/hu.po
rt/share/po/id.po
rt/share/po/is.po
rt/share/po/it.po
rt/share/po/ja.po
rt/share/po/lt.po
rt/share/po/lv.po
rt/share/po/nb.po
rt/share/po/nl.po
rt/share/po/nn.po
rt/share/po/oc.po
rt/share/po/pl.po
rt/share/po/pt.po
rt/share/po/pt_BR.po
rt/share/po/pt_PT.po
rt/share/po/rt.pot
rt/share/po/ru.po
rt/share/po/sk.po
rt/share/po/sl.po
rt/share/po/sr.po
rt/share/po/sv.po
rt/share/po/tr.po
rt/share/po/zh_CN.po
rt/share/po/zh_TW.po
rt/share/static/css/base/ticket-form.css
rt/t/api/ticket.t
rt/t/lifecycles/basics.t
rt/t/lifecycles/dates.t
rt/t/lifecycles/moving.t
rt/t/lifecycles/types.t
rt/t/lifecycles/unresolved-deps.t
rt/t/mail/gnupg-outgoing-encrypted-plaintext.t
rt/t/mail/gnupg-outgoing-encrypted.t
rt/t/mail/gnupg-outgoing-plain-plaintext.t
rt/t/mail/gnupg-outgoing-plain.t
rt/t/mail/gnupg-outgoing-signed-plaintext.t
rt/t/mail/gnupg-outgoing-signed.t
rt/t/mail/gnupg-outgoing-signed_encrypted-plaintext.t
rt/t/mail/gnupg-outgoing-signed_encrypted.t
rt/t/mail/mime_decoding.t
rt/t/mail/one-time-recipients.t
rt/t/shredder/02group_member.t
rt/t/web/cf_groupings.t
rt/t/web/cf_textarea.t
rt/t/web/csrf.t
rt/t/web/dashboards-in-menu.t
rt/t/web/gnupg-select-keys-on-create.t
rt/t/web/gnupg-select-keys-on-update.t
rt/t/web/installer.t
rt/t/web/language_update.t

index 158e703..6b126b6 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 6581240..c760455 100755 (executable)
--- a/rt/README
+++ b/rt/README
@@ -233,25 +233,20 @@ more information about commercial support options, please send email to
 <sales@bestpractical.com> to discuss rates and availability.
 
 
-MAILING LISTS AND WIKI
-----------------------
+COMMUNITY FORUM AND WIKI
+------------------------
 
 To keep up to date on the latest RT tips, techniques and extensions, you
-may wish to join the rt-users mailing list.  Send a message to:
+may wish to join the RT Community Forum website.  You can find it here:
 
-      rt-users-request@lists.bestpractical.com
+      https://forum.bestpractical.com
 
-with the body of the message consisting of only the word:
+You'll find many different categories of discussion there including the
+RT Users category for general RT topics. If you're interested
+in customizing RT code, there is a category for RT Developers with more
+technical topics.
 
-     subscribe
-
-If you're interested in hacking on RT, you'll want to subscribe to
-<rt-devel@lists.bestpractical.com>.  Subscribe to it with instructions
-similar to those above.  Address questions about the stable release to
-the rt-users list, and questions about the development version to the
-rt-devel list.
-
-The RT wiki, at http://requesttracker.wikia.com/ , is also a potential
+The RT wiki, at https://rt-wiki.bestpractical.com, is also a potential
 resource.
 
 
@@ -262,7 +257,7 @@ If you believe you've discovered a security issue in RT, please send an
 email to <security@bestpractical.com> with a detailed description of the
 issue, and a secure means to respond to you (such as your PGP public
 key).  You can find our PGP key and fingerprint at
-http://bestpractical.com/security/
+https://bestpractical.com/security/
 
 
 BUGS
@@ -270,7 +265,7 @@ BUGS
 
 RT's a pretty complex application, and as you get up to speed, you might
 run into some trouble. Generally, it's best to ask about things you run
-into on the rt-users mailinglist (or pick up a commercial support
+into on the Community Forum (or pick up a commercial support
 contract from Best Practical). But, sometimes people do run into
 bugs. In the exceedingly unlikely event that you hit a bug in RT, please
 report it! We'd love to hear about problems you have with RT, so we can
@@ -281,7 +276,7 @@ fix them.  To report a bug, send email to <rt-bugs@bestpractical.com>.
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index fe2a8ed..5d3502b 100755 (executable)
--- a/rt/bin/rt
+++ b/rt/bin/rt
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 434b243..37e74f1 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 43f57a8..f591ea4 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 2b37270..165ebfb 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 2e736ff..6aaec0d 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Revision.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for RT rt-4.2.13.
+# Generated by GNU Autoconf 2.69 for RT rt-4.2.14.
 #
 # Report bugs to <rt-bugs@bestpractical.com>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='RT'
 PACKAGE_TARNAME='rt'
-PACKAGE_VERSION='rt-4.2.13'
-PACKAGE_STRING='RT rt-4.2.13'
+PACKAGE_VERSION='rt-4.2.14'
+PACKAGE_STRING='RT rt-4.2.14'
 PACKAGE_BUGREPORT='rt-bugs@bestpractical.com'
 PACKAGE_URL=''
 
@@ -1325,7 +1325,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures RT rt-4.2.13 to adapt to many kinds of systems.
+\`configure' configures RT rt-4.2.14 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1386,7 +1386,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of RT rt-4.2.13:";;
+     short | recursive ) echo "Configuration of RT rt-4.2.14:";;
    esac
   cat <<\_ACEOF
 
@@ -1502,7 +1502,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-RT configure rt-4.2.13
+RT configure rt-4.2.14
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1519,7 +1519,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by RT $as_me rt-4.2.13, which was
+It was created by RT $as_me rt-4.2.14, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -1876,7 +1876,7 @@ rt_version_major=4
 
 rt_version_minor=2
 
-rt_version_patch=13
+rt_version_patch=14
 
 test "x$rt_version_major" = 'x' && rt_version_major=0
 test "x$rt_version_minor" = 'x' && rt_version_minor=0
@@ -3676,7 +3676,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by RT $as_me rt-4.2.13, which was
+This file was extended by RT $as_me rt-4.2.14, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -3729,7 +3729,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-RT config.status rt-4.2.13
+RT config.status rt-4.2.14
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index a8cb705..ba8fdfc 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c4a39e2..6ea0105 100644 (file)
@@ -5,7 +5,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 7aae405..94fc6ef 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index aba2d8c..e1766af 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index b66a753..a399c11 100644 (file)
@@ -5,7 +5,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -54,7 +54,7 @@ my $LICENSE  = <<'EOL';
 
 COPYRIGHT:
 
-This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
                                          <sales@bestpractical.com>
 
 (Except where explicitly superseded by other copyright notices)
index 58743fd..674c1f2 100644 (file)
@@ -4,7 +4,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 9b16196..fc7a2cf 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 3c92306..e163867 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/rt/devel/tools/rt-parse-mail-log b/rt/devel/tools/rt-parse-mail-log
new file mode 100755 (executable)
index 0000000..080c52c
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/bash
+# BEGIN BPS TAGGED BLOCK {{{
+#
+# COPYRIGHT:
+#
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
+#                                          <sales@bestpractical.com>
+#
+# (Except where explicitly superseded by other copyright notices)
+#
+#
+# LICENSE:
+#
+# This work is made available to you under the terms of Version 2 of
+# the GNU General Public License. A copy of that license should have
+# been provided with this software, but in any event can be snarfed
+# from www.gnu.org.
+#
+# This work is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 or visit their web page on the internet at
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+#
+#
+# CONTRIBUTION SUBMISSION POLICY:
+#
+# (The following paragraph is not intended to limit the rights granted
+# to you to modify and distribute this software under the terms of
+# the GNU General Public License and is only of importance to you if
+# you choose to contribute your changes and enhancements to the
+# community by submitting them to Best Practical Solutions, LLC.)
+#
+# By intentionally submitting any modifications, corrections or
+# derivatives to this work, or any other work intended for use with
+# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+# you are the copyright holder for those contributions and you grant
+# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+# royalty-free, perpetual, license to use, copy, create derivative
+# works based on those contributions, and sublicense and distribute
+# those contributions and any derivatives thereof.
+#
+# END BPS TAGGED BLOCK }}}
+function usage() {
+    if [[ -n $1 ]]; then
+        echo "$1"
+        echo
+    fi
+    echo "usage: $0 <logfile> ticket <id>"
+}
+
+logfile=$1
+what=$2
+id=$3
+
+if [[ -z $logfile || -z $what || -z $id ]]; then
+    usage
+    exit 1
+fi
+
+case "$what" in
+    ticket)
+        pattern='\[info\]: <rt-[^-]+-\d+-\d+-\d+\.'$id
+        ;;
+    *)
+        usage "Er, what?"
+        exit 1
+        ;;
+esac
+
+grep -nP "$pattern" $logfile \
+    | perl -aF- -ne 'print "\n" if $last != $F[3]; print join "-", @F; $last = $F[3];' \
+    | ([[ -t 1 ]] && $PAGER || cat)
index e9fdcc6..9b92e47 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 8e7c808..9421c05 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index b0e6cc3..8a39cd3 100644 (file)
@@ -104,8 +104,10 @@ NOTE that 'rt3' is the default name of the RT database, change it in the
 command above if your database is named differently.
 
 This step should not produce any errors or warnings. If you see any, restore
-your database from the backup you made at step 1, and send a report to the
-rt-users@lists.bestpractical.com mailing list.
+your database from the backup you made at step 1 and examine the errors to
+determine the cause. Consult your DBA for MySQL-specific issues. For RT
+issues, you can post to the community forum at L<https://forum.bestpractical.com>
+for help or send email to sales@bestpractical.com for professional assistance.
 
 =item 8.
 
index 7e37d00..1647396 100644 (file)
@@ -121,6 +121,9 @@ started:
     $ mkdir -p local/static/css/localstyle
     $ cp -R share/static/css/rudder/* local/static/css/localstyle/
 
+    $ mkdir -p local/html/NoAuth/css/localstyle
+    $ cp -R share/html/NoAuth/css/rudder/* local/html/NoAuth/css/localstyle/
+
 You can call your "localstyle" directory whatever you want and you don't
 have to copy the rudder theme to start from, but it's a good place to
 start off for RT4.
index 23ce51e..e254665 100644 (file)
@@ -204,6 +204,11 @@ before the fix and succeeds after.
 
 =head1 git quickstart
 
+The process below describes how to get a copy of an RT repo,
+modify it, and submit your changes as a patch. You can also create
+an account on GitHub, fork RT, and submit a PR. GitHub has documentation
+on this process: L<https://help.github.com/articles/fork-a-repo/>.
+
 =over
 
 =item 1.
@@ -299,7 +304,8 @@ This will print out the names of the files as it creates them.
 =item 9.
 
 Attach these files to an email using your standard email client, and
-send it to C<rt-devel@bestpractical.com>.
+send it to C<rt-bugs@bestpractical.com>. This will create a ticket in
+our public RT instance at L<https://issues.bestpractical.com>.
 
 =back
 
index 5bf4291..7120e38 100644 (file)
@@ -16,8 +16,8 @@ After a security vulnerability is reported to Best Practical and
 verified, we attempt to resolve it in as timely a fashion as possible.
 Best Practical support customers will be notified before we disclose the
 information to the public.  All security announcements will be sent to
-C<rt-announce@bestpractical.com>, which includes
-C<rt-users@bestpractical.com> and C<rt-devel@bestpractical.com>.
+C<rt-announce@bestpractical.com> and posted to the community forum at
+L<https://forum.bestpractical.com>
 
 As the tests for security vulnerabilities are often nearly identical to
 working exploits, sensitive tests will be embargoed for a period of six
index 3a87850..4d55c9d 100644 (file)
@@ -623,6 +623,23 @@ Precedence header, it will be preserved.
 
 Set($DefaultMailPrecedence, "bulk");
 
+=item C<$OverrideMailPrecedence>
+
+C<$OverrideMailPrecedence> is used for overwriting the C<$DefaultMailPrecedence>
+value for a queue.
+
+The option is a hash reference of queue id/name to precedence. If you set the
+precedence to C<undef>, a Precedence header will not be added to the mail.
+
+This option only works if C<$DefaultMailPrecedence> is enabled.
+
+=cut
+
+Set($OverrideMailPrecedence, {
+#    'Queue 1' => "list",
+#    'Queue 2' => undef,
+});
+
 =item C<$DefaultErrorMailPrecedence>
 
 C<$DefaultErrorMailPrecedence> is used to control the default
@@ -1135,7 +1152,7 @@ This can also be configured via the web UI.
 
 =cut
 
-Set($LogoURL, RT->Config->Get('WebImagesURL') . "bpslogo.png");
+Set($LogoURL, RT->Config->Get('WebImagesURL') . "request-tracker-logo.png");
 
 =item C<$LogoLinkURL>
 
@@ -1152,7 +1169,7 @@ will be passed through C<loc> for localization.
 
 =cut
 
-Set($LogoAltText, "Best Practical Solutions, LLC corporate logo");
+Set($LogoAltText, "Request Tracker logo");
 
 =item C<$WebNoAuthRegex>
 
@@ -1252,10 +1269,23 @@ search results on the front page.
 
 Set($DefaultSummaryRows, 10);
 
+=item C<@RefreshIntervals>
+
+This setting defines the possible homepage and search result refresh
+options. Each value is a number of seconds. You should not include a value
+of C<0>, as that is always provided as an option.
+
+See also L</HomePageRefreshInterval> and L</SearchResultsRefreshInterval>.
+
+=cut
+
+Set(@RefreshIntervals, qw(120 300 600 1200 3600 7200));
+
 =item C<$HomePageRefreshInterval>
 
 C<$HomePageRefreshInterval> is default number of seconds to refresh
-the RT home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
+the RT home page. Choose from any value in L</@RefreshIntervals>,
+or the default of C<0> for no automatic refresh.
 
 =cut
 
@@ -1313,9 +1343,9 @@ Set($TicketsItemMapSize, 1000);
 
 =item C<$SearchResultsRefreshInterval>
 
-C<$SearchResultsRefreshInterval> is default number of seconds to
-refresh search results in RT. Choose from [0, 120, 300, 600, 1200,
-3600, 7200].
+C<$SearchResultsRefreshInterval> is default number of seconds to refresh
+search results in RT. Choose from any value in L</@RefreshIntervals>, or
+the default of C<0> for no automatic refresh.
 
 =cut
 
@@ -1688,6 +1718,15 @@ you will have no access to Articles.
 
 Set($HideArticleSearchOnReplyCreate, 0);
 
+=item C<$LinkArticlesOnInclude>
+
+Set this to 0 to suppress the default behavior of automatically linking
+to Articles when they are included in a message.
+
+=cut
+
+Set($LinkArticlesOnInclude, 1);
+
 =back
 
 
@@ -2134,7 +2173,7 @@ higher numbers denoting greater effort.
 
 =cut
 
-Set($BcryptCost, 11);
+Set($BcryptCost, 12);
 
 =back
 
index a659d8e..dd1b334 100755 (executable)
@@ -66,7 +66,7 @@ sub acl {
     # if there's already an rt_user, use it.
     my @row = $dbh->selectrow_array( "SELECT usename FROM pg_user WHERE usename = '$db_user'" );
     unless ( $row[0] ) {
-         push @acls, "CREATE USER \"$db_user\" WITH PASSWORD '$db_pass' NOCREATEDB NOCREATEUSER;";
+         push @acls, "CREATE USER \"$db_user\" WITH PASSWORD '$db_pass' NOCREATEDB NOSUPERUSER;";
     }
 
     foreach my $table (@tables) {
index f4df8ec..b328390 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index abd8530..44ae16e 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 8ca22c8..f289a0d 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 043b21a..9a097e9 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 5fe1288..ed6da65 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 172a40a..3dfe215 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c167957..d083b8c 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 800274c..582d7c1 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index e745223..b96f9a1 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c9c4ebd..6920dde 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 1b430cb..ed442d1 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 837e20f..b4a360a 100644 (file)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 690ec01..eabc512 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 39c3483..31cf14b 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 069309d..91aeb15 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -81,6 +81,10 @@ use vars qw($BasePath
  $MasonDataDir
  $MasonSessionDir);
 
+# Set Email::Address module var before anything else loads.
+# This avoids an algorithmic complexity denial of service vulnerability.
+# See T#157608 and CVE-2015-7686 for more information.
+$Email::Address::COMMENT_NEST_LEVEL = 1;
 
 RT->LoadGeneratedData();
 
@@ -765,6 +769,7 @@ sub InstallMode {
 sub LoadGeneratedData {
     my $class = shift;
     my $pm_path = ( File::Spec->splitpath( $INC{'RT.pm'} ) )[1];
+    $pm_path = File::Spec->rel2abs( $pm_path );
 
     require "$pm_path/RT/Generated.pm" || die "Couldn't load RT::Generated: $@";
     $class->CanonicalizeGeneratedPaths();
@@ -964,7 +969,9 @@ sub Deprecated {
 Please report them to rt-bugs@bestpractical.com, if you know what's
 broken and have at least some idea of what needs to be fixed.
 
-If you're not sure what's going on, report them rt-devel@lists.bestpractical.com.
+If you're not sure what's going on, start a discussion in the RT Developers
+category on the community forum at L<https://forum.bestpractical.com> or
+send email to sales@bestpractical.com for professional assistance.
 
 =head1 SEE ALSO
 
index 0a79ecb..64dd587 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index fb3f401..1a9a1cc 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index ac4dfe6..0f8002d 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 9cc324e..72ee89c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 9a48706..91f2065 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index a7a4627..905b86c 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index dd32da7..0fcdf0d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 1b63d53..311a7c0 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 1dece09..ce8628d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 23a796c..b209177 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index ec98fa3..d7e0f35 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 924419b..03fc391 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index e9638b7..41f2b78 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index f6e986d..82841d5 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 33ca477..b64f205 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c163451..56382f7 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 8ec0b0e..999ca7b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 73695cd..ab656fd 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 2361ead..8f64fdd 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 3fa6e3b..db51001 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 4ebf5e5..54c152d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 158afe1..f6692c4 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 48bee18..f7dee10 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index cd6d661..1ce3077 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 9bf39f0..484ff8a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index fbbf9f5..262ecce 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 238ad63..6088d31 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index cd083d5..ae2aa68 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 8661bf4..1b6f9cb 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 2c955cc..6d179fe 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 726758a..63ddd66 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 00f790a..14b639f 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 73da9bb..2041bd1 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 9943b57..aa965e0 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -632,6 +632,65 @@ sub FindDependencies {
 
     $self->SUPER::FindDependencies($walker, $deps);
     $deps->Add( out => $self->Object );
+
+    # dashboards in menu attribute has dependencies on each of its dashboards
+    if ($self->Name eq RT::User::_PrefName("DashboardsInMenu")) {
+        my $content = $self->Content;
+        for my $pane (values %{ $content || {} }) {
+            for my $dash_id (@$pane) {
+                my $attr = RT::Attribute->new($self->CurrentUser);
+                $attr->LoadById($dash_id);
+                $deps->Add( out => $attr );
+            }
+        }
+    }
+    # homepage settings attribute has dependencies on each of the searches in it
+    elsif ($self->Name eq RT::User::_PrefName("HomepageSettings")) {
+        my $content = $self->Content;
+        for my $pane (values %{ $content || {} }) {
+            for my $component (@$pane) {
+                # this hairy code mirrors what's in the saved search loader
+                # in /Elements/ShowSearch
+                if ($component->{type} eq 'saved') {
+                    if ($component->{name} =~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/) {
+                        my $attr = RT::Attribute->new($self->CurrentUser);
+                        $attr->LoadById($3);
+                        $deps->Add( out => $attr );
+                    }
+                }
+                elsif ($component->{type} eq 'system') {
+                    my ($search) = RT::System->new($self->CurrentUser)->Attributes->Named( 'Search - ' . $component->{name} );
+                    unless ( $search && $search->Id ) {
+                        my (@custom_searches) = RT::System->new($self->CurrentUser)->Attributes->Named('SavedSearch');
+                        foreach my $custom (@custom_searches) {
+                            if ($custom->Description eq $component->{name}) { $search = $custom; last }
+                        }
+                    }
+                    $deps->Add( out => $search ) if $search;
+                }
+            }
+        }
+    }
+    # dashboards have dependencies on all the searches and dashboards they use
+    elsif ($self->Name eq 'Dashboard') {
+        my $content = $self->Content;
+        for my $pane (values %{ $content->{Panes} || {} }) {
+            for my $component (@$pane) {
+                if ($component->{portlet_type} eq 'search' || $component->{portlet_type} eq 'dashboard') {
+                    my $attr = RT::Attribute->new($self->CurrentUser);
+                    $attr->LoadById($component->{id});
+                    $deps->Add( out => $attr );
+                }
+            }
+        }
+    }
+    # each subscription depends on its dashboard
+    elsif ($self->Name eq 'Subscription') {
+        my $content = $self->Content;
+        my $attr = RT::Attribute->new($self->CurrentUser);
+        $attr->LoadById($content->{DashboardId});
+        $deps->Add( out => $attr );
+    }
 }
 
 sub PreInflate {
@@ -640,11 +699,220 @@ sub PreInflate {
 
     if ($data->{Object} and ref $data->{Object}) {
         my $on_uid = ${ $data->{Object} };
-        return if $importer->ShouldSkipTransaction($on_uid);
+
+        # skip attributes of objects we're not inflating
+        # exception: we don't inflate RT->System, but we want RT->System's searches
+        unless ($on_uid eq RT->System->UID && $data->{Name} =~ /Search/) {
+            return if $importer->ShouldSkipTransaction($on_uid);
+        }
     }
+
     return $class->SUPER::PreInflate( $importer, $uid, $data );
 }
 
+# this method will be called repeatedly to fix up this attribute's contents
+# (a list of searches, dashboards) during the import process, as the
+# ordinary dependency resolution system can't quite handle the subtlety
+# involved (e.g. a user simply declares out-dependencies on all of her
+# attributes, but those attributes (e.g. dashboards, saved searches,
+# dashboards in menu preferences) have dependencies amongst themselves).
+# if this attribute (e.g. a user's dashboard) fails to load an attribute
+# (e.g. a user's saved search) then it postpones and repeats the postinflate
+# process again when that user's saved search has been imported
+# this method updates Content each time through, each time getting closer and
+# closer to the fully inflated attribute
+sub PostInflateFixup {
+    my $self     = shift;
+    my $importer = shift;
+    my $spec     = shift;
+
+    # decode UIDs to be raw dashboard IDs
+    if ($self->Name eq RT::User::_PrefName("DashboardsInMenu")) {
+        my $content = $self->Content;
+
+        for my $pane (values %{ $content || {} }) {
+            for (@$pane) {
+                if (ref($_) eq 'SCALAR') {
+                    my $attr = $importer->LookupObj($$_);
+                    if ($attr) {
+                        $_ = $attr->Id;
+                    }
+                    else {
+                        $importer->Postpone(
+                            for    => $$_,
+                            uid    => $spec->{uid},
+                            method => 'PostInflateFixup',
+                        );
+                    }
+                }
+            }
+        }
+        $self->SetContent($content);
+    }
+    # decode UIDs to be saved searches
+    elsif ($self->Name eq RT::User::_PrefName("HomepageSettings")) {
+        my $content = $self->Content;
+
+        for my $pane (values %{ $content || {} }) {
+            for (@$pane) {
+                if (ref($_->{uid}) eq 'SCALAR') {
+                    my $uid = $_->{uid};
+                    my $attr = $importer->LookupObj($$uid);
+
+                    if ($attr) {
+                        if ($_->{type} eq 'saved') {
+                            $_->{name} = join '-', $attr->ObjectType, $attr->ObjectId, 'SavedSearch', $attr->id;
+                        }
+                        # if type is system, name doesn't need to change
+                        # if type is anything else, pass it through as is
+                        delete $_->{uid};
+                    }
+                    else {
+                        $importer->Postpone(
+                            for    => $$uid,
+                            uid    => $spec->{uid},
+                            method => 'PostInflateFixup',
+                        );
+                    }
+                }
+            }
+        }
+        $self->SetContent($content);
+    }
+    elsif ($self->Name eq 'Dashboard') {
+        my $content = $self->Content;
+
+        for my $pane (values %{ $content->{Panes} || {} }) {
+            for (@$pane) {
+                if (ref($_->{uid}) eq 'SCALAR') {
+                    my $uid = $_->{uid};
+                    my $attr = $importer->LookupObj($$uid);
+
+                    if ($attr) {
+                        # update with the new id numbers assigned to us
+                        $_->{id} = $attr->Id;
+                        $_->{privacy} = join '-', $attr->ObjectType, $attr->ObjectId;
+                        delete $_->{uid};
+                    }
+                    else {
+                        $importer->Postpone(
+                            for    => $$uid,
+                            uid    => $spec->{uid},
+                            method => 'PostInflateFixup',
+                        );
+                    }
+                }
+            }
+        }
+        $self->SetContent($content);
+    }
+    elsif ($self->Name eq 'Subscription') {
+        my $content = $self->Content;
+        if (ref($content->{DashboardId}) eq 'SCALAR') {
+            my $attr = $importer->LookupObj(${ $content->{DashboardId} });
+            if ($attr) {
+                $content->{DashboardId} = $attr->Id;
+            }
+            else {
+                $importer->Postpone(
+                    for    => ${ $content->{DashboardId} },
+                    uid    => $spec->{uid},
+                    method => 'PostInflateFixup',
+                );
+            }
+        }
+        $self->SetContent($content);
+    }
+}
+
+sub PostInflate {
+    my $self = shift;
+    my ($importer, $uid) = @_;
+
+    $self->SUPER::PostInflate( $importer, $uid );
+
+    # this method is separate because it needs to be callable multple times,
+    # and we can't guarantee that SUPER::PostInflate can deal with that
+    $self->PostInflateFixup($importer, { uid => $uid });
+}
+
+sub Serialize {
+    my $self = shift;
+    my %args = (@_);
+    my %store = $self->SUPER::Serialize(@_);
+
+    # encode raw dashboard IDs to be UIDs
+    if ($store{Name} eq RT::User::_PrefName("DashboardsInMenu")) {
+        my $content = $self->_DeserializeContent($store{Content});
+        for my $pane (values %{ $content || {} }) {
+            for (@$pane) {
+                my $attr = RT::Attribute->new($self->CurrentUser);
+                $attr->LoadById($_);
+                $_ = \($attr->UID);
+            }
+        }
+        $store{Content} = $self->_SerializeContent($content);
+    }
+    # encode saved searches to be UIDs
+    elsif ($store{Name} eq RT::User::_PrefName("HomepageSettings")) {
+        my $content = $self->_DeserializeContent($store{Content});
+        for my $pane (values %{ $content || {} }) {
+            for (@$pane) {
+                # this hairy code mirrors what's in the saved search loader
+                # in /Elements/ShowSearch
+                if ($_->{type} eq 'saved') {
+                    if ($_->{name} =~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/) {
+                        my $attr = RT::Attribute->new($self->CurrentUser);
+                        $attr->LoadById($3);
+                        $_->{uid} = \($attr->UID);
+                    }
+                    # if we can't parse the name, just pass it through
+                }
+                elsif ($_->{type} eq 'system') {
+                    my ($search) = RT::System->new($self->CurrentUser)->Attributes->Named( 'Search - ' . $_->{name} );
+                    unless ( $search && $search->Id ) {
+                        my (@custom_searches) = RT::System->new($self->CurrentUser)->Attributes->Named('SavedSearch');
+                        foreach my $custom (@custom_searches) {
+                            if ($custom->Description eq $_->{name}) { $search = $custom; last }
+                        }
+                    }
+                    # if we can't load the search, just pass it through
+                    if ($search) {
+                        $_->{uid} = \($search->UID);
+                    }
+                }
+                # pass through everything else (e.g. component)
+            }
+        }
+        $store{Content} = $self->_SerializeContent($content);
+    }
+    # encode saved searches and dashboards to be UIDs
+    elsif ($store{Name} eq 'Dashboard') {
+        my $content = $self->_DeserializeContent($store{Content}) || {};
+        for my $pane (values %{ $content->{Panes} || {} }) {
+            for (@$pane) {
+                if ($_->{portlet_type} eq 'search' || $_->{portlet_type} eq 'dashboard') {
+                    my $attr = RT::Attribute->new($self->CurrentUser);
+                    $attr->LoadById($_->{id});
+                    $_->{uid} = \($attr->UID);
+                }
+                # pass through everything else (e.g. component)
+            }
+        }
+        $store{Content} = $self->_SerializeContent($content);
+    }
+    # encode subscriptions to have dashboard UID
+    elsif ($store{Name} eq 'Subscription') {
+        my $content = $self->_DeserializeContent($store{Content});
+        my $attr = RT::Attribute->new($self->CurrentUser);
+        $attr->LoadById($content->{DashboardId});
+        $content->{DashboardId} = \($attr->UID);
+        $store{Content} = $self->_SerializeContent($content);
+    }
+
+    return %store;
+}
+
 RT::Base->_ImportOverlays();
 
 1;
index e0ede6a..2a8869a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 77b3736..679e10c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 21ea336..63d9914 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index cb483cb..f3d0bf0 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c985641..eea9be5 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 6ff2b57..91a5adf 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 537aa54..f371cd4 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 44a2655..092162b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 6302726..d72b2c3 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 66c8106..5e1224b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index e005f69..3196bd3 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 651a4bb..3e4e3ce 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index a1629e9..4e9dc05 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 72319ee..657d65f 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 73c1b84..08b89cd 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 31f0143..0a7189d 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 97153c6..73bfb04 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index a6e0132..bbb90dc 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 656741c..7d9fbf3 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -143,6 +143,14 @@ can be set for each config optin:
 our %META;
 %META = (
     # General user overridable options
+    RestrictReferrerLogin => {
+        PostLoadCheck => sub {
+            my $self = shift;
+            if (defined($self->Get('RestrictReferrerLogin'))) {
+                RT::Logger->error("The config option 'RestrictReferrerLogin' is incorrect, and should be 'RestrictLoginReferrer' instead.");
+            }
+        },
+    },
     DefaultQueue => {
         Section         => 'General',
         Overridable     => 1,
@@ -307,23 +315,42 @@ our %META;
             Hints       => 'Only for entry, not display', #loc
         },
     },
+    RefreshIntervals => {
+        Type => 'ARRAY',
+        PostLoadCheck => sub {
+            my $self = shift;
+            my @intervals = $self->Get('RefreshIntervals');
+            if (grep { $_ == 0 } @intervals) {
+                $RT::Logger->warning("Please do not include a 0 value in RefreshIntervals, as that default is already added for you.");
+            }
+        },
+    },
     SearchResultsRefreshInterval => {
         Section         => 'General',                       #loc
         Overridable     => 1,
         SortOrder       => 9,
         Widget          => '/Widgets/Form/Select',
         WidgetArguments => {
-            Description => 'Search results refresh interval',                            #loc
-            Values      => [qw(0 120 300 600 1200 3600 7200)],
-            ValuesLabel => {
-                0 => "Don't refresh search results.",                      #loc
-                120 => "Refresh search results every 2 minutes.",          #loc
-                300 => "Refresh search results every 5 minutes.",          #loc
-                600 => "Refresh search results every 10 minutes.",         #loc
-                1200 => "Refresh search results every 20 minutes.",        #loc
-                3600 => "Refresh search results every 60 minutes.",        #loc
-                7200 => "Refresh search results every 120 minutes.",       #loc
-            },  
+            Description => 'Search results refresh interval', #loc
+            Callback    => sub {
+                my @values = RT->Config->Get('RefreshIntervals');
+                my %labels = (
+                    0 => "Don't refresh search results.", # loc
+                );
+
+                for my $value (@values) {
+                    if ($value % 60 == 0) {
+                        $labels{$value} = ['Refresh search results every [quant,_1,minute,minutes].', $value / 60]; # loc
+                    }
+                    else {
+                        $labels{$value} = ['Refresh search results every [quant,_1,second,seconds].', $value]; # loc
+                    }
+                }
+
+                unshift @values, 0;
+
+                return { Values => \@values, ValuesLabel => \%labels };
+            },
         },  
     },
 
@@ -335,16 +362,25 @@ our %META;
         Widget          => '/Widgets/Form/Select',
         WidgetArguments => {
             Description => 'Home page refresh interval',                #loc
-            Values      => [qw(0 120 300 600 1200 3600 7200)],
-            ValuesLabel => {
-                0 => "Don't refresh home page.",                  #loc
-                120 => "Refresh home page every 2 minutes.",      #loc
-                300 => "Refresh home page every 5 minutes.",      #loc
-                600 => "Refresh home page every 10 minutes.",     #loc
-                1200 => "Refresh home page every 20 minutes.",    #loc
-                3600 => "Refresh home page every 60 minutes.",    #loc
-                7200 => "Refresh home page every 120 minutes.",   #loc
-            },  
+            Callback    => sub {
+                my @values = RT->Config->Get('RefreshIntervals');
+                my %labels = (
+                    0 => "Don't refresh home page.", # loc
+                );
+
+                for my $value (@values) {
+                    if ($value % 60 == 0) {
+                        $labels{$value} = ['Refresh home page every [quant,_1,minute,minutes].', $value / 60]; # loc
+                    }
+                    else {
+                        $labels{$value} = ['Refresh home page every [quant,_1,second,seconds].', $value]; # loc
+                    }
+                }
+
+                unshift @values, 0;
+
+                return { Values => \@values, ValuesLabel => \%labels };
+            },
         },  
     },
 
index dfc0bf0..2f2d2c7 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -430,7 +430,11 @@ An un-localized error message desribing the problem.
 
 sub SignEncrypt {
     my $self = shift;
-    my %args = (@_);
+    my %args = (
+        Sign => 1,
+        Encrypt => 1,
+        @_,
+    );
 
     my $entity = $args{'Entity'};
     if ( $args{'Sign'} && !defined $args{'Signer'} ) {
index e986447..69d25bb 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 2dfc452..f96f4ee 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 6a33e5d..8e39b95 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 743ab2b..fbd8108 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -184,6 +184,14 @@ sub Probe {
             \$buf, \$err
         ) };
 
+        if ($err && $err =~ /Invalid command/) {
+            ($buf, $err) = ('', '');
+            safe_run_child { run3( [$bin, "list", "-commands"],
+                \undef,
+                \$buf, \$err
+            ) };
+        }
+
         if ($? or $err) {
             $RT::Logger->warning(
                 "RT's SMIME libraries couldn't successfully execute openssl.".
index 74d44e3..60a2fa7 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 3940e83..ac714a9 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index e4a6a96..6e6e35c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 6b5c624..d8706f6 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 100c035..5d2617e 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 5ec7293..d37f7a4 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index dc15c2f..488d903 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index b30f3b2..7f76853 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index c88fb67..0125dda 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index a5436c6..ad31640 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 7f4e323..216e5ec 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index a1412e5..aad2f25 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 396223d..78156d1 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
index 51d5dae..8c4c0f1 100644 (file)
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2017 Best Practical Solutions, LLC
 #                                          <sales@bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
@@ -123,7 +123,8 @@ sub SmartParseMIMEEntityFromScalar {
             if ( -f $temp_file ) {
 
                 my $entity = $self->ParseMIMEEntityFromFile( $temp_file, $args{'Decode'}, $args{'Exact'} );
-                unlink($temp_file);
+                unlink($temp_file)
+                    or RT->Log