From 919e930aa9279b3c5cd12b593889cd6de79d67bf Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 12 Jun 2015 15:19:00 -0700 Subject: rt 4.0.23 --- rt/Makefile.in | 2 +- rt/README | 13 +++-- rt/bin/rt | 6 +- rt/bin/rt-crontool.in | 2 +- rt/bin/rt-mailgate.in | 2 +- rt/bin/rt.in | 6 +- rt/configure | 20 +++---- rt/devel/tools/change-loc-msgstr | 2 +- rt/devel/tools/extract-message-catalog | 2 +- rt/devel/tools/factory | 2 +- rt/devel/tools/license_tag | 4 +- rt/devel/tools/merge-rosetta.pl | 2 +- rt/devel/tools/rt-apache | 2 +- rt/devel/tools/rt-attributes-editor | 2 +- rt/devel/tools/rt-static-docs | 2 +- rt/devel/tools/tweak-template-locstring | 2 +- rt/docs/UPGRADING.mysql | 4 +- rt/etc/upgrade/3.8-ical-extension.in | 2 +- rt/etc/upgrade/4.0-customfield-checkbox-extension | 2 +- .../upgrade/4.0-customfield-checkbox-extension.in | 2 +- rt/etc/upgrade/generate-rtaddressregexp.in | 2 +- rt/etc/upgrade/sanity-check-stylesheets.pl | 2 +- rt/etc/upgrade/shrink_cgm_table.pl | 2 +- rt/etc/upgrade/shrink_transactions_table.pl | 2 +- rt/etc/upgrade/split-out-cf-categories.in | 2 +- rt/etc/upgrade/upgrade-articles | 2 +- rt/etc/upgrade/upgrade-articles.in | 2 +- rt/etc/upgrade/upgrade-mysql-schema.pl | 2 +- rt/etc/upgrade/vulnerable-passwords.in | 2 +- rt/lib/RT.pm | 2 +- rt/lib/RT/ACE.pm | 2 +- rt/lib/RT/ACL.pm | 35 ++++------- rt/lib/RT/Action.pm | 2 +- rt/lib/RT/Action/AutoOpen.pm | 2 +- rt/lib/RT/Action/Autoreply.pm | 2 +- rt/lib/RT/Action/CreateTickets.pm | 9 ++- rt/lib/RT/Action/CreateTickets.pm.orig | 14 ++--- rt/lib/RT/Action/EscalatePriority.pm | 2 +- rt/lib/RT/Action/ExtractSubjectTag.pm | 2 +- rt/lib/RT/Action/LinearEscalate.pm | 2 +- rt/lib/RT/Action/Notify.pm | 2 +- rt/lib/RT/Action/NotifyAsComment.pm | 2 +- rt/lib/RT/Action/NotifyGroup.pm | 2 +- rt/lib/RT/Action/NotifyGroupAsComment.pm | 2 +- rt/lib/RT/Action/RecordComment.pm | 2 +- rt/lib/RT/Action/RecordCorrespondence.pm | 2 +- rt/lib/RT/Action/SendEmail.pm | 3 +- rt/lib/RT/Action/SetPriority.pm | 2 +- rt/lib/RT/Action/SetStatus.pm | 2 +- rt/lib/RT/Action/UserDefined.pm | 2 +- rt/lib/RT/Approval.pm | 2 +- rt/lib/RT/Approval/Rule.pm | 2 +- rt/lib/RT/Approval/Rule/Created.pm | 2 +- rt/lib/RT/Approval/Rule/NewPending.pm | 2 +- rt/lib/RT/Approval/Rule/Passed.pm | 2 +- rt/lib/RT/Approval/Rule/Rejected.pm | 2 +- rt/lib/RT/Article.pm | 2 +- rt/lib/RT/Articles.pm | 30 +++------- rt/lib/RT/Attachment.pm | 6 +- rt/lib/RT/Attachments.pm | 17 ++---- rt/lib/RT/Attribute.pm | 2 +- rt/lib/RT/Attributes.pm | 2 +- rt/lib/RT/Base.pm | 2 +- rt/lib/RT/CachedGroupMember.pm | 2 +- rt/lib/RT/CachedGroupMembers.pm | 2 +- rt/lib/RT/Class.pm | 2 +- rt/lib/RT/Classes.pm | 29 +++------- rt/lib/RT/Condition.pm | 2 +- rt/lib/RT/Condition/AnyTransaction.pm | 2 +- rt/lib/RT/Condition/BeforeDue.pm | 2 +- rt/lib/RT/Condition/CloseTicket.pm | 2 +- rt/lib/RT/Condition/Overdue.pm | 2 +- rt/lib/RT/Condition/OwnerChange.pm | 2 +- rt/lib/RT/Condition/PriorityChange.pm | 2 +- rt/lib/RT/Condition/PriorityExceeds.pm | 2 +- rt/lib/RT/Condition/QueueChange.pm | 2 +- rt/lib/RT/Condition/ReopenTicket.pm | 2 +- rt/lib/RT/Condition/StatusChange.pm | 2 +- rt/lib/RT/Condition/UserDefined.pm | 2 +- rt/lib/RT/Config.pm | 4 +- rt/lib/RT/Crypt/GnuPG.pm | 2 +- rt/lib/RT/CurrentUser.pm | 2 +- rt/lib/RT/CustomField.pm | 2 +- rt/lib/RT/CustomFieldValue.pm | 2 +- rt/lib/RT/CustomFieldValues.pm | 2 +- rt/lib/RT/CustomFieldValues/External.pm | 2 +- rt/lib/RT/CustomFieldValues/Groups.pm | 2 +- rt/lib/RT/CustomFields.pm | 22 +++---- rt/lib/RT/Dashboard.pm | 10 +--- rt/lib/RT/Dashboard/Mailer.pm | 2 +- rt/lib/RT/Dashboards.pm | 2 +- rt/lib/RT/Date.pm | 2 +- rt/lib/RT/EmailParser.pm | 4 +- rt/lib/RT/Generated.pm.in | 2 +- rt/lib/RT/Graph/Tickets.pm | 2 +- rt/lib/RT/Group.pm | 2 +- rt/lib/RT/GroupMember.pm | 2 +- rt/lib/RT/GroupMembers.pm | 2 +- rt/lib/RT/Groups.pm | 31 +++++----- rt/lib/RT/Handle.pm | 2 +- rt/lib/RT/I18N.pm | 10 +++- rt/lib/RT/I18N/cs.pm | 2 +- rt/lib/RT/I18N/de.pm | 2 +- rt/lib/RT/I18N/fr.pm | 2 +- rt/lib/RT/I18N/i_default.pm | 2 +- rt/lib/RT/I18N/ru.pm | 2 +- rt/lib/RT/Installer.pm | 2 +- rt/lib/RT/Interface/CLI.pm | 2 +- rt/lib/RT/Interface/Email.pm | 2 +- rt/lib/RT/Interface/Email/Auth/GnuPG.pm | 2 +- rt/lib/RT/Interface/Email/Auth/MailFrom.pm | 2 +- rt/lib/RT/Interface/REST.pm | 2 +- rt/lib/RT/Interface/Web.pm | 2 +- rt/lib/RT/Interface/Web/Handler.pm | 2 +- rt/lib/RT/Interface/Web/Menu.pm | 2 +- rt/lib/RT/Interface/Web/QueryBuilder.pm | 2 +- rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm | 2 +- rt/lib/RT/Interface/Web/Request.pm | 2 +- rt/lib/RT/Interface/Web/Session.pm | 2 +- rt/lib/RT/Lifecycle.pm | 2 +- rt/lib/RT/Link.pm | 2 +- rt/lib/RT/Links.pm | 2 +- rt/lib/RT/ObjectClass.pm | 2 +- rt/lib/RT/ObjectClasses.pm | 2 +- rt/lib/RT/ObjectCustomField.pm | 2 +- rt/lib/RT/ObjectCustomFieldValue.pm | 2 +- rt/lib/RT/ObjectCustomFieldValues.pm | 2 +- rt/lib/RT/ObjectCustomFields.pm | 2 +- rt/lib/RT/ObjectTopic.pm | 2 +- rt/lib/RT/ObjectTopics.pm | 2 +- rt/lib/RT/Plugin.pm | 2 +- rt/lib/RT/Pod/HTML.pm | 2 +- rt/lib/RT/Pod/HTMLBatch.pm | 2 +- rt/lib/RT/Pod/Search.pm | 2 +- rt/lib/RT/Principal.pm | 2 +- rt/lib/RT/Principals.pm | 2 +- rt/lib/RT/Queue.pm | 2 +- rt/lib/RT/Queues.pm | 2 +- rt/lib/RT/Record.pm | 3 +- rt/lib/RT/Reminders.pm | 2 +- rt/lib/RT/Report/Tickets.pm | 12 +--- rt/lib/RT/Report/Tickets/Entry.pm | 2 +- rt/lib/RT/Rule.pm | 2 +- rt/lib/RT/Ruleset.pm | 2 +- rt/lib/RT/SQL.pm | 2 +- rt/lib/RT/SavedSearch.pm | 5 +- rt/lib/RT/SavedSearches.pm | 2 +- rt/lib/RT/Scrip.pm | 2 +- rt/lib/RT/ScripAction.pm | 2 +- rt/lib/RT/ScripActions.pm | 2 +- rt/lib/RT/ScripCondition.pm | 2 +- rt/lib/RT/ScripConditions.pm | 2 +- rt/lib/RT/Scrips.pm | 36 ++++-------- rt/lib/RT/Search.pm | 2 +- rt/lib/RT/Search/ActiveTicketsInQueue.pm | 2 +- rt/lib/RT/Search/FromSQL.pm | 2 +- rt/lib/RT/Search/Googleish.pm | 2 +- rt/lib/RT/SearchBuilder.pm | 2 +- rt/lib/RT/SharedSetting.pm | 2 +- rt/lib/RT/SharedSettings.pm | 2 +- rt/lib/RT/Shredder.pm | 4 +- rt/lib/RT/Shredder/ACE.pm | 2 +- rt/lib/RT/Shredder/Attachment.pm | 2 +- rt/lib/RT/Shredder/CachedGroupMember.pm | 2 +- rt/lib/RT/Shredder/Constants.pm | 2 +- rt/lib/RT/Shredder/CustomField.pm | 2 +- rt/lib/RT/Shredder/CustomFieldValue.pm | 2 +- rt/lib/RT/Shredder/Dependencies.pm | 2 +- rt/lib/RT/Shredder/Dependency.pm | 2 +- rt/lib/RT/Shredder/Exceptions.pm | 2 +- rt/lib/RT/Shredder/Group.pm | 2 +- rt/lib/RT/Shredder/GroupMember.pm | 2 +- rt/lib/RT/Shredder/Link.pm | 2 +- rt/lib/RT/Shredder/ObjectCustomFieldValue.pm | 2 +- rt/lib/RT/Shredder/POD.pm | 2 +- rt/lib/RT/Shredder/Plugin.pm | 2 +- rt/lib/RT/Shredder/Plugin/Attachments.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base/Dump.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base/Search.pm | 2 +- rt/lib/RT/Shredder/Plugin/Objects.pm | 2 +- rt/lib/RT/Shredder/Plugin/SQLDump.pm | 2 +- rt/lib/RT/Shredder/Plugin/Summary.pm | 2 +- rt/lib/RT/Shredder/Plugin/Tickets.pm | 2 +- rt/lib/RT/Shredder/Plugin/Users.pm | 14 ++--- rt/lib/RT/Shredder/Principal.pm | 2 +- rt/lib/RT/Shredder/Queue.pm | 2 +- rt/lib/RT/Shredder/Record.pm | 2 +- rt/lib/RT/Shredder/Scrip.pm | 2 +- rt/lib/RT/Shredder/ScripAction.pm | 2 +- rt/lib/RT/Shredder/ScripCondition.pm | 2 +- rt/lib/RT/Shredder/Template.pm | 2 +- rt/lib/RT/Shredder/Ticket.pm | 2 +- rt/lib/RT/Shredder/Transaction.pm | 2 +- rt/lib/RT/Shredder/User.pm | 2 +- rt/lib/RT/Squish.pm | 2 +- rt/lib/RT/Squish/CSS.pm | 2 +- rt/lib/RT/Squish/JS.pm | 2 +- rt/lib/RT/System.pm | 2 +- rt/lib/RT/Template.pm | 14 +++-- rt/lib/RT/Templates.pm | 38 ++++-------- rt/lib/RT/Test.pm | 4 +- rt/lib/RT/Test/Apache.pm | 2 +- rt/lib/RT/Test/Email.pm | 2 +- rt/lib/RT/Test/GnuPG.pm | 2 +- rt/lib/RT/Test/Web.pm | 2 +- rt/lib/RT/Ticket.pm | 2 +- rt/lib/RT/Tickets.pm | 13 +---- rt/lib/RT/Tickets_SQL.pm | 2 +- rt/lib/RT/Topic.pm | 2 +- rt/lib/RT/Topics.pm | 2 +- rt/lib/RT/Transaction.pm | 4 +- rt/lib/RT/Transactions.pm | 25 ++------ rt/lib/RT/URI.pm | 2 +- rt/lib/RT/URI/a.pm | 2 +- rt/lib/RT/URI/base.pm | 2 +- rt/lib/RT/URI/fsck_com_article.pm | 2 +- rt/lib/RT/URI/fsck_com_rt.pm | 2 +- rt/lib/RT/URI/t.pm | 2 +- rt/lib/RT/User.pm | 2 +- rt/lib/RT/Users.pm | 2 +- rt/lib/RT/Util.pm | 2 +- rt/sbin/rt-attributes-viewer.in | 2 +- rt/sbin/rt-clean-sessions.in | 2 +- rt/sbin/rt-dump-metadata.in | 2 +- rt/sbin/rt-email-dashboards.in | 2 +- rt/sbin/rt-email-digest.in | 2 +- rt/sbin/rt-email-group-admin.in | 2 +- rt/sbin/rt-fulltext-indexer.in | 7 ++- rt/sbin/rt-message-catalog | 2 +- rt/sbin/rt-preferences-viewer.in | 2 +- rt/sbin/rt-server.fcgi.in | 2 +- rt/sbin/rt-server.in | 2 +- rt/sbin/rt-session-viewer.in | 2 +- rt/sbin/rt-setup-database.in | 2 +- rt/sbin/rt-setup-fulltext-index.in | 2 +- rt/sbin/rt-shredder.in | 2 +- rt/sbin/rt-test-dependencies.in | 2 +- rt/sbin/rt-validate-aliases.in | 2 +- rt/sbin/rt-validator.in | 6 +- rt/sbin/standalone_httpd.in | 2 +- .../html/Admin/Articles/Classes/CustomFields.html | 2 +- .../html/Admin/Articles/Classes/GroupRights.html | 2 +- rt/share/html/Admin/Articles/Classes/Modify.html | 2 +- rt/share/html/Admin/Articles/Classes/Objects.html | 2 +- rt/share/html/Admin/Articles/Classes/Topics.html | 2 +- .../html/Admin/Articles/Classes/UserRights.html | 2 +- rt/share/html/Admin/Articles/Classes/index.html | 2 +- rt/share/html/Admin/Articles/Elements/Topics | 2 +- rt/share/html/Admin/Articles/index.html | 2 +- rt/share/html/Admin/CustomFields/GroupRights.html | 2 +- rt/share/html/Admin/CustomFields/Modify.html | 2 +- rt/share/html/Admin/CustomFields/Objects.html | 2 +- rt/share/html/Admin/CustomFields/UserRights.html | 2 +- rt/share/html/Admin/CustomFields/index.html | 2 +- rt/share/html/Admin/Elements/AddCustomFieldValue | 2 +- rt/share/html/Admin/Elements/ConfigureMyRT | 2 +- rt/share/html/Admin/Elements/CreateUserCalled | 2 +- rt/share/html/Admin/Elements/EditCustomField | 2 +- rt/share/html/Admin/Elements/EditCustomFieldValues | 2 +- .../Admin/Elements/EditCustomFieldValuesSource | 2 +- rt/share/html/Admin/Elements/EditCustomFields | 2 +- rt/share/html/Admin/Elements/EditQueueWatcherGroup | 2 +- rt/share/html/Admin/Elements/EditQueueWatchers | 2 +- rt/share/html/Admin/Elements/EditRights | 2 +- .../html/Admin/Elements/EditRightsCategoryTabs | 2 +- rt/share/html/Admin/Elements/EditScrip | 2 +- rt/share/html/Admin/Elements/EditScrips | 2 +- rt/share/html/Admin/Elements/EditTemplates | 2 +- rt/share/html/Admin/Elements/EditUserComments | 2 +- rt/share/html/Admin/Elements/Header | 2 +- .../html/Admin/Elements/ListGlobalCustomFields | 2 +- rt/share/html/Admin/Elements/ListGlobalScrips | 2 +- rt/share/html/Admin/Elements/ModifyTemplate | 2 +- rt/share/html/Admin/Elements/PickCustomFields | 2 +- rt/share/html/Admin/Elements/PickObjects | 2 +- rt/share/html/Admin/Elements/Portal | 2 +- rt/share/html/Admin/Elements/QueueRightsForUser | 2 +- rt/share/html/Admin/Elements/SelectCustomField | 2 +- .../Admin/Elements/SelectCustomFieldLookupType | 2 +- .../Admin/Elements/SelectCustomFieldRenderType | 2 +- rt/share/html/Admin/Elements/SelectCustomFieldType | 2 +- rt/share/html/Admin/Elements/SelectGroups | 2 +- rt/share/html/Admin/Elements/SelectModifyGroup | 2 +- rt/share/html/Admin/Elements/SelectModifyQueue | 2 +- rt/share/html/Admin/Elements/SelectModifyUser | 2 +- rt/share/html/Admin/Elements/SelectNewGroupMembers | 2 +- rt/share/html/Admin/Elements/SelectRights | 2 +- rt/share/html/Admin/Elements/SelectScrip | 2 +- rt/share/html/Admin/Elements/SelectScripAction | 2 +- rt/share/html/Admin/Elements/SelectScripCondition | 2 +- .../html/Admin/Elements/SelectSingleOrMultiple | 2 +- rt/share/html/Admin/Elements/SelectStage | 2 +- rt/share/html/Admin/Elements/SelectTemplate | 2 +- rt/share/html/Admin/Elements/SelectUsers | 2 +- rt/share/html/Admin/Elements/ShowKeyInfo | 2 +- .../Admin/Global/CustomFields/Class-Article.html | 2 +- .../html/Admin/Global/CustomFields/Groups.html | 2 +- .../Admin/Global/CustomFields/Queue-Tickets.html | 2 +- .../Global/CustomFields/Queue-Transactions.html | 2 +- .../html/Admin/Global/CustomFields/Queues.html | 2 +- rt/share/html/Admin/Global/CustomFields/Users.html | 2 +- rt/share/html/Admin/Global/CustomFields/index.html | 2 +- rt/share/html/Admin/Global/GroupRights.html | 2 +- rt/share/html/Admin/Global/MyRT.html | 2 +- rt/share/html/Admin/Global/Scrip.html | 2 +- rt/share/html/Admin/Global/Scrips.html | 2 +- rt/share/html/Admin/Global/Template.html | 2 +- rt/share/html/Admin/Global/Templates.html | 2 +- rt/share/html/Admin/Global/Topics.html | 2 +- rt/share/html/Admin/Global/UserRights.html | 2 +- rt/share/html/Admin/Global/index.html | 2 +- rt/share/html/Admin/Groups/GroupRights.html | 2 +- rt/share/html/Admin/Groups/History.html | 2 +- rt/share/html/Admin/Groups/Members.html | 2 +- rt/share/html/Admin/Groups/Modify.html | 2 +- rt/share/html/Admin/Groups/UserRights.html | 2 +- rt/share/html/Admin/Groups/index.html | 2 +- rt/share/html/Admin/Queues/CustomField.html | 2 +- rt/share/html/Admin/Queues/CustomFields.html | 2 +- rt/share/html/Admin/Queues/GroupRights.html | 2 +- rt/share/html/Admin/Queues/History.html | 2 +- rt/share/html/Admin/Queues/Modify.html | 2 +- rt/share/html/Admin/Queues/People.html | 2 +- rt/share/html/Admin/Queues/Scrip.html | 2 +- rt/share/html/Admin/Queues/Scrips.html | 2 +- rt/share/html/Admin/Queues/Template.html | 2 +- rt/share/html/Admin/Queues/Templates.html | 2 +- rt/share/html/Admin/Queues/UserRights.html | 2 +- rt/share/html/Admin/Queues/index.html | 2 +- rt/share/html/Admin/Tools/Configuration.html | 4 +- rt/share/html/Admin/Tools/Queries.html | 2 +- rt/share/html/Admin/Tools/Shredder/Dumps/dhandler | 2 +- .../Admin/Tools/Shredder/Elements/DumpFileLink | 2 +- .../Admin/Tools/Shredder/Elements/Error/NoRights | 2 +- .../Admin/Tools/Shredder/Elements/Error/NoStorage | 2 +- .../Tools/Shredder/Elements/Object/RT--Attachment | 2 +- .../Tools/Shredder/Elements/Object/RT--Ticket | 2 +- .../Admin/Tools/Shredder/Elements/Object/RT--User | 2 +- .../Admin/Tools/Shredder/Elements/ObjectCheckBox | 2 +- .../Admin/Tools/Shredder/Elements/PluginArguments | 2 +- .../html/Admin/Tools/Shredder/Elements/PluginHelp | 2 +- .../Admin/Tools/Shredder/Elements/SelectObjects | 2 +- .../Admin/Tools/Shredder/Elements/SelectPlugin | 2 +- rt/share/html/Admin/Tools/Shredder/autohandler | 2 +- rt/share/html/Admin/Tools/Shredder/index.html | 2 +- rt/share/html/Admin/Tools/Theme.html | 2 +- rt/share/html/Admin/Tools/index.html | 2 +- rt/share/html/Admin/Users/CustomFields.html | 2 +- rt/share/html/Admin/Users/GnuPG.html | 2 +- rt/share/html/Admin/Users/History.html | 2 +- rt/share/html/Admin/Users/Memberships.html | 2 +- rt/share/html/Admin/Users/Modify.html | 2 +- rt/share/html/Admin/Users/MyRT.html | 2 +- rt/share/html/Admin/Users/index.html | 2 +- rt/share/html/Admin/autohandler | 2 +- rt/share/html/Admin/index.html | 2 +- rt/share/html/Approvals/Display.html | 2 +- rt/share/html/Approvals/Elements/Approve | 2 +- rt/share/html/Approvals/Elements/PendingMyApproval | 2 +- rt/share/html/Approvals/Elements/ShowDependency | 2 +- rt/share/html/Approvals/autohandler | 2 +- rt/share/html/Approvals/index.html | 2 +- rt/share/html/Articles/Article/Delete.html | 2 +- rt/share/html/Articles/Article/Display.html | 2 +- rt/share/html/Articles/Article/Edit.html | 2 +- rt/share/html/Articles/Article/Elements/EditBasics | 2 +- .../Articles/Article/Elements/EditCustomFields | 2 +- rt/share/html/Articles/Article/Elements/EditLinks | 2 +- rt/share/html/Articles/Article/Elements/EditTopics | 2 +- .../Article/Elements/LinkEntryInstructions | 2 +- .../html/Articles/Article/Elements/Preformatted | 2 +- .../Articles/Article/Elements/SearchByCustomField | 2 +- .../Articles/Article/Elements/SelectSavedSearches | 2 +- .../Articles/Article/Elements/SelectSearchPrivacy | 2 +- .../html/Articles/Article/Elements/ShowHistory | 2 +- rt/share/html/Articles/Article/Elements/ShowLinks | 2 +- .../Articles/Article/Elements/ShowSavedSearches | 2 +- .../Articles/Article/Elements/ShowSearchCriteria | 2 +- rt/share/html/Articles/Article/Elements/ShowTopics | 2 +- .../html/Articles/Article/ExtractFromTicket.html | 2 +- .../html/Articles/Article/ExtractIntoClass.html | 2 +- .../html/Articles/Article/ExtractIntoTopic.html | 2 +- rt/share/html/Articles/Article/History.html | 2 +- rt/share/html/Articles/Article/PreCreate.html | 2 +- rt/share/html/Articles/Article/Search.html | 2 +- rt/share/html/Articles/Elements/BeforeMessageBox | 2 +- rt/share/html/Articles/Elements/CheckSkipCreate | 2 +- rt/share/html/Articles/Elements/CreateArticle | 2 +- rt/share/html/Articles/Elements/GotoArticle | 2 +- rt/share/html/Articles/Elements/IncludeArticle | 2 +- rt/share/html/Articles/Elements/NewestArticles | 2 +- rt/share/html/Articles/Elements/QuickSearch | 2 +- rt/share/html/Articles/Elements/SelectClass | 2 +- rt/share/html/Articles/Elements/ShowTopic | 2 +- rt/share/html/Articles/Elements/ShowTopicLink | 2 +- rt/share/html/Articles/Elements/UpdatedArticles | 2 +- rt/share/html/Articles/Topics.html | 2 +- rt/share/html/Articles/index.html | 2 +- .../html/Dashboards/Elements/DashboardsForObject | 2 +- rt/share/html/Dashboards/Elements/Deleted | 2 +- rt/share/html/Dashboards/Elements/HiddenSearches | 2 +- rt/share/html/Dashboards/Elements/ListOfDashboards | 2 +- rt/share/html/Dashboards/Elements/SelectPrivacy | 2 +- rt/share/html/Dashboards/Elements/ShowDashboards | 2 +- .../html/Dashboards/Elements/ShowPortlet/component | 2 +- .../html/Dashboards/Elements/ShowPortlet/dashboard | 2 +- .../html/Dashboards/Elements/ShowPortlet/search | 2 +- rt/share/html/Dashboards/Modify.html | 2 +- rt/share/html/Dashboards/Queries.html | 2 +- rt/share/html/Dashboards/Render.html | 2 +- rt/share/html/Dashboards/Subscription.html | 2 +- rt/share/html/Dashboards/dhandler | 2 +- rt/share/html/Dashboards/index.html | 2 +- rt/share/html/Download/CustomFieldValue/dhandler | 2 +- rt/share/html/Elements/BevelBoxRaisedEnd | 2 +- rt/share/html/Elements/BevelBoxRaisedStart | 2 +- rt/share/html/Elements/CSRF | 2 +- rt/share/html/Elements/Callback | 2 +- rt/share/html/Elements/Checkbox | 2 +- rt/share/html/Elements/CollectionAsTable/Header | 2 +- .../html/Elements/CollectionAsTable/ParseFormat | 2 +- rt/share/html/Elements/CollectionAsTable/Row | 2 +- rt/share/html/Elements/CollectionList | 2 +- rt/share/html/Elements/CollectionListPaging | 2 +- rt/share/html/Elements/ColumnMap | 2 +- rt/share/html/Elements/CreateTicket | 2 +- rt/share/html/Elements/Dashboards | 2 +- rt/share/html/Elements/EditCustomField | 2 +- rt/share/html/Elements/EditCustomFieldAutocomplete | 2 +- rt/share/html/Elements/EditCustomFieldBinary | 2 +- rt/share/html/Elements/EditCustomFieldCombobox | 2 +- rt/share/html/Elements/EditCustomFieldDate | 2 +- rt/share/html/Elements/EditCustomFieldDateTime | 2 +- rt/share/html/Elements/EditCustomFieldFreeform | 2 +- rt/share/html/Elements/EditCustomFieldIPAddress | 2 +- .../html/Elements/EditCustomFieldIPAddressRange | 2 +- rt/share/html/Elements/EditCustomFieldImage | 2 +- rt/share/html/Elements/EditCustomFieldSelect | 2 +- rt/share/html/Elements/EditCustomFieldText | 2 +- rt/share/html/Elements/EditCustomFieldWikitext | 2 +- rt/share/html/Elements/EditLinks | 2 +- rt/share/html/Elements/EditPassword | 2 +- rt/share/html/Elements/EditTimeValue | 2 +- rt/share/html/Elements/EmailInput | 2 +- rt/share/html/Elements/Error | 2 +- rt/share/html/Elements/Footer | 2 +- rt/share/html/Elements/Framekiller | 2 +- rt/share/html/Elements/GnuPG/KeyIssues | 2 +- .../html/Elements/GnuPG/SelectKeyForEncryption | 2 +- rt/share/html/Elements/GnuPG/SelectKeyForSigning | 2 +- rt/share/html/Elements/GnuPG/SignEncryptWidget | 2 +- rt/share/html/Elements/GotoTicket | 2 +- rt/share/html/Elements/Header | 2 +- rt/share/html/Elements/HeaderJavascript | 2 +- rt/share/html/Elements/ListActions | 2 +- rt/share/html/Elements/ListMenu | 2 +- rt/share/html/Elements/Login | 2 +- rt/share/html/Elements/LoginRedirectWarning | 2 +- rt/share/html/Elements/Logo | 2 +- rt/share/html/Elements/MakeClicky | 2 +- rt/share/html/Elements/Menu | 2 +- rt/share/html/Elements/MessageBox | 2 +- rt/share/html/Elements/MyAdminQueues | 2 +- rt/share/html/Elements/MyRT | 2 +- rt/share/html/Elements/MyReminders | 2 +- rt/share/html/Elements/MyRequests | 2 +- rt/share/html/Elements/MySupportQueues | 2 +- rt/share/html/Elements/MyTickets | 2 +- rt/share/html/Elements/PageLayout | 2 +- rt/share/html/Elements/PersonalQuickbar | 2 +- rt/share/html/Elements/QueriesAsComment | 2 +- rt/share/html/Elements/QueryString | 2 +- rt/share/html/Elements/QueueSummaryByLifecycle | 2 +- rt/share/html/Elements/QueueSummaryByStatus | 2 +- rt/share/html/Elements/QuickCreate | 18 +++--- rt/share/html/Elements/Quicksearch | 2 +- rt/share/html/Elements/RT__Article/ColumnMap | 2 +- rt/share/html/Elements/RT__Class/ColumnMap | 2 +- rt/share/html/Elements/RT__CustomField/ColumnMap | 2 +- rt/share/html/Elements/RT__Dashboard/ColumnMap | 2 +- rt/share/html/Elements/RT__Group/ColumnMap | 2 +- rt/share/html/Elements/RT__Queue/ColumnMap | 2 +- rt/share/html/Elements/RT__SavedSearch/ColumnMap | 2 +- rt/share/html/Elements/RT__Scrip/ColumnMap | 2 +- rt/share/html/Elements/RT__Template/ColumnMap | 2 +- rt/share/html/Elements/RT__Ticket/ColumnMap | 2 +- rt/share/html/Elements/RT__User/ColumnMap | 2 +- rt/share/html/Elements/Refresh | 2 +- rt/share/html/Elements/RefreshHomepage | 2 +- rt/share/html/Elements/SavedSearches | 2 +- rt/share/html/Elements/ScrubHTML | 2 +- rt/share/html/Elements/Section | 2 +- rt/share/html/Elements/SelectAttachmentField | 2 +- rt/share/html/Elements/SelectBoolean | 2 +- rt/share/html/Elements/SelectCustomFieldOperator | 2 +- rt/share/html/Elements/SelectCustomFieldValue | 2 +- rt/share/html/Elements/SelectDate | 2 +- rt/share/html/Elements/SelectDateRelation | 2 +- rt/share/html/Elements/SelectDateType | 2 +- rt/share/html/Elements/SelectEqualityOperator | 2 +- rt/share/html/Elements/SelectGroups | 2 +- rt/share/html/Elements/SelectIPRelation | 2 +- rt/share/html/Elements/SelectLang | 2 +- rt/share/html/Elements/SelectLinkType | 2 +- rt/share/html/Elements/SelectMatch | 2 +- rt/share/html/Elements/SelectNewTicketQueue | 2 +- rt/share/html/Elements/SelectOwner | 2 +- rt/share/html/Elements/SelectOwnerAutocomplete | 2 +- rt/share/html/Elements/SelectOwnerDropdown | 2 +- rt/share/html/Elements/SelectPriority | 2 +- rt/share/html/Elements/SelectQueue | 2 +- rt/share/html/Elements/SelectResultsPerPage | 2 +- rt/share/html/Elements/SelectSortOrder | 2 +- rt/share/html/Elements/SelectStatus | 2 +- rt/share/html/Elements/SelectTicketSortBy | 2 +- rt/share/html/Elements/SelectTicketTypes | 2 +- rt/share/html/Elements/SelectTimeUnits | 2 +- rt/share/html/Elements/SelectTimezone | 2 +- rt/share/html/Elements/SelectUsers | 2 +- rt/share/html/Elements/SelectWatcherType | 2 +- rt/share/html/Elements/SetupSessionCookie | 2 +- rt/share/html/Elements/ShowCustomFieldBinary | 2 +- rt/share/html/Elements/ShowCustomFieldDate | 2 +- rt/share/html/Elements/ShowCustomFieldDateTime | 2 +- rt/share/html/Elements/ShowCustomFieldImage | 2 +- rt/share/html/Elements/ShowCustomFieldText | 2 +- rt/share/html/Elements/ShowCustomFieldWikitext | 2 +- rt/share/html/Elements/ShowCustomFields | 2 +- rt/share/html/Elements/ShowLink | 2 +- rt/share/html/Elements/ShowLinks | 2 +- rt/share/html/Elements/ShowMemberships | 2 +- rt/share/html/Elements/ShowRelationLabel | 2 +- rt/share/html/Elements/ShowReminders | 2 +- rt/share/html/Elements/ShowSearch | 2 +- rt/share/html/Elements/ShowUser | 2 +- rt/share/html/Elements/ShowUserConcise | 2 +- rt/share/html/Elements/ShowUserEmailFrequency | 2 +- rt/share/html/Elements/ShowUserVerbose | 2 +- rt/share/html/Elements/SimpleSearch | 2 +- rt/share/html/Elements/Submit | 2 +- rt/share/html/Elements/Tabs | 2 +- rt/share/html/Elements/TicketList | 2 +- rt/share/html/Elements/TitleBox | 2 +- rt/share/html/Elements/TitleBoxEnd | 2 +- rt/share/html/Elements/TitleBoxStart | 2 +- rt/share/html/Elements/ValidateCustomFields | 2 +- rt/share/html/Elements/WidgetBar | 2 +- .../html/Helpers/Autocomplete/CustomFieldValues | 2 +- rt/share/html/Helpers/Autocomplete/Groups | 2 +- rt/share/html/Helpers/Autocomplete/Owners | 2 +- rt/share/html/Helpers/Autocomplete/Users | 2 +- rt/share/html/Helpers/Autocomplete/autohandler | 2 +- rt/share/html/Helpers/TicketHistory | 2 +- rt/share/html/Helpers/Toggle/ShowRequestor | 2 +- rt/share/html/Helpers/Toggle/TicketBookmark | 2 +- rt/share/html/Helpers/autohandler | 2 +- rt/share/html/Install/Basics.html | 2 +- rt/share/html/Install/DatabaseDetails.html | 2 +- rt/share/html/Install/DatabaseType.html | 2 +- rt/share/html/Install/Elements/Errors | 2 +- rt/share/html/Install/Elements/Wrapper | 2 +- rt/share/html/Install/Finish.html | 2 +- rt/share/html/Install/Global.html | 2 +- rt/share/html/Install/Initialize.html | 2 +- rt/share/html/Install/Sendmail.html | 2 +- rt/share/html/Install/autohandler | 2 +- rt/share/html/Install/index.html | 2 +- rt/share/html/NoAuth/Helpers/CustomLogo/dhandler | 2 +- rt/share/html/NoAuth/Login.html | 2 +- rt/share/html/NoAuth/Logout.html | 2 +- rt/share/html/NoAuth/Reminder.html | 2 +- rt/share/html/NoAuth/RichText/autohandler | 2 +- rt/share/html/NoAuth/RichText/dhandler | 2 +- rt/share/html/NoAuth/css/aileron/InHeader | 2 +- rt/share/html/NoAuth/css/aileron/base.css | 2 +- rt/share/html/NoAuth/css/aileron/boxes.css | 2 +- rt/share/html/NoAuth/css/aileron/forms.css | 2 +- rt/share/html/NoAuth/css/aileron/images/dhandler | 2 +- rt/share/html/NoAuth/css/aileron/layout.css | 2 +- rt/share/html/NoAuth/css/aileron/login.css | 2 +- rt/share/html/NoAuth/css/aileron/main.css | 2 +- rt/share/html/NoAuth/css/aileron/misc.css | 2 +- rt/share/html/NoAuth/css/aileron/msie.css | 2 +- rt/share/html/NoAuth/css/aileron/msie6.css | 2 +- rt/share/html/NoAuth/css/aileron/nav.css | 2 +- rt/share/html/NoAuth/css/aileron/ticket-lists.css | 2 +- rt/share/html/NoAuth/css/aileron/ticket-search.css | 2 +- rt/share/html/NoAuth/css/aileron/ticket.css | 2 +- rt/share/html/NoAuth/css/autohandler | 2 +- rt/share/html/NoAuth/css/ballard/InHeader | 2 +- rt/share/html/NoAuth/css/ballard/base.css | 2 +- rt/share/html/NoAuth/css/ballard/boxes.css | 2 +- rt/share/html/NoAuth/css/ballard/images/dhandler | 2 +- rt/share/html/NoAuth/css/ballard/layout.css | 2 +- rt/share/html/NoAuth/css/ballard/main.css | 2 +- rt/share/html/NoAuth/css/ballard/misc.css | 2 +- rt/share/html/NoAuth/css/ballard/msie.css | 2 +- rt/share/html/NoAuth/css/ballard/msie6.css | 2 +- rt/share/html/NoAuth/css/ballard/nav.css | 2 +- rt/share/html/NoAuth/css/ballard/ticket-lists.css | 2 +- rt/share/html/NoAuth/css/ballard/ticket-search.css | 2 +- rt/share/html/NoAuth/css/ballard/ticket.css | 2 +- rt/share/html/NoAuth/css/base/admin.css | 2 +- rt/share/html/NoAuth/css/base/articles.css | 2 +- rt/share/html/NoAuth/css/base/collection.css | 2 +- rt/share/html/NoAuth/css/base/forms.css | 2 +- rt/share/html/NoAuth/css/base/history-folding.css | 2 +- rt/share/html/NoAuth/css/base/jquery-ui.css | 2 +- rt/share/html/NoAuth/css/base/login.css | 2 +- rt/share/html/NoAuth/css/base/main.css | 2 +- rt/share/html/NoAuth/css/base/misc.css | 2 +- rt/share/html/NoAuth/css/base/msie6.css | 67 ++++++++++++++++++++++ rt/share/html/NoAuth/css/base/nav.css | 2 +- rt/share/html/NoAuth/css/base/portlets.css | 2 +- rt/share/html/NoAuth/css/base/rights-editor.css | 2 +- rt/share/html/NoAuth/css/base/theme-editor.css | 2 +- rt/share/html/NoAuth/css/base/ticket-form.css | 2 +- rt/share/html/NoAuth/css/base/ticket.css | 2 +- rt/share/html/NoAuth/css/base/tools.css | 2 +- rt/share/html/NoAuth/css/dhandler | 2 +- rt/share/html/NoAuth/css/print.css | 2 +- rt/share/html/NoAuth/css/web2/InHeader | 2 +- rt/share/html/NoAuth/css/web2/base.css | 2 +- rt/share/html/NoAuth/css/web2/boxes.css | 2 +- rt/share/html/NoAuth/css/web2/images/dhandler | 2 +- rt/share/html/NoAuth/css/web2/layout.css | 2 +- rt/share/html/NoAuth/css/web2/main.css | 2 +- rt/share/html/NoAuth/css/web2/misc.css | 2 +- rt/share/html/NoAuth/css/web2/msie.css | 2 +- rt/share/html/NoAuth/css/web2/msie6.css | 2 +- rt/share/html/NoAuth/css/web2/nav.css | 2 +- rt/share/html/NoAuth/css/web2/ticket-lists.css | 2 +- rt/share/html/NoAuth/css/web2/ticket-search.css | 2 +- rt/share/html/NoAuth/css/web2/ticket.css | 2 +- rt/share/html/NoAuth/iCal/dhandler | 2 +- rt/share/html/NoAuth/images/autohandler | 2 +- rt/share/html/NoAuth/js/autohandler | 2 +- rt/share/html/NoAuth/js/cascaded.js | 2 +- rt/share/html/NoAuth/js/combobox.js | 2 +- rt/share/html/NoAuth/js/dhandler | 2 +- rt/share/html/NoAuth/js/history-folding.js | 2 +- .../html/NoAuth/js/jquery-ui-patch-datepicker.js | 2 +- rt/share/html/NoAuth/js/jquery_noconflict.js | 2 +- rt/share/html/NoAuth/js/late.js | 2 +- rt/share/html/NoAuth/js/titlebox-state.js | 2 +- rt/share/html/NoAuth/js/userautocomplete.js | 2 +- rt/share/html/NoAuth/js/util.js | 2 +- rt/share/html/NoAuth/rss/dhandler | 2 +- rt/share/html/Prefs/MyRT.html | 2 +- rt/share/html/Prefs/Other.html | 2 +- rt/share/html/Prefs/Quicksearch.html | 2 +- rt/share/html/Prefs/Search.html | 2 +- rt/share/html/Prefs/SearchOptions.html | 2 +- rt/share/html/REST/1.0/Forms/attachment/default | 2 +- rt/share/html/REST/1.0/Forms/group/customfields | 2 +- rt/share/html/REST/1.0/Forms/group/default | 2 +- rt/share/html/REST/1.0/Forms/group/ns | 2 +- rt/share/html/REST/1.0/Forms/queue/customfields | 2 +- rt/share/html/REST/1.0/Forms/queue/default | 2 +- rt/share/html/REST/1.0/Forms/queue/ns | 2 +- .../html/REST/1.0/Forms/queue/ticketcustomfields | 2 +- rt/share/html/REST/1.0/Forms/ticket/attachments | 2 +- rt/share/html/REST/1.0/Forms/ticket/comment | 2 +- rt/share/html/REST/1.0/Forms/ticket/default | 2 +- rt/share/html/REST/1.0/Forms/ticket/history | 2 +- rt/share/html/REST/1.0/Forms/ticket/links | 2 +- rt/share/html/REST/1.0/Forms/ticket/merge | 2 +- rt/share/html/REST/1.0/Forms/ticket/take | 2 +- rt/share/html/REST/1.0/Forms/transaction/default | 2 +- rt/share/html/REST/1.0/Forms/user/default | 2 +- rt/share/html/REST/1.0/Forms/user/ns | 2 +- rt/share/html/REST/1.0/NoAuth/mail-gateway | 2 +- rt/share/html/REST/1.0/autohandler | 2 +- rt/share/html/REST/1.0/dhandler | 2 +- rt/share/html/REST/1.0/logout | 2 +- rt/share/html/REST/1.0/search/dhandler | 2 +- rt/share/html/REST/1.0/search/ticket | 2 +- rt/share/html/REST/1.0/ticket/comment | 2 +- rt/share/html/REST/1.0/ticket/link | 2 +- rt/share/html/REST/1.0/ticket/merge | 2 +- rt/share/html/Search/Article.html | 2 +- rt/share/html/Search/Build.html | 2 +- rt/share/html/Search/Bulk.html | 2 +- rt/share/html/Search/Chart | 2 +- rt/share/html/Search/Chart.html | 2 +- rt/share/html/Search/Edit.html | 2 +- rt/share/html/Search/Elements/Article | 2 +- rt/share/html/Search/Elements/BuildFormatString | 2 +- rt/share/html/Search/Elements/Chart | 2 +- rt/share/html/Search/Elements/ConditionRow | 2 +- rt/share/html/Search/Elements/DisplayOptions | 2 +- rt/share/html/Search/Elements/EditFormat | 2 +- rt/share/html/Search/Elements/EditQuery | 2 +- rt/share/html/Search/Elements/EditSearches | 2 +- rt/share/html/Search/Elements/EditSort | 2 +- rt/share/html/Search/Elements/Graph | 2 +- rt/share/html/Search/Elements/NewListActions | 2 +- rt/share/html/Search/Elements/PickBasics | 2 +- rt/share/html/Search/Elements/PickCFs | 2 +- rt/share/html/Search/Elements/PickCriteria | 2 +- rt/share/html/Search/Elements/PickTicketCFs | 2 +- rt/share/html/Search/Elements/ResultsRSSView | 22 ++++--- rt/share/html/Search/Elements/SearchPrivacy | 2 +- rt/share/html/Search/Elements/SearchesForObject | 2 +- rt/share/html/Search/Elements/SelectAndOr | 2 +- rt/share/html/Search/Elements/SelectChartType | 2 +- rt/share/html/Search/Elements/SelectGroup | 2 +- rt/share/html/Search/Elements/SelectGroupBy | 2 +- rt/share/html/Search/Elements/SelectLinks | 2 +- rt/share/html/Search/Elements/SelectPersonType | 2 +- rt/share/html/Search/Elements/SelectSearchObject | 2 +- .../html/Search/Elements/SelectSearchesForObjects | 2 +- rt/share/html/Search/Graph.html | 2 +- rt/share/html/Search/Results.html | 2 +- rt/share/html/Search/Results.rdf | 2 +- rt/share/html/Search/Results.tsv | 4 +- rt/share/html/Search/Simple.html | 2 +- rt/share/html/SelfService/Article/Display.html | 2 +- rt/share/html/SelfService/Article/Search.html | 2 +- rt/share/html/SelfService/Article/autohandler | 2 +- rt/share/html/SelfService/Attachment/dhandler | 2 +- rt/share/html/SelfService/Closed.html | 2 +- rt/share/html/SelfService/Create.html | 2 +- rt/share/html/SelfService/CreateTicketInQueue.html | 2 +- rt/share/html/SelfService/Display.html | 2 +- rt/share/html/SelfService/Elements/GotoTicket | 2 +- rt/share/html/SelfService/Elements/Header | 2 +- rt/share/html/SelfService/Elements/MyRequests | 2 +- rt/share/html/SelfService/Elements/SearchArticle | 2 +- rt/share/html/SelfService/Error.html | 2 +- rt/share/html/SelfService/Prefs.html | 2 +- rt/share/html/SelfService/Update.html | 2 +- rt/share/html/SelfService/index.html | 2 +- .../html/Ticket/Attachment/WithHeaders/dhandler | 2 +- rt/share/html/Ticket/Attachment/dhandler | 2 +- rt/share/html/Ticket/Create.html | 3 +- rt/share/html/Ticket/Display.html | 2 +- rt/share/html/Ticket/Elements/AddAttachments | 2 +- rt/share/html/Ticket/Elements/AddWatchers | 2 +- rt/share/html/Ticket/Elements/Bookmark | 2 +- rt/share/html/Ticket/Elements/BulkLinks | 2 +- rt/share/html/Ticket/Elements/ClickToShowHistory | 2 +- rt/share/html/Ticket/Elements/EditBasics | 2 +- rt/share/html/Ticket/Elements/EditCustomFields | 2 +- rt/share/html/Ticket/Elements/EditDates | 2 +- rt/share/html/Ticket/Elements/EditPeople | 2 +- .../Ticket/Elements/EditTransactionCustomFields | 2 +- rt/share/html/Ticket/Elements/EditWatchers | 2 +- rt/share/html/Ticket/Elements/FindAttachments | 2 +- rt/share/html/Ticket/Elements/FindTransactions | 2 +- rt/share/html/Ticket/Elements/FoldStanzaJS | 2 +- rt/share/html/Ticket/Elements/LoadTextAttachments | 2 +- rt/share/html/Ticket/Elements/PreviewScrips | 2 +- rt/share/html/Ticket/Elements/Reminders | 2 +- rt/share/html/Ticket/Elements/ShowAttachments | 2 +- rt/share/html/Ticket/Elements/ShowBasics | 2 +- rt/share/html/Ticket/Elements/ShowCustomFields | 2 +- rt/share/html/Ticket/Elements/ShowDates | 2 +- rt/share/html/Ticket/Elements/ShowDependencies | 2 +- rt/share/html/Ticket/Elements/ShowGnuPGStatus | 2 +- rt/share/html/Ticket/Elements/ShowGroupMembers | 2 +- rt/share/html/Ticket/Elements/ShowHistory | 2 +- rt/share/html/Ticket/Elements/ShowMembers | 2 +- rt/share/html/Ticket/Elements/ShowMessageHeaders | 2 +- rt/share/html/Ticket/Elements/ShowMessageStanza | 2 +- rt/share/html/Ticket/Elements/ShowParents | 2 +- rt/share/html/Ticket/Elements/ShowPeople | 2 +- rt/share/html/Ticket/Elements/ShowPriority | 2 +- rt/share/html/Ticket/Elements/ShowQueue | 2 +- rt/share/html/Ticket/Elements/ShowRequestor | 2 +- .../html/Ticket/Elements/ShowRequestorExtraInfo | 2 +- rt/share/html/Ticket/Elements/ShowRequestorTickets | 2 +- .../Ticket/Elements/ShowRequestorTicketsActive | 2 +- .../html/Ticket/Elements/ShowRequestorTicketsAll | 2 +- .../Ticket/Elements/ShowRequestorTicketsInactive | 2 +- .../html/Ticket/Elements/ShowSimplifiedRecipients | 2 +- rt/share/html/Ticket/Elements/ShowSummary | 2 +- rt/share/html/Ticket/Elements/ShowTime | 2 +- rt/share/html/Ticket/Elements/ShowTransaction | 2 +- .../Ticket/Elements/ShowTransactionAttachments | 2 +- rt/share/html/Ticket/Elements/ShowUpdateStatus | 2 +- rt/share/html/Ticket/Elements/ShowUserEntry | 2 +- rt/share/html/Ticket/Elements/UpdateCc | 2 +- rt/share/html/Ticket/Forward.html | 2 +- rt/share/html/Ticket/GnuPG.html | 2 +- .../Ticket/Graphs/Elements/EditGraphProperties | 2 +- rt/share/html/Ticket/Graphs/Elements/ShowGraph | 2 +- rt/share/html/Ticket/Graphs/Elements/ShowLegends | 2 +- rt/share/html/Ticket/Graphs/dhandler | 2 +- rt/share/html/Ticket/Graphs/index.html | 2 +- rt/share/html/Ticket/History.html | 2 +- rt/share/html/Ticket/Modify.html | 2 +- rt/share/html/Ticket/ModifyAll.html | 3 +- rt/share/html/Ticket/ModifyDates.html | 2 +- rt/share/html/Ticket/ModifyLinks.html | 2 +- rt/share/html/Ticket/ModifyPeople.html | 3 +- rt/share/html/Ticket/Reminders.html | 2 +- rt/share/html/Ticket/ShowEmailRecord.html | 2 +- rt/share/html/Ticket/Update.html | 2 +- rt/share/html/Ticket/autohandler | 2 +- rt/share/html/Tools/MyDay.html | 2 +- rt/share/html/Tools/MyReminders.html | 2 +- rt/share/html/Tools/Offline.html | 2 +- rt/share/html/Tools/index.html | 2 +- rt/share/html/User/Prefs.html | 5 +- rt/share/html/Widgets/BulkEdit | 2 +- rt/share/html/Widgets/BulkProcess | 2 +- rt/share/html/Widgets/ComboBox | 2 +- rt/share/html/Widgets/FinalizeWidgetArguments | 2 +- rt/share/html/Widgets/Form/Boolean | 2 +- rt/share/html/Widgets/Form/Integer | 2 +- rt/share/html/Widgets/Form/Select | 2 +- rt/share/html/Widgets/Form/String | 2 +- rt/share/html/Widgets/SavedSearch | 2 +- rt/share/html/Widgets/SelectionBox | 2 +- rt/share/html/Widgets/TitleBox | 2 +- rt/share/html/Widgets/TitleBoxEnd | 2 +- rt/share/html/Widgets/TitleBoxStart | 2 +- rt/share/html/autohandler | 2 +- rt/share/html/dhandler | 2 +- rt/share/html/index.html | 3 +- rt/share/html/l | 2 +- rt/share/html/l_unsafe | 2 +- rt/share/html/m/_elements/footer | 2 +- rt/share/html/m/_elements/full_site_link | 2 +- rt/share/html/m/_elements/header | 2 +- rt/share/html/m/_elements/login | 2 +- rt/share/html/m/_elements/menu | 2 +- rt/share/html/m/_elements/raw_style | 2 +- rt/share/html/m/_elements/ticket_list | 2 +- rt/share/html/m/_elements/ticket_menu | 2 +- rt/share/html/m/_elements/wrapper | 2 +- rt/share/html/m/dhandler | 2 +- rt/share/html/m/index.html | 2 +- rt/share/html/m/logout | 2 +- rt/share/html/m/style.css | 2 +- rt/share/html/m/ticket/autohandler | 2 +- rt/share/html/m/ticket/create | 2 +- rt/share/html/m/ticket/history | 2 +- rt/share/html/m/ticket/reply | 2 +- rt/share/html/m/ticket/select_create_queue | 2 +- rt/share/html/m/ticket/show | 2 +- rt/share/html/m/tickets/search | 2 +- rt/t/api/emailparser.t | 8 ++- rt/t/fts/indexed_pg.t | 14 +++-- 846 files changed, 1101 insertions(+), 1115 deletions(-) create mode 100644 rt/share/html/NoAuth/css/base/msie6.css diff --git a/rt/Makefile.in b/rt/Makefile.in index 89d4bf1e6..8d109f371 100644 --- a/rt/Makefile.in +++ b/rt/Makefile.in @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/README b/rt/README index a397ca788..5a4b92386 100755 --- a/rt/README +++ b/rt/README @@ -71,8 +71,10 @@ GENERAL INSTALLATION you were coming from 3.6.7, you would want to review UPGRADING-3.6, UPGRADING-3.8 and UPGRADING-4.0 - It is particularly important that you read the warnings at the top of - UPGRADING-4.0 for some common issues. + Any upgrade steps given in version-specific UPGRADING files should + be run after the rest of the steps below; however, please read the + relevant documentation before beginning the upgrade, soas to be + aware of important changes. RT stores the arguments given to ./configure at the top of the etc/RT_Config.pm file in case you need to recreate your previous use @@ -173,7 +175,10 @@ GENERAL INSTALLATION rm -fr /opt/rt4/var/mason_data/obj - You may then start your web server again. + If 'make upgrade-database' completes without error, your upgrade + has been successful; you should now run any commands that were + supplied in version-specific UPGRADING documentation. You should + then restart your webserver. 7) Configure the web server, as described in docs/web_deployment.pod, and the email gateway, as described below. @@ -295,7 +300,7 @@ fix them. To report a bug, send email to . # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/bin/rt b/rt/bin/rt index 8c3a51421..6d46c346c 100755 --- a/rt/bin/rt +++ b/rt/bin/rt @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -1035,7 +1035,7 @@ sub submit { # Should we send authentication information to start a new session? my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted'; - (my $server = $config{server}) =~ s/^.*\/\/([^\/]+)\/?/$1/; + my($server) = $config{server} =~ m{^.*//([^/]+)}; if ($config{externalauth}) { $h->authorization_basic($config{user}, $config{passwd} || read_passwd() ); print " Password will be sent to $server $how\n", @@ -1080,7 +1080,7 @@ sub submit { # "RT/3.0.1 401 Credentials required" if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) { - warn "rt: Malformed RT response from $config{server}.\n"; + warn "rt: Malformed RT response from $server.\n"; warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3; exit -1; } diff --git a/rt/bin/rt-crontool.in b/rt/bin/rt-crontool.in index e2026985a..383014ffe 100644 --- a/rt/bin/rt-crontool.in +++ b/rt/bin/rt-crontool.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/bin/rt-mailgate.in b/rt/bin/rt-mailgate.in index df2ab5a8b..0516bf7e4 100644 --- a/rt/bin/rt-mailgate.in +++ b/rt/bin/rt-mailgate.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/bin/rt.in b/rt/bin/rt.in index 83c38acf6..60eed6824 100644 --- a/rt/bin/rt.in +++ b/rt/bin/rt.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -1035,7 +1035,7 @@ sub submit { # Should we send authentication information to start a new session? my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted'; - (my $server = $config{server}) =~ s/^.*\/\/([^\/]+)\/?/$1/; + my($server) = $config{server} =~ m{^.*//([^/]+)}; if ($config{externalauth}) { $h->authorization_basic($config{user}, $config{passwd} || read_passwd() ); print " Password will be sent to $server $how\n", @@ -1080,7 +1080,7 @@ sub submit { # "RT/3.0.1 401 Credentials required" if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) { - warn "rt: Malformed RT response from $config{server}.\n"; + warn "rt: Malformed RT response from $server.\n"; warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3; exit -1; } diff --git a/rt/configure b/rt/configure index f2f604103..bb83e12ce 100755 --- a/rt/configure +++ b/rt/configure @@ -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.0.22. +# Generated by GNU Autoconf 2.69 for RT rt-4.0.23. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='RT' PACKAGE_TARNAME='rt' -PACKAGE_VERSION='rt-4.0.22' -PACKAGE_STRING='RT rt-4.0.22' +PACKAGE_VERSION='rt-4.0.23' +PACKAGE_STRING='RT rt-4.0.23' PACKAGE_BUGREPORT='rt-bugs@bestpractical.com' PACKAGE_URL='' @@ -1317,7 +1317,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.0.22 to adapt to many kinds of systems. +\`configure' configures RT rt-4.0.23 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1378,7 +1378,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of RT rt-4.0.22:";; + short | recursive ) echo "Configuration of RT rt-4.0.23:";; esac cat <<\_ACEOF @@ -1495,7 +1495,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -RT configure rt-4.0.22 +RT configure rt-4.0.23 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1512,7 +1512,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.0.22, which was +It was created by RT $as_me rt-4.0.23, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -1869,7 +1869,7 @@ rt_version_major=4 rt_version_minor=0 -rt_version_patch=22 +rt_version_patch=23 test "x$rt_version_major" = 'x' && rt_version_major=0 test "x$rt_version_minor" = 'x' && rt_version_minor=0 @@ -3592,7 +3592,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.0.22, which was +This file was extended by RT $as_me rt-4.0.23, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3645,7 +3645,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.0.22 +RT config.status rt-4.0.23 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/rt/devel/tools/change-loc-msgstr b/rt/devel/tools/change-loc-msgstr index bd1892a85..85780deec 100644 --- a/rt/devel/tools/change-loc-msgstr +++ b/rt/devel/tools/change-loc-msgstr @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/extract-message-catalog b/rt/devel/tools/extract-message-catalog index 0afec0b2c..cba84d274 100644 --- a/rt/devel/tools/extract-message-catalog +++ b/rt/devel/tools/extract-message-catalog @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/factory b/rt/devel/tools/factory index 5d05d0853..e37fc8f30 100644 --- a/rt/devel/tools/factory +++ b/rt/devel/tools/factory @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/license_tag b/rt/devel/tools/license_tag index 4cf09174a..b9d719251 100644 --- a/rt/devel/tools/license_tag +++ b/rt/devel/tools/license_tag @@ -5,7 +5,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -54,7 +54,7 @@ my $LICENSE = <<'EOL'; COPYRIGHT: -This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/merge-rosetta.pl b/rt/devel/tools/merge-rosetta.pl index ec587add2..3d40a9910 100644 --- a/rt/devel/tools/merge-rosetta.pl +++ b/rt/devel/tools/merge-rosetta.pl @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/rt-apache b/rt/devel/tools/rt-apache index ba130deed..f9942edc1 100644 --- a/rt/devel/tools/rt-apache +++ b/rt/devel/tools/rt-apache @@ -4,7 +4,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/rt-attributes-editor b/rt/devel/tools/rt-attributes-editor index 92998a472..15436acc3 100644 --- a/rt/devel/tools/rt-attributes-editor +++ b/rt/devel/tools/rt-attributes-editor @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/rt-static-docs b/rt/devel/tools/rt-static-docs index 30d422d04..8ad86b153 100644 --- a/rt/devel/tools/rt-static-docs +++ b/rt/devel/tools/rt-static-docs @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/devel/tools/tweak-template-locstring b/rt/devel/tools/tweak-template-locstring index ca44d39db..c2741abc8 100644 --- a/rt/devel/tools/tweak-template-locstring +++ b/rt/devel/tools/tweak-template-locstring @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/docs/UPGRADING.mysql b/rt/docs/UPGRADING.mysql index a62dee78b..b0e6cc367 100644 --- a/rt/docs/UPGRADING.mysql +++ b/rt/docs/UPGRADING.mysql @@ -1,4 +1,6 @@ -If you did not start by reading the README file, please start there; these +=pod + +If you did not start by reading the F file, please start there; these steps do not list the full upgrading process, merely a part which is sometimes necessary. diff --git a/rt/etc/upgrade/3.8-ical-extension.in b/rt/etc/upgrade/3.8-ical-extension.in index 47b184682..89e5191e7 100644 --- a/rt/etc/upgrade/3.8-ical-extension.in +++ b/rt/etc/upgrade/3.8-ical-extension.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/4.0-customfield-checkbox-extension b/rt/etc/upgrade/4.0-customfield-checkbox-extension index a3db13cab..5f04cb1f0 100755 --- a/rt/etc/upgrade/4.0-customfield-checkbox-extension +++ b/rt/etc/upgrade/4.0-customfield-checkbox-extension @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/4.0-customfield-checkbox-extension.in b/rt/etc/upgrade/4.0-customfield-checkbox-extension.in index 9e0d1bf19..8cc0ec7be 100644 --- a/rt/etc/upgrade/4.0-customfield-checkbox-extension.in +++ b/rt/etc/upgrade/4.0-customfield-checkbox-extension.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/generate-rtaddressregexp.in b/rt/etc/upgrade/generate-rtaddressregexp.in index a6be3f59a..a6262dffe 100644 --- a/rt/etc/upgrade/generate-rtaddressregexp.in +++ b/rt/etc/upgrade/generate-rtaddressregexp.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/sanity-check-stylesheets.pl b/rt/etc/upgrade/sanity-check-stylesheets.pl index 3171bda80..cdc5588df 100644 --- a/rt/etc/upgrade/sanity-check-stylesheets.pl +++ b/rt/etc/upgrade/sanity-check-stylesheets.pl @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/shrink_cgm_table.pl b/rt/etc/upgrade/shrink_cgm_table.pl index fcfe8c5f1..85aa30747 100644 --- a/rt/etc/upgrade/shrink_cgm_table.pl +++ b/rt/etc/upgrade/shrink_cgm_table.pl @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/shrink_transactions_table.pl b/rt/etc/upgrade/shrink_transactions_table.pl index 66bdcf50c..0d0287f34 100644 --- a/rt/etc/upgrade/shrink_transactions_table.pl +++ b/rt/etc/upgrade/shrink_transactions_table.pl @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/split-out-cf-categories.in b/rt/etc/upgrade/split-out-cf-categories.in index d9d2ffaf5..d7dd117a9 100644 --- a/rt/etc/upgrade/split-out-cf-categories.in +++ b/rt/etc/upgrade/split-out-cf-categories.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/upgrade-articles b/rt/etc/upgrade/upgrade-articles index dbd481442..ec1b5f450 100755 --- a/rt/etc/upgrade/upgrade-articles +++ b/rt/etc/upgrade/upgrade-articles @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/upgrade-articles.in b/rt/etc/upgrade/upgrade-articles.in index 0aab0e22b..21cba4b8a 100644 --- a/rt/etc/upgrade/upgrade-articles.in +++ b/rt/etc/upgrade/upgrade-articles.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/upgrade-mysql-schema.pl b/rt/etc/upgrade/upgrade-mysql-schema.pl index 8d6615d6b..92d18e358 100755 --- a/rt/etc/upgrade/upgrade-mysql-schema.pl +++ b/rt/etc/upgrade/upgrade-mysql-schema.pl @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/vulnerable-passwords.in b/rt/etc/upgrade/vulnerable-passwords.in index b1027a432..b00625c7e 100755 --- a/rt/etc/upgrade/vulnerable-passwords.in +++ b/rt/etc/upgrade/vulnerable-passwords.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm index ec18caf51..8174505e9 100644 --- a/rt/lib/RT.pm +++ b/rt/lib/RT.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm index baf6fb2fd..83e19ce85 100755 --- a/rt/lib/RT/ACE.pm +++ b/rt/lib/RT/ACE.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm index 0662b3955..83423ad9e 100755 --- a/rt/lib/RT/ACL.pm +++ b/rt/lib/RT/ACL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -222,34 +222,21 @@ sub LimitToPrincipal { -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - my $ACE = $self->SUPER::Next(); # Short-circuit having to load up the ->Object - return $ACE - if $self->CurrentUser->PrincipalObj->Id == RT->SystemUser->Id; - if ( ( defined($ACE) ) and ( ref($ACE) ) ) { - - if ( $self->CurrentUser->HasRight( Right => 'ShowACL', - Object => $ACE->Object ) - or $self->CurrentUser->HasRight( Right => 'ModifyACL', - Object => $ACE->Object ) - ) { - return ($ACE); - } - - #If the user doesn't have the right to show this ACE - else { - return ( $self->Next() ); - } - } + return $self->SUPER::AddRecord( $record ) + if $record->CurrentUser->PrincipalObj->Id == RT->SystemUser->Id; - #if there never was any ACE - else { - return (undef); - } + my $obj = $record->Object; + return unless $self->CurrentUser->HasRight( Right => 'ShowACL', + Object => $obj ) + or $self->CurrentUser->HasRight( Right => 'ModifyACL', + Object => $obj ); + return $self->SUPER::AddRecord( $record ); } diff --git a/rt/lib/RT/Action.pm b/rt/lib/RT/Action.pm index 88e5b15d4..853949d92 100755 --- a/rt/lib/RT/Action.pm +++ b/rt/lib/RT/Action.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/AutoOpen.pm b/rt/lib/RT/Action/AutoOpen.pm index e819ca989..06721b7c4 100644 --- a/rt/lib/RT/Action/AutoOpen.pm +++ b/rt/lib/RT/Action/AutoOpen.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/Autoreply.pm b/rt/lib/RT/Action/Autoreply.pm index a2703e51d..2b042224b 100755 --- a/rt/lib/RT/Action/Autoreply.pm +++ b/rt/lib/RT/Action/Autoreply.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm index 542cbd27b..46791de58 100644 --- a/rt/lib/RT/Action/CreateTickets.pm +++ b/rt/lib/RT/Action/CreateTickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -960,6 +960,13 @@ sub GetDeferred { my $links = shift; my $postponed = shift; + # Unify the aliases for child/parent + $args->{$_} = [$args->{$_}] + for grep {$args->{$_} and not ref $args->{$_}} qw/members hasmember memberof/; + push @{$args->{'children'}}, @{delete $args->{'members'}} if $args->{'members'}; + push @{$args->{'children'}}, @{delete $args->{'hasmember'}} if $args->{'hasmember'}; + push @{$args->{'parents'}}, @{delete $args->{'memberof'}} if $args->{'memberof'}; + # Deferred processing push @$links, ( diff --git a/rt/lib/RT/Action/CreateTickets.pm.orig b/rt/lib/RT/Action/CreateTickets.pm.orig index e3c7b53e0..542cbd27b 100644 --- a/rt/lib/RT/Action/CreateTickets.pm.orig +++ b/rt/lib/RT/Action/CreateTickets.pm.orig @@ -579,15 +579,11 @@ sub _ParseMultilineTemplate { my %args = (@_); my $template_id; - require Encode; - require utf8; my ( $queue, $requestor ); $RT::Logger->debug("Line: ==="); foreach my $line ( split( /\n/, $args{'Content'} ) ) { $line =~ s/\r$//; - $RT::Logger->debug( "Line: " . utf8::is_utf8($line) - ? Encode::encode_utf8($line) - : $line ); + $RT::Logger->debug( "Line: $line" ); if ( $line =~ /^===/ ) { if ( $template_id && !$queue && $args{'Queue'} ) { $self->{'templates'}->{$template_id} @@ -790,10 +786,10 @@ sub ParseLines { ); if ( $args{content} ) { - my $mimeobj = MIME::Entity->new(); - $mimeobj->build( - Type => $args{'contenttype'} || 'text/plain', - Data => $args{'content'} + my $mimeobj = MIME::Entity->build( + Type => $args{'contenttype'} || 'text/plain', + Charset => 'UTF-8', + Data => [ map {Encode::encode( "UTF-8", $_ )} @{$args{'content'}} ], ); $ticketargs{MIMEObj} = $mimeobj; $ticketargs{UpdateType} = $args{'updatetype'} || 'correspond'; diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm index 38cad9407..04aa7eda9 100644 --- a/rt/lib/RT/Action/EscalatePriority.pm +++ b/rt/lib/RT/Action/EscalatePriority.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/ExtractSubjectTag.pm b/rt/lib/RT/Action/ExtractSubjectTag.pm index 92a72148f..b13d2a86d 100644 --- a/rt/lib/RT/Action/ExtractSubjectTag.pm +++ b/rt/lib/RT/Action/ExtractSubjectTag.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/LinearEscalate.pm b/rt/lib/RT/Action/LinearEscalate.pm index 9b75286cf..cc88b1dea 100755 --- a/rt/lib/RT/Action/LinearEscalate.pm +++ b/rt/lib/RT/Action/LinearEscalate.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm index 26aae47b0..0b75b2084 100755 --- a/rt/lib/RT/Action/Notify.pm +++ b/rt/lib/RT/Action/Notify.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/NotifyAsComment.pm b/rt/lib/RT/Action/NotifyAsComment.pm index a2c57db2d..50c1a62ec 100755 --- a/rt/lib/RT/Action/NotifyAsComment.pm +++ b/rt/lib/RT/Action/NotifyAsComment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/NotifyGroup.pm b/rt/lib/RT/Action/NotifyGroup.pm index 789c182e4..847d60bd0 100644 --- a/rt/lib/RT/Action/NotifyGroup.pm +++ b/rt/lib/RT/Action/NotifyGroup.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/NotifyGroupAsComment.pm b/rt/lib/RT/Action/NotifyGroupAsComment.pm index 135ef7f9c..a1c0d0851 100644 --- a/rt/lib/RT/Action/NotifyGroupAsComment.pm +++ b/rt/lib/RT/Action/NotifyGroupAsComment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/RecordComment.pm b/rt/lib/RT/Action/RecordComment.pm index 8f55ff187..d9ee7f153 100644 --- a/rt/lib/RT/Action/RecordComment.pm +++ b/rt/lib/RT/Action/RecordComment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/RecordCorrespondence.pm b/rt/lib/RT/Action/RecordCorrespondence.pm index 2304f2857..4dd8eba3e 100644 --- a/rt/lib/RT/Action/RecordCorrespondence.pm +++ b/rt/lib/RT/Action/RecordCorrespondence.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm index a483fba9f..af3a6bf8a 100755 --- a/rt/lib/RT/Action/SendEmail.pm +++ b/rt/lib/RT/Action/SendEmail.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -616,6 +616,7 @@ sub SetRTSpecialHeaders { # XXX, TODO: use /ShowUser/ShowUserEntry(or something like that) when it would be # refactored into user's method. if ( my $email = $self->TransactionObj->CreatorObj->EmailAddress + and ! defined $self->TemplateObj->MIMEObj->head->get("RT-Originator") and RT->Config->Get('UseOriginatorHeader') ) { $self->SetHeader( 'RT-Originator', $email ); diff --git a/rt/lib/RT/Action/SetPriority.pm b/rt/lib/RT/Action/SetPriority.pm index 7385c13d9..df789e44f 100644 --- a/rt/lib/RT/Action/SetPriority.pm +++ b/rt/lib/RT/Action/SetPriority.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/SetStatus.pm b/rt/lib/RT/Action/SetStatus.pm index c7a3127f1..2f932ecfa 100644 --- a/rt/lib/RT/Action/SetStatus.pm +++ b/rt/lib/RT/Action/SetStatus.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/UserDefined.pm b/rt/lib/RT/Action/UserDefined.pm index adc40e948..2b8d9b794 100644 --- a/rt/lib/RT/Action/UserDefined.pm +++ b/rt/lib/RT/Action/UserDefined.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval.pm b/rt/lib/RT/Approval.pm index 34cf10012..afa4286cd 100644 --- a/rt/lib/RT/Approval.pm +++ b/rt/lib/RT/Approval.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval/Rule.pm b/rt/lib/RT/Approval/Rule.pm index 1b7b7aca5..0bb98ef45 100644 --- a/rt/lib/RT/Approval/Rule.pm +++ b/rt/lib/RT/Approval/Rule.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval/Rule/Created.pm b/rt/lib/RT/Approval/Rule/Created.pm index 91063d179..b5c18822b 100644 --- a/rt/lib/RT/Approval/Rule/Created.pm +++ b/rt/lib/RT/Approval/Rule/Created.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval/Rule/NewPending.pm b/rt/lib/RT/Approval/Rule/NewPending.pm index 3fdb99d2b..a501b1140 100644 --- a/rt/lib/RT/Approval/Rule/NewPending.pm +++ b/rt/lib/RT/Approval/Rule/NewPending.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval/Rule/Passed.pm b/rt/lib/RT/Approval/Rule/Passed.pm index 241e6046e..22413d078 100644 --- a/rt/lib/RT/Approval/Rule/Passed.pm +++ b/rt/lib/RT/Approval/Rule/Passed.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Approval/Rule/Rejected.pm b/rt/lib/RT/Approval/Rule/Rejected.pm index adc30634b..d049ef846 100644 --- a/rt/lib/RT/Approval/Rule/Rejected.pm +++ b/rt/lib/RT/Approval/Rule/Rejected.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Article.pm b/rt/lib/RT/Article.pm index e9f3d43f1..8f955da05 100644 --- a/rt/lib/RT/Article.pm +++ b/rt/lib/RT/Article.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Articles.pm b/rt/lib/RT/Articles.pm index 9bee84472..680023296 100644 --- a/rt/lib/RT/Articles.pm +++ b/rt/lib/RT/Articles.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -64,33 +64,19 @@ sub _Init { return $self->SUPER::_Init( @_ ); } -=head2 Next +=head2 AddRecord -Returns the next article that this user can see. +Overrides the collection to ensure that only Articles the user can see +are returned. =cut -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - my $Object = $self->SUPER::Next(); - if ( ( defined($Object) ) and ( ref($Object) ) ) { - - if ( $Object->CurrentUserHasRight('ShowArticle') ) { - return ($Object); - } - - #If the user doesn't have the right to show this Object - else { - return ( $self->Next() ); - } - } - - #if there never was any queue - else { - return (undef); - } - + return unless $record->CurrentUserHasRight('ShowArticle'); + return $self->SUPER::AddRecord( $record ); } =head2 Limit { FIELD => undef, OPERATOR => '=', VALUE => 'undef'} diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm index af1f82c15..78c1f678a 100755 --- a/rt/lib/RT/Attachment.pm +++ b/rt/lib/RT/Attachment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -820,12 +820,10 @@ sub _Value { return $self->__Value( $field, @_ ); } -# Transactions don't change. by adding this cache congif directiove, +# Attachments don't change; by adding this cache config directive, # we don't lose pathalogically on long tickets. sub _CacheConfig { { - 'cache_p' => 1, - 'fast_update_p' => 1, 'cache_for_sec' => 180, } } diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm index 7f6f258c9..b7712431e 100755 --- a/rt/lib/RT/Attachments.pm +++ b/rt/lib/RT/Attachments.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -220,19 +220,12 @@ sub LimitByTicket { return; } -# {{{ sub Next -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - my $Attachment = $self->SUPER::Next; - return $Attachment unless $Attachment; - - if ( $Attachment->TransactionObj->CurrentUserCanSee ) { - return $Attachment; - } else { - # If the user doesn't have the right to show this ticket - return $self->Next; - } + return unless $record->TransactionObj->CurrentUserCanSee; + return $self->SUPER::AddRecord( $record ); } diff --git a/rt/lib/RT/Attribute.pm b/rt/lib/RT/Attribute.pm index 745f95fd2..24c89dd38 100644 --- a/rt/lib/RT/Attribute.pm +++ b/rt/lib/RT/Attribute.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Attributes.pm b/rt/lib/RT/Attributes.pm index c556756ae..7da293262 100644 --- a/rt/lib/RT/Attributes.pm +++ b/rt/lib/RT/Attributes.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm index f83ed8e0e..838bad0a5 100644 --- a/rt/lib/RT/Base.pm +++ b/rt/lib/RT/Base.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CachedGroupMember.pm b/rt/lib/RT/CachedGroupMember.pm index 66e7c7a93..5213bd19b 100644 --- a/rt/lib/RT/CachedGroupMember.pm +++ b/rt/lib/RT/CachedGroupMember.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CachedGroupMembers.pm b/rt/lib/RT/CachedGroupMembers.pm index f65796acb..14d65897f 100644 --- a/rt/lib/RT/CachedGroupMembers.pm +++ b/rt/lib/RT/CachedGroupMembers.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Class.pm b/rt/lib/RT/Class.pm index 8f6892456..d60c6b7d6 100644 --- a/rt/lib/RT/Class.pm +++ b/rt/lib/RT/Class.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Classes.pm b/rt/lib/RT/Classes.pm index 6b50d5dce..0175b2ffc 100644 --- a/rt/lib/RT/Classes.pm +++ b/rt/lib/RT/Classes.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -64,32 +64,19 @@ sub Table {'Classes'} return ($self->SUPER::_Init(@_)); } -=head2 Next +=head2 AddRecord -Returns the next Object that this user can see. +Overrides the collection to ensure that only Classes the user can +see are returned. =cut -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - - my $Object = $self->SUPER::Next(); - if ((defined($Object)) and (ref($Object))) { - if ( $Object->CurrentUserHasRight('SeeClass') ) { - return($Object); - } - - #If the user doesn't have the right to show this Object - else { - return($self->Next()); - } - } - #if there never was any Object - else { - return(undef); - } - + return unless $record->CurrentUserHasRight('SeeClass'); + return $self->SUPER::AddRecord( $record ); } sub ColumnMapClassName { diff --git a/rt/lib/RT/Condition.pm b/rt/lib/RT/Condition.pm index 80cf01992..2aa6545aa 100755 --- a/rt/lib/RT/Condition.pm +++ b/rt/lib/RT/Condition.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/AnyTransaction.pm b/rt/lib/RT/Condition/AnyTransaction.pm index 5d8b3bc76..f63508b03 100644 --- a/rt/lib/RT/Condition/AnyTransaction.pm +++ b/rt/lib/RT/Condition/AnyTransaction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm index 73015bcc8..9ff641bc0 100644 --- a/rt/lib/RT/Condition/BeforeDue.pm +++ b/rt/lib/RT/Condition/BeforeDue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/CloseTicket.pm b/rt/lib/RT/Condition/CloseTicket.pm index 2e027f4de..67f4dd98b 100644 --- a/rt/lib/RT/Condition/CloseTicket.pm +++ b/rt/lib/RT/Condition/CloseTicket.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/Overdue.pm b/rt/lib/RT/Condition/Overdue.pm index 462fa407c..240d7febb 100644 --- a/rt/lib/RT/Condition/Overdue.pm +++ b/rt/lib/RT/Condition/Overdue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm index 407d5a5ae..867e632a8 100644 --- a/rt/lib/RT/Condition/OwnerChange.pm +++ b/rt/lib/RT/Condition/OwnerChange.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/PriorityChange.pm b/rt/lib/RT/Condition/PriorityChange.pm index 25e6bfb5b..06b5b06f7 100644 --- a/rt/lib/RT/Condition/PriorityChange.pm +++ b/rt/lib/RT/Condition/PriorityChange.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm index e35d0b5b8..16f250ef1 100644 --- a/rt/lib/RT/Condition/PriorityExceeds.pm +++ b/rt/lib/RT/Condition/PriorityExceeds.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm index 91cd88c4e..0de9d719c 100644 --- a/rt/lib/RT/Condition/QueueChange.pm +++ b/rt/lib/RT/Condition/QueueChange.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/ReopenTicket.pm b/rt/lib/RT/Condition/ReopenTicket.pm index 69ef8f9ab..f082eb8e9 100644 --- a/rt/lib/RT/Condition/ReopenTicket.pm +++ b/rt/lib/RT/Condition/ReopenTicket.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm index 55fe2347f..668c5bcb4 100644 --- a/rt/lib/RT/Condition/StatusChange.pm +++ b/rt/lib/RT/Condition/StatusChange.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm index 4f4ff1816..7d58eb02f 100644 --- a/rt/lib/RT/Condition/UserDefined.pm +++ b/rt/lib/RT/Condition/UserDefined.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Config.pm b/rt/lib/RT/Config.pm index b97802f7a..8d307398c 100644 --- a/rt/lib/RT/Config.pm +++ b/rt/lib/RT/Config.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -460,7 +460,7 @@ our %META = ( 'The RTAddressRegexp option is not set in the config.' .' Not setting this option results in additional SQL queries to' .' check whether each address belongs to RT or not.' - .' It is especially important to set this option if RT recieves' + .' It is especially important to set this option if RT receives' .' emails on addresses that are not in the database or config.' ); } elsif (ref $value and ref $value eq "Regexp") { diff --git a/rt/lib/RT/Crypt/GnuPG.pm b/rt/lib/RT/Crypt/GnuPG.pm index 03636c8c3..9d9744551 100644 --- a/rt/lib/RT/Crypt/GnuPG.pm +++ b/rt/lib/RT/Crypt/GnuPG.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm index 6ffe14761..99a0641e5 100755 --- a/rt/lib/RT/CurrentUser.pm +++ b/rt/lib/RT/CurrentUser.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm index ff1eec9b3..de912ede2 100644 --- a/rt/lib/RT/CustomField.pm +++ b/rt/lib/RT/CustomField.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomFieldValue.pm b/rt/lib/RT/CustomFieldValue.pm index 4adb84d9e..e6b8a09e8 100644 --- a/rt/lib/RT/CustomFieldValue.pm +++ b/rt/lib/RT/CustomFieldValue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomFieldValues.pm b/rt/lib/RT/CustomFieldValues.pm index 18bc6b4b0..193cd6665 100644 --- a/rt/lib/RT/CustomFieldValues.pm +++ b/rt/lib/RT/CustomFieldValues.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomFieldValues/External.pm b/rt/lib/RT/CustomFieldValues/External.pm index 375f5c538..a0eabd5b6 100644 --- a/rt/lib/RT/CustomFieldValues/External.pm +++ b/rt/lib/RT/CustomFieldValues/External.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomFieldValues/Groups.pm b/rt/lib/RT/CustomFieldValues/Groups.pm index 48234e293..415046f67 100644 --- a/rt/lib/RT/CustomFieldValues/Groups.pm +++ b/rt/lib/RT/CustomFieldValues/Groups.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/CustomFields.pm b/rt/lib/RT/CustomFields.pm index 5fdac15aa..ba3b01cfb 100644 --- a/rt/lib/RT/CustomFields.pm +++ b/rt/lib/RT/CustomFields.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -68,8 +68,6 @@ package RT::CustomFields; use strict; use warnings; -use DBIx::SearchBuilder::Unique; - use RT::CustomField; use base 'RT::SearchBuilder'; @@ -369,22 +367,20 @@ sub _OCFAlias { } -=head2 Next +=head2 AddRecord -Returns the next custom field that this user can see. +Overrides the collection to ensure that only custom fields the user can +see are returned; also propagates down the L. =cut -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - my $CF = $self->SUPER::Next(); - return $CF unless $CF; - - $CF->SetContextObject( $self->ContextObject ); - - return $self->Next unless $CF->CurrentUserHasRight('SeeCustomField'); - return $CF; + $record->SetContextObject( $self->ContextObject ); + return unless $record->CurrentUserHasRight('SeeCustomField'); + return $self->SUPER::AddRecord( $record ); } =head2 NewItem diff --git a/rt/lib/RT/Dashboard.pm b/rt/lib/RT/Dashboard.pm index 6d4c51562..d84f56baa 100644 --- a/rt/lib/RT/Dashboard.pm +++ b/rt/lib/RT/Dashboard.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -270,8 +270,7 @@ sub _PrivacyObjects { my $groups = RT::Groups->new($CurrentUser); $groups->LimitToUserDefinedGroups; - $groups->WithMember( PrincipalId => $CurrentUser->Id, - Recursively => 1 ); + $groups->WithCurrentUser; push @objects, @{ $groups->ItemsArrayRef }; push @objects, RT::System->new($CurrentUser); @@ -401,10 +400,7 @@ sub ObjectsForLoading { Right => 'SeeGroupDashboard', IncludeSuperusers => $args{IncludeSuperuserGroups}, ); - $groups->WithMember( - Recursively => 1, - PrincipalId => $CurrentUser->UserObj->PrincipalId - ); + $groups->WithCurrentUser; my $attrs = $groups->Join( ALIAS1 => 'main', FIELD1 => 'id', diff --git a/rt/lib/RT/Dashboard/Mailer.pm b/rt/lib/RT/Dashboard/Mailer.pm index 038cf4593..8582acd0c 100644 --- a/rt/lib/RT/Dashboard/Mailer.pm +++ b/rt/lib/RT/Dashboard/Mailer.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Dashboards.pm b/rt/lib/RT/Dashboards.pm index 1c5fe3d97..8aad02dff 100644 --- a/rt/lib/RT/Dashboards.pm +++ b/rt/lib/RT/Dashboards.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm index 52bdc01df..4405b072c 100644 --- a/rt/lib/RT/Date.pm +++ b/rt/lib/RT/Date.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/EmailParser.pm b/rt/lib/RT/EmailParser.pm index 630730abd..695b7449f 100644 --- a/rt/lib/RT/EmailParser.pm +++ b/rt/lib/RT/EmailParser.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -328,6 +328,8 @@ sub IsRTAddress { my $self = shift; my $address = shift; + return undef unless defined($address) and $address =~ /\S/; + if ( my $address_re = RT->Config->Get('RTAddressRegexp') ) { return $address =~ /$address_re/i ? 1 : undef; } diff --git a/rt/lib/RT/Generated.pm.in b/rt/lib/RT/Generated.pm.in index dc4163e34..4e23043d5 100644 --- a/rt/lib/RT/Generated.pm.in +++ b/rt/lib/RT/Generated.pm.in @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Graph/Tickets.pm b/rt/lib/RT/Graph/Tickets.pm index 477a5d077..52c4b7247 100644 --- a/rt/lib/RT/Graph/Tickets.pm +++ b/rt/lib/RT/Graph/Tickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Group.pm b/rt/lib/RT/Group.pm index dc5295758..80e4ca5c9 100755 --- a/rt/lib/RT/Group.pm +++ b/rt/lib/RT/Group.pm @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/GroupMember.pm b/rt/lib/RT/GroupMember.pm index 1d4090cc6..9ac757613 100755 --- a/rt/lib/RT/GroupMember.pm +++ b/rt/lib/RT/GroupMember.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/GroupMembers.pm b/rt/lib/RT/GroupMembers.pm index 49cd8debc..a5e884005 100755 --- a/rt/lib/RT/GroupMembers.pm +++ b/rt/lib/RT/GroupMembers.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm index c2348584e..576c99dc9 100755 --- a/rt/lib/RT/Groups.pm +++ b/rt/lib/RT/Groups.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -240,6 +240,15 @@ sub WithMember { return $members; } +sub WithCurrentUser { + my $self = shift; + $self->{with_current_user} = 1; + return $self->WithMember( + PrincipalId => $self->CurrentUser->PrincipalId, + Recursively => 1, + ); +} + sub WithoutMember { my $self = shift; my %args = ( @@ -427,22 +436,16 @@ sub LimitToDeleted { -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - # Don't show groups which the user isn't allowed to see. + # If we've explicitly limited to groups the user is a member of (for + # dashboard or savedsearch privacy objects), skip the ACL. + return unless $self->{with_current_user} + or $record->CurrentUserHasRight('SeeGroup'); - my $Group = $self->SUPER::Next(); - if ((defined($Group)) and (ref($Group))) { - unless ($Group->CurrentUserHasRight('SeeGroup')) { - return $self->Next(); - } - - return $Group; - } - else { - return undef; - } + return $self->SUPER::AddRecord( $record ); } diff --git a/rt/lib/RT/Handle.pm b/rt/lib/RT/Handle.pm index 0fce6465f..794d8b009 100644 --- a/rt/lib/RT/Handle.pm +++ b/rt/lib/RT/Handle.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/I18N.pm b/rt/lib/RT/I18N.pm index 11cd5f120..de93512a3 100644 --- a/rt/lib/RT/I18N.pm +++ b/rt/lib/RT/I18N.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -245,7 +245,10 @@ sub SetMIMEEntityToEncoding { . $head->mime_type . " - " . ( Encode::decode("UTF-8",$head->get('subject')) || 'Subjectless message' ) ); - Encode::from_to( $string, $charset => $enc ); + { + no warnings 'utf8'; + $string = Encode::encode( $enc, Encode::decode( $charset, $string) ); + } my $new_body = MIME::Body::InCore->new($string); @@ -549,7 +552,8 @@ sub SetMIMEHeadToEncoding { $head->delete($tag); foreach my $value (@values) { if ( $charset ne $enc || $enc =~ /^utf-?8(?:-strict)?$/i ) { - Encode::from_to( $value, $charset => $enc ); + no warnings 'utf8'; + $value = Encode::encode( $enc, Encode::decode( $charset, $value) ); } $value = DecodeMIMEWordsToEncoding( $value, $enc, $tag ) unless $preserve_words; diff --git a/rt/lib/RT/I18N/cs.pm b/rt/lib/RT/I18N/cs.pm index 30da114d0..9b1573dee 100644 --- a/rt/lib/RT/I18N/cs.pm +++ b/rt/lib/RT/I18N/cs.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/I18N/de.pm b/rt/lib/RT/I18N/de.pm index 3a40a7f9e..65238151d 100644 --- a/rt/lib/RT/I18N/de.pm +++ b/rt/lib/RT/I18N/de.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/I18N/fr.pm b/rt/lib/RT/I18N/fr.pm index 904b84199..225376884 100644 --- a/rt/lib/RT/I18N/fr.pm +++ b/rt/lib/RT/I18N/fr.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/I18N/i_default.pm b/rt/lib/RT/I18N/i_default.pm index 316f51a64..a8d1acec8 100644 --- a/rt/lib/RT/I18N/i_default.pm +++ b/rt/lib/RT/I18N/i_default.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/I18N/ru.pm b/rt/lib/RT/I18N/ru.pm index 5b34d777a..783a0b174 100755 --- a/rt/lib/RT/I18N/ru.pm +++ b/rt/lib/RT/I18N/ru.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Installer.pm b/rt/lib/RT/Installer.pm index c48b06c1f..7c3e079e3 100644 --- a/rt/lib/RT/Installer.pm +++ b/rt/lib/RT/Installer.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm index feef6b802..5faa8ca08 100644 --- a/rt/lib/RT/Interface/CLI.pm +++ b/rt/lib/RT/Interface/CLI.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Email.pm b/rt/lib/RT/Interface/Email.pm index a4826ad36..f860461e0 100755 --- a/rt/lib/RT/Interface/Email.pm +++ b/rt/lib/RT/Interface/Email.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm index 898a8d9b7..ec409a41e 100755 --- a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm +++ b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm index b353907fb..2d760c28e 100644 --- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm +++ b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm index 06d7f83d2..edfc5d3db 100644 --- a/rt/lib/RT/Interface/REST.pm +++ b/rt/lib/RT/Interface/REST.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm index 35b0cffa1..4cf3a0726 100644 --- a/rt/lib/RT/Interface/Web.pm +++ b/rt/lib/RT/Interface/Web.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm index 7cf18d1ab..fc95aa10e 100644 --- a/rt/lib/RT/Interface/Web/Handler.pm +++ b/rt/lib/RT/Interface/Web/Handler.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/Menu.pm b/rt/lib/RT/Interface/Web/Menu.pm index e7833828c..03ce8ac5a 100644 --- a/rt/lib/RT/Interface/Web/Menu.pm +++ b/rt/lib/RT/Interface/Web/Menu.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/QueryBuilder.pm b/rt/lib/RT/Interface/Web/QueryBuilder.pm index a1b066227..b55142434 100755 --- a/rt/lib/RT/Interface/Web/QueryBuilder.pm +++ b/rt/lib/RT/Interface/Web/QueryBuilder.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm index f9305545f..1da160c8d 100755 --- a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm +++ b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/Request.pm b/rt/lib/RT/Interface/Web/Request.pm index 13d667288..7a246a32b 100644 --- a/rt/lib/RT/Interface/Web/Request.pm +++ b/rt/lib/RT/Interface/Web/Request.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Interface/Web/Session.pm b/rt/lib/RT/Interface/Web/Session.pm index aded596c4..d854130b6 100644 --- a/rt/lib/RT/Interface/Web/Session.pm +++ b/rt/lib/RT/Interface/Web/Session.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Lifecycle.pm b/rt/lib/RT/Lifecycle.pm index bdb2ba6d8..3bd3f59b6 100644 --- a/rt/lib/RT/Lifecycle.pm +++ b/rt/lib/RT/Lifecycle.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm index 305c34503..bd8ad615e 100644 --- a/rt/lib/RT/Link.pm +++ b/rt/lib/RT/Link.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Links.pm b/rt/lib/RT/Links.pm index d90865daf..b9aba12e1 100644 --- a/rt/lib/RT/Links.pm +++ b/rt/lib/RT/Links.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectClass.pm b/rt/lib/RT/ObjectClass.pm index 7fd8d9066..da664cfa6 100644 --- a/rt/lib/RT/ObjectClass.pm +++ b/rt/lib/RT/ObjectClass.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectClasses.pm b/rt/lib/RT/ObjectClasses.pm index b179180d7..89acd9d36 100644 --- a/rt/lib/RT/ObjectClasses.pm +++ b/rt/lib/RT/ObjectClasses.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectCustomField.pm b/rt/lib/RT/ObjectCustomField.pm index 1acf891f2..4b449d69a 100644 --- a/rt/lib/RT/ObjectCustomField.pm +++ b/rt/lib/RT/ObjectCustomField.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectCustomFieldValue.pm b/rt/lib/RT/ObjectCustomFieldValue.pm index af740e967..356a7f390 100644 --- a/rt/lib/RT/ObjectCustomFieldValue.pm +++ b/rt/lib/RT/ObjectCustomFieldValue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectCustomFieldValues.pm b/rt/lib/RT/ObjectCustomFieldValues.pm index a2ec317e8..c6d21913e 100644 --- a/rt/lib/RT/ObjectCustomFieldValues.pm +++ b/rt/lib/RT/ObjectCustomFieldValues.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectCustomFields.pm b/rt/lib/RT/ObjectCustomFields.pm index 97e4f91fb..1a488aac9 100644 --- a/rt/lib/RT/ObjectCustomFields.pm +++ b/rt/lib/RT/ObjectCustomFields.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectTopic.pm b/rt/lib/RT/ObjectTopic.pm index a5e36c348..c17ca481c 100644 --- a/rt/lib/RT/ObjectTopic.pm +++ b/rt/lib/RT/ObjectTopic.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ObjectTopics.pm b/rt/lib/RT/ObjectTopics.pm index f376f53d7..c49db16c0 100644 --- a/rt/lib/RT/ObjectTopics.pm +++ b/rt/lib/RT/ObjectTopics.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Plugin.pm b/rt/lib/RT/Plugin.pm index 82f4de2b2..3a0420364 100644 --- a/rt/lib/RT/Plugin.pm +++ b/rt/lib/RT/Plugin.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Pod/HTML.pm b/rt/lib/RT/Pod/HTML.pm index 69045595b..092d6a864 100644 --- a/rt/lib/RT/Pod/HTML.pm +++ b/rt/lib/RT/Pod/HTML.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Pod/HTMLBatch.pm b/rt/lib/RT/Pod/HTMLBatch.pm index 2545ea91c..24c326dc8 100644 --- a/rt/lib/RT/Pod/HTMLBatch.pm +++ b/rt/lib/RT/Pod/HTMLBatch.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Pod/Search.pm b/rt/lib/RT/Pod/Search.pm index e0670ea3b..eb71601db 100644 --- a/rt/lib/RT/Pod/Search.pm +++ b/rt/lib/RT/Pod/Search.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Principal.pm b/rt/lib/RT/Principal.pm index 76582d675..bdb2a1610 100644 --- a/rt/lib/RT/Principal.pm +++ b/rt/lib/RT/Principal.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Principals.pm b/rt/lib/RT/Principals.pm index 145ec17af..2f1793d23 100644 --- a/rt/lib/RT/Principals.pm +++ b/rt/lib/RT/Principals.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Queue.pm b/rt/lib/RT/Queue.pm index 677a05af8..0f2f660e6 100755 --- a/rt/lib/RT/Queue.pm +++ b/rt/lib/RT/Queue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Queues.pm b/rt/lib/RT/Queues.pm index f5cd2b2b5..d6e5c7674 100755 --- a/rt/lib/RT/Queues.pm +++ b/rt/lib/RT/Queues.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm index 1cc63ec7f..634a02ec6 100755 --- a/rt/lib/RT/Record.pm +++ b/rt/lib/RT/Record.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -668,7 +668,6 @@ sub __Value { sub _CacheConfig { { - 'cache_p' => 1, 'cache_for_sec' => 30, } } diff --git a/rt/lib/RT/Reminders.pm b/rt/lib/RT/Reminders.pm index 133dbf030..fcd7c267e 100644 --- a/rt/lib/RT/Reminders.pm +++ b/rt/lib/RT/Reminders.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Report/Tickets.pm b/rt/lib/RT/Report/Tickets.pm index aa27b17f3..f977673f2 100644 --- a/rt/lib/RT/Report/Tickets.pm +++ b/rt/lib/RT/Report/Tickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -275,16 +275,6 @@ sub _FieldToFunction { return %args; } - -# Override the AddRecord from DBI::SearchBuilder::Unique. id isn't id here -# wedon't want to disambiguate all the items with a count of 1. -sub AddRecord { - my $self = shift; - my $record = shift; - push @{$self->{'items'}}, $record; - $self->{'rows'}++; -} - 1; diff --git a/rt/lib/RT/Report/Tickets/Entry.pm b/rt/lib/RT/Report/Tickets/Entry.pm index fc0b63394..ee6b94bea 100644 --- a/rt/lib/RT/Report/Tickets/Entry.pm +++ b/rt/lib/RT/Report/Tickets/Entry.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Rule.pm b/rt/lib/RT/Rule.pm index 675191535..3b3e8b7bf 100644 --- a/rt/lib/RT/Rule.pm +++ b/rt/lib/RT/Rule.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Ruleset.pm b/rt/lib/RT/Ruleset.pm index e6267da06..9d6b965aa 100644 --- a/rt/lib/RT/Ruleset.pm +++ b/rt/lib/RT/Ruleset.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/SQL.pm b/rt/lib/RT/SQL.pm index 94b56653c..84c1dee4b 100644 --- a/rt/lib/RT/SQL.pm +++ b/rt/lib/RT/SQL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm index 3e0e928eb..4dd869bf2 100644 --- a/rt/lib/RT/SavedSearch.pm +++ b/rt/lib/RT/SavedSearch.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -162,8 +162,7 @@ sub _PrivacyObjects { my $groups = RT::Groups->new($CurrentUser); $groups->LimitToUserDefinedGroups; - $groups->WithMember( PrincipalId => $CurrentUser->Id, - Recursively => 1 ); + $groups->WithCurrentUser; if ($has_attr) { my $attrs = $groups->Join( ALIAS1 => 'main', diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm index 25c7e4a69..6f09757ea 100644 --- a/rt/lib/RT/SavedSearches.pm +++ b/rt/lib/RT/SavedSearches.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm index 71080a00c..b03d6b594 100755 --- a/rt/lib/RT/Scrip.pm +++ b/rt/lib/RT/Scrip.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ScripAction.pm b/rt/lib/RT/ScripAction.pm index be8b130d5..5d84673b8 100755 --- a/rt/lib/RT/ScripAction.pm +++ b/rt/lib/RT/ScripAction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ScripActions.pm b/rt/lib/RT/ScripActions.pm index 41ac60e92..2de5689a4 100755 --- a/rt/lib/RT/ScripActions.pm +++ b/rt/lib/RT/ScripActions.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ScripCondition.pm b/rt/lib/RT/ScripCondition.pm index 0d0fa665e..e0eedf5e9 100755 --- a/rt/lib/RT/ScripCondition.pm +++ b/rt/lib/RT/ScripCondition.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/ScripConditions.pm b/rt/lib/RT/ScripConditions.pm index 368008b2b..9555e22f0 100755 --- a/rt/lib/RT/ScripConditions.pm +++ b/rt/lib/RT/ScripConditions.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Scrips.pm b/rt/lib/RT/Scrips.pm index de9d1eae9..4649885f7 100755 --- a/rt/lib/RT/Scrips.pm +++ b/rt/lib/RT/Scrips.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -114,35 +114,19 @@ sub LimitToGlobal { } -# {{{ sub Next +=head2 AddRecord -=head2 Next - -Returns the next scrip that this user can see. +Overrides the collection to ensure that only scrips the user can see are +returned. =cut - -sub Next { + +sub AddRecord { my $self = shift; - - - my $Scrip = $self->SUPER::Next(); - if ((defined($Scrip)) and (ref($Scrip))) { - - if ($Scrip->CurrentUserHasRight('ShowScrips')) { - return($Scrip); - } - - #If the user doesn't have the right to show this scrip - else { - return($self->Next()); - } - } - #if there never was any scrip - else { - return(undef); - } - + my ($record) = @_; + + return unless $record->CurrentUserHasRight('ShowScrips'); + return $self->SUPER::AddRecord( $record ); } =head2 Apply diff --git a/rt/lib/RT/Search.pm b/rt/lib/RT/Search.pm index 8e13987aa..404a166fb 100755 --- a/rt/lib/RT/Search.pm +++ b/rt/lib/RT/Search.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Search/ActiveTicketsInQueue.pm b/rt/lib/RT/Search/ActiveTicketsInQueue.pm index 1c69e93b2..8cb6d33f7 100644 --- a/rt/lib/RT/Search/ActiveTicketsInQueue.pm +++ b/rt/lib/RT/Search/ActiveTicketsInQueue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Search/FromSQL.pm b/rt/lib/RT/Search/FromSQL.pm index 2f27fee82..dbcad9099 100644 --- a/rt/lib/RT/Search/FromSQL.pm +++ b/rt/lib/RT/Search/FromSQL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Search/Googleish.pm b/rt/lib/RT/Search/Googleish.pm index d11fa2b13..a688f582a 100644 --- a/rt/lib/RT/Search/Googleish.pm +++ b/rt/lib/RT/Search/Googleish.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm index 8b808c69b..bfc0cd36b 100644 --- a/rt/lib/RT/SearchBuilder.pm +++ b/rt/lib/RT/SearchBuilder.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/SharedSetting.pm b/rt/lib/RT/SharedSetting.pm index 0bdd196ea..43df379b1 100644 --- a/rt/lib/RT/SharedSetting.pm +++ b/rt/lib/RT/SharedSetting.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/SharedSettings.pm b/rt/lib/RT/SharedSettings.pm index 51b496552..30c6b1368 100644 --- a/rt/lib/RT/SharedSettings.pm +++ b/rt/lib/RT/SharedSettings.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder.pm b/rt/lib/RT/Shredder.pm index 8022775dd..e4cb157ae 100644 --- a/rt/lib/RT/Shredder.pm +++ b/rt/lib/RT/Shredder.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -178,7 +178,7 @@ shredding on most databases. CREATE INDEX SHREDDER_TXN1 ON Transactions(ReferenceType, OldReference); CREATE INDEX SHREDDER_TXN2 ON Transactions(ReferenceType, NewReference); CREATE INDEX SHREDDER_TXN3 ON Transactions(Type, OldValue); - CREATE INDEX SHREDDER_TXN4 ON Transactions(Type, NewValue) + CREATE INDEX SHREDDER_TXN4 ON Transactions(Type, NewValue); CREATE INDEX SHREDDER_ATTACHMENTS1 ON Attachments(Creator); diff --git a/rt/lib/RT/Shredder/ACE.pm b/rt/lib/RT/Shredder/ACE.pm index 1f882e2ff..57346c0a0 100644 --- a/rt/lib/RT/Shredder/ACE.pm +++ b/rt/lib/RT/Shredder/ACE.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Attachment.pm b/rt/lib/RT/Shredder/Attachment.pm index a3705fae1..00aecf31b 100644 --- a/rt/lib/RT/Shredder/Attachment.pm +++ b/rt/lib/RT/Shredder/Attachment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/CachedGroupMember.pm b/rt/lib/RT/Shredder/CachedGroupMember.pm index ffd4ada04..646035e44 100644 --- a/rt/lib/RT/Shredder/CachedGroupMember.pm +++ b/rt/lib/RT/Shredder/CachedGroupMember.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Constants.pm b/rt/lib/RT/Shredder/Constants.pm index b71e19108..64ee0b0fa 100644 --- a/rt/lib/RT/Shredder/Constants.pm +++ b/rt/lib/RT/Shredder/Constants.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/CustomField.pm b/rt/lib/RT/Shredder/CustomField.pm index e6fcc5f01..a3d542adb 100644 --- a/rt/lib/RT/Shredder/CustomField.pm +++ b/rt/lib/RT/Shredder/CustomField.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/CustomFieldValue.pm b/rt/lib/RT/Shredder/CustomFieldValue.pm index 0cefc9be7..95f136b94 100644 --- a/rt/lib/RT/Shredder/CustomFieldValue.pm +++ b/rt/lib/RT/Shredder/CustomFieldValue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Dependencies.pm b/rt/lib/RT/Shredder/Dependencies.pm index fdfcb8bf5..3ffebfdb8 100644 --- a/rt/lib/RT/Shredder/Dependencies.pm +++ b/rt/lib/RT/Shredder/Dependencies.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Dependency.pm b/rt/lib/RT/Shredder/Dependency.pm index b94f43aea..bdfdfc1ce 100644 --- a/rt/lib/RT/Shredder/Dependency.pm +++ b/rt/lib/RT/Shredder/Dependency.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Exceptions.pm b/rt/lib/RT/Shredder/Exceptions.pm index d0cc2db9d..85f8800b8 100644 --- a/rt/lib/RT/Shredder/Exceptions.pm +++ b/rt/lib/RT/Shredder/Exceptions.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Group.pm b/rt/lib/RT/Shredder/Group.pm index ad74e976f..8f93b8f87 100644 --- a/rt/lib/RT/Shredder/Group.pm +++ b/rt/lib/RT/Shredder/Group.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/GroupMember.pm b/rt/lib/RT/Shredder/GroupMember.pm index ed632e3df..936fb6446 100644 --- a/rt/lib/RT/Shredder/GroupMember.pm +++ b/rt/lib/RT/Shredder/GroupMember.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Link.pm b/rt/lib/RT/Shredder/Link.pm index 32d583d26..5180c43ad 100644 --- a/rt/lib/RT/Shredder/Link.pm +++ b/rt/lib/RT/Shredder/Link.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm b/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm index dab4d5bee..d040f9754 100644 --- a/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm +++ b/rt/lib/RT/Shredder/ObjectCustomFieldValue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/POD.pm b/rt/lib/RT/Shredder/POD.pm index ee4fb09ca..b2156f9f5 100644 --- a/rt/lib/RT/Shredder/POD.pm +++ b/rt/lib/RT/Shredder/POD.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin.pm b/rt/lib/RT/Shredder/Plugin.pm index 84d20eb1a..9ee2b93c1 100644 --- a/rt/lib/RT/Shredder/Plugin.pm +++ b/rt/lib/RT/Shredder/Plugin.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Attachments.pm b/rt/lib/RT/Shredder/Plugin/Attachments.pm index 05f264ec3..c33ffe83e 100644 --- a/rt/lib/RT/Shredder/Plugin/Attachments.pm +++ b/rt/lib/RT/Shredder/Plugin/Attachments.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Base.pm b/rt/lib/RT/Shredder/Plugin/Base.pm index 7ada97e48..a8acf3945 100644 --- a/rt/lib/RT/Shredder/Plugin/Base.pm +++ b/rt/lib/RT/Shredder/Plugin/Base.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Base/Dump.pm b/rt/lib/RT/Shredder/Plugin/Base/Dump.pm index 945bd93e8..c687c0114 100644 --- a/rt/lib/RT/Shredder/Plugin/Base/Dump.pm +++ b/rt/lib/RT/Shredder/Plugin/Base/Dump.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Base/Search.pm b/rt/lib/RT/Shredder/Plugin/Base/Search.pm index bb21bd6af..e2ba495d9 100644 --- a/rt/lib/RT/Shredder/Plugin/Base/Search.pm +++ b/rt/lib/RT/Shredder/Plugin/Base/Search.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Objects.pm b/rt/lib/RT/Shredder/Plugin/Objects.pm index ebfe2a00f..4da9f8f7f 100644 --- a/rt/lib/RT/Shredder/Plugin/Objects.pm +++ b/rt/lib/RT/Shredder/Plugin/Objects.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/SQLDump.pm b/rt/lib/RT/Shredder/Plugin/SQLDump.pm index d12cf0b5c..7b59feea9 100644 --- a/rt/lib/RT/Shredder/Plugin/SQLDump.pm +++ b/rt/lib/RT/Shredder/Plugin/SQLDump.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Summary.pm b/rt/lib/RT/Shredder/Plugin/Summary.pm index 9ccd66e0a..bd21284ec 100644 --- a/rt/lib/RT/Shredder/Plugin/Summary.pm +++ b/rt/lib/RT/Shredder/Plugin/Summary.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Tickets.pm b/rt/lib/RT/Shredder/Plugin/Tickets.pm index 180c45c9e..c6b9b8ede 100644 --- a/rt/lib/RT/Shredder/Plugin/Tickets.pm +++ b/rt/lib/RT/Shredder/Plugin/Tickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Plugin/Users.pm b/rt/lib/RT/Shredder/Plugin/Users.pm index f763246c2..2f6fbd95f 100644 --- a/rt/lib/RT/Shredder/Plugin/Users.pm +++ b/rt/lib/RT/Shredder/Plugin/Users.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -81,13 +81,13 @@ to select people from system groups. =head2 replace_relations - user identifier -When you delete user there are could be minor links to him in RT DB. -This option allow you to replace this links with link to other user. -This links are Creator and LastUpdatedBy, but NOT any watcher roles, -this means that if user is watcher(Requestor, Owner, -Cc or AdminCc) of the ticket or queue then link would be deleted. +When you delete a user there could be minor links to them in the RT database. +This option allow you to replace these links with links to the new user. +The replaceable links are Creator and LastUpdatedBy, but NOT any watcher roles. +This means that if the user is a watcher(Requestor, Owner, +Cc or AdminCc) of the ticket or queue then the link would be deleted. -This argument could be user id or name. +This argument could be a user id or name. =head2 no_tickets - boolean diff --git a/rt/lib/RT/Shredder/Principal.pm b/rt/lib/RT/Shredder/Principal.pm index 14f446a88..226a78cb0 100644 --- a/rt/lib/RT/Shredder/Principal.pm +++ b/rt/lib/RT/Shredder/Principal.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Queue.pm b/rt/lib/RT/Shredder/Queue.pm index 426170e0d..58904f1d1 100644 --- a/rt/lib/RT/Shredder/Queue.pm +++ b/rt/lib/RT/Shredder/Queue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Record.pm b/rt/lib/RT/Shredder/Record.pm index 6a8777a8e..684176c6b 100644 --- a/rt/lib/RT/Shredder/Record.pm +++ b/rt/lib/RT/Shredder/Record.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Scrip.pm b/rt/lib/RT/Shredder/Scrip.pm index 9a80cf988..c3a1e7d6f 100644 --- a/rt/lib/RT/Shredder/Scrip.pm +++ b/rt/lib/RT/Shredder/Scrip.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/ScripAction.pm b/rt/lib/RT/Shredder/ScripAction.pm index ebe7ce586..baa3d2a4d 100644 --- a/rt/lib/RT/Shredder/ScripAction.pm +++ b/rt/lib/RT/Shredder/ScripAction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/ScripCondition.pm b/rt/lib/RT/Shredder/ScripCondition.pm index 6d2b83e5c..9598b43ef 100644 --- a/rt/lib/RT/Shredder/ScripCondition.pm +++ b/rt/lib/RT/Shredder/ScripCondition.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Template.pm b/rt/lib/RT/Shredder/Template.pm index 89859a6e0..a23477eff 100644 --- a/rt/lib/RT/Shredder/Template.pm +++ b/rt/lib/RT/Shredder/Template.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Ticket.pm b/rt/lib/RT/Shredder/Ticket.pm index b70e8bb97..d34131b2e 100644 --- a/rt/lib/RT/Shredder/Ticket.pm +++ b/rt/lib/RT/Shredder/Ticket.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/Transaction.pm b/rt/lib/RT/Shredder/Transaction.pm index 1fe42f9f7..a8593c6ca 100644 --- a/rt/lib/RT/Shredder/Transaction.pm +++ b/rt/lib/RT/Shredder/Transaction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Shredder/User.pm b/rt/lib/RT/Shredder/User.pm index 0cd5bf335..cf001a8cb 100644 --- a/rt/lib/RT/Shredder/User.pm +++ b/rt/lib/RT/Shredder/User.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Squish.pm b/rt/lib/RT/Squish.pm index e0e61065c..9ae883de3 100644 --- a/rt/lib/RT/Squish.pm +++ b/rt/lib/RT/Squish.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Squish/CSS.pm b/rt/lib/RT/Squish/CSS.pm index 5ce3882cd..ad9b553de 100644 --- a/rt/lib/RT/Squish/CSS.pm +++ b/rt/lib/RT/Squish/CSS.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Squish/JS.pm b/rt/lib/RT/Squish/JS.pm index 9a4cac582..5445689ea 100644 --- a/rt/lib/RT/Squish/JS.pm +++ b/rt/lib/RT/Squish/JS.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/System.pm b/rt/lib/RT/System.pm index 4c1f5f135..456223878 100644 --- a/rt/lib/RT/System.pm +++ b/rt/lib/RT/System.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Template.pm b/rt/lib/RT/Template.pm index a6c0f7d0b..ecf094620 100755 --- a/rt/lib/RT/Template.pm +++ b/rt/lib/RT/Template.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -740,10 +740,14 @@ sub CompileCheck { sub CurrentUserCanRead { my $self =shift; - return 1 if $self->CurrentUserHasQueueRight('ShowTemplate'); - - return $self->CurrentUser->HasRight( Right =>'ShowGlobalTemplates', Object => $RT::System ) - if !$self->QueueObj->Id; + if ($self->__Value('Queue')) { + my $queue = RT::Queue->new( RT->SystemUser ); + $queue->Load( $self->__Value('Queue')); + return 1 if $self->CurrentUser->HasRight( Right => 'ShowTemplate', Object => $queue ); + } else { + return 1 if $self->CurrentUser->HasRight( Right => 'ShowGlobalTemplates', Object => $RT::System ); + return 1 if $self->CurrentUser->HasRight( Right => 'ShowTemplate', Object => $RT::System ); + } return; } diff --git a/rt/lib/RT/Templates.pm b/rt/lib/RT/Templates.pm index 7d117fae3..06d2191ed 100755 --- a/rt/lib/RT/Templates.pm +++ b/rt/lib/RT/Templates.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -125,37 +125,19 @@ sub LimitToQueue { } -=head2 Next +=head2 AddRecord -Returns the next template that this user can see. +Overrides the collection to ensure that only templates the user can see +are returned. =cut - -sub Next { + +sub AddRecord { my $self = shift; - - - my $templ = $self->SUPER::Next(); - if ((defined($templ)) and (ref($templ))) { - - # If it's part of a queue, and the user can read templates in - # that queue, or the user can globally read templates, show it - if ($templ->Queue && $templ->CurrentUserHasQueueRight('ShowTemplate') or - $templ->CurrentUser->HasRight(Object => $RT::System, Right => 'ShowTemplate') or - $templ->CurrentUser->HasRight(Object => $RT::System, Right => 'ShowGlobalTemplates')) { - return($templ); - } - - #If the user doesn't have the right to show this template - else { - return($self->Next()); - } - } - #if there never was any template - else { - return(undef); - } - + my ($record) = @_; + + return unless $record->CurrentUserCanRead; + return $self->SUPER::AddRecord( $record ); } =head2 NewItem diff --git a/rt/lib/RT/Test.pm b/rt/lib/RT/Test.pm index 104e93a63..8b227a781 100644 --- a/rt/lib/RT/Test.pm +++ b/rt/lib/RT/Test.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -830,7 +830,7 @@ sub create_ticket { $args{'MIMEObj'} = MIME::Entity->build( From => Encode::encode( "UTF-8", $args{'Requestor'} ), Subject => RT::Interface::Email::EncodeToMIME( String => $args{'Subject'} ), - Type => "text/plain", + Type => $args{ContentType} // "text/plain", Charset => "UTF-8", Data => Encode::encode( "UTF-8", $content ), ); diff --git a/rt/lib/RT/Test/Apache.pm b/rt/lib/RT/Test/Apache.pm index 31ad9bcf8..f761e3cee 100644 --- a/rt/lib/RT/Test/Apache.pm +++ b/rt/lib/RT/Test/Apache.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Test/Email.pm b/rt/lib/RT/Test/Email.pm index 54aa87dcd..77431fdcd 100644 --- a/rt/lib/RT/Test/Email.pm +++ b/rt/lib/RT/Test/Email.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Test/GnuPG.pm b/rt/lib/RT/Test/GnuPG.pm index 95c21f8ae..0ba47f787 100644 --- a/rt/lib/RT/Test/GnuPG.pm +++ b/rt/lib/RT/Test/GnuPG.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Test/Web.pm b/rt/lib/RT/Test/Web.pm index 81644817c..ad730c6a1 100644 --- a/rt/lib/RT/Test/Web.pm +++ b/rt/lib/RT/Test/Web.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Ticket.pm b/rt/lib/RT/Ticket.pm index 91a7fb581..068eec09d 100755 --- a/rt/lib/RT/Ticket.pm +++ b/rt/lib/RT/Ticket.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Tickets.pm b/rt/lib/RT/Tickets.pm index 4d091ce7a..c826b6f04 100755 --- a/rt/lib/RT/Tickets.pm +++ b/rt/lib/RT/Tickets.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -89,7 +89,6 @@ use base 'RT::SearchBuilder'; sub Table { 'Tickets'} use RT::CustomFields; -use DBIx::SearchBuilder::Unique; # Configuration Tables: @@ -2014,16 +2013,6 @@ sub OrderByCols { QUOTEVALUE => 1, ENTRYAGGREGATOR => 'AND', ) if $CFs; - unless ($cf_obj) { - # For those cases where we are doing a join against the - # CF name, and don't have a CFid, use Unique to make sure - # we don't show duplicate tickets. NOTE: I'm pretty sure - # this will stay mixed in for the life of the - # class/package, and not just for the life of the object. - # Potential performance issue. - require DBIx::SearchBuilder::Unique; - DBIx::SearchBuilder::Unique->import; - } my $CFvs = $self->Join( TYPE => 'LEFT', ALIAS1 => $ObjectCFs, diff --git a/rt/lib/RT/Tickets_SQL.pm b/rt/lib/RT/Tickets_SQL.pm index f667b0699..77313c3c5 100644 --- a/rt/lib/RT/Tickets_SQL.pm +++ b/rt/lib/RT/Tickets_SQL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Topic.pm b/rt/lib/RT/Topic.pm index d6a88e17c..474294fc4 100644 --- a/rt/lib/RT/Topic.pm +++ b/rt/lib/RT/Topic.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Topics.pm b/rt/lib/RT/Topics.pm index 5c735b7f1..fd83f4a71 100644 --- a/rt/lib/RT/Topics.pm +++ b/rt/lib/RT/Topics.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Transaction.pm b/rt/lib/RT/Transaction.pm index 5c903e9f1..14f670cd9 100755 --- a/rt/lib/RT/Transaction.pm +++ b/rt/lib/RT/Transaction.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -1434,8 +1434,6 @@ sub DeferredRecipients { # Transactions don't change. by adding this cache config directive, we don't lose pathalogically on long tickets. sub _CacheConfig { { - 'cache_p' => 1, - 'fast_update_p' => 1, 'cache_for_sec' => 6000, } } diff --git a/rt/lib/RT/Transactions.pm b/rt/lib/RT/Transactions.pm index 82bd50f12..9c359c07f 100755 --- a/rt/lib/RT/Transactions.pm +++ b/rt/lib/RT/Transactions.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -132,27 +132,12 @@ sub LimitToTicket { } -sub Next { +sub AddRecord { my $self = shift; - - my $Transaction = $self->SUPER::Next(); - if ((defined($Transaction)) and (ref($Transaction))) { - # If the user can see the transaction's type, then they can - # see the transaction and we should hand it back. - if ($Transaction->Type) { - return($Transaction); - } - - #If the user doesn't have the right to show this ticket - else { - return($self->Next()); - } - } + my ($record) = @_; - #if there never was any ticket - else { - return(undef); - } + return unless $record->CurrentUserCanSee; + return $self->SUPER::AddRecord($record); } diff --git a/rt/lib/RT/URI.pm b/rt/lib/RT/URI.pm index 11a9e3e06..03cb89213 100644 --- a/rt/lib/RT/URI.pm +++ b/rt/lib/RT/URI.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/URI/a.pm b/rt/lib/RT/URI/a.pm index 76bd4e831..eca253fa5 100644 --- a/rt/lib/RT/URI/a.pm +++ b/rt/lib/RT/URI/a.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm index 820f83f79..ca652efbf 100644 --- a/rt/lib/RT/URI/base.pm +++ b/rt/lib/RT/URI/base.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/URI/fsck_com_article.pm b/rt/lib/RT/URI/fsck_com_article.pm index 34c81a818..580bccdc3 100644 --- a/rt/lib/RT/URI/fsck_com_article.pm +++ b/rt/lib/RT/URI/fsck_com_article.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm index 9f68aa5b1..0a9001e43 100644 --- a/rt/lib/RT/URI/fsck_com_rt.pm +++ b/rt/lib/RT/URI/fsck_com_rt.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/URI/t.pm b/rt/lib/RT/URI/t.pm index d3a1214dd..a4175c990 100644 --- a/rt/lib/RT/URI/t.pm +++ b/rt/lib/RT/URI/t.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm index 0094f9807..1859d3f5c 100755 --- a/rt/lib/RT/User.pm +++ b/rt/lib/RT/User.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Users.pm b/rt/lib/RT/Users.pm index f377d470c..34d4371fc 100755 --- a/rt/lib/RT/Users.pm +++ b/rt/lib/RT/Users.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Util.pm b/rt/lib/RT/Util.pm index f8ffccfb9..bd3a22803 100644 --- a/rt/lib/RT/Util.pm +++ b/rt/lib/RT/Util.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-attributes-viewer.in b/rt/sbin/rt-attributes-viewer.in index 31bae00c7..2c021aae2 100644 --- a/rt/sbin/rt-attributes-viewer.in +++ b/rt/sbin/rt-attributes-viewer.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-clean-sessions.in b/rt/sbin/rt-clean-sessions.in index 77730fe13..48a652571 100644 --- a/rt/sbin/rt-clean-sessions.in +++ b/rt/sbin/rt-clean-sessions.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-dump-metadata.in b/rt/sbin/rt-dump-metadata.in index 5e0e5c3db..29c44d763 100644 --- a/rt/sbin/rt-dump-metadata.in +++ b/rt/sbin/rt-dump-metadata.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-email-dashboards.in b/rt/sbin/rt-email-dashboards.in index 0fcb1268e..6b7dd2d2d 100644 --- a/rt/sbin/rt-email-dashboards.in +++ b/rt/sbin/rt-email-dashboards.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-email-digest.in b/rt/sbin/rt-email-digest.in index 47cd8eb45..50e130ad5 100644 --- a/rt/sbin/rt-email-digest.in +++ b/rt/sbin/rt-email-digest.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-email-group-admin.in b/rt/sbin/rt-email-group-admin.in index 3306a3812..06ff5c343 100755 --- a/rt/sbin/rt-email-group-admin.in +++ b/rt/sbin/rt-email-group-admin.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-fulltext-indexer.in b/rt/sbin/rt-fulltext-indexer.in index b90d8dacf..a55eb4734 100644 --- a/rt/sbin/rt-fulltext-indexer.in +++ b/rt/sbin/rt-fulltext-indexer.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -435,7 +435,10 @@ sub extract_html { my $attachment = shift; my $text = $attachment->Content; return undef unless defined $text && length($text); -# TODO: html -> text +# the rich text editor generates html entities for characters +# but Pg doesn't index them, so decode to something it can index. + require HTML::Entities; + HTML::Entities::decode_entities($text); return \$text; } diff --git a/rt/sbin/rt-message-catalog b/rt/sbin/rt-message-catalog index b4283694f..bade9897a 100755 --- a/rt/sbin/rt-message-catalog +++ b/rt/sbin/rt-message-catalog @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-preferences-viewer.in b/rt/sbin/rt-preferences-viewer.in index 8eeb7c97d..810cfc866 100644 --- a/rt/sbin/rt-preferences-viewer.in +++ b/rt/sbin/rt-preferences-viewer.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-server.fcgi.in b/rt/sbin/rt-server.fcgi.in index 5bd8f3ed2..8caefdb78 100644 --- a/rt/sbin/rt-server.fcgi.in +++ b/rt/sbin/rt-server.fcgi.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-server.in b/rt/sbin/rt-server.in index 5bd8f3ed2..8caefdb78 100644 --- a/rt/sbin/rt-server.in +++ b/rt/sbin/rt-server.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-session-viewer.in b/rt/sbin/rt-session-viewer.in index 5ace1aee2..3bbc447e7 100644 --- a/rt/sbin/rt-session-viewer.in +++ b/rt/sbin/rt-session-viewer.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in index edf3d4636..64d97da2c 100644 --- a/rt/sbin/rt-setup-database.in +++ b/rt/sbin/rt-setup-database.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-setup-fulltext-index.in b/rt/sbin/rt-setup-fulltext-index.in index 7a1ede816..fe571851f 100644 --- a/rt/sbin/rt-setup-fulltext-index.in +++ b/rt/sbin/rt-setup-fulltext-index.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-shredder.in b/rt/sbin/rt-shredder.in index f1e79f8bf..e172a753e 100755 --- a/rt/sbin/rt-shredder.in +++ b/rt/sbin/rt-shredder.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-test-dependencies.in b/rt/sbin/rt-test-dependencies.in index 19ec297e5..505d18add 100644 --- a/rt/sbin/rt-test-dependencies.in +++ b/rt/sbin/rt-test-dependencies.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-validate-aliases.in b/rt/sbin/rt-validate-aliases.in index 97252ae19..3db308aa1 100644 --- a/rt/sbin/rt-validate-aliases.in +++ b/rt/sbin/rt-validate-aliases.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/sbin/rt-validator.in b/rt/sbin/rt-validator.in index f0f1c59db..fafc85e10 100644 --- a/rt/sbin/rt-validator.in +++ b/rt/sbin/rt-validator.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -267,7 +267,7 @@ push @CHECKS, 'User <-> ACL equivalence group' => sub { action => sub { my $id = shift; return unless prompt( - 'Create', "Found an user that has no ACL equivalence group." + 'Create', "Found a user that has no ACL equivalence group." ); my $gid = create_record( 'Groups', @@ -283,7 +283,7 @@ push @CHECKS, 'User <-> ACL equivalence group' => sub { action => sub { my $id = shift; return unless prompt( - 'Delete', "Found an user ACL equivalence group, but there is no user." + 'Delete', "Found a user ACL equivalence group, but there is no user." ); delete_record( 'Groups', $id ); diff --git a/rt/sbin/standalone_httpd.in b/rt/sbin/standalone_httpd.in index 5bd8f3ed2..8caefdb78 100644 --- a/rt/sbin/standalone_httpd.in +++ b/rt/sbin/standalone_httpd.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/CustomFields.html b/rt/share/html/Admin/Articles/Classes/CustomFields.html index f8a5bd69b..d64b49a08 100644 --- a/rt/share/html/Admin/Articles/Classes/CustomFields.html +++ b/rt/share/html/Admin/Articles/Classes/CustomFields.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/GroupRights.html b/rt/share/html/Admin/Articles/Classes/GroupRights.html index 433e3d518..6a301b361 100644 --- a/rt/share/html/Admin/Articles/Classes/GroupRights.html +++ b/rt/share/html/Admin/Articles/Classes/GroupRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/Modify.html b/rt/share/html/Admin/Articles/Classes/Modify.html index f96094b78..7dcc77945 100644 --- a/rt/share/html/Admin/Articles/Classes/Modify.html +++ b/rt/share/html/Admin/Articles/Classes/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/Objects.html b/rt/share/html/Admin/Articles/Classes/Objects.html index 5d5118fa9..62c57256b 100644 --- a/rt/share/html/Admin/Articles/Classes/Objects.html +++ b/rt/share/html/Admin/Articles/Classes/Objects.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/Topics.html b/rt/share/html/Admin/Articles/Classes/Topics.html index 525bf45b4..de48a46ba 100644 --- a/rt/share/html/Admin/Articles/Classes/Topics.html +++ b/rt/share/html/Admin/Articles/Classes/Topics.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/UserRights.html b/rt/share/html/Admin/Articles/Classes/UserRights.html index 9f26fdcca..ab13c74e1 100644 --- a/rt/share/html/Admin/Articles/Classes/UserRights.html +++ b/rt/share/html/Admin/Articles/Classes/UserRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Classes/index.html b/rt/share/html/Admin/Articles/Classes/index.html index 1dc975622..97d77c6e7 100644 --- a/rt/share/html/Admin/Articles/Classes/index.html +++ b/rt/share/html/Admin/Articles/Classes/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/Elements/Topics b/rt/share/html/Admin/Articles/Elements/Topics index f30f69e38..71f0a04f8 100644 --- a/rt/share/html/Admin/Articles/Elements/Topics +++ b/rt/share/html/Admin/Articles/Elements/Topics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Articles/index.html b/rt/share/html/Admin/Articles/index.html index 171af476d..3aabaa965 100644 --- a/rt/share/html/Admin/Articles/index.html +++ b/rt/share/html/Admin/Articles/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/CustomFields/GroupRights.html b/rt/share/html/Admin/CustomFields/GroupRights.html index b63619f55..2e0b5b0ec 100644 --- a/rt/share/html/Admin/CustomFields/GroupRights.html +++ b/rt/share/html/Admin/CustomFields/GroupRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/CustomFields/Modify.html b/rt/share/html/Admin/CustomFields/Modify.html index 015f4f350..f9ca71c21 100644 --- a/rt/share/html/Admin/CustomFields/Modify.html +++ b/rt/share/html/Admin/CustomFields/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/CustomFields/Objects.html b/rt/share/html/Admin/CustomFields/Objects.html index f28997675..aac209461 100644 --- a/rt/share/html/Admin/CustomFields/Objects.html +++ b/rt/share/html/Admin/CustomFields/Objects.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/CustomFields/UserRights.html b/rt/share/html/Admin/CustomFields/UserRights.html index bc2d800c4..d159dd72a 100644 --- a/rt/share/html/Admin/CustomFields/UserRights.html +++ b/rt/share/html/Admin/CustomFields/UserRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/CustomFields/index.html b/rt/share/html/Admin/CustomFields/index.html index 78d9a92a9..e8687ed21 100644 --- a/rt/share/html/Admin/CustomFields/index.html +++ b/rt/share/html/Admin/CustomFields/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/AddCustomFieldValue b/rt/share/html/Admin/Elements/AddCustomFieldValue index ec1a34bc8..2cb4a092b 100755 --- a/rt/share/html/Admin/Elements/AddCustomFieldValue +++ b/rt/share/html/Admin/Elements/AddCustomFieldValue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/ConfigureMyRT b/rt/share/html/Admin/Elements/ConfigureMyRT index 4be6803f8..2d1f45e36 100644 --- a/rt/share/html/Admin/Elements/ConfigureMyRT +++ b/rt/share/html/Admin/Elements/ConfigureMyRT @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/CreateUserCalled b/rt/share/html/Admin/Elements/CreateUserCalled index f5ef9da8a..fb15893f0 100755 --- a/rt/share/html/Admin/Elements/CreateUserCalled +++ b/rt/share/html/Admin/Elements/CreateUserCalled @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditCustomField b/rt/share/html/Admin/Elements/EditCustomField index 4c5e98fb6..d58bed5c7 100755 --- a/rt/share/html/Admin/Elements/EditCustomField +++ b/rt/share/html/Admin/Elements/EditCustomField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditCustomFieldValues b/rt/share/html/Admin/Elements/EditCustomFieldValues index 5a81ec7db..83feb24d6 100755 --- a/rt/share/html/Admin/Elements/EditCustomFieldValues +++ b/rt/share/html/Admin/Elements/EditCustomFieldValues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditCustomFieldValuesSource b/rt/share/html/Admin/Elements/EditCustomFieldValuesSource index 3aecf7cf6..79029cae1 100644 --- a/rt/share/html/Admin/Elements/EditCustomFieldValuesSource +++ b/rt/share/html/Admin/Elements/EditCustomFieldValuesSource @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditCustomFields b/rt/share/html/Admin/Elements/EditCustomFields index d3cd8e125..904a82c97 100755 --- a/rt/share/html/Admin/Elements/EditCustomFields +++ b/rt/share/html/Admin/Elements/EditCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditQueueWatcherGroup b/rt/share/html/Admin/Elements/EditQueueWatcherGroup index 767bc857c..623b1a0f9 100644 --- a/rt/share/html/Admin/Elements/EditQueueWatcherGroup +++ b/rt/share/html/Admin/Elements/EditQueueWatcherGroup @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditQueueWatchers b/rt/share/html/Admin/Elements/EditQueueWatchers index fb9d1d5f2..98c13931a 100755 --- a/rt/share/html/Admin/Elements/EditQueueWatchers +++ b/rt/share/html/Admin/Elements/EditQueueWatchers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditRights b/rt/share/html/Admin/Elements/EditRights index 20ee551c9..ff8aece17 100644 --- a/rt/share/html/Admin/Elements/EditRights +++ b/rt/share/html/Admin/Elements/EditRights @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditRightsCategoryTabs b/rt/share/html/Admin/Elements/EditRightsCategoryTabs index 61e30c313..b6eb18900 100644 --- a/rt/share/html/Admin/Elements/EditRightsCategoryTabs +++ b/rt/share/html/Admin/Elements/EditRightsCategoryTabs @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditScrip b/rt/share/html/Admin/Elements/EditScrip index 3e2227c73..defe09b01 100755 --- a/rt/share/html/Admin/Elements/EditScrip +++ b/rt/share/html/Admin/Elements/EditScrip @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditScrips b/rt/share/html/Admin/Elements/EditScrips index c92fc5563..127677d79 100755 --- a/rt/share/html/Admin/Elements/EditScrips +++ b/rt/share/html/Admin/Elements/EditScrips @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditTemplates b/rt/share/html/Admin/Elements/EditTemplates index e713e9d29..1c86a4e25 100755 --- a/rt/share/html/Admin/Elements/EditTemplates +++ b/rt/share/html/Admin/Elements/EditTemplates @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/EditUserComments b/rt/share/html/Admin/Elements/EditUserComments index ac4b91a9d..d0c6d62df 100755 --- a/rt/share/html/Admin/Elements/EditUserComments +++ b/rt/share/html/Admin/Elements/EditUserComments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/Header b/rt/share/html/Admin/Elements/Header index b55052173..370c68533 100755 --- a/rt/share/html/Admin/Elements/Header +++ b/rt/share/html/Admin/Elements/Header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/ListGlobalCustomFields b/rt/share/html/Admin/Elements/ListGlobalCustomFields index 05ee51966..39caa42ea 100755 --- a/rt/share/html/Admin/Elements/ListGlobalCustomFields +++ b/rt/share/html/Admin/Elements/ListGlobalCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/ListGlobalScrips b/rt/share/html/Admin/Elements/ListGlobalScrips index 89491d3a7..3f97dbd12 100755 --- a/rt/share/html/Admin/Elements/ListGlobalScrips +++ b/rt/share/html/Admin/Elements/ListGlobalScrips @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/ModifyTemplate b/rt/share/html/Admin/Elements/ModifyTemplate index d12dbb436..a30ae056c 100755 --- a/rt/share/html/Admin/Elements/ModifyTemplate +++ b/rt/share/html/Admin/Elements/ModifyTemplate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/PickCustomFields b/rt/share/html/Admin/Elements/PickCustomFields index bb9ba8cc8..5a90d139a 100644 --- a/rt/share/html/Admin/Elements/PickCustomFields +++ b/rt/share/html/Admin/Elements/PickCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/PickObjects b/rt/share/html/Admin/Elements/PickObjects index d8f1aac66..6ab014c52 100644 --- a/rt/share/html/Admin/Elements/PickObjects +++ b/rt/share/html/Admin/Elements/PickObjects @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/Portal b/rt/share/html/Admin/Elements/Portal index b0b41f28a..9207e1e97 100644 --- a/rt/share/html/Admin/Elements/Portal +++ b/rt/share/html/Admin/Elements/Portal @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/QueueRightsForUser b/rt/share/html/Admin/Elements/QueueRightsForUser index bab16853d..2dc99a295 100755 --- a/rt/share/html/Admin/Elements/QueueRightsForUser +++ b/rt/share/html/Admin/Elements/QueueRightsForUser @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectCustomField b/rt/share/html/Admin/Elements/SelectCustomField index 9f2c24b66..84811122d 100644 --- a/rt/share/html/Admin/Elements/SelectCustomField +++ b/rt/share/html/Admin/Elements/SelectCustomField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectCustomFieldLookupType b/rt/share/html/Admin/Elements/SelectCustomFieldLookupType index 7a66ff19c..f6cc5b283 100644 --- a/rt/share/html/Admin/Elements/SelectCustomFieldLookupType +++ b/rt/share/html/Admin/Elements/SelectCustomFieldLookupType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectCustomFieldRenderType b/rt/share/html/Admin/Elements/SelectCustomFieldRenderType index 0ef6b53ea..0bf9fc804 100644 --- a/rt/share/html/Admin/Elements/SelectCustomFieldRenderType +++ b/rt/share/html/Admin/Elements/SelectCustomFieldRenderType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectCustomFieldType b/rt/share/html/Admin/Elements/SelectCustomFieldType index a61b0bfa0..1415a5be8 100755 --- a/rt/share/html/Admin/Elements/SelectCustomFieldType +++ b/rt/share/html/Admin/Elements/SelectCustomFieldType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectGroups b/rt/share/html/Admin/Elements/SelectGroups index e74bede72..f45dca096 100755 --- a/rt/share/html/Admin/Elements/SelectGroups +++ b/rt/share/html/Admin/Elements/SelectGroups @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectModifyGroup b/rt/share/html/Admin/Elements/SelectModifyGroup index 9aa6419a7..29c924bdb 100755 --- a/rt/share/html/Admin/Elements/SelectModifyGroup +++ b/rt/share/html/Admin/Elements/SelectModifyGroup @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectModifyQueue b/rt/share/html/Admin/Elements/SelectModifyQueue index 92f4a7dad..81acc9e1b 100755 --- a/rt/share/html/Admin/Elements/SelectModifyQueue +++ b/rt/share/html/Admin/Elements/SelectModifyQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectModifyUser b/rt/share/html/Admin/Elements/SelectModifyUser index 0d4b130c0..442e0ca48 100755 --- a/rt/share/html/Admin/Elements/SelectModifyUser +++ b/rt/share/html/Admin/Elements/SelectModifyUser @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectNewGroupMembers b/rt/share/html/Admin/Elements/SelectNewGroupMembers index 72f649c64..8cdda89b4 100755 --- a/rt/share/html/Admin/Elements/SelectNewGroupMembers +++ b/rt/share/html/Admin/Elements/SelectNewGroupMembers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectRights b/rt/share/html/Admin/Elements/SelectRights index 7994c14b4..df1f72412 100755 --- a/rt/share/html/Admin/Elements/SelectRights +++ b/rt/share/html/Admin/Elements/SelectRights @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectScrip b/rt/share/html/Admin/Elements/SelectScrip index ffac81cf3..e55804a26 100755 --- a/rt/share/html/Admin/Elements/SelectScrip +++ b/rt/share/html/Admin/Elements/SelectScrip @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectScripAction b/rt/share/html/Admin/Elements/SelectScripAction index 33f6c1801..88c2f2035 100755 --- a/rt/share/html/Admin/Elements/SelectScripAction +++ b/rt/share/html/Admin/Elements/SelectScripAction @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectScripCondition b/rt/share/html/Admin/Elements/SelectScripCondition index e895c9425..ae663c764 100755 --- a/rt/share/html/Admin/Elements/SelectScripCondition +++ b/rt/share/html/Admin/Elements/SelectScripCondition @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectSingleOrMultiple b/rt/share/html/Admin/Elements/SelectSingleOrMultiple index 11cb0a7f1..d6909b8c2 100755 --- a/rt/share/html/Admin/Elements/SelectSingleOrMultiple +++ b/rt/share/html/Admin/Elements/SelectSingleOrMultiple @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectStage b/rt/share/html/Admin/Elements/SelectStage index 1adb7c2cf..32d39c786 100644 --- a/rt/share/html/Admin/Elements/SelectStage +++ b/rt/share/html/Admin/Elements/SelectStage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectTemplate b/rt/share/html/Admin/Elements/SelectTemplate index 67e661b5b..02b78405a 100755 --- a/rt/share/html/Admin/Elements/SelectTemplate +++ b/rt/share/html/Admin/Elements/SelectTemplate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/SelectUsers b/rt/share/html/Admin/Elements/SelectUsers index 2562b7a82..fd04d8fd0 100755 --- a/rt/share/html/Admin/Elements/SelectUsers +++ b/rt/share/html/Admin/Elements/SelectUsers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Elements/ShowKeyInfo b/rt/share/html/Admin/Elements/ShowKeyInfo index 56c1d770d..0a7ef0f02 100644 --- a/rt/share/html/Admin/Elements/ShowKeyInfo +++ b/rt/share/html/Admin/Elements/ShowKeyInfo @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Class-Article.html b/rt/share/html/Admin/Global/CustomFields/Class-Article.html index f7401bae4..4e1fed4e3 100644 --- a/rt/share/html/Admin/Global/CustomFields/Class-Article.html +++ b/rt/share/html/Admin/Global/CustomFields/Class-Article.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Groups.html b/rt/share/html/Admin/Global/CustomFields/Groups.html index 64e331059..6f196d34b 100644 --- a/rt/share/html/Admin/Global/CustomFields/Groups.html +++ b/rt/share/html/Admin/Global/CustomFields/Groups.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html b/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html index 5ab984405..81f6ae975 100755 --- a/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html +++ b/rt/share/html/Admin/Global/CustomFields/Queue-Tickets.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html b/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html index c198054f1..785bc354a 100755 --- a/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html +++ b/rt/share/html/Admin/Global/CustomFields/Queue-Transactions.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Queues.html b/rt/share/html/Admin/Global/CustomFields/Queues.html index 04a264f3d..806799afc 100644 --- a/rt/share/html/Admin/Global/CustomFields/Queues.html +++ b/rt/share/html/Admin/Global/CustomFields/Queues.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/Users.html b/rt/share/html/Admin/Global/CustomFields/Users.html index 588818baf..895120573 100644 --- a/rt/share/html/Admin/Global/CustomFields/Users.html +++ b/rt/share/html/Admin/Global/CustomFields/Users.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/CustomFields/index.html b/rt/share/html/Admin/Global/CustomFields/index.html index 9034baf16..f0971a5da 100644 --- a/rt/share/html/Admin/Global/CustomFields/index.html +++ b/rt/share/html/Admin/Global/CustomFields/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/GroupRights.html b/rt/share/html/Admin/Global/GroupRights.html index 055f1e033..13ad0ebad 100755 --- a/rt/share/html/Admin/Global/GroupRights.html +++ b/rt/share/html/Admin/Global/GroupRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/MyRT.html b/rt/share/html/Admin/Global/MyRT.html index d31aa444f..d903553e4 100644 --- a/rt/share/html/Admin/Global/MyRT.html +++ b/rt/share/html/Admin/Global/MyRT.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/Scrip.html b/rt/share/html/Admin/Global/Scrip.html index d03d52fd2..057032a44 100755 --- a/rt/share/html/Admin/Global/Scrip.html +++ b/rt/share/html/Admin/Global/Scrip.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/Scrips.html b/rt/share/html/Admin/Global/Scrips.html index feccea569..c964e480b 100755 --- a/rt/share/html/Admin/Global/Scrips.html +++ b/rt/share/html/Admin/Global/Scrips.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/Template.html b/rt/share/html/Admin/Global/Template.html index fad2d86e4..c88d26c44 100755 --- a/rt/share/html/Admin/Global/Template.html +++ b/rt/share/html/Admin/Global/Template.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/Templates.html b/rt/share/html/Admin/Global/Templates.html index 64d6bd6d8..5f1fe8269 100755 --- a/rt/share/html/Admin/Global/Templates.html +++ b/rt/share/html/Admin/Global/Templates.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/Topics.html b/rt/share/html/Admin/Global/Topics.html index 4b5aa6414..72aefa715 100644 --- a/rt/share/html/Admin/Global/Topics.html +++ b/rt/share/html/Admin/Global/Topics.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/UserRights.html b/rt/share/html/Admin/Global/UserRights.html index 45d2bfc70..c08ecc6c6 100755 --- a/rt/share/html/Admin/Global/UserRights.html +++ b/rt/share/html/Admin/Global/UserRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Global/index.html b/rt/share/html/Admin/Global/index.html index e01cff623..cdac7d9a2 100755 --- a/rt/share/html/Admin/Global/index.html +++ b/rt/share/html/Admin/Global/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/GroupRights.html b/rt/share/html/Admin/Groups/GroupRights.html index 8e7f90827..92b65ee74 100755 --- a/rt/share/html/Admin/Groups/GroupRights.html +++ b/rt/share/html/Admin/Groups/GroupRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/History.html b/rt/share/html/Admin/Groups/History.html index ba6ac813d..bc3ff950a 100644 --- a/rt/share/html/Admin/Groups/History.html +++ b/rt/share/html/Admin/Groups/History.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/Members.html b/rt/share/html/Admin/Groups/Members.html index aca3633e6..a4ff4beaa 100755 --- a/rt/share/html/Admin/Groups/Members.html +++ b/rt/share/html/Admin/Groups/Members.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/Modify.html b/rt/share/html/Admin/Groups/Modify.html index 94431d09d..eb10d14bc 100755 --- a/rt/share/html/Admin/Groups/Modify.html +++ b/rt/share/html/Admin/Groups/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/UserRights.html b/rt/share/html/Admin/Groups/UserRights.html index bcd2b0008..e77e56f76 100755 --- a/rt/share/html/Admin/Groups/UserRights.html +++ b/rt/share/html/Admin/Groups/UserRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Groups/index.html b/rt/share/html/Admin/Groups/index.html index a70904645..43a1c6748 100755 --- a/rt/share/html/Admin/Groups/index.html +++ b/rt/share/html/Admin/Groups/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/CustomField.html b/rt/share/html/Admin/Queues/CustomField.html index b1e0b9e6f..0cfb6aedf 100755 --- a/rt/share/html/Admin/Queues/CustomField.html +++ b/rt/share/html/Admin/Queues/CustomField.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/CustomFields.html b/rt/share/html/Admin/Queues/CustomFields.html index b5386900b..b5ac3232a 100755 --- a/rt/share/html/Admin/Queues/CustomFields.html +++ b/rt/share/html/Admin/Queues/CustomFields.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/GroupRights.html b/rt/share/html/Admin/Queues/GroupRights.html index 60fb84399..4a2ff24ea 100755 --- a/rt/share/html/Admin/Queues/GroupRights.html +++ b/rt/share/html/Admin/Queues/GroupRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/History.html b/rt/share/html/Admin/Queues/History.html index 7df45649a..1b4a1abed 100644 --- a/rt/share/html/Admin/Queues/History.html +++ b/rt/share/html/Admin/Queues/History.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/Modify.html b/rt/share/html/Admin/Queues/Modify.html index 5ef308dae..e9afc7ec5 100755 --- a/rt/share/html/Admin/Queues/Modify.html +++ b/rt/share/html/Admin/Queues/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/People.html b/rt/share/html/Admin/Queues/People.html index e3a9d0c20..8a226e894 100755 --- a/rt/share/html/Admin/Queues/People.html +++ b/rt/share/html/Admin/Queues/People.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/Scrip.html b/rt/share/html/Admin/Queues/Scrip.html index 4181c5184..d4f349929 100755 --- a/rt/share/html/Admin/Queues/Scrip.html +++ b/rt/share/html/Admin/Queues/Scrip.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/Scrips.html b/rt/share/html/Admin/Queues/Scrips.html index 8b1220d60..02d91a053 100755 --- a/rt/share/html/Admin/Queues/Scrips.html +++ b/rt/share/html/Admin/Queues/Scrips.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/Template.html b/rt/share/html/Admin/Queues/Template.html index dfcee30fe..8e4cd2362 100755 --- a/rt/share/html/Admin/Queues/Template.html +++ b/rt/share/html/Admin/Queues/Template.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/Templates.html b/rt/share/html/Admin/Queues/Templates.html index 8713e20dc..5de33587b 100755 --- a/rt/share/html/Admin/Queues/Templates.html +++ b/rt/share/html/Admin/Queues/Templates.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/UserRights.html b/rt/share/html/Admin/Queues/UserRights.html index 957eed47b..d5591740f 100755 --- a/rt/share/html/Admin/Queues/UserRights.html +++ b/rt/share/html/Admin/Queues/UserRights.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Queues/index.html b/rt/share/html/Admin/Queues/index.html index 4ef183ee1..672b4fac1 100755 --- a/rt/share/html/Admin/Queues/index.html +++ b/rt/share/html/Admin/Queues/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Configuration.html b/rt/share/html/Admin/Tools/Configuration.html index 43e9c21b1..f60cdba6f 100644 --- a/rt/share/html/Admin/Tools/Configuration.html +++ b/rt/share/html/Admin/Tools/Configuration.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -65,7 +65,7 @@ unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'Super <%PERL> my $index_conf; foreach my $key ( RT->Config->Options( Overridable => undef, Sorted => 0 ) ) { - my $val = RT->Config->GetObfuscated( $key ); + my $val = RT->Config->GetObfuscated( $key, $session{'CurrentUser'} ); next unless defined $val; my $meta = RT->Config->Meta( $key ); diff --git a/rt/share/html/Admin/Tools/Queries.html b/rt/share/html/Admin/Tools/Queries.html index c9f6c2daa..23025ec4b 100644 --- a/rt/share/html/Admin/Tools/Queries.html +++ b/rt/share/html/Admin/Tools/Queries.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler b/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler index bc09f2511..7f63b64d2 100644 --- a/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler +++ b/rt/share/html/Admin/Tools/Shredder/Dumps/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink b/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink index af720eb7d..3337afb2d 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink +++ b/rt/share/html/Admin/Tools/Shredder/Elements/DumpFileLink @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights index af11bd7d6..ee1687d14 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights +++ b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoRights @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage index b337aa28f..1f24cda4d 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage +++ b/rt/share/html/Admin/Tools/Shredder/Elements/Error/NoStorage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment index 6ebdb4138..774886453 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment +++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Attachment @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket index 9dcdeaddc..8dccc61e3 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket +++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--Ticket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User index 6cb7d1f11..73d146146 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User +++ b/rt/share/html/Admin/Tools/Shredder/Elements/Object/RT--User @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox b/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox index 20d0e02aa..757e10658 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox +++ b/rt/share/html/Admin/Tools/Shredder/Elements/ObjectCheckBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments b/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments index 412f941b7..02137c371 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments +++ b/rt/share/html/Admin/Tools/Shredder/Elements/PluginArguments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp b/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp index 6a8539e29..bf37a890a 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp +++ b/rt/share/html/Admin/Tools/Shredder/Elements/PluginHelp @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects b/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects index f9f44aba0..a4570fc3a 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects +++ b/rt/share/html/Admin/Tools/Shredder/Elements/SelectObjects @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin b/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin index 28b7cbb72..c8a8ae6ff 100644 --- a/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin +++ b/rt/share/html/Admin/Tools/Shredder/Elements/SelectPlugin @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/autohandler b/rt/share/html/Admin/Tools/Shredder/autohandler index d8e0aa658..62909b0c3 100644 --- a/rt/share/html/Admin/Tools/Shredder/autohandler +++ b/rt/share/html/Admin/Tools/Shredder/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Shredder/index.html b/rt/share/html/Admin/Tools/Shredder/index.html index f5c5dff1b..9e6eee7cc 100644 --- a/rt/share/html/Admin/Tools/Shredder/index.html +++ b/rt/share/html/Admin/Tools/Shredder/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Theme.html b/rt/share/html/Admin/Tools/Theme.html index 123fae252..83f88a98b 100644 --- a/rt/share/html/Admin/Tools/Theme.html +++ b/rt/share/html/Admin/Tools/Theme.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/index.html b/rt/share/html/Admin/Tools/index.html index bee491f74..891fe000a 100644 --- a/rt/share/html/Admin/Tools/index.html +++ b/rt/share/html/Admin/Tools/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/CustomFields.html b/rt/share/html/Admin/Users/CustomFields.html index b57cfa522..1c6473b14 100644 --- a/rt/share/html/Admin/Users/CustomFields.html +++ b/rt/share/html/Admin/Users/CustomFields.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/GnuPG.html b/rt/share/html/Admin/Users/GnuPG.html index 71cf22b54..3ca593a5d 100644 --- a/rt/share/html/Admin/Users/GnuPG.html +++ b/rt/share/html/Admin/Users/GnuPG.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/History.html b/rt/share/html/Admin/Users/History.html index d6e4aa3e8..752b20f83 100644 --- a/rt/share/html/Admin/Users/History.html +++ b/rt/share/html/Admin/Users/History.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/Memberships.html b/rt/share/html/Admin/Users/Memberships.html index ba88905ce..74f10b813 100644 --- a/rt/share/html/Admin/Users/Memberships.html +++ b/rt/share/html/Admin/Users/Memberships.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/Modify.html b/rt/share/html/Admin/Users/Modify.html index 2483e5b7f..62d828c18 100755 --- a/rt/share/html/Admin/Users/Modify.html +++ b/rt/share/html/Admin/Users/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/MyRT.html b/rt/share/html/Admin/Users/MyRT.html index 1836b43df..c9a193aec 100644 --- a/rt/share/html/Admin/Users/MyRT.html +++ b/rt/share/html/Admin/Users/MyRT.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Users/index.html b/rt/share/html/Admin/Users/index.html index 31e1c122d..ec3368b3b 100755 --- a/rt/share/html/Admin/Users/index.html +++ b/rt/share/html/Admin/Users/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/autohandler b/rt/share/html/Admin/autohandler index 73aa47dfc..693e2b907 100644 --- a/rt/share/html/Admin/autohandler +++ b/rt/share/html/Admin/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/index.html b/rt/share/html/Admin/index.html index ac29709d0..17e93fa9f 100755 --- a/rt/share/html/Admin/index.html +++ b/rt/share/html/Admin/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/Display.html b/rt/share/html/Approvals/Display.html index b639f41a5..1864b20cd 100755 --- a/rt/share/html/Approvals/Display.html +++ b/rt/share/html/Approvals/Display.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/Elements/Approve b/rt/share/html/Approvals/Elements/Approve index e9a3762bd..55e40ad45 100755 --- a/rt/share/html/Approvals/Elements/Approve +++ b/rt/share/html/Approvals/Elements/Approve @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/Elements/PendingMyApproval b/rt/share/html/Approvals/Elements/PendingMyApproval index 9b34b1f81..8a5f67b3e 100755 --- a/rt/share/html/Approvals/Elements/PendingMyApproval +++ b/rt/share/html/Approvals/Elements/PendingMyApproval @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/Elements/ShowDependency b/rt/share/html/Approvals/Elements/ShowDependency index c7e31769d..f6f8074ee 100755 --- a/rt/share/html/Approvals/Elements/ShowDependency +++ b/rt/share/html/Approvals/Elements/ShowDependency @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/autohandler b/rt/share/html/Approvals/autohandler index c98152837..f6f71199a 100644 --- a/rt/share/html/Approvals/autohandler +++ b/rt/share/html/Approvals/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Approvals/index.html b/rt/share/html/Approvals/index.html index dbdc11ec5..c1cc96f51 100755 --- a/rt/share/html/Approvals/index.html +++ b/rt/share/html/Approvals/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Delete.html b/rt/share/html/Articles/Article/Delete.html index 22dc30348..c67cffaf2 100644 --- a/rt/share/html/Articles/Article/Delete.html +++ b/rt/share/html/Articles/Article/Delete.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Display.html b/rt/share/html/Articles/Article/Display.html index 77a1e433c..fcbea5b39 100644 --- a/rt/share/html/Articles/Article/Display.html +++ b/rt/share/html/Articles/Article/Display.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Edit.html b/rt/share/html/Articles/Article/Edit.html index dd8f94582..075b28bc9 100644 --- a/rt/share/html/Articles/Article/Edit.html +++ b/rt/share/html/Articles/Article/Edit.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/EditBasics b/rt/share/html/Articles/Article/Elements/EditBasics index 705cb0d19..82a4e5c8d 100644 --- a/rt/share/html/Articles/Article/Elements/EditBasics +++ b/rt/share/html/Articles/Article/Elements/EditBasics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/EditCustomFields b/rt/share/html/Articles/Article/Elements/EditCustomFields index 792f2220e..8af299236 100644 --- a/rt/share/html/Articles/Article/Elements/EditCustomFields +++ b/rt/share/html/Articles/Article/Elements/EditCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/EditLinks b/rt/share/html/Articles/Article/Elements/EditLinks index 57d733362..9e8567ef9 100644 --- a/rt/share/html/Articles/Article/Elements/EditLinks +++ b/rt/share/html/Articles/Article/Elements/EditLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/EditTopics b/rt/share/html/Articles/Article/Elements/EditTopics index 531030160..3f62545ac 100644 --- a/rt/share/html/Articles/Article/Elements/EditTopics +++ b/rt/share/html/Articles/Article/Elements/EditTopics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/LinkEntryInstructions b/rt/share/html/Articles/Article/Elements/LinkEntryInstructions index 23512634b..438c8dde4 100644 --- a/rt/share/html/Articles/Article/Elements/LinkEntryInstructions +++ b/rt/share/html/Articles/Article/Elements/LinkEntryInstructions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/Preformatted b/rt/share/html/Articles/Article/Elements/Preformatted index 0b4ddaaaa..7e3ab7cbd 100644 --- a/rt/share/html/Articles/Article/Elements/Preformatted +++ b/rt/share/html/Articles/Article/Elements/Preformatted @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/SearchByCustomField b/rt/share/html/Articles/Article/Elements/SearchByCustomField index 188995d63..f348507c2 100644 --- a/rt/share/html/Articles/Article/Elements/SearchByCustomField +++ b/rt/share/html/Articles/Article/Elements/SearchByCustomField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/SelectSavedSearches b/rt/share/html/Articles/Article/Elements/SelectSavedSearches index 57ab8d19a..a3756b319 100644 --- a/rt/share/html/Articles/Article/Elements/SelectSavedSearches +++ b/rt/share/html/Articles/Article/Elements/SelectSavedSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/SelectSearchPrivacy b/rt/share/html/Articles/Article/Elements/SelectSearchPrivacy index 8fa382270..03e7c7f5b 100644 --- a/rt/share/html/Articles/Article/Elements/SelectSearchPrivacy +++ b/rt/share/html/Articles/Article/Elements/SelectSearchPrivacy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/ShowHistory b/rt/share/html/Articles/Article/Elements/ShowHistory index d48bc0b5c..136640e4a 100644 --- a/rt/share/html/Articles/Article/Elements/ShowHistory +++ b/rt/share/html/Articles/Article/Elements/ShowHistory @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/ShowLinks b/rt/share/html/Articles/Article/Elements/ShowLinks index 8dddfc7fd..50a971a39 100644 --- a/rt/share/html/Articles/Article/Elements/ShowLinks +++ b/rt/share/html/Articles/Article/Elements/ShowLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/ShowSavedSearches b/rt/share/html/Articles/Article/Elements/ShowSavedSearches index 8da873e61..03396c5e8 100644 --- a/rt/share/html/Articles/Article/Elements/ShowSavedSearches +++ b/rt/share/html/Articles/Article/Elements/ShowSavedSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/ShowSearchCriteria b/rt/share/html/Articles/Article/Elements/ShowSearchCriteria index cf2884592..ad464f8ca 100644 --- a/rt/share/html/Articles/Article/Elements/ShowSearchCriteria +++ b/rt/share/html/Articles/Article/Elements/ShowSearchCriteria @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Elements/ShowTopics b/rt/share/html/Articles/Article/Elements/ShowTopics index cf62afa80..aecc205df 100644 --- a/rt/share/html/Articles/Article/Elements/ShowTopics +++ b/rt/share/html/Articles/Article/Elements/ShowTopics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/ExtractFromTicket.html b/rt/share/html/Articles/Article/ExtractFromTicket.html index 9d4939034..c007585fd 100644 --- a/rt/share/html/Articles/Article/ExtractFromTicket.html +++ b/rt/share/html/Articles/Article/ExtractFromTicket.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/ExtractIntoClass.html b/rt/share/html/Articles/Article/ExtractIntoClass.html index e2ddfcde4..c60585e9f 100644 --- a/rt/share/html/Articles/Article/ExtractIntoClass.html +++ b/rt/share/html/Articles/Article/ExtractIntoClass.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/ExtractIntoTopic.html b/rt/share/html/Articles/Article/ExtractIntoTopic.html index a90def932..639a0b9b5 100644 --- a/rt/share/html/Articles/Article/ExtractIntoTopic.html +++ b/rt/share/html/Articles/Article/ExtractIntoTopic.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/History.html b/rt/share/html/Articles/Article/History.html index 8fc9d2854..2ac352023 100644 --- a/rt/share/html/Articles/Article/History.html +++ b/rt/share/html/Articles/Article/History.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/PreCreate.html b/rt/share/html/Articles/Article/PreCreate.html index 2b11ac089..7a8c05e22 100644 --- a/rt/share/html/Articles/Article/PreCreate.html +++ b/rt/share/html/Articles/Article/PreCreate.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Article/Search.html b/rt/share/html/Articles/Article/Search.html index 14c4538b7..ad5eba97e 100644 --- a/rt/share/html/Articles/Article/Search.html +++ b/rt/share/html/Articles/Article/Search.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/BeforeMessageBox b/rt/share/html/Articles/Elements/BeforeMessageBox index 4339ca1f3..f3418eb0d 100644 --- a/rt/share/html/Articles/Elements/BeforeMessageBox +++ b/rt/share/html/Articles/Elements/BeforeMessageBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/CheckSkipCreate b/rt/share/html/Articles/Elements/CheckSkipCreate index 3663a5e08..841f52d72 100644 --- a/rt/share/html/Articles/Elements/CheckSkipCreate +++ b/rt/share/html/Articles/Elements/CheckSkipCreate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/CreateArticle b/rt/share/html/Articles/Elements/CreateArticle index 95258318d..3fb549f7c 100644 --- a/rt/share/html/Articles/Elements/CreateArticle +++ b/rt/share/html/Articles/Elements/CreateArticle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/GotoArticle b/rt/share/html/Articles/Elements/GotoArticle index 4e6f2fa70..dca59870b 100644 --- a/rt/share/html/Articles/Elements/GotoArticle +++ b/rt/share/html/Articles/Elements/GotoArticle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/IncludeArticle b/rt/share/html/Articles/Elements/IncludeArticle index 11abdb0dc..14528140b 100644 --- a/rt/share/html/Articles/Elements/IncludeArticle +++ b/rt/share/html/Articles/Elements/IncludeArticle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/NewestArticles b/rt/share/html/Articles/Elements/NewestArticles index 5b44a9928..8ceedeca0 100644 --- a/rt/share/html/Articles/Elements/NewestArticles +++ b/rt/share/html/Articles/Elements/NewestArticles @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/QuickSearch b/rt/share/html/Articles/Elements/QuickSearch index 31c77472b..da5d8247d 100644 --- a/rt/share/html/Articles/Elements/QuickSearch +++ b/rt/share/html/Articles/Elements/QuickSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/SelectClass b/rt/share/html/Articles/Elements/SelectClass index 4d084b2a7..352738396 100644 --- a/rt/share/html/Articles/Elements/SelectClass +++ b/rt/share/html/Articles/Elements/SelectClass @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/ShowTopic b/rt/share/html/Articles/Elements/ShowTopic index 6d786efff..64a367d84 100644 --- a/rt/share/html/Articles/Elements/ShowTopic +++ b/rt/share/html/Articles/Elements/ShowTopic @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/ShowTopicLink b/rt/share/html/Articles/Elements/ShowTopicLink index 1487bd297..147e5c9c1 100644 --- a/rt/share/html/Articles/Elements/ShowTopicLink +++ b/rt/share/html/Articles/Elements/ShowTopicLink @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Elements/UpdatedArticles b/rt/share/html/Articles/Elements/UpdatedArticles index 647086ef9..c2e1ff810 100644 --- a/rt/share/html/Articles/Elements/UpdatedArticles +++ b/rt/share/html/Articles/Elements/UpdatedArticles @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/Topics.html b/rt/share/html/Articles/Topics.html index e6cdc85de..47bb23a98 100644 --- a/rt/share/html/Articles/Topics.html +++ b/rt/share/html/Articles/Topics.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Articles/index.html b/rt/share/html/Articles/index.html index f50d2e0fa..bfe4a1f07 100644 --- a/rt/share/html/Articles/index.html +++ b/rt/share/html/Articles/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/DashboardsForObject b/rt/share/html/Dashboards/Elements/DashboardsForObject index 3e1131072..4c9df63ca 100644 --- a/rt/share/html/Dashboards/Elements/DashboardsForObject +++ b/rt/share/html/Dashboards/Elements/DashboardsForObject @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/Deleted b/rt/share/html/Dashboards/Elements/Deleted index d253f85be..1999b7c3b 100644 --- a/rt/share/html/Dashboards/Elements/Deleted +++ b/rt/share/html/Dashboards/Elements/Deleted @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/HiddenSearches b/rt/share/html/Dashboards/Elements/HiddenSearches index 6c21f0893..651974ac6 100644 --- a/rt/share/html/Dashboards/Elements/HiddenSearches +++ b/rt/share/html/Dashboards/Elements/HiddenSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/ListOfDashboards b/rt/share/html/Dashboards/Elements/ListOfDashboards index ac222842d..d6f5bccad 100644 --- a/rt/share/html/Dashboards/Elements/ListOfDashboards +++ b/rt/share/html/Dashboards/Elements/ListOfDashboards @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/SelectPrivacy b/rt/share/html/Dashboards/Elements/SelectPrivacy index b95a06082..5628d758d 100644 --- a/rt/share/html/Dashboards/Elements/SelectPrivacy +++ b/rt/share/html/Dashboards/Elements/SelectPrivacy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/ShowDashboards b/rt/share/html/Dashboards/Elements/ShowDashboards index e04e149bb..5cf73a71d 100644 --- a/rt/share/html/Dashboards/Elements/ShowDashboards +++ b/rt/share/html/Dashboards/Elements/ShowDashboards @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/component b/rt/share/html/Dashboards/Elements/ShowPortlet/component index 81614a24b..5218843f8 100644 --- a/rt/share/html/Dashboards/Elements/ShowPortlet/component +++ b/rt/share/html/Dashboards/Elements/ShowPortlet/component @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard b/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard index c9de6dfbd..d2ae85d5a 100644 --- a/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard +++ b/rt/share/html/Dashboards/Elements/ShowPortlet/dashboard @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Elements/ShowPortlet/search b/rt/share/html/Dashboards/Elements/ShowPortlet/search index 416476c86..d190295d7 100644 --- a/rt/share/html/Dashboards/Elements/ShowPortlet/search +++ b/rt/share/html/Dashboards/Elements/ShowPortlet/search @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Modify.html b/rt/share/html/Dashboards/Modify.html index 001dd4a35..322b03038 100755 --- a/rt/share/html/Dashboards/Modify.html +++ b/rt/share/html/Dashboards/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Queries.html b/rt/share/html/Dashboards/Queries.html index c489f1c18..c3a4ca542 100644 --- a/rt/share/html/Dashboards/Queries.html +++ b/rt/share/html/Dashboards/Queries.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Render.html b/rt/share/html/Dashboards/Render.html index dfb836917..30b476bc8 100644 --- a/rt/share/html/Dashboards/Render.html +++ b/rt/share/html/Dashboards/Render.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/Subscription.html b/rt/share/html/Dashboards/Subscription.html index df612d2f8..b1eaf64f1 100644 --- a/rt/share/html/Dashboards/Subscription.html +++ b/rt/share/html/Dashboards/Subscription.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/dhandler b/rt/share/html/Dashboards/dhandler index ecdbebb61..8e94f4f7c 100644 --- a/rt/share/html/Dashboards/dhandler +++ b/rt/share/html/Dashboards/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Dashboards/index.html b/rt/share/html/Dashboards/index.html index b9aea36e3..6cf0f895f 100644 --- a/rt/share/html/Dashboards/index.html +++ b/rt/share/html/Dashboards/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Download/CustomFieldValue/dhandler b/rt/share/html/Download/CustomFieldValue/dhandler index f41ed5008..45157169c 100644 --- a/rt/share/html/Download/CustomFieldValue/dhandler +++ b/rt/share/html/Download/CustomFieldValue/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/BevelBoxRaisedEnd b/rt/share/html/Elements/BevelBoxRaisedEnd index 01b72b75a..e51efe2fc 100755 --- a/rt/share/html/Elements/BevelBoxRaisedEnd +++ b/rt/share/html/Elements/BevelBoxRaisedEnd @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/BevelBoxRaisedStart b/rt/share/html/Elements/BevelBoxRaisedStart index 37b787a05..9c9b41082 100755 --- a/rt/share/html/Elements/BevelBoxRaisedStart +++ b/rt/share/html/Elements/BevelBoxRaisedStart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CSRF b/rt/share/html/Elements/CSRF index d8c00145c..c9c50773f 100644 --- a/rt/share/html/Elements/CSRF +++ b/rt/share/html/Elements/CSRF @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Callback b/rt/share/html/Elements/Callback index 9e0e90524..119853a57 100755 --- a/rt/share/html/Elements/Callback +++ b/rt/share/html/Elements/Callback @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Checkbox b/rt/share/html/Elements/Checkbox index 19ca36345..adb2b4f88 100755 --- a/rt/share/html/Elements/Checkbox +++ b/rt/share/html/Elements/Checkbox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CollectionAsTable/Header b/rt/share/html/Elements/CollectionAsTable/Header index c9116ade6..ea3fafd51 100644 --- a/rt/share/html/Elements/CollectionAsTable/Header +++ b/rt/share/html/Elements/CollectionAsTable/Header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CollectionAsTable/ParseFormat b/rt/share/html/Elements/CollectionAsTable/ParseFormat index 5d55ffbeb..aeeec6d0f 100644 --- a/rt/share/html/Elements/CollectionAsTable/ParseFormat +++ b/rt/share/html/Elements/CollectionAsTable/ParseFormat @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CollectionAsTable/Row b/rt/share/html/Elements/CollectionAsTable/Row index efe046d81..b83943aa5 100644 --- a/rt/share/html/Elements/CollectionAsTable/Row +++ b/rt/share/html/Elements/CollectionAsTable/Row @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CollectionList b/rt/share/html/Elements/CollectionList index 44f762410..d76cf014b 100644 --- a/rt/share/html/Elements/CollectionList +++ b/rt/share/html/Elements/CollectionList @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CollectionListPaging b/rt/share/html/Elements/CollectionListPaging index 4a0b45b58..8bfa4f60b 100644 --- a/rt/share/html/Elements/CollectionListPaging +++ b/rt/share/html/Elements/CollectionListPaging @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ColumnMap b/rt/share/html/Elements/ColumnMap index 30d4b3a0a..3ae10ea3e 100644 --- a/rt/share/html/Elements/ColumnMap +++ b/rt/share/html/Elements/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/CreateTicket b/rt/share/html/Elements/CreateTicket index 9e7427c2e..7dad1825b 100755 --- a/rt/share/html/Elements/CreateTicket +++ b/rt/share/html/Elements/CreateTicket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Dashboards b/rt/share/html/Elements/Dashboards index 26796f52f..55f70b97e 100644 --- a/rt/share/html/Elements/Dashboards +++ b/rt/share/html/Elements/Dashboards @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomField b/rt/share/html/Elements/EditCustomField index 9b7f29a40..d0928dc9a 100644 --- a/rt/share/html/Elements/EditCustomField +++ b/rt/share/html/Elements/EditCustomField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldAutocomplete b/rt/share/html/Elements/EditCustomFieldAutocomplete index 8eb7b427a..1dd4b621f 100644 --- a/rt/share/html/Elements/EditCustomFieldAutocomplete +++ b/rt/share/html/Elements/EditCustomFieldAutocomplete @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldBinary b/rt/share/html/Elements/EditCustomFieldBinary index 591082790..7a2de4995 100644 --- a/rt/share/html/Elements/EditCustomFieldBinary +++ b/rt/share/html/Elements/EditCustomFieldBinary @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldCombobox b/rt/share/html/Elements/EditCustomFieldCombobox index a23ed008b..718ff3035 100644 --- a/rt/share/html/Elements/EditCustomFieldCombobox +++ b/rt/share/html/Elements/EditCustomFieldCombobox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldDate b/rt/share/html/Elements/EditCustomFieldDate index c430b0b33..25e01f4ab 100644 --- a/rt/share/html/Elements/EditCustomFieldDate +++ b/rt/share/html/Elements/EditCustomFieldDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldDateTime b/rt/share/html/Elements/EditCustomFieldDateTime index b50ea431a..28fecd31d 100644 --- a/rt/share/html/Elements/EditCustomFieldDateTime +++ b/rt/share/html/Elements/EditCustomFieldDateTime @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldFreeform b/rt/share/html/Elements/EditCustomFieldFreeform index f0f8ee6de..3514b1dc6 100644 --- a/rt/share/html/Elements/EditCustomFieldFreeform +++ b/rt/share/html/Elements/EditCustomFieldFreeform @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldIPAddress b/rt/share/html/Elements/EditCustomFieldIPAddress index ba8378a7c..77c85abd6 100644 --- a/rt/share/html/Elements/EditCustomFieldIPAddress +++ b/rt/share/html/Elements/EditCustomFieldIPAddress @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldIPAddressRange b/rt/share/html/Elements/EditCustomFieldIPAddressRange index ba8378a7c..77c85abd6 100644 --- a/rt/share/html/Elements/EditCustomFieldIPAddressRange +++ b/rt/share/html/Elements/EditCustomFieldIPAddressRange @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldImage b/rt/share/html/Elements/EditCustomFieldImage index 3f64d38c1..96e0ac648 100644 --- a/rt/share/html/Elements/EditCustomFieldImage +++ b/rt/share/html/Elements/EditCustomFieldImage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldSelect b/rt/share/html/Elements/EditCustomFieldSelect index b343d8266..662c1889c 100644 --- a/rt/share/html/Elements/EditCustomFieldSelect +++ b/rt/share/html/Elements/EditCustomFieldSelect @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldText b/rt/share/html/Elements/EditCustomFieldText index ca7a266c3..a5c043b61 100644 --- a/rt/share/html/Elements/EditCustomFieldText +++ b/rt/share/html/Elements/EditCustomFieldText @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditCustomFieldWikitext b/rt/share/html/Elements/EditCustomFieldWikitext index d4b79cd38..b75fc99d3 100644 --- a/rt/share/html/Elements/EditCustomFieldWikitext +++ b/rt/share/html/Elements/EditCustomFieldWikitext @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditLinks b/rt/share/html/Elements/EditLinks index 28cc940c6..e167d1144 100755 --- a/rt/share/html/Elements/EditLinks +++ b/rt/share/html/Elements/EditLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditPassword b/rt/share/html/Elements/EditPassword index aaf1780a0..1390d2fab 100644 --- a/rt/share/html/Elements/EditPassword +++ b/rt/share/html/Elements/EditPassword @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EditTimeValue b/rt/share/html/Elements/EditTimeValue index f1126ec17..ac27665fb 100644 --- a/rt/share/html/Elements/EditTimeValue +++ b/rt/share/html/Elements/EditTimeValue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/EmailInput b/rt/share/html/Elements/EmailInput index 1f561e983..2ae0ddb9e 100644 --- a/rt/share/html/Elements/EmailInput +++ b/rt/share/html/Elements/EmailInput @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Error b/rt/share/html/Elements/Error index d747c4e5b..5ca18386e 100755 --- a/rt/share/html/Elements/Error +++ b/rt/share/html/Elements/Error @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Footer b/rt/share/html/Elements/Footer index 940e71ccf..200e851ec 100755 --- a/rt/share/html/Elements/Footer +++ b/rt/share/html/Elements/Footer @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Framekiller b/rt/share/html/Elements/Framekiller index 9b9f9efb5..0fac8290e 100644 --- a/rt/share/html/Elements/Framekiller +++ b/rt/share/html/Elements/Framekiller @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/GnuPG/KeyIssues b/rt/share/html/Elements/GnuPG/KeyIssues index 07d6455be..a7ef7c4fd 100644 --- a/rt/share/html/Elements/GnuPG/KeyIssues +++ b/rt/share/html/Elements/GnuPG/KeyIssues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/GnuPG/SelectKeyForEncryption b/rt/share/html/Elements/GnuPG/SelectKeyForEncryption index d6126317d..54aa3c6ec 100644 --- a/rt/share/html/Elements/GnuPG/SelectKeyForEncryption +++ b/rt/share/html/Elements/GnuPG/SelectKeyForEncryption @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/GnuPG/SelectKeyForSigning b/rt/share/html/Elements/GnuPG/SelectKeyForSigning index d684896d6..047d55810 100644 --- a/rt/share/html/Elements/GnuPG/SelectKeyForSigning +++ b/rt/share/html/Elements/GnuPG/SelectKeyForSigning @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/GnuPG/SignEncryptWidget b/rt/share/html/Elements/GnuPG/SignEncryptWidget index cec3f3a84..c1b5b2560 100644 --- a/rt/share/html/Elements/GnuPG/SignEncryptWidget +++ b/rt/share/html/Elements/GnuPG/SignEncryptWidget @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/GotoTicket b/rt/share/html/Elements/GotoTicket index ec6e5c6d2..b51821f2e 100755 --- a/rt/share/html/Elements/GotoTicket +++ b/rt/share/html/Elements/GotoTicket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Header b/rt/share/html/Elements/Header index 5e08fe384..1f6035d7d 100755 --- a/rt/share/html/Elements/Header +++ b/rt/share/html/Elements/Header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/HeaderJavascript b/rt/share/html/Elements/HeaderJavascript index 3e5e9eca3..4bba5592c 100644 --- a/rt/share/html/Elements/HeaderJavascript +++ b/rt/share/html/Elements/HeaderJavascript @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ListActions b/rt/share/html/Elements/ListActions index 37f7ce57a..2b74c3878 100755 --- a/rt/share/html/Elements/ListActions +++ b/rt/share/html/Elements/ListActions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ListMenu b/rt/share/html/Elements/ListMenu index 4e5602989..45949c6c7 100644 --- a/rt/share/html/Elements/ListMenu +++ b/rt/share/html/Elements/ListMenu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Login b/rt/share/html/Elements/Login index 5564df26f..2c48294a2 100755 --- a/rt/share/html/Elements/Login +++ b/rt/share/html/Elements/Login @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/LoginRedirectWarning b/rt/share/html/Elements/LoginRedirectWarning index 9233d3e00..63fd6573a 100644 --- a/rt/share/html/Elements/LoginRedirectWarning +++ b/rt/share/html/Elements/LoginRedirectWarning @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Logo b/rt/share/html/Elements/Logo index ff2dae6e7..23c73e845 100644 --- a/rt/share/html/Elements/Logo +++ b/rt/share/html/Elements/Logo @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MakeClicky b/rt/share/html/Elements/MakeClicky index 8efe78c4a..4607ba092 100644 --- a/rt/share/html/Elements/MakeClicky +++ b/rt/share/html/Elements/MakeClicky @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Menu b/rt/share/html/Elements/Menu index c1b12076d..16535c825 100755 --- a/rt/share/html/Elements/Menu +++ b/rt/share/html/Elements/Menu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MessageBox b/rt/share/html/Elements/MessageBox index 09fedad7e..c4a2de98c 100755 --- a/rt/share/html/Elements/MessageBox +++ b/rt/share/html/Elements/MessageBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MyAdminQueues b/rt/share/html/Elements/MyAdminQueues index 168d01c5e..0579552df 100644 --- a/rt/share/html/Elements/MyAdminQueues +++ b/rt/share/html/Elements/MyAdminQueues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MyRT b/rt/share/html/Elements/MyRT index 84db949f7..e8b084660 100644 --- a/rt/share/html/Elements/MyRT +++ b/rt/share/html/Elements/MyRT @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MyReminders b/rt/share/html/Elements/MyReminders index c9f789cb9..7619808f8 100755 --- a/rt/share/html/Elements/MyReminders +++ b/rt/share/html/Elements/MyReminders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MyRequests b/rt/share/html/Elements/MyRequests index 19608a366..357476cfd 100755 --- a/rt/share/html/Elements/MyRequests +++ b/rt/share/html/Elements/MyRequests @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MySupportQueues b/rt/share/html/Elements/MySupportQueues index 97e609178..8e4cb0b18 100644 --- a/rt/share/html/Elements/MySupportQueues +++ b/rt/share/html/Elements/MySupportQueues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/MyTickets b/rt/share/html/Elements/MyTickets index 6d56e6646..583d17d19 100755 --- a/rt/share/html/Elements/MyTickets +++ b/rt/share/html/Elements/MyTickets @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/PageLayout b/rt/share/html/Elements/PageLayout index e04142621..9e8aecb20 100755 --- a/rt/share/html/Elements/PageLayout +++ b/rt/share/html/Elements/PageLayout @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/PersonalQuickbar b/rt/share/html/Elements/PersonalQuickbar index 2a8c86e41..df41f9f72 100644 --- a/rt/share/html/Elements/PersonalQuickbar +++ b/rt/share/html/Elements/PersonalQuickbar @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/QueriesAsComment b/rt/share/html/Elements/QueriesAsComment index 33e2211e2..6eccca0b4 100644 --- a/rt/share/html/Elements/QueriesAsComment +++ b/rt/share/html/Elements/QueriesAsComment @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/QueryString b/rt/share/html/Elements/QueryString index 5672f19a0..8bff988c6 100644 --- a/rt/share/html/Elements/QueryString +++ b/rt/share/html/Elements/QueryString @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/QueueSummaryByLifecycle b/rt/share/html/Elements/QueueSummaryByLifecycle index 57373085b..da31ebb59 100644 --- a/rt/share/html/Elements/QueueSummaryByLifecycle +++ b/rt/share/html/Elements/QueueSummaryByLifecycle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/QueueSummaryByStatus b/rt/share/html/Elements/QueueSummaryByStatus index 40b2131c2..3acf9c9f4 100644 --- a/rt/share/html/Elements/QueueSummaryByStatus +++ b/rt/share/html/Elements/QueueSummaryByStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/QuickCreate b/rt/share/html/Elements/QuickCreate index 425694cd7..fa03f2061 100644 --- a/rt/share/html/Elements/QuickCreate +++ b/rt/share/html/Elements/QuickCreate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -55,27 +55,31 @@ - + - - + - +
<&|/l&>Subject:
<&|/l&>Queue:<& /Elements/SelectNewTicketQueue, Name => 'Queue' &> +<&|/l&>Queue:<& /Elements/SelectNewTicketQueue, Name => 'Queue', Default => $args->{Queue} &> <&|/l&>Owner:
<&|/l&>Requestors:<& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $ARGS{Requestors} || $session{CurrentUser}->EmailAddress &><& /Elements/EmailInput, Name => 'Requestors', Size => '40', Default => $args->{Requestors} || $session{CurrentUser}->EmailAddress &>
<&|/l&>Content:
<& /Elements/Submit, Label => loc('Create') &> +<%INIT> +my $args = delete $session{QuickCreate} || {}; + diff --git a/rt/share/html/Elements/Quicksearch b/rt/share/html/Elements/Quicksearch index 1639733d2..3d832e4a3 100755 --- a/rt/share/html/Elements/Quicksearch +++ b/rt/share/html/Elements/Quicksearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Article/ColumnMap b/rt/share/html/Elements/RT__Article/ColumnMap index 497c8afe6..4abb068c2 100644 --- a/rt/share/html/Elements/RT__Article/ColumnMap +++ b/rt/share/html/Elements/RT__Article/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Class/ColumnMap b/rt/share/html/Elements/RT__Class/ColumnMap index 4920e90d0..091606571 100644 --- a/rt/share/html/Elements/RT__Class/ColumnMap +++ b/rt/share/html/Elements/RT__Class/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__CustomField/ColumnMap b/rt/share/html/Elements/RT__CustomField/ColumnMap index fea3f5527..765be2925 100644 --- a/rt/share/html/Elements/RT__CustomField/ColumnMap +++ b/rt/share/html/Elements/RT__CustomField/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Dashboard/ColumnMap b/rt/share/html/Elements/RT__Dashboard/ColumnMap index 73df7f496..3cc7c201a 100644 --- a/rt/share/html/Elements/RT__Dashboard/ColumnMap +++ b/rt/share/html/Elements/RT__Dashboard/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Group/ColumnMap b/rt/share/html/Elements/RT__Group/ColumnMap index 29ab57307..e336f771b 100644 --- a/rt/share/html/Elements/RT__Group/ColumnMap +++ b/rt/share/html/Elements/RT__Group/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Queue/ColumnMap b/rt/share/html/Elements/RT__Queue/ColumnMap index a153177da..8bc333167 100644 --- a/rt/share/html/Elements/RT__Queue/ColumnMap +++ b/rt/share/html/Elements/RT__Queue/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__SavedSearch/ColumnMap b/rt/share/html/Elements/RT__SavedSearch/ColumnMap index 9edf435c1..dd02cbcc7 100644 --- a/rt/share/html/Elements/RT__SavedSearch/ColumnMap +++ b/rt/share/html/Elements/RT__SavedSearch/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Scrip/ColumnMap b/rt/share/html/Elements/RT__Scrip/ColumnMap index d417cef39..eb2f06566 100644 --- a/rt/share/html/Elements/RT__Scrip/ColumnMap +++ b/rt/share/html/Elements/RT__Scrip/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Template/ColumnMap b/rt/share/html/Elements/RT__Template/ColumnMap index 61da591d6..da712c281 100644 --- a/rt/share/html/Elements/RT__Template/ColumnMap +++ b/rt/share/html/Elements/RT__Template/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__Ticket/ColumnMap b/rt/share/html/Elements/RT__Ticket/ColumnMap index 7309b5d66..1668d3207 100644 --- a/rt/share/html/Elements/RT__Ticket/ColumnMap +++ b/rt/share/html/Elements/RT__Ticket/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RT__User/ColumnMap b/rt/share/html/Elements/RT__User/ColumnMap index d6d7d6583..9c3aa272f 100644 --- a/rt/share/html/Elements/RT__User/ColumnMap +++ b/rt/share/html/Elements/RT__User/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Refresh b/rt/share/html/Elements/Refresh index d3484ec1f..9a4448143 100755 --- a/rt/share/html/Elements/Refresh +++ b/rt/share/html/Elements/Refresh @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/RefreshHomepage b/rt/share/html/Elements/RefreshHomepage index 4a9c72cf8..322719449 100644 --- a/rt/share/html/Elements/RefreshHomepage +++ b/rt/share/html/Elements/RefreshHomepage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SavedSearches b/rt/share/html/Elements/SavedSearches index db990010f..f5b654dbf 100644 --- a/rt/share/html/Elements/SavedSearches +++ b/rt/share/html/Elements/SavedSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ScrubHTML b/rt/share/html/Elements/ScrubHTML index 1e9a49c83..e6a34b946 100644 --- a/rt/share/html/Elements/ScrubHTML +++ b/rt/share/html/Elements/ScrubHTML @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Section b/rt/share/html/Elements/Section index 0d9fa715d..56b8597dd 100755 --- a/rt/share/html/Elements/Section +++ b/rt/share/html/Elements/Section @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectAttachmentField b/rt/share/html/Elements/SelectAttachmentField index d6a38ea60..73186fdc6 100755 --- a/rt/share/html/Elements/SelectAttachmentField +++ b/rt/share/html/Elements/SelectAttachmentField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectBoolean b/rt/share/html/Elements/SelectBoolean index a34775ebe..79283da78 100755 --- a/rt/share/html/Elements/SelectBoolean +++ b/rt/share/html/Elements/SelectBoolean @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectCustomFieldOperator b/rt/share/html/Elements/SelectCustomFieldOperator index 9fadd0e4f..9292a6771 100755 --- a/rt/share/html/Elements/SelectCustomFieldOperator +++ b/rt/share/html/Elements/SelectCustomFieldOperator @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectCustomFieldValue b/rt/share/html/Elements/SelectCustomFieldValue index 21887b810..38f0f6205 100755 --- a/rt/share/html/Elements/SelectCustomFieldValue +++ b/rt/share/html/Elements/SelectCustomFieldValue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectDate b/rt/share/html/Elements/SelectDate index 98656c15d..14835272b 100755 --- a/rt/share/html/Elements/SelectDate +++ b/rt/share/html/Elements/SelectDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectDateRelation b/rt/share/html/Elements/SelectDateRelation index fe1ab6bdd..6c662fa69 100755 --- a/rt/share/html/Elements/SelectDateRelation +++ b/rt/share/html/Elements/SelectDateRelation @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectDateType b/rt/share/html/Elements/SelectDateType index a37b3f127..d6e9713b7 100755 --- a/rt/share/html/Elements/SelectDateType +++ b/rt/share/html/Elements/SelectDateType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectEqualityOperator b/rt/share/html/Elements/SelectEqualityOperator index 8e35bab56..29e859f92 100755 --- a/rt/share/html/Elements/SelectEqualityOperator +++ b/rt/share/html/Elements/SelectEqualityOperator @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectGroups b/rt/share/html/Elements/SelectGroups index bf7989b69..9d41119a9 100755 --- a/rt/share/html/Elements/SelectGroups +++ b/rt/share/html/Elements/SelectGroups @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectIPRelation b/rt/share/html/Elements/SelectIPRelation index b129820f5..f962c594d 100644 --- a/rt/share/html/Elements/SelectIPRelation +++ b/rt/share/html/Elements/SelectIPRelation @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectLang b/rt/share/html/Elements/SelectLang index 45d6b01cc..9ba09f8b2 100755 --- a/rt/share/html/Elements/SelectLang +++ b/rt/share/html/Elements/SelectLang @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectLinkType b/rt/share/html/Elements/SelectLinkType index c53e20fbd..5d70f04e4 100755 --- a/rt/share/html/Elements/SelectLinkType +++ b/rt/share/html/Elements/SelectLinkType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectMatch b/rt/share/html/Elements/SelectMatch index 7d3c28cae..65e108da0 100755 --- a/rt/share/html/Elements/SelectMatch +++ b/rt/share/html/Elements/SelectMatch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectNewTicketQueue b/rt/share/html/Elements/SelectNewTicketQueue index dd966ed6d..57abc447b 100755 --- a/rt/share/html/Elements/SelectNewTicketQueue +++ b/rt/share/html/Elements/SelectNewTicketQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectOwner b/rt/share/html/Elements/SelectOwner index 9327de20a..731de45db 100755 --- a/rt/share/html/Elements/SelectOwner +++ b/rt/share/html/Elements/SelectOwner @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectOwnerAutocomplete b/rt/share/html/Elements/SelectOwnerAutocomplete index a78a6ad0d..d54bce39d 100644 --- a/rt/share/html/Elements/SelectOwnerAutocomplete +++ b/rt/share/html/Elements/SelectOwnerAutocomplete @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectOwnerDropdown b/rt/share/html/Elements/SelectOwnerDropdown index 415049ad6..acd8bc964 100644 --- a/rt/share/html/Elements/SelectOwnerDropdown +++ b/rt/share/html/Elements/SelectOwnerDropdown @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectPriority b/rt/share/html/Elements/SelectPriority index 10cfc3ea2..6346be24c 100644 --- a/rt/share/html/Elements/SelectPriority +++ b/rt/share/html/Elements/SelectPriority @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectQueue b/rt/share/html/Elements/SelectQueue index 7276af09a..76440d124 100755 --- a/rt/share/html/Elements/SelectQueue +++ b/rt/share/html/Elements/SelectQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectResultsPerPage b/rt/share/html/Elements/SelectResultsPerPage index 145d19482..e593d3b39 100755 --- a/rt/share/html/Elements/SelectResultsPerPage +++ b/rt/share/html/Elements/SelectResultsPerPage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectSortOrder b/rt/share/html/Elements/SelectSortOrder index 7611349fe..0075df61d 100755 --- a/rt/share/html/Elements/SelectSortOrder +++ b/rt/share/html/Elements/SelectSortOrder @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectStatus b/rt/share/html/Elements/SelectStatus index b9f463321..3c833d85c 100755 --- a/rt/share/html/Elements/SelectStatus +++ b/rt/share/html/Elements/SelectStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectTicketSortBy b/rt/share/html/Elements/SelectTicketSortBy index 18a0cc093..d06692a80 100755 --- a/rt/share/html/Elements/SelectTicketSortBy +++ b/rt/share/html/Elements/SelectTicketSortBy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectTicketTypes b/rt/share/html/Elements/SelectTicketTypes index fe7f62d0a..cecf61729 100755 --- a/rt/share/html/Elements/SelectTicketTypes +++ b/rt/share/html/Elements/SelectTicketTypes @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectTimeUnits b/rt/share/html/Elements/SelectTimeUnits index e548af43b..660e5c7fa 100755 --- a/rt/share/html/Elements/SelectTimeUnits +++ b/rt/share/html/Elements/SelectTimeUnits @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectTimezone b/rt/share/html/Elements/SelectTimezone index 003fd9acc..df4b9b8a0 100644 --- a/rt/share/html/Elements/SelectTimezone +++ b/rt/share/html/Elements/SelectTimezone @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectUsers b/rt/share/html/Elements/SelectUsers index ae3c96400..c0762b5f2 100755 --- a/rt/share/html/Elements/SelectUsers +++ b/rt/share/html/Elements/SelectUsers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SelectWatcherType b/rt/share/html/Elements/SelectWatcherType index 174a77a43..105d1f444 100755 --- a/rt/share/html/Elements/SelectWatcherType +++ b/rt/share/html/Elements/SelectWatcherType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SetupSessionCookie b/rt/share/html/Elements/SetupSessionCookie index d042d6d72..f6ff0ed64 100755 --- a/rt/share/html/Elements/SetupSessionCookie +++ b/rt/share/html/Elements/SetupSessionCookie @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldBinary b/rt/share/html/Elements/ShowCustomFieldBinary index 78e44e807..544b54db1 100644 --- a/rt/share/html/Elements/ShowCustomFieldBinary +++ b/rt/share/html/Elements/ShowCustomFieldBinary @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldDate b/rt/share/html/Elements/ShowCustomFieldDate index ad7ae4f50..92ab7679a 100644 --- a/rt/share/html/Elements/ShowCustomFieldDate +++ b/rt/share/html/Elements/ShowCustomFieldDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldDateTime b/rt/share/html/Elements/ShowCustomFieldDateTime index 006cc788d..2ba873aad 100644 --- a/rt/share/html/Elements/ShowCustomFieldDateTime +++ b/rt/share/html/Elements/ShowCustomFieldDateTime @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldImage b/rt/share/html/Elements/ShowCustomFieldImage index c36106283..6df80cc0e 100644 --- a/rt/share/html/Elements/ShowCustomFieldImage +++ b/rt/share/html/Elements/ShowCustomFieldImage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldText b/rt/share/html/Elements/ShowCustomFieldText index 13455e608..0216374f2 100644 --- a/rt/share/html/Elements/ShowCustomFieldText +++ b/rt/share/html/Elements/ShowCustomFieldText @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFieldWikitext b/rt/share/html/Elements/ShowCustomFieldWikitext index 5f32d479e..fe4fee881 100644 --- a/rt/share/html/Elements/ShowCustomFieldWikitext +++ b/rt/share/html/Elements/ShowCustomFieldWikitext @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowCustomFields b/rt/share/html/Elements/ShowCustomFields index f632e68fe..75e302bd3 100644 --- a/rt/share/html/Elements/ShowCustomFields +++ b/rt/share/html/Elements/ShowCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowLink b/rt/share/html/Elements/ShowLink index 35b26381a..b533c83dc 100644 --- a/rt/share/html/Elements/ShowLink +++ b/rt/share/html/Elements/ShowLink @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowLinks b/rt/share/html/Elements/ShowLinks index 16fc56d29..8880224f7 100755 --- a/rt/share/html/Elements/ShowLinks +++ b/rt/share/html/Elements/ShowLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowMemberships b/rt/share/html/Elements/ShowMemberships index f8c20cd20..453beeaaf 100644 --- a/rt/share/html/Elements/ShowMemberships +++ b/rt/share/html/Elements/ShowMemberships @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowRelationLabel b/rt/share/html/Elements/ShowRelationLabel index 9635a120c..92d8fec8d 100644 --- a/rt/share/html/Elements/ShowRelationLabel +++ b/rt/share/html/Elements/ShowRelationLabel @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowReminders b/rt/share/html/Elements/ShowReminders index 18945c10e..6b5ad3969 100644 --- a/rt/share/html/Elements/ShowReminders +++ b/rt/share/html/Elements/ShowReminders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowSearch b/rt/share/html/Elements/ShowSearch index e08b9eaa6..20ce55b9a 100644 --- a/rt/share/html/Elements/ShowSearch +++ b/rt/share/html/Elements/ShowSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowUser b/rt/share/html/Elements/ShowUser index dd79f2eed..c58d33b59 100644 --- a/rt/share/html/Elements/ShowUser +++ b/rt/share/html/Elements/ShowUser @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowUserConcise b/rt/share/html/Elements/ShowUserConcise index aeabae0c2..1fa970e8d 100644 --- a/rt/share/html/Elements/ShowUserConcise +++ b/rt/share/html/Elements/ShowUserConcise @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowUserEmailFrequency b/rt/share/html/Elements/ShowUserEmailFrequency index 6229e9571..714262235 100644 --- a/rt/share/html/Elements/ShowUserEmailFrequency +++ b/rt/share/html/Elements/ShowUserEmailFrequency @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ShowUserVerbose b/rt/share/html/Elements/ShowUserVerbose index 3276228bf..fd26007e6 100644 --- a/rt/share/html/Elements/ShowUserVerbose +++ b/rt/share/html/Elements/ShowUserVerbose @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/SimpleSearch b/rt/share/html/Elements/SimpleSearch index d9f34fa07..d6287f19b 100755 --- a/rt/share/html/Elements/SimpleSearch +++ b/rt/share/html/Elements/SimpleSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Submit b/rt/share/html/Elements/Submit index 04bc98aa3..c26c468be 100755 --- a/rt/share/html/Elements/Submit +++ b/rt/share/html/Elements/Submit @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Tabs b/rt/share/html/Elements/Tabs index f769a8006..3e28e2578 100755 --- a/rt/share/html/Elements/Tabs +++ b/rt/share/html/Elements/Tabs @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/TicketList b/rt/share/html/Elements/TicketList index 62fc9d09d..4bade4934 100644 --- a/rt/share/html/Elements/TicketList +++ b/rt/share/html/Elements/TicketList @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/TitleBox b/rt/share/html/Elements/TitleBox index c2c94cd9b..3bb0d0345 100644 --- a/rt/share/html/Elements/TitleBox +++ b/rt/share/html/Elements/TitleBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/TitleBoxEnd b/rt/share/html/Elements/TitleBoxEnd index 646256c6c..bf5ef42b7 100644 --- a/rt/share/html/Elements/TitleBoxEnd +++ b/rt/share/html/Elements/TitleBoxEnd @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/TitleBoxStart b/rt/share/html/Elements/TitleBoxStart index 405ecbd9a..15671aa1c 100644 --- a/rt/share/html/Elements/TitleBoxStart +++ b/rt/share/html/Elements/TitleBoxStart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/ValidateCustomFields b/rt/share/html/Elements/ValidateCustomFields index 8b4982842..55c1fcebb 100644 --- a/rt/share/html/Elements/ValidateCustomFields +++ b/rt/share/html/Elements/ValidateCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/WidgetBar b/rt/share/html/Elements/WidgetBar index b9daab398..f11d5d298 100644 --- a/rt/share/html/Elements/WidgetBar +++ b/rt/share/html/Elements/WidgetBar @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Autocomplete/CustomFieldValues b/rt/share/html/Helpers/Autocomplete/CustomFieldValues index eec346ebb..0694e9d8f 100644 --- a/rt/share/html/Helpers/Autocomplete/CustomFieldValues +++ b/rt/share/html/Helpers/Autocomplete/CustomFieldValues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Autocomplete/Groups b/rt/share/html/Helpers/Autocomplete/Groups index a7de30a6d..1f4043fc6 100644 --- a/rt/share/html/Helpers/Autocomplete/Groups +++ b/rt/share/html/Helpers/Autocomplete/Groups @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Autocomplete/Owners b/rt/share/html/Helpers/Autocomplete/Owners index e3ac81eca..be4a85622 100644 --- a/rt/share/html/Helpers/Autocomplete/Owners +++ b/rt/share/html/Helpers/Autocomplete/Owners @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Autocomplete/Users b/rt/share/html/Helpers/Autocomplete/Users index 8f7425f2f..e5b7624ba 100644 --- a/rt/share/html/Helpers/Autocomplete/Users +++ b/rt/share/html/Helpers/Autocomplete/Users @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Autocomplete/autohandler b/rt/share/html/Helpers/Autocomplete/autohandler index c76636fc0..5a6040fd9 100644 --- a/rt/share/html/Helpers/Autocomplete/autohandler +++ b/rt/share/html/Helpers/Autocomplete/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/TicketHistory b/rt/share/html/Helpers/TicketHistory index 97864d412..91c975c23 100644 --- a/rt/share/html/Helpers/TicketHistory +++ b/rt/share/html/Helpers/TicketHistory @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Toggle/ShowRequestor b/rt/share/html/Helpers/Toggle/ShowRequestor index a2b3ed248..cb2692a68 100644 --- a/rt/share/html/Helpers/Toggle/ShowRequestor +++ b/rt/share/html/Helpers/Toggle/ShowRequestor @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/Toggle/TicketBookmark b/rt/share/html/Helpers/Toggle/TicketBookmark index 08a3f8756..56045abc6 100644 --- a/rt/share/html/Helpers/Toggle/TicketBookmark +++ b/rt/share/html/Helpers/Toggle/TicketBookmark @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Helpers/autohandler b/rt/share/html/Helpers/autohandler index 59a04c87e..56943ba24 100644 --- a/rt/share/html/Helpers/autohandler +++ b/rt/share/html/Helpers/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Basics.html b/rt/share/html/Install/Basics.html index 67f2cc8ec..04a115c09 100644 --- a/rt/share/html/Install/Basics.html +++ b/rt/share/html/Install/Basics.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/DatabaseDetails.html b/rt/share/html/Install/DatabaseDetails.html index b4d3f8c8a..b79793e85 100644 --- a/rt/share/html/Install/DatabaseDetails.html +++ b/rt/share/html/Install/DatabaseDetails.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/DatabaseType.html b/rt/share/html/Install/DatabaseType.html index d2017d1e6..40616a93e 100644 --- a/rt/share/html/Install/DatabaseType.html +++ b/rt/share/html/Install/DatabaseType.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Elements/Errors b/rt/share/html/Install/Elements/Errors index 14d7e6b30..2a6962149 100644 --- a/rt/share/html/Install/Elements/Errors +++ b/rt/share/html/Install/Elements/Errors @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Elements/Wrapper b/rt/share/html/Install/Elements/Wrapper index 53d2b9d40..08eab5d87 100644 --- a/rt/share/html/Install/Elements/Wrapper +++ b/rt/share/html/Install/Elements/Wrapper @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Finish.html b/rt/share/html/Install/Finish.html index 9f84457e8..28307badd 100644 --- a/rt/share/html/Install/Finish.html +++ b/rt/share/html/Install/Finish.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Global.html b/rt/share/html/Install/Global.html index 620a6c43a..593efdc79 100644 --- a/rt/share/html/Install/Global.html +++ b/rt/share/html/Install/Global.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Initialize.html b/rt/share/html/Install/Initialize.html index a6e905fca..8dbefccc5 100644 --- a/rt/share/html/Install/Initialize.html +++ b/rt/share/html/Install/Initialize.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/Sendmail.html b/rt/share/html/Install/Sendmail.html index fd835b46f..67e123b8b 100644 --- a/rt/share/html/Install/Sendmail.html +++ b/rt/share/html/Install/Sendmail.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/autohandler b/rt/share/html/Install/autohandler index b4c802281..83dcae7d1 100644 --- a/rt/share/html/Install/autohandler +++ b/rt/share/html/Install/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Install/index.html b/rt/share/html/Install/index.html index a6aff83a5..21fb3ebac 100644 --- a/rt/share/html/Install/index.html +++ b/rt/share/html/Install/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/Helpers/CustomLogo/dhandler b/rt/share/html/NoAuth/Helpers/CustomLogo/dhandler index 8bbc9d65d..d8db457f8 100644 --- a/rt/share/html/NoAuth/Helpers/CustomLogo/dhandler +++ b/rt/share/html/NoAuth/Helpers/CustomLogo/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/Login.html b/rt/share/html/NoAuth/Login.html index d880e25f8..70e2c7219 100755 --- a/rt/share/html/NoAuth/Login.html +++ b/rt/share/html/NoAuth/Login.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/Logout.html b/rt/share/html/NoAuth/Logout.html index 409526964..c5dc23c5e 100755 --- a/rt/share/html/NoAuth/Logout.html +++ b/rt/share/html/NoAuth/Logout.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/Reminder.html b/rt/share/html/NoAuth/Reminder.html index 03f87afa7..6ef95d440 100755 --- a/rt/share/html/NoAuth/Reminder.html +++ b/rt/share/html/NoAuth/Reminder.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/RichText/autohandler b/rt/share/html/NoAuth/RichText/autohandler index ee4397edd..fc6c0fa3f 100644 --- a/rt/share/html/NoAuth/RichText/autohandler +++ b/rt/share/html/NoAuth/RichText/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/RichText/dhandler b/rt/share/html/NoAuth/RichText/dhandler index 1cc15ed3c..575d8f7cd 100644 --- a/rt/share/html/NoAuth/RichText/dhandler +++ b/rt/share/html/NoAuth/RichText/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/InHeader b/rt/share/html/NoAuth/css/aileron/InHeader index b1f7787ff..4bdbe25ec 100644 --- a/rt/share/html/NoAuth/css/aileron/InHeader +++ b/rt/share/html/NoAuth/css/aileron/InHeader @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/base.css b/rt/share/html/NoAuth/css/aileron/base.css index dc3472f1e..2ed341e79 100644 --- a/rt/share/html/NoAuth/css/aileron/base.css +++ b/rt/share/html/NoAuth/css/aileron/base.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/boxes.css b/rt/share/html/NoAuth/css/aileron/boxes.css index 267b2cfc6..bd12b9734 100644 --- a/rt/share/html/NoAuth/css/aileron/boxes.css +++ b/rt/share/html/NoAuth/css/aileron/boxes.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/forms.css b/rt/share/html/NoAuth/css/aileron/forms.css index 4e626d26e..c7bdcbd56 100644 --- a/rt/share/html/NoAuth/css/aileron/forms.css +++ b/rt/share/html/NoAuth/css/aileron/forms.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/images/dhandler b/rt/share/html/NoAuth/css/aileron/images/dhandler index 441935390..0e56d921f 100644 --- a/rt/share/html/NoAuth/css/aileron/images/dhandler +++ b/rt/share/html/NoAuth/css/aileron/images/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/layout.css b/rt/share/html/NoAuth/css/aileron/layout.css index 541cdaf7d..bd1717181 100644 --- a/rt/share/html/NoAuth/css/aileron/layout.css +++ b/rt/share/html/NoAuth/css/aileron/layout.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/login.css b/rt/share/html/NoAuth/css/aileron/login.css index f0a7d487c..3ab9fe86f 100644 --- a/rt/share/html/NoAuth/css/aileron/login.css +++ b/rt/share/html/NoAuth/css/aileron/login.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/main.css b/rt/share/html/NoAuth/css/aileron/main.css index 90463e1fc..c6a165be2 100644 --- a/rt/share/html/NoAuth/css/aileron/main.css +++ b/rt/share/html/NoAuth/css/aileron/main.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/misc.css b/rt/share/html/NoAuth/css/aileron/misc.css index b879a8edc..ff2deb230 100644 --- a/rt/share/html/NoAuth/css/aileron/misc.css +++ b/rt/share/html/NoAuth/css/aileron/misc.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/msie.css b/rt/share/html/NoAuth/css/aileron/msie.css index 05e96c391..2b06ce077 100644 --- a/rt/share/html/NoAuth/css/aileron/msie.css +++ b/rt/share/html/NoAuth/css/aileron/msie.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/msie6.css b/rt/share/html/NoAuth/css/aileron/msie6.css index 6a5eb3252..aff8d9370 100644 --- a/rt/share/html/NoAuth/css/aileron/msie6.css +++ b/rt/share/html/NoAuth/css/aileron/msie6.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/nav.css b/rt/share/html/NoAuth/css/aileron/nav.css index 161d24921..58b3d1675 100644 --- a/rt/share/html/NoAuth/css/aileron/nav.css +++ b/rt/share/html/NoAuth/css/aileron/nav.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/ticket-lists.css b/rt/share/html/NoAuth/css/aileron/ticket-lists.css index 4ec9ae7e5..8d1258d0e 100644 --- a/rt/share/html/NoAuth/css/aileron/ticket-lists.css +++ b/rt/share/html/NoAuth/css/aileron/ticket-lists.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/ticket-search.css b/rt/share/html/NoAuth/css/aileron/ticket-search.css index ea92e69e5..b73825233 100644 --- a/rt/share/html/NoAuth/css/aileron/ticket-search.css +++ b/rt/share/html/NoAuth/css/aileron/ticket-search.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/aileron/ticket.css b/rt/share/html/NoAuth/css/aileron/ticket.css index bc6315001..afcb8ec59 100644 --- a/rt/share/html/NoAuth/css/aileron/ticket.css +++ b/rt/share/html/NoAuth/css/aileron/ticket.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/autohandler b/rt/share/html/NoAuth/css/autohandler index c0647ad30..aeca21910 100644 --- a/rt/share/html/NoAuth/css/autohandler +++ b/rt/share/html/NoAuth/css/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/InHeader b/rt/share/html/NoAuth/css/ballard/InHeader index 1c6a39c0a..e81b02b73 100644 --- a/rt/share/html/NoAuth/css/ballard/InHeader +++ b/rt/share/html/NoAuth/css/ballard/InHeader @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/base.css b/rt/share/html/NoAuth/css/ballard/base.css index dc3472f1e..2ed341e79 100644 --- a/rt/share/html/NoAuth/css/ballard/base.css +++ b/rt/share/html/NoAuth/css/ballard/base.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/boxes.css b/rt/share/html/NoAuth/css/ballard/boxes.css index 6c61c2d80..6aed3bf04 100644 --- a/rt/share/html/NoAuth/css/ballard/boxes.css +++ b/rt/share/html/NoAuth/css/ballard/boxes.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/images/dhandler b/rt/share/html/NoAuth/css/ballard/images/dhandler index 441935390..0e56d921f 100644 --- a/rt/share/html/NoAuth/css/ballard/images/dhandler +++ b/rt/share/html/NoAuth/css/ballard/images/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/layout.css b/rt/share/html/NoAuth/css/ballard/layout.css index c7d18f02c..b0c133444 100644 --- a/rt/share/html/NoAuth/css/ballard/layout.css +++ b/rt/share/html/NoAuth/css/ballard/layout.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/main.css b/rt/share/html/NoAuth/css/ballard/main.css index 3c3241feb..1c4b750bf 100644 --- a/rt/share/html/NoAuth/css/ballard/main.css +++ b/rt/share/html/NoAuth/css/ballard/main.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/misc.css b/rt/share/html/NoAuth/css/ballard/misc.css index f177bb724..f3eae950b 100644 --- a/rt/share/html/NoAuth/css/ballard/misc.css +++ b/rt/share/html/NoAuth/css/ballard/misc.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/msie.css b/rt/share/html/NoAuth/css/ballard/msie.css index de5e62664..f05f38bde 100644 --- a/rt/share/html/NoAuth/css/ballard/msie.css +++ b/rt/share/html/NoAuth/css/ballard/msie.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/msie6.css b/rt/share/html/NoAuth/css/ballard/msie6.css index dc55b60a3..21bd1d163 100644 --- a/rt/share/html/NoAuth/css/ballard/msie6.css +++ b/rt/share/html/NoAuth/css/ballard/msie6.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/nav.css b/rt/share/html/NoAuth/css/ballard/nav.css index 482eaac59..7e69306ec 100644 --- a/rt/share/html/NoAuth/css/ballard/nav.css +++ b/rt/share/html/NoAuth/css/ballard/nav.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/ticket-lists.css b/rt/share/html/NoAuth/css/ballard/ticket-lists.css index ba05a07a0..2df86e8d5 100644 --- a/rt/share/html/NoAuth/css/ballard/ticket-lists.css +++ b/rt/share/html/NoAuth/css/ballard/ticket-lists.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/ticket-search.css b/rt/share/html/NoAuth/css/ballard/ticket-search.css index 09165fa77..bb9eef494 100644 --- a/rt/share/html/NoAuth/css/ballard/ticket-search.css +++ b/rt/share/html/NoAuth/css/ballard/ticket-search.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/ballard/ticket.css b/rt/share/html/NoAuth/css/ballard/ticket.css index 8b6d09ba4..22a86c7f9 100644 --- a/rt/share/html/NoAuth/css/ballard/ticket.css +++ b/rt/share/html/NoAuth/css/ballard/ticket.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/admin.css b/rt/share/html/NoAuth/css/base/admin.css index 459786fb0..0c016c107 100644 --- a/rt/share/html/NoAuth/css/base/admin.css +++ b/rt/share/html/NoAuth/css/base/admin.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/articles.css b/rt/share/html/NoAuth/css/base/articles.css index 1f05041af..8744c849b 100644 --- a/rt/share/html/NoAuth/css/base/articles.css +++ b/rt/share/html/NoAuth/css/base/articles.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/collection.css b/rt/share/html/NoAuth/css/base/collection.css index ed053abff..94928ebd1 100644 --- a/rt/share/html/NoAuth/css/base/collection.css +++ b/rt/share/html/NoAuth/css/base/collection.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/forms.css b/rt/share/html/NoAuth/css/base/forms.css index d6bc91729..cc034b312 100644 --- a/rt/share/html/NoAuth/css/base/forms.css +++ b/rt/share/html/NoAuth/css/base/forms.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/history-folding.css b/rt/share/html/NoAuth/css/base/history-folding.css index e48eb1215..5bb166716 100644 --- a/rt/share/html/NoAuth/css/base/history-folding.css +++ b/rt/share/html/NoAuth/css/base/history-folding.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/jquery-ui.css b/rt/share/html/NoAuth/css/base/jquery-ui.css index 93ec275a4..a9ba81c49 100644 --- a/rt/share/html/NoAuth/css/base/jquery-ui.css +++ b/rt/share/html/NoAuth/css/base/jquery-ui.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/login.css b/rt/share/html/NoAuth/css/base/login.css index e95e8f7ee..a95efa66a 100644 --- a/rt/share/html/NoAuth/css/base/login.css +++ b/rt/share/html/NoAuth/css/base/login.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/main.css b/rt/share/html/NoAuth/css/base/main.css index 4eb890825..000ff70e5 100644 --- a/rt/share/html/NoAuth/css/base/main.css +++ b/rt/share/html/NoAuth/css/base/main.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/misc.css b/rt/share/html/NoAuth/css/base/misc.css index a9b887fe1..4de92996e 100644 --- a/rt/share/html/NoAuth/css/base/misc.css +++ b/rt/share/html/NoAuth/css/base/misc.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/msie6.css b/rt/share/html/NoAuth/css/base/msie6.css new file mode 100644 index 000000000..4cd176355 --- /dev/null +++ b/rt/share/html/NoAuth/css/base/msie6.css @@ -0,0 +1,67 @@ + +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +%# +%# +%# (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 }}} +table.ticket-summary { + table-layout: fixed; +} + +.ticket-transaction div.metadata { + height: 1px; +} + +div.downloadattachment { + position: relative; +} + +div.messagebody { + height: 3em; +} + +span.message-stanza-folder { + display: inline !important; +} diff --git a/rt/share/html/NoAuth/css/base/nav.css b/rt/share/html/NoAuth/css/base/nav.css index c921722c5..5879a9191 100644 --- a/rt/share/html/NoAuth/css/base/nav.css +++ b/rt/share/html/NoAuth/css/base/nav.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/portlets.css b/rt/share/html/NoAuth/css/base/portlets.css index f104b6a02..2e309800e 100644 --- a/rt/share/html/NoAuth/css/base/portlets.css +++ b/rt/share/html/NoAuth/css/base/portlets.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/rights-editor.css b/rt/share/html/NoAuth/css/base/rights-editor.css index 8e40f07e3..f8974a704 100644 --- a/rt/share/html/NoAuth/css/base/rights-editor.css +++ b/rt/share/html/NoAuth/css/base/rights-editor.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/theme-editor.css b/rt/share/html/NoAuth/css/base/theme-editor.css index 3d12dcfff..e6adc1dd4 100644 --- a/rt/share/html/NoAuth/css/base/theme-editor.css +++ b/rt/share/html/NoAuth/css/base/theme-editor.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/ticket-form.css b/rt/share/html/NoAuth/css/base/ticket-form.css index 14673622d..981c8709a 100644 --- a/rt/share/html/NoAuth/css/base/ticket-form.css +++ b/rt/share/html/NoAuth/css/base/ticket-form.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/ticket.css b/rt/share/html/NoAuth/css/base/ticket.css index d30b04645..c634dc966 100644 --- a/rt/share/html/NoAuth/css/base/ticket.css +++ b/rt/share/html/NoAuth/css/base/ticket.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/base/tools.css b/rt/share/html/NoAuth/css/base/tools.css index 1dd6cb9d5..c6afa3bed 100644 --- a/rt/share/html/NoAuth/css/base/tools.css +++ b/rt/share/html/NoAuth/css/base/tools.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/dhandler b/rt/share/html/NoAuth/css/dhandler index 756b9b36e..41e88fb83 100644 --- a/rt/share/html/NoAuth/css/dhandler +++ b/rt/share/html/NoAuth/css/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/print.css b/rt/share/html/NoAuth/css/print.css index 96250845f..8aedbc985 100644 --- a/rt/share/html/NoAuth/css/print.css +++ b/rt/share/html/NoAuth/css/print.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/InHeader b/rt/share/html/NoAuth/css/web2/InHeader index a6e1d2f32..b8fcab34f 100644 --- a/rt/share/html/NoAuth/css/web2/InHeader +++ b/rt/share/html/NoAuth/css/web2/InHeader @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/base.css b/rt/share/html/NoAuth/css/web2/base.css index dc3472f1e..2ed341e79 100644 --- a/rt/share/html/NoAuth/css/web2/base.css +++ b/rt/share/html/NoAuth/css/web2/base.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/boxes.css b/rt/share/html/NoAuth/css/web2/boxes.css index 645e83bfe..44445fbca 100644 --- a/rt/share/html/NoAuth/css/web2/boxes.css +++ b/rt/share/html/NoAuth/css/web2/boxes.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/images/dhandler b/rt/share/html/NoAuth/css/web2/images/dhandler index 441935390..0e56d921f 100644 --- a/rt/share/html/NoAuth/css/web2/images/dhandler +++ b/rt/share/html/NoAuth/css/web2/images/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/layout.css b/rt/share/html/NoAuth/css/web2/layout.css index 0567db671..ba4c6d63d 100644 --- a/rt/share/html/NoAuth/css/web2/layout.css +++ b/rt/share/html/NoAuth/css/web2/layout.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/main.css b/rt/share/html/NoAuth/css/web2/main.css index 3c3241feb..1c4b750bf 100644 --- a/rt/share/html/NoAuth/css/web2/main.css +++ b/rt/share/html/NoAuth/css/web2/main.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/misc.css b/rt/share/html/NoAuth/css/web2/misc.css index f177bb724..f3eae950b 100644 --- a/rt/share/html/NoAuth/css/web2/misc.css +++ b/rt/share/html/NoAuth/css/web2/misc.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/msie.css b/rt/share/html/NoAuth/css/web2/msie.css index 63e36ae95..78226134d 100644 --- a/rt/share/html/NoAuth/css/web2/msie.css +++ b/rt/share/html/NoAuth/css/web2/msie.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/msie6.css b/rt/share/html/NoAuth/css/web2/msie6.css index cbe175414..126a9ecec 100644 --- a/rt/share/html/NoAuth/css/web2/msie6.css +++ b/rt/share/html/NoAuth/css/web2/msie6.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/nav.css b/rt/share/html/NoAuth/css/web2/nav.css index 3783a1dc4..843906076 100644 --- a/rt/share/html/NoAuth/css/web2/nav.css +++ b/rt/share/html/NoAuth/css/web2/nav.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/ticket-lists.css b/rt/share/html/NoAuth/css/web2/ticket-lists.css index ba05a07a0..2df86e8d5 100644 --- a/rt/share/html/NoAuth/css/web2/ticket-lists.css +++ b/rt/share/html/NoAuth/css/web2/ticket-lists.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/ticket-search.css b/rt/share/html/NoAuth/css/web2/ticket-search.css index 725a812e7..58137cf24 100644 --- a/rt/share/html/NoAuth/css/web2/ticket-search.css +++ b/rt/share/html/NoAuth/css/web2/ticket-search.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/css/web2/ticket.css b/rt/share/html/NoAuth/css/web2/ticket.css index d3902169a..683eeb70f 100644 --- a/rt/share/html/NoAuth/css/web2/ticket.css +++ b/rt/share/html/NoAuth/css/web2/ticket.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/iCal/dhandler b/rt/share/html/NoAuth/iCal/dhandler index 46c272921..ad1b475eb 100644 --- a/rt/share/html/NoAuth/iCal/dhandler +++ b/rt/share/html/NoAuth/iCal/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/images/autohandler b/rt/share/html/NoAuth/images/autohandler index d7e8e6abd..1fd539d60 100644 --- a/rt/share/html/NoAuth/images/autohandler +++ b/rt/share/html/NoAuth/images/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/autohandler b/rt/share/html/NoAuth/js/autohandler index 29444400f..c17af937e 100644 --- a/rt/share/html/NoAuth/js/autohandler +++ b/rt/share/html/NoAuth/js/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/cascaded.js b/rt/share/html/NoAuth/js/cascaded.js index 1611fd192..959804328 100644 --- a/rt/share/html/NoAuth/js/cascaded.js +++ b/rt/share/html/NoAuth/js/cascaded.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/combobox.js b/rt/share/html/NoAuth/js/combobox.js index 27fa3881e..45750c1d3 100644 --- a/rt/share/html/NoAuth/js/combobox.js +++ b/rt/share/html/NoAuth/js/combobox.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/dhandler b/rt/share/html/NoAuth/js/dhandler index 8059cd75c..2b720d19a 100644 --- a/rt/share/html/NoAuth/js/dhandler +++ b/rt/share/html/NoAuth/js/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/history-folding.js b/rt/share/html/NoAuth/js/history-folding.js index c4e441878..b81b932e1 100644 --- a/rt/share/html/NoAuth/js/history-folding.js +++ b/rt/share/html/NoAuth/js/history-folding.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js b/rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js index 4b2183293..0c7546a97 100644 --- a/rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js +++ b/rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/jquery_noconflict.js b/rt/share/html/NoAuth/js/jquery_noconflict.js index b71b1cdd8..206d28a0c 100644 --- a/rt/share/html/NoAuth/js/jquery_noconflict.js +++ b/rt/share/html/NoAuth/js/jquery_noconflict.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/late.js b/rt/share/html/NoAuth/js/late.js index 763f2c15d..f33c9b318 100644 --- a/rt/share/html/NoAuth/js/late.js +++ b/rt/share/html/NoAuth/js/late.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/titlebox-state.js b/rt/share/html/NoAuth/js/titlebox-state.js index b8399a8dd..1156b4eec 100644 --- a/rt/share/html/NoAuth/js/titlebox-state.js +++ b/rt/share/html/NoAuth/js/titlebox-state.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/userautocomplete.js b/rt/share/html/NoAuth/js/userautocomplete.js index b2b0f765a..c2b5a4a90 100644 --- a/rt/share/html/NoAuth/js/userautocomplete.js +++ b/rt/share/html/NoAuth/js/userautocomplete.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/js/util.js b/rt/share/html/NoAuth/js/util.js index cc6e27535..473222612 100644 --- a/rt/share/html/NoAuth/js/util.js +++ b/rt/share/html/NoAuth/js/util.js @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/rss/dhandler b/rt/share/html/NoAuth/rss/dhandler index 4bc69aba4..1446e6cc4 100644 --- a/rt/share/html/NoAuth/rss/dhandler +++ b/rt/share/html/NoAuth/rss/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Prefs/MyRT.html b/rt/share/html/Prefs/MyRT.html index 288df0b9a..433b91f8a 100644 --- a/rt/share/html/Prefs/MyRT.html +++ b/rt/share/html/Prefs/MyRT.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Prefs/Other.html b/rt/share/html/Prefs/Other.html index 93e85d523..2af68a0cf 100644 --- a/rt/share/html/Prefs/Other.html +++ b/rt/share/html/Prefs/Other.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Prefs/Quicksearch.html b/rt/share/html/Prefs/Quicksearch.html index a6791b840..2642aa550 100644 --- a/rt/share/html/Prefs/Quicksearch.html +++ b/rt/share/html/Prefs/Quicksearch.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Prefs/Search.html b/rt/share/html/Prefs/Search.html index 3f2c404cf..68f66a630 100644 --- a/rt/share/html/Prefs/Search.html +++ b/rt/share/html/Prefs/Search.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Prefs/SearchOptions.html b/rt/share/html/Prefs/SearchOptions.html index 029e13f21..1d7464055 100644 --- a/rt/share/html/Prefs/SearchOptions.html +++ b/rt/share/html/Prefs/SearchOptions.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/attachment/default b/rt/share/html/REST/1.0/Forms/attachment/default index 8c6cf3ec8..7519b046d 100644 --- a/rt/share/html/REST/1.0/Forms/attachment/default +++ b/rt/share/html/REST/1.0/Forms/attachment/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/group/customfields b/rt/share/html/REST/1.0/Forms/group/customfields index 5fb4730b0..e697421aa 100644 --- a/rt/share/html/REST/1.0/Forms/group/customfields +++ b/rt/share/html/REST/1.0/Forms/group/customfields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/group/default b/rt/share/html/REST/1.0/Forms/group/default index ffbd9dbf3..58dae576a 100644 --- a/rt/share/html/REST/1.0/Forms/group/default +++ b/rt/share/html/REST/1.0/Forms/group/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/group/ns b/rt/share/html/REST/1.0/Forms/group/ns index c993db8b6..b02793459 100644 --- a/rt/share/html/REST/1.0/Forms/group/ns +++ b/rt/share/html/REST/1.0/Forms/group/ns @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/queue/customfields b/rt/share/html/REST/1.0/Forms/queue/customfields index 79ab07531..4fbb796d3 100644 --- a/rt/share/html/REST/1.0/Forms/queue/customfields +++ b/rt/share/html/REST/1.0/Forms/queue/customfields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/queue/default b/rt/share/html/REST/1.0/Forms/queue/default index 48e4fba7f..bb8eb5f9e 100755 --- a/rt/share/html/REST/1.0/Forms/queue/default +++ b/rt/share/html/REST/1.0/Forms/queue/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/queue/ns b/rt/share/html/REST/1.0/Forms/queue/ns index 5a3e09f8a..24bd86876 100755 --- a/rt/share/html/REST/1.0/Forms/queue/ns +++ b/rt/share/html/REST/1.0/Forms/queue/ns @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields b/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields index 038f1881d..3d538f290 100644 --- a/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields +++ b/rt/share/html/REST/1.0/Forms/queue/ticketcustomfields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/attachments b/rt/share/html/REST/1.0/Forms/ticket/attachments index 43df839af..b9e364782 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/attachments +++ b/rt/share/html/REST/1.0/Forms/ticket/attachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/comment b/rt/share/html/REST/1.0/Forms/ticket/comment index 41320ba4c..22b70ff8f 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/comment +++ b/rt/share/html/REST/1.0/Forms/ticket/comment @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/default b/rt/share/html/REST/1.0/Forms/ticket/default index 33a8935d6..a546af7b6 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/default +++ b/rt/share/html/REST/1.0/Forms/ticket/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/history b/rt/share/html/REST/1.0/Forms/ticket/history index debfcc85c..8bbb5b733 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/history +++ b/rt/share/html/REST/1.0/Forms/ticket/history @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/links b/rt/share/html/REST/1.0/Forms/ticket/links index 45b14d015..1b851b919 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/links +++ b/rt/share/html/REST/1.0/Forms/ticket/links @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/merge b/rt/share/html/REST/1.0/Forms/ticket/merge index fdc224423..6cdc63a75 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/merge +++ b/rt/share/html/REST/1.0/Forms/ticket/merge @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/ticket/take b/rt/share/html/REST/1.0/Forms/ticket/take index b5a536270..a465bcf2a 100755 --- a/rt/share/html/REST/1.0/Forms/ticket/take +++ b/rt/share/html/REST/1.0/Forms/ticket/take @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/transaction/default b/rt/share/html/REST/1.0/Forms/transaction/default index adcf3438f..27dcb3841 100644 --- a/rt/share/html/REST/1.0/Forms/transaction/default +++ b/rt/share/html/REST/1.0/Forms/transaction/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/user/default b/rt/share/html/REST/1.0/Forms/user/default index 046154768..227fc8133 100755 --- a/rt/share/html/REST/1.0/Forms/user/default +++ b/rt/share/html/REST/1.0/Forms/user/default @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/Forms/user/ns b/rt/share/html/REST/1.0/Forms/user/ns index 84a668503..4c459b4a2 100755 --- a/rt/share/html/REST/1.0/Forms/user/ns +++ b/rt/share/html/REST/1.0/Forms/user/ns @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/NoAuth/mail-gateway b/rt/share/html/REST/1.0/NoAuth/mail-gateway index cd4271417..43ca16578 100755 --- a/rt/share/html/REST/1.0/NoAuth/mail-gateway +++ b/rt/share/html/REST/1.0/NoAuth/mail-gateway @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/autohandler b/rt/share/html/REST/1.0/autohandler index 03f70e052..b8cb0c132 100755 --- a/rt/share/html/REST/1.0/autohandler +++ b/rt/share/html/REST/1.0/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/dhandler b/rt/share/html/REST/1.0/dhandler index 7ade8fa53..2243376f5 100755 --- a/rt/share/html/REST/1.0/dhandler +++ b/rt/share/html/REST/1.0/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/logout b/rt/share/html/REST/1.0/logout index 4dbb098bd..6977f9866 100755 --- a/rt/share/html/REST/1.0/logout +++ b/rt/share/html/REST/1.0/logout @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/search/dhandler b/rt/share/html/REST/1.0/search/dhandler index c247bd3ed..b81c56c6d 100755 --- a/rt/share/html/REST/1.0/search/dhandler +++ b/rt/share/html/REST/1.0/search/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/search/ticket b/rt/share/html/REST/1.0/search/ticket index f7b8f4c5a..f022b0330 100755 --- a/rt/share/html/REST/1.0/search/ticket +++ b/rt/share/html/REST/1.0/search/ticket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/ticket/comment b/rt/share/html/REST/1.0/ticket/comment index 177690d6a..2e5e636bb 100755 --- a/rt/share/html/REST/1.0/ticket/comment +++ b/rt/share/html/REST/1.0/ticket/comment @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/ticket/link b/rt/share/html/REST/1.0/ticket/link index 023dc81db..68313402b 100755 --- a/rt/share/html/REST/1.0/ticket/link +++ b/rt/share/html/REST/1.0/ticket/link @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/REST/1.0/ticket/merge b/rt/share/html/REST/1.0/ticket/merge index ea96f6185..6fe085438 100755 --- a/rt/share/html/REST/1.0/ticket/merge +++ b/rt/share/html/REST/1.0/ticket/merge @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Article.html b/rt/share/html/Search/Article.html index dc4ad0a9f..f68285a82 100644 --- a/rt/share/html/Search/Article.html +++ b/rt/share/html/Search/Article.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Build.html b/rt/share/html/Search/Build.html index 9594771f0..eea5f81ca 100644 --- a/rt/share/html/Search/Build.html +++ b/rt/share/html/Search/Build.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Bulk.html b/rt/share/html/Search/Bulk.html index 8c5d642d2..89e850bfa 100755 --- a/rt/share/html/Search/Bulk.html +++ b/rt/share/html/Search/Bulk.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Chart b/rt/share/html/Search/Chart index 7256106e3..2a28d62c4 100644 --- a/rt/share/html/Search/Chart +++ b/rt/share/html/Search/Chart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Chart.html b/rt/share/html/Search/Chart.html index ab25745f8..2cde5135a 100644 --- a/rt/share/html/Search/Chart.html +++ b/rt/share/html/Search/Chart.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Edit.html b/rt/share/html/Search/Edit.html index 238989f49..f0717e790 100755 --- a/rt/share/html/Search/Edit.html +++ b/rt/share/html/Search/Edit.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/Article b/rt/share/html/Search/Elements/Article index ca12d586e..c82b19f28 100644 --- a/rt/share/html/Search/Elements/Article +++ b/rt/share/html/Search/Elements/Article @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/BuildFormatString b/rt/share/html/Search/Elements/BuildFormatString index 66fd14763..9a3ba1e75 100644 --- a/rt/share/html/Search/Elements/BuildFormatString +++ b/rt/share/html/Search/Elements/BuildFormatString @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/Chart b/rt/share/html/Search/Elements/Chart index f0d1e4a0f..38c15f6ef 100644 --- a/rt/share/html/Search/Elements/Chart +++ b/rt/share/html/Search/Elements/Chart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/ConditionRow b/rt/share/html/Search/Elements/ConditionRow index 046b3b1ea..edf738107 100644 --- a/rt/share/html/Search/Elements/ConditionRow +++ b/rt/share/html/Search/Elements/ConditionRow @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/DisplayOptions b/rt/share/html/Search/Elements/DisplayOptions index 47224a911..4bdaf1c2e 100644 --- a/rt/share/html/Search/Elements/DisplayOptions +++ b/rt/share/html/Search/Elements/DisplayOptions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/EditFormat b/rt/share/html/Search/Elements/EditFormat index 58de19780..a78fa0574 100644 --- a/rt/share/html/Search/Elements/EditFormat +++ b/rt/share/html/Search/Elements/EditFormat @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/EditQuery b/rt/share/html/Search/Elements/EditQuery index 5d312002e..7bdded152 100644 --- a/rt/share/html/Search/Elements/EditQuery +++ b/rt/share/html/Search/Elements/EditQuery @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/EditSearches b/rt/share/html/Search/Elements/EditSearches index ae8d45c67..f5be486b8 100644 --- a/rt/share/html/Search/Elements/EditSearches +++ b/rt/share/html/Search/Elements/EditSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/EditSort b/rt/share/html/Search/Elements/EditSort index 087c81c8b..de5d2d818 100644 --- a/rt/share/html/Search/Elements/EditSort +++ b/rt/share/html/Search/Elements/EditSort @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/Graph b/rt/share/html/Search/Elements/Graph index b4cfde05e..80158733e 100644 --- a/rt/share/html/Search/Elements/Graph +++ b/rt/share/html/Search/Elements/Graph @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/NewListActions b/rt/share/html/Search/Elements/NewListActions index 071b91f6e..43c3daf46 100644 --- a/rt/share/html/Search/Elements/NewListActions +++ b/rt/share/html/Search/Elements/NewListActions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/PickBasics b/rt/share/html/Search/Elements/PickBasics index f02348140..3aae96589 100644 --- a/rt/share/html/Search/Elements/PickBasics +++ b/rt/share/html/Search/Elements/PickBasics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/PickCFs b/rt/share/html/Search/Elements/PickCFs index 1c9f2a918..cf8c92a27 100644 --- a/rt/share/html/Search/Elements/PickCFs +++ b/rt/share/html/Search/Elements/PickCFs @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/PickCriteria b/rt/share/html/Search/Elements/PickCriteria index 797aa6c40..b2e84cae9 100644 --- a/rt/share/html/Search/Elements/PickCriteria +++ b/rt/share/html/Search/Elements/PickCriteria @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/PickTicketCFs b/rt/share/html/Search/Elements/PickTicketCFs index 22650e837..ac52049c3 100644 --- a/rt/share/html/Search/Elements/PickTicketCFs +++ b/rt/share/html/Search/Elements/PickTicketCFs @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/ResultsRSSView b/rt/share/html/Search/Elements/ResultsRSSView index a453a8603..0bce7ec45 100644 --- a/rt/share/html/Search/Elements/ResultsRSSView +++ b/rt/share/html/Search/Elements/ResultsRSSView @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -46,7 +46,7 @@ %# %# END BPS TAGGED BLOCK }}} <%INIT> -my $old_current_user; +my $current_user = $session{CurrentUser}; if ( $m->request_comp->path =~ RT->Config->Get('WebNoAuthRegex') ) { my $path = $m->dhandler_arg; @@ -76,13 +76,11 @@ if ( $m->request_comp->path =~ RT->Config->Get('WebNoAuthRegex') ) { unless $user->ValidateAuthString( $auth, $ARGS{Query} . $ARGS{Order} . $ARGS{OrderBy} ); - $old_current_user = $session{'CurrentUser'}; - my $cu = RT::CurrentUser->new; - $cu->Load($user); - $session{'CurrentUser'} = $cu; + $current_user = RT::CurrentUser->new; + $current_user->Load($user); } -my $Tickets = RT::Tickets->new($session{'CurrentUser'}); +my $Tickets = RT::Tickets->new($current_user); $Tickets->FromSQL($ARGS{'Query'}); if ($OrderBy =~ /\|/) { # Multiple Sorts @@ -119,10 +117,17 @@ $r->content_type('application/rss+xml'); while ( my $Ticket = $Tickets->Next()) { my $creator_str = $m->scomp('/Elements/ShowUser', User => $Ticket->CreatorObj); $creator_str =~ s/[\r\n]//g; + + # Get the plain-text content; it is interpreted as HTML by RSS + # readers, so it must be escaped (and is escaped _again_ when + # inserted into the XML). + my $content = $Ticket->Transactions->First->Content; + $content = $m->interp->apply_escapes( $content, 'h'); + $rss->add_item( title => $Ticket->Subject || loc('No Subject'), link => RT->Config->Get('WebURL')."Ticket/Display.html?id=".$Ticket->id, - description => $Ticket->Transactions->First->Content, + description => $content, dc => { creator => $creator_str, date => $Ticket->CreatedObj->RFC2822, }, @@ -131,7 +136,6 @@ $r->content_type('application/rss+xml'); } $m->out($rss->as_string); -$session{'CurrentUser'} = $old_current_user if $old_current_user; $m->abort(); <%ARGS> diff --git a/rt/share/html/Search/Elements/SearchPrivacy b/rt/share/html/Search/Elements/SearchPrivacy index d8e40c815..dd7ef3b2f 100644 --- a/rt/share/html/Search/Elements/SearchPrivacy +++ b/rt/share/html/Search/Elements/SearchPrivacy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SearchesForObject b/rt/share/html/Search/Elements/SearchesForObject index 34894918c..397a0d95c 100644 --- a/rt/share/html/Search/Elements/SearchesForObject +++ b/rt/share/html/Search/Elements/SearchesForObject @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectAndOr b/rt/share/html/Search/Elements/SelectAndOr index fa176ddc3..cbea34fc2 100644 --- a/rt/share/html/Search/Elements/SelectAndOr +++ b/rt/share/html/Search/Elements/SelectAndOr @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectChartType b/rt/share/html/Search/Elements/SelectChartType index 1e8f2eca9..266885f0d 100644 --- a/rt/share/html/Search/Elements/SelectChartType +++ b/rt/share/html/Search/Elements/SelectChartType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectGroup b/rt/share/html/Search/Elements/SelectGroup index 6392ac4e4..907c88e27 100644 --- a/rt/share/html/Search/Elements/SelectGroup +++ b/rt/share/html/Search/Elements/SelectGroup @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectGroupBy b/rt/share/html/Search/Elements/SelectGroupBy index 08a4ec36d..8daab6daa 100644 --- a/rt/share/html/Search/Elements/SelectGroupBy +++ b/rt/share/html/Search/Elements/SelectGroupBy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectLinks b/rt/share/html/Search/Elements/SelectLinks index fae3379ec..3759a58d1 100644 --- a/rt/share/html/Search/Elements/SelectLinks +++ b/rt/share/html/Search/Elements/SelectLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectPersonType b/rt/share/html/Search/Elements/SelectPersonType index a59571563..7ec875a8d 100644 --- a/rt/share/html/Search/Elements/SelectPersonType +++ b/rt/share/html/Search/Elements/SelectPersonType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectSearchObject b/rt/share/html/Search/Elements/SelectSearchObject index b9e0d1944..a6af1fad1 100644 --- a/rt/share/html/Search/Elements/SelectSearchObject +++ b/rt/share/html/Search/Elements/SelectSearchObject @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Elements/SelectSearchesForObjects b/rt/share/html/Search/Elements/SelectSearchesForObjects index 1fa1e2783..670cf7a7e 100644 --- a/rt/share/html/Search/Elements/SelectSearchesForObjects +++ b/rt/share/html/Search/Elements/SelectSearchesForObjects @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Graph.html b/rt/share/html/Search/Graph.html index 8b08e7d68..185278ac0 100644 --- a/rt/share/html/Search/Graph.html +++ b/rt/share/html/Search/Graph.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Results.html b/rt/share/html/Search/Results.html index 3c3187c1f..6125c3642 100755 --- a/rt/share/html/Search/Results.html +++ b/rt/share/html/Search/Results.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Results.rdf b/rt/share/html/Search/Results.rdf index 4bc69aba4..1446e6cc4 100644 --- a/rt/share/html/Search/Results.rdf +++ b/rt/share/html/Search/Results.rdf @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Search/Results.tsv b/rt/share/html/Search/Results.tsv index 376db0ed4..b28ea4816 100644 --- a/rt/share/html/Search/Results.tsv +++ b/rt/share/html/Search/Results.tsv @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -119,6 +119,7 @@ else { $Tickets->OrderBy( FIELD => $OrderBy, ORDER => $Order ); } +my $i = 0; my $ii = 0; while (my $row = $Tickets->Next) { for my $col (@columns) { @@ -131,6 +132,7 @@ while (my $row = $Tickets->Next) { $val; } @$col)."\n"); } + $m->flush_buffer unless ++$i % 10; } $m->abort(); diff --git a/rt/share/html/Search/Simple.html b/rt/share/html/Search/Simple.html index ab3bc4760..fbbffde3c 100644 --- a/rt/share/html/Search/Simple.html +++ b/rt/share/html/Search/Simple.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Article/Display.html b/rt/share/html/SelfService/Article/Display.html index 1d7a8045c..0e40eafc7 100644 --- a/rt/share/html/SelfService/Article/Display.html +++ b/rt/share/html/SelfService/Article/Display.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Article/Search.html b/rt/share/html/SelfService/Article/Search.html index f7692694c..68c64bb39 100644 --- a/rt/share/html/SelfService/Article/Search.html +++ b/rt/share/html/SelfService/Article/Search.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Article/autohandler b/rt/share/html/SelfService/Article/autohandler index 8b2c12a99..b82557d50 100644 --- a/rt/share/html/SelfService/Article/autohandler +++ b/rt/share/html/SelfService/Article/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Attachment/dhandler b/rt/share/html/SelfService/Attachment/dhandler index 0078d5b1a..a804cd1e3 100755 --- a/rt/share/html/SelfService/Attachment/dhandler +++ b/rt/share/html/SelfService/Attachment/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Closed.html b/rt/share/html/SelfService/Closed.html index 01b275b02..bfdc1db25 100755 --- a/rt/share/html/SelfService/Closed.html +++ b/rt/share/html/SelfService/Closed.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Create.html b/rt/share/html/SelfService/Create.html index 189595fc9..978491798 100755 --- a/rt/share/html/SelfService/Create.html +++ b/rt/share/html/SelfService/Create.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/CreateTicketInQueue.html b/rt/share/html/SelfService/CreateTicketInQueue.html index e7df9473c..590651a8c 100755 --- a/rt/share/html/SelfService/CreateTicketInQueue.html +++ b/rt/share/html/SelfService/CreateTicketInQueue.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Display.html b/rt/share/html/SelfService/Display.html index 9f51e3359..3d4c4e4a7 100755 --- a/rt/share/html/SelfService/Display.html +++ b/rt/share/html/SelfService/Display.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Elements/GotoTicket b/rt/share/html/SelfService/Elements/GotoTicket index daabef4a2..8dcf37b08 100755 --- a/rt/share/html/SelfService/Elements/GotoTicket +++ b/rt/share/html/SelfService/Elements/GotoTicket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Elements/Header b/rt/share/html/SelfService/Elements/Header index dbc1fd113..56ab6ae14 100755 --- a/rt/share/html/SelfService/Elements/Header +++ b/rt/share/html/SelfService/Elements/Header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Elements/MyRequests b/rt/share/html/SelfService/Elements/MyRequests index 94b6a8853..b9fdcf17f 100755 --- a/rt/share/html/SelfService/Elements/MyRequests +++ b/rt/share/html/SelfService/Elements/MyRequests @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Elements/SearchArticle b/rt/share/html/SelfService/Elements/SearchArticle index 749d083a2..c493a0c2a 100644 --- a/rt/share/html/SelfService/Elements/SearchArticle +++ b/rt/share/html/SelfService/Elements/SearchArticle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Error.html b/rt/share/html/SelfService/Error.html index 048b1dc27..14c5ad590 100755 --- a/rt/share/html/SelfService/Error.html +++ b/rt/share/html/SelfService/Error.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Prefs.html b/rt/share/html/SelfService/Prefs.html index 602096c71..6284a88b9 100755 --- a/rt/share/html/SelfService/Prefs.html +++ b/rt/share/html/SelfService/Prefs.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/Update.html b/rt/share/html/SelfService/Update.html index 664cd3d4f..3bbf10977 100755 --- a/rt/share/html/SelfService/Update.html +++ b/rt/share/html/SelfService/Update.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/SelfService/index.html b/rt/share/html/SelfService/index.html index c30bf883a..f002a6803 100755 --- a/rt/share/html/SelfService/index.html +++ b/rt/share/html/SelfService/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Attachment/WithHeaders/dhandler b/rt/share/html/Ticket/Attachment/WithHeaders/dhandler index 17e70b36b..5df2db41f 100644 --- a/rt/share/html/Ticket/Attachment/WithHeaders/dhandler +++ b/rt/share/html/Ticket/Attachment/WithHeaders/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Attachment/dhandler b/rt/share/html/Ticket/Attachment/dhandler index 9394fbc3f..a43eba7a6 100755 --- a/rt/share/html/Ticket/Attachment/dhandler +++ b/rt/share/html/Ticket/Attachment/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Create.html b/rt/share/html/Ticket/Create.html index bd60b5c98..7a1619a7e 100755 --- a/rt/share/html/Ticket/Create.html +++ b/rt/share/html/Ticket/Create.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -53,6 +53,7 @@ <& /Elements/ListActions, actions => \@results &>
+ % $m->callback( CallbackName => 'FormStart', QueueObj => $QueueObj, ARGSRef => \%ARGS ); diff --git a/rt/share/html/Ticket/Display.html b/rt/share/html/Ticket/Display.html index 50df5982d..3c2385af2 100755 --- a/rt/share/html/Ticket/Display.html +++ b/rt/share/html/Ticket/Display.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/AddAttachments b/rt/share/html/Ticket/Elements/AddAttachments index 9458bbb32..25470eb17 100644 --- a/rt/share/html/Ticket/Elements/AddAttachments +++ b/rt/share/html/Ticket/Elements/AddAttachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/AddWatchers b/rt/share/html/Ticket/Elements/AddWatchers index 70fba86d1..594574e29 100755 --- a/rt/share/html/Ticket/Elements/AddWatchers +++ b/rt/share/html/Ticket/Elements/AddWatchers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/Bookmark b/rt/share/html/Ticket/Elements/Bookmark index e4bae8162..bb80d3b79 100644 --- a/rt/share/html/Ticket/Elements/Bookmark +++ b/rt/share/html/Ticket/Elements/Bookmark @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/BulkLinks b/rt/share/html/Ticket/Elements/BulkLinks index 1303b103d..f676fc0fd 100755 --- a/rt/share/html/Ticket/Elements/BulkLinks +++ b/rt/share/html/Ticket/Elements/BulkLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ClickToShowHistory b/rt/share/html/Ticket/Elements/ClickToShowHistory index fafffae5e..3b547b916 100644 --- a/rt/share/html/Ticket/Elements/ClickToShowHistory +++ b/rt/share/html/Ticket/Elements/ClickToShowHistory @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditBasics b/rt/share/html/Ticket/Elements/EditBasics index 9f597838c..a54caacbb 100755 --- a/rt/share/html/Ticket/Elements/EditBasics +++ b/rt/share/html/Ticket/Elements/EditBasics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditCustomFields b/rt/share/html/Ticket/Elements/EditCustomFields index 2eba6c81d..5f17d1863 100755 --- a/rt/share/html/Ticket/Elements/EditCustomFields +++ b/rt/share/html/Ticket/Elements/EditCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditDates b/rt/share/html/Ticket/Elements/EditDates index 0bb7693b8..7793a8aa2 100755 --- a/rt/share/html/Ticket/Elements/EditDates +++ b/rt/share/html/Ticket/Elements/EditDates @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditPeople b/rt/share/html/Ticket/Elements/EditPeople index 9110aedd8..c5edb9c2a 100755 --- a/rt/share/html/Ticket/Elements/EditPeople +++ b/rt/share/html/Ticket/Elements/EditPeople @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditTransactionCustomFields b/rt/share/html/Ticket/Elements/EditTransactionCustomFields index 89a2fab89..4de7e5fe6 100644 --- a/rt/share/html/Ticket/Elements/EditTransactionCustomFields +++ b/rt/share/html/Ticket/Elements/EditTransactionCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/EditWatchers b/rt/share/html/Ticket/Elements/EditWatchers index d87c6135b..ab5ada35d 100755 --- a/rt/share/html/Ticket/Elements/EditWatchers +++ b/rt/share/html/Ticket/Elements/EditWatchers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/FindAttachments b/rt/share/html/Ticket/Elements/FindAttachments index d69da612d..448df0703 100644 --- a/rt/share/html/Ticket/Elements/FindAttachments +++ b/rt/share/html/Ticket/Elements/FindAttachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/FindTransactions b/rt/share/html/Ticket/Elements/FindTransactions index ea6de3506..950320e77 100644 --- a/rt/share/html/Ticket/Elements/FindTransactions +++ b/rt/share/html/Ticket/Elements/FindTransactions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/FoldStanzaJS b/rt/share/html/Ticket/Elements/FoldStanzaJS index 8fa5c5f0f..806bce9c4 100644 --- a/rt/share/html/Ticket/Elements/FoldStanzaJS +++ b/rt/share/html/Ticket/Elements/FoldStanzaJS @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/LoadTextAttachments b/rt/share/html/Ticket/Elements/LoadTextAttachments index b36dd6178..5e87c64c7 100644 --- a/rt/share/html/Ticket/Elements/LoadTextAttachments +++ b/rt/share/html/Ticket/Elements/LoadTextAttachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/PreviewScrips b/rt/share/html/Ticket/Elements/PreviewScrips index 4067c20a3..bb51ef3eb 100755 --- a/rt/share/html/Ticket/Elements/PreviewScrips +++ b/rt/share/html/Ticket/Elements/PreviewScrips @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/Reminders b/rt/share/html/Ticket/Elements/Reminders index 2896df970..1ce2d18cd 100644 --- a/rt/share/html/Ticket/Elements/Reminders +++ b/rt/share/html/Ticket/Elements/Reminders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowAttachments b/rt/share/html/Ticket/Elements/ShowAttachments index 0a03b9647..5cf453153 100755 --- a/rt/share/html/Ticket/Elements/ShowAttachments +++ b/rt/share/html/Ticket/Elements/ShowAttachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowBasics b/rt/share/html/Ticket/Elements/ShowBasics index 6d0006209..f9ec540c2 100755 --- a/rt/share/html/Ticket/Elements/ShowBasics +++ b/rt/share/html/Ticket/Elements/ShowBasics @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowCustomFields b/rt/share/html/Ticket/Elements/ShowCustomFields index 07c776901..2e2276e33 100755 --- a/rt/share/html/Ticket/Elements/ShowCustomFields +++ b/rt/share/html/Ticket/Elements/ShowCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowDates b/rt/share/html/Ticket/Elements/ShowDates index 586c5ee0b..9a6e32307 100755 --- a/rt/share/html/Ticket/Elements/ShowDates +++ b/rt/share/html/Ticket/Elements/ShowDates @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowDependencies b/rt/share/html/Ticket/Elements/ShowDependencies index d7b189f44..72e37b1f3 100755 --- a/rt/share/html/Ticket/Elements/ShowDependencies +++ b/rt/share/html/Ticket/Elements/ShowDependencies @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowGnuPGStatus b/rt/share/html/Ticket/Elements/ShowGnuPGStatus index 4e66ea472..efaf66398 100644 --- a/rt/share/html/Ticket/Elements/ShowGnuPGStatus +++ b/rt/share/html/Ticket/Elements/ShowGnuPGStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowGroupMembers b/rt/share/html/Ticket/Elements/ShowGroupMembers index 66b5ff956..d42f5283f 100644 --- a/rt/share/html/Ticket/Elements/ShowGroupMembers +++ b/rt/share/html/Ticket/Elements/ShowGroupMembers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowHistory b/rt/share/html/Ticket/Elements/ShowHistory index eed513a4d..835b66d83 100755 --- a/rt/share/html/Ticket/Elements/ShowHistory +++ b/rt/share/html/Ticket/Elements/ShowHistory @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowMembers b/rt/share/html/Ticket/Elements/ShowMembers index 3f805ef20..25011ef42 100755 --- a/rt/share/html/Ticket/Elements/ShowMembers +++ b/rt/share/html/Ticket/Elements/ShowMembers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowMessageHeaders b/rt/share/html/Ticket/Elements/ShowMessageHeaders index 57280a227..225218d72 100755 --- a/rt/share/html/Ticket/Elements/ShowMessageHeaders +++ b/rt/share/html/Ticket/Elements/ShowMessageHeaders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowMessageStanza b/rt/share/html/Ticket/Elements/ShowMessageStanza index eddc916ed..99f80c56a 100755 --- a/rt/share/html/Ticket/Elements/ShowMessageStanza +++ b/rt/share/html/Ticket/Elements/ShowMessageStanza @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowParents b/rt/share/html/Ticket/Elements/ShowParents index 9a6b4f90a..8ceb4ab23 100644 --- a/rt/share/html/Ticket/Elements/ShowParents +++ b/rt/share/html/Ticket/Elements/ShowParents @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowPeople b/rt/share/html/Ticket/Elements/ShowPeople index 4b1588430..188cc2323 100755 --- a/rt/share/html/Ticket/Elements/ShowPeople +++ b/rt/share/html/Ticket/Elements/ShowPeople @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowPriority b/rt/share/html/Ticket/Elements/ShowPriority index 0dced0bc0..8fce60cbf 100644 --- a/rt/share/html/Ticket/Elements/ShowPriority +++ b/rt/share/html/Ticket/Elements/ShowPriority @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowQueue b/rt/share/html/Ticket/Elements/ShowQueue index 5aefe9c4e..d6b298a76 100644 --- a/rt/share/html/Ticket/Elements/ShowQueue +++ b/rt/share/html/Ticket/Elements/ShowQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestor b/rt/share/html/Ticket/Elements/ShowRequestor index 1323012dc..cfa079f31 100755 --- a/rt/share/html/Ticket/Elements/ShowRequestor +++ b/rt/share/html/Ticket/Elements/ShowRequestor @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestorExtraInfo b/rt/share/html/Ticket/Elements/ShowRequestorExtraInfo index f7ca458cd..42c8f25e1 100644 --- a/rt/share/html/Ticket/Elements/ShowRequestorExtraInfo +++ b/rt/share/html/Ticket/Elements/ShowRequestorExtraInfo @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestorTickets b/rt/share/html/Ticket/Elements/ShowRequestorTickets index 7bd17f183..1213d3d50 100644 --- a/rt/share/html/Ticket/Elements/ShowRequestorTickets +++ b/rt/share/html/Ticket/Elements/ShowRequestorTickets @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestorTicketsActive b/rt/share/html/Ticket/Elements/ShowRequestorTicketsActive index e398455fe..b29eb0dd8 100644 --- a/rt/share/html/Ticket/Elements/ShowRequestorTicketsActive +++ b/rt/share/html/Ticket/Elements/ShowRequestorTicketsActive @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestorTicketsAll b/rt/share/html/Ticket/Elements/ShowRequestorTicketsAll index 098519172..c67057064 100644 --- a/rt/share/html/Ticket/Elements/ShowRequestorTicketsAll +++ b/rt/share/html/Ticket/Elements/ShowRequestorTicketsAll @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive b/rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive index ff21e08b7..5581f7fb9 100644 --- a/rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive +++ b/rt/share/html/Ticket/Elements/ShowRequestorTicketsInactive @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowSimplifiedRecipients b/rt/share/html/Ticket/Elements/ShowSimplifiedRecipients index ad8053e1e..73c1fd9d2 100644 --- a/rt/share/html/Ticket/Elements/ShowSimplifiedRecipients +++ b/rt/share/html/Ticket/Elements/ShowSimplifiedRecipients @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowSummary b/rt/share/html/Ticket/Elements/ShowSummary index 0cfa0d403..25782e693 100755 --- a/rt/share/html/Ticket/Elements/ShowSummary +++ b/rt/share/html/Ticket/Elements/ShowSummary @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowTime b/rt/share/html/Ticket/Elements/ShowTime index a29f81f96..26531468e 100644 --- a/rt/share/html/Ticket/Elements/ShowTime +++ b/rt/share/html/Ticket/Elements/ShowTime @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowTransaction b/rt/share/html/Ticket/Elements/ShowTransaction index a9c751fff..bf3c527bd 100755 --- a/rt/share/html/Ticket/Elements/ShowTransaction +++ b/rt/share/html/Ticket/Elements/ShowTransaction @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowTransactionAttachments b/rt/share/html/Ticket/Elements/ShowTransactionAttachments index 4e9fd60de..477a81ae5 100644 --- a/rt/share/html/Ticket/Elements/ShowTransactionAttachments +++ b/rt/share/html/Ticket/Elements/ShowTransactionAttachments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowUpdateStatus b/rt/share/html/Ticket/Elements/ShowUpdateStatus index 43b51b578..77f699fbc 100644 --- a/rt/share/html/Ticket/Elements/ShowUpdateStatus +++ b/rt/share/html/Ticket/Elements/ShowUpdateStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/ShowUserEntry b/rt/share/html/Ticket/Elements/ShowUserEntry index 0760f3eed..a5891684f 100644 --- a/rt/share/html/Ticket/Elements/ShowUserEntry +++ b/rt/share/html/Ticket/Elements/ShowUserEntry @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Elements/UpdateCc b/rt/share/html/Ticket/Elements/UpdateCc index 0656f4e81..eaa78c5d8 100644 --- a/rt/share/html/Ticket/Elements/UpdateCc +++ b/rt/share/html/Ticket/Elements/UpdateCc @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Forward.html b/rt/share/html/Ticket/Forward.html index 62fb34671..e457aeb0c 100644 --- a/rt/share/html/Ticket/Forward.html +++ b/rt/share/html/Ticket/Forward.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/GnuPG.html b/rt/share/html/Ticket/GnuPG.html index aa629c717..9ea840f74 100644 --- a/rt/share/html/Ticket/GnuPG.html +++ b/rt/share/html/Ticket/GnuPG.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties index b2963006f..207920265 100644 --- a/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties +++ b/rt/share/html/Ticket/Graphs/Elements/EditGraphProperties @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowGraph b/rt/share/html/Ticket/Graphs/Elements/ShowGraph index e9a5102dc..88bb79ffc 100644 --- a/rt/share/html/Ticket/Graphs/Elements/ShowGraph +++ b/rt/share/html/Ticket/Graphs/Elements/ShowGraph @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Graphs/Elements/ShowLegends b/rt/share/html/Ticket/Graphs/Elements/ShowLegends index 36572ec08..b33f5409e 100644 --- a/rt/share/html/Ticket/Graphs/Elements/ShowLegends +++ b/rt/share/html/Ticket/Graphs/Elements/ShowLegends @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Graphs/dhandler b/rt/share/html/Ticket/Graphs/dhandler index 021e03d0a..7b018ed05 100644 --- a/rt/share/html/Ticket/Graphs/dhandler +++ b/rt/share/html/Ticket/Graphs/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Graphs/index.html b/rt/share/html/Ticket/Graphs/index.html index e79252129..ab19bd8af 100644 --- a/rt/share/html/Ticket/Graphs/index.html +++ b/rt/share/html/Ticket/Graphs/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/History.html b/rt/share/html/Ticket/History.html index 32e5993fe..3fa05fe5c 100755 --- a/rt/share/html/Ticket/History.html +++ b/rt/share/html/Ticket/History.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Modify.html b/rt/share/html/Ticket/Modify.html index 8884c19ee..af417e9ed 100755 --- a/rt/share/html/Ticket/Modify.html +++ b/rt/share/html/Ticket/Modify.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/ModifyAll.html b/rt/share/html/Ticket/ModifyAll.html index 119cae400..20471ac4c 100755 --- a/rt/share/html/Ticket/ModifyAll.html +++ b/rt/share/html/Ticket/ModifyAll.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -53,6 +53,7 @@ % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); + <&| /Widgets/TitleBox, title => loc('Modify ticket # [_1]', $Ticket->Id), class=>'ticket-info-basics' &> diff --git a/rt/share/html/Ticket/ModifyDates.html b/rt/share/html/Ticket/ModifyDates.html index 1d05f87ad..faf7ffae8 100755 --- a/rt/share/html/Ticket/ModifyDates.html +++ b/rt/share/html/Ticket/ModifyDates.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/ModifyLinks.html b/rt/share/html/Ticket/ModifyLinks.html index c29d8766f..eda09c568 100755 --- a/rt/share/html/Ticket/ModifyLinks.html +++ b/rt/share/html/Ticket/ModifyLinks.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/ModifyPeople.html b/rt/share/html/Ticket/ModifyPeople.html index cdf25806a..93f616acb 100755 --- a/rt/share/html/Ticket/ModifyPeople.html +++ b/rt/share/html/Ticket/ModifyPeople.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -52,6 +52,7 @@ <& /Elements/ListActions, actions => \@results &> + % $m->callback( CallbackName => 'FormStart', ARGSRef => \%ARGS ); <&| /Widgets/TitleBox, title => loc('Modify people related to ticket #[_1]', $Ticket->Id), width => "100%", color=> "#333399", class=>'ticket-info-people' &> diff --git a/rt/share/html/Ticket/Reminders.html b/rt/share/html/Ticket/Reminders.html index 8da163fa7..b9cefe6e4 100755 --- a/rt/share/html/Ticket/Reminders.html +++ b/rt/share/html/Ticket/Reminders.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/ShowEmailRecord.html b/rt/share/html/Ticket/ShowEmailRecord.html index 69a5ad064..e7d496e2a 100644 --- a/rt/share/html/Ticket/ShowEmailRecord.html +++ b/rt/share/html/Ticket/ShowEmailRecord.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/Update.html b/rt/share/html/Ticket/Update.html index 37bb134c2..c4e8c256a 100755 --- a/rt/share/html/Ticket/Update.html +++ b/rt/share/html/Ticket/Update.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Ticket/autohandler b/rt/share/html/Ticket/autohandler index 468808a77..367c9787e 100644 --- a/rt/share/html/Ticket/autohandler +++ b/rt/share/html/Ticket/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Tools/MyDay.html b/rt/share/html/Tools/MyDay.html index e21851f11..33b36fa87 100644 --- a/rt/share/html/Tools/MyDay.html +++ b/rt/share/html/Tools/MyDay.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Tools/MyReminders.html b/rt/share/html/Tools/MyReminders.html index 8884c483e..f62dbd09c 100644 --- a/rt/share/html/Tools/MyReminders.html +++ b/rt/share/html/Tools/MyReminders.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Tools/Offline.html b/rt/share/html/Tools/Offline.html index de49e00c8..9d1bd2832 100644 --- a/rt/share/html/Tools/Offline.html +++ b/rt/share/html/Tools/Offline.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Tools/index.html b/rt/share/html/Tools/index.html index 72ae91b1c..28f1ca3b2 100644 --- a/rt/share/html/Tools/index.html +++ b/rt/share/html/Tools/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/User/Prefs.html b/rt/share/html/User/Prefs.html index 967f4004d..d491145e0 100755 --- a/rt/share/html/User/Prefs.html +++ b/rt/share/html/User/Prefs.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -167,6 +167,8 @@ +<& /Elements/Submit, Label => loc('Save Preferences') &> + <&| /Widgets/TitleBox, title => loc('Secret authentication token'), id => "user-prefs-feeds" &> <&|/l&>All iCal feeds embed a secret token which authorizes you. If the URL one of your iCal feeds got exposed to the outside world, you can get a new secret, breaking all existing iCal feeds below. @@ -196,7 +198,6 @@ % $m->callback( %ARGS, UserObj => $UserObj, CallbackName => 'FormEnd' ); -<& /Elements/Submit, Label => loc('Save Preferences') &> diff --git a/rt/share/html/Widgets/BulkEdit b/rt/share/html/Widgets/BulkEdit index 6a4655710..73fc06ac7 100644 --- a/rt/share/html/Widgets/BulkEdit +++ b/rt/share/html/Widgets/BulkEdit @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/BulkProcess b/rt/share/html/Widgets/BulkProcess index 92d249e84..714d435eb 100644 --- a/rt/share/html/Widgets/BulkProcess +++ b/rt/share/html/Widgets/BulkProcess @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/ComboBox b/rt/share/html/Widgets/ComboBox index 4d2a03fa5..7d852e5a0 100644 --- a/rt/share/html/Widgets/ComboBox +++ b/rt/share/html/Widgets/ComboBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/FinalizeWidgetArguments b/rt/share/html/Widgets/FinalizeWidgetArguments index 5bb390547..87f3ae083 100644 --- a/rt/share/html/Widgets/FinalizeWidgetArguments +++ b/rt/share/html/Widgets/FinalizeWidgetArguments @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/Form/Boolean b/rt/share/html/Widgets/Form/Boolean index 2a362a3cd..0d5bd1aea 100644 --- a/rt/share/html/Widgets/Form/Boolean +++ b/rt/share/html/Widgets/Form/Boolean @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/Form/Integer b/rt/share/html/Widgets/Form/Integer index 99e544904..e658a3610 100644 --- a/rt/share/html/Widgets/Form/Integer +++ b/rt/share/html/Widgets/Form/Integer @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/Form/Select b/rt/share/html/Widgets/Form/Select index 08a7bdab2..4489d49f5 100644 --- a/rt/share/html/Widgets/Form/Select +++ b/rt/share/html/Widgets/Form/Select @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/Form/String b/rt/share/html/Widgets/Form/String index c222819d8..e28726f3f 100644 --- a/rt/share/html/Widgets/Form/String +++ b/rt/share/html/Widgets/Form/String @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/SavedSearch b/rt/share/html/Widgets/SavedSearch index 3cb0f35a7..844e8623c 100644 --- a/rt/share/html/Widgets/SavedSearch +++ b/rt/share/html/Widgets/SavedSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/SelectionBox b/rt/share/html/Widgets/SelectionBox index 675c9783f..4ac178b69 100644 --- a/rt/share/html/Widgets/SelectionBox +++ b/rt/share/html/Widgets/SelectionBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/TitleBox b/rt/share/html/Widgets/TitleBox index abe088d09..9ed23264c 100644 --- a/rt/share/html/Widgets/TitleBox +++ b/rt/share/html/Widgets/TitleBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/TitleBoxEnd b/rt/share/html/Widgets/TitleBoxEnd index d4618bb2e..7f513657f 100755 --- a/rt/share/html/Widgets/TitleBoxEnd +++ b/rt/share/html/Widgets/TitleBoxEnd @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Widgets/TitleBoxStart b/rt/share/html/Widgets/TitleBoxStart index 4982315fe..4b6a6f114 100755 --- a/rt/share/html/Widgets/TitleBoxStart +++ b/rt/share/html/Widgets/TitleBoxStart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/autohandler b/rt/share/html/autohandler index 180127b3f..5b7770db3 100755 --- a/rt/share/html/autohandler +++ b/rt/share/html/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/dhandler b/rt/share/html/dhandler index 830c08814..8217a8abd 100644 --- a/rt/share/html/dhandler +++ b/rt/share/html/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/index.html b/rt/share/html/index.html index 4103dbdca..fafba1cb5 100755 --- a/rt/share/html/index.html +++ b/rt/share/html/index.html @@ -30,7 +30,7 @@ If you need commercial support, please contact us at sales@bestpractical.com. %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -102,6 +102,7 @@ if ( $ARGS{'QuickCreate'} ) { ); + my $created; if ( $ValidCFs && !$skip_create ) { my ($t, $msg) = CreateTicket( Queue => $ARGS{'Queue'}, diff --git a/rt/share/html/l b/rt/share/html/l index 814d69b91..78ffcef57 100755 --- a/rt/share/html/l +++ b/rt/share/html/l @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/l_unsafe b/rt/share/html/l_unsafe index 524c9a2ea..6b456f64d 100644 --- a/rt/share/html/l_unsafe +++ b/rt/share/html/l_unsafe @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/footer b/rt/share/html/m/_elements/footer index 10f3fba4e..b7fb28381 100644 --- a/rt/share/html/m/_elements/footer +++ b/rt/share/html/m/_elements/footer @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/full_site_link b/rt/share/html/m/_elements/full_site_link index 5769c4ee8..6e9da1185 100644 --- a/rt/share/html/m/_elements/full_site_link +++ b/rt/share/html/m/_elements/full_site_link @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/header b/rt/share/html/m/_elements/header index 0d284e3f1..a9fda941c 100644 --- a/rt/share/html/m/_elements/header +++ b/rt/share/html/m/_elements/header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/login b/rt/share/html/m/_elements/login index 64effcbd3..ce524ee15 100644 --- a/rt/share/html/m/_elements/login +++ b/rt/share/html/m/_elements/login @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/menu b/rt/share/html/m/_elements/menu index a6181a218..3a018361b 100644 --- a/rt/share/html/m/_elements/menu +++ b/rt/share/html/m/_elements/menu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/raw_style b/rt/share/html/m/_elements/raw_style index 636884984..f8fee325e 100644 --- a/rt/share/html/m/_elements/raw_style +++ b/rt/share/html/m/_elements/raw_style @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/ticket_list b/rt/share/html/m/_elements/ticket_list index 501494c8e..6eec63e9c 100644 --- a/rt/share/html/m/_elements/ticket_list +++ b/rt/share/html/m/_elements/ticket_list @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/ticket_menu b/rt/share/html/m/_elements/ticket_menu index 8e51b5055..2c2eb0aa5 100644 --- a/rt/share/html/m/_elements/ticket_menu +++ b/rt/share/html/m/_elements/ticket_menu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/_elements/wrapper b/rt/share/html/m/_elements/wrapper index c8d2d011e..3d74e8d94 100644 --- a/rt/share/html/m/_elements/wrapper +++ b/rt/share/html/m/_elements/wrapper @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/dhandler b/rt/share/html/m/dhandler index ca5f3528f..926f8178a 100644 --- a/rt/share/html/m/dhandler +++ b/rt/share/html/m/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/index.html b/rt/share/html/m/index.html index b8e9bbf90..70e7f4d80 100644 --- a/rt/share/html/m/index.html +++ b/rt/share/html/m/index.html @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/logout b/rt/share/html/m/logout index b92e7d8b3..b0e1107d8 100644 --- a/rt/share/html/m/logout +++ b/rt/share/html/m/logout @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/style.css b/rt/share/html/m/style.css index 243d32d74..9ccc3effe 100644 --- a/rt/share/html/m/style.css +++ b/rt/share/html/m/style.css @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/autohandler b/rt/share/html/m/ticket/autohandler index 9bcd56e53..595e7d77c 100644 --- a/rt/share/html/m/ticket/autohandler +++ b/rt/share/html/m/ticket/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/create b/rt/share/html/m/ticket/create index 7fbfc7a82..5d72d1b76 100644 --- a/rt/share/html/m/ticket/create +++ b/rt/share/html/m/ticket/create @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/history b/rt/share/html/m/ticket/history index 4293e2f1d..418bace17 100644 --- a/rt/share/html/m/ticket/history +++ b/rt/share/html/m/ticket/history @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/reply b/rt/share/html/m/ticket/reply index 4db5401aa..bc7f0d6d3 100644 --- a/rt/share/html/m/ticket/reply +++ b/rt/share/html/m/ticket/reply @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/select_create_queue b/rt/share/html/m/ticket/select_create_queue index 63c49f2ca..626cdf8e1 100644 --- a/rt/share/html/m/ticket/select_create_queue +++ b/rt/share/html/m/ticket/select_create_queue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/ticket/show b/rt/share/html/m/ticket/show index 360ef405f..4516f9f03 100644 --- a/rt/share/html/m/ticket/show +++ b/rt/share/html/m/ticket/show @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/m/tickets/search b/rt/share/html/m/tickets/search index e0bc84dda..561e859e9 100644 --- a/rt/share/html/m/tickets/search +++ b/rt/share/html/m/tickets/search @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/t/api/emailparser.t b/rt/t/api/emailparser.t index 790314603..a58cb3623 100644 --- a/rt/t/api/emailparser.t +++ b/rt/t/api/emailparser.t @@ -2,12 +2,14 @@ use strict; use warnings; -use RT::Test nodb => 1, tests => 10; +use RT::Test tests => 11; -RT->Config->Set( RTAddressRegexp => qr/^rt\@example.com$/i ); +ok(require RT::EmailParser); +RT->Config->Set( RTAddressRegexp => undef ); +is(RT::EmailParser::IsRTAddress("",""),undef, "Empty emails from users don't match queues without email addresses" ); -ok(require RT::EmailParser); +RT->Config->Set( RTAddressRegexp => qr/^rt\@example.com$/i ); is(RT::EmailParser::IsRTAddress("","rt\@example.com"),1, "Regexp matched rt address" ); is(RT::EmailParser::IsRTAddress("","frt\@example.com"),undef, "Regexp didn't match non-rt address" ); diff --git a/rt/t/fts/indexed_pg.t b/rt/t/fts/indexed_pg.t index b8d4b1bab..88e35ab6a 100644 --- a/rt/t/fts/indexed_pg.t +++ b/rt/t/fts/indexed_pg.t @@ -9,8 +9,6 @@ my ($major, $minor) = $RT::Handle->dbh->get_info(18) =~ /^0*(\d+)\.0*(\d+)/; plan skip_all => "Need Pg 8.2 or higher; we have $major.$minor" if "$major.$minor" < 8.2; -plan tests => 36; - RT->Config->Set( FullTextSearch => Enable => 1, Indexed => 1, Column => 'ContentIndex', Table => 'Attachments' ); setup_indexing(); @@ -70,10 +68,11 @@ sub run_test { diag "Wrong SQL query for '$query':". $tix->BuildSelectQuery if $error; } +my $blase = Encode::decode_utf8("blasé"); @tickets = RT::Test->create_tickets( { Queue => $q->id }, - { Subject => 'fts test 1', Content => 'book' }, - { Subject => 'fts test 2', Content => 'bars' }, + { Subject => 'fts test 1', Content => "book $blase" }, + { Subject => 'fts test 2', Content => "bars blasé", ContentType => 'text/html' }, ); sync_index(); @@ -84,6 +83,11 @@ run_tests( "Content LIKE 'book'" => { $book->id => 1, $bars->id => 0 }, "Content LIKE 'bars'" => { $book->id => 0, $bars->id => 1 }, + # Unicode searching + "Content LIKE '$blase'" => { $book->id => 1, $bars->id => 1 }, + "Content LIKE 'blase'" => { $book->id => 0, $bars->id => 0 }, + "Content LIKE 'blas'" => { $book->id => 0, $bars->id => 0 }, + # make sure that Pg stemming works "Content LIKE 'books'" => { $book->id => 1, $bars->id => 0 }, "Content LIKE 'bar'" => { $book->id => 0, $bars->id => 1 }, @@ -116,3 +120,5 @@ run_tests( ); @tickets = (); + +done_testing; -- cgit v1.2.1 From 99a85d8ed7da15cb441a54cde91f7e43cb89a15e Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 15:48:56 -0700 Subject: webdemo hack to set IP in RT_SiteConfig.pm controlled by presence of a file instead of needing to be commented out and thus losing on upgrade --- init.d/freeside-init | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/init.d/freeside-init b/init.d/freeside-init index 099603ef0..248c5b36e 100644 --- a/init.d/freeside-init +++ b/init.d/freeside-init @@ -88,9 +88,11 @@ case "$1" in freeside-torrus-srvderive $QUEUED_USER echo "done." - #ip=`/sbin/ifconfig $IF | grep 'inet addr:' | cut -d: -f2- | cut -d' ' -f1` - #cp /opt/rt3/etc/RT_SiteConfig.pm.ORIG /opt/rt3/etc/RT_SiteConfig.pm - #perl -pi -e "s/localhost/$ip/" /opt/rt3/etc/RT_SiteConfig.pm + if [ -e /opt/rt3/etc/RT_SiteConfig.pm.ORIG_WEBDEMO_HACK ]; then + ip=`/sbin/ifconfig $IF | grep 'inet addr:' | cut -d: -f2- | cut -d' ' -f1` + cp /opt/rt3/etc/RT_SiteConfig.pm.ORIG_WEBDEMO_HACK /opt/rt3/etc/RT_SiteConfig.pm + perl -pi -e "s/localhost/$ip/" /opt/rt3/etc/RT_SiteConfig.pm + fi ;; stop) -- cgit v1.2.1 From fcc2d2644025c63d443e78671573b5231fbbed17 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 18:02:53 -0700 Subject: dump tokens for cardfortress export --- bin/dump_tokens | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 bin/dump_tokens diff --git a/bin/dump_tokens b/bin/dump_tokens new file mode 100644 index 000000000..70c449bf9 --- /dev/null +++ b/bin/dump_tokens @@ -0,0 +1,14 @@ +#!/usr/bin/perl + +use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearch); +use FS::cust_main; + +adminsuidsetup shift or die 'usage: dump_tokens username'; + +foreach my $cust_main ( qsearch({ table => 'cust_main', + extra_sql => "WHERE payby IN ('CARD','DCRD')", + }) +) { + print $cust_main->custnum. ','. $cust_main->payinfo. "\n"; +} -- cgit v1.2.1 From 5d88fad3d436bc8bc7d828c7b7ad2fc61f18eef4 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 23:06:08 -0700 Subject: UI spring cleaning --- httemplate/elements/freeside.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css index d1e22f903..6a1d23839 100644 --- a/httemplate/elements/freeside.css +++ b/httemplate/elements/freeside.css @@ -230,7 +230,7 @@ div.fstabcontainer { .fsinnerbox { /* background-color:#cccccc; */ padding:2px; - border: 1px solid #dddddd; + border: 1px solid #cccccc; border-radius: 2px; } -- cgit v1.2.1 From f4d9fff3c3925e9c4637fbfbc22b824a3539f39c Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 23:08:41 -0700 Subject: UI spring cleaning: menu/search bar --- httemplate/elements/freeside-menu.css | 14 +++++--------- httemplate/elements/header.html | 22 +++++++++++----------- httemplate/elements/xmenu.css | 2 +- httemplate/elements/xmenu.top.css | 4 ++-- 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/httemplate/elements/freeside-menu.css b/httemplate/elements/freeside-menu.css index 9533f1950..a66ebc0db 100644 --- a/httemplate/elements/freeside-menu.css +++ b/httemplate/elements/freeside-menu.css @@ -1,11 +1,9 @@ input.fsblackbutton { - background-color:#aaaaaa; + background-color:#cccccc; color: #333333; border:1px solid #888888; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; + border-radius: 2px; font-family: Arial, Verdana, Helvetica, sans-serif; font-weight:bold; @@ -20,17 +18,15 @@ input.fsblackbutton { input.fsblackbutton:hover,input.fsblackbutton:focus, input.fsblackbuttonselected:hover, input.fsblackbuttonselected:focus { - background:#aaaaaa; + background:#cccccc; } input.fsblackbuttonselected { - background-color:#aaaaaa; + background-color:#cccccc; color: #7e0079; border:1px solid #7e0079; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; + border-radius: 2px; font-family: Arial, Verdana, Helvetica, sans-serif; font-weight:bold; diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html index a9e74babf..014ac6e5e 100644 --- a/httemplate/elements/header.html +++ b/httemplate/elements/header.html @@ -75,18 +75,18 @@ Example: % if ( $mobile ) { - + - + <% include('searchbar-combined.html') |n %> % } else { - + @@ -96,27 +96,27 @@ Example: - + <% include('searchbar-prospect.html') |n %> - + <% include('searchbar-cust_main.html') |n %> - + <% include('searchbar-address2.html') |n %> - + <% include('searchbar-cust_bill.html') |n %> - + <% include('searchbar-cust_svc.html') |n %> - + <% include('searchbar-ticket.html') |n %> % } @@ -128,7 +128,7 @@ Example: - + @@ -142,7 +142,7 @@ Example: % if ( $menu_position eq 'left' ) { - + diff --git a/httemplate/elements/xmenu.css b/httemplate/elements/xmenu.css index e6a39f675..afd9e919d 100644 --- a/httemplate/elements/xmenu.css +++ b/httemplate/elements/xmenu.css @@ -101,7 +101,7 @@ /* background: rgb(120,172,255);/*rgb(255,128,0);*/ /* background: #a097ed; */ - background: #cccccc; + background: #dddddd; /* border: 1px solid #7E0079; */ /* border: 1px solid #000000; */ /* border: none */ diff --git a/httemplate/elements/xmenu.top.css b/httemplate/elements/xmenu.top.css index 7a42254e4..4b6f151d6 100644 --- a/httemplate/elements/xmenu.top.css +++ b/httemplate/elements/xmenu.top.css @@ -98,7 +98,7 @@ .webfx-menu-bar { /* background: rgb(120,172,255);/*rgb(255,128,0);*/ /* background: #a097ed; */ - background: #cccccc; + background: #dddddd; /* border: 1px solid #7E0079; */ /* border: 1px solid #000000; */ /* border: none */ @@ -126,7 +126,7 @@ /* IE5.0 Does not paint borders and padding on inline elements without a height/width */ height: expression(constExpression(ie50 ? "17px" : "auto")); - border: 1px solid #cccccc; + border: 1px solid #dddddd; margin-right: 4px -- cgit v1.2.1 From e8bd43487a32b56508d1ddcea7c46949daec825d Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 23:45:52 -0700 Subject: UI spring cleaning: customer menus, and some consistency with top menus --- httemplate/elements/freeside.css | 10 ++++------ httemplate/elements/xmenu.css | 6 +++--- httemplate/elements/xmenu.top.css | 8 ++------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css index 6a1d23839..7e8ae872d 100644 --- a/httemplate/elements/freeside.css +++ b/httemplate/elements/freeside.css @@ -179,13 +179,11 @@ div.fstabcontainer { background-color:#ffffff; padding:8px; clear: left; - border-left: thin solid #CFDEFF; - border-right: thin solid #CFDEFF; - border-bottom: thin solid #CFDEFF; + border-left: thin solid #7e0079; + border-right: thin solid #7e0079; + border-bottom: thin solid #7e0079; + border-top: thin solid #7e0079; /* - border-left:1px solid #7e0079; - border-right:1px solid #7e0079; - border-bottom:1px solid #7e0079; border-top:1px solid #7e0079; */ } diff --git a/httemplate/elements/xmenu.css b/httemplate/elements/xmenu.css index afd9e919d..79990d35c 100644 --- a/httemplate/elements/xmenu.css +++ b/httemplate/elements/xmenu.css @@ -28,9 +28,9 @@ border-radius: 4px; padding: 1px; background: white; - -moz-box-shadow: #000000 1px 1px 4px; - -webkit-box-shadow: #000000 1px 1px 4px; - box-shadow: #000000 1px 1px 4px; + -moz-box-shadow: #333333 1px 1px 2px; + -webkit-box-shadow: #333333 1px 1px 2px; + box-shadow: #333333 1px 1px 2px; } .webfx-menu-empty { diff --git a/httemplate/elements/xmenu.top.css b/httemplate/elements/xmenu.top.css index 4b6f151d6..b72276852 100644 --- a/httemplate/elements/xmenu.top.css +++ b/httemplate/elements/xmenu.top.css @@ -23,14 +23,10 @@ z-index: 9999; visibility: hidden; border: 1px solid #7e0079; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; + border-radius: 2px; padding: 1px; background: white; - -moz-box-shadow: #000000 1px 1px 4px; - -webkit-box-shadow: #000000 1px 1px 4px; - box-shadow: #000000 1px 1px 4px; + box-shadow: #333333 1px 1px 2px; } .webfx-menu-empty { -- cgit v1.2.1 From b549664d989a15f405e73a159d317f7bdc713ca7 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sat, 13 Jun 2015 23:46:43 -0700 Subject: UI spring cleaning: customer menus, and some consistency with top menus --- httemplate/view/cust_main/menu.html | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/httemplate/view/cust_main/menu.html b/httemplate/view/cust_main/menu.html index 326c2f954..0ae154f6d 100644 --- a/httemplate/view/cust_main/menu.html +++ b/httemplate/view/cust_main/menu.html @@ -14,13 +14,15 @@ #menu_ul a { display: block; - margin: 0; + margin-left: 0; + margin-right: 1em; + margin-bottom: -1px; + margin-top: 0; padding: .5em .75em; - background: #f8f8f8; + background: #e0e0e0; color: #525151; white-space: nowrap; text-decoration: none; - border-bottom: thin solid #CFDFDF; border-top-left-radius: .5em; border-top-right-radius: .5em; } @@ -28,10 +30,10 @@ #menu_ul a.current_show { font-weight: bold; background: #FFFFFF; - border-top: thin solid #CFDEFF; - border-left: thin solid #CFDEFF; - border-right: thin solid #CFDEFF; - border-bottom: none; + border-top: thin solid #7e0079; + border-left: thin solid #7e0079; + border-right: thin solid #7e0079; + border-bottom: thin solid #ffffff; } #menu_ul ul { @@ -42,10 +44,10 @@ top: 100%; left: 0; background: #ffffff; - border-top: none; - border-left: thin solid #CFDEFF; - border-right: thin solid #CFDEFF; - border-bottom: thin solid #CFDEFF; + border: thin solid #7e0079; + z-index:8888; + border-radius: 2px; + box-shadow: #333333 1px 1px 2px; } #menu_ul ul li { @@ -62,7 +64,6 @@ } #menu_ul a:hover { - background: #cfdeff; text-decoration: underline; color: #7e0079; } -- cgit v1.2.1 From c91dd6071dfdfc2914937a3da608704b5560a485 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 00:01:51 -0700 Subject: its 2015 --- httemplate/docs/license.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/docs/license.html b/httemplate/docs/license.html index 9f6f27edd..b3f8539a3 100644 --- a/httemplate/docs/license.html +++ b/httemplate/docs/license.html @@ -6,7 +6,7 @@

-Copyright © 2005-2014 Freeside Internet Services, Inc.
+Copyright © 2005-2015 Freeside Internet Services, Inc.
Copyright © 2000-2005 Ivan Kohler
Copyright © 1999 Silicon Interactive Software Design
All rights reserved
-- cgit v1.2.1 From 51bcbace2c49a69ae249e4f8212c09fe3b5f0f82 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 00:05:48 -0700 Subject: ng_selfservice excempt from A in AGPL too --- httemplate/docs/license.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/httemplate/docs/license.html b/httemplate/docs/license.html index b3f8539a3..1af2c923c 100644 --- a/httemplate/docs/license.html +++ b/httemplate/docs/license.html @@ -30,10 +30,10 @@ All rights reserved

At your option, you may also redistribute and/or modify the files in the - fs_selfservice/ directory (but not the rest of the software) under the - terms of the GNU General Public License as published by the Free Software - Foundation, either version 3 of the License, or (at your option) any later - version. + fs_selfservice/ and ng_selfservice/ directories (but not the rest of the + software) under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version.

At your option, you may also redistribute and/or modify the -- cgit v1.2.1 From 6c23a2c53a897f1f18087b49a627ae3d83c6e52b Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 00:13:02 -0700 Subject: UI spring cleaning: space title from top menu --- httemplate/elements/header.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html index 014ac6e5e..fd8a03d99 100644 --- a/httemplate/elements/header.html +++ b/httemplate/elements/header.html @@ -157,6 +157,8 @@ Example: +% } else { #$menu_position eq 'top' +
% } %# page content starts here @@ -166,7 +168,7 @@ Example: % unless ( $nobr ) { -

+
% } <% $menubar !~ /^\s*$/ ? "$menubar

" : '' %> -- cgit v1.2.1 From 906e5a16cd0dc5e50507794baa3b35c0bc994467 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 01:01:50 -0700 Subject: when there are duplicate username@domain records and selfservice_server-primary_only is enabled, allow login with a primary service, RT#30750 --- FS/FS/ClientAPI/MyAccount.pm | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index cb6ac02d8..ec76e2738 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -260,16 +260,39 @@ sub login { my $svc_domain = qsearchs('svc_domain', { 'domain' => $p->{'domain'} } ) or return { error => 'Domain '. $p->{'domain'}. ' not found' }; - my $svc_acct = qsearchs( 'svc_acct', { 'username' => $p->{'username'}, - 'domsvc' => $svc_domain->svcnum, } - ); - return { error => 'User not found.' } unless $svc_acct; + my @svc_acct = qsearch( 'svc_acct', { 'username' => $p->{'username'}, + 'domsvc' => $svc_domain->svcnum, } + ); + + if ( $conf->exists('selfservice_server-login_svcpart') ) { + my @svcpart = $conf->config('selfservice_server-login_svcpart'); + @svc_acct = grep { my $svcpart = $_->cust_svc->svcpart; + scalar( grep( $_ eq $svcpart, @svcpart ) ); + } + @svc_acct; + } + + if ( $conf->exists('selfservice_server-primary_only') ) { + @svc_acct = + grep { + my $cust_svc = $_->cust_svc; + $cust_svc->cust_pkg->part_pkg->svcpart([qw( svc_acct svc_phone )]) + == $cust_svc->svcpart + } + @svc_acct; + } + + return { error => 'User not found.' } unless @svc_acct; + + #return { error => 'Multiple users.' } if scalar(@svc_acct) > 1; + + my $svc_acct = $svc_acct[0]; - if($conf->exists('selfservice_server-login_svcpart')) { - my @svcpart = $conf->config('selfservice_server-login_svcpart'); - my $svcpart = $svc_acct->cust_svc->svcpart; - return { error => 'Invalid user.' } - unless grep($_ eq $svcpart, @svcpart); + if ( $conf->exists('selfservice_server-login_svcpart') ) { + my @svcpart = $conf->config('selfservice_server-login_svcpart'); + my $svcpart = $svc_acct->cust_svc->svcpart; + return { error => 'Invalid user.' } + unless grep($_ eq $svcpart, @svcpart); } return { error => 'Incorrect password.' } -- cgit v1.2.1 From 2472b5d17c4788e3b7b076def566bcd1170ec7ba Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 01:05:39 -0700 Subject: when there are duplciate username@domain records, and neither selfservice_server-primary_only or selfservice_server-login-svcpart designate one for login, throw and error rather than picking one arbitrarily --- FS/FS/ClientAPI/MyAccount.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index ec76e2738..36989db22 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -284,7 +284,7 @@ sub login { return { error => 'User not found.' } unless @svc_acct; - #return { error => 'Multiple users.' } if scalar(@svc_acct) > 1; + return { error => 'Multiple users.' } if scalar(@svc_acct) > 1; my $svc_acct = $svc_acct[0]; -- cgit v1.2.1 From 3ba0c846a46231a732c18a95cca54f719e0fd7d5 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 11:49:46 -0700 Subject: UI spring cleaning: THEAD headers --- httemplate/elements/freeside.css | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css index 7e8ae872d..8e493eb54 100644 --- a/httemplate/elements/freeside.css +++ b/httemplate/elements/freeside.css @@ -264,12 +264,11 @@ thead th.grid { padding-bottom: 2px; border: none; empty-cells: show; - font-weight:normal; +/* font-weight:normal; */ font-size:90%; valign: bottom; - color: #666666; - background: #ffffff; - border-bottom: 1px solid #666666; +/* color: #666666; */ + border-bottom: 1px solid #999999; } td.grid { -- cgit v1.2.1 From 998bb3d2c2ae8eedcc8b4fb2abc195e8ed1ee9f6 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 11:52:58 -0700 Subject: UI spring cleaning: s/Person/Employee/ in note list --- httemplate/view/cust_main/notes/notes.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/view/cust_main/notes/notes.html b/httemplate/view/cust_main/notes/notes.html index b4ea87c19..eb421eb37 100644 --- a/httemplate/view/cust_main/notes/notes.html +++ b/httemplate/view/cust_main/notes/notes.html @@ -95,7 +95,7 @@ % if ( $conf->exists('cust_main_note-display_times') ) { <% mt('Time') |h %> % } - <% mt('Person') |h %> + <% mt('Employee') |h %> % if ($conf->exists('note-classes') && $conf->config('note-classes') == 1) { <% mt('Class') |h %> % } -- cgit v1.2.1 From b6260b4f39cf34b9e0e5b8560ef88c8881ba0766 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 13:59:11 -0700 Subject: UI spring cleaning: customer edit --- httemplate/edit/cust_main.cgi | 4 ++-- httemplate/edit/cust_main/basics.html | 13 +++++++------ httemplate/edit/cust_main/company.html | 2 +- httemplate/edit/cust_main/fax.html | 2 +- httemplate/edit/cust_main/name.html | 8 ++++---- httemplate/edit/cust_main/phones.html | 4 ++-- httemplate/elements/freeside.css | 4 ++-- httemplate/elements/location.html | 12 ++++++------ httemplate/elements/tr-select-agent.html | 4 ++-- httemplate/elements/tr-select-cust_class.html | 2 +- httemplate/elements/tr-select-cust_tag.html | 2 +- httemplate/elements/tr-td-label.html | 7 ++++++- 12 files changed, 35 insertions(+), 29 deletions(-) diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index b6f6b0dea..38bae4fa8 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -40,7 +40,7 @@ % }
- +<& SELF:header_row, + 'header' => $opt{'header'}, + 'header2' => $opt{'header2'}, + 'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}), +&> + + + +<& SELF:data_rows, rows => $rows, opt => \%opt &> + + +% if ( $opt{'footer'} ) { + +<& SELF:footer_row, row => $opt{'footer'}, opt => \%opt &> + +% } +
+ %#; padding-right:2px; vertical-align:top"> <% mt('Billing address') |h %> @@ -58,7 +58,7 @@ - - + @@ -118,7 +118,7 @@ <& /elements/tr-select-agent.html, 'curr_value' => $cust_main->agentnum, - 'label' => "${r}".emt('Agent')."", + 'label' => $r. emt('Agent'), 'empty_label' => emt('Select agent'), 'disable_empty' => ( $cust_main->agentnum ? 1 : 0 ), 'viewall_right' => emt('None'), @@ -131,7 +131,7 @@ % if ( $conf->exists('cust_main-edit_agent_custid') ) { - + @@ -157,6 +157,7 @@ %#sales person <& /elements/tr-select-sales.html, 'curr_value' => $cust_main->salesnum, + 'th' => 1, &> %# referral (advertising source) @@ -169,7 +170,7 @@ <& /elements/tr-select-part_referral.html, 'curr_value' => $refnum, - 'label' => "${r}".emt('Advertising source')."" + 'label' => $r. emt('Advertising source'), &> % } @@ -183,7 +184,7 @@ %) { - + @@ -193,7 +194,7 @@ % } elsif ( ! $conf->exists('disable_customer_referrals') ) { - + company ? '' : 'STYLE="display:none"' %>> - + diff --git a/httemplate/edit/cust_main/fax.html b/httemplate/edit/cust_main/fax.html index 237d4be44..c3e9917f4 100644 --- a/httemplate/edit/cust_main/fax.html +++ b/httemplate/edit/cust_main/fax.html @@ -1,5 +1,5 @@ % my $cust_main = shift; - + diff --git a/httemplate/edit/cust_main/name.html b/httemplate/edit/cust_main/name.html index 74b2a7b5b..bc55801cf 100644 --- a/httemplate/edit/cust_main/name.html +++ b/httemplate/edit/cust_main/name.html @@ -2,12 +2,12 @@ % my ($field, $value, $label, $extra) = @_;
> -
<% mt($label) %> +
<% mt($label) %>
- + % if ( $conf->exists('cust_main-enable_spouse') ) { - + - - + -% my $h2 = 0; -% my $colspan = 0; -% my @fields = @{ $opt{'sort_fields'} || $opt{'fields'} || [] }; -% my $order_by = $cgi->param('order_by'); -% foreach my $header ( @{ $opt{header} } ) { -% -% my $field = shift @fields; -% -% $colspan-- if $colspan > 0; -% next if $colspan; -% -% my $label = ref($header) ? $header->{label} : $header; -% unless ( ref($field) || !$field ) { -% if ( $order_by eq $field ) { -% $cgi->param('order_by', "$field DESC"); -% } else { -% $cgi->param('order_by', $field); -% } -% $label = qq($label); -% } -% -% $colspan = ref($header) ? $header->{colspan} : 0; -% my $rowspan = 1; -% my $style = ''; -% if ( $opt{header2} ) { -% if ( !length($opt{header2}->[$h2]) ) { -% $rowspan = 2; -% splice @{ $opt{header2} }, $h2, 1; -% } else { -% $h2++; -% $style = 'STYLE="border-bottom: none"' -% } -% } - -% } - - -% if ( $opt{header2} ) { - -% foreach my $header ( @{ $opt{header2} } ) { -% my $label = ref($header) ? $header->{label} : $header; - -% } - -% } - -% my $bgcolor1 = '#eeeeee'; -% my $bgcolor2 = '#ffffff'; -% my $bgcolor; -% -% foreach my $row ( @$rows ) { -% -% if ( $bgcolor eq $bgcolor1 ) { -% $bgcolor = $bgcolor2; -% } else { -% $bgcolor = $bgcolor1; -% } - -% my $rowstyle = ''; -% if ( $row eq $opt{'footer_data'} ) { -% $rowstyle = ' STYLE="border-top: dashed 1px black; font-style: italic"'; -% $bgcolor = '#dddddd'; -% } - -% my $trid = ''; -% if ( $opt{'link_field' } ) { -% my $link_field = $opt{'link_field'}; -% if ( ref($link_field) eq 'CODE' ) { -% $trid = &{$link_field}($row); -% } else { -% $trid = $row->$link_field(); -% } -% } - > - - -% if ( $opt{'fields'} ) { -% -% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : ''; -% my $onclicks = $opt{'link_onclicks'} ? [ @{$opt{'link_onclicks'}} ] : []; -% my $tooltips = $opt{'tooltips'} ? [ @{$opt{'tooltips'}} ] : []; -% my $aligns = $opt{'align'} ? [ @{$opt{'align'}} ] : ''; -% my $colors = $opt{'color'} ? [ @{$opt{'color'}} ] : []; -% my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : []; -% my $styles = $opt{'style'} ? [ @{$opt{'style'}} ] : []; -% my $cstyles = $opt{'cell_style'} ? [ @{$opt{'cell_style'}} ] : []; -% -% foreach my $field ( -% -% map { -% if ( ref($_) eq 'ARRAY' ) { -% -% my $tableref = $_; -% -% '
+ <% mt('Service address') |h %>
<% mt('Agent') |h %><% mt('Agent') |h %> <% $cust_main->agent->agent |h %>
<% mt('Customer identifier') |h %><% mt('Customer identifier') |h %>
<% mt('Referring customer') |h %><% mt('Referring customer') |h %> <% $cust_main->referral_custnum %>: <% $referring_cust_main->name |h %>
<% mt('Referring customer') |h %><% mt('Referring customer') |h %> <& /elements/search-cust_main.html, 'field_name' => 'referral_custnum', diff --git a/httemplate/edit/cust_main/company.html b/httemplate/edit/cust_main/company.html index 8a6ed0bbf..50c4f709b 100644 --- a/httemplate/edit/cust_main/company.html +++ b/httemplate/edit/cust_main/company.html @@ -1,6 +1,6 @@ % my $cust_main = shift;
<% mt('Company') |h %><% mt('Company') |h %>
<% mt('Fax') |h %><% mt('Fax') |h %>
<% mt('Contact name') |h %><% mt('Contact name') |h %> <& .namepart, 'last', $cust_main->last, 'Last', ',' &> <& .namepart, 'first', $cust_main->first, 'First' &> @@ -21,7 +21,7 @@
<% mt('Spouse\'s name') |h %><% mt('Spouse\'s name') |h %> <& .namepart, 'spouse_last', $cust_main->spouse_last, 'Last', ',' &> <& .namepart, 'spouse_first', $cust_main->spouse_first, 'First' &> @@ -31,7 +31,7 @@ % if ( $conf->exists('cust-email-high-visibility') ) {
Email address(es) diff --git a/httemplate/edit/cust_main/phones.html b/httemplate/edit/cust_main/phones.html index 9b23e0716..fa915f540 100644 --- a/httemplate/edit/cust_main/phones.html +++ b/httemplate/edit/cust_main/phones.html @@ -1,5 +1,5 @@
<% mt('Phones') |h %><% mt('Phones') |h %> @@ -10,7 +10,7 @@ VALUE="<% $cust_main->get($phone) %>" SIZE=18 > -
<% mt($phone_label{$phone}) |h %> +
<% mt($phone_label{$phone}) |h %> % } diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css index 8e493eb54..ece57a053 100644 --- a/httemplate/elements/freeside.css +++ b/httemplate/elements/freeside.css @@ -228,13 +228,13 @@ div.fstabcontainer { .fsinnerbox { /* background-color:#cccccc; */ padding:2px; - border: 1px solid #cccccc; + border: 1px solid #999999; border-radius: 2px; } .fsinnerbox th { font-weight:normal; - font-size:75%; + font-size:80%; valign: bottom; color: #666666; } diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index 357a91db7..a7803c875 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -44,7 +44,7 @@ Example: % if ( $label_prefix eq '_location' ) { - + + + + % } diff --git a/httemplate/elements/tr-select-agent.html b/httemplate/elements/tr-select-agent.html index 321bd6b32..04600fa8d 100644 --- a/httemplate/elements/tr-select-agent.html +++ b/httemplate/elements/tr-select-agent.html @@ -32,7 +32,7 @@ Example: % if ( scalar(@agents) != 1 ) { - + - + - + - + + + - - - -- cgit v1.2.1 From 506de9ec7d74b35d2bed671526a4363d022026b1 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 14:25:25 -0700 Subject: re-enable calling samechanged on page load, fallout from #21327, #21924 --- httemplate/edit/cust_main.cgi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index 069414b11..877d1e80e 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -108,7 +108,7 @@ function samechanged(what) { t1.style.visibility = 'visible' } } -//samechanged(document.getElementById('same')); +samechanged(document.getElementById('same'));
-- cgit v1.2.1 From 0f57e99bd0af253afa16e20f1141afee851b8d5a Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Sun, 14 Jun 2015 14:26:19 -0700 Subject: why wouldn't we want to hide the whole thing rather than leave a big blank gap? --- httemplate/edit/cust_main.cgi | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index 877d1e80e..d4129a37c 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -97,15 +97,13 @@ -
- <& cust_main/contacts_new.html, 'cust_main'=>$cust_main, &> %# billing info diff --git a/httemplate/edit/cust_main/billing.html b/httemplate/edit/cust_main/billing.html index d25e88712..c3e89226b 100644 --- a/httemplate/edit/cust_main/billing.html +++ b/httemplate/edit/cust_main/billing.html @@ -15,7 +15,7 @@
<% mt('Billing information') |h %> - <% &ntable("#cccccc") %> +
 
<% $opt{'locationname_label'} || emt('Location ID') %><% $opt{'locationname_label'} || emt('Location ID') %> - >* >Unit #>* >Unit # - <% mt('Latitude') |h %><% mt('Latitude') |h %> <% $style %> > - <% mt('Longitude') |h %> + <% mt('Longitude') |h %> - Census tractCensus tract - <% '(automatic)' %> + <% '(automatic)' %>
<% $opt{'label'} || emt('Agent') %><% $opt{'label'} || emt('Agent') %> > % my $agent = qsearchs('agent', { 'agentnum' => $agentnum }); <% $agent ? $agent->agent : '(all)' |h %> @@ -47,7 +47,7 @@ Example: % } else {
<% $opt{'label'} || emt('Agent') %><% $opt{'label'} || emt('Agent') %> > <& /elements/select-agent.html, 'curr_value' => $agentnum, diff --git a/httemplate/elements/tr-select-cust_class.html b/httemplate/elements/tr-select-cust_class.html index 54a11d79e..7a2321560 100644 --- a/httemplate/elements/tr-select-cust_class.html +++ b/httemplate/elements/tr-select-cust_class.html @@ -5,7 +5,7 @@ % } else {
<% $opt{'label'} || 'Customer class' %><% $opt{'label'} || 'Customer class' %> <% include( '/elements/select-cust_class.html', 'curr_value' => $classnum, diff --git a/httemplate/elements/tr-select-cust_tag.html b/httemplate/elements/tr-select-cust_tag.html index 76b1b715d..b133dcc15 100644 --- a/httemplate/elements/tr-select-cust_tag.html +++ b/httemplate/elements/tr-select-cust_tag.html @@ -1,7 +1,7 @@ % if ( ($curuser->access_right('Edit customer tags') && @part_tag) || $is_report ) {
<% $opt{'label'} || 'Tags' %><% $opt{'label'} || 'Tags' %> <% include( '/elements/select-cust_tag.html', 'curr_value' => \@curr_tagnum, diff --git a/httemplate/elements/tr-td-label.html b/httemplate/elements/tr-td-label.html index c318722dc..78690f1fb 100644 --- a/httemplate/elements/tr-td-label.html +++ b/httemplate/elements/tr-td-label.html @@ -1,6 +1,11 @@ +<%doc> + +Actually
$label
Date: Sun, 14 Jun 2015 14:05:53 -0700 Subject: better UI/label for flag to include service address on invoices, RT#29406 --- httemplate/edit/cust_main.cgi | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index 38bae4fa8..069414b11 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -80,13 +80,12 @@ &> % unless ($conf->exists('invoice-ship_address')) { #it's always on, so hide per-cust config
  + <% include('/elements/checkbox.html', 'field' => 'invoice_ship_address', 'value' => 'Y', 'curr_value' => $cust_main->invoice_ship_address, - 'postfix' => emt('included on invoices'), + 'postfix' => emt('Include service address on invoices'), ) %>
% my $curuser = $FS::CurrentUser::CurrentUser; @@ -63,7 +63,7 @@ % #escape $exempt_group for NAME etc. % my $checked = ($cust_main_exemption || $cgi->param("tax_$exempt_group")); - + % } @@ -108,7 +108,7 @@ % unless ( $conf->exists('cust-email-high-visibility')) { - % } @@ -128,7 +128,7 @@ % if ( $conf->exists('cust_main-select-prorate_day') ) { - + @@ -142,7 +142,7 @@ % ### - + - + - + - - - - + <& /elements/tr-select.html, + label => ucfirst(PL($name_singular)) . ' of type:', + field => 'payby', + options => [ keys(\%payby) ], + labels => \%payby, + multiple => 1, + size => 16 + &> @@ -137,8 +115,7 @@ Examples: 'label' => emt('Customer class'), 'field' => 'cust_classnum', 'multiple' => 1, - 'pre_options' => [ '' => emt('(none)') ], - 'all_selected' => 1, + 'pre_options' => [ 0 => emt('(none)') ], &>
   onChange="tax_changed(this)"> Tax Exempt (<% $exempt_group %> taxes)   onChange="tax_changed(this)"> Tax Exempt (<% $exempt_group %> taxes) - Exemption number exempt_number : '' ) |h %>" <% $checked ? '' : 'DISABLED' %>>
+ <% $conf->exists('cust_main-require_invoicing_list_email', $agentnum) ? $r : '' %>Email address(es) @@ -117,7 +117,7 @@ ( $cust_main->message_noemail eq 'Y' ) ? 'CHECKED' : '' - %>> <% emt('Do not send notices') %> + %>> <% emt('Do not send notices') %>
<% mt('Prorate day (1-28)') |h %> <% mt('Prorate day (1-28)') |h %>
<% mt('Charge card/e-check on this day of the month') |h %> <% mt('Charge card/e-check on this day of the month') |h %>
<% mt('Invoice terms') |h %> <% mt('Invoice terms') |h %> <& /elements/select-terms.html, 'curr_value' => $cust_main->invoice_terms, @@ -180,7 +180,7 @@ % ###
<% mt('Credit limit') |h %> <% mt('Credit limit') |h %> - +
@@ -680,7 +711,7 @@ Example: % my @rownums = sort { $a <=> $b } map /^custnum(\d+)$/, keys %$param; - @@ -702,17 +733,17 @@ Example: <& cust_main/contacts_new.html, 'cust_main'=>$cust_main, &> diff --git a/httemplate/elements/header-popup.html b/httemplate/elements/header-popup.html index 01a7ba87f..dc60ae67f 100644 --- a/httemplate/elements/header-popup.html +++ b/httemplate/elements/header-popup.html @@ -28,6 +28,7 @@ Example: + <% $head %> > diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html index fd8a03d99..55b4fca83 100644 --- a/httemplate/elements/header.html +++ b/httemplate/elements/header.html @@ -42,6 +42,7 @@ Example: ) |n %> + <% include('init_overlib.html') |n %> <% include('rs_init_object.html') |n %> -- cgit v1.2.1 From 9bee11036c3bf8e7905bbebf77a77792660186ac Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 16 Jun 2015 17:11:30 -0700 Subject: UI spring cleaning: animate company/spouse/contact hide/unhide --- httemplate/edit/cust_main/basics.html | 18 ++++++++++++------ httemplate/edit/cust_main/company.html | 9 +++++---- httemplate/edit/cust_main/name.html | 4 ++-- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/httemplate/edit/cust_main/basics.html b/httemplate/edit/cust_main/basics.html index 2ca6f65a5..e484c732d 100644 --- a/httemplate/edit/cust_main/basics.html +++ b/httemplate/edit/cust_main/basics.html @@ -25,15 +25,21 @@ function rescom_changed(what) { if ( what.checked == (what.value == 'Commercial' ) ) { - document.getElementById('company_row').style.display = ''; - document.getElementById('contacts_div').style.display = ''; - document.getElementById('spouse_row').style.display = 'none'; + $('#company_label').slideDown(); + $('#company_input').slideDown(); + $('#contacts_div').slideDown(); + $('#spouse_label').slideUp(); + $('#spouse_last_input').slideUp(); + $('#spouse_first_input').slideUp(); } else { if ( document.getElementById('company').value.length == 0 ) { - document.getElementById('company_row').style.display = 'none'; + $('#company_label').slideUp(); + $('#company_input').slideUp(); } - document.getElementById('contacts_div').style.display = 'none'; - document.getElementById('spouse_row').style.display = ''; + $('#contacts_div').slideUp(); + $('#spouse_label').slideDown(); + $('#spouse_last_input').slideDown(); + $('#spouse_first_input').slideDown(); } } diff --git a/httemplate/edit/cust_main/company.html b/httemplate/edit/cust_main/company.html index 50c4f709b..3341d8011 100644 --- a/httemplate/edit/cust_main/company.html +++ b/httemplate/edit/cust_main/company.html @@ -1,7 +1,8 @@ % my $cust_main = shift; -company ? '' : 'STYLE="display:none"' %>> - + + diff --git a/httemplate/edit/cust_main/name.html b/httemplate/edit/cust_main/name.html index bc55801cf..13bd09764 100644 --- a/httemplate/edit/cust_main/name.html +++ b/httemplate/edit/cust_main/name.html @@ -1,6 +1,6 @@ <%def .namepart> % my ($field, $value, $label, $extra) = @_; -
+
>
<% mt($label) %>
@@ -21,7 +21,7 @@ % if ( $conf->exists('cust_main-enable_spouse') ) {
- +<& /search/elements/search-html.html:header_row, + 'header' => $opt{'header'}, + 'header2' => $opt{'header2'}, + 'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}), +&> + + +% for (my $curr_group = 0; $curr_group < $group_info->{num}; $curr_group++) { +% my $group = $group_info->{groups}[$curr_group]; +% my $query = $group_info->{queries}[$curr_group]; +% my $footer = $group_info->{group_footers}[$curr_group]; +% my $label = $group_info->{group_labels}[$curr_group]; +% # run the query +% my @rows = $query->qsearch; +% #warn Dumper(\@rows); #DEBUG + + + + +<& /search/elements/search-html.html:data_rows, + rows => \@rows, + opt => \%opt, +&> + + +<& /search/elements/search-html.html:footer_row, + row => $footer, + opt => \%opt, +&> + +% } # for $curr_group + +% if ( scalar @$total_footer ) { + +<& /search/elements/search-html.html:footer_row, + row => $total_footer, + opt => \%opt, +&> + +% } +
Inv #
+ Total <% @rownums || 0 %> <% PL($opt{name_singular} || 'customer', ( @rownums || 0 ) ) %>
<% mt('Company') |h %> - company ? '' : 'STYLE="display:none"'; +
><% mt('Company') |h %>
+
> -
<% mt('Spouse\'s name') |h %> +
<% mt('Spouse\'s name') |h %>
<& .namepart, 'spouse_last', $cust_main->spouse_last, 'Last', ',' &> <& .namepart, 'spouse_first', $cust_main->spouse_first, 'First' &> -- cgit v1.2.1 From 395b48e2a32e90ae0edf2e45a31758dc78181f04 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 16 Jun 2015 20:47:57 -0700 Subject: disable virtual field access by default until it is working, RT#35178 --- FS/FS/AccessRight.pm | 2 ++ httemplate/browse/part_virtual_field.html | 2 +- httemplate/elements/menu.html | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 95e7aeab8..1609f085f 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -405,6 +405,8 @@ tie my %rights, 'Tie::IxHash', #{ rightname=>'Edit employees', global=>1, }, #{ rightname=>'Edit employee groupss', global=>1, }, + { rightname=>'Edit custom fields', global=>1 }, + { rightname=>'Configuration', global=>1 }, #most of the rest of the configuraiton is not agent-virtualized { rightname=>'Configuration download', }, #description of how it affects diff --git a/httemplate/browse/part_virtual_field.html b/httemplate/browse/part_virtual_field.html index 1d8fad4c6..5e3876285 100644 --- a/httemplate/browse/part_virtual_field.html +++ b/httemplate/browse/part_virtual_field.html @@ -30,6 +30,6 @@ <%init> die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + unless $FS::CurrentUser::CurrentUser->access_right('Edit custom fields'); diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html index 7d34d427e..4d0d97958 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -755,10 +755,10 @@ $config_misc{'Message templates'} = [ $fsurl.'browse/msg_template.html', 'Templa $config_misc{'Advertising sources'} = [ $fsurl.'browse/part_referral.html', 'Where a customer heard about your service.' ] if $curuser->access_right('Edit advertising sources') || $curuser->access_right('Edit global advertising sources'); -if ( $curuser->access_right('Configuration') ) { - $config_misc{'Custom fields'} = [ $fsurl.'browse/part_virtual_field.html', 'Locally defined fields', ]; - $config_misc{'Translation strings'} = [ $fsurl.'browse/msgcat.html', 'Translations and other customizable labels for each locale' ]; -} +$config_misc{'Custom fields'} = [ $fsurl.'browse/part_virtual_field.html', 'Locally defined fields', ] + if $curuser->access_right('Edit custom fields'); +$config_misc{'Translation strings'} = [ $fsurl.'browse/msgcat.html', 'Translations and other customizable labels for each locale' ] + if $curuser->access_right('Configuration'); $config_misc{'Inventory classes and inventory'} = [ $fsurl.'browse/inventory_class.html', 'Setup inventory classes and stock inventory' ] if $curuser->access_right('Edit inventory') || $curuser->access_right('Edit global inventory') -- cgit v1.2.1 From d54ade7b3c18794d5ab79f707fc35f0da061306a Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 16 Jun 2015 23:31:15 -0700 Subject: web access logging to DB --- FS/FS/Schema.pm | 12 +++++ FS/FS/access_user_log.pm | 136 +++++++++++++++++++++++++++++++++++++++++++++++ FS/MANIFEST | 2 + FS/t/access_user_log.t | 5 ++ htetc/handler.pl | 4 +- 5 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 FS/FS/access_user_log.pm create mode 100644 FS/t/access_user_log.t diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 2d98963a8..70d7c5afb 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -5734,6 +5734,18 @@ sub tables_hashref { 'index' => [], }, + 'access_user_log' => { + 'columns' => [ + 'lognum', 'serial', '', '', '', '', + 'usernum', 'int', '', '', '', '', + 'path', 'varchar', '', 2*$char_d, '', '', + '_date', @date_type, '', '', + ], + 'primary_key' => 'lognum', + 'unique' => [], + 'index' => [ ['usernum'], ['path'], ['_date'] ], + }, + 'sched_item' => { 'columns' => [ 'itemnum', 'serial', '', '', '', '', diff --git a/FS/FS/access_user_log.pm b/FS/FS/access_user_log.pm new file mode 100644 index 000000000..884d250d6 --- /dev/null +++ b/FS/FS/access_user_log.pm @@ -0,0 +1,136 @@ +package FS::access_user_log; +use base qw( FS::Record ); + +use strict; +#use FS::Record qw( qsearch qsearchs ); +use FS::CurrentUser; + +=head1 NAME + +FS::access_user_log - Object methods for access_user_log records + +=head1 SYNOPSIS + + use FS::access_user_log; + + $record = new FS::access_user_log \%hash; + $record = new FS::access_user_log { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::access_user_log object represents a backoffice web server log entry. + FS::access_user_log inherits from FS::Record. The following fields are +currently supported: + +=over 4 + +=item lognum + +primary key + +=item usernum + +usernum + +=item path + +path + +=item _date + +_date + + +=back + +=head1 METHODS + +=over 4 + +=item new HASHREF + +Creates a new log entry. To add the log entry to the database, see L<"insert">. + +Note that this stores the hash reference, not a distinct copy of the hash it +points to. You can ask the object for a copy with the I method. + +=cut + +sub table { 'access_user_log'; } + +=item insert_new_path PATH + +Adds a log entry for PATH for the current user and timestamp. + +=cut + +sub insert_new_path { + my( $class, $path ) = @_; + + my $self = $class->new( { + 'usernum' => $FS::CurrentUser::CurrentUser->usernum, + 'path' => $path, + '_date' => time, + } ); + + my $error = $self->insert; + die $error if $error; + +} + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +=item delete + +Delete this record from the database. + +=item replace OLD_RECORD + +Replaces the OLD_RECORD with this one in the database. If there is an error, +returns the error, otherwise returns false. + +=item check + +Checks all fields to make sure this is a valid log entry. If there is +an error, returns the error, otherwise returns false. Called by the insert +and replace methods. + +=cut + +sub check { + my $self = shift; + + my $error = + $self->ut_numbern('lognum') + || $self->ut_foreign_key('usernum', 'access_user', 'usernum') + || $self->ut_text('path') + || $self->ut_number('_date') + ; + return $error if $error; + + $self->SUPER::check; +} + +=back + +=head1 BUGS + +=head1 SEE ALSO + +L + +=cut + +1; + diff --git a/FS/MANIFEST b/FS/MANIFEST index 422f69c0e..899270bf2 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -846,3 +846,5 @@ FS/cust_pkg_reason_fee.pm t/cust_pkg_reason_fee.t FS/part_svc_link.pm t/part_svc_link.t +FS/access_user_log.pm +t/access_user_log.t diff --git a/FS/t/access_user_log.t b/FS/t/access_user_log.t new file mode 100644 index 000000000..582b32ca1 --- /dev/null +++ b/FS/t/access_user_log.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::access_user_log; +$loaded=1; +print "ok 1\n"; diff --git a/htetc/handler.pl b/htetc/handler.pl index 18108ab11..45afafbec 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -7,6 +7,7 @@ use warnings; use FS::Mason qw( mason_interps ); use FS::Trace; use FS::Conf; +use FS::access_user_log; $FS::Conf::conf_cache_enabled = 1; # enable FS::Conf caching for performance @@ -107,7 +108,6 @@ sub handler return -1 if defined( $r->content_type ) && $r->content_type !~ m!(^text/|\bxml\b)!io; - local $SIG{__WARN__}; local $SIG{__DIE__}; @@ -139,6 +139,8 @@ sub handler } + FS::access_user_log->insert_new_path( $r->uri ); + FS::Trace->log('handling request'); my %session; my $status; -- cgit v1.2.1 From 1b5b8ba6c06143c639efeb6095a51f9b2ae7c80b Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 17 Jun 2015 12:02:25 -0700 Subject: UI spring cleaning: process card/chek payments --- httemplate/misc/payment.cgi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/httemplate/misc/payment.cgi b/httemplate/misc/payment.cgi index 4860aed83..f4f0b56dd 100644 --- a/httemplate/misc/payment.cgi +++ b/httemplate/misc/payment.cgi @@ -1,5 +1,7 @@ <& /elements/header.html, mt("Process [_1] payment",$type{$payby}) &> <& /elements/small_custview.html, $cust_main, '', '', popurl(2) . "view/cust_main.cgi" &> +
+
@@ -8,7 +10,7 @@ <& /elements/init_overlib.html &> -<% ntable('#cccccc') %> + <& /elements/tr-amount_fee.html, 'amount' => $amount, -- cgit v1.2.1 From 8dd53f292ccdc62a80b6da8110a8f0cb4cffae05 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 17 Jun 2015 12:03:00 -0700 Subject: UI spring cleaning: pkg change popup size --- httemplate/view/cust_main/packages/package.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/view/cust_main/packages/package.html b/httemplate/view/cust_main/packages/package.html index 3036f2e84..4b56e6fc4 100644 --- a/httemplate/view/cust_main/packages/package.html +++ b/httemplate/view/cust_main/packages/package.html @@ -357,7 +357,7 @@ sub pkg_change_link { 'actionlabel' => emt('Change'), 'cust_pkg' => $cust_pkg, 'width' => 960, - 'height' => 490, + 'height' => 538, ); } -- cgit v1.2.1 From aaeaf74ce3d3ceb731633a054d56a7f916ff2721 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 17 Jun 2015 14:39:29 -0700 Subject: fix new page logging --- FS/FS/Mason.pm | 2 ++ FS/FS/Mason/Request.pm | 3 +++ htetc/handler.pl | 3 --- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index 78779d78a..6163197fa 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -402,6 +402,7 @@ if ( -e $addl_handler_use_file ) { use FS::quotation_pkg_tax; use FS::cust_pkg_reason_fee; use FS::part_svc_link; + use FS::access_user_log; # Sammath Naur if ( $FS::Mason::addl_handler_use ) { @@ -460,6 +461,7 @@ if ( -e $addl_handler_use_file ) { die $@ if $@; } + no warnings 'redefine'; *CGI::redirect = sub { my $self = shift; my $cookie = ''; diff --git a/FS/FS/Mason/Request.pm b/FS/FS/Mason/Request.pm index 5d6fc4cd4..62bf670b9 100644 --- a/FS/FS/Mason/Request.pm +++ b/FS/FS/Mason/Request.pm @@ -5,6 +5,7 @@ use warnings; use vars qw( $FSURL $QUERY_STRING ); use base 'HTML::Mason::Request'; use FS::Trace; +use FS::access_user_log; $FSURL = 'http://Set/FS_Mason_Request_FSURL/in_standalone_mode/'; $QUERY_STRING = ''; @@ -119,6 +120,8 @@ sub freeside_setup { } + FS::access_user_log->insert_new_path( $filename ); + FS::Trace->log(' done'); } diff --git a/htetc/handler.pl b/htetc/handler.pl index 45afafbec..416ea69c4 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -7,7 +7,6 @@ use warnings; use FS::Mason qw( mason_interps ); use FS::Trace; use FS::Conf; -use FS::access_user_log; $FS::Conf::conf_cache_enabled = 1; # enable FS::Conf caching for performance @@ -139,8 +138,6 @@ sub handler } - FS::access_user_log->insert_new_path( $r->uri ); - FS::Trace->log('handling request'); my %session; my $status; -- cgit v1.2.1 From c6ab4d567c978cbe616c8cb5201c61bde212b3a0 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 17 Jun 2015 17:44:23 -0700 Subject: fix interaction of agent choice, agent-ship_address, and "same" checkbox, #21327 and #27545 --- httemplate/edit/cust_main/basics.html | 20 ++++++++++++++++++-- httemplate/elements/location.html | 5 +++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/httemplate/edit/cust_main/basics.html b/httemplate/edit/cust_main/basics.html index e484c732d..e16aafafc 100644 --- a/httemplate/edit/cust_main/basics.html +++ b/httemplate/edit/cust_main/basics.html @@ -56,6 +56,7 @@ % # unlock/lock service location var f = what.form; + var was_same = f['same'].checked; if ( ship_locked_agents[agentnum] ) { % # For this agent, the service location (except address2) % # should be locked to the agent's location. @@ -72,16 +73,25 @@ % # disabled, then they contain some agent's address, which is % # no longer meaningful. So set them back to the customer's % # current location. + var is_same = true; for(var i=0; i rescom_changed(document.getElementById('residential_commercial_Residential')); agent_changed(document.getElementById('agentnum')); - samechanged(document.getElementById('same')); + + if ( $('#same').prop('checked') ) { + $('#div_ship_location').hide(); + } else { + $('#div_ship_location').show(); + } + diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index a7803c875..90f20265a 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -262,8 +262,9 @@ Example: %# For address standardization: %# keep a clean copy of the address so we know if we need %# to re-standardize -% foreach (qw(address1 city state country zip latitude -% longitude censustract district addr_clean) ) { +% foreach (qw(locationname address1 city state country zip latitude +% longitude censustract district addr_clean +% ) ) { <& hidden.html, field => 'old_'.$pre.$_, value => $object->get($_) &> % } %# Placeholders -- cgit v1.2.1 From d928d26f1d623720d2f0c854a9d0b38210d66d2d Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Thu, 18 Jun 2015 00:50:23 -0700 Subject: UI spring cleaning: prorate day dropdown --- httemplate/edit/cust_main/billing.html | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/httemplate/edit/cust_main/billing.html b/httemplate/edit/cust_main/billing.html index c3e89226b..6f716c1be 100644 --- a/httemplate/edit/cust_main/billing.html +++ b/httemplate/edit/cust_main/billing.html @@ -128,11 +128,25 @@ % if ( $conf->exists('cust_main-select-prorate_day') ) { - + +% sub prorate_day_options { +% my $curr_value = shift; +% my $ret = ''; +% for my $prorate_day ( 1 .. 28 ) { +% my $sel = ''; +% $sel = "SELECTED='SELECTED'" if $curr_value == $prorate_day; +% $ret .= ""; +% } +% $ret; +% } + % } else { % } -- cgit v1.2.1 From 09f899143460b0e99388ef007ff262f9a5e80203 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 17 Jun 2015 19:06:38 -0700 Subject: make "credit lineitems" feature work with new tax workflow, #18676, #25718, #31639 --- FS/FS/cust_credit.pm | 291 +++++++++++---------- .../xmlhttp-cust_bill_pkg-calculate_taxes.html | 116 ++------ 2 files changed, 174 insertions(+), 233 deletions(-) diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index f63d86f99..01ee89dc0 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -705,6 +705,102 @@ sub credited_sql { unapplied_sql(); } +=item calculate_tax_adjustment PARAMS + +Calculate the amount of tax that needs to be credited as part of a lineitem +credit. + +PARAMS must include: + +- billpkgnums: arrayref identifying the line items to credit +- setuprecurs: arrayref of 'setup' or 'recur', indicating which part of + the lineitem charge is being credited +- amounts: arrayref of the amounts to credit on each line item +- custnum: the customer all of these invoices belong to, for error checking + +Returns a hash containing: +- subtotal: the total non-tax amount to be credited (the sum of the 'amounts') +- taxtotal: the total tax amount to be credited +- taxlines: an arrayref of hashrefs for each tax line to be credited, each with: + - table: "cust_bill_pkg_tax_location" or "cust_bill_pkg_tax_rate_location" + - num: the key within that table + - credit: the credit amount to apply to that line + +=cut + +sub calculate_tax_adjustment { + my ($class, %arg) = @_; + + my $error; + my @taxlines; + my $subtotal = 0; + my $taxtotal = 0; + + my (%cust_bill_pkg, %cust_bill); + + for (my $i = 0; ; $i++) { + my $billpkgnum = $arg{billpkgnums}[$i] + or last; + my $setuprecur = $arg{setuprecurs}[$i]; + my $amount = $arg{amounts}[$i]; + next if $amount == 0; + $subtotal += $amount; + my $cust_bill_pkg = $cust_bill_pkg{$billpkgnum} + ||= FS::cust_bill_pkg->by_key($billpkgnum) + or die "lineitem #$billpkgnum not found\n"; + + my $invnum = $cust_bill_pkg->invnum; + $cust_bill{ $invnum } ||= FS::cust_bill->by_key($invnum); + $cust_bill{ $invnum}->custnum == $arg{custnum} + or die "lineitem #$billpkgnum not found\n"; + + # calculate credit ratio. + # (First deduct any existing credits applied to this line item, to avoid + # rounding errors.) + my $charged = $cust_bill_pkg->get($setuprecur); + my $previously_credited = + $cust_bill_pkg->credited( '', '', setuprecur => $setuprecur) || 0; + + $charged -= $previously_credited; + if ($charged < $amount) { + $error = "invoice #$invnum: tried to credit $amount, but only $charged was charged"; + last; + } + my $ratio = $amount / $charged; + + # gather taxes that apply to the selected item + foreach my $table ( + qw(cust_bill_pkg_tax_location cust_bill_pkg_tax_rate_location) + ) { + foreach my $tax_link ( + qsearch($table, { taxable_billpkgnum => $billpkgnum }) + ) { + my $tax_amount = $tax_link->amount; + # deduct existing credits applied to the tax, for the same reason as + # above + foreach ($tax_link->cust_credit_bill_pkg) { + $tax_amount -= $_->amount; + } + my $tax_credit = sprintf('%.2f', $tax_amount * $ratio); + my $pkey = $tax_link->get($tax_link->primary_key); + push @taxlines, { + table => $table, + num => $pkey, + credit => $tax_credit, + }; + $taxtotal += $tax_credit; + + } #foreach cust_bill_pkg_tax_(rate_)?location + } + } # foreach $billpkgnum + + return ( + subtotal => sprintf('%.2f', $subtotal), + taxtotal => sprintf('%.2f', $taxtotal), + taxlines => \@taxlines, + ); +} + =item credit_lineitems Example: @@ -726,6 +822,8 @@ Example: =cut +use Data::Dumper; #XXX + #maybe i should just be an insert with extra args instead of a class method sub credit_lineitems { my( $class, %arg ) = @_; @@ -784,8 +882,12 @@ sub credit_lineitems { my %cust_credit_bill = (); my %cust_bill_pkg = (); my %cust_credit_bill_pkg = (); - my %taxlisthash = (); my %unapplied_payments = (); #invoice numbers, and then billpaynums + + # determine the tax adjustments + my %tax_adjust = $class->calculate_tax_adjustment(%arg); + + warn Dumper \%arg; foreach my $billpkgnum ( @{$arg{billpkgnums}} ) { my $setuprecur = shift @{$arg{setuprecurs}}; my $amount = shift @{$arg{amounts}}; @@ -799,22 +901,21 @@ sub credit_lineitems { my $invnum = $cust_bill_pkg->invnum; - if ( $setuprecur eq 'setup' ) { - $cust_bill_pkg->setup($amount); - $cust_bill_pkg->recur(0); - $cust_bill_pkg->unitrecur(0); - $cust_bill_pkg->type(''); - } else { - $setuprecur = 'recur'; #in case its a usage classnum? - $cust_bill_pkg->recur($amount); - $cust_bill_pkg->setup(0); - $cust_bill_pkg->unitsetup(0); - } - push @{$cust_bill_pkg{$invnum}}, $cust_bill_pkg; - #unapply any payments applied to this line item (other credits too?) - foreach my $cust_bill_pay_pkg ( $cust_bill_pkg->cust_bill_pay_pkg($setuprecur) ) { + $cust_credit_bill{$invnum} += $amount; + push @{ $cust_credit_bill_pkg{$invnum} }, + new FS::cust_credit_bill_pkg { + 'billpkgnum' => $billpkgnum, + 'amount' => sprintf('%.2f',$amount), + 'setuprecur' => $setuprecur, + 'sdate' => $cust_bill_pkg->sdate, + 'edate' => $cust_bill_pkg->edate, + }; + # unapply payments (but not other credits) from this line item + foreach my $cust_bill_pay_pkg ( + $cust_bill_pkg->cust_bill_pay_pkg($setuprecur) + ) { $error = $cust_bill_pay_pkg->delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -823,24 +924,49 @@ sub credit_lineitems { $unapplied_payments{$invnum}{$cust_bill_pay_pkg->billpaynum} += $cust_bill_pay_pkg->amount; } + } + + # do the same for taxes + foreach my $tax_credit ( @{ $tax_adjust{taxlines} } ) { + my $table = $tax_credit->{table}; + my $tax_link = "FS::$table"->by_key( $tax_credit->{num} ) + or die "tried to credit $table #$tax_credit->{num} but it doesn't exist"; + + my $billpkgnum = $tax_link->billpkgnum; + my $cust_bill_pkg = qsearchs({ + 'table' => 'cust_bill_pkg', + 'hashref' => { 'billpkgnum' => $billpkgnum }, + 'addl_from' => 'LEFT JOIN cust_bill USING (invnum)', + 'extra_sql' => 'AND custnum = '. $cust_main->custnum, + }) or die "unknown billpkgnum $billpkgnum"; + + my $invnum = $cust_bill_pkg->invnum; + push @{$cust_bill_pkg{$invnum}}, $cust_bill_pkg; - #$subtotal += $amount; + my $amount = $tax_credit->{credit}; $cust_credit_bill{$invnum} += $amount; + + # create a credit application record to the tax line item, earmarked + # to the specific cust_bill_pkg_Xlocation push @{ $cust_credit_bill_pkg{$invnum} }, new FS::cust_credit_bill_pkg { - 'billpkgnum' => $cust_bill_pkg->billpkgnum, - 'amount' => sprintf('%.2f',$amount), - 'setuprecur' => $setuprecur, - 'sdate' => $cust_bill_pkg->sdate, - 'edate' => $cust_bill_pkg->edate, + 'billpkgnum' => $billpkgnum, + 'amount' => sprintf('%.2f', $amount), + 'setuprecur' => 'setup', + $tax_link->primary_key, $tax_credit->{num} }; - - # recalculate taxes with new amounts - $taxlisthash{$invnum} ||= {}; - if ( $cust_bill_pkg->pkgnum or $cust_bill_pkg->feepart ) { - $cust_main->_handle_taxes( $taxlisthash{$invnum}, $cust_bill_pkg ); - } # otherwise the item itself is a tax, and assume the caller knows - # what they're doing + # unapply any payments from the tax + foreach my $cust_bill_pay_pkg ( + $cust_bill_pkg->cust_bill_pay_pkg('setup') + ) { + $error = $cust_bill_pay_pkg->delete; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "Error unapplying payment: $error"; + } + $unapplied_payments{$invnum}{$cust_bill_pay_pkg->billpaynum} + += $cust_bill_pay_pkg->amount; + } } ### @@ -852,115 +978,6 @@ sub credit_lineitems { foreach my $invnum ( sort { $a <=> $b } keys %cust_credit_bill ) { - local $@; - my $arrayref_or_error = eval { $cust_main->calculate_taxes( - $cust_bill_pkg{$invnum}, # list of taxable items that we're crediting - $taxlisthash{$invnum}, # list of tax-item bindings - $cust_bill_pkg{$invnum}->[0]->cust_bill->_date, # invoice time - ) }; - - if ( $@ ) { - $dbh->rollback if $oldAutoCommit; - return "Error calculating taxes: $@"; - } - - my %tax_links; # {tax billpkgnum}{nontax billpkgnum} - - #taxes - foreach my $cust_bill_pkg ( @{ $cust_bill_pkg{$invnum} } ) { - my $billpkgnum = $cust_bill_pkg->billpkgnum; - my %hash = ( 'taxable_billpkgnum' => $billpkgnum ); - # gather up existing tax links (we need their billpkgtaxlocationnums) - my @tax_links = qsearch('cust_bill_pkg_tax_location', \%hash), - qsearch('cust_bill_pkg_tax_rate_location', \%hash); - - foreach ( @tax_links ) { - $tax_links{$_->billpkgnum} ||= {}; - $tax_links{$_->billpkgnum}{$_->taxable_billpkgnum} = $_; - } - } - - foreach my $taxline ( @$arrayref_or_error ) { - - my $amount = $taxline->setup; - - # find equivalent tax line item on the existing invoice - my $tax_item = qsearchs('cust_bill_pkg', { - 'invnum' => $invnum, - 'pkgnum' => 0, - 'itemdesc' => $taxline->desc, - }); - if (!$tax_item) { - # or should we just exit if this happens? - $cust_credit->set('amount', - sprintf('%.2f', $cust_credit->get('amount') - $amount) - ); - my $error = $cust_credit->replace; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "error correcting credit for missing tax line: $error"; - } - } - - # but in the new era, we no longer have the problem of uniquely - # identifying the tax_Xlocation record. The billpkgnums of the - # tax and the taxed item are known. - foreach my $new_loc - ( @{ $taxline->get('cust_bill_pkg_tax_location') }, - @{ $taxline->get('cust_bill_pkg_tax_rate_location') } ) - { - # the existing tax_Xlocation object - my $old_loc = - $tax_links{$tax_item->billpkgnum}{$new_loc->taxable_cust_bill_pkg->billpkgnum}; - - next if !$old_loc; # apply the leftover amount nonspecifically - - #support partial credits: use $amount if smaller - # (so just distribute to the first location? perhaps should - # do so evenly...) - my $loc_amount = min( $amount, $new_loc->amount); - - $amount -= $loc_amount; - - $cust_credit_bill{$invnum} += $loc_amount; - push @{ $cust_credit_bill_pkg{$invnum} }, - new FS::cust_credit_bill_pkg { - 'billpkgnum' => $tax_item->billpkgnum, - 'amount' => $loc_amount, - 'setuprecur' => 'setup', - 'billpkgtaxlocationnum' => $old_loc->billpkgtaxlocationnum, - 'billpkgtaxratelocationnum' => $old_loc->billpkgtaxratelocationnum, - }; - - } #foreach my $new_loc - - # we still have to deal with the possibility that the tax links don't - # cover the whole amount of tax because of an incomplete upgrade... - if ($amount > 0.005) { - $cust_credit_bill{$invnum} += $amount; - push @{ $cust_credit_bill_pkg{$invnum} }, - new FS::cust_credit_bill_pkg { - 'billpkgnum' => $tax_item->billpkgnum, - 'amount' => sprintf('%.2f', $amount), - 'setuprecur' => 'setup', - }; - - } # if $amount > 0 - - #unapply any payments applied to the tax - foreach my $cust_bill_pay_pkg - ( $tax_item->cust_bill_pay_pkg('setup') ) - { - $error = $cust_bill_pay_pkg->delete; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error unapplying payment: $error"; - } - $unapplied_payments{$invnum}{$cust_bill_pay_pkg->billpaynum} - += $cust_bill_pay_pkg->amount; - } - } #foreach $taxline - # if we unapplied any payments from line items, also unapply that # amount from the invoice foreach my $billpaynum (keys %{$unapplied_payments{$invnum}}) { diff --git a/httemplate/misc/xmlhttp-cust_bill_pkg-calculate_taxes.html b/httemplate/misc/xmlhttp-cust_bill_pkg-calculate_taxes.html index 4558682bd..8f417765b 100644 --- a/httemplate/misc/xmlhttp-cust_bill_pkg-calculate_taxes.html +++ b/httemplate/misc/xmlhttp-cust_bill_pkg-calculate_taxes.html @@ -4,7 +4,7 @@ my $curuser = $FS::CurrentUser::CurrentUser; die "access denied" unless $curuser->access_right('Credit line items'); -my $DEBUG = 0; +my $DEBUG = 1; my $conf = new FS::Conf; @@ -12,107 +12,31 @@ my $sub = $cgi->param('sub'); my $return = {}; -if ( $sub eq 'calculate_taxes' ) { +die "unknown sub '$sub'" if $sub ne 'calculate_taxes'; - { +my %arg = $cgi->param('arg'); +warn join('', map "$_: $arg{$_}\n", keys %arg ) + if $DEBUG; - my %arg = $cgi->param('arg'); - $return = \%arg; - warn join('', map "$_: $arg{$_}\n", keys %arg ) - if $DEBUG; +#some false laziness w/cust_credit::credit_lineitems - #some false laziness w/cust_credit::credit_lineitems +my $cust_main = qsearchs({ + 'table' => 'cust_main', + 'hashref' => { 'custnum' => $arg{custnum} }, + 'extra_sql' => ' AND '. $curuser->agentnums_sql, +}) or die 'unknown customer'; - my $cust_main = qsearchs({ - 'table' => 'cust_main', - 'hashref' => { 'custnum' => $arg{custnum} }, - 'extra_sql' => ' AND '. $curuser->agentnums_sql, - }) or die 'unknown customer'; +$arg{billpkgnums} = [ split(',', $arg{billpkgnums}) ]; +$arg{setuprecurs} = [ split(',', $arg{setuprecurs}) ]; +$arg{amounts} = [ split(',', $arg{amounts}) ]; - my @billpkgnums = split(',', $arg{billpkgnums}); - my @setuprecurs = split(',', $arg{setuprecurs}); - my @amounts = split(',', $arg{amounts}); +my %results = FS::cust_credit->calculate_tax_adjustment(%arg); - my @cust_bill_pkg = (); - my $taxlisthash = {}; - while ( @billpkgnums ) { - my $billpkgnum = shift @billpkgnums; - my $setuprecur = shift @setuprecurs; - my $amount = shift @amounts; +$return = { + %arg, + %results +}; - my $cust_bill_pkg = qsearchs({ - 'table' => 'cust_bill_pkg', - 'hashref' => { 'billpkgnum' => $billpkgnum }, - 'addl_from' => 'LEFT JOIN cust_bill USING (invnum)', - 'extra_sql' => 'AND custnum = '. $cust_main->custnum, - }) or die "unknown billpkgnum $billpkgnum"; - - #shouldn't be passed# next if $cust_bill_pkg->pkgnum == 0; - - if ( $setuprecur eq 'setup' ) { - $cust_bill_pkg->setup($amount); - $cust_bill_pkg->recur(0); - $cust_bill_pkg->unitrecur(0); - $cust_bill_pkg->type(''); - } else { - $cust_bill_pkg->recur($amount); - $cust_bill_pkg->setup(0); - $cust_bill_pkg->unitsetup(0); - } - - push @cust_bill_pkg, $cust_bill_pkg; - - $cust_main->_handle_taxes( $taxlisthash, $cust_bill_pkg ); - } - - if ( @cust_bill_pkg ) { - - my $listref_or_error = - $cust_main->calculate_taxes( \@cust_bill_pkg, $taxlisthash, $cust_bill_pkg[0]->cust_bill->_date ); - - unless ( ref( $listref_or_error ) ) { - $return->{error} = $listref_or_error; - last; - } - - my @taxlines = (); - my $taxtotal = 0; - $return->{taxlines} = \@taxlines; - foreach my $taxline ( @$listref_or_error ) { - my $amount = $taxline->setup; - my $desc = $taxline->desc; - foreach my $location ( - @{$taxline->get('cust_bill_pkg_tax_location')}, - @{$taxline->get('cust_bill_pkg_tax_rate_location')} ) - { - my $taxlocnum = $location->locationnum || ''; - my $taxratelocnum = $location->taxratelocationnum || ''; - $location->cust_bill_pkg_desc($taxline->desc); #ugh @ that kludge - $taxtotal += $location->amount; - push @taxlines, - #[ $location->desc, $taxline->setup, $taxlocnum, $taxratelocnum ]; - [ $location->desc, $location->amount, $taxlocnum, $taxratelocnum ]; - $amount -= $location->amount; - } - if ($amount > 0) { - $taxtotal += $amount; - push @taxlines, - [ $taxline->itemdesc. ' (default)', sprintf('%.2f', $amount), '', '' ]; - } - } - - $return->{taxlines} = \@taxlines; - $return->{taxtotal} = sprintf('%.2f', $taxtotal); - - } else { - - $return->{taxlines} = []; - $return->{taxtotal} = '0.00'; - - } - - } - -} +warn Dumper $return if $DEBUG; -- cgit v1.2.1 From e653b204c7da74200345c1718ffda973ec8c6cee Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 18 Jun 2015 14:50:57 -0700 Subject: debug --- FS/FS/cust_credit.pm | 3 --- 1 file changed, 3 deletions(-) diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index 01ee89dc0..544a0e83d 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -822,8 +822,6 @@ Example: =cut -use Data::Dumper; #XXX - #maybe i should just be an insert with extra args instead of a class method sub credit_lineitems { my( $class, %arg ) = @_; @@ -887,7 +885,6 @@ sub credit_lineitems { # determine the tax adjustments my %tax_adjust = $class->calculate_tax_adjustment(%arg); - warn Dumper \%arg; foreach my $billpkgnum ( @{$arg{billpkgnums}} ) { my $setuprecur = shift @{$arg{setuprecurs}}; my $amount = shift @{$arg{amounts}}; -- cgit v1.2.1 From 9ccb619364f1a04a98d914cd79bc7a75a9e196cb Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 18 Jun 2015 17:15:50 -0700 Subject: silence many spurious warnings from part_pkg options --- FS/FS/part_pkg.pm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 4407ec6dd..0e9ee05fb 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -1392,6 +1392,11 @@ sub option { my %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); } split("\n", $self->get('plandata') ); return $plandata{$opt} if exists $plandata{$opt}; + + # check whether the option is defined in plan info (if so, don't warn) + if (exists $plans{ $self->plan }->{fields}->{$opt}) { + return ''; + } cluck "WARNING: (pkgpart ". $self->pkgpart. ") Package def option $opt ". "not found in options or plandata!\n" unless $ornull; -- cgit v1.2.1 From ed4675557ac1b7012bc1c1607a73070f052bede5 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 18 Jun 2015 17:15:54 -0700 Subject: apply global default rates to calls outside every region, #35199, from #30633 --- FS/FS/rate.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FS/FS/rate.pm b/FS/FS/rate.pm index a3826bff2..8ee9a83be 100644 --- a/FS/FS/rate.pm +++ b/FS/FS/rate.pm @@ -347,7 +347,7 @@ sub dest_detail { }); } - return '' unless $rate_prefix; + return $self->default_detail unless $rate_prefix; $regionnum = $rate_prefix->regionnum; -- cgit v1.2.1 From d1a46f2831b8f74d4d323be20e70e36ad9d2aff8 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 18 Jun 2015 17:16:33 -0700 Subject: UI cleanup: hide new taxproduct selector when taxproducts are not in use --- httemplate/edit/part_pkg.cgi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index bfa5d50ea..a90a62508 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -200,7 +200,6 @@ include_opt_callback => sub { pkgpart => $_[0]->pkgpart }, }, - { type => 'tablebreak-tr-title', value => 'Promotions', #better name? @@ -1219,6 +1218,11 @@ my $field_callback = sub { }; $fieldref->{layer_fields} = \%taxproduct_fields; $fieldref->{layer_values_callback} = $taxproduct_values; + } elsif ($field eq 'taxproductnum') { # part_pkg-taxproduct, new style + if ( !$taxproducts ) { + # then make the widget go away + $fieldref->{type} = 'hidden'; + } } }; -- cgit v1.2.1 From 11ca9a51a76837f1821b2b0e8972c78bf221c6a1 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Mon, 22 Jun 2015 13:14:33 -0700 Subject: invoice watermarks, #24665 --- FS/FS/Conf.pm | 20 ++++++++++++++++++++ FS/FS/Schema.pm | 2 ++ FS/FS/Template_Mixin.pm | 39 ++++++++++++++++++++------------------ FS/FS/invoice_conf.pm | 6 ++++++ conf/invoice_html | 40 +++++++++++++++++++++++++++++++++++---- conf/invoice_latex | 13 +++++++++++++ httemplate/edit/invoice_conf.html | 5 +++++ 7 files changed, 103 insertions(+), 22 deletions(-) diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 9255284a3..191a712a8 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -605,10 +605,12 @@ invoice_latexfooter invoice_latexsmallfooter invoice_latexnotes invoice_latexcoupon +invoice_latexwatermark invoice_html invoice_htmlreturnaddress invoice_htmlfooter invoice_htmlnotes +invoice_htmlwatermark logo.png logo.eps ); @@ -1303,6 +1305,15 @@ sub reason_type_options { 'per_locale' => 1, }, + { + 'key' => 'invoicehtmlwatermark', + 'section' => 'invoicing', + 'description' => 'Watermark for HTML invoices. Appears in a semitransparent positioned DIV overlaid on the main invoice container.', + 'type' => 'textarea', + 'per_agent' => 1, + 'per_locale' => 1, + }, + { 'key' => 'invoice_latex', 'section' => 'invoicing', @@ -1490,6 +1501,15 @@ and customer address. Include units.', 'per_locale' => 1, }, + { + 'key' => 'invoicelatexwatermark', + 'section' => 'invoicing', + 'description' => 'Watermark for LaTeX invoices. See "texdoc background" for information on what this can contain. The content itself should be enclosed in braces, optionally followed by a comma and any formatting options.', + 'type' => 'textarea', + 'per_agent' => 1, + 'per_locale' => 1, + }, + { 'key' => 'invoice_email_pdf', 'section' => 'invoicing', diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 70d7c5afb..0bdc99539 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -6914,6 +6914,8 @@ sub tables_hashref { 'latexsmallfooter', 'text', 'NULL', '', '', '', 'latexreturnaddress', 'text', 'NULL', '', '', '', 'with_latexcoupon', 'char', 'NULL', '1', '', '', + 'htmlwatermark', 'text', 'NULL', '', '', '', + 'latexwatermark', 'text', 'NULL', '', '', '', 'lpr', 'varchar', 'NULL', $char_d, '', '', ], 'primary_key' => 'confnum', diff --git a/FS/FS/Template_Mixin.pm b/FS/FS/Template_Mixin.pm index 32e300776..37dcf2a5e 100644 --- a/FS/FS/Template_Mixin.pm +++ b/FS/FS/Template_Mixin.pm @@ -817,35 +817,36 @@ sub print_generic { my @include = ( [ $tc, 'notes' ], [ 'invoice_', 'footer' ], [ 'invoice_', 'smallfooter', ], + [ 'invoice_', 'watermark' ], ); push @include, [ $tc, 'coupon', ] unless $params{'no_coupon'}; foreach my $i (@include) { + # load the configuration for this sub-template + my($base, $include) = @$i; my $inc_file = $conf->key_orbase("$base$format$include", $template); - my @inc_src; - - if ( $conf->exists($inc_file, $agentnum) - && length( $conf->config($inc_file, $agentnum) ) ) { - - @inc_src = $conf->config($inc_file, $agentnum); - - } else { - - $inc_file = $conf->key_orbase("${base}latex$include", $template); - - my $convert_map = $convert_maps{$format}{$include}; - @inc_src = map { s/\[\@--/$delimiters{$format}[0]/g; - s/--\@\]/$delimiters{$format}[1]/g; - $_; - } - &$convert_map( $conf->config($inc_file, $agentnum) ); + my @inc_src = $conf->config($inc_file, $agentnum); + if (!@inc_src) { + my $converter = $convert_maps{$format}{$include}; + if ( $converter ) { + # then attempt to convert LaTeX to the requested format + $inc_file = $conf->key_orbase($base.'latex'.$include, $template); + @inc_src = &$converter( $conf->config($inc_file, $agentnum) ); + foreach (@inc_src) { + # this isn't included in the convert_maps + my ($open, $close) = @{ $delimiters{$format} }; + s/\[\@--/$open/g; + s/--\@\]/$close/g; + } + } + } # else @inc_src is empty and that's fine - } + # make a Text::Template out of it my $inc_tt = new Text::Template ( TYPE => 'ARRAY', @@ -859,6 +860,8 @@ sub print_generic { die $error; } + # fill in variables + $invoice_data{$include} = $inc_tt->fill_in( HASH => \%invoice_data ); $invoice_data{$include} =~ s/\n+$// diff --git a/FS/FS/invoice_conf.pm b/FS/FS/invoice_conf.pm index da448b816..d88c89a7c 100644 --- a/FS/FS/invoice_conf.pm +++ b/FS/FS/invoice_conf.pm @@ -49,6 +49,8 @@ and supports the FS::Conf interface. The following fields are supported: =item htmlreturnaddress - return address (HTML) +=item htmlwatermark - watermark to show in background (HTML) + =item latexnotes - "notes" section (LaTeX) =item latexfooter - footer (LaTeX) @@ -59,6 +61,8 @@ and supports the FS::Conf interface. The following fields are supported: =item latexsmallfooter - footer for pages after the first (LaTeX) +=item latexwatermark - watermark to show in background (LaTeX) + =item with_latexcoupon - 'Y' to print the payment coupon (LaTeX) =item lpr - command to print the invoice (passed on stdin as a PDF) @@ -185,11 +189,13 @@ sub check { || $self->ut_anything('htmlfooter') || $self->ut_anything('htmlsummary') || $self->ut_anything('htmlreturnaddress') + || $self->ut_anything('htmlwatermark') || $self->ut_anything('latexnotes') || $self->ut_anything('latexfooter') || $self->ut_anything('latexsummary') || $self->ut_anything('latexsmallfooter') || $self->ut_anything('latexreturnaddress') + || $self->ut_anything('latexwatermark') # flags || $self->ut_flag('with_latexcoupon') ; diff --git a/conf/invoice_html b/conf/invoice_html index 06ee77588..7cadd7c37 100644 --- a/conf/invoice_html +++ b/conf/invoice_html @@ -1,6 +1,18 @@ -
<% mt('Prorate day (1-28)') |h %> + <% mt('Prorate day') |h %> - +
!; + $html .= qq!\n!; $html .= "\n'; } $html .= "\n
+
+ +
+ <%= $watermark %> +
@@ -279,4 +311,4 @@

><%= $footer %> -

+
diff --git a/conf/invoice_latex b/conf/invoice_latex index 40ec70313..c7c696b5d 100644 --- a/conf/invoice_latex +++ b/conf/invoice_latex @@ -23,6 +23,19 @@ \usepackage{graphicx} % required for logo graphic \usepackage[utf8]{inputenc} % multilanguage support \usepackage[T1]{fontenc} +[@-- if ( length($watermark) ) { + $OUT .= ' +\usepackage{background} +\backgroundsetup{ + placement=center, + opacity=0.25, + color=black, + angle=0, + contents=' . $watermark . ' +}'; +} +''; +--@] \addtolength{\voffset}{-0.0cm} % top margin to top of header \addtolength{\hoffset}{-0.6cm} % left margin on page diff --git a/httemplate/edit/invoice_conf.html b/httemplate/edit/invoice_conf.html index 7122653f2..861114b1c 100644 --- a/httemplate/edit/invoice_conf.html +++ b/httemplate/edit/invoice_conf.html @@ -49,6 +49,7 @@ my @fields = ( 'Footer', 'Summary header', 'Return address', + 'Watermark', 'Small footer', 'Enable coupon', ), @@ -59,6 +60,7 @@ my @fields = ( { field => 'latexfooter', %textarea }, { field => 'latexsummary', %textarea }, { field => 'latexreturnaddress', %textarea }, + { field => 'latexwatermark', %textarea }, { field => 'latexsmallfooter', %textarea }, { field => 'with_latexcoupon', type => 'checkbox', value => 'Y' }, @@ -68,6 +70,7 @@ my @fields = ( { field => 'htmlfooter', %textarea }, { field => 'htmlsummary', %textarea }, { field => 'htmlreturnaddress', %textarea }, + { field => 'htmlwatermark', %textarea }, # logo { type => 'columnend' }, @@ -87,12 +90,14 @@ my %labels = ( latexfooter latexsummary latexreturnaddress + latexwatermark with_latexcoupon latexsmallfooter htmlnotes htmlfooter htmlsummary htmlreturnaddress + htmlwatermark ) ), ); -- cgit v1.2.1 From c6ef5a3a043c4fafa2f8d21028609f1b9b70eb47 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Mon, 22 Jun 2015 18:34:27 -0500 Subject: RT#34078: Payment History Report / Statement --- FS/FS/ClientAPI/MyAccount.pm | 70 +--------- FS/FS/Conf.pm | 7 + FS/FS/cust_main.pm | 198 +++++++++++++++++++++++++++ FS/FS/cust_main_Mixin.pm | 11 +- FS/FS/msg_template.pm | 37 ++++- FS/FS/msg_template/InitialData.pm | 9 ++ httemplate/edit/msg_template.html | 3 +- httemplate/misc/email-customers-history.html | 51 +++++++ httemplate/misc/email-customers.html | 53 +++++-- httemplate/view/cust_main/menu.html | 18 ++- 10 files changed, 379 insertions(+), 78 deletions(-) create mode 100644 httemplate/misc/email-customers-history.html diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 85a96c7c5..610754c7a 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -696,73 +696,15 @@ sub billing_history { $return{next_bill_date} ? time2str('%m/%d/%Y', $return{next_bill_date} ) : '(none)'; - my @history = (); - my $conf = new FS::Conf; - if ( $conf->exists('selfservice-billing_history-line_items') ) { - - foreach my $cust_bill ( $cust_main->cust_bill ) { - - push @history, { - 'type' => 'Line item', - 'description' => $_->desc( $cust_main->locale ). - ( $_->sdate && $_->edate - ? ' '. time2str('%d-%b-%Y', $_->sdate). - ' To '. time2str('%d-%b-%Y', $_->edate) - : '' - ), - 'amount' => sprintf('%.2f', $_->setup + $_->recur ), - 'date' => $cust_bill->_date, - 'date_pretty' => time2str('%m/%d/%Y', $cust_bill->_date ), - } - foreach $cust_bill->cust_bill_pkg; - - } - - } else { + $return{'history'} = [ + $cust_main->payment_history( + 'line_items' => $conf->exists('selfservice-billing_history-line_items'), + 'reverse_sort' => 1, + ) + ]; - push @history, { - 'type' => 'Invoice', - 'description' => 'Invoice #'. $_->display_invnum, - 'amount' => sprintf('%.2f', $_->charged ), - 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), - } - foreach $cust_main->cust_bill; - - } - - push @history, { - 'type' => 'Payment', - 'description' => 'Payment', #XXX type - 'amount' => sprintf('%.2f', 0 - $_->paid ), - 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), - } - foreach $cust_main->cust_pay; - - push @history, { - 'type' => 'Credit', - 'description' => 'Credit', #more info? - 'amount' => sprintf('%.2f', 0 -$_->amount ), - 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), - } - foreach $cust_main->cust_credit; - - push @history, { - 'type' => 'Refund', - 'description' => 'Refund', #more info? type, like payment? - 'amount' => $_->refund, - 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), - } - foreach $cust_main->cust_refund; - - @history = sort { $b->{'date'} <=> $a->{'date'} } @history; - - $return{'history'} = \@history; $return{'money_char'} = $conf->config("money_char") || '$', return \%return; diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 191a712a8..f3e244777 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2654,6 +2654,13 @@ and customer address. Include units.', 'select_enum' => [ 'text/plain', 'text/html' ], }, + { + 'key' => 'payment_history_msgnum', + 'section' => 'notification', + 'description' => 'Template to use for sending payment history to customer', + %msg_template_options, + }, + { 'key' => 'payby', 'section' => 'billing', diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index f102d97ee..b7efa180f 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -4095,6 +4095,204 @@ my ($self,$field) = @_; } +=item payment_history + +Returns an array of hashrefs standardizing information from cust_bill, cust_pay, +cust_credit and cust_refund objects. Each hashref has the following fields: + +I - one of 'Line item', 'Invoice', 'Payment', 'Credit', 'Refund' or 'Previous' + +I - value of _date field, unix timestamp + +I - user-friendly date + +I - user-friendly description of item + +I - impact of item on user's balance +(positive for Invoice/Refund/Line item, negative for Payment/Credit.) +Not to be confused with the native 'amount' field in cust_credit, see below. + +I - includes money char + +I - customer balance, chronologically as of this item + +I - includes money char + +I - amount charged for cust_bill (Invoice or Line item) records, undef for other types + +I - amount paid for cust_pay records, undef for other types + +I - amount credited for cust_credit records, undef for other types. +Literally the 'amount' field from cust_credit, renamed here to avoid confusion. + +I - amount refunded for cust_refund records, undef for other types + +The four table-specific keys always have positive values, whether they reflect charges or payments. + +The following options may be passed to this method: + +I - if true, returns charges ('Line item') rather than invoices + +I - unix timestamp, only include records on or after. +If specified, an item of type 'Previous' will also be included. +It does not have table-specific fields. + +I - unix timestamp, only include records before + +I - order from newest to oldest (default is oldest to newest) + +I - optional already-loaded FS::Conf object. + +=cut + +# Caution: this gets used by FS::ClientAPI::MyAccount::billing_history, +# and also payment_history_text, which should both be kept customer-friendly. +# If you add anything that shouldn't be passed on through the API or exposed +# to customers, add a new option to include it, don't include it by default +sub payment_history { + my $self = shift; + my $opt = ref($_[0]) ? $_[0] : { @_ }; + + my $conf = $$opt{'conf'} || new FS::Conf; + my $money_char = $conf->config("money_char") || '$', + + #first load entire history, + #need previous to calculate previous balance + #loading after end_date shouldn't hurt too much? + my @history = (); + if ( $$opt{'line_items'} ) { + + foreach my $cust_bill ( $self->cust_bill ) { + + push @history, { + 'type' => 'Line item', + 'description' => $_->desc( $self->locale ). + ( $_->sdate && $_->edate + ? ' '. time2str('%d-%b-%Y', $_->sdate). + ' To '. time2str('%d-%b-%Y', $_->edate) + : '' + ), + 'amount' => sprintf('%.2f', $_->setup + $_->recur ), + 'charged' => sprintf('%.2f', $_->setup + $_->recur ), + 'date' => $cust_bill->_date, + 'date_pretty' => time2str('%m/%d/%Y', $cust_bill->_date ), + } + foreach $cust_bill->cust_bill_pkg; + + } + + } else { + + push @history, { + 'type' => 'Invoice', + 'description' => 'Invoice #'. $_->display_invnum, + 'amount' => sprintf('%.2f', $_->charged ), + 'charged' => sprintf('%.2f', $_->charged ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $self->cust_bill; + + } + + push @history, { + 'type' => 'Payment', + 'description' => 'Payment', #XXX type + 'amount' => sprintf('%.2f', 0 - $_->paid ), + 'paid' => sprintf('%.2f', $_->paid ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $self->cust_pay; + + push @history, { + 'type' => 'Credit', + 'description' => 'Credit', #more info? + 'amount' => sprintf('%.2f', 0 -$_->amount ), + 'credit' => sprintf('%.2f', $_->amount ), + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $self->cust_credit; + + push @history, { + 'type' => 'Refund', + 'description' => 'Refund', #more info? type, like payment? + 'amount' => $_->refund, + 'refund' => $_->refund, + 'date' => $_->_date, + 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + } + foreach $self->cust_refund; + + #put it all in chronological order + @history = sort { $a->{'date'} <=> $b->{'date'} } @history; + + #calculate balance, filter items outside date range + my $previous = 0; + my $balance = 0; + my @out = (); + foreach my $item (@history) { + last if $$opt{'end_date'} && ($$item{'date'} >= $$opt{'end_date'}); + $balance += $$item{'amount'}; + if ($$opt{'start_date'} && ($$item{'date'} < $$opt{'start_date'})) { + $previous += $$item{'amount'}; + next; + } + $$item{'balance'} = sprintf("%.2f",$balance); + foreach my $key ( qw(amount balance) ) { + $$item{$key.'_pretty'} = $$item{$key}; + $$item{$key.'_pretty'} =~ s/^(-?)/$1$money_char/; + } + push(@out,$item); + } + + # start with previous balance, if there was one + if ($previous) { + my $item = { + 'type' => 'Previous', + 'description' => 'Previous balance', + 'amount' => sprintf("%.2f",$previous), + 'balance' => sprintf("%.2f",$previous), + }; + #false laziness with above + foreach my $key ( qw(amount balance) ) { + $$item{$key.'_pretty'} = $$item{$key}; + $$item{$key.'_pretty'} =~ s/^(-?)/$1$money_char/; + } + unshift(@out,$item); + } + + @out = reverse @history if $$opt{'reverse_sort'}; + + return @out; +} + +=item payment_history_text + +Accepts the same options as L and returns those +results as a string table with fixed-width columns, max width 80 char. + +=cut + +sub payment_history_text { + my $self = shift; + my $opt = ref($_[0]) ? $_[0] : { @_ }; + my $out = sprintf("%-12s",'Date'); + $out .= sprintf("%11s",'Amount') . ' '; + $out .= sprintf("%11s",'Balance') . ' '; + $out .= 'Description'; #don't need to pad with spaces + $out .= "\n"; + foreach my $item ($self->payment_history($opt)) { + $out .= sprintf("%-10.10s",$$item{'date_pretty'}) . ' '; #12 width + $out .= sprintf("%11.11s",$$item{'amount_pretty'}) . ' '; #13 width + $out .= sprintf("%11.11s",$$item{'balance_pretty'}) . ' '; #13 width + $out .= sprintf("%.42s",$$item{'description'}); #max 42 width + $out .= "\n"; + } + return $out; +} + =back =head1 CLASS METHODS diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index bdad511fa..83ca3a27c 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -394,6 +394,11 @@ HTML body Text body +=item sub_param + +Optional list of parameter hashrefs to be passed +along to L. + =back Returns an error message, or false for success. @@ -470,6 +475,8 @@ sub email_search_result { 'cust_main' => $cust_main, 'object' => $obj, ); + $message{'sub_param'} = $param->{'sub_param'} + if $param->{'sub_param'}; } else { my @to = $cust_main->invoicing_list_emailonly; @@ -547,7 +554,9 @@ sub process_email_search_result { $param->{'search'} = thaw(decode_base64($param->{'search'})) or die "process_email_search_result requires search params.\n"; - + $param->{'sub_param'} = thaw(decode_base64($param->{'sub_param'})) + or die "process_email_search_result error decoding sub_param\n" + if $param->{'sub_param'}; # $param->{'payby'} = [ split(/\0/, $param->{'payby'}) ] # unless ref($param->{'payby'}); diff --git a/FS/FS/msg_template.pm b/FS/FS/msg_template.pm index c52b6336e..fe8cbebb3 100644 --- a/FS/FS/msg_template.pm +++ b/FS/FS/msg_template.pm @@ -269,7 +269,19 @@ invoicing_list addresses. Multiple addresses may be comma-separated. =item substitutions -A hash reference of additional substitutions +A hash reference of additional string substitutions + +=item sub_param + +A hash reference, keys are the names of existing substitutions, +values are an addition parameter object to pass to the subroutine +for that substitution, e.g. + + 'sub_param' => { + 'payment_history' => { + 'start_date' => 1434764295, + }, + }, =back @@ -327,7 +339,10 @@ sub prepare { } elsif( ref($name) eq 'ARRAY' ) { # [ foo => sub { ... } ] - $hash{$prefix.($name->[0])} = $name->[1]->($obj); + my @subparam = (); + push(@subparam, $opt{'sub_param'}->{$name->[0]}) + if $opt{'sub_param'} && $opt{'sub_param'}->{$name->[0]}; + $hash{$prefix.($name->[0])} = $name->[1]->($obj,@subparam); } else { warn "bad msg_template substitution: '$name'\n"; @@ -340,7 +355,10 @@ sub prepare { $hash{$_} = $opt{substitutions}->{$_} foreach keys %{$opt{substitutions}}; } - $_ = encode_entities($_ || '') foreach values(%hash); + foreach my $key (keys %hash) { + next if $self->no_encode($key); + $hash{$key} = encode_entities($_ || ''); + }; ### # clean up template @@ -509,6 +527,13 @@ my $usage_warning = sub { #my $conf = new FS::Conf; +# for substitutions that handle their own encoding +sub no_encode { + my $self = shift; + my $field = shift; + return ($field eq 'payment_history'); +} + #return contexts and fill-in values # If you add anything, be sure to add a description in # httemplate/edit/msg_template.html. @@ -567,6 +592,12 @@ sub substitutions { [ selfservice_server_base_url => sub { $conf->config('selfservice_server-base_url') #, shift->agentnum) } ], + [ payment_history => sub { + my $cust_main = shift; + my $param = shift || {}; + #html works, see no_encode method + return '
' . encode_entities($cust_main->payment_history_text($param)) . '
'; + } ], ], # next_bill_date 'cust_pkg' => [qw( diff --git a/FS/FS/msg_template/InitialData.pm b/FS/FS/msg_template/InitialData.pm index a4e27fdc9..87c407c35 100644 --- a/FS/FS/msg_template/InitialData.pm +++ b/FS/FS/msg_template/InitialData.pm @@ -18,6 +18,15 @@ If you did not request this password reset, you may safely ignore and delete thi

{ $company_name } Support +END + ], + }, + { msgname => 'payment_history_template', + mime_type => 'text/html', + _conf => 'payment_history_msgnum', + _insert_args => [ subject => '{ $company_name } payment history', + body => <<'END', +{ $payment_history } END ], }, diff --git a/httemplate/edit/msg_template.html b/httemplate/edit/msg_template.html index 7f3824127..ced98fe1f 100644 --- a/httemplate/edit/msg_template.html +++ b/httemplate/edit/msg_template.html @@ -210,6 +210,7 @@ my %substitutions = ( '$company_address'=> 'Our company address', '$company_phonenum' => 'Our phone number', '$selfservice_server_base_url' => 'Base URL of customer self-service', + '$payment_history' => 'List of invoices/payments/credits/refunds', ], 'contact' => [ # duplicate this for shipping '$name' => 'Company and contact name', @@ -322,7 +323,7 @@ my $widget = new HTML::Widgets::SelectLayers( my @hints = @{ $substitutions{$section} }; while(@hints) { my $key = shift @hints; - $html .= qq!\n
$key
$key".shift(@hints).'
"; diff --git a/httemplate/misc/email-customers-history.html b/httemplate/misc/email-customers-history.html new file mode 100644 index 000000000..2f9a38d23 --- /dev/null +++ b/httemplate/misc/email-customers-history.html @@ -0,0 +1,51 @@ + + <% include('email-customers.html', + 'form_action' => 'email-customers-history.html', + 'sub_param_process' => $sub_param_process, + 'alternate_form' => $alternate_form, + 'title' => 'Send payment history', + ) + %> + +<%init> + +my $sub_param_process = sub { + my $conf = shift; + my %sub_param; + foreach my $field ( qw( start_date end_date ) ) { + $sub_param{'payment_history'}->{$field} = parse_datetime($cgi->param($field)); + $cgi->delete($field); + } + $cgi->param('msgnum',$conf->config('payment_history_msgnum')); + return %sub_param; +}; + +my $alternate_form = sub { + my %sub_param = @_; + # this could maaaybe be a separate element, for cleanliness + # but it's really only for use by this page, and it's not overly complicated + my $noinit = 0; + return join("\n", + '', + ( + map { + my $label = ucfirst($_); + $label =~ s/_/ /; + include('/elements/tr-input-date-field.html',{ + 'name' => $_, + 'value' => $sub_param{'payment_history'}->{$_} || '', + 'label' => $label, + 'noinit' => $noinit++ + }); + } + qw( start_date end_date ) + ), + '
', + '', + '', + '', + ); +}; + + + diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index 83e86158f..d1d5ac735 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -1,3 +1,26 @@ +<%doc> + +Allows emailing one or more customers, based on a search for customers. Search can +be specified either through cust_main fields as cgi params, or through a base64 encoded +frozen hash in the 'search' cgi param. Form allows selecting an existing msg_template, +or creating a custom message, and shows a preview of the message before sending. +If linked to as a popup, include the cgi parameter 'popup' for proper header handling. + +This may also be used as an element in other pages, enabling you to pass along +additional substitution parameters to a message template, with the following options: + +form_action - the URL to submit the form to + +sub_param_process - subroutine to override cgi param values (such as msgnum) +and parse/delete additional form fields from the cgi; should return a %sub_param +hash to be passed along for message substitution + +alternate_form - an alternate form for template selection/message creation + +title - the title of the page + + + % if ($popup) { <% include('/elements/header-popup.html', $title) %> % } else { @@ -5,13 +28,16 @@ % } - + %# Mixing search params with from address, subject, etc. required special-case %# handling of those, risked name conflicts, and caused massive problems with %# multi-valued search params. We are no longer in search context, so we %# pack the search into a Storable string for later use. +% if (%sub_param) { + +% } @@ -21,7 +47,7 @@ <% include('/elements/progress-init.html', 'OneTrueForm', - [ qw( search table from subject html_body text_body msgnum ) ], + [ qw( search table from subject html_body text_body msgnum sub_param ) ], 'process/email-customers.html', $pdest, ) @@ -93,6 +119,10 @@ % } +% } elsif ($alternate_form) { + +<% $alternate_form %> + % } else { + <% include('init_overlib.html') |n %> <% include('rs_init_object.html') |n %> -- cgit v1.2.1 From d0dc5b2d3ee79b34579a8774388b486ce779b590 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Thu, 25 Jun 2015 15:12:52 -0400 Subject: Ticket #36913 Fix final permission issue --- debian/freeside-torrus.postinst | 1 + 1 file changed, 1 insertion(+) diff --git a/debian/freeside-torrus.postinst b/debian/freeside-torrus.postinst index 4cc54872a..5cc8accad 100644 --- a/debian/freeside-torrus.postinst +++ b/debian/freeside-torrus.postinst @@ -1,6 +1,7 @@ #!/bin/bash chown freeside.freeside /var/log/torrus +chown -R freeside.freeside /var/torrus mkdir /srv/torrus/; mkdir /srv/torrus/collector_rrd chown -R freeside:freeside /srv/torrus/collector_rrd /usr/local/etc/torrus/discovery /usr/local/etc/torrus/xmlconfig/ torrus clearcache -- cgit v1.2.1 From 4ff12dc7e14232390daca2f14a278cde46a8e573 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 25 Jun 2015 13:03:13 -0700 Subject: make invoice text mouse-accessible through watermark box, #24665 --- conf/invoice_html | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/invoice_html b/conf/invoice_html index 7cadd7c37..dfd87c79b 100644 --- a/conf/invoice_html +++ b/conf/invoice_html @@ -34,6 +34,7 @@ width: 100%; height: 100%; display: table; + pointer-events: none; } .watermark-content { display: table-cell; -- cgit v1.2.1 From 189cfca44d46995b19bc367297024f253793eaa3 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 25 Jun 2015 13:04:07 -0700 Subject: jquery in header-popup --- httemplate/elements/header-popup.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/elements/header-popup.html b/httemplate/elements/header-popup.html index dc60ae67f..307252afb 100644 --- a/httemplate/elements/header-popup.html +++ b/httemplate/elements/header-popup.html @@ -28,7 +28,7 @@ Example: - + <% $head %> > -- cgit v1.2.1 From 255c7037b4eab4dfd3edaa38fcca157d93d90eaf Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Thu, 25 Jun 2015 15:16:59 -0700 Subject: fix torrus interface addition, RT#36988 --- httemplate/misc/process/nms-add_iface.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/misc/process/nms-add_iface.html b/httemplate/misc/process/nms-add_iface.html index d21b3792a..79e685686 100644 --- a/httemplate/misc/process/nms-add_iface.html +++ b/httemplate/misc/process/nms-add_iface.html @@ -1,4 +1,4 @@ -<& /elements/header-popup.html, 'Interface added') &> +<& /elements/header-popup.html, 'Interface added' &> -- cgit v1.2.1 From 3ae0411e8c7d7ff14db95c0d9d9e3834ba431933 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Thu, 25 Jun 2015 20:59:54 -0500 Subject: RT#23741 Multiple payment options [selfservice paytypes fix] --- FS/FS/ClientAPI/MyAccount.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 610754c7a..9c323a4c3 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -48,6 +48,7 @@ use FS::msg_template; use FS::contact; use FS::cust_contact; use FS::cust_location; +use FS::cust_payby; use FS::ClientAPI::MyAccount::quotation; # just for code organization @@ -854,7 +855,7 @@ sub payment_info { 'require_cvv' => $conf->exists('selfservice-require_cvv'), 'onfile_require_cvv' => $conf->exists('selfservice-onfile_require_cvv'), - 'paytypes' => [ @FS::cust_main::paytypes ], + 'paytypes' => [ FS::cust_payby::paytypes ], 'paybys' => [ $conf->config('signup_server-payby') ], 'cust_paybys' => \@cust_paybys, -- cgit v1.2.1 From 9db30264ee0ce0f05632c1ed0b3e8dbdd03f7bc2 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Fri, 26 Jun 2015 01:08:34 -0500 Subject: RT#24684: Payments for Online Bill Pay --- FS/FS/ClientAPI/MyAccount.pm | 2 +- FS/FS/Conf.pm | 7 +++++++ fs_selfservice/FS-SelfService/cgi/make_ach_payment.html | 10 ++++++++-- fs_selfservice/FS-SelfService/cgi/make_payment.html | 9 ++++++++- .../FS-SelfService/cgi/make_thirdparty_payment.html | 11 +++++++++-- fs_selfservice/FS-SelfService/cgi/myaccount_menu.html | 2 +- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 7 ++++++- 7 files changed, 40 insertions(+), 8 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 9c323a4c3..85f85def9 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -131,7 +131,7 @@ sub skin_info { ), 'menu_disable' => [ $conf->config('selfservice-menu_disable',$agentnum) ], ( map { $_ => $conf->exists("selfservice-$_", $agentnum ) } - qw( menu_skipblanks menu_skipheadings menu_nounderline no_logo ) + qw( menu_skipblanks menu_skipheadings menu_nounderline no_logo enable_payment_without_balance ) ), ( map { $_ => scalar($conf->config_binary("selfservice-$_", $agentnum)) } qw( title_left_image title_right_image diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 238622bbd..17030d20c 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -5825,6 +5825,13 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'selfservice-enable_payment_without_balance', + 'section' => 'self-service', + 'description' => 'Allow selfservice customers to make payments even if balance is zero or below (resulting in an unapplied payment and negative balance.)', + 'type' => 'checkbox', + }, + { 'key' => 'logout-timeout', 'section' => 'UI', diff --git a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html index e33ad574c..8c2dfe305 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html @@ -3,19 +3,25 @@ +<%= +if ($balance > 0) { + $OUT .= < +EOF +} +%> diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html index 5f5bc1c8e..503901edd 100644 --- a/fs_selfservice/FS-SelfService/cgi/make_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_payment.html @@ -3,14 +3,21 @@
Amount Due
- $<%=sprintf("%.2f",$balance)%> + $money_char$balance
Payment amount
- $"> + <%= $money_char %>
+ +<%= +if ($balance > 0) { + $OUT .= < +EOF +} +%> <%= $tr_amount_fee %> diff --git a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html index 9a5678e8f..8c5b1a85a 100755 --- a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html +++ b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html @@ -8,16 +8,23 @@ onSubmit="document.OneTrueForm.process.disabled=true">
Amount Due
- $<%=sprintf("%.2f",$balance)%> + $money_char$balance
+<%= +if ($balance > 0) { + $OUT .= < +EOF +} +%> + diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index 61926bd86..6af5e5ec0 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -28,7 +28,7 @@ my %payby_mode; # $payby_mode{FOO} is true if FOO is thirdparty, false if it's B::OP, # nonexistent if it's not supported -if ( ($balance || 0) > 0 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eventually per-pkg or something really fancy +if ( $enable_payment_without_balance || (($balance || 0) > 0) ) { #eventually per-pkg or something really fancy if ( exists( $payby_mode{CARD} ) ) { push @menu, { title => 'Recharge my account with a credit card', diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 4c666cb14..b2ebaef69 100755 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -583,10 +583,15 @@ sub make_payment { my $payment_info = payment_info( 'session_id' => $session_id ); + my $amount = + ($payment_info->{'balance'} && ($payment_info->{'balance'} > 0)) + ? $payment_info->{'balance'} + : ''; + my $tr_amount_fee = mason_comp( 'session_id' => $session_id, 'comp' => '/elements/tr-amount_fee.html', - 'args' => [ 'amount' => $payment_info->{'balance'}, + 'args' => [ 'amount' => $amount, ], ); -- cgit v1.2.1 From 1716de1182a0da4b4136190447c1593dc6f19fda Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Fri, 26 Jun 2015 10:24:14 -0400 Subject: Don't override NG-selfservice configuration --- debian/freeside-ng-selfservice.conffiles | 1 + 1 file changed, 1 insertion(+) create mode 100644 debian/freeside-ng-selfservice.conffiles diff --git a/debian/freeside-ng-selfservice.conffiles b/debian/freeside-ng-selfservice.conffiles new file mode 100644 index 000000000..58f0d3ad3 --- /dev/null +++ b/debian/freeside-ng-selfservice.conffiles @@ -0,0 +1 @@ +/var/www/ng_selfservice-DIST/freeside.class.php -- cgit v1.2.1 From a7d0d84e79164780062adffab771a36bd0500776 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Fri, 26 Jun 2015 11:24:42 -0400 Subject: Don't over-ride torrus configuration file --- debian/freeside-torrus.conffiles | 1 + 1 file changed, 1 insertion(+) create mode 100644 debian/freeside-torrus.conffiles diff --git a/debian/freeside-torrus.conffiles b/debian/freeside-torrus.conffiles new file mode 100644 index 000000000..54116b2d1 --- /dev/null +++ b/debian/freeside-torrus.conffiles @@ -0,0 +1 @@ +/usr/local/etc/torrus/conf/torrus-siteconfig.pl -- cgit v1.2.1 From de608f008350898b465b87d0fb8c84a09824611c Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 26 Jun 2015 12:22:39 -0700 Subject: show regular time in months like paid time --- httemplate/search/svc_acct.cgi | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/httemplate/search/svc_acct.cgi b/httemplate/search/svc_acct.cgi index b9e5a7cc9..58764f881 100755 --- a/httemplate/search/svc_acct.cgi +++ b/httemplate/search/svc_acct.cgi @@ -148,10 +148,34 @@ if ( $cgi->param('magic') =~ /^(all|unlinked)$/ ) { if ( $sortby eq 'seconds' ) { my $tot_time = 0; push @header, emt('Time'); - push @fields, sub { my $svc_acct = shift; - $tot_time += $svc_acct->seconds; - format_time($svc_acct->seconds); - }; + + if ( $conf->exists('svc_acct-display_paid_time_remaining') ) { + push @fields, sub { my $svc_acct = shift; + my $seconds = $svc_acct->seconds; + my $cust_pkg = $svc_acct->cust_svc->cust_pkg; + my $part_pkg = $cust_pkg->part_pkg; + + $tot_time += $svc_acct->seconds; + + $timepermonth = $part_pkg->option('seconds'); + $timepermonth = $timepermonth / $part_pkg->freq + if $part_pkg->freq =~ /^\d+$/ && $part_pkg->freq != 0; + my $recur = $part_pkg->base_recur($cust_pkg); + + return format_time($seconds) + unless $timepermonth && $recur; + + format_time($seconds). + sprintf(' (%.2fx monthly)', $seconds / $timepermonth ); + + }; + } else { + push @fields, sub { my $svc_acct = shift; + $tot_time += $svc_acct->seconds; + format_time($svc_acct->seconds); + }; + } + push @links, ''; $align .= 'r'; push @color, ''; -- cgit v1.2.1 From 9531335fb25595f8883967c21f9692d4331f54ce Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 26 Jun 2015 12:26:31 -0700 Subject: support and unclassified time per customer for a date range --- httemplate/elements/menu.html | 3 +- httemplate/search/report_rt_cust.html | 40 ++++++++ httemplate/search/rt_cust.html | 174 ++++++++++++++++++++++++++++++++++ 3 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 httemplate/search/report_rt_cust.html create mode 100644 httemplate/search/rt_cust.html diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html index 4d0d97958..a01530e2f 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -291,7 +291,8 @@ $report_rating{'Unrateable CDRs'} = [ $fsurl.'search/cdr.html?freesidestatus=fai if $curuser->access_right("Usage: Unrateable CDRs"); if ( $curuser->access_right("Usage: Time worked") ) { $report_rating{'Time worked'} = [ $fsurl.'search/report_rt_transaction.html', '' ]; - $report_rating{'Time worked summary'} = [ $fsurl.'search/report_rt_ticket.html', '' ]; + $report_rating{'Time worked summary per ticket'} = [ $fsurl.'search/report_rt_ticket.html', '' ]; + $report_rating{'Time worked summary per customer'} = [ $fsurl.'search/report_rt_cust.html', '' ]; } tie my %report_ticketing_statistics, 'Tie::IxHash', diff --git a/httemplate/search/report_rt_cust.html b/httemplate/search/report_rt_cust.html new file mode 100644 index 000000000..07d497fc5 --- /dev/null +++ b/httemplate/search/report_rt_cust.html @@ -0,0 +1,40 @@ +<& /elements/header.html, 'Time worked per-customer summary' &> + + + +
Balance due - $<%=sprintf("%.2f", $balance)%> + $money_char$balance
Payment amount - $"> + <%= $money_char %>
+ + <& /elements/tr-select-cust_main-status.html, + 'label' => emt('Status'), + &> + + <& /elements/tr-input-beginning_ending.html &> + + + +
+ +
+ + + + +<& /elements/footer.html &> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('List rating data'); + +my $conf = new FS::Conf; + + diff --git a/httemplate/search/rt_cust.html b/httemplate/search/rt_cust.html new file mode 100644 index 000000000..7c31e976b --- /dev/null +++ b/httemplate/search/rt_cust.html @@ -0,0 +1,174 @@ +<& elements/search.html, + 'title' => 'Time worked per-customer summary', + 'name_singular' => 'customer', + 'query' => $sql_query, + 'count_query' => $count_query, + 'header' => [ FS::UI::Web::cust_header( + $cgi->param('cust_fields') + ), + @extra_headers, + 'Support time', + #'Development time', + 'Unclassified time', + ], + 'fields' => [ + \&FS::UI::Web::cust_fields, + @extra_fields, + $support_time_sub, + $unclass_time_sub, + ], + 'color' => [ FS::UI::Web::cust_colors(), + map '', @extra_fields + ], + 'style' => [ FS::UI::Web::cust_styles(), + map '', @extra_fields + ], + 'align' => [ FS::UI::Web::cust_aligns(), + map '', @extra_fields + ], + 'links' => [ ( map { $_ ne 'Cust. Status' ? $link : '' } + FS::UI::Web::cust_header( + $cgi->param('cust_fields') + ) + ), + map '', @extra_fields + ], + +&> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('List rating data') +; + +#false laziness w/cust_main.html (we're really only filtering on status for now) + +my %search_hash = (); + +#$search_hash{'query'} = $cgi->keywords; + +#scalars +my @scalars = qw ( + agentnum salesnum status address city county state zip country + invoice_terms + no_censustract with_geocode with_email tax no_tax POST no_POST + custbatch usernum + cancelled_pkgs + cust_fields flattened_pkgs + all_tags + all_pkg_classnums + any_pkg_status +); + +for my $param ( @scalars ) { + $search_hash{$param} = scalar( $cgi->param($param) ) + if length($cgi->param($param)); +} + +#lists +for my $param (qw( classnum refnum tagnum pkg_classnum )) { + $search_hash{$param} = [ $cgi->param($param) ]; +} + +### +# etc +### + +my $sql_query = FS::cust_main::Search->search(\%search_hash); +my $count_query = delete($sql_query->{'count_query'}); +my @extra_headers = @{ delete($sql_query->{'extra_headers'}) }; +my @extra_fields = @{ delete($sql_query->{'extra_fields'}) }; + +my $link = [ "${p}view/cust_main.cgi?", 'custnum' ]; + +#eofalse (cust_main.html) + +#false laziness / cribbed from search/rt_ticket.html + +my $twhere = " + WHERE Transactions.ObjectType = 'RT::Ticket' +"; #AND Transactions.ObjectId = Tickets.Id + +my $transaction_time = " +CASE transactions.type when 'Set' + THEN (to_number(newvalue,'999999')-to_number(oldvalue, '999999')) * 60 + ELSE timetaken*60 +END"; + +$twhere .= " + AND ( ( Transactions.Type = 'Set' + AND Transactions.Field = 'TimeWorked' + AND Transactions.NewValue != Transactions.OldValue ) + OR ( Transactions.Type IN ( 'Create', 'Comment', 'Correspond', 'Touch' ) + AND Transactions.TimeTaken > 0 + ) + )"; + +my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi); +# TIMESTAMP is Pg-specific... ? +if ( $beginning > 0 ) { + $beginning = "TIMESTAMP '". time2str('%Y-%m-%d %X', $beginning). "'"; + $twhere .= " AND Transactions.Created >= $beginning "; +} +if ( $ending < 4294967295 ) { + $ending = "TIMESTAMP '". time2str('%Y-%m-%d %X', $ending). "'"; + $twhere .= " AND Transactions.Created <= $ending "; +} + +my $transactions = "FROM Transactions $twhere"; + +#eofalse (rt_ticket.html) + +my $support_time_sub = sub { + my $cust_main = shift; + my $sec = 0; + foreach my $ticket ($cust_main->tickets) { + + my $TimeType = FS::Record->scalar_sql( + "SELECT Content FROM ObjectCustomFieldValues + JOIN CustomFields + ON (ObjectCustomFieldValues.CustomField = CustomFields.Id) + WHERE CustomFields.Name = 'TimeType' + AND ObjectCustomFieldValues.ObjectType = 'RT::Ticket' + AND ObjectCustomFieldValues.Disabled = 0 + AND ObjectId = ". $ticket->{id} + ); + next unless $TimeType eq 'support'; + + $sec += FS::Record->scalar_sql( + "SELECT SUM($transaction_time) $transactions ". + " AND Transactions.ObjectId = ". $ticket->{id} + ); + } + + (($sec < 0) ? '-' : '' ). int(abs($sec)/3600)."h".sprintf("%02d",(abs($sec)%3600)/60)."m"; + +}; + +my $unclass_time_sub = sub { + my $cust_main = shift; + my $sec = 0; + foreach my $ticket ($cust_main->tickets) { + + my $TimeType = FS::Record->scalar_sql( + "SELECT Content FROM ObjectCustomFieldValues + JOIN CustomFields + ON (ObjectCustomFieldValues.CustomField = CustomFields.Id) + WHERE CustomFields.Name = 'TimeType' + AND ObjectCustomFieldValues.ObjectType = 'RT::Ticket' + AND ObjectCustomFieldValues.Disabled = 0 + AND ObjectId = ". $ticket->{id} + ); + next unless $TimeType eq ''; + + $sec += FS::Record->scalar_sql( + "SELECT SUM($transaction_time) $transactions ". + " AND Transactions.ObjectId = ". $ticket->{id} + ); + } + + (($sec < 0) ? '-' : '' ). int(abs($sec)/3600)."h".sprintf("%02d",(abs($sec)%3600)/60)."m"; + +}; + + -- cgit v1.2.1 From 230ee8b52757cbd3aa45c47f0633a64809e704b8 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Fri, 26 Jun 2015 15:55:56 -0700 Subject: only try to log activity when there's an authenticated user, #36856 --- FS/FS/access_user_log.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FS/FS/access_user_log.pm b/FS/FS/access_user_log.pm index 884d250d6..9e7f7a00e 100644 --- a/FS/FS/access_user_log.pm +++ b/FS/FS/access_user_log.pm @@ -75,6 +75,8 @@ Adds a log entry for PATH for the current user and timestamp. sub insert_new_path { my( $class, $path ) = @_; + return '' unless defined $FS::CurrentUser::CurrentUser; + my $self = $class->new( { 'usernum' => $FS::CurrentUser::CurrentUser->usernum, 'path' => $path, -- cgit v1.2.1 From 68546df9b125f73764eda31f1dcb4e2c0555f859 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Fri, 26 Jun 2015 19:26:17 -0400 Subject: more strict limits on tax-on-tax applicability, #36830 --- FS/FS/TaxEngine/cch.pm | 98 +++++++++++++++++++++++++++----------------------- FS/FS/tax_rate.pm | 5 ++- 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/FS/FS/TaxEngine/cch.pm b/FS/FS/TaxEngine/cch.pm index fb3410365..ccfb846fe 100644 --- a/FS/FS/TaxEngine/cch.pm +++ b/FS/FS/TaxEngine/cch.pm @@ -123,7 +123,7 @@ sub make_taxlines { my @raw_taxlines; my %taxable_location; # taxable billpkgnum => cust_location - my %item_has_tax; # taxable billpkgnum => taxnum + my %item_has_tax; # taxable billpkgnum => charge class => taxnum foreach my $taxnum ( keys %{ $self->{taxes} } ) { my $tax_rate = FS::tax_rate->by_key($taxnum); my $taxables = $self->{taxes}{$taxnum}; @@ -141,8 +141,8 @@ sub make_taxlines { # store this tax fragment, indexed by taxable item, then by taxnum my $billpkgnum = $link->taxable_billpkgnum; - $item_has_tax{$billpkgnum} ||= {}; - my $fragments = $item_has_tax{$billpkgnum}{$taxnum} ||= []; + my $fragments = $item_has_tax{$billpkgnum}{$link->taxclass}{$taxnum} + ||= []; push @raw_taxlines, $link; # this will go into final consolidation push @$fragments, $link; # this will go into a temporary cust_bill_pkg @@ -156,48 +156,58 @@ sub make_taxlines { # taxes that apply to this item my $this_has_tax = $item_has_tax{$billpkgnum}; my $location = $taxable_location{$billpkgnum}; - foreach my $taxnum (keys %$this_has_tax) { - # $this_has_tax->{$taxnum} = an arrayref of the tax links for taxdef - # $taxnum on taxable item $billpkgnum - - my $tax_rate = FS::tax_rate->by_key($taxnum); - # find all taxes that apply to it in this location - my @tot = $tax_rate->tax_on_tax( $location ); - next if !@tot; - - warn "found possible taxed taxnum $taxnum\n" - if $DEBUG > 2; - # Calculate ToT separately for each taxable item, and only if _that - # item_ is already taxed under the ToT. This is counterintuitive. - # See RT#5243. - my $temp_lineitem; - foreach my $tot (@tot) { - my $totnum = $tot->taxnum; - warn "checking taxnum ".$tot->taxnum. - " which we call ". $tot->taxname ."\n" + + foreach my $charge_class (keys %$this_has_tax) { + # taxes that apply to this item and charge class + my $this_class_has_tax = $this_has_tax->{$charge_class}; + foreach my $taxnum (keys %$this_class_has_tax) { + + my $tax_rate = FS::tax_rate->by_key($taxnum); + # find all taxes that apply to it in this location + my @tot = $tax_rate->tax_on_tax( $location ); + next if !@tot; + + warn "found possible taxed taxnum $taxnum\n" if $DEBUG > 2; - if ( exists $this_has_tax->{ $totnum } ) { - warn "calculating tax on tax: taxnum ".$tot->taxnum." on $taxnum\n" - if $DEBUG; - # construct a line item to calculate tax on - $temp_lineitem ||= FS::cust_bill_pkg->new({ - 'pkgnum' => 0, - 'invnum' => $cust_bill->invnum, - 'setup' => sum(map $_->amount, @{ $this_has_tax->{$taxnum} }), - 'recur' => 0, - 'itemdesc' => $tax_rate->taxname, - 'cust_bill_pkg_tax_rate_location' => $this_has_tax->{$taxnum}, - }); - my @new_taxlines = $tot->taxline_cch( [ $temp_lineitem ] ); - next if (!@new_taxlines); # it didn't apply after all - if (!ref($new_taxlines[0])) { - die "error evaluating TOT ($totnum on $taxnum): $new_taxlines[0]\n"; - } - # add these to the taxline queue - push @raw_taxlines, @new_taxlines; - } # if $this_has_tax->{$totnum} - } # foreach my $tot (tax-on-tax rate definition) - } # foreach $taxnum (first-tier rate definition) + # Calculate ToT separately for each taxable item and class, and only + # if _that class on the item_ is already taxed under the ToT. This is + # counterintuitive. + # See RT#5243 and RT#36380. + my $temp_lineitem; + foreach my $tot (@tot) { + my $totnum = $tot->taxnum; + warn "checking taxnum ".$tot->taxnum. + " which we call ". $tot->taxname ."\n" + if $DEBUG > 2; + # note: if the _null class_ on this item is taxed under the ToT, + # then this specific class is taxed also (because null class + # includes all classes) and so ToT is applicable. + if ( + exists $this_class_has_tax->{ $totnum } + or exists $this_has_tax->{''}{ $totnum } + ) { + warn "calculating tax on tax: taxnum ".$tot->taxnum." on $taxnum\n" + if $DEBUG; + # construct a line item to calculate tax on + $temp_lineitem ||= FS::cust_bill_pkg->new({ + 'pkgnum' => 0, + 'invnum' => $cust_bill->invnum, + 'setup' => sum(map $_->amount, @{ $this_class_has_tax->{$taxnum} }), + 'recur' => 0, + 'itemdesc' => $tax_rate->taxname, + 'cust_bill_pkg_tax_rate_location' => $this_class_has_tax->{$taxnum}, + }); + my @new_taxlines = $tot->taxline_cch( [ $temp_lineitem ] ); + next if (!@new_taxlines); # it didn't apply after all + if (!ref($new_taxlines[0])) { + die "error evaluating TOT ($totnum on $taxnum): $new_taxlines[0]\n"; + } + # add these to the taxline queue + push @raw_taxlines, @new_taxlines; + } # if $this_has_tax->{$totnum} + } # foreach my $tot (tax-on-tax rate definition) + } # foreach $taxnum (first-tier rate definition) + } # foreach $charge_class } # foreach $taxable_item return @raw_taxlines; diff --git a/FS/FS/tax_rate.pm b/FS/FS/tax_rate.pm index 67dd40e83..1094968c6 100644 --- a/FS/FS/tax_rate.pm +++ b/FS/FS/tax_rate.pm @@ -398,9 +398,6 @@ method together, and NO items from any other invoice should be included. =cut -# future optimization: it would probably suffice to return only the link -# records, and let the consolidation routine build the cust_bill_pkgs - sub taxline_cch { my $self = shift; # this used to accept a hash of options but none of them did anything @@ -581,8 +578,10 @@ sub taxline_cch { 'taxtype' => ref($self), 'cents' => $this_tax_cents, 'locationtaxid' => $self->location, + 'taxable_billpkgnum' => $cust_bill_pkg->billpkgnum, 'taxable_cust_bill_pkg' => $cust_bill_pkg, 'taxratelocationnum' => $taxratelocationnum, + 'taxclass' => $class, }); push @tax_links, $tax_link; -- cgit v1.2.1 From 062f38f2f5d0da64c6fd0702d4df2e805473a1f5 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Sat, 27 Jun 2015 15:51:29 -0700 Subject: reports with row grouping for payment/refund search, #25944 --- FS/FS/Mason.pm | 4 +- FS/FS/Query.pm | 118 ++++ httemplate/elements/freeside.css | 18 + httemplate/elements/select.html | 3 + httemplate/search/elements/cust_pay_or_refund.html | 32 +- httemplate/search/elements/grouped-search.html | 49 ++ httemplate/search/elements/grouped-search/core | 153 +++++ httemplate/search/elements/grouped-search/html | 131 ++++ .../search/elements/grouped-search/html-print | 79 +++ httemplate/search/elements/grouped-search/xls | 61 ++ httemplate/search/elements/match-classnum | 12 + .../search/elements/report_cust_pay_or_refund.html | 63 +- httemplate/search/elements/search-html.html | 659 +++++++++++---------- httemplate/search/elements/search-xls.html | 73 ++- httemplate/search/elements/search.html | 135 ++--- 15 files changed, 1161 insertions(+), 429 deletions(-) create mode 100644 FS/FS/Query.pm create mode 100644 httemplate/search/elements/grouped-search.html create mode 100644 httemplate/search/elements/grouped-search/core create mode 100644 httemplate/search/elements/grouped-search/html create mode 100644 httemplate/search/elements/grouped-search/html-print create mode 100644 httemplate/search/elements/grouped-search/xls create mode 100644 httemplate/search/elements/match-classnum diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm index 6163197fa..f05ac0339 100644 --- a/FS/FS/Mason.pm +++ b/FS/FS/Mason.pm @@ -57,7 +57,7 @@ if ( -e $addl_handler_use_file ) { use CGI::Cookie; use List::Util qw( max min sum ); use List::MoreUtils qw( first_index uniq ); - use Scalar::Util qw( blessed ); + use Scalar::Util qw( blessed looks_like_number ); use Data::Dumper; use Date::Format; use Time::Local; @@ -156,6 +156,8 @@ if ( -e $addl_handler_use_file ) { use FS::Locales; use FS::Maketext qw( mt emt js_mt ); + use FS::Query; + use FS::agent; use FS::agent_type; use FS::domain_record; diff --git a/FS/FS/Query.pm b/FS/FS/Query.pm new file mode 100644 index 000000000..8ecf1c49c --- /dev/null +++ b/FS/FS/Query.pm @@ -0,0 +1,118 @@ +package FS::Query; + +use strict; +use FS::Record; # don't import qsearch +use Storable 'dclone'; + +=head1 NAME + +FS::Query - A thin wrapper around qsearch argument hashes. + +=head1 DESCRIPTION + +This module exists because we pass qsearch argument lists around a lot, +and add new joins or WHERE expressions in several stages, and I got tired +of doing this: + + my $andwhere = "mycolumn IN('perl','python','javascript')"; + if ( ($search->{hashref} and keys( %{$search->{hashref}} )) + or $search->{extra_sql} =~ /^\s*WHERE/ ) { + $search->{extra_sql} .= " AND $andwhere"; + } else { + $search->{extra_sql} = " WHERE $andwhere "; + } + +and then having it fail under some conditions if it's done wrong (as the above +example is, obviously). + +We may eventually switch over to SQL::Abstract or something for this, but for +now it's a couple of crude manipulations and a wrapper to qsearch. + +=head1 METHODS + +=over 4 + +=item new HASHREF + +Turns HASHREF (a qsearch argument list) into an FS::Query object. None of +the params are really required, but you should at least supply C. + +In the Future this may do a lot more stuff. + +=cut + +sub new { + my ($class, $hashref) = @_; + + my $self = bless { + table => '', + select => '*', + hashref => {}, + addl_from => '', + extra_sql => '', + order_by => '', + %$hashref, + }; + # load FS::$table? validate anything? + $self; +} + +=item clone + +Returns another object that's a copy of this one. + +=cut + +sub clone { + my $self = shift; + $self->new( dclone($self) ); +} + +=item and_where EXPR + +Adds a constraint to the WHERE clause of the query. All other constraints in +the WHERE clause should be joined with AND already; if not, they should be +grouped with parentheses. + +=cut + +sub and_where { + my $self = shift; + my $where = shift; + + if ($self->{extra_sql} =~ /^\s*(?:WHERE|AND)\s+(.*)/is) { + $where = "($where) AND $1"; + } + if (keys %{ $self->{hashref} }) { + $where = " AND $where"; + } else { + $where = " WHERE $where"; + } + $self->{extra_sql} = $where; + + return $self; +} + +=item qsearch + +Runs the query and returns all results. + +=cut + +sub qsearch { + my $self = shift; + FS::Record::qsearch({ %$self }); +} + +=item qsearchs + +Runs the query and returns only one result. + +=cut + +sub qsearchs { + my $self = shift; + FS::Record::qsearchs({ %$self }); +} + +1; diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css index ece57a053..3dc344cbf 100644 --- a/httemplate/elements/freeside.css +++ b/httemplate/elements/freeside.css @@ -254,6 +254,24 @@ table.grid { border-radius: 2px; } +tr.row0 { + background-color: #eeeeee; +} + +tr.row1 { + background-color: #ffffff; +} + +.grid tfoot tr { + background-color: #dddddd; + font-style: italic; +} + +/* border at the top of the footer, but not between footer rows */ +.grid tfoot tr:first-child td { + border-top: 1px dashed black; +} + th, td { vertical-align: top; } diff --git a/httemplate/elements/select.html b/httemplate/elements/select.html index 67ef51418..4492681de 100644 --- a/httemplate/elements/select.html +++ b/httemplate/elements/select.html @@ -4,6 +4,7 @@ ID = "<% $opt{id} %>" previousValue = "<% $curr_value %>" previousText = "<% $labels->{$curr_value} || $curr_value %>" + <% $multiple %> <% $size %> <% $style %> <% $opt{disabled} %> @@ -74,4 +75,6 @@ my $style = scalar(@style) ? 'STYLE="'. join(';', @style). '"' : ''; my $size = $opt{'size'} ? 'SIZE='.$opt{'size'} : ''; +my $multiple = $opt{'multiple'} ? 'MULTIPLE' : ''; + diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html index 0e3fce303..ce513ab15 100755 --- a/httemplate/search/elements/cust_pay_or_refund.html +++ b/httemplate/search/elements/cust_pay_or_refund.html @@ -39,7 +39,7 @@ Examples: ) -<& search.html, +<& grouped-search.html, 'title' => $title, # XXX: translate 'name_singular' => $name_singular, 'query' => $sql_query, @@ -54,6 +54,16 @@ Examples: 'link_onclicks' => \@link_onclicks, 'color' => \@color, 'style' => \@style, + + 'group_column' => 'payby', + 'group_label' => 'payby_name', + 'subtotal' => { 'paid' => 'sum(paid)' }, + 'subtotal_row' => [ 'Subtotal', + sub { sprintf($money, $_[0]->paid) }, + ], + 'total_row' => [ 'Total', + sub { sprintf("$money", $_[0]->paid) }, + ], &> <%init> @@ -61,6 +71,9 @@ my %opt = @_; my $curuser = $FS::CurrentUser::CurrentUser; +my $conf = FS::Conf->new; +my $money = ($conf->config('money_char') || '$') . '%.2f'; + die "access denied" unless $curuser->access_right('Financial reports'); @@ -165,7 +178,7 @@ push @header, "\u$name_singular", $align .= 'rr'; push @links, '', ''; push @fields, 'payby_payinfo_pretty', - sub { sprintf('$%.2f', shift->$amount_field() ) }, + sub { sprintf($money, shift->$amount_field() ) }, ; push @link_onclicks, $sub_receipt, ''; push @sort_fields, '', $amount_field; @@ -174,7 +187,7 @@ if ( $unapplied ) { push @header, emt('Unapplied'); $align .= 'r'; push @links, ''; - push @fields, sub { sprintf('$%.2f', shift->unapplied_amount) }; + push @fields, sub { sprintf($money, shift->unapplied_amount) }; push @sort_fields, ''; } @@ -252,14 +265,10 @@ if ( $cgi->param('magic') ) { $title = $part_referral->referral. " $title"; } - # cust_classnum (false laziness w/ elements/cust_main_dayranges.html, prepaid_income.html, cust_bill_pay.html, cust_bill_pkg.html cust_bill_pkg_referral.html, unearned_detail.html, cust_credit.html, cust_credit_refund.html, cust_main::Search::search_sql) - if ( grep { $_ eq 'cust_classnum' } $cgi->param ) { - my @classnums = grep /^\d*$/, $cgi->param('cust_classnum'); - push @search, 'COALESCE( cust_main.classnum, 0) IN ( '. - join(',', map { $_ || '0' } @classnums ). - ' )' - if @classnums; - } + # cust_classnum - standard matching + push @search, $m->comp('match-classnum', + param => 'cust_classnum', field => 'cust_main.classnum' + ); if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { push @search, "$table.custnum = $1"; @@ -321,7 +330,6 @@ if ( $cgi->param('magic') ) { } elsif ( $cardtype eq 'Discover' ) { - my $conf = new FS::Conf; my $country = $conf->config('countrydefault') || 'US'; $search = diff --git a/httemplate/search/elements/grouped-search.html b/httemplate/search/elements/grouped-search.html new file mode 100644 index 000000000..56fc88d38 --- /dev/null +++ b/httemplate/search/elements/grouped-search.html @@ -0,0 +1,49 @@ +<%doc> + +<& elements/grouped-search/html, + + # required + 'title' => 'Page title', + + 'name_singular' => 'item', + + 'query' => { + 'table' => 'tablename', + 'hashref' => { 'field' => 'value', ... }, # optional + 'select' => '*', + 'addl_from' => '', + 'extra_sql' => '', + #'order_by' is not allowed + }, + 'group_column' => 'classnum', # must be a single field + # 'group_table' => 'mytable', # optional; defaults to the one in the query + 'group_label' => 'classname', + 'subtotal' => { amount => 'sum(amount)', ... } + # The subtotal row will be generated as an FS::* object of the same type + # as all the detail rows. + # The only fields present will be the grouping column and any subtotals + # defined in 'subtotal'. Key is a field name (in the FS::* object), + # value is an SQL aggregate expression. + + # How to display that object: arrayref of literal strings or coderefs + # (the subtotal object will be passed). These will be placed in table + # cells, and can contain HTML. + 'subtotal_row' => + [ 'Total' + sub { sprintf('%.2f', $_[0]->amount) }, + ], + + 'order_by' => '_date', # SQL ordering expression for the detail rows + + 'header' => [ ... ], # per search.html + 'fields' => [ ... ], + +&> + +<%init> +my $type = 'html'; +if ($cgi->param('type') =~ /^(html|html-print|xls)$/) { + $type = $1; +} + +<& "grouped-search/$type", @_ &> diff --git a/httemplate/search/elements/grouped-search/core b/httemplate/search/elements/grouped-search/core new file mode 100644 index 000000000..fe47fb7d1 --- /dev/null +++ b/httemplate/search/elements/grouped-search/core @@ -0,0 +1,153 @@ +<%doc> + +my $group_data = $m->comp( 'elements/grouped-search/core', + + 'query' => { + 'table' => 'tablename', + 'hashref' => { 'field' => 'value', ... }, # optional + 'select' => '*', + 'addl_from' => '', + 'extra_sql' => '', + #'order_by' is not allowed + }, + 'group_column' => 'classnum', # must be a single field + # 'group_table' => 'mytable', # optional; defaults to the one in the query + 'group_label' => 'classname', + 'subtotal' => { amount => 'sum(amount)', ... } + # The subtotal row will be generated as an FS::* object of the same type + # as all the detail rows. + # The only fields present will be the grouping column and any subtotals + # defined in 'subtotal'. Key is a field name (in the FS::* object), + # value is an SQL aggregate expression. + + # How to display that object: arrayref of literal strings or coderefs + # (the subtotal object will be passed). These will be placed in table + # cells, and can contain HTML. + 'subtotal_row' => + [ 'Subtotal', sub { sprintf('%.2f', $_[0]->amount) }, ], + + # The subtotal aggregates will also be calculated for the entire data + # set, without grouping. How to display those (if not present, will + # not be displayed); + 'total_row' => + [ 'Total', sub { sprintf('%.2f', $_[0]->amount) }, ], + + 'order_by' => '_date', # SQL ordering expression for the detail rows + + 'header' => [ ... ], # per search.html + 'fields' => [ ... ], +); + +returns: +{ + num => number of groups, + groups => [ group summary objects, + with group key columns, subtotals, and "num_rows" ], + group_labels => [ label strings ], + group_footers => [ formatted subtotal row arrayrefs ], + queries => [ FS::Query objects to evaluate to get detail rows ], +} + + +<%shared> +my $conf = FS::Conf->new; + +<%init> +my %opt = @_; + +my $base_query = FS::Query->new( $opt{'query'} ); +my $main_table = $base_query->{table}; + +# $opt{subtotal} is a hashref of field names => SQL aggregate expressions. + +my @subtotal_names = sort keys(%{ $opt{'subtotal'} }); +my @subtotal_exprs = map { $opt{'subtotal'}->{$_} } @subtotal_names; + +# qualify the group key to the main table unless otherwise specified +my $group_table = $opt{group_table} || $main_table; +my $group_key = $group_table . '.' . $opt{group_column}; + +my @select = ( + $group_key, # need this to identify groups + 'COUNT(*) as num_rows', # and this for pagination + map { '(' . $subtotal_exprs[$_] . ') AS "' . $subtotal_names[$_] . '"' } + 0 .. (scalar(@subtotal_names) - 1) +); + +my $group_query = $base_query->clone; +$group_query->{order_by} = "GROUP BY $group_key"; +$group_query->{select} = join(',', @select); +# keep table, addl_from, extra_sql, and hashref as they are + +#warn Dumper($group_query); #DEBUG + +# run the group query and create a tab label for each group +my @groups = $group_query->qsearch; + +# also run it with no grouping, and just get overall totals +my $total_query = $base_query->clone; +shift @select; # remove $group_key +$total_query->{select} = join(',', @select); +$total_query->{order_by} = ''; + +my $totals = $total_query->qsearchs; + +my $order_by = ''; +if ( $cgi->param('order_by') =~ /^(\w+\.?\w*(?: DESC)?)$/ ) { + $order_by = $1; +} +if ( $opt{order_by} ) { + $order_by .= ', ' if length($order_by); # user selection takes priority + $order_by .= $opt{order_by}; +} +$order_by = "ORDER BY $order_by " if $order_by; +$base_query->{order_by} = $order_by; + +my $group_label = $opt{group_label} || $opt{group_column}; +my (@group_labels, @group_footers, @queries); +for my $i (0 .. scalar(@groups) - 1) { + my $label = $groups[$i]->$group_label . ' (' . $groups[$i]->num_rows . ')'; + push @group_labels, $label; + + my @footer; + if ($opt{'subtotal_row'}) { + for( my $col = 0; + exists($opt{'subtotal_row'}[$col]) or exists($opt{'header'}[$col]); + $col++ + ) { + my $value = $opt{'subtotal_row'}[$col] || ''; + $value = &$value( $groups[$i] ) if ref($value) eq 'CODE'; + $footer[$col] = $value; + } + } + push @group_footers, \@footer; + + my $detail_query = $base_query->clone; + my $group_key_value = $groups[$i]->get( $opt{group_column} ); + $group_key_value = dbh->quote($group_key_value) + unless looks_like_number($group_key_value); + $detail_query->and_where("$group_key = $group_key_value"); + push @queries, $detail_query; +} + +my @total_footer; +if ($opt{'total_row'}) { + for( my $col = 0; + exists($opt{'total_row'}[$col]) or exists($opt{'header'}[$col]); + $col++ + ) { + my $value = $opt{'total_row'}[$col] || ''; + $value = &$value( $totals ) if ref($value) eq 'CODE'; + $total_footer[$col] = $value; + } +} + +return { + num => scalar(@groups), + groups => \@groups, + group_labels => \@group_labels, + group_footers => \@group_footers, + queries => \@queries, + total_footer => \@total_footer, +}; + diff --git a/httemplate/search/elements/grouped-search/html b/httemplate/search/elements/grouped-search/html new file mode 100644 index 000000000..aff17cea0 --- /dev/null +++ b/httemplate/search/elements/grouped-search/html @@ -0,0 +1,131 @@ +<%shared> +my $conf = FS::Conf->new; + +<%init> +my %opt = @_; +$opt{'name'} ||= PL($opt{'name_singular'}); + +my $group_info = $m->comp('core', %opt); + +my $redirect; + +if ( $group_info->{num} == 0 ) { + $redirect = $opt{'redirect_empty'}; + if ($redirect) { + $redirect = &$redirect($cgi) if ref($redirect) eq 'CODE'; + redirect( $redirect ); + } else { # just print this stuff and exit + $m->comp('/elements/header.html', $opt{'title'}); + $m->print('

No matching ' . $opt{'name'} . ' found.
'); + $m->comp('/elements/footer.html'); + $m->abort; + } +} + +# this mode has a concept of "current group" +my $curr_group = 0; +if ($cgi->param('group') =~ /^(\d+)$/) { + $curr_group = $1; +} + +my $group = $group_info->{groups}[$curr_group]; +my $query = $group_info->{queries}[$curr_group]; +my $footer = $group_info->{group_footers}[$curr_group]; +my $total_footer = $group_info->{total_footer} || []; +# pagination +my ($limit, $offset); +my $maxrecords = $conf->config('maxsearchrecordsperpage') || 50; +if ( $cgi->param('maxrecords') =~ /^(\d+)$/ ) { + $maxrecords = $1; +} +if ( $maxrecords ) { + $limit = "LIMIT $maxrecords"; + if ( $cgi->param('offset') =~ /^(\d+)$/ ) { + $offset = $1; + $limit .= " OFFSET $offset"; + } +} +$query->{order_by} .= $limit if $limit; + +#warn Dumper($query); #DEBUG + +# run the query +my @rows = $query->qsearch; + +#warn Dumper(\@rows); #DEBUG + +my $pager = ''; +# show pager if needed +if ( $group->num_rows > scalar(@rows) ) { + $pager = include( '/elements/pager.html', + 'offset' => $offset, + 'num_rows' => scalar(@rows), + 'total' => $group->num_rows, + 'maxrecords' => $maxrecords, + ); +} + +# set up tab bar +my @menubar; +for (my $i = 0; $i < $group_info->{num}; $i++) { + push @menubar, $group_info->{group_labels}[$i], ";group=$i"; +} + + + +<& /elements/header.html, $opt{title} &> + +%# tab bar +% $cgi->delete('group'); +% $cgi->delete('offset'); +% $cgi->delete('type'); +<& /elements/menubar.html, + { newstyle => 1, + url_base => $cgi->self_url, + selected => $group_info->{group_labels}[$curr_group] }, + @menubar +&> + +
+%# download links +

<% emt('Download full results') %>
+% $cgi->param('type', 'xls'); +<% emt('as Excel spreadsheet') %>
+% $cgi->param('type', 'html-print'); +<% emt('as printable copy') %>
+

+ +<% $pager %> + + +
+ + <& /search/elements/search-html.html:header_row, + 'header' => $opt{'header'}, + 'header2' => $opt{'header2'}, + 'sort_fields' => ($opt{'sort_fields'} || $opt{'fields'}), + &> + + + <& /search/elements/search-html.html:data_rows, + 'rows' => \@rows, + 'opt' => \%opt, + &> + + + <& /search/elements/search-html.html:footer_row, row => $footer, opt => \%opt &> +% if ( scalar @$total_footer ) { + <& /search/elements/search-html.html:footer_row, row => $total_footer, opt => \%opt &> +% } + +
+ +<% $pager %> + + +<& /elements/footer.html &> + diff --git a/httemplate/search/elements/grouped-search/html-print b/httemplate/search/elements/grouped-search/html-print new file mode 100644 index 000000000..c4c3b1ef5 --- /dev/null +++ b/httemplate/search/elements/grouped-search/html-print @@ -0,0 +1,79 @@ +<%doc> + +The "printable" view (all groups on one page). + +<%init> +my %opt = @_; + +my $group_info = $m->comp('core', %opt); +my $ncols = scalar(@{ $opt{header} }); + +my $total_footer = $group_info->{total_footer} || []; + +<& /elements/header-popup.html, $opt{title} &> + + +<& /elements/table-grid.html &> +
+ <% $label %> +
+<& /elements/footer.html &> diff --git a/httemplate/search/elements/grouped-search/xls b/httemplate/search/elements/grouped-search/xls new file mode 100644 index 000000000..8540dcf06 --- /dev/null +++ b/httemplate/search/elements/grouped-search/xls @@ -0,0 +1,61 @@ +<%doc> + +Excel spreadsheet view. + + +<%init> +my %opt = @_; + +my $group_info = $m->comp('core', %opt); + +# minor false laziness with search-xls.html +my $override = ''; +$override = 'XLSX' if grep { $_->num_rows >= 65536 } + @{ $group_info->{groups} }; + +my $format = $FS::CurrentUser::CurrentUser->spreadsheet_format($override); + +my $filename = $opt{'name'} || PL($opt{'name_singular'}); +$filename .= $format->{extension}; + +http_header('Content-Type' => $format->{mime_type} ); +http_header('Content-Disposition' => qq!attachment;filename="$filename"! ); +$HTML::Mason::Commands::r->headers_out->{'Cache-control'} = 'max-age=0'; + +my $data = ''; +my $XLS = new IO::Scalar \$data; +my $workbook = $format->{class}->new($XLS) + or die "Error opening Excel file: $!"; + +my $title = $opt{'title'}; +$title =~ s/[\[\]\:\*\?\/\/]//g; +$title = substr($title, 0, 31); + +for (my $curr_group = 0; $curr_group < $group_info->{num}; $curr_group++) { + my $group = $group_info->{groups}[$curr_group]; + my $query = $group_info->{queries}[$curr_group]; + my $footer = $group_info->{group_footers}[$curr_group]; + my $label = $group_info->{group_labels}[$curr_group]; + # run the query + my @rows = $query->qsearch; + #warn Dumper(\@rows); #DEBUG + + # pass arrayrefs to write_row to write multiple rows + $opt{footer} = [ List::MoreUtils::pairwise { [ $a, $b ] } + @$footer, + @{$group_info->{total_footer}} + ]; + $m->comp('/search/elements/search-xls.html:worksheet', + workbook => $workbook, + title => $label, + header => $opt{header}, + opt => \%opt, + rows => \@rows, + ); +} + +$workbook->close(); + +$m->clear_buffer(); +$m->print($data); + diff --git a/httemplate/search/elements/match-classnum b/httemplate/search/elements/match-classnum new file mode 100644 index 000000000..ed1efd53c --- /dev/null +++ b/httemplate/search/elements/match-classnum @@ -0,0 +1,12 @@ +<%args> +$param # name of the form field containing the classnum +$field => $param # SQL field that must match that form field + +<%init> +my @values = grep /^(\d+)$/, $cgi->param( $param ); +if (@values) { + return "COALESCE($field, 0) IN (" . join(',', @values) . ')'; +} else { + return; +} + diff --git a/httemplate/search/elements/report_cust_pay_or_refund.html b/httemplate/search/elements/report_cust_pay_or_refund.html index 9c4ca2761..70727c007 100644 --- a/httemplate/search/elements/report_cust_pay_or_refund.html +++ b/httemplate/search/elements/report_cust_pay_or_refund.html @@ -27,36 +27,14 @@ Examples:
<% ucfirst(PL($name_singular)) %> of type: - -
<% mt('Check #:') |h %>
@@ -189,4 +166,26 @@ my $title = $void ? "Voided $name_singular report" : "\u$name_singular report" ; $table .= '_void' if $void; +tie (my %payby, 'Tie::IxHash', + 'CARD-VisaMC' => 'credit card (Visa/MasterCard)', + 'CARD-Amex' => 'credit card (American Express)', + 'CARD-Discover' => 'credit card (Discover)', + 'CARD-Maestro' => 'credit card (Maestro/Switch/Solo)', + 'CARD-Tokenized' => 'credit card (Tokenized)', + + 'CHEK' => 'electronic check / ACH', + 'BILL' => 'check', + 'CASH' => 'cash', + 'PPAL' => 'Paypal', + 'APPL' => 'Apple Store', + 'ANRD' => 'Android Market', + + 'PREP' => 'prepaid card', + 'WIRE' => 'wire transfer', + 'WEST' => 'Western Union', + 'EDI' => 'Electronic Debit (EDI)', + 'MCRD' => 'manual credit card', + 'MCHK' => 'manual electronic check', +); + diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index 10cc95539..d8ab30a32 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -181,300 +181,13 @@ % } - <% include('/elements/table-grid.html') %> - -
- <% $style %> - - > - <% $label %> -
- <% $label %> -
'. -% -% join('', map { -% -% my $rowref = $_; -% -% ''. -% -% join('', map { -% -% my $e = $_; -% -% ''; -% -% } @$rowref ). -% -% ''; -% } @$tableref ). -% -% '
{$_}), -% qw( align bgcolor colspan rowspan -% style valign width ) -% ). -% '>'. -% -% ( $e->{'link'} -% ? '' -% : '' -% ). -% ( $e->{'onclick'} # don't use with 'link' -% ? '' -% : '' -% ). -% ( $e->{'size'} -% ? '' -% : '' -% ). -% ( $e->{'data_style'} -% ? '<'. uc($e->{'data_style'}). '>' -% : '' -% ). -% $e->{'data'}. -% ( $e->{'data_style'} -% ? '{'data_style'}). '>' -% : '' -% ). -% ( $e->{'size'} ? '' : '' ). -% ( $e->{'link'} || $e->{'onclick'} -% ? '' -% : '' ). -% '
'; -% -% } else { -% $_; -% } -% } -% -% map { -% if ( ref($_) eq 'CODE' ) { -% &{$_}($row); -% } elsif ( ref($row) eq 'ARRAY' and -% $_ =~ /^\d+$/ ) { -% # for the 'straight SQL' case: specify fields -% # by position -% encode_entities($row->[$_]); -% } else { -% encode_entities($row->$_()); -% } -% } -% @{$opt{'fields'}} -% -% ) { -% -%# my $class = ( $field =~ /^agentnum ) -% || grep { $row->agentnum == $_ } -% @link_agentnums -% ) { -% -% $link = &{$link}($row) -% if ref($link) eq 'CODE'; -% -% $onclick = &{$onclick}($row) -% if ref($onclick) eq 'CODE'; -% $onclick = qq( onClick="$onclick") if $onclick; -% -% $tooltip = &{$tooltip}($row) -% if ref($tooltip) eq 'CODE'; -% $tooltip = qq! id="a$id" !. -% qq! onmouseover="return overlib(!. -% $m->interp->apply_escapes($tooltip, 'h', 'js_string'). -% qq!, FGCLASS, 'tooltip', REF, 'a$id', !. -% qq!REFC, 'LL', REFP, 'UL')"! if $tooltip; -% -% if ( $link ) { -% my( $url, $method ) = @{$link}; -% if ( ref($method) eq 'CODE' ) { -% $a = $url. &{$method}($row); -% } else { -% $a = $url. $row->$method(); -% } -% $a = qq(); -% } -% elsif ( $onclick ) { -% $a = qq(); -% } -% elsif ( $tooltip ) { -% $a = qq(); -% } -% $id++; - -% } -% -% } -% -% my $font = ''; -% my $color = shift @$colors; -% $color = &{$color}($row) if ref($color) eq 'CODE'; -% my $size = shift @$sizes; -% $size = &{$size}($row) if ref($size) eq 'CODE'; -% if ( $color || $size ) { -% $font = ''; -% } -% -% my($s, $es) = ( '', '' ); -% my $style = shift @$styles; -% $style = &{$style}($row) if ref($style) eq 'CODE'; -% if ( $style ) { -% $s = join( '', map "<$_>", split('', $style) ); -% $es = join( '', map "", split('', $style) ); -% } -% -% my $cstyle = shift @$cstyles; -% $cstyle = &{$cstyle}($row) if ref($cstyle) eq 'CODE'; -% $cstyle = qq(STYLE="$cstyle") -% if $cstyle; - - - -% } -% -% } else { -% -% foreach ( @$row ) { - -% } -% -% } - - - -% } - -% if ( $opt{'footer'} ) { - - - -% foreach my $footer ( @{ $opt{'footer'} } ) { -% $footer = &{$footer}() if ref($footer) eq 'CODE'; - -% } - - -% } - -
<% $cstyle %>><% $a %><% $font %><% $s %><% $field %><% $es %><% $font ? '' : '' %><% $a ? '' : '' %><% $_ %>
<% $footer %>
+ <& SELF:data_table, + rows => $rows, + null_link => $null_link, + link_agentnums => \@link_agentnums, + self_url => $self_url, + %opt + &> <% $pager %> @@ -521,14 +234,358 @@ my $confmax = $args{'confmax'}; my $maxrecords = $args{'maxrecords'}; my $offset = $args{'offset'}; my %opt = %{ $args{'opt'} }; -my $self_url = $opt{'url'} || $cgi->url('-path_info' => 1, '-full' =>1); -my $count_sth = dbh->prepare($opt{'count_query'}) - or die "Error preparing $opt{'count_query'}: ". dbh->errstr; -$count_sth->execute - or die "Error executing $opt{'count_query'}: ". $count_sth->errstr; -my $count_arrayref = $count_sth->fetchrow_arrayref; +# must be an arrayref of the row count, followed by any other totals +my $count_arrayref = $args{'totals'}; my $total = $count_arrayref->[0]; -my $id = 0; +# there used to be an option to override this, for highly dubious reasons +my $self_url = $cgi->url('-path_info' => 1, '-full' =>1); + +<%method data_table> +% my %opt = @_; +% my $rows = delete $opt{rows}; +% my $self_url = delete $opt{self_url}; +<& /elements/table-grid.html &> + +
+ +<%method header_row> +<%args> +@sort_fields +@header +@header2 => () + + +% my $h2 = 0; +% my $colspan = 0; +% my $order_by = $cgi->param('order_by'); +% my $self_url = $cgi->url('-path_info' => 1, '-full' =>1); +% foreach my $header ( @header ) { +% +% my $field = shift @sort_fields; +% +% $colspan-- if $colspan > 0; +% next if $colspan; +% +% my $label = ref($header) ? $header->{label} : $header; +% unless ( ref($field) || !$field ) { +% if ( $order_by eq $field ) { +% $cgi->param('order_by', "$field DESC"); +% } else { +% $cgi->param('order_by', $field); +% } +% $label = qq($label); +% } +% +% $colspan = ref($header) ? $header->{colspan} : 0; +% my $rowspan = 1; +% my $style = ''; +% if ( @header2 ) { +% if ( !length($header2[$h2]) ) { +% $rowspan = 2; +% splice @header2, $h2, 1; +% } else { +% $h2++; +% $style = 'STYLE="border-bottom: none"' +% } +% } + + <% $style %> + + > + <% $label %> + +% } + + +% if ( @header2 ) { + +% foreach my $header ( @header2 ) { +% my $label = ref($header) ? $header->{label} : $header; + + <% $label %> + +% } + +% } + +<%method data_rows> +<%args> +$rows => [] +%opt + +% my %align = ( +% 'l' => 'left', +% 'r' => 'right', +% 'c' => 'center', +% ' ' => '', +% '.' => '', +% ); +% if ( $opt{align} and !ref($opt{align}) ) { +% $opt{align} = [ map $align{$_}, split(//, $opt{align}) ]; +% } + +% my $i = 0; # for row striping # XXX CSS - nth-child +% foreach my $row ( @$rows ) { +% +% my $rowstyle = ''; +% if ( $row eq $opt{'footer_data'} ) { # XXX CSS - tfoot +% $rowstyle = ' STYLE="border-top: dashed 1px black; font-style: italic background-color=#dddddd"'; +% } +% +% my $trid = ''; +% if ( $opt{'link_field' } ) { +% my $link_field = $opt{'link_field'}; +% if ( ref($link_field) eq 'CODE' ) { +% $trid = &{$link_field}($row); +% } else { +% $trid = $row->$link_field(); +% } +% } + > + +% if ( $opt{'fields'} ) { +% +% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : ''; +% my $onclicks = $opt{'link_onclicks'} ? [ @{$opt{'link_onclicks'}} ] : []; +% my $tooltips = $opt{'tooltips'} ? [ @{$opt{'tooltips'}} ] : []; +% my $aligns = $opt{'align'} ? [ @{$opt{'align'}} ] : ''; +% my $colors = $opt{'color'} ? [ @{$opt{'color'}} ] : []; +% my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : []; +% my $styles = $opt{'style'} ? [ @{$opt{'style'}} ] : []; +% my $cstyles = $opt{'cell_style'} ? [ @{$opt{'cell_style'}} ] : []; +% +% foreach my $field ( +% +% map { +% if ( ref($_) eq 'ARRAY' ) { +% +% my $tableref = $_; +% +% ''. +% +% join('', map { +% +% my $rowref = $_; +% +% ''. +% +% join('', map { +% +% my $e = $_; +% +% ''; +% +% } @$rowref ). +% +% ''; +% } @$tableref ). +% +% '
{$_}), +% qw( align bgcolor colspan rowspan +% style valign width ) +% ). +% '>'. +% +% ( $e->{'link'} +% ? '' +% : '' +% ). +% ( $e->{'onclick'} # don't use with 'link' +% ? '' +% : '' +% ). +% ( $e->{'size'} +% ? '' +% : '' +% ). +% ( $e->{'data_style'} +% ? '<'. uc($e->{'data_style'}). '>' +% : '' +% ). +% $e->{'data'}. +% ( $e->{'data_style'} +% ? '{'data_style'}). '>' +% : '' +% ). +% ( $e->{'size'} ? '' : '' ). +% ( $e->{'link'} || $e->{'onclick'} +% ? '' +% : '' ). +% '
'; +% +% } else { +% $_; +% } +% } +% +% map { +% if ( ref($_) eq 'CODE' ) { +% &{$_}($row); +% } elsif ( ref($row) eq 'ARRAY' and +% $_ =~ /^\d+$/ ) { +% # for the 'straight SQL' case: specify fields +% # by position +% encode_entities($row->[$_]); +% } else { +% encode_entities($row->$_()); +% } +% } +% @{$opt{'fields'}} +% +% ) { +% +% my $class = ( $field =~ /^agentnum ) +% || grep { $row->agentnum == $_ } +% @{ $opt{link_agentnums} } +% ) { +% +% $link = &{$link}($row) +% if ref($link) eq 'CODE'; +% +% $onclick = &{$onclick}($row) +% if ref($onclick) eq 'CODE'; +% $onclick = qq( onClick="$onclick") if $onclick; +% +% $tooltip = &{$tooltip}($row) +% if ref($tooltip) eq 'CODE'; +% $tooltip = qq! title="<% $tooltip |h %>"!; +%# qq! onmouseover="return overlib(!. +%# $m->interp->apply_escapes($tooltip, 'h', 'js_string'). +%# qq!, FGCLASS, 'tooltip', REF, 'a$id', !. +%# qq!REFC, 'LL', REFP, 'UL')"! if $tooltip; +% +% if ( $link ) { +% my( $url, $method ) = @{$link}; +% if ( ref($method) eq 'CODE' ) { +% $a = $url. &{$method}($row); +% } else { +% $a = $url. $row->$method(); +% } +% $a = qq(); +% } +% elsif ( $onclick ) { +% $a = qq(); +% } +% elsif ( $tooltip ) { +% $a = qq(); +% } + +% } +% +% } +% +% my $font = ''; +% my $color = shift @$colors; +% $color = &{$color}($row) if ref($color) eq 'CODE'; +% my $size = shift @$sizes; +% $size = &{$size}($row) if ref($size) eq 'CODE'; +% if ( $color || $size ) { +% $font = ''; +% } +% +% my($s, $es) = ( '', '' ); +% my $style = shift @$styles; +% $style = &{$style}($row) if ref($style) eq 'CODE'; +% if ( $style ) { +% $s = join( '', map "<$_>", split('', $style) ); +% $es = join( '', map "", split('', $style) ); +% } +% +% my $cstyle = shift @$cstyles; +% $cstyle = &{$cstyle}($row) if ref($cstyle) eq 'CODE'; +% $cstyle = qq(STYLE="$cstyle") +% if $cstyle; + + + +% } +% +% } else { # not $opt{'fields'} +% +% foreach ( @$row ) { + +% } +% +% } + + + +% $i++; +% +% } # foreach $row + +<%method footer_row> +<%args> +$row +%opt + +%# don't try to respect all the styling options, just the ones that are +%# hard to replicate with CSS +% my %align = ( +% 'l' => 'left', +% 'r' => 'right', +% 'c' => 'center', +% ' ' => '', +% '.' => '', +% ); +% if ( $opt{align} and !ref($opt{align}) ) { +% $opt{align} = [ map $align{$_}, split(//, $opt{align}) ]; +% } +% my @aligns = @{ $opt{align} }; + + +% foreach my $footer ( @$row ) { +% $footer = &{$footer}() if ref($footer) eq 'CODE'; +% my $align = shift @aligns; +% my $style = ''; +% $style .= "text-align: $align;" if $align; + +% } + + + diff --git a/httemplate/search/elements/search-xls.html b/httemplate/search/elements/search-xls.html index 8334497d2..c4265e8c8 100644 --- a/httemplate/search/elements/search-xls.html +++ b/httemplate/search/elements/search-xls.html @@ -1,13 +1,10 @@ <%init> my %args = @_; -my $type = $args{'type'}; my $header = $args{'header'}; my $rows = $args{'rows'}; my %opt = %{ $args{'opt'} }; -my $style = $opt{'style'}; - my $override = scalar(@$rows) >= 65536 ? 'XLSX' : ''; my $format = $FS::CurrentUser::CurrentUser->spreadsheet_format($override); @@ -35,9 +32,38 @@ my $workbook = $format->{class}->new($XLS) my $title = $opt{'title'}; $title =~ s/[\[\]\:\*\?\/\/]//g; $title = substr($title, 0, 31); + +# append a single worksheet +$m->comp( 'SELF:worksheet', + workbook => $workbook, + title => $title, + opt => \%opt, + header => $header, + rows => $rows +); + +$workbook->close();# or die "Error creating .xls file: $!"; + +http_header('Content-Length' => length($data) ); +$m->clear_buffer(); +$m->print($data); + + +<%method worksheet> +<%args> +$workbook +$title +%opt +$header +$rows + +<%perl> + my $worksheet = $workbook->add_worksheet($title); -$worksheet->protect(); +#$worksheet->protect(); + +my $style = $opt{style}; my($r,$c) = (0,0); @@ -63,12 +89,29 @@ xl_parse_date_init(); my %bold_format; -my $writer = sub { +my @widths; + +my $writer; +$writer = sub { # Wrapper for $worksheet->write. # Do any massaging of the value/format here. my ($r, $c, $value, $format) = @_; #warn "writer called with format $format\n"; + if ( ref $value eq 'ARRAY' ) { + # imitate the write_row() method: write the array into a column starting + # with $r. + # (currently only used in the footer; to use it anywhere else we'd need + # some way to return the number of rows written) + foreach my $v (@$value) { + $writer->($r, $c, $v, $format); + $r++; + } + return; + } + + my $bold = 0; + my $date = 0; if ( $style->[$c] eq 'b' or $value =~ //i ) { # the only one in common use $value =~ s[][]ig; if ( !exists($bold_format{$format}) ) { @@ -77,6 +120,7 @@ my $writer = sub { $bold_format{$format}->set_bold(); } $format = $bold_format{$format}; + $bold = 1; } # convert HTML entities @@ -106,6 +150,7 @@ my $writer = sub { $date_format{$format}->set_num_format('mmm dd yyyy'); } $format = $date_format{$format}; + $date = 1; } else { # String: replace line breaks with newlines @@ -113,6 +158,14 @@ my $writer = sub { } #warn "writing with format $format\n"; $worksheet->write($r, $c, $value, $format); + + # estimate width + # use Font::TTFMetrics; # would work, but we can't redistribute the font... + my $width = length($value); + $width = 11 if $date; + $width *= 1.1 if $bold; + $width += 1; # pad it a little + $widths[$c] = $width if $width > ($widths[$c] || 0); }; $writer->( $r, $c++, $_, $header_format ) foreach @$header; @@ -170,9 +223,9 @@ if ( $opt{'footer'} ) { } } -$workbook->close();# or die "Error creating .xls file: $!"; - -http_header('Content-Length' => length($data) ); -$m->print($data); +for ( my $x = 0; $x < scalar @widths; $x++ ) { + $worksheet->set_column($x, $x, $widths[$x]); +} - + + diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index 64f3a665f..80bc89d3e 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -106,7 +106,8 @@ Example: 'disable_maxselect' => '', # set true to disable record/page selection 'disable_nonefound' => '', # set true to disable the "No matching Xs found" # message - + 'nohtmlheader' => '', # set true to remove the header and menu bar + #handling "disabled" fields in the records 'disableable' => 1, # set set to 1 (or column position for "disabled" # status col) to enable if this table has a "disabled" @@ -200,6 +201,7 @@ Example: confmax => $confmax, maxrecords => $maxrecords, offset => $offset, + totals => $totals, opt => \%opt ) %> @@ -220,16 +222,6 @@ if ( !$curuser->access_right('Download report data') ) { $type = 'html'; } -my %align = ( - 'l' => 'left', - 'r' => 'right', - 'c' => 'center', - ' ' => '', - '.' => '', -); -$opt{align} = [ map $align{$_}, split(//, $opt{align}) ], - unless !$opt{align} || ref($opt{align}); - if($type =~ /csv|xls/) { my $h = $opt{'header'}; my @del; @@ -253,6 +245,12 @@ $opt{disable_download} = 0 $opt{disable_download} = 1 if $opt{really_disable_download}; +# get our queries ready +my $query = $opt{query} or die "query required"; +my $count_query = $opt{count_query} or die "count_query required"; +# there was a default count_query but it hasn't worked in about ten years + +# set up agent restriction my @link_agentnums = (); my $null_link = ''; if ( $opt{'agent_virt'} ) { @@ -264,16 +262,16 @@ if ( $opt{'agent_virt'} ) { my $agentnums_sql = $curuser->agentnums_sql( 'null' => $opt{'agent_null'}, 'null_right' => $opt{'agent_null_right'}, - 'table' => $opt{'query'}{'table'}, + 'table' => $query->{'table'}, ); - $opt{'query'}{'extra_sql'} .= - ( $opt{'query'}{'extra_sql'} =~ /WHERE/i || keys %{$opt{'query'}{'hashref'}} - ? ' AND ' - : ' WHERE ' ). $agentnums_sql; - - $opt{'count_query'} .= - ( $opt{'count_query'} =~ /WHERE/i ? ' AND ' : ' WHERE ' ). $agentnums_sql; + if ( $query->{'extra_sql'} =~ /\bWHERE\b/i or keys %{$query->{hashref}} ) { + $query->{'extra_sql'} .= " AND $agentnums_sql"; + $count_query .= " AND $agentnums_sql"; + } else { + $query->{'extra_sql'} .= " WHERE $agentnums_sql"; + $count_query .= " WHERE $agentnums_sql"; + } if ( $opt{'agent_pos'} || $opt{'agent_pos'} eq '0' and scalar($curuser->agentnums) > 1 ) { @@ -304,13 +302,13 @@ if ( $opt{'disableable'} ) { unless ( $cgi->param('showdisabled') ) { #modify searches - $opt{'query'}{'hashref'}{'disabled'} = ''; - $opt{'query'}{'extra_sql'} =~ s/^\s*WHERE/ AND/i; + $query->{'hashref'}{'disabled'} = ''; + $query->{'extra_sql'} =~ s/^\s*\bWHERE\b/ AND/i; - my $table = $opt{'query'}{'table'}; + my $table = $query->{'table'}; - $opt{'count_query'} .= - ( $opt{'count_query'} =~ /WHERE/i ? ' AND ' : ' WHERE ' ). + $count_query .= + ( $count_query =~ /\bWHERE\b/i ? ' AND ' : ' WHERE ' ). "( $table.disabled = '' OR $table.disabled IS NULL )"; } elsif ( $opt{'disabled_statuspos'} @@ -357,10 +355,6 @@ my($confmax, $maxrecords, $offset ); unless ( $type =~ /^(csv|xml|\w*.xls)$/) { # html mode - unless (exists($opt{count_query}) && length($opt{count_query})) { - ( $opt{count_query} = $opt{query} ) =~ - s/^\s*SELECT\s*(.*?)\s+FROM\s/SELECT COUNT(*) FROM /i; #silly vim:/ - } unless ( $type eq 'html-print' ) { @@ -393,61 +387,56 @@ $order_by = $cgi->param('order_by') if $cgi->param('order_by'); my $header = [ map { ref($_) ? $_->{'label'} : $_ } @{$opt{header}} ]; my $rows; -if ( ref($opt{query}) ) { - - my @query; - if (ref($opt{query}) eq 'HASH') { - @query = ( $opt{query} ); - - if ( $order_by ) { - if ( $opt{query}->{'order_by'} ) { - if ( $opt{query}->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { - $opt{query}->{'order_by'} = "ORDER BY $order_by, $2"; - } else { - warn "unparsable query order_by: ". $opt{query}->{'order_by'}; - die "unparsable query order_by: ". $opt{query}->{'order_by'}; - } + +my @query; +if (ref($query) eq 'HASH') { + @query = $query; + + if ( $order_by ) { + if ( $query->{'order_by'} ) { + if ( $query->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { + $query->{'order_by'} = "ORDER BY $order_by, $2"; } else { - $opt{query}->{'order_by'} = "ORDER BY $order_by"; + warn "unparsable query order_by: ". $query->{'order_by'}; + die "unparsable query order_by: ". $query->{'order_by'}; } + } else { + $query->{'order_by'} = "ORDER BY $order_by"; } - - $opt{query}->{'order_by'} .= " $limit"; - - } elsif (ref($opt{query}) eq 'ARRAY') { - @query = @{ $opt{query} }; - } else { - die "invalid query reference"; } - if ( $opt{disableable} && ! $cgi->param('showdisabled') ) { - #%search = ( 'disabled' => '' ); - $opt{'query'}->{'hashref'}->{'disabled'} = ''; - $opt{'query'}->{'extra_sql'} =~ s/^\s*WHERE/ AND/i; - } + $query->{'order_by'} .= " $limit"; - #eval "use FS::$opt{'query'};"; - my @param = qw( select table addl_from hashref extra_sql order_by debug ); - $rows = [ qsearch( [ map { my $query = $_; - ({ map { $_ => $query->{$_} } @param }); - } - @query - ], - #'order_by' => $opt{order_by}. " ". $limit, - ) - ]; +} elsif (ref($query) eq 'ARRAY') { + # do we still use this? it was for the old 477 report. + @query = @{ $query }; } else { - my $sth = dbh->prepare("$opt{'query'} $limit") - or die "Error preparing $opt{'query'}: ". dbh->errstr; - $sth->execute - or die "Error executing $opt{'query'}: ". $sth->errstr; - - #can get # of rows without fetching them all? - $rows = $sth->fetchall_arrayref; + die "invalid query reference"; +} - $header ||= $sth->{NAME}; +if ( $opt{disableable} && ! $cgi->param('showdisabled') ) { + #%search = ( 'disabled' => '' ); + $opt{'query'}->{'hashref'}->{'disabled'} = ''; + $opt{'query'}->{'extra_sql'} =~ s/^\s*WHERE/ AND/i; } +#eval "use FS::$opt{'query'};"; +my @param = qw( select table addl_from hashref extra_sql order_by debug ); +$rows = [ qsearch( [ map { my $query = $_; + ({ map { $_ => $query->{$_} } @param }); + } + @query + ], + #'order_by' => $opt{order_by}. " ". $limit, + ) + ]; + +# run the count query to get number of rows and other totals +my $count_sth = dbh->prepare($count_query); +$count_sth->execute + or die "Error executing '$count_query': ".$count_sth->errstr; +my $totals = $count_sth->fetchrow_arrayref; + push @$rows, $opt{'footer_data'} if $opt{'footer_data'}; -- cgit v1.2.1 From 1fa379f596dd95694ed4e37a19afd44d8e47e82a Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Mon, 29 Jun 2015 07:04:53 -0400 Subject: Ticket #36843 Fix incorrect call error --- FS/FS/cdr/broadsoft.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FS/FS/cdr/broadsoft.pm b/FS/FS/cdr/broadsoft.pm index b5d75f13f..a6f4d01c0 100644 --- a/FS/FS/cdr/broadsoft.pm +++ b/FS/FS/cdr/broadsoft.pm @@ -39,7 +39,8 @@ use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker ); skip(17), sub { my($cdr, $accountcode) = @_; if ($cdr->is_tollfree){ - $cdr->set('accountcode', $cdr->dst); + my $dst = substr($cdr->dst,0,32); + $cdr->set('accountcode', $dst); } else { $cdr->set('accountcode', $accountcode); }}, -- cgit v1.2.1 From c9a2b10e9976847e6d96cb6998300ef73e84269a Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 29 Jun 2015 18:59:34 -0700 Subject: xss --- httemplate/browse/cust_attachment.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/browse/cust_attachment.html b/httemplate/browse/cust_attachment.html index 9d62e5609..f81ec1b6b 100755 --- a/httemplate/browse/cust_attachment.html +++ b/httemplate/browse/cust_attachment.html @@ -101,7 +101,7 @@ my $orderby = $cgi->param('orderby') || 'custnum'; my $sub_cust = sub { my $c = qsearchs('cust_main', { custnum => shift->custnum } ); - return $c ? $c->name : '(not found)'; + return $c ? encode_entities($c->name) : '(not found)'; }; my $sub_date = sub { -- cgit v1.2.1 From 18dac45495554fd8a28eab2a50f9af39953d37ca Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 29 Jun 2015 20:32:46 -0700 Subject: silence unnecessary but too-scary warning about CGI::param in list context --- FS/FS/Mason/Request.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FS/FS/Mason/Request.pm b/FS/FS/Mason/Request.pm index 62bf670b9..2cf1ed9e0 100644 --- a/FS/FS/Mason/Request.pm +++ b/FS/FS/Mason/Request.pm @@ -111,6 +111,10 @@ sub freeside_setup { FS::Trace->log(' UTF-8-decoding form data'); # foreach my $param ( $cgi->param ) { + + #we can't switch to multi_param until we're done supporting deb 7 + local($CGI::LIST_CONTEXT_WARN) = 0; + my @values = $cgi->param($param); next if $cgi->uploadInfo($values[0]); #warn $param; -- cgit v1.2.1 From 633af1c0e996b16d0e18a7cdff05490ea7d46ca6 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 29 Jun 2015 21:21:53 -0700 Subject: setup+recur total on quotations, RT#36997 --- FS/FS/quotation.pm | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index 8843a8709..7bf5ecb61 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -260,15 +260,30 @@ sub _items_sections { my %opt = @_; my $escape = $opt{escape}; # the only one we care about - my %subtotals; # package frequency => subtotal + my %subtotals = (); # package frequency => subtotal + my $disable_total = 0; foreach my $pkg ($self->quotation_pkg) { - my $recur_freq = $pkg->part_pkg->freq; + + my $part_pkg = $pkg->part_pkg; + + my $recur_freq = $part_pkg->freq; ($subtotals{0} ||= 0) += $pkg->setup + $pkg->setup_tax; ($subtotals{$recur_freq} ||= 0) += $pkg->recur + $pkg->recur_tax; + + #this is a shitty hack based on what's in part_pkg/ at the moment + # but its good enough for the 99% common case of preventing totals from + # displaying for prorate packages + $disable_total = 1 + if $part_pkg->plan =~ /^prorate/ + || $part_pkg->plan eq 'agent' + || $part_pkg->plan =~ /^torrus/ + || $part_pkg->option('sync_bill_date'); + } my @pkg_freq_order = keys %{ FS::Misc->pkg_freqs }; my @sections; + my $no_recurring = 0; foreach my $freq (keys %subtotals) { next if $subtotals{$freq} == 0; @@ -279,6 +294,7 @@ sub _items_sections { if ( $freq eq '0' ) { if ( scalar(keys(%subtotals)) == 1 ) { # there are no recurring packages + $no_recurring = 1; $desc = $self->mt('Charges'); } else { $desc = $self->mt('Setup Charges'); @@ -295,6 +311,18 @@ sub _items_sections { 'subtotal' => sprintf('%.2f',$subtotals{$freq}), }; } + + unless ( $disable_total || $no_recurring ) { + my $total = 0; + $total += $_ for values %subtotals; + push @sections, { + 'description' => 'First payment', + 'sort_weight' => 0, + 'category' => 'Total category', #required but what's it used for? + 'subtotal' => sprintf('%.2f',$total) + }; + } + return \@sections, []; } -- cgit v1.2.1 From d13dae1c37c36c27f1ac9fd134c5d8b3a4fb9754 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Tue, 30 Jun 2015 03:24:08 -0500 Subject: RT#29285: State field not needed for New Zealand --- FS/FS/Conf.pm | 15 +++---- FS/FS/Schema.pm | 4 +- FS/FS/UI/Web/small_custview.pm | 5 ++- FS/FS/cust_location.pm | 67 +++++++++++++++++++++++++--- FS/FS/cust_pay_batch.pm | 6 ++- httemplate/edit/cust_main/basics.html | 7 ++- httemplate/elements/city.html | 5 +++ httemplate/elements/location.html | 13 +++--- httemplate/elements/standardize_locations.js | 4 +- httemplate/view/cust_main/contacts.html | 2 +- 10 files changed, 97 insertions(+), 31 deletions(-) diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 17030d20c..b384d85af 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -3382,14 +3382,6 @@ and customer address. Include units.', 'per_agent' => 1, }, - { - 'key' => 'city_not_required', - 'section' => 'required', - 'description' => 'Turn off requirement for a City to be entered for billing & shipping addresses', - 'type' => 'checkbox', - 'per_agent' => 1, - }, - { 'key' => 'echeck-void', 'section' => 'deprecated', @@ -4524,6 +4516,13 @@ and customer address. Include units.', 'type' => 'checkbox', }, + { + 'key' => 'cust_main-no_city_in_address', + 'section' => 'UI', + 'description' => 'Turn off City for billing & shipping addresses', + 'type' => 'checkbox', + }, + { 'key' => 'census_year', 'section' => 'UI', diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 0bdc99539..24ca85821 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -2009,7 +2009,7 @@ sub tables_hashref { 'locationname', 'varchar', 'NULL', $char_d, '', '', 'address1', 'varchar', '', $char_d, '', '', 'address2', 'varchar', 'NULL', $char_d, '', '', - 'city', 'varchar', '', $char_d, '', '', + 'city', 'varchar', 'NULL', $char_d, '', '', 'county', 'varchar', 'NULL', $char_d, '', '', 'state', 'varchar', 'NULL', $char_d, '', '', 'zip', 'varchar', 'NULL', 10, '', '', @@ -2639,7 +2639,7 @@ sub tables_hashref { 'first', 'varchar', '', $char_d, '', '', 'address1', 'varchar', '', $char_d, '', '', 'address2', 'varchar', 'NULL', $char_d, '', '', - 'city', 'varchar', '', $char_d, '', '', + 'city', 'varchar', 'NULL', $char_d, '', '', 'state', 'varchar', 'NULL', $char_d, '', '', 'zip', 'varchar', 'NULL', 10, '', '', 'country', 'char', '', 2, '', '', diff --git a/FS/FS/UI/Web/small_custview.pm b/FS/FS/UI/Web/small_custview.pm index 72af03ea4..329e5f7eb 100644 --- a/FS/FS/UI/Web/small_custview.pm +++ b/FS/FS/UI/Web/small_custview.pm @@ -129,7 +129,8 @@ sub small_custview { $html .= encode_entities($cust_main->address1). '
'; $html .= encode_entities($cust_main->address2). '
' if $cust_main->address2; - $html .= encode_entities($cust_main->city). ', '. $cust_main->state. ' '. + $html .= encode_entities($cust_main->city) . ', ' if $cust_main->city; + $html .= $cust_main->state. ' '. $cust_main->zip. '
'; $html .= $cust_main->country. '
' if $cust_main->country && $cust_main->country ne $countrydefault; @@ -162,7 +163,7 @@ sub small_custview { $cust_main->ship_company, $ship->address1, $ship->address2, - ($ship->city . ', ' . $ship->state . ' ' . $ship->zip), + (($ship->city ? $ship->city . ', ' : '') . $ship->state . ' ' . $ship->zip), ($ship->country eq $countrydefault ? '' : $ship->country ), ); diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm index a863e5df7..9ab94f207 100644 --- a/FS/FS/cust_location.pm +++ b/FS/FS/cust_location.pm @@ -68,7 +68,7 @@ Address line two (optional) =item city -City +City (optional only if cust_main-no_city_in_address config is set) =item county @@ -149,9 +149,20 @@ sub find_or_insert { warn "find_or_insert:\n".Dumper($self) if $DEBUG; - my @essential = (qw(custnum address1 address2 city county state zip country + my @essential = (qw(custnum address1 address2 county state zip country location_number location_type location_kind disabled)); + # Just in case this conf was accidentally/temporarily set, + # we'll never overwrite existing city; see city method + if ($conf->exists('cust_main-no_city_in_address')) { + warn "Warning: find_or_insert specified city when cust_main-no_city_in_address was configured" + if $self->get('city'); + $self->set('city',''); # won't end up in %nonempty, hence old value is preserved + } else { + # otherwise, of course, city is essential + push(@essential,'city') + } + # I don't think this is necessary #if ( !$self->coord_auto and $self->latitude and $self->longitude ) { # push @essential, qw(latitude longitude); @@ -207,6 +218,11 @@ otherwise returns false. sub insert { my $self = shift; + # Ideally, this should never happen, + # but throw a warning and save the value anyway, to avoid data loss + warn "Warning: inserting city when cust_main-no_city_in_address is configured" + if $conf->exists('cust_main-no_city_in_address') && $self->get('city'); + if ( $self->censustract ) { $self->set('censusyear' => $conf->config('census_year') || 2012); } @@ -271,6 +287,15 @@ sub replace { my $self = shift; my $old = shift; $old ||= $self->replace_old; + + # Just in case this conf was accidentally/temporarily set, + # we'll never overwrite existing city; see city method + if ($conf->exists('cust_main-no_city_in_address')) { + warn "Warning: replace attempted to change city when cust_main-no_city_in_address was configured" + if $self->get('city') && ($old->get('city') != $self->get('city')); + $self->set('city',$old->get('city')); + } + # the following fields are immutable foreach (qw(address1 address2 city state zip country)) { if ( $self->$_ ne $old->$_ ) { @@ -330,7 +355,9 @@ sub check { || $self->ut_textn('locationname') || $self->ut_text('address1') || $self->ut_textn('address2') - || $self->ut_text('city') + || ($conf->exists('cust_main-no_city_in_address') + ? $self->ut_textn('city') + : $self->ut_text('city')) || $self->ut_textn('county') || $self->ut_textn('state') || $self->ut_country('country') @@ -392,6 +419,30 @@ sub check { $self->SUPER::check; } +=item city + +When the I config is set, the +city method will return a blank string no matter the previously +set value of the field. You can still use the get method to +access the contents of the field directly. + +Just in case this config was accidentally/temporarily set, +we'll never overwrite existing city while the config is active. +L will throw a warning if passed any true value for city, +ignore the city field when finding, and preserve the existing value. +L will only throw a warning if passed a true value that is +different than the existing value of city, and will preserve the existing value. +L will throw a warning but still insert a true city value, +to avoid unnecessary data loss. + +=cut + +sub city { + my $self = shift; + return '' if $conf->exists('cust_main-no_city_in_address'); + return $self->get('city'); +} + =item country_full Returns this locations's full country name @@ -731,25 +782,29 @@ names in order. =cut +### Is this actually used for anything anymore? Grep doesn't show anything... sub in_county_sql { # replaces FS::cust_pkg::location_sql my ($class, %opt) = @_; my $ornull = $opt{ornull} ? ' OR ? IS NULL' : ''; my $x = $ornull ? 3 : 2; my @fields = (('district') x 3, - ('city') x 3, ('county') x $x, ('state') x $x, 'country'); + unless ($conf->exists('cust_main-no_city_in_address')) { + push( @fields, (('city') x 3) ); + } + my $text = (driver_name =~ /^mysql/i) ? 'char' : 'text'; my @where = ( "cust_location.district = ? OR ? = '' OR CAST(? AS $text) IS NULL", - "cust_location.city = ? OR ? = '' OR CAST(? AS $text) IS NULL", "cust_location.county = ? OR (? = '' AND cust_location.county IS NULL) $ornull", "cust_location.state = ? OR (? = '' AND cust_location.state IS NULL ) $ornull", - "cust_location.country = ?" + "cust_location.country = ?", + "cust_location.city = ? OR ? = '' OR CAST(? AS $text) IS NULL" ); my $sql = join(' AND ', map "($_)\n", @where); if ( $opt{param} ) { diff --git a/FS/FS/cust_pay_batch.pm b/FS/FS/cust_pay_batch.pm index 13b2eefe5..8f31e4dda 100644 --- a/FS/FS/cust_pay_batch.pm +++ b/FS/FS/cust_pay_batch.pm @@ -129,6 +129,8 @@ and replace methods. sub check { my $self = shift; + my $conf = new FS::Conf; + my $error = $self->ut_numbern('paybatchnum') || $self->ut_numbern('trancode') #deprecated @@ -137,7 +139,9 @@ sub check { || $self->ut_number('custnum') || $self->ut_text('address1') || $self->ut_textn('address2') - || $self->ut_text('city') + || ($conf->exists('cust_main-no_city_in_address') + ? $self->ut_textn('city') + : $self->ut_text('city')) || $self->ut_textn('state') ; diff --git a/httemplate/edit/cust_main/basics.html b/httemplate/edit/cust_main/basics.html index e16aafafc..32a03bbe6 100644 --- a/httemplate/edit/cust_main/basics.html +++ b/httemplate/edit/cust_main/basics.html @@ -46,7 +46,7 @@ var ship_locked_agents = <% encode_json(\%ship_locked_agents) %>; var ship_fields = [ - 'locationname', 'address1', 'city', 'state', 'zip', 'country', + 'locationname', 'address1',<% $conf->exists('cust_main-no_city_in_address') ? '' : q( 'city',) %> 'state', 'zip', 'country', 'latitude', 'longitude', 'district' ]; @@ -307,7 +307,10 @@ foreach (qsearch('agent',{})) { my $agent_ship_location = $cust_main->ship_location; $ship_locked_agents{$agentnum} = +{ map { $_ => $agent_ship_location->$_ } - qw(locationname address1 city state zip country latitude longitude district) + ( + qw(locationname address1 state zip country latitude longitude district), + ($conf->exists('cust_main-no_city_in_address') ? () : 'city') + ) }; } diff --git a/httemplate/elements/city.html b/httemplate/elements/city.html index 5f4d4e09e..4e9a60940 100644 --- a/httemplate/elements/city.html +++ b/httemplate/elements/city.html @@ -159,6 +159,11 @@ my $disable_select = 1 if $conf->config('tax_district_method'); $opt{'disable_empty'} = 1 unless exists($opt{'disable_empty'}); +if ($conf->exists('cust_main-no_city_in_address')) { + $opt{'disable_text'} = 1; + $disable_select = 1; +} + my $text_style = $opt{'style'} ? [ @{ $opt{'style'} } ] : []; my $select_style = $opt{'style'} ? [ @{ $opt{'style'} } ] : []; diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index 90f20265a..b5f0a963c 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -169,15 +169,14 @@ Example:
-% if ($conf->exists('city_not_required')) { - -%} else { - <<%$th%> ALIGN="right"><%$r%><% mt('City') |h %>> + <<%$th%> ALIGN="right"> +% unless ($conf->exists('cust_main-no_city_in_address')) { + <% $r %><% mt('City') |h %> +% } + > - <<%$th%> ALIGN="right" WIDTH="1" ID="<%$pre%>countylabel" <%$county_style%>><%$r%>County> -% } <<%$th%> ALIGN="right" WIDTH="1"><%$r%><% mt('State') |h %>> -- cgit v1.2.1 From cc577407362f8b64817afbe89d23888a0a5b63f9 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Tue, 30 Jun 2015 05:29:49 -0500 Subject: RT#30705: Change contract end date when changing packages [got rid of chronology requirements] --- FS/FS/cust_pkg.pm | 3 --- httemplate/edit/process/change-cust_pkg.html | 8 +------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 5bd307b0f..8e8872871 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -1986,9 +1986,6 @@ sub _check_change { #option shouldn't be passed, throw error if it's non-empty return "Cannot add contract end date when changing packages " . $self->pkgnum; } - if ($opt->{'start_date'} && ($opt->{'contract_end'} < $opt->{'start_date'})) { - return "Contract end date is before change date"; - } } return ''; } diff --git a/httemplate/edit/process/change-cust_pkg.html b/httemplate/edit/process/change-cust_pkg.html index c066ff5b0..046a9795c 100644 --- a/httemplate/edit/process/change-cust_pkg.html +++ b/httemplate/edit/process/change-cust_pkg.html @@ -41,15 +41,9 @@ if ( $cgi->param('locationnum') == -1 ) { } my $error; -my $contract_end; my $now = time; if (defined($cgi->param('contract_end'))) { - $contract_end = parse_datetime($cgi->param('contract_end')); - if ($contract_end < $now) { - $error = "Contract end ".$cgi->param('contract_end')." is in the past."; - } else { - $change{'contract_end'} = $contract_end; - } + $change{'contract_end'} = parse_datetime($cgi->param('contract_end')); } unless ($error) { -- cgit v1.2.1 From a8bdd6bf5d005af9dff6b53047ba378ef6912302 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 30 Jun 2015 09:56:46 -0700 Subject: fix processing of aligns with agent-virt, #25944 --- httemplate/search/elements/search.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index 80bc89d3e..c58e63698 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -245,6 +245,18 @@ $opt{disable_download} = 0 $opt{disable_download} = 1 if $opt{really_disable_download}; +# split/map aligns here, so that agent_virt can add a column +# (search-html.html will split aligns also if they aren't already split) +my %align = ( + 'l' => 'left', + 'r' => 'right', + 'c' => 'center', + ' ' => '', + '.' => '', +); +$opt{align} = [ map $align{$_}, split(//, $opt{align}) ], + unless !$opt{align} || ref($opt{align}); + # get our queries ready my $query = $opt{query} or die "query required"; my $count_query = $opt{count_query} or die "count_query required"; -- cgit v1.2.1 From 39501b4ff6c6cd9ac3cfe7ad313affe049e18994 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 30 Jun 2015 12:14:19 -0700 Subject: include discounts in gross sales reports, #25943 --- FS/FS/Report/Table.pm | 30 +++++++ FS/FS/cust_bill/Search.pm | 91 +++++++++++++------ httemplate/graph/money_time.cgi | 18 ++-- httemplate/search/cust_bill.html | 135 ++++++++++++++++------------ httemplate/search/elements/search-html.html | 18 +++- httemplate/search/report_cust_bill.html | 3 +- 6 files changed, 200 insertions(+), 95 deletions(-) diff --git a/FS/FS/Report/Table.pm b/FS/FS/Report/Table.pm index 479747307..eef983d68 100644 --- a/FS/FS/Report/Table.pm +++ b/FS/FS/Report/Table.pm @@ -266,6 +266,36 @@ sub netrefunds { ); } +=item discounted: The sum of discounts on invoices in the period. + +=cut + +sub discounted { + my( $self, $speriod, $eperiod, $agentnum, %opt) = @_; + $self->scalar_sql('SELECT SUM(cust_bill_pkg_discount.amount) + FROM cust_bill_pkg_discount + JOIN cust_bill_pkg USING ( billpkgnum ) + JOIN cust_bill USING ( invnum ) + JOIN cust_main USING ( custnum ) + WHERE '. $self->in_time_period_and_agent( $speriod, + $eperiod, + $agentnum, + 'cust_bill._date' + ). + $self->for_opts(%opt) + ); +} + +=item gross: invoiced + discounted + +=cut + +sub gross { + my( $self, $speriod, $eperiod, $agentnum, %opt) = @_; + $self->invoiced( $speriod, $eperiod, $agentnum, %opt) + + $self->discounted( $speriod, $eperiod, $agentnum, %opt); +} + #XXX docs #these should be auto-generated or $AUTOLOADed or something diff --git a/FS/FS/cust_bill/Search.pm b/FS/FS/cust_bill/Search.pm index 2a67529c1..62c55d6df 100644 --- a/FS/FS/cust_bill/Search.pm +++ b/FS/FS/cust_bill/Search.pm @@ -6,14 +6,15 @@ use FS::UI::Web; use FS::Record qw( qsearchs dbh ); use FS::cust_main; use FS::access_user; +use FS::Conf; =item search HASHREF (Class method) -Returns a qsearch hash expression to search for parameters specified in HASHREF. -In addition to all parameters accepted by search_sql_where, the following -additional parameters valid: +Returns a qsearch hash expression to search for parameters specified in +HASHREF. In addition to all parameters accepted by search_sql_where, the +following additional parameters valid: =over 4 @@ -38,35 +39,77 @@ sub search { my $join_cust_main = FS::UI::Web::join_cust_main('cust_bill'); + # get discounted, credited, and paid amounts here, for use in report + # + # Testing shows that this is by far the most efficient way to do the + # joins. In particular it's almost 100x faster to join to an aggregate + # query than to put the subquery in a select expression. It also makes + # it more convenient to do arithmetic between columns, use them as sort + # keys, etc. + # + # Each ends with a RIGHT JOIN cust_bill so that it includes all invnums, + # even if they have no discounts/credits/payments; the total amount is then + # coalesced to zero. + my $join = "$join_cust_main + JOIN ( + SELECT COALESCE(SUM(cust_bill_pkg_discount.amount), 0) AS discounted, + invnum + FROM cust_bill_pkg_discount + JOIN cust_bill_pkg USING (billpkgnum) + RIGHT JOIN cust_bill USING (invnum) + GROUP BY invnum + ) AS _discount USING (invnum) + JOIN ( + SELECT COALESCE(SUM(cust_credit_bill.amount), 0) AS credited, invnum + FROM cust_credit_bill + RIGHT JOIN cust_bill USING (invnum) + GROUP BY invnum + ) AS _credit USING (invnum) + JOIN ( + SELECT COALESCE(SUM(cust_bill_pay.amount), 0) AS paid, invnum + FROM cust_bill_pay + RIGHT JOIN cust_bill USING (invnum) + GROUP BY invnum + ) AS _pay USING (invnum) + "; + unless ( $count_query ) { + + my $money = (FS::Conf->new->config('money_char') || '$') . '%.2f'; + $count_query = 'SELECT COUNT(*), '. join(', ', map "SUM($_)", - ( 'charged', - FS::cust_bill->net_sql, - FS::cust_bill->owed_sql, + ( 'charged + discounted', + 'discounted', + 'credited', + 'charged - credited', + 'charged - credited - paid', ) ); - $count_addl = [ '$%.2f invoiced (gross)', - '$%.2f invoiced (net)', - '$%.2f outstanding balance', + $count_addl = [ "$money sales (gross)", + "− $money discounted", + "− $money credited", + "= $money sales (net)", + "$money outstanding balance", ]; } - $count_query .= " FROM cust_bill $join_cust_main $extra_sql"; + $count_query .= " FROM cust_bill $join $extra_sql"; #$sql_query = +{ 'table' => 'cust_bill', - 'addl_from' => $join_cust_main, + 'addl_from' => $join, 'hashref' => {}, 'select' => join(', ', 'cust_bill.*', #( map "cust_main.$_", qw(custnum last first company) ), 'cust_main.custnum as cust_main_custnum', FS::UI::Web::cust_sql_fields(), - #$class->owed_sql. ' AS owed', - #$class->net_sql. ' AS net', - FS::cust_bill->owed_sql. ' AS owed', - FS::cust_bill->net_sql. ' AS net', + '(charged + discounted) as gross', + 'discounted', + 'credited', + '(charged - credited) as net', + '(charged - credited - paid) as owed', ), 'extra_sql' => $extra_sql, 'order_by' => 'ORDER BY '. ( $params->{'order_by'} || 'cust_bill._date' ), @@ -179,13 +222,7 @@ sub search_sql_where { @classnum = grep /^(\d*)$/, @classnum; if ( @classnum ) { - push @search, '( '. join(' OR ', map { - $_ ? "cust_main.classnum = $_" - : "cust_main.classnum IS NULL" - } - @classnum - ). - ' )'; + push @search, 'COALESCE(cust_main.classnum, 0) IN ('.join(',', @classnum).')'; } } @@ -206,6 +243,7 @@ sub search_sql_where { push @search, "cust_bill.invnum <= $1"; } + # these are from parse_lt_gt, and should already be sanitized #charged if ( $param->{charged} ) { my @charged = ref($param->{charged}) @@ -216,21 +254,22 @@ sub search_sql_where { @charged; } - my $owed_sql = FS::cust_bill->owed_sql; + #my $owed_sql = FS::cust_bill->owed_sql; + my $owed_sql = '(cust_bill.charged - credited - paid)'; + my $net_sql = '(cust_bill.charged - credited)'; #owed if ( $param->{owed} ) { my @owed = ref($param->{owed}) ? @{ $param->{owed} } : ($param->{owed}); - push @search, map { s/^owed/$owed_sql/; $_; } - @owed; + push @search, map { s/^owed/$owed_sql/ } @owed; } #open/net flags push @search, "0 != $owed_sql" if $param->{'open'}; - push @search, '0 != '. FS::cust_bill->net_sql + push @search, "0 != $net_sql" if $param->{'net'}; #days diff --git a/httemplate/graph/money_time.cgi b/httemplate/graph/money_time.cgi index 9071fc7b9..b44adeaf8 100644 --- a/httemplate/graph/money_time.cgi +++ b/httemplate/graph/money_time.cgi @@ -39,8 +39,10 @@ if ( $cgi->param('refnum') =~ /^(\d+)$/ ) { } my $referralname = $part_referral ? $part_referral->referral.' ' : ''; - -my @items = qw( invoiced netsales +# need to clean this up. the false symmetry of "gross" and "net" everything +# makes it aesthetically hard to make this report more useful. +my @items = qw( gross netsales + discounted credits netcredits payments receipts refunds netrefunds @@ -51,8 +53,9 @@ if ( $cgi->param('12mo') == 1 ) { } my %label = ( - 'invoiced' => 'Gross Sales', + 'gross' => 'Gross Sales', 'netsales' => 'Net Sales', + 'discounted' => 'Discounts', 'credits' => 'Gross Credits', 'netcredits' => 'Net Credits', 'payments' => 'Gross Receipts', @@ -64,8 +67,9 @@ my %label = ( ); my %graph_suffix = ( - 'invoiced' => ' (invoiced)', + 'gross' => ' (invoiced + discounts)', 'netsales' => ' (invoiced - applied credits)', + 'discounted' => ' (discounts)', 'credits' => ' (credited)', 'netcredits' => ' (applied credits)', 'payments' => ' (payments)', @@ -84,7 +88,7 @@ $graph_label{$_.'_12mo'} = $graph_label{$_}. " (prev 12 months)" foreach keys %graph_label; my %color = ( - 'invoiced' => '9999ff', #light blue + 'gross' => '9999ff', #light blue 'netsales' => '0000cc', #blue 'credits' => 'ff9999', #light red 'netcredits' => 'cc0000', #red @@ -94,6 +98,7 @@ my %color = ( 'netrefunds' => 'ff9900', #orange 'cashflow' => '99cc33', #light olive 'netcashflow' => '339900', #olive + 'discounted' => 'cc33cc', #purple-ish? ); $color{$_.'_12mo'} = $color{$_} foreach keys %color; @@ -102,7 +107,7 @@ my $ar = "agentnum=$agentnum;refnum=$refnum"; $ar .= ";cust_classnum=$_" foreach @classnums; my %link = ( - 'invoiced' => "${p}search/cust_bill.html?$ar;", + 'gross' => "${p}search/cust_bill.html?$ar;", 'netsales' => "${p}search/cust_bill.html?$ar;net=1;", 'credits' => "${p}search/cust_credit.html?$ar;", 'netcredits' => "${p}search/cust_credit_bill.html?$ar;", @@ -110,6 +115,7 @@ my %link = ( 'receipts' => "${p}search/cust_bill_pay.html?$ar;", 'refunds' => "${p}search/cust_refund.html?magic=_date;$ar;", 'netrefunds' => "${p}search/cust_credit_refund.html?$ar;", + 'discounted' => "${p}search/cust_bill_pkg_discount.html?$ar;", ); # XXX link 12mo? diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html index 082073339..662673676 100755 --- a/httemplate/search/cust_bill.html +++ b/httemplate/search/cust_bill.html @@ -1,61 +1,82 @@ <& elements/search.html, - 'title' => emt('Invoice Search Results'), - 'html_init' => $html_init, - 'menubar' => $menubar, - 'name' => 'invoices', - 'query' => $sql_query, - 'count_query' => $count_query, - 'count_addl' => $count_addl, - 'redirect' => $link, - 'header' => [ emt('Invoice #'), - emt('Balance'), - emt('Net Amount'), - emt('Gross Amount'), - emt('Date'), - FS::UI::Web::cust_header(), - ], - 'fields' => [ - 'display_invnum', - sub { sprintf($money_char.'%.2f', shift->get('owed') ) }, - sub { sprintf($money_char.'%.2f', shift->get('net') ) }, - sub { sprintf($money_char.'%.2f', shift->charged ) }, - sub { time2str('%b %d %Y', shift->_date ) }, - \&FS::UI::Web::cust_fields, - ], - 'sort_fields' => [ - 'COALESCE( agent_invid, invnum )', - FS::cust_bill->owed_sql, - FS::cust_bill->net_sql, - 'charged', - '_date', - ], - 'align' => 'rrrrl'.FS::UI::Web::cust_aligns(), - 'links' => [ - $link, - $link, - $link, - $link, - $link, - ( map { $_ ne 'Cust. Status' ? $clink : '' } - FS::UI::Web::cust_header() - ), - ], - 'color' => [ - '', - '', - '', - '', - '', - FS::UI::Web::cust_colors(), - ], - 'style' => [ - '', - '', - '', - '', - '', - FS::UI::Web::cust_styles(), - ], + 'title' => emt('Invoice Search Results'), + 'html_init' => $html_init, + 'menubar' => $menubar, + 'name' => 'invoices', + 'query' => $sql_query, + 'count_query' => $count_query, + 'count_addl' => $count_addl, + 'redirect' => $link, + 'header' => [ emt('Invoice #'), + emt('Gross Amount'), + emt('Discount'), + emt('Credits'), + emt('Net Amount'), + emt('Balance'), + emt('Date'), + FS::UI::Web::cust_header(), + ], + 'fields' => [ + 'display_invnum', + 'gross', + 'discounted', + 'credited', + 'net', + 'owed', + sub { time2str('%b %d %Y', shift->_date ) }, + \&FS::UI::Web::cust_fields, + ], + 'sort_fields' => [ + 'COALESCE( agent_invid, invnum )', + 'gross', + 'discounted', + 'credited', + 'net', + 'owed', + '_date', + ], + 'format' => [ + '', + $money_char.'%.2f', + $money_char.'%.2f', + $money_char.'%.2f', + $money_char.'%.2f', + $money_char.'%.2f', + '', + ], + 'align' => 'rrrrrrl'.FS::UI::Web::cust_aligns(), + 'links' => [ + $link, + $link, + $link, + $link, + $link, + $link, + $link, + ( map { $_ ne 'Cust. Status' ? $clink : '' } + FS::UI::Web::cust_header() + ), + ], + 'color' => [ + '', + '', + '', + '', + '', + '', + '', + FS::UI::Web::cust_colors(), + ], + 'style' => [ + '', + '', + '', + '', + '', + '', + '', + FS::UI::Web::cust_styles(), + ], &> <%init> diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index d8ab30a32..6121aea94 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -377,9 +377,16 @@ $rows => [] % my $sizes = $opt{'size'} ? [ @{$opt{'size'}} ] : []; % my $styles = $opt{'style'} ? [ @{$opt{'style'}} ] : []; % my $cstyles = $opt{'cell_style'} ? [ @{$opt{'cell_style'}} ] : []; +% my $formats = $opt{'format'} ? [ @{$opt{'format'}} ] : []; % % foreach my $field ( % +% # if the value of the field is an arrayref, then construct a table in +% # the cell. +% # if it's a (non-empty) scalar, and a format has been specified, then +% # format the scalar with that. +% # otherwise, just output the value. +% # XXX we should also do date formats like this % map { % if ( ref($_) eq 'ARRAY' ) { % @@ -443,10 +450,17 @@ $rows => [] % '
<% $cstyle %>><% $a %><% $font %><% $s %><% $field %><% $es %><% $font ? '' : '' %><% $a ? '' : '' %><% $_ %>
<% $footer %>
<% include('/elements/city.html', %select_hash, 'text_style' => \@style ) %><% include('/elements/select-county.html', %select_hash ) %> <% include('/elements/select-state.html', %select_hash ) %> @@ -291,7 +290,7 @@ Example: var clear_coords_on_change = [ '<%$pre%>address1', '<%$pre%>address2', - '<%$pre%>city', + <% $conf->exists('cust_main-no_city_in_address') ? '' : qq('${pre}city',) %> '<%$pre%>state', '<%$pre%>zip', '<%$pre%>country' diff --git a/httemplate/elements/standardize_locations.js b/httemplate/elements/standardize_locations.js index ff7183b26..1a01daa6f 100644 --- a/httemplate/elements/standardize_locations.js +++ b/httemplate/elements/standardize_locations.js @@ -13,7 +13,7 @@ function form_address_info() { % } % for my $pre (@prefixes) { % # normal case -% for my $field (qw(address1 address2 city state zip country)) { +% for my $field (qw(address1 address2 state zip country), ($conf->exists('cust_main-no_city_in_address') ? () : 'city')) { returnobj['<% $pre %><% $field %>'] = cf.elements['<% $pre %><% $field %>'].value; % } #for $field % if ( $withcensus ) { @@ -145,7 +145,7 @@ function replace_address() { var clean = newaddr['<% $pre %>addr_clean'] == 'Y'; var error = newaddr['<% $pre %>error']; if ( clean ) { -% foreach my $field (qw(address1 address2 city state zip addr_clean )) { +% foreach my $field (qw(address1 address2 state zip addr_clean ),($conf->exists('cust_main-no_city_in_address') ? () : 'city')) { cf.elements['<% $pre %><% $field %>'].value = newaddr['<% $pre %><% $field %>']; % } #foreach $field diff --git a/httemplate/view/cust_main/contacts.html b/httemplate/view/cust_main/contacts.html index 22a7b9584..e3d5d63cb 100644 --- a/httemplate/view/cust_main/contacts.html +++ b/httemplate/view/cust_main/contacts.html @@ -100,7 +100,7 @@ % if ( $location->county ) { (<% $location->county |h %> county)\ % } -,<% state_label( $location->state, $location->country ) |h %> +<% ($location->city || $location->county) ? ', ' : ''%><% state_label( $location->state, $location->country ) |h %> <% $location->zip %>
'; % % } else { +% if ( length($_) > 0 and my $format = shift @$formats ) { +% $_ = sprintf($format, $_); +% } % $_; % } % } % +% # get the value of the field spec: +% # - if the spec is a coderef, evaluate the coderef +% # - if the spec is a string, call that string as a method +% # - if the spec is an integer, get the field in that position % map { % if ( ref($_) eq 'CODE' ) { % &{$_}($row); @@ -491,10 +505,6 @@ $rows => [] % $tooltip = &{$tooltip}($row) % if ref($tooltip) eq 'CODE'; % $tooltip = qq! title="<% $tooltip |h %>"!; -%# qq! onmouseover="return overlib(!. -%# $m->interp->apply_escapes($tooltip, 'h', 'js_string'). -%# qq!, FGCLASS, 'tooltip', REF, 'a$id', !. -%# qq!REFC, 'LL', REFP, 'UL')"! if $tooltip; % % if ( $link ) { % my( $url, $method ) = @{$link}; diff --git a/httemplate/search/report_cust_bill.html b/httemplate/search/report_cust_bill.html index 3efe830e3..e80c6e895 100644 --- a/httemplate/search/report_cust_bill.html +++ b/httemplate/search/report_cust_bill.html @@ -29,8 +29,7 @@ label => mt('Customer Class'), field => 'cust_classnum', multiple => 1, - 'pre_options' => [ '' => emt('(none)') ], - 'all_selected' => 1, + 'pre_options' => [ 0 => emt('(none)') ], &> -- cgit v1.2.1 From 3f11e4f54ca1ab9506884c32fc5f5dfb07db26f4 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 30 Jun 2015 12:38:28 -0700 Subject: add a useful debugging tool --- httemplate/view/cust_bill-tex.cgi | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100755 httemplate/view/cust_bill-tex.cgi diff --git a/httemplate/view/cust_bill-tex.cgi b/httemplate/view/cust_bill-tex.cgi new file mode 100755 index 000000000..813376957 --- /dev/null +++ b/httemplate/view/cust_bill-tex.cgi @@ -0,0 +1,51 @@ +<% $tex %> +<%init> + +use File::Slurp 'slurp'; + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('View invoices'); + +my( $invnum, $mode, $template, $notice_name ); +my($query) = $cgi->keywords; +if ( $query =~ /^((.+)-)?(\d+)(.pdf)?$/ ) { #probably not necessary anymore? + $template = $2; + $invnum = $3; + $notice_name = 'Invoice'; +} else { + $invnum = $cgi->param('invnum'); + $invnum =~ s/\.pdf//i; #probably not necessary anymore + $template = $cgi->param('template'); + $notice_name = ( $cgi->param('notice_name') || 'Invoice' ); + $mode = $cgi->param('mode'); +} + +my $conf = new FS::Conf; + +my %opt = ( + 'unsquelch_cdr' => $conf->exists('voip-cdr_email'), + 'template' => $template, + 'notice_name' => $notice_name, + 'no_coupon' => ($cgi->param('no_coupon') || 0) +); + +my $cust_bill = qsearchs({ + 'select' => 'cust_bill.*', + 'table' => 'cust_bill', + 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )', + 'hashref' => { 'invnum' => $invnum }, + 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql, +}); +die "Invoice #$invnum not found!" unless $cust_bill; + +$cust_bill->set(mode => $mode); + +my ($file) = $cust_bill->print_latex(\%opt); +my $tex = slurp("$file.tex"); + +http_header('Content-Type' => 'text/plain' ); +http_header('Content-Disposition' => "filename=$invnum.tex" ); +http_header('Content-Length' => length($tex) ); +http_header('Cache-control' => 'max-age=60' ); + + -- cgit v1.2.1 From b02738fceb2de16b23fb22a70350b19ee88a214c Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Tue, 30 Jun 2015 22:30:56 -0500 Subject: RT#20687: Future package change [bug fix] --- FS/FS/cust_pkg.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 8e8872871..b97587c2c 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -2442,8 +2442,9 @@ sub change_later { $error = $self->replace || $err_or_pkg->replace || - $change_to->cancel('no_delay_cancel' => 1) || - $change_to->delete; + (($err_or_pkg->pkgnum == $change_to->pkgnum) ? '' : + $change_to->cancel('no_delay_cancel' => 1) || + $change_to->delete); } else { $error = $err_or_pkg; } -- cgit v1.2.1 From 8f57cf37b51aefcdbf13fe09291611f1e8c08650 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Tue, 30 Jun 2015 22:49:28 -0500 Subject: RT#20687: Future package change [comment about bug fix] --- FS/FS/cust_pkg.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index b97587c2c..950d348ce 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -2442,6 +2442,7 @@ sub change_later { $error = $self->replace || $err_or_pkg->replace || + #because change() might've edited existing scheduled change in place (($err_or_pkg->pkgnum == $change_to->pkgnum) ? '' : $change_to->cancel('no_delay_cancel' => 1) || $change_to->delete); -- cgit v1.2.1 From 3b7f6ca279f81d5a4e8e602e0ce5c89693c0ba1e Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 1 Jul 2015 02:09:16 -0400 Subject: flush Mason cache when installing docs, related to #25944 Conflicts: Makefile --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index bab47e4eb..cb93b9f0b 100644 --- a/Makefile +++ b/Makefile @@ -194,7 +194,8 @@ install-docs: docs " ${MASON_HANDLER} || true mkdir -p ${FREESIDE_EXPORT}/profile chown freeside ${FREESIDE_EXPORT}/profile - [ ! -e ${MASONDATA} ] && mkdir ${MASONDATA} || true + rm -r ${MASONDATA} + mkdir ${MASONDATA} chown -R freeside ${MASONDATA} dev-docs: -- cgit v1.2.1 From b43d0bcba176dd04e052b583d4d9c6f540c33b43 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 30 Jun 2015 23:21:27 -0700 Subject: add monthly (and other) recurring to billing info, RT#36813 --- httemplate/view/cust_main/billing.html | 63 ++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index 0f794e334..2f164dfe9 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -19,6 +19,69 @@ <% $balance %> +% #54: just an arbitrary number i pulled out of my goober. in reality we'd want +% # to consider e.g. a histogram of num_ncancelled_packages for the entire +% # customer base, and compare it to a graph of the overhead for generating this +% # information. (and optimize it better, we could get it more from SQL) +% if ( $cust_main->num_ncancelled_pkgs < 54 ) { +% my $sth = dbh->prepare(" +% SELECT DISTINCT freq FROM cust_pkg LEFT JOIN part_pkg USING (pkgpart) +% WHERE freq IS NOT NULL AND freq != '0' +% AND ( cancel IS NULL OR cancel = 0 ) +% AND custnum = ? +% ") or die $DBI::errstr; +% +% $sth->execute($cust_main->custnum) or die $sth->errstr; + +% #not really a numeric sort because freqs can actually be all sorts of things +% # but good enough for the 99% cases of ordering monthly quarterly annually +% my @freqs = sort { $a <=> $b } map { $_->[0] } @{ $sth->fetchall_arrayref }; +% +% foreach my $freq (@freqs) { +% my @cust_pkg = qsearch({ +% 'table' => 'cust_pkg', +% 'addl_from' => 'LEFT JOIN part_pkg USING (pkgpart)', +% 'hashref' => { 'custnum' => $cust_main->custnum, }, +% 'extra_sql' => 'AND ( cancel IS NULL OR cancel = 0 ) +% AND freq = '. dbh->quote($freq), +% }) or next; +% +% my $freq_pretty = $cust_pkg[0]->part_pkg->freq_pretty; +% +% my $amount = 0; +% foreach my $cust_pkg (@cust_pkg) { +% my $part_pkg = $cust_pkg->part_pkg; +% next if $cust_pkg->susp +% && ! $cust_pkg->option('suspend_bill') +% && ( ! $part_pkg->option('suspend_bill') +% || $cust_pkg->option('no_suspend_bill') +% ); +% +% #add recurring amounts for this package and its billing add-ons +% foreach my $l_part_pkg ( $part_pkg->self_and_bill_linked ) { +% $amount += $l_part_pkg->option('recur_fee'); +% } +% +% #subtract amounts for any active discounts +% #(there should only be one at the moment, otherwise this makes no sense) +% foreach my $cust_pkg_discount ( $cust_pkg->cust_pkg_discount_active ) { +% my $discount = $cust_pkg_discount->discount; +% #and only one of these for each +% $amount -= $discount->amount; +% $amount -= $amount * $discount->percent/100; +% } +% +% } + + + <% emt( ucfirst($freq_pretty). ' recurring' ) %> + <% $money_char. sprintf('%.2f', $amount) %> + + +% } + +% } + % if ( $conf->exists('cust_main-select-prorate_day') ) { <% mt('Prorate day of month') |h %> -- cgit v1.2.1 From bba2d3e97b173983eebc9ade920ac0a0468c16d7 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 1 Jul 2015 15:24:19 -0700 Subject: fix "monthly recurring" display w/quantities, RT#36813 --- httemplate/view/cust_main/billing.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index 2f164dfe9..6be9545ac 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -19,7 +19,7 @@ <% $balance %> -% #54: just an arbitrary number i pulled out of my goober. in reality we'd want +% #54: just an arbitrary number i pulled out of my goober. ideally we'd like % # to consider e.g. a histogram of num_ncancelled_packages for the entire % # customer base, and compare it to a graph of the overhead for generating this % # information. (and optimize it better, we could get it more from SQL) @@ -59,7 +59,7 @@ % % #add recurring amounts for this package and its billing add-ons % foreach my $l_part_pkg ( $part_pkg->self_and_bill_linked ) { -% $amount += $l_part_pkg->option('recur_fee'); +% $amount += $l_part_pkg->base_recur; % } % % #subtract amounts for any active discounts @@ -71,6 +71,8 @@ % $amount -= $amount * $discount->percent/100; % } % +% $amount *= ( $cust_pkg->quantity || 1 ); +% % } -- cgit v1.2.1 From 1004de872b685fefcc543f16b5c0f23b289b9d80 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 1 Jul 2015 15:46:29 -0700 Subject: payment total on quotes: not when recur_method eq prorate, and be more refined about disabling with sync_bill-date --- FS/FS/quotation.pm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/FS/FS/quotation.pm b/FS/FS/quotation.pm index 7bf5ecb61..f82051066 100644 --- a/FS/FS/quotation.pm +++ b/FS/FS/quotation.pm @@ -274,10 +274,12 @@ sub _items_sections { # but its good enough for the 99% common case of preventing totals from # displaying for prorate packages $disable_total = 1 - if $part_pkg->plan =~ /^prorate/ - || $part_pkg->plan eq 'agent' - || $part_pkg->plan =~ /^torrus/ - || $part_pkg->option('sync_bill_date'); + if $part_pkg->plan =~ /^(prorate|torrus|agent$)/ + || $part_pkg->option('recur_method') eq 'prorate' + || ( $part_pkg->option('sync_bill_date') + && $self->custnum + && $self->cust_main->billing_pkgs #num_billing_pkgs when we have it + ); } my @pkg_freq_order = keys %{ FS::Misc->pkg_freqs }; -- cgit v1.2.1 From 2bcf13f0f9da22f9afa134320943ea2bfc9c7dcb Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Wed, 1 Jul 2015 17:57:44 -0500 Subject: RT#29285: State field not needed for New Zealand [bug fixes] --- FS/FS/UI/Web/small_custview.pm | 6 +-- FS/FS/cust_location.pm | 111 ++++------------------------------------- 2 files changed, 14 insertions(+), 103 deletions(-) diff --git a/FS/FS/UI/Web/small_custview.pm b/FS/FS/UI/Web/small_custview.pm index 329e5f7eb..a1173f7da 100644 --- a/FS/FS/UI/Web/small_custview.pm +++ b/FS/FS/UI/Web/small_custview.pm @@ -130,9 +130,9 @@ sub small_custview { $html .= encode_entities($cust_main->address2). '
' if $cust_main->address2; $html .= encode_entities($cust_main->city) . ', ' if $cust_main->city; - $html .= $cust_main->state. ' '. - $cust_main->zip. '
'; - $html .= $cust_main->country. '
' + $html .= encode_entities($cust_main->state). ' '. + encode_entities($cust_main->zip). '
'; + $html .= encode_entities($cust_main->country). '
' if $cust_main->country && $cust_main->country ne $countrydefault; } diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm index 9ab94f207..7f4aa9a79 100644 --- a/FS/FS/cust_location.pm +++ b/FS/FS/cust_location.pm @@ -68,7 +68,7 @@ Address line two (optional) =item city -City (optional only if cust_main-no_city_in_address config is set) +City (if cust_main-no_city_in_address config is set when inserting, this will be forced blank) =item county @@ -149,18 +149,13 @@ sub find_or_insert { warn "find_or_insert:\n".Dumper($self) if $DEBUG; - my @essential = (qw(custnum address1 address2 county state zip country + my @essential = (qw(custnum address1 address2 city county state zip country location_number location_type location_kind disabled)); - # Just in case this conf was accidentally/temporarily set, - # we'll never overwrite existing city; see city method if ($conf->exists('cust_main-no_city_in_address')) { - warn "Warning: find_or_insert specified city when cust_main-no_city_in_address was configured" + warn "Warning: passed city to find_or_insert when cust_main-no_city_in_address is configured, ignoring it" if $self->get('city'); - $self->set('city',''); # won't end up in %nonempty, hence old value is preserved - } else { - # otherwise, of course, city is essential - push(@essential,'city') + $self->set('city',''); } # I don't think this is necessary @@ -218,10 +213,11 @@ otherwise returns false. sub insert { my $self = shift; - # Ideally, this should never happen, - # but throw a warning and save the value anyway, to avoid data loss - warn "Warning: inserting city when cust_main-no_city_in_address is configured" - if $conf->exists('cust_main-no_city_in_address') && $self->get('city'); + if ($conf->exists('cust_main-no_city_in_address')) { + warn "Warning: passed city to insert when cust_main-no_city_in_address is configured, ignoring it" + if $self->get('city'); + $self->set('city',''); + } if ( $self->censustract ) { $self->set('censusyear' => $conf->config('census_year') || 2012); @@ -288,13 +284,8 @@ sub replace { my $old = shift; $old ||= $self->replace_old; - # Just in case this conf was accidentally/temporarily set, - # we'll never overwrite existing city; see city method - if ($conf->exists('cust_main-no_city_in_address')) { - warn "Warning: replace attempted to change city when cust_main-no_city_in_address was configured" - if $self->get('city') && ($old->get('city') != $self->get('city')); - $self->set('city',$old->get('city')); - } + warn "Warning: passed city to replace when cust_main-no_city_in_address is configured" + if $conf->exists('cust_main-no_city_in_address') && $self->get('city'); # the following fields are immutable foreach (qw(address1 address2 city state zip country)) { @@ -419,30 +410,6 @@ sub check { $self->SUPER::check; } -=item city - -When the I config is set, the -city method will return a blank string no matter the previously -set value of the field. You can still use the get method to -access the contents of the field directly. - -Just in case this config was accidentally/temporarily set, -we'll never overwrite existing city while the config is active. -L will throw a warning if passed any true value for city, -ignore the city field when finding, and preserve the existing value. -L will only throw a warning if passed a true value that is -different than the existing value of city, and will preserve the existing value. -L will throw a warning but still insert a true city value, -to avoid unnecessary data loss. - -=cut - -sub city { - my $self = shift; - return '' if $conf->exists('cust_main-no_city_in_address'); - return $self->get('city'); -} - =item country_full Returns this locations's full country name @@ -766,62 +733,6 @@ sub county_state_country { =back -=head1 CLASS METHODS - -=item in_county_sql OPTIONS - -Returns an SQL expression to test membership in a cust_main_county -geographic area. By default, this requires district, city, county, -state, and country to match exactly. Pass "ornull => 1" to allow -partial matches where some fields are NULL in the cust_main_county -record but not in the location. - -Pass "param => 1" to receive a parameterized expression (rather than -one that requires a join to cust_main_county) and a list of parameter -names in order. - -=cut - -### Is this actually used for anything anymore? Grep doesn't show anything... -sub in_county_sql { - # replaces FS::cust_pkg::location_sql - my ($class, %opt) = @_; - my $ornull = $opt{ornull} ? ' OR ? IS NULL' : ''; - my $x = $ornull ? 3 : 2; - my @fields = (('district') x 3, - ('county') x $x, - ('state') x $x, - 'country'); - - unless ($conf->exists('cust_main-no_city_in_address')) { - push( @fields, (('city') x 3) ); - } - - my $text = (driver_name =~ /^mysql/i) ? 'char' : 'text'; - - my @where = ( - "cust_location.district = ? OR ? = '' OR CAST(? AS $text) IS NULL", - "cust_location.county = ? OR (? = '' AND cust_location.county IS NULL) $ornull", - "cust_location.state = ? OR (? = '' AND cust_location.state IS NULL ) $ornull", - "cust_location.country = ?", - "cust_location.city = ? OR ? = '' OR CAST(? AS $text) IS NULL" - ); - my $sql = join(' AND ', map "($_)\n", @where); - if ( $opt{param} ) { - return $sql, @fields; - } - else { - # do the substitution here - foreach (@fields) { - $sql =~ s/\?/cust_main_county.$_/; - $sql =~ s/cust_main_county.$_ = ''/cust_main_county.$_ IS NULL/; - } - return $sql; - } -} - -=back - =head2 SUBROUTINES =over 4 -- cgit v1.2.1 From d1cdae31052a590b270145b34e57aa0156e73ea2 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 1 Jul 2015 16:52:16 -0700 Subject: another useful debugging tool --- bin/fetch_pages | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 bin/fetch_pages diff --git a/bin/fetch_pages b/bin/fetch_pages new file mode 100755 index 000000000..5aeca56b3 --- /dev/null +++ b/bin/fetch_pages @@ -0,0 +1,80 @@ +#!/usr/bin/perl + +use strict; +use WWW::Mechanize; +use Getopt::Std; +use File::chdir; +use URI; +use File::Slurp qw(write_file); + +my %opt; +getopts('d:h:u:p:', \%opt); +die usage() unless ($opt{d} and $opt{u} and $opt{p}); +my $host = $opt{h} || 'http://localhost/freeside'; + +my $mech = WWW::Mechanize->new( autocheck => 0 ); +$mech->get("$host/index.html"); +$mech->submit_form( + with_fields => { + credential_0 => $opt{u}, + credential_1 => $opt{p} + } +); + +my @tests = <>; + +mkdir($opt{d}) unless -d $opt{d}; +push @CWD, $opt{d}; + +while (my $path = shift @tests) { + if ($path =~ /^#(.*)/) { + print "$1 - skipped\n"; + next; + } + my $uri = URI->new("$host/$path"); + print $uri->path; + my $response = $mech->get($uri); + print " - " . $response->code . "\n"; + if ($response->is_success) { + local $CWD; + my @dirs = $uri->path_segments; + my $file = pop @dirs; + foreach my $dir (@dirs) { + mkdir $dir unless -d $dir; + push @CWD, $dir; + } + write_file($file, {binmode => ':utf8'}, $response->decoded_content); + } +} + +sub usage { + "Usage: fetch_pages -d directory -u username -p password [ -h hostname ]\n\n"; +} + +=head1 NAME + +fetch_pages - a testing tool for UI changes + +=head1 USAGE + +fetch_pages -d before_change -u myuser -p mypass list_of_tests +git checkout newbranch +make install; apache2ctl restart +fetch_pages -d after_change -u myuser -p mypass list_of_tests +diff -ur before_change/ after_change/ |diffstat + +=head1 ARGUMENTS + +-d: the directory to put the files in. Required. + +-u: the username to use with the Freeside web interface. Required. + +-p: the password. Required. + +-h: the URL prefix for the Freeside server. Defaults to +"http://localhost/freeside". + +The list of tests can be in a file specified after all arguments, or passed +to stdin. + +=cut -- cgit v1.2.1 From 5fa112d129fa6866703c52c4fdbe0076d80efdf0 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 1 Jul 2015 16:54:00 -0700 Subject: ensure all reports work correctly after #25994 changes --- httemplate/search/elements/search.html | 83 ++++++++++++++++++++-------------- httemplate/search/sql.html | 5 +- 2 files changed, 52 insertions(+), 36 deletions(-) diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index c58e63698..f136832a2 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -277,11 +277,17 @@ if ( $opt{'agent_virt'} ) { 'table' => $query->{'table'}, ); + # this is ridiculous, but we do have searches where $query has constraints + # and $count_query doesn't, or vice versa. if ( $query->{'extra_sql'} =~ /\bWHERE\b/i or keys %{$query->{hashref}} ) { $query->{'extra_sql'} .= " AND $agentnums_sql"; - $count_query .= " AND $agentnums_sql"; } else { $query->{'extra_sql'} .= " WHERE $agentnums_sql"; + } + + if ( $count_query =~ /\bWHERE\b/i ) { + $count_query .= " AND $agentnums_sql"; + } else { $count_query .= " WHERE $agentnums_sql"; } @@ -400,48 +406,55 @@ $order_by = $cgi->param('order_by') if $cgi->param('order_by'); my $header = [ map { ref($_) ? $_->{'label'} : $_ } @{$opt{header}} ]; my $rows; -my @query; -if (ref($query) eq 'HASH') { - @query = $query; - - if ( $order_by ) { - if ( $query->{'order_by'} ) { - if ( $query->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { - $query->{'order_by'} = "ORDER BY $order_by, $2"; +if ( ref $query ) { + my @query; + if (ref($query) eq 'HASH') { + @query = $query; + + if ( $order_by ) { + if ( $query->{'order_by'} ) { + if ( $query->{'order_by'} =~ /^(\s*ORDER\s+BY\s+)?(\S.*)$/is ) { + $query->{'order_by'} = "ORDER BY $order_by, $2"; + } else { + warn "unparsable query order_by: ". $query->{'order_by'}; + die "unparsable query order_by: ". $query->{'order_by'}; + } } else { - warn "unparsable query order_by: ". $query->{'order_by'}; - die "unparsable query order_by: ". $query->{'order_by'}; + $query->{'order_by'} = "ORDER BY $order_by"; } - } else { - $query->{'order_by'} = "ORDER BY $order_by"; } + + $query->{'order_by'} .= " $limit"; + + } elsif (ref($query) eq 'ARRAY') { + # do we still use this? it was for the old 477 report. + @query = @{ $query }; + } else { + die "invalid query reference"; } - $query->{'order_by'} .= " $limit"; + #eval "use FS::$opt{'query'};"; + my @param = qw( select table addl_from hashref extra_sql order_by debug ); + $rows = [ qsearch( [ map { my $query = $_; + ({ map { $_ => $query->{$_} } @param }); + } + @query + ], + #'order_by' => $opt{order_by}. " ". $limit, + ) + ]; -} elsif (ref($query) eq 'ARRAY') { - # do we still use this? it was for the old 477 report. - @query = @{ $query }; -} else { - die "invalid query reference"; -} +} else { # not ref $query; plain SQL (still used as of 07/2015) -if ( $opt{disableable} && ! $cgi->param('showdisabled') ) { - #%search = ( 'disabled' => '' ); - $opt{'query'}->{'hashref'}->{'disabled'} = ''; - $opt{'query'}->{'extra_sql'} =~ s/^\s*WHERE/ AND/i; -} + $query .= " $limit"; + my $sth = dbh->prepare($query) + or die "Error preparing $query: ". dbh->errstr; + $sth->execute + or die "Error executing $query: ". $sth->errstr; -#eval "use FS::$opt{'query'};"; -my @param = qw( select table addl_from hashref extra_sql order_by debug ); -$rows = [ qsearch( [ map { my $query = $_; - ({ map { $_ => $query->{$_} } @param }); - } - @query - ], - #'order_by' => $opt{order_by}. " ". $limit, - ) - ]; + $rows = $sth->fetchall_arrayref; + $header ||= $sth->{NAME}; +} # run the count query to get number of rows and other totals my $count_sth = dbh->prepare($count_query); diff --git a/httemplate/search/sql.html b/httemplate/search/sql.html index 71aa00671..54d6c2d79 100644 --- a/httemplate/search/sql.html +++ b/httemplate/search/sql.html @@ -2,7 +2,7 @@ 'title' => 'Query Results', 'name' => 'rows', 'query' => "SELECT $sql", - + 'count_query' => $count, &> <%init> @@ -12,4 +12,7 @@ die "access denied" my $sql = $cgi->param('sql') or errorpage('Empty query'); $sql =~ s/;+\s*$//; #remove trailing ; +my $count = $sql; +$count =~ s/.* FROM /SELECT COUNT(*) FROM /i; + -- cgit v1.2.1 From 3183f0b1485735929aed95496d47d7381af40f34 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 1 Jul 2015 18:05:23 -0700 Subject: fix broken tooltips, #25994 --- httemplate/search/elements/search-html.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html index 6121aea94..12f6c1e04 100644 --- a/httemplate/search/elements/search-html.html +++ b/httemplate/search/elements/search-html.html @@ -349,6 +349,7 @@ $rows => [] % } % my $i = 0; # for row striping # XXX CSS - nth-child +% my $id = 0; % foreach my $row ( @$rows ) { % % my $rowstyle = ''; @@ -504,7 +505,11 @@ $rows => [] % % $tooltip = &{$tooltip}($row) % if ref($tooltip) eq 'CODE'; -% $tooltip = qq! title="<% $tooltip |h %>"!; +% $tooltip = qq! id="a$id" !. +% qq! onmouseover="return overlib(!. +% $m->interp->apply_escapes($tooltip, 'h', 'js_string'). +% qq!, FGCLASS, 'tooltip', REF, 'a$id', !. +% qq!REFC, 'LL', REFP, 'UL')"! if $tooltip; % % if ( $link ) { % my( $url, $method ) = @{$link}; @@ -521,6 +526,7 @@ $rows => [] % elsif ( $tooltip ) { % $a = qq(
); % } +% $id++; % } % -- cgit v1.2.1 From 064e042d9f4e7368dd44ef51a50d11f12e5c2e6a Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Wed, 1 Jul 2015 20:17:24 -0400 Subject: Debian 8 support for ng-selfservice --- debian/freeside-ng-selfservice.deb7 | 1 + debian/freeside-ng-selfservice.deb8 | 1 + 2 files changed, 2 insertions(+) create mode 100644 debian/freeside-ng-selfservice.deb7 create mode 100644 debian/freeside-ng-selfservice.deb8 diff --git a/debian/freeside-ng-selfservice.deb7 b/debian/freeside-ng-selfservice.deb7 new file mode 100644 index 000000000..58f0d3ad3 --- /dev/null +++ b/debian/freeside-ng-selfservice.deb7 @@ -0,0 +1 @@ +/var/www/ng_selfservice-DIST/freeside.class.php diff --git a/debian/freeside-ng-selfservice.deb8 b/debian/freeside-ng-selfservice.deb8 new file mode 100644 index 000000000..d6537dda8 --- /dev/null +++ b/debian/freeside-ng-selfservice.deb8 @@ -0,0 +1 @@ +/var/www/html/ng_selfservice-DIST/freeside.class.php -- cgit v1.2.1 From d328f8cab1343a156bef7dae94e4d2fcd7509c06 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Wed, 1 Jul 2015 20:34:34 -0400 Subject: Debian 8 support for ng-selfservice --- debian/freeside-ng-selfservice.conffiles | 1 - 1 file changed, 1 deletion(-) delete mode 100644 debian/freeside-ng-selfservice.conffiles diff --git a/debian/freeside-ng-selfservice.conffiles b/debian/freeside-ng-selfservice.conffiles deleted file mode 100644 index 58f0d3ad3..000000000 --- a/debian/freeside-ng-selfservice.conffiles +++ /dev/null @@ -1 +0,0 @@ -/var/www/ng_selfservice-DIST/freeside.class.php -- cgit v1.2.1 From 838897525d851ea5cb1386c253471a02a3f41b5f Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Wed, 1 Jul 2015 19:11:20 -0700 Subject: no jumbo view in 4.x, but new Appointments and Quotation views if you want to set them as the default --- httemplate/pref/pref.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/httemplate/pref/pref.html b/httemplate/pref/pref.html index ffc90fde8..46291066c 100644 --- a/httemplate/pref/pref.html +++ b/httemplate/pref/pref.html @@ -281,12 +281,13 @@ tie my %customer_views, 'Tie::IxHash', 'Basics' => 'basics', 'Notes' => 'notes', #notes and files? 'Tickets' => 'tickets', + 'Appointments' => 'appointments', + 'Quotations' => 'quotations', 'Packages' => 'packages', 'Payment History' => 'payment_history', ; $customer_views{'Change History'} = 'change_history' if $curuser->access_right('View customer history'); -$customer_views{'Jumbo'} = 'jumbo'; # XSS via your own preferences? seems unlikely, but nice try anyway... ( $curuser->option('menu_position') || 'top' ) -- cgit v1.2.1 From 0b9c15a3add1d3715c3895171894ac6480d1dfc1 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Thu, 2 Jul 2015 13:16:21 -0500 Subject: RT#18834: Cacti integration [added warning messages] --- FS/FS/part_export/cacti.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FS/FS/part_export/cacti.pm b/FS/FS/part_export/cacti.pm index eff6c5220..b41fe9bc8 100644 --- a/FS/FS/part_export/cacti.pm +++ b/FS/FS/part_export/cacti.pm @@ -490,8 +490,12 @@ sub process_graphs { $dbh->rollback if $oldAutoCommit; die $error; } + } else { + warn "File $thumbfile is too large, skipping"; } unlink($thumbfile); + } else { + warn "File $thumbfile does not exist, skipping"; } $job->update_statustext(49 + int($i / @graphs) * 50); } -- cgit v1.2.1 From 632dd8ec5c4f4eaccb71607407b934ddf8935104 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Thu, 2 Jul 2015 13:36:27 -0500 Subject: RT#18834: Cacti integration [warnings display to screen] --- FS/FS/part_export/cacti.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FS/FS/part_export/cacti.pm b/FS/FS/part_export/cacti.pm index b41fe9bc8..c83e453cd 100644 --- a/FS/FS/part_export/cacti.pm +++ b/FS/FS/part_export/cacti.pm @@ -491,11 +491,11 @@ sub process_graphs { die $error; } } else { - warn "File $thumbfile is too large, skipping"; + $svchtml .= qq(

File $thumbfile is too large, skipping

); } unlink($thumbfile); } else { - warn "File $thumbfile does not exist, skipping"; + $svchtml .= qq(

File $thumbfile does not exist, skipping

); } $job->update_statustext(49 + int($i / @graphs) * 50); } -- cgit v1.2.1 From b3a3e87627ab27c0b2c96c0242a6405864eee365 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 2 Jul 2015 14:23:32 -0700 Subject: backport LaTeX 'background' package for deb7, #24665 --- Makefile | 4 +- etc/background.sty | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 etc/background.sty diff --git a/Makefile b/Makefile index cb93b9f0b..02ab78cc5 100644 --- a/Makefile +++ b/Makefile @@ -269,8 +269,8 @@ dev-perl-modules: perl-modules ln -sf ${FREESIDE_PATH}/FS/blib/lib/FS ${PERL_INC_DEV_KLUDGE}/FS install-texmf: - install -D -o freeside -m 444 etc/longtable.sty \ - /usr/local/share/texmf/tex/latex/longtable.sty + install -D -o freeside -m 444 etc/*.sty \ + /usr/local/share/texmf/tex/latex/ texhash /usr/local/share/texmf install-init: diff --git a/etc/background.sty b/etc/background.sty new file mode 100644 index 000000000..0a20dd469 --- /dev/null +++ b/etc/background.sty @@ -0,0 +1,199 @@ +%% +%% This is file `background.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% background.dtx (with options: `package') +%% +%% Copyright (C) 2009, 2012, 2014 Gonzalo Medina (gmedinaar@unal.edu.co) +%% +%% -------------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% The Current Maintainer of this work is Gonzalo Medina. +%% +%% This work consists of the files background.ins, background.dtx, +%% and the derived files background.sty and background.pdf. +%% + + + + + + + + + + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{background}[2014/03/04 v2.1 background material] +\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}} +\@ifpackageloaded{tikz}{}{\RequirePackage{tikz}} +\@ifpackageloaded{everypage}{}{\RequirePackage{everypage}} +\@ifpackageloaded{afterpage}{}{\RequirePackage{afterpage}} +\DeclareOptionX[BG]{contents}{% + \def\Background@Contents{#1}} +\DeclareOptionX[BG]{color}{% + \def\Background@Color{#1}} +\DeclareOptionX[BG]{angle}{% + \def\Background@Angle{#1}} +\DeclareOptionX[BG]{opacity}{% + \def\Background@Opacity{#1}} +\DeclareOptionX[BG]{scale}{% + \def\Background@Scale{#1}} +\DeclareOptionX[BG]{position}{% + \def\Background@Position{#1}} +\DeclareOptionX[BG]{anchor}{% + \def\Background@Anchor{#1}} +\DeclareOptionX[BG]{nodeanchor}{% + \def\Background@NodeAnchor{#1}} +\DeclareOptionX[BG]{hshift}{% + \def\Background@HShift{#1}} +\DeclareOptionX[BG]{vshift}{% + \def\Background@VShift{#1}} + +\newif\ifbg@some + \bg@somefalse + +\define@choicekey+[BG]{background}{pages}[\val\nr]{all,some}{% + \ifcase\nr\relax + \bg@somefalse + \or + \bg@sometrue + \fi +}{% + \PackageWarning{background}{erroneous input ignored}% +} + +\define@choicekey+[BG]{background}{placement}[\val\nr]{center,bottom,top}{% + \ifcase\nr\relax + \renewcommand\Background@Position{current page.center}% + \renewcommand\Background@Anchor{}% + \renewcommand\Background@Angle{60} + \or + \renewcommand\Background@Position{current page.south}% + \renewcommand\Background@Anchor{above}% + \renewcommand\Background@Angle{0}% + \or + \renewcommand\Background@Position{current page.north}% + \renewcommand\Background@Anchor{below}% + \renewcommand\Background@Angle{0}% + \fi +}{% + \PackageWarning{background}{erroneous input ignored}% +} +\define@boolkey+[BG]{background}{firstpage}{% + \ifBG@background@firstpage + \bg@sometrue% + \AtBeginDocument{\BgThispage}% + \else + \bg@somefalse% + \fi +}{% + \PackageWarning{background}{erroneous input ignored}% +} + +\DeclareOptionX[BG]{all}{\bg@somefalse} +\DeclareOptionX[BG]{some}{\bg@sometrue} +\DeclareOptionX[BG]{center}{% + \renewcommand\Background@Position{current page.center}% + \renewcommand\Background@Anchor{}% + \renewcommand\Background@Angle{60}} +\DeclareOptionX[BG]{bottom}{% + \renewcommand\Background@Position{current page.south}% + \renewcommand\Background@Anchor{above}% + \renewcommand\Background@Angle{0}% + \renewcommand\Background@Scale{8}} +\DeclareOptionX[BG]{top}{% + \renewcommand\Background@Position{current page.north}% + \renewcommand\Background@Anchor{below}% + \renewcommand\Background@Angle{0}% + \renewcommand\Background@Scale{8}} + + +\ExecuteOptions{all,center} + + +\DeclareOptionX*{\PackageWarningNoLine{background}{Option '\CurrentOption' ignored}} + +\ExecuteOptionsX[BG]{% + firstpage=false, + contents=Draft,% + color=red!45,% + angle=60,% + opacity=0.5,% + scale=10,% + position=current page.center,% + anchor={},% + nodeanchor={center},% + hshift=0pt,% + vshift=0pt% +} + +\ProcessOptionsX[BG] +\DeclareRobustCommand*\backgroundsetup[1]{% + \setkeys[BG]{background}{#1} +} + +\newcommand\bg@material{% + \begin{tikzpicture}[remember picture,overlay,scale=\Background@Scale] + \node[ + rotate=\Background@Angle, + scale=\Background@Scale, + opacity=\Background@Opacity, + anchor=\Background@NodeAnchor, + xshift=\Background@HShift, + yshift=\Background@VShift, + color=\Background@Color, + inner sep=0pt + ] + at (\Background@Position) [\Background@Anchor] + {\Background@Contents}; + \end{tikzpicture}}% +\newcommand\BgThispage{\AddThispageHook{\bg@material}} + +\newcommand\NoBgThispage{% + \let\oldbg@material\bg@material\renewcommand\bg@material{}% + \afterpage{\AddEverypageHook{\oldbg@material}}} + +\ifbg@some + \AddThispageHook{} +\else + \AddEverypageHook{\bg@material} +\fi + +\newcommand\SetBgContents[1]{% + \def\Background@Contents{#1}} +\newcommand\SetBgAngle[1]{% + \def\Background@Angle{#1}} +\newcommand\SetBgColor[1]{% + \def\Background@Color{#1}} +\newcommand\SetBgScale[1]{% + \def\Background@Scale{#1}} +\newcommand\SetBgVshift[1]{% + \def\Background@VShift{#1}} +\newcommand\SetBgHshift[1]{% + \def\Background@HShift{#1}} +\newcommand\SetBgPosition[1]{% + \def\Background@Position{#1}} +\newcommand\SetBgAnchor[1]{% + \def\Background@Anchor{#1}} +\newcommand\SetBgOpacity[1]{% + \def\Background@Opacity{#1}} + +\let\BgMaterial\bg@material + +\AtEndDocument{\clearpage} +\endinput +%% +%% End of file `background.sty'. -- cgit v1.2.1 From 1cfaa817b9cfb0a3d628c571e4505b5e0c4e9954 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 2 Jul 2015 17:27:18 -0700 Subject: add tex style to debian/rules --- debian/freeside-lib.postinst | 4 ++++ debian/rules | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 debian/freeside-lib.postinst diff --git a/debian/freeside-lib.postinst b/debian/freeside-lib.postinst new file mode 100644 index 000000000..870ad315f --- /dev/null +++ b/debian/freeside-lib.postinst @@ -0,0 +1,4 @@ +#!/bin/sh + +texhash /usr/local/share/texmf + diff --git a/debian/rules b/debian/rules index f39007240..a7f2b72d0 100755 --- a/debian/rules +++ b/debian/rules @@ -78,6 +78,8 @@ export FREESIDE_URL = http://$(HOSTNAME)/freeside/ # (but leaving it for now, otherwise can't get RT to put files where we need em) export RT_PATH = $(TMP)/opt/rt3 +export TEXMF_PATH = $(TMP)-lib/usr/local/share/texmf/tex/latex + # This has to be exported to make some magic below work. export DH_OPTIONS @@ -167,9 +169,8 @@ install-stamp: build-stamp $(MAKE) -e DESTDIR=$(TMP)-webui install-docs # Install tex - install -D -o freeside -m 444 etc/longtable.sty \ - $(TMP)-lib/usr/local/share/texmf/tex/latex/longtable.sty - texhash $(TMP)-lib/usr/local/share/texmf + install -d ${TEXMF_PATH} + install -o freeside -m 444 etc/*.sty ${TEXMF_PATH} # Create Apache configurations install -d $(APACHE_CONF) -- cgit v1.2.1 From 53b6529e6a9c3eb3a314d87e4a405b17af4daf45 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Fri, 3 Jul 2015 17:19:53 -0500 Subject: RT#18834: Cacti integration [trailing slash handling, changed cache dir] --- FS/FS/part_export/cacti.pm | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/FS/FS/part_export/cacti.pm b/FS/FS/part_export/cacti.pm index c83e453cd..7de97946c 100644 --- a/FS/FS/part_export/cacti.pm +++ b/FS/FS/part_export/cacti.pm @@ -217,7 +217,7 @@ sub ssh_insert { # $desc =~ s/'/'\\''/g; $desc =~ s/'//g; my $cmd = $php - . $opt{'script_path'} + . trailslash($opt{'script_path'}) . q(add_device.php --description=') . $desc . q(' --ip=') @@ -233,7 +233,7 @@ sub ssh_insert { # Add host to tree if ($opt{'tree_id'}) { $cmd = $php - . $opt{'script_path'} + . trailslash($opt{'script_path'}) . q(add_tree.php --type=node --node-type=host --tree-id=) . $opt{'tree_id'} . q( --host-id=) @@ -246,7 +246,7 @@ sub ssh_insert { # Get list of graph templates for new id $cmd = $php - . $opt{'script_path'} + . trailslash($opt{'script_path'}) . q(freeside_cacti.php --get-graph-templates --host-template=) . $opt{'template_id'}; my $ginfo = { map { $_ ? ($_ => undef) : () } split(/\n/,ssh_cmd(%opt, 'command' => $cmd)) }; @@ -301,7 +301,7 @@ sub ssh_insert { # create the graph $cmd = $php - . $opt{'script_path'} + . trailslash($opt{'script_path'}) . q(add_graphs.php --graph-type=) . ($isds ? 'ds' : 'cg') . q( --graph-template-id=) @@ -335,7 +335,7 @@ sub ssh_insert { sub ssh_delete { my %opt = @_; my $cmd = $php - . $opt{'script_path'} + . trailslash($opt{'script_path'}) . q(freeside_cacti.php --drop-device --ip=') . $opt{'hostname'} . q('); @@ -367,7 +367,7 @@ sub process_graphs { my ($job,$param) = @_; $job->update_statustext(10); - my $cachedir = $FS::UID::cache_dir . '/cacti-graphs/'; + my $cachedir = trailslash($FS::UID::cache_dir,'cache.'.$FS::UID::datasrc,'cacti-graphs'); # load the service my $svcnum = $param->{'svcnum'} || die "No svcnum specified"; @@ -413,7 +413,7 @@ sub process_graphs { # get list of graphs for this svc from cacti server my $cmd = $php - . $self->option('script_path') + . trailslash($self->option('script_path')) . q(freeside_cacti.php --get-graphs --ip=') . $svc->ip_addr . q('); @@ -432,7 +432,9 @@ sub process_graphs { 'rsh' => 'ssh', 'verbose' => 1, 'recursive' => 1, - 'source' => $self->option('graphs_path'), + 'quote-src' => 1, + 'quote-dst' => 1, + 'source' => trailslash($self->option('graphs_path')), 'dest' => $cachedir, 'include' => [ (map { q('**graph_).${$_}[0].q(*.png') } @graphs), @@ -442,8 +444,9 @@ sub process_graphs { ], }); #don't know why a regular $rsync->exec isn't doing includes right, but this does - my $error = system(join(' ',@{$rsync->getcmd()})); - die "rsync failed with exit status $error" if $error; + my $rscmd = join(' ',@{$rsync->getcmd()}); + my $error = system($rscmd); + die "rsync ($rscmd) failed with exit status $error" if $error; $job->update_statustext(50); @@ -551,6 +554,19 @@ sub ssh_cmd { return $output; } +#there's probably a better place to put this? +#makes sure there's a trailing slash between/after input +#doesn't add leading slashes +sub trailslash { + my @paths = @_; + my $out = ''; + foreach my $path (@paths) { + $out .= $path; + $out .= '/' unless $out =~ /\/$/; + } + return $out; +} + =head1 METHODS =over 4 -- cgit v1.2.1 From 32365ef65ca6a40b5262cf166543b1d84c6aa57d Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Fri, 3 Jul 2015 11:38:23 -0700 Subject: make new gross sales calculation optional, #25943 --- FS/FS/Report/Table/Monthly.pm | 8 +++++- FS/FS/cust_bill/Search.pm | 47 +++++++++++++++++++++------------ httemplate/graph/elements/monthly.html | 5 +++- httemplate/graph/money_time.cgi | 40 +++++++++++++++------------- httemplate/graph/report_money_time.html | 22 ++++++++++++--- httemplate/search/cust_bill.html | 11 +++++--- httemplate/search/report_cust_bill.html | 7 ++++- 7 files changed, 95 insertions(+), 45 deletions(-) diff --git a/FS/FS/Report/Table/Monthly.pm b/FS/FS/Report/Table/Monthly.pm index 0ff7efd16..f4ba02008 100644 --- a/FS/FS/Report/Table/Monthly.pm +++ b/FS/FS/Report/Table/Monthly.pm @@ -182,9 +182,15 @@ sub data { push @{$data{label}}, "$smonth/$syear"; # sprintf? my $speriod = timelocal(0,0,0,1,$smonth-1,$syear); - push @{$data{speriod}}, $speriod; if ( ++$smonth == 13 ) { $syear++; $smonth=1; } my $eperiod = timelocal(0,0,0,1,$smonth-1,$syear); + # 12-month mode: show results in a sliding window ending at $eperiod, + # but starting 12 months before. + if ( $self->{'12mo'}) { + $speriod = timelocal(0,0,0,1,$smonth-1,$syear-1); + } + + push @{$data{speriod}}, $speriod; push @{$data{eperiod}}, $eperiod; my $col = 0; # a "column" here is the data corresponding to an item diff --git a/FS/FS/cust_bill/Search.pm b/FS/FS/cust_bill/Search.pm index 62c55d6df..38f11d165 100644 --- a/FS/FS/cust_bill/Search.pm +++ b/FS/FS/cust_bill/Search.pm @@ -7,6 +7,7 @@ use FS::Record qw( qsearchs dbh ); use FS::cust_main; use FS::access_user; use FS::Conf; +use charnames ':full'; =item search HASHREF @@ -18,7 +19,9 @@ following additional parameters valid: =over 4 -=item newest_percust +=item newest_percust - only show the most recent invoice for each customer + +=item invoiced - show the invoiced amount (excluding discounts) instead of gross sales =back @@ -27,7 +30,8 @@ following additional parameters valid: sub search { my( $class, $params ) = @_; - my( $count_query, $count_addl ) = ( '', '' ); + my $count_query = ''; + my @count_addl; #some false laziness w/cust_bill::re_X @@ -77,21 +81,30 @@ sub search { my $money = (FS::Conf->new->config('money_char') || '$') . '%.2f'; - $count_query = 'SELECT COUNT(*), '. join(', ', - map "SUM($_)", - ( 'charged + discounted', - 'discounted', - 'credited', - 'charged - credited', - 'charged - credited - paid', - ) - ); - $count_addl = [ "$money sales (gross)", - "− $money discounted", - "− $money credited", - "= $money sales (net)", + my @sums = ( 'credited', # credits + 'charged - credited', # net sales + 'charged - credited - paid', # balance due + ); + + @count_addl = ( "\N{MINUS SIGN} $money credited", + "= $money net sales", "$money outstanding balance", - ]; + ); + + if ( $params->{'invoiced'} ) { + + unshift @sums, 'charged'; + unshift @count_addl, "$money invoiced"; + + } else { + + unshift @sums, 'charged + discounted', 'discounted'; + unshift @count_addl, "$money gross sales", + "\N{MINUS SIGN} $money discounted"; + + } + + $count_query = 'SELECT COUNT(*), '. join(', ', map "SUM($_)", @sums); } $count_query .= " FROM cust_bill $join $extra_sql"; @@ -115,7 +128,7 @@ sub search { 'order_by' => 'ORDER BY '. ( $params->{'order_by'} || 'cust_bill._date' ), 'count_query' => $count_query, - 'count_addl' => $count_addl, + 'count_addl' => \@count_addl, }; } diff --git a/httemplate/graph/elements/monthly.html b/httemplate/graph/elements/monthly.html index 4b988f166..1a9428115 100644 --- a/httemplate/graph/elements/monthly.html +++ b/httemplate/graph/elements/monthly.html @@ -27,7 +27,7 @@ Example: 'start_year' => $syear, 'end_month' => $emonth, 'end_year' => $eyear, - + '12mo' => 0, #optional, pulled from CGI params if not specified, #only if 'daily' option is given @@ -96,6 +96,8 @@ $opt{'start_year'} ||= $cgi->param('start_year'); # || 1899+$curyear; $opt{'end_month'} ||= $cgi->param('end_month'); # || $curmon+1; $opt{'end_year'} ||= $cgi->param('end_year'); # || 1900+$curyear; +$opt{'12mo'} ||= $cgi->param('12mo') ? 1 : 0; + $opt{'projection'} ||= $cgi->param('projection') ? 1 : 0; if ( $opt{'daily'} ) { # daily granularity @@ -119,6 +121,7 @@ my %reportopts = ( 'end_day' => $opt{'end_day'}, 'end_month' => $opt{'end_month'}, 'end_year' => $opt{'end_year'}, + '12mo' => $opt{'12mo'}, 'projection' => $opt{'projection'}, 'agentnum' => $opt{'agentnum'}, 'refnum' => $opt{'refnum'}, diff --git a/httemplate/graph/money_time.cgi b/httemplate/graph/money_time.cgi index b44adeaf8..aa17eb2f4 100644 --- a/httemplate/graph/money_time.cgi +++ b/httemplate/graph/money_time.cgi @@ -41,35 +41,35 @@ my $referralname = $part_referral ? $part_referral->referral.' ' : ''; # need to clean this up. the false symmetry of "gross" and "net" everything # makes it aesthetically hard to make this report more useful. -my @items = qw( gross netsales - discounted +my @items = ($cgi->param('exclude_discount') ? 'invoiced' : 'gross'); +push @items, + qw( discounted netsales credits netcredits payments receipts refunds netrefunds cashflow netcashflow - ); -if ( $cgi->param('12mo') == 1 ) { - @items = map $_.'_12mo', @items; -} + ); my %label = ( 'gross' => 'Gross Sales', - 'netsales' => 'Net Sales', + 'invoiced' => 'Invoiced Sales', + 'netsales' => 'Net Sales', 'discounted' => 'Discounts', 'credits' => 'Gross Credits', - 'netcredits' => 'Net Credits', + 'netcredits' => 'Net Credits', 'payments' => 'Gross Receipts', - 'receipts' => 'Net Receipts', + 'receipts' => 'Net Receipts', 'refunds' => 'Gross Refunds', - 'netrefunds' => 'Net Refunds', + 'netrefunds' => 'Net Refunds', 'cashflow' => 'Gross Cashflow', - 'netcashflow' => 'Net Cashflow', + 'netcashflow' => 'Net Cashflow', ); my %graph_suffix = ( 'gross' => ' (invoiced + discounts)', + 'invoiced' => '', 'netsales' => ' (invoiced - applied credits)', - 'discounted' => ' (discounts)', + 'discounted' => '', 'credits' => ' (credited)', 'netcredits' => ' (applied credits)', 'payments' => ' (payments)', @@ -81,14 +81,9 @@ my %graph_suffix = ( ); my %graph_label = map { $_ => $label{$_}.$graph_suffix{$_} } keys %label; -$label{$_.'_12mo'} = $label{$_}. " (prev 12 months)" - foreach keys %label; - -$graph_label{$_.'_12mo'} = $graph_label{$_}. " (prev 12 months)" - foreach keys %graph_label; - my %color = ( 'gross' => '9999ff', #light blue + 'invoiced' => '9999ff', #light blue 'netsales' => '0000cc', #blue 'credits' => 'ff9999', #light red 'netcredits' => 'cc0000', #red @@ -108,6 +103,7 @@ $ar .= ";cust_classnum=$_" foreach @classnums; my %link = ( 'gross' => "${p}search/cust_bill.html?$ar;", + 'invoiced' => "${p}search/cust_bill.html?$ar;invoiced=1;", 'netsales' => "${p}search/cust_bill.html?$ar;net=1;", 'credits' => "${p}search/cust_credit.html?$ar;", 'netcredits' => "${p}search/cust_credit_bill.html?$ar;", @@ -119,4 +115,12 @@ my %link = ( ); # XXX link 12mo? +if ( $cgi->param('12mo') ) { + $label{$_} .= " (prev 12 months)" + foreach keys %label; + + $graph_label{$_} .= " (prev 12 months)" + foreach keys %graph_label; +} + diff --git a/httemplate/graph/report_money_time.html b/httemplate/graph/report_money_time.html index 315d31bc5..8f534c0be 100644 --- a/httemplate/graph/report_money_time.html +++ b/httemplate/graph/report_money_time.html @@ -36,9 +36,25 @@ ) %> - - - Show 12 month totals instead of monthly values + + + + <& /elements/checkbox.html, + field => '12mo', + value => 1, + &> + <% emt('Show 12 month totals instead of monthly values') %> + + + + + <& /elements/checkbox.html, + field => 'exclude_discount', + value => 1, + curr_value => 0, + &> + <% emt('Exclude discounts from total sales') %> + diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html index 662673676..017e8298f 100755 --- a/httemplate/search/cust_bill.html +++ b/httemplate/search/cust_bill.html @@ -8,7 +8,7 @@ 'count_addl' => $count_addl, 'redirect' => $link, 'header' => [ emt('Invoice #'), - emt('Gross Amount'), + emt($invoiced ? 'Charged' : 'Gross Amount'), emt('Discount'), emt('Credits'), emt('Net Amount'), @@ -18,7 +18,7 @@ ], 'fields' => [ 'display_invnum', - 'gross', + $invoiced ? 'charged' : 'gross', 'discounted', 'credited', 'net', @@ -28,7 +28,7 @@ ], 'sort_fields' => [ 'COALESCE( agent_invid, invnum )', - 'gross', + $invoiced ? 'charged' : 'gross', 'discounted', 'credited', 'net', @@ -87,6 +87,9 @@ my( $count_query, $sql_query ); my $count_addl = ''; my %search = (); +# show invoiced amount (charged) instead of gross sales +my $invoiced = $cgi->param('invoiced') ? 1 : 0; + if ( $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/ ) { my $join_cust_main = FS::UI::Web::join_cust_main('cust_bill'); @@ -132,7 +135,7 @@ if ( $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/ ) { #scalars for (qw( agentnum custnum cust_status refnum invnum_min invnum_max - open net newest_percust + open net newest_percust invoiced )) { diff --git a/httemplate/search/report_cust_bill.html b/httemplate/search/report_cust_bill.html index e80c6e895..bd40b969b 100644 --- a/httemplate/search/report_cust_bill.html +++ b/httemplate/search/report_cust_bill.html @@ -88,7 +88,12 @@ <% mt('Show only open invoices') |h %> - + + + + + <% emt('Exclude discounts from gross amount billed'), %> + % unless ( $custnum ) { -- cgit v1.2.1 From d1f83ecbaefdab8fbb3a05e87448f3351d9051b4 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Fri, 3 Jul 2015 19:46:00 -0500 Subject: RT#34078: Payment History Report / Statement [various fixes, integrated with selfservice] --- FS/FS/ClientAPI/MasonComponent.pm | 1 + FS/FS/cust_main.pm | 10 +++---- fs_selfservice/FS-SelfService/cgi/history.html | 41 +++++--------------------- httemplate/view/cust_main/menu.html | 7 +++-- 4 files changed, 18 insertions(+), 41 deletions(-) diff --git a/FS/FS/ClientAPI/MasonComponent.pm b/FS/FS/ClientAPI/MasonComponent.pm index 50597e2cb..3c3bf4cb3 100644 --- a/FS/FS/ClientAPI/MasonComponent.pm +++ b/FS/FS/ClientAPI/MasonComponent.pm @@ -14,6 +14,7 @@ $DEBUG = 0; $me = '[FS::ClientAPI::MasonComponent]'; my %allowed_comps = map { $_=>1 } qw( + /elements/customer-statement.html /elements/select-did.html /misc/areacodes.cgi /misc/exchanges.cgi diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index f2c2b4ab4..46df3ffd8 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -4175,7 +4175,7 @@ sub payment_history { 'amount' => sprintf('%.2f', $_->setup + $_->recur ), 'charged' => sprintf('%.2f', $_->setup + $_->recur ), 'date' => $cust_bill->_date, - 'date_pretty' => time2str('%m/%d/%Y', $cust_bill->_date ), + 'date_pretty' => $self->time2str_local('short', $cust_bill->_date ), } foreach $cust_bill->cust_bill_pkg; @@ -4189,7 +4189,7 @@ sub payment_history { 'amount' => sprintf('%.2f', $_->charged ), 'charged' => sprintf('%.2f', $_->charged ), 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + 'date_pretty' => $self->time2str_local('short', $_->_date ), } foreach $self->cust_bill; @@ -4201,7 +4201,7 @@ sub payment_history { 'amount' => sprintf('%.2f', 0 - $_->paid ), 'paid' => sprintf('%.2f', $_->paid ), 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + 'date_pretty' => $self->time2str_local('short', $_->_date ), } foreach $self->cust_pay; @@ -4211,7 +4211,7 @@ sub payment_history { 'amount' => sprintf('%.2f', 0 -$_->amount ), 'credit' => sprintf('%.2f', $_->amount ), 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + 'date_pretty' => $self->time2str_local('short', $_->_date ), } foreach $self->cust_credit; @@ -4221,7 +4221,7 @@ sub payment_history { 'amount' => $_->refund, 'refund' => $_->refund, 'date' => $_->_date, - 'date_pretty' => time2str('%m/%d/%Y', $_->_date ), + 'date_pretty' => $self->time2str_local('short', $_->_date ), } foreach $self->cust_refund; diff --git a/fs_selfservice/FS-SelfService/cgi/history.html b/fs_selfservice/FS-SelfService/cgi/history.html index 605bc1cf5..0b6f9ceda 100644 --- a/fs_selfservice/FS-SelfService/cgi/history.html +++ b/fs_selfservice/FS-SelfService/cgi/history.html @@ -1,39 +1,14 @@ <%= include('header', 'Payment History') %> <%= -my $balance = 0; -my $style = 'text-align: left; margin: 0; padding: 0 1em 0 0;'; -my $moneystyle = 'text-align: right; margin: 0; padding: 0 1em 0 0;'; -my $col1 = "#ffffff"; -my $col2 = "#dddddd"; -my $col = $col1; -foreach my $item (@history) { - $balance += $$item{'amount'}; - $$item{'amount'} =~ s/^(-?)/$1$money_char/; - $out .= < - $$item{'date_pretty'} - $$item{'description'} - $$item{'amount'} - -EOF - $col = $col eq $col1 ? $col2 : $col1; -} -$balance = sprintf('%.2f',$balance); -$balance =~ s/^(-?)/$1$money_char/; -$out = <Balance: $balance

- - - - - - -$out -
DateDescriptionAmount
-EOF +my $out = mason_comp( + 'session_id' => $session_id, + 'comp' => '/elements/customer-statement.html', + 'args' => [ + 'history' => \@history, + ] +); +$out->{'output'} || $out->{'error'}; %> - - <%= include('footer') %> diff --git a/httemplate/view/cust_main/menu.html b/httemplate/view/cust_main/menu.html index 6e66ea7e6..90a20ed50 100644 --- a/httemplate/view/cust_main/menu.html +++ b/httemplate/view/cust_main/menu.html @@ -197,8 +197,9 @@ my @menu = ( url => sub { my $cust_main = shift; my $agentnum = $cust_main->agentnum; - 'misc/email-customers.html?table=cust_main;search_hash='. - 'agent_virt_agentnum='.$agentnum.";custnum=$custnum"; + 'misc/email-customers.html?table=cust_main;'. + 'agent_virt_agentnum='.$agentnum.";custnum=$custnum;url=". + uri_escape($cgi->self_url); }, condition => sub { $invoicing_list_emailonly }, acl => 'Bulk send customer notices', @@ -487,7 +488,7 @@ my @menu = ( url => sub { my $cust_main = shift; my $agentnum = $cust_main->agentnum; - 'misc/email-customer-statement.html?table=cust_main;search_hash='. + 'misc/email-customer-statement.html?table=cust_main;'. 'agent_virt_agentnum='.$agentnum.";custnum=$custnum;url=". uri_escape($cgi->self_url); }, -- cgit v1.2.1 From d6faa539e04d20a1b0dc6758ebe1248b6c801219 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 6 Jul 2015 13:14:22 -0700 Subject: fix "monthly recurring" display w/quantities, RT#36813 --- httemplate/view/cust_main/billing.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index 6be9545ac..7027ebd87 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -57,9 +57,11 @@ % || $cust_pkg->option('no_suspend_bill') % ); % +% my $pkg_amount = 0; +% % #add recurring amounts for this package and its billing add-ons % foreach my $l_part_pkg ( $part_pkg->self_and_bill_linked ) { -% $amount += $l_part_pkg->base_recur; +% $pkg_amount += $l_part_pkg->base_recur; % } % % #subtract amounts for any active discounts @@ -67,11 +69,13 @@ % foreach my $cust_pkg_discount ( $cust_pkg->cust_pkg_discount_active ) { % my $discount = $cust_pkg_discount->discount; % #and only one of these for each -% $amount -= $discount->amount; -% $amount -= $amount * $discount->percent/100; +% $pkg_amount -= $discount->amount; +% $pkg_amount -= $amount * $discount->percent/100; % } % -% $amount *= ( $cust_pkg->quantity || 1 ); +% $pkg_amount *= ( $cust_pkg->quantity || 1 ); +% +% $amount += $pkg_amount; % % } -- cgit v1.2.1 From a2cbe65edb241a8ba31b82af239f1bfc5070b8ca Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Mon, 6 Jul 2015 14:29:02 -0700 Subject: minor typo --- httemplate/graph/report_money_time.html | 1 + 1 file changed, 1 insertion(+) diff --git a/httemplate/graph/report_money_time.html b/httemplate/graph/report_money_time.html index 8f534c0be..aaaf01b19 100644 --- a/httemplate/graph/report_money_time.html +++ b/httemplate/graph/report_money_time.html @@ -46,6 +46,7 @@ <% emt('Show 12 month totals instead of monthly values') %> + <& /elements/checkbox.html, -- cgit v1.2.1 From 6400a0ec71fc47b217f4ab12bf95b74b77aeb260 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Mon, 6 Jul 2015 14:30:10 -0700 Subject: optionally include discounts in daily cashflow report, #37123 --- FS/FS/Report/Table/Daily.pm | 23 +++++++++++++------- httemplate/graph/money_time_daily.cgi | 31 ++++++++++++--------------- httemplate/graph/report_money_time_daily.html | 12 +++++++++++ 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/FS/FS/Report/Table/Daily.pm b/FS/FS/Report/Table/Daily.pm index 66739379d..8d623e766 100644 --- a/FS/FS/Report/Table/Daily.pm +++ b/FS/FS/Report/Table/Daily.pm @@ -121,16 +121,20 @@ sub data { my @newdata = (); my @newcolors = (); my @newlinks = (); + my @indices = (); foreach my $item ( @{$self->{'items'}} ) { - if ( grep { $_ != 0 } @{$data{'data'}->[$col]} ) { - push @newitems, $data{'items'}->[$col]; - push @newlabels, $data{'item_labels'}->[$col]; - push @newdata, $data{'data'}->[$col]; - push @newcolors, $data{'colors'}->[$col]; - push @newlinks, $data{'links'}->[$col]; - } - + my $is_nonzero = scalar( grep { $_ != 0 } @{ $data{'data'}->[$col] }); + next if ($self->{'remove_empty'} and $is_nonzero == 0); + # no daily reports can normalize yet + push @newitems, $data{'items'}->[$col]; + push @newlabels, $data{'item_labels'}->[$col]; + push @newdata, $data{'data'}->[$col]; + push @newcolors, $data{'colors'}->[$col]; + push @newlinks, $data{'links'}->[$col]; + push @indices, $col; + + } continue { $col++; } @@ -139,7 +143,10 @@ sub data { $data{'data'} = \@newdata; $data{'colors'} = \@newcolors; $data{'links'} = \@newlinks; + $data{'indices'} = \@indices; + } else { # not doing remove_empty; report back that all columns are included + $data{'indices'} = [ 0 .. scalar( @{$self->{'items'}} ) - 1 ]; } \%data; diff --git a/httemplate/graph/money_time_daily.cgi b/httemplate/graph/money_time_daily.cgi index 9b2ca714b..00771d3d6 100644 --- a/httemplate/graph/money_time_daily.cgi +++ b/httemplate/graph/money_time_daily.cgi @@ -8,7 +8,6 @@ 'links' => \%link, 'agentnum' => $agentnum, 'cust_classnum'=> \@classnums, - 'nototal' => scalar($cgi->param('12mo')), 'daily' => 1, 'start_day' => $smday, 'start_month' => $smon+1, @@ -44,19 +43,20 @@ my ($ssec,$smin,$shour,$smday,$smon,$syear,$swday,$syday,$sisdst) my ($esec,$emin,$ehour,$emday,$emon,$eyear,$ewday,$eyday,$eisdst) = localtime($ending); -my @items = qw( invoiced netsales +my @items = ($cgi->param('exclude_discount') ? 'invoiced' : 'gross'); +push @items, + qw( discounted netsales credits netcredits payments receipts refunds netrefunds cashflow netcashflow ); -if ( $cgi->param('12mo') == 1 ) { - @items = map $_.'_12mo', @items; -} my %label = ( - 'invoiced' => 'Gross Sales', + 'gross' => 'Gross Sales', + 'invoiced' => 'Invoiced Sales', 'netsales' => 'Net Sales', + 'discounted' => 'Discounts', 'credits' => 'Gross Credits', 'netcredits' => 'Net Credits', 'payments' => 'Gross Receipts', @@ -68,8 +68,10 @@ my %label = ( ); my %graph_suffix = ( - 'invoiced' => ' (invoiced)', + 'gross' => ' (invoiced + discounts)', + 'invoiced' => '', 'netsales' => ' (invoiced - applied credits)', + 'discounted' => '', 'credits' => ' (credited)', 'netcredits' => ' (applied credits)', 'payments' => ' (payments)', @@ -81,13 +83,8 @@ my %graph_suffix = ( ); my %graph_label = map { $_ => $label{$_}.$graph_suffix{$_} } keys %label; -$label{$_.'_12mo'} = $label{$_}. " (prev 12 months)" - foreach keys %label; - -$graph_label{$_.'_12mo'} = $graph_label{$_}. " (prev 12 months)" - foreach keys %graph_label; - my %color = ( + 'gross' => '9999ff', #light blue 'invoiced' => '9999ff', #light blue 'netsales' => '0000cc', #blue 'credits' => 'ff9999', #light red @@ -98,12 +95,12 @@ my %color = ( 'netrefunds' => 'ff9900', #orange 'cashflow' => '99cc33', #light olive 'netcashflow' => '339900', #olive + 'discounted' => 'cc33cc', #purple-ish? ); -$color{$_.'_12mo'} = $color{$_} - foreach keys %color; my %link = ( - 'invoiced' => "${p}search/cust_bill.html?agentnum=$agentnum;", + 'gross' => "${p}search/cust_bill.html?agentnum=$agentnum;", + 'invoiced' => "${p}search/cust_bill.html?agentnum=$agentnum;invoiced=1;", 'netsales' => "${p}search/cust_bill.html?agentnum=$agentnum;net=1;", 'credits' => "${p}search/cust_credit.html?agentnum=$agentnum;", 'netcredits' => "${p}search/cust_credit_bill.html?agentnum=$agentnum;", @@ -111,7 +108,7 @@ my %link = ( 'receipts' => "${p}search/cust_bill_pay.html?agentnum=$agentnum;", 'refunds' => "${p}search/cust_refund.html?magic=_date;agentnum=$agentnum;", 'netrefunds' => "${p}search/cust_credit_refund.html?agentnum=$agentnum;", + 'discounted' => "${p}search/cust_bill_pkg_discount.html?agentnum=$agentnum;", ); -# XXX link 12mo? diff --git a/httemplate/graph/report_money_time_daily.html b/httemplate/graph/report_money_time_daily.html index e80f5862c..ca3d915f1 100644 --- a/httemplate/graph/report_money_time_daily.html +++ b/httemplate/graph/report_money_time_daily.html @@ -21,6 +21,18 @@ 'multiple' => 1, &> + + + + <& /elements/checkbox.html, + field => 'exclude_discount', + value => 1, + curr_value => 0, + &> + <% emt('Exclude discounts from total sales') %> + + +
-- cgit v1.2.1 From 573a1f97af61acd6d31c70321acbf7bb06bbcebf Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Mon, 6 Jul 2015 21:16:33 -0500 Subject: RT#24684: Payments for Online Bill Pay [Credit Balance Display] --- FS/FS/ClientAPI/MyAccount.pm | 4 +++- FS/FS/Misc.pm | 19 ++++++++++++++++++- FS/FS/cust_main.pm | 5 ++--- fs_selfservice/FS-SelfService/cgi/small_custview.html | 15 +++++++++++---- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 85f85def9..420ed0688 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -23,7 +23,7 @@ use FS::Conf; #use FS::UID qw(dbh); use FS::Record qw(qsearch qsearchs dbh); use FS::Msgcat qw(gettext); -use FS::Misc qw(card_types); +use FS::Misc qw(card_types money_pretty); use FS::Misc::DateTime qw(parse_datetime); use FS::TicketSystem; use FS::ClientAPI_SessionCache; @@ -609,6 +609,7 @@ sub customer_info_short { $return{next_bill_date} ? time2str('%m/%d/%Y', $return{next_bill_date} ) : '(none)'; } + $return{balance_pretty} = money_pretty($return{balance}); $return{countrydefault} = scalar($conf->config('countrydefault')); @@ -692,6 +693,7 @@ sub billing_history { } $return{balance} = $cust_main->balance; + $return{balance_pretty} = money_pretty($return{balance}); $return{next_bill_date} = $cust_main->next_bill_date; $return{next_bill_date_pretty} = $return{next_bill_date} ? time2str('%m/%d/%Y', $return{next_bill_date} ) diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 9aeff93a6..e1f654c34 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -23,6 +23,7 @@ use Encode; csv_from_fixed ocr_image bytes_substr + money_pretty ); $DEBUG = 0; @@ -828,7 +829,7 @@ sub _pslatex { } return if -e "$file.dvi" && -s "$file.dvi"; - die "pslatex $file.tex failed; see $file.log for details?\n"; + die "pslatex $file.tex failed, see $file.log for details?\n"; } @@ -982,6 +983,22 @@ sub bytes_substr { return Encode::decode('utf8', $bytes, $chk); } +=item money_pretty + +Accepts a postive or negative numerical value. +Returns amount formatted for display, +including money character. + +=cut + +sub money_pretty { + my $amount = shift; + my $money_char = $conf->{'money_char'} || '$'; + $amount = sprintf("%0.2f",$amount); + $amount =~ s/^(-?)/$1$money_char/; + return $amount; +} + =back =head1 BUGS diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 46df3ffd8..c6602c1a0 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -32,7 +32,7 @@ use Locale::Country; use FS::UID qw( dbh driver_name ); use FS::Record qw( qsearchs qsearch dbdef regexp_sql ); use FS::Cursor; -use FS::Misc qw( generate_email send_email generate_ps do_print ); +use FS::Misc qw( generate_email send_email generate_ps do_print money_pretty ); use FS::Msgcat qw(gettext); use FS::CurrentUser; use FS::TicketSystem; @@ -4241,8 +4241,7 @@ sub payment_history { } $$item{'balance'} = sprintf("%.2f",$balance); foreach my $key ( qw(amount balance) ) { - $$item{$key.'_pretty'} = $$item{$key}; - $$item{$key.'_pretty'} =~ s/^(-?)/$1$money_char/; + $$item{$key.'_pretty'} = money_pretty($$item{$key}); } push(@out,$item); } diff --git a/fs_selfservice/FS-SelfService/cgi/small_custview.html b/fs_selfservice/FS-SelfService/cgi/small_custview.html index 919df5631..bcbdbdaa6 100644 --- a/fs_selfservice/FS-SelfService/cgi/small_custview.html +++ b/fs_selfservice/FS-SelfService/cgi/small_custview.html @@ -59,10 +59,17 @@ Customer #<%= $display_custnum %> -<%= unless ( $access_pkgnum ) { - $OUT .= '
Balance: $'. $balance. '
'; - } - ''; +<%= +unless ( $access_pkgnum ) { + if ($balance >= 0) { + $OUT .= '
Balance: '. $balance_pretty . '
'; + } else { + my $credit_balance_pretty = $balance_pretty; + $credit_balance_pretty =~ s/-//; + $OUT .= '
Credit Balance: '. $credit_balance_pretty . '
'; + } +} +''; %> -- cgit v1.2.1 From 6de4864902314891cfabcd0adae758854114b1c7 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 6 Jul 2015 23:10:57 -0700 Subject: hide the old typeset statements with a non-default (and not added on upgrade) ACL, RT#34078 --- FS/FS/AccessRight.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm index 1609f085f..0493edd33 100644 --- a/FS/FS/AccessRight.pm +++ b/FS/FS/AccessRight.pm @@ -192,6 +192,7 @@ tie my %rights, 'Tie::IxHash', 'View customer pending payments', #NEW 'Edit customer pending payments', #NEW 'View customer billing events', #NEW + 'View legacy typeset statements', #new, but no need to phase in ], ### @@ -457,6 +458,7 @@ sub default_superuser_rights { 'Echeck void', 'Void invoices',#people are overusing this when credits are more appropriate 'Backdate credit', + 'View legacy typeset statments', ); no warnings 'uninitialized'; -- cgit v1.2.1 From 2e52b3a969c6325e9b74ef4ac7f5d435a999f309 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Mon, 6 Jul 2015 23:11:15 -0700 Subject: hide the old typeset statements with a non-default (and not added on upgrade) ACL, RT#34078 --- httemplate/view/cust_main/menu.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/httemplate/view/cust_main/menu.html b/httemplate/view/cust_main/menu.html index 90a20ed50..9486c24e0 100644 --- a/httemplate/view/cust_main/menu.html +++ b/httemplate/view/cust_main/menu.html @@ -452,9 +452,9 @@ my @menu = ( }, # separator, definitely { - label => 'Download statement', + label => 'Download PDF statement', url => "view/cust_main_statement-pdf.cgi?$custnum", - acl => 'List invoices', + acl => 'View legacy typeset statements', condition => sub { FS::cust_bill->count('custnum = ?', shift->custnum) > 0 }, -- cgit v1.2.1 From 4a03b0b62cef514f9217e7be61cf7a16218ea387 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 7 Jul 2015 11:31:42 -0700 Subject: optionally include discounts in sales report, #37124 --- FS/FS/Report/Table.pm | 58 +++++++++++------------------- httemplate/graph/cust_bill_pkg.cgi | 57 +++++++++++++++++------------ httemplate/graph/report_cust_bill_pkg.html | 6 ++++ httemplate/search/cust_bill_pkg.cgi | 56 +++++++++++++++++++---------- 4 files changed, 98 insertions(+), 79 deletions(-) diff --git a/FS/FS/Report/Table.pm b/FS/FS/Report/Table.pm index eef983d68..cba968b43 100644 --- a/FS/FS/Report/Table.pm +++ b/FS/FS/Report/Table.pm @@ -439,8 +439,8 @@ sub cust_pkg_recur_cost { =item cust_bill_pkg: the total package charges on invoice line items. -'charges': limit the type of charges included (setup, recur, usage). -Should be a string containing one or more of 'S', 'R', or 'U'; if +'charges': limit the type of charges included (setup, recur, usage, discount). +Should be a string containing one or more of 'S', 'R', 'U', or 'D'; if unspecified, defaults to all three. 'classnum': limit to this package class. @@ -470,6 +470,7 @@ sub cust_bill_pkg { $sum += $self->cust_bill_pkg_setup(@_) if $charges{S}; $sum += $self->cust_bill_pkg_recur(@_) if $charges{R}; $sum += $self->cust_bill_pkg_detail(@_) if $charges{U}; + $sum += $self->cust_bill_pkg_discount(@_) if $charges{D}; if ($opt{'average_per_cust_pkg'}) { my $count = $self->cust_bill_pkg_count_pkgnum(@_); @@ -656,47 +657,28 @@ sub cust_bill_pkg_detail { } sub cust_bill_pkg_discount { - my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; - - #need to do this the new multi-classnum way if it gets re-enabled - #my $where = ''; - #my $comparison = ''; - #if ( $opt{'classnum'} =~ /^(\d+)$/ ) { - # if ( $1 == 0 ) { - # $comparison = "IS NULL"; - # } else { - # $comparison = "= $1"; - # } - # - # if ( $opt{'use_override'} ) { - # $where = "( - # part_pkg.classnum $comparison AND pkgpart_override IS NULL OR - # override.classnum $comparison AND pkgpart_override IS NOT NULL - # )"; - # } else { - # $where = "part_pkg.classnum $comparison"; - # } - #} + my $self = shift; + my ($speriod, $eperiod, $agentnum, %opt) = @_; + # apply all the same constraints here as for setup/recur $agentnum ||= $opt{'agentnum'}; - my $total_sql = - " SELECT COALESCE( SUM( cust_bill_pkg_discount.amount ), 0 ) "; + my @where = ( + '(pkgnum != 0 OR feepart IS NOT NULL)', + $self->with_classnum($opt{'classnum'}, $opt{'use_override'}), + $self->with_report_option(%opt), + $self->in_time_period_and_agent($speriod, $eperiod, $agentnum), + $self->with_refnum(%opt), + $self->with_cust_classnum(%opt) + ); - $total_sql .= - " FROM cust_bill_pkg_discount - LEFT JOIN cust_bill_pkg USING ( billpkgnum ) - LEFT JOIN cust_bill USING ( invnum ) - LEFT JOIN cust_main USING ( custnum ) - WHERE ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum); - # LEFT JOIN cust_pkg_discount USING ( pkgdiscountnum ) - # LEFT JOIN discount USING ( discountnum ) - # LEFT JOIN cust_pkg USING ( pkgnum ) - # LEFT JOIN part_pkg USING ( pkgpart ) - # LEFT JOIN part_pkg AS override ON pkgpart_override = override.pkgpart - - return $self->scalar_sql($total_sql); + my $total_sql = "SELECT COALESCE(SUM(cust_bill_pkg_discount.amount), 0) + FROM cust_bill_pkg_discount + JOIN cust_bill_pkg USING (billpkgnum) + $cust_bill_pkg_join + WHERE " . join(' AND ', grep $_, @where); + $self->scalar_sql($total_sql); } ##### package churn report ##### diff --git a/httemplate/graph/cust_bill_pkg.cgi b/httemplate/graph/cust_bill_pkg.cgi index ea7fee932..b5486f4af 100644 --- a/httemplate/graph/cust_bill_pkg.cgi +++ b/httemplate/graph/cust_bill_pkg.cgi @@ -27,6 +27,8 @@ my $bottom_link = "$link;"; my $use_usage = $cgi->param('use_usage') || 0; my $use_setup = $cgi->param('use_setup') || 0; +my $use_discount = $cgi->param('use_discount') || 2; + my $use_override = $cgi->param('use_override') ? 1 : 0; my $average_per_cust_pkg = $cgi->param('average_per_cust_pkg') ? 1 : 0; my $distribute = $cgi->param('distribute') ? 1 : 0; @@ -41,11 +43,13 @@ if ( $average_per_cust_pkg ) { } my %charge_labels = ( + 'SRU'=> 'setup + recurring', 'SR' => 'setup + recurring', 'RU' => 'recurring', 'S' => 'setup', 'R' => 'recurring', 'U' => 'usage', + 'D' => 'discount', ); #XXX or virtual @@ -186,6 +190,10 @@ elsif ( $use_usage == 2 ) { $components[-1] =~ s/U//; } +if ( $use_discount == 1 ) { + push @components, 'D'; +} # else leave discounts off entirely; never combine them with setup/recur + # Categorization of line items goes # Agent -> Referral -> Package class -> Component (setup/recur/usage) # If per-agent totals are enabled, they go under the Agent level. @@ -240,21 +248,26 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a 'charges' => $component, ); - # XXX this is very silly. we should cache it server-side and - # just put a cache identifier in the link - my $rowlink = "$link;". - ($all_agent ? '' : "agentnum=$row_agentnum;"). + my $row_link = "$link;". + "charges=$component;". + "distribute=$distribute;"; + + if ( $component eq 'D' ) { + # discounts ignore 'charges' and 'distribute' + $row_link = "${p}search/cust_bill_pkg_discount.html?"; + } + + $row_link .= ($all_agent ? '' : "agentnum=$row_agentnum;"). ($all_part_referral ? '' : "refnum=$row_refnum;"). (join('',map {"cust_classnum=$_;"} @cust_classnums)). - "distribute=$distribute;". - "use_override=$use_override;charges=$component;"; - $rowlink .= "$class_param=$_;" foreach @classnums; + "use_override=$use_override;"; + $row_link .= "$class_param=$_;" foreach @classnums; if ( $all_report_options ) { push @row_params, 'all_report_options', 1; - $rowlink .= 'all_report_options=1'; + $row_link .= 'all_report_options=1'; } push @params, \@row_params; - push @links, $rowlink; + push @links, $row_link; @colorbuf = @agent_colors unless @colorbuf; push @colors, shift @colorbuf; @@ -293,13 +306,22 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a ($all_part_referral ? () : ('refnum' => $row_refnum)), 'charges' => $component, ); + my $row_link = "$link;". - ($all_agent ? '' : "agentnum=$row_agentnum;"). + "charges=$component;". + "distribute=$distribute;"; + + if ( $component eq 'D' ) { + # discounts ignore 'charges' and 'distribute' + $row_link ="${p}search/cust_bill_pkg_discount.html?"; + } + + $row_link .= ($all_agent ? '' : "agentnum=$row_agentnum;"). ($all_part_referral ? '' : "refnum=$row_refnum;"). (join('',map {"cust_classnum=$_;"} @cust_classnums)). "$class_param=$row_classnum;". - "distribute=$distribute;". - "use_override=$use_override;charges=$component;"; + "use_override=$use_override;"; + if ( $class_param eq 'report_optionnum' ) { push @row_params, 'all_report_options' => 1, @@ -366,17 +388,6 @@ foreach my $agent ( $all_agent || $sel_agent || $FS::CurrentUser::CurrentUser->a } -# may be useful at some point... -#if ( $average_per_cust_pkg ) { -# @items = map { ('cust_bill_pkg', 'cust_bill_pkg_count_pkgnum') } @items; -# @labels = map { $_, "Packages" } @labels; -# @params = map { $_, $_ } @params; -# @links = map { $_, $_ } @links; -# @colors = map { $_, $_ } @colors; -# @no_graph = map { $_, 1 } @no_graph; -#} -# - #use Data::Dumper; if ( $cgi->param('debug') == 1 ) { $FS::Report::Table::DEBUG = 1; diff --git a/httemplate/graph/report_cust_bill_pkg.html b/httemplate/graph/report_cust_bill_pkg.html index 76d3a6ca3..1db86e393 100644 --- a/httemplate/graph/report_cust_bill_pkg.html +++ b/httemplate/graph/report_cust_bill_pkg.html @@ -190,6 +190,12 @@ window.onload = class_mode_changed; 'onchange'=> 'enable_agent_totals', &> % } +<& /elements/tr-select.html, + 'label' => 'Discounts', + 'field' => 'use_discount', + 'options' => [ 1, 2 ], + 'labels' => { 1 => 'Separate', 2 => 'Do not show' }, +&> Colors diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi index 91fe4e028..6c2cfde1b 100644 --- a/httemplate/search/cust_bill_pkg.cgi +++ b/httemplate/search/cust_bill_pkg.cgi @@ -193,8 +193,8 @@ my $conf = new FS::Conf; my $money_char = $conf->config('money_char') || '$'; my @select = ( 'cust_bill_pkg.*', 'cust_bill._date' ); -my @total = ( 'COUNT(*)', 'SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)'); -my @total_desc = ( $money_char.'%.2f total' ); # sprintf strings +my @total = ( 'COUNT(*)' ); +my @total_desc = (); my @peritem = ( 'setup', 'recur' ); my @peritem_desc = ( 'Setup charges', 'Recurring charges' ); @@ -516,14 +516,32 @@ if ( $cgi->param('nottax') ) { # setup/recur/usage separation my %charges = map { $_ => 1 } split('', $cgi->param('charges') || 'SRU'); - if ( $charges{R} and $charges{U} ) { + if ( $charges{S} and $charges{R} and $charges{U} ) { + # in this case, show discounts - # default, don't change @peritem or @total - if ( !$charges{S} ) { - push @where, 'cust_bill_pkg.recur > 0'; - $total[1] = "SUM(cust_bill_pkg.recur)"; - $total_desc[0] = "$money_char%.2f recurring"; - } + $join_pkg .= ' JOIN ( + SELECT billpkgnum, COALESCE(SUM(amount), 0) AS discounted + FROM cust_bill_pkg_discount RIGHT JOIN cust_bill_pkg USING (billpkgnum) + GROUP BY billpkgnum + ) AS _discount ON (cust_bill_pkg.billpkgnum = _discount.billpkgnum) + '; + push @select, '_discount.discounted'; + + push @peritem, 'discounted'; + push @peritem_desc, 'Discount'; + push @total, 'SUM(cust_bill_pkg.setup + cust_bill_pkg.recur + discounted)', + 'SUM(discounted)', + 'SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)'; + push @total_desc, "$money_char%.2f gross sales", + "− $money_char%.2f discounted", + "= $money_char%.2f invoiced"; + + } elsif ( $charges{R} and $charges{U} ) { + + # hide rows with no recurring fee, and show the sum of recurring fees only + push @where, 'cust_bill_pkg.recur > 0'; + push @total, "SUM(cust_bill_pkg.recur)"; + push @total_desc, "$money_char%.2f recurring"; } elsif ( $charges{R} and !$charges{U} ) { @@ -532,8 +550,8 @@ if ( $cgi->param('nottax') ) { push @select, "($recur_no_usage) AS recur_no_usage"; $peritem[1] = 'recur_no_usage'; $peritem_desc[1] = 'Recurring charges (excluding usage)'; - $total[1] = "SUM($recur_no_usage)"; - $total_desc[0] = "$money_char%.2f recurring"; + push @total, "SUM($recur_no_usage)"; + push @total_desc, "$money_char%.2f recurring"; if ( !$charges{S} ) { push @where, "($recur_no_usage) > 0"; } @@ -545,8 +563,8 @@ if ( $cgi->param('nottax') ) { # there's already a method named 'usage' $peritem[1] = '_usage'; $peritem_desc[1] = 'Usage charge'; - $total[1] = "SUM($usage)"; - $total_desc[0] = "$money_char%.2f usage charges"; + push @total, "SUM($usage)"; + push @total_desc, "$money_char%.2f usage charges"; if ( !$charges{S} ) { push @where, "($usage) > 0"; } @@ -554,8 +572,8 @@ if ( $cgi->param('nottax') ) { } elsif ( $charges{S} ) { push @where, "cust_bill_pkg.setup > 0"; - $total[1] = "SUM(cust_bill_pkg.setup)"; - $total_desc[0] = "$money_char%.2f setup"; + push @total, "SUM(cust_bill_pkg.setup)"; + push @total_desc, "$money_char%.2f setup"; } # else huh? you have to have SOME charges @@ -578,10 +596,11 @@ if ( $cgi->param('nottax') ) { } } - $total[1] = 'SUM( + push @total, 'SUM( COALESCE(cust_bill_pkg_tax_rate_location.amount, cust_bill_pkg.setup + cust_bill_pkg.recur) )'; + push @total_desc, "$money_char%.2f total"; } else { # the internal-tax case @@ -591,8 +610,9 @@ if ( $cgi->param('nottax') ) { '; # don't double-count the components of consolidated taxes - $total[0] = 'COUNT(DISTINCT cust_bill_pkg.billpkgnum)'; - $total[1] = 'SUM(cust_bill_pkg_tax_location.amount)'; + @total = ( 'COUNT(DISTINCT cust_bill_pkg.billpkgnum)', + 'SUM(cust_bill_pkg_tax_location.amount)' ); + @total_desc = "$money_char%.2f total"; # package classnum if ( grep { $_ eq 'classnum' } $cgi->param ) { -- cgit v1.2.1 From ba95860daaf6c4de2f90ef28057516bc7d44c8a0 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Tue, 7 Jul 2015 14:48:14 -0700 Subject: add a tab to grouped search containing all rows, #25944 --- httemplate/search/elements/cust_pay_or_refund.html | 10 ++++++---- httemplate/search/elements/grouped-search/core | 9 +++++++++ httemplate/search/elements/grouped-search/html | 18 ++++++++++++++++++ httemplate/search/elements/grouped-search/html-print | 4 +++- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html index ce513ab15..5808e5f3e 100755 --- a/httemplate/search/elements/cust_pay_or_refund.html +++ b/httemplate/search/elements/cust_pay_or_refund.html @@ -57,13 +57,14 @@ Examples: 'group_column' => 'payby', 'group_label' => 'payby_name', - 'subtotal' => { 'paid' => 'sum(paid)' }, + 'subtotal' => { $opt{name_verb} => "sum($amount_field)" }, 'subtotal_row' => [ 'Subtotal', - sub { sprintf($money, $_[0]->paid) }, + sub { sprintf($money, $_[0]->$amount_field) }, ], 'total_row' => [ 'Total', - sub { sprintf("$money", $_[0]->paid) }, + sub { sprintf("$money", $_[0]->$amount_field) }, ], + 'show_combined' => 1, &> <%init> @@ -181,7 +182,7 @@ push @fields, 'payby_payinfo_pretty', sub { sprintf($money, shift->$amount_field() ) }, ; push @link_onclicks, $sub_receipt, ''; -push @sort_fields, '', $amount_field; +push @sort_fields, 'paysort', $amount_field; if ( $unapplied ) { push @header, emt('Unapplied'); @@ -243,6 +244,7 @@ if ( $cgi->param('magic') ) { my @search = (); my @select = ( "$table.*", + "( $table.payby || ' ' || coalesce($table.paymask, $table.payinfo) ) AS paysort", FS::UI::Web::cust_sql_fields(), 'cust_main.custnum AS cust_main_custnum', ); diff --git a/httemplate/search/elements/grouped-search/core b/httemplate/search/elements/grouped-search/core index fe47fb7d1..ffa8cee39 100644 --- a/httemplate/search/elements/grouped-search/core +++ b/httemplate/search/elements/grouped-search/core @@ -130,6 +130,15 @@ for my $i (0 .. scalar(@groups) - 1) { push @queries, $detail_query; } +if ( $opt{show_combined} ) { + # set up group 0 as a combined view + unshift @groups, $totals; + unshift @group_labels, 'All ' . PL($opt{name_singular}) . + ' (' . $totals->num_rows . ')'; + unshift @group_footers, []; # the total footer will suffice + unshift @queries, $base_query->clone; +} + my @total_footer; if ($opt{'total_row'}) { for( my $col = 0; diff --git a/httemplate/search/elements/grouped-search/html b/httemplate/search/elements/grouped-search/html index aff17cea0..df1471a52 100644 --- a/httemplate/search/elements/grouped-search/html +++ b/httemplate/search/elements/grouped-search/html @@ -71,6 +71,23 @@ for (my $i = 0; $i < $group_info->{num}; $i++) { push @menubar, $group_info->{group_labels}[$i], ";group=$i"; } +# not enabled yet; if we need this at some point, enable it on a per-report +# basis and then disable it for search/cust_pay.html, because it's redundant +# to see "Check Check #130108", "Credit card Card #401...", etc. + +## if this is the combined view, add a column for the group key +#if ( $curr_group == 0 and $opt{'show_combined'} ) { +# unshift @{$opt{'header'}}, ''; +# unshift @{$opt{'fields'}}, $opt{group_label}; +# unshift @{$opt{'sort_fields'}}, $opt{group_column} if $opt{'sort_fields'}; +# $opt{'align'} = 'c'.$opt{'align'}; +# foreach (qw(header2 links link_onclicks color size style cell_style xls_format)) { +# if ( $opt{$_} ) { +# unshift @{$opt{$_}}, ''; +# } +# } +#} + <& /elements/header.html, $opt{title} &> @@ -93,6 +110,7 @@ for (my $i = 0; $i < $group_info->{num}; $i++) {
<% emt('as Excel spreadsheet') %>
% $cgi->param('type', 'html-print'); <% emt('as printable copy') %>
+% $cgi->delete('type');

<% $pager %> diff --git a/httemplate/search/elements/grouped-search/html-print b/httemplate/search/elements/grouped-search/html-print index c4c3b1ef5..6d9521ba3 100644 --- a/httemplate/search/elements/grouped-search/html-print +++ b/httemplate/search/elements/grouped-search/html-print @@ -5,7 +5,9 @@ The "printable" view (all groups on one page). <%init> my %opt = @_; -my $group_info = $m->comp('core', %opt); +my $group_info = $m->comp('core', %opt, + 'show_combined' => 0 +); my $ncols = scalar(@{ $opt{header} }); my $total_footer = $group_info->{total_footer} || []; -- cgit v1.2.1 From 4b1eb1861b9dce418af41b88e9b5d58342d4a3d6 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Wed, 8 Jul 2015 14:40:59 -0700 Subject: fix package def creation under SureTax --- httemplate/elements/tr-part_pkg-taxproducts.html | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/httemplate/elements/tr-part_pkg-taxproducts.html b/httemplate/elements/tr-part_pkg-taxproducts.html index 274dc3b48..ad464ca77 100644 --- a/httemplate/elements/tr-part_pkg-taxproducts.html +++ b/httemplate/elements/tr-part_pkg-taxproducts.html @@ -21,9 +21,12 @@ my %opt = @_; my $field = delete($opt{field}) || 'taxproductnum'; my $pkgpart = delete($opt{pkgpart}); -my $part_pkg = FS::part_pkg->by_key($pkgpart); -my %pkg_options = $part_pkg->options; -$pkg_options{'usage_taxproductnum_'} = $part_pkg->taxproductnum; +my %pkg_options; +if ($pkgpart) { + my $part_pkg = FS::part_pkg->by_key($pkgpart); + my %pkg_options = $part_pkg->options; + $pkg_options{'usage_taxproductnum_'} = $part_pkg->taxproductnum; +} my @classes = qsearch('usage_class', { 'disabled' => '' }); unshift @classes, -- cgit v1.2.1 From 04969741a587fa292c830b83b077c4c7522621b9 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Wed, 8 Jul 2015 17:38:36 -0500 Subject: RT#36889: cust-fields options to include agent --- FS/FS/ConfDefaults.pm | 3 +++ FS/FS/UI/Web.pm | 1 + 2 files changed, 4 insertions(+) diff --git a/FS/FS/ConfDefaults.pm b/FS/FS/ConfDefaults.pm index de08f7d68..5b8399af5 100644 --- a/FS/FS/ConfDefaults.pm +++ b/FS/FS/ConfDefaults.pm @@ -71,6 +71,9 @@ sub cust_fields_avail { ( 'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | Invoicing email(s) | Payment Type | Current Balance' => 'custnum | Status | Last, First | Company | (address) | (all phones) | (service address) | Invoicing email(s) | Payment Type | Current Balance', + 'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | Invoicing email(s) | Payment Type | Current Balance | Agent Cust#' => + 'custnum | Status | Last, First | Company | (address) | (all phones) | (service address) | Invoicing email(s) | Payment Type | Current Balance | Agent Cust#', + 'Cust# | Cust. Status | Name | Company | (bill) Address 1 | (bill) Address 2 | (bill) City | (bill) State | (bill) Zip | (bill) Country | (bill) Latitude | (bill) Longitude | Day phone | Night phone | Mobile phone | Fax number | (service) Address 1 | (service) Address 2 | (service) City | (service) State | (service) Zip | (service) Country | (service) Latitude | (service) Longitude | Invoicing email(s) | Payment Type | Current Balance' => 'custnum | Status | Last, First | Company | (address+coord) | (all phones) | (service address+coord) | Invoicing email(s) | Payment Type | Current Balance', diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm index ca50b278e..6655f270f 100644 --- a/FS/FS/UI/Web.pm +++ b/FS/FS/UI/Web.pm @@ -273,6 +273,7 @@ sub cust_header { 'Invoicing email(s)' => 'invoicing_list_emailonly_scalar', 'Payment Type' => 'payby', 'Current Balance' => 'current_balance', + 'Agent Cust#' => 'agent_custid', ); $header2method{'Cust#'} = 'display_custnum' if $conf->exists('cust_main-default_agent_custid'); -- cgit v1.2.1 From 4f5619288413a185e9933088d9dd8c5afbc55dfa Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Wed, 8 Jul 2015 19:15:33 -0500 Subject: RT#34078: Payment History Report / Statement [Fixes for acl and text preview] --- FS/FS/cust_main.pm | 2 ++ httemplate/misc/email-customer-statement.html | 6 +++++- httemplate/misc/email-customers.html | 20 +++++++++++++++----- .../misc/process/email-customer-statement.html | 9 +++++++++ httemplate/view/cust_main/menu.html | 2 +- 5 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 httemplate/misc/process/email-customer-statement.html diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index c6602c1a0..f55c3493c 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -4253,6 +4253,8 @@ sub payment_history { 'description' => 'Previous balance', 'amount' => sprintf("%.2f",$previous), 'balance' => sprintf("%.2f",$previous), + 'date' => $$opt{'start_date'}, + 'date_pretty' => $self->time2str_local('short', $$opt{'start_date'} ), }; #false laziness with above foreach my $key ( qw(amount balance) ) { diff --git a/httemplate/misc/email-customer-statement.html b/httemplate/misc/email-customer-statement.html index 65660f1be..92ce1c4d1 100644 --- a/httemplate/misc/email-customer-statement.html +++ b/httemplate/misc/email-customer-statement.html @@ -5,13 +5,17 @@ 'no_search_fields' => [ 'start_date', 'end_date' ], 'alternate_form' => $alternate_form, 'post_search_hook' => $post_search_hook, + 'acl' => $acl, + 'process_url' => 'process/email-customer-statement.html', ) %> <%init> +my $acl = 'Resend invoices'; + die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('View invoices'); + unless $FS::CurrentUser::CurrentUser->access_right($acl); my $alternate_form = sub { # this could maaaybe be a separate element, for cleanliness diff --git a/httemplate/misc/email-customers.html b/httemplate/misc/email-customers.html index 3327303e4..57f451fdc 100644 --- a/httemplate/misc/email-customers.html +++ b/httemplate/misc/email-customers.html @@ -10,8 +10,12 @@ This may also be used as an element in other pages, enabling you to provide an alternate initial form while using this for search freezing/thawing and preview/send actions, with the following options: +acl - the access right to use (defaults to 'Bulk send customer notices') + form_action - the URL to submit the form to +process_url - the URL for starting the JSRPC process + title - the title of the page no_search_fields - arrayref of additional fields that are not search parameters @@ -50,7 +54,7 @@ should be used to set msgnum or from/subject/html_body cgi params <% include('/elements/progress-init.html', 'OneTrueForm', [ qw( search table from subject html_body text_body msgnum ) ], - 'process/email-customers.html', + $process_url, $pdest, ) %> @@ -90,7 +94,7 @@ should be used to set msgnum or from/subject/html_body cgi params - Message (HTML display): + Message (HTML display): <% $html_body %> @@ -101,8 +105,11 @@ should be used to set msgnum or from/subject/html_body cgi params % ); - Message (Text display): -
<% $text_body %>
+ Message (Text display): + + click to view + + @@ -192,13 +199,16 @@ Template: my %opt = @_; +$opt{'acl'} ||= 'Bulk send customer notices'; + die "access denied" - unless $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices'); + unless $FS::CurrentUser::CurrentUser->access_right($opt{'acl'}); my $conf = FS::Conf->new; my @no_search_fields = qw( action table from subject html_body text_body popup url ); my $form_action = $opt{'form_action'} || 'email-customers.html'; +my $process_url = $opt{'process_url'} || 'process/email-customers.html'; my $title = $opt{'title'} || 'Send customer notices'; push( @no_search_fields, @{$opt{'no_search_fields'}} ) if $opt{'no_search_fields'}; diff --git a/httemplate/misc/process/email-customer-statement.html b/httemplate/misc/process/email-customer-statement.html new file mode 100644 index 000000000..40a8a702a --- /dev/null +++ b/httemplate/misc/process/email-customer-statement.html @@ -0,0 +1,9 @@ +<% $server->process %> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Resend invoices'); + +my $server = new FS::UI::Web::JSRPC 'FS::cust_main_Mixin::process_email_search_result', $cgi; + + diff --git a/httemplate/view/cust_main/menu.html b/httemplate/view/cust_main/menu.html index 9486c24e0..ab56bcfcb 100644 --- a/httemplate/view/cust_main/menu.html +++ b/httemplate/view/cust_main/menu.html @@ -493,7 +493,7 @@ my @menu = ( uri_escape($cgi->self_url); }, condition => sub { $invoicing_list_emailonly }, - acl => [ 'View invoices', 'Bulk send customer notices' ], + acl => 'Resend invoices', }, ], [ -- cgit v1.2.1 From 1c538bfabc2cd31f27067505f0c3d1a46cba6ef0 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Thu, 9 Jul 2015 22:18:55 -0700 Subject: RT 4.2.11, ticket#13852 --- rt/.perlcriticrc | 20 + rt/Makefile.in | 56 +- rt/README | 64 +- rt/aclocal.m4 | 6 +- rt/bin/rt | 242 +- rt/bin/rt-crontool.in | 71 +- rt/bin/rt-mailgate.in | 50 +- rt/bin/rt.in | 242 +- rt/configure | 267 +- rt/configure.ac | 109 +- rt/devel/tools/cmd-boilerplate | 89 + rt/devel/tools/css_tidy | 59 + rt/devel/tools/extract-message-catalog | 365 +- rt/devel/tools/factory | 373 - rt/devel/tools/merge-rosetta.pl | 51 - rt/devel/tools/rt-apache | 46 +- rt/devel/tools/rt-attributes-editor | 15 +- rt/devel/tools/rt-message-catalog | 224 + rt/devel/tools/rt-static-docs | 20 +- rt/docs/UPGRADING-3.8 | 10 +- rt/docs/UPGRADING-4.0 | 20 +- rt/docs/UPGRADING-4.2 | 337 + rt/docs/authentication.pod | 168 + rt/docs/automating_rt.pod | 234 + rt/docs/backups.pod | 106 +- rt/docs/charts.pod | 246 + rt/docs/customizing/approvals.pod | 6 +- rt/docs/customizing/articles_introduction.pod | 21 +- rt/docs/customizing/styling_rt.pod | 46 +- rt/docs/customizing/templates.pod | 56 +- rt/docs/dashboards.pod | 206 + rt/docs/extending/clickable_links.pod | 1 + rt/docs/extending/external_custom_fields.pod | 10 +- rt/docs/extensions.pod | 102 + rt/docs/full_text_indexing.pod | 157 +- rt/docs/hacking.pod | 12 +- rt/docs/initialdata.pod | 85 +- rt/docs/reminders.pod | 67 + rt/docs/rt_perl.pod | 163 + rt/docs/schema.dot | 7 +- rt/docs/security.pod | 6 +- rt/docs/web_deployment.pod | 67 +- rt/docs/writing_extensions.pod | 376 + rt/etc/RT_Config.pm.in | 1106 ++- rt/etc/RT_SiteConfig.pm | 2 +- rt/etc/acl.Pg | 13 +- rt/etc/acl.mysql | 7 +- rt/etc/initialdata | 350 +- rt/etc/schema.Pg | 52 +- rt/etc/schema.SQLite | 257 +- rt/etc/schema.mysql | 55 +- rt/etc/upgrade/3.1.0/content | 2 - rt/etc/upgrade/3.1.0/schema.Oracle | 20 +- rt/etc/upgrade/3.1.15/content | 5 +- rt/etc/upgrade/3.1.17/content | 7 +- rt/etc/upgrade/3.3.0/content | 1 - rt/etc/upgrade/3.3.11/content | 1 - rt/etc/upgrade/3.5.1/content | 21 +- rt/etc/upgrade/3.7.1/content | 5 +- rt/etc/upgrade/3.7.10/content | 5 +- rt/etc/upgrade/3.7.15/content | 5 +- rt/etc/upgrade/3.7.19/content | 49 +- rt/etc/upgrade/3.7.82/content | 5 +- rt/etc/upgrade/3.7.85/content | 15 +- rt/etc/upgrade/3.7.86/content | 13 +- rt/etc/upgrade/3.7.87/content | 5 +- rt/etc/upgrade/3.8-ical-extension.in | 6 +- rt/etc/upgrade/3.8.0/content | 13 +- rt/etc/upgrade/3.8.1/content | 13 +- rt/etc/upgrade/3.8.2/content | 77 +- rt/etc/upgrade/3.8.3/content | 55 +- rt/etc/upgrade/3.8.4/content | 10 +- rt/etc/upgrade/3.8.6/content | 5 +- rt/etc/upgrade/3.8.8/content | 9 +- rt/etc/upgrade/3.8.9/content | 10 +- rt/etc/upgrade/3.9.1/content | 15 +- rt/etc/upgrade/3.9.2/content | 15 +- rt/etc/upgrade/3.9.3/schema.Oracle | 3 +- rt/etc/upgrade/3.9.3/schema.Pg | 5 +- rt/etc/upgrade/3.9.3/schema.mysql | 5 +- rt/etc/upgrade/3.9.5/backcompat | 16 +- rt/etc/upgrade/3.9.5/schema.Oracle | 30 +- rt/etc/upgrade/3.9.5/schema.Pg | 27 +- rt/etc/upgrade/3.9.5/schema.mysql | 9 +- rt/etc/upgrade/3.9.7/content | 29 +- rt/etc/upgrade/3.9.7/schema.Oracle | 16 +- rt/etc/upgrade/3.9.7/schema.Pg | 14 +- rt/etc/upgrade/3.9.7/schema.mysql | 8 +- rt/etc/upgrade/3.9.8/content | 11 +- rt/etc/upgrade/3.9.8/schema.Pg | 5 + rt/etc/upgrade/3.9.8/schema.SQLite | 6 +- rt/etc/upgrade/3.9.8/schema.mysql | 5 + rt/etc/upgrade/4.0-customfield-checkbox-extension | 7 +- .../upgrade/4.0-customfield-checkbox-extension.in | 7 +- rt/etc/upgrade/4.0.0rc7/content | 13 +- rt/etc/upgrade/4.0.1/content | 42 +- rt/etc/upgrade/4.0.18/content | 14 + rt/etc/upgrade/4.0.19/content | 29 + rt/etc/upgrade/4.0.19/schema.mysql | 5 + rt/etc/upgrade/4.0.3/content | 5 +- rt/etc/upgrade/4.0.4/content | 7 +- rt/etc/upgrade/4.0.6/content | 7 +- rt/etc/upgrade/4.0.9/content | 12 +- rt/etc/upgrade/4.1.0/content | 43 + rt/etc/upgrade/4.1.1/acl.Pg | 31 + rt/etc/upgrade/4.1.1/content | 36 + rt/etc/upgrade/4.1.1/schema.Oracle | 29 + rt/etc/upgrade/4.1.1/schema.Pg | 36 + rt/etc/upgrade/4.1.1/schema.SQLite | 31 + rt/etc/upgrade/4.1.1/schema.mysql | 32 + rt/etc/upgrade/4.1.10/schema.Oracle | 1 + rt/etc/upgrade/4.1.10/schema.Pg | 1 + rt/etc/upgrade/4.1.10/schema.mysql | 1 + rt/etc/upgrade/4.1.11/schema.Oracle | 1 + rt/etc/upgrade/4.1.11/schema.Pg | 1 + rt/etc/upgrade/4.1.11/schema.mysql | 1 + rt/etc/upgrade/4.1.12/content | 10 + rt/etc/upgrade/4.1.13/backcompat | 34 + rt/etc/upgrade/4.1.13/schema.Oracle | 3 + rt/etc/upgrade/4.1.13/schema.Pg | 3 + rt/etc/upgrade/4.1.13/schema.SQLite | 3 + rt/etc/upgrade/4.1.13/schema.mysql | 2 + rt/etc/upgrade/4.1.14/schema.Oracle | 1 + rt/etc/upgrade/4.1.14/schema.Pg | 3 + rt/etc/upgrade/4.1.14/schema.mysql | 3 + rt/etc/upgrade/4.1.15/content | 22 + rt/etc/upgrade/4.1.16/content | 16 + rt/etc/upgrade/4.1.17/content | 26 + rt/etc/upgrade/4.1.18/content | 16 + rt/etc/upgrade/4.1.19/schema.Oracle | 1 + rt/etc/upgrade/4.1.19/schema.Pg | 3 + rt/etc/upgrade/4.1.19/schema.mysql | 3 + rt/etc/upgrade/4.1.20/content | 56 + rt/etc/upgrade/4.1.21/content | 64 + rt/etc/upgrade/4.1.22/content | 85 + rt/etc/upgrade/4.1.22/schema.Oracle | 1 + rt/etc/upgrade/4.1.22/schema.Pg | 1 + rt/etc/upgrade/4.1.22/schema.SQLite | 1 + rt/etc/upgrade/4.1.22/schema.mysql | 1 + rt/etc/upgrade/4.1.23/indexes | 168 + rt/etc/upgrade/4.1.4/content | 49 + rt/etc/upgrade/4.1.4/schema.Oracle | 1 + rt/etc/upgrade/4.1.4/schema.Pg | 1 + rt/etc/upgrade/4.1.4/schema.SQLite | 1 + rt/etc/upgrade/4.1.4/schema.mysql | 1 + rt/etc/upgrade/4.1.5/content | 34 + rt/etc/upgrade/4.1.5/schema.Oracle | 6 + rt/etc/upgrade/4.1.5/schema.Pg | 2 + rt/etc/upgrade/4.1.5/schema.mysql | 2 + rt/etc/upgrade/4.1.6/content | 43 + rt/etc/upgrade/4.1.7/schema.Oracle | 5 + rt/etc/upgrade/4.1.7/schema.Pg | 5 + rt/etc/upgrade/4.1.7/schema.SQLite | 2 + rt/etc/upgrade/4.1.7/schema.mysql | 5 + rt/etc/upgrade/4.1.8/schema.Oracle | 2 + rt/etc/upgrade/4.1.8/schema.Pg | 2 + rt/etc/upgrade/4.1.8/schema.SQLite | 3 + rt/etc/upgrade/4.1.8/schema.mysql | 2 + rt/etc/upgrade/4.1.9/content | 190 + rt/etc/upgrade/4.2.1/content | 14 + rt/etc/upgrade/4.2.10/content | 19 + rt/etc/upgrade/4.2.11/content | 60 + rt/etc/upgrade/4.2.2/content | 59 + rt/etc/upgrade/4.2.2/schema.mysql | 5 + rt/etc/upgrade/4.2.4/content | 47 + rt/etc/upgrade/4.2.6/content | 9 + rt/etc/upgrade/4.2.6/schema.mysql | 4 + rt/etc/upgrade/4.2.7/content | 15 + rt/etc/upgrade/4.2.8/content | 16 + rt/etc/upgrade/generate-rtaddressregexp.in | 11 +- rt/etc/upgrade/sanity-check-stylesheets.in | 88 + rt/etc/upgrade/sanity-check-stylesheets.pl | 87 - rt/etc/upgrade/shrink-cgm-table.in | 124 + rt/etc/upgrade/shrink-transactions-table.in | 126 + rt/etc/upgrade/shrink_cgm_table.pl | 124 - rt/etc/upgrade/shrink_transactions_table.pl | 124 - rt/etc/upgrade/split-out-cf-categories.in | 11 +- rt/etc/upgrade/switch-templates-to.in | 145 + rt/etc/upgrade/time-worked-history.in | 111 + rt/etc/upgrade/upgrade-articles | 13 +- rt/etc/upgrade/upgrade-articles.in | 9 +- rt/etc/upgrade/vulnerable-passwords.in | 5 +- rt/lib/RT.pm | 208 +- rt/lib/RT/ACE.pm | 191 +- rt/lib/RT/ACL.pm | 119 +- rt/lib/RT/Action.pm | 20 - rt/lib/RT/Action/AutoOpen.pm | 3 +- rt/lib/RT/Action/AutoOpenInactive.pm | 105 + rt/lib/RT/Action/Autoreply.pm | 14 +- rt/lib/RT/Action/CreateTickets.pm | 113 +- rt/lib/RT/Action/CreateTickets.pm.orig | 9 +- rt/lib/RT/Action/EscalatePriority.pm | 165 +- rt/lib/RT/Action/LinearEscalate.pm | 15 +- rt/lib/RT/Action/Notify.pm | 54 +- rt/lib/RT/Action/NotifyGroup.pm | 16 +- rt/lib/RT/Action/NotifyGroupAsComment.pm | 8 +- rt/lib/RT/Action/NotifyOwnerOrAdminCc.pm | 76 + rt/lib/RT/Action/OpenOnStarted.pm | 87 + rt/lib/RT/Action/RecordComment.pm | 23 +- rt/lib/RT/Action/RecordCorrespondence.pm | 24 +- rt/lib/RT/Action/SendEmail.pm | 181 +- rt/lib/RT/Action/SendEmail.pm.orig | 42 +- rt/lib/RT/Action/SendForward.pm | 138 + rt/lib/RT/Action/SetStatus.pm | 2 +- rt/lib/RT/Approval/Rule/NewPending.pm | 2 +- rt/lib/RT/Approval/Rule/Passed.pm | 2 +- rt/lib/RT/Approval/Rule/Rejected.pm | 2 +- rt/lib/RT/Article.pm | 130 +- rt/lib/RT/Articles.pm | 39 +- rt/lib/RT/Attachment.pm | 406 +- rt/lib/RT/Attachments.pm | 45 +- rt/lib/RT/Attribute.pm | 63 +- rt/lib/RT/Attributes.pm | 32 +- rt/lib/RT/Base.pm | 2 +- rt/lib/RT/CachedGroupMember.pm | 55 +- rt/lib/RT/CachedGroupMembers.pm | 30 +- rt/lib/RT/Class.pm | 217 +- rt/lib/RT/Classes.pm | 16 +- rt/lib/RT/Condition.pm | 26 +- rt/lib/RT/Condition/BeforeDue.pm | 23 +- rt/lib/RT/Condition/Overdue.pm | 10 +- rt/lib/RT/Condition/OwnerChange.pm | 16 +- rt/lib/RT/Condition/PriorityChange.pm | 6 +- rt/lib/RT/Condition/PriorityExceeds.pm | 6 +- rt/lib/RT/Condition/QueueChange.pm | 6 +- rt/lib/RT/Condition/StatusChange.pm | 4 +- rt/lib/RT/Config.pm | 605 +- rt/lib/RT/Crypt.pm | 843 ++ rt/lib/RT/Crypt/GnuPG.pm | 1942 ++-- rt/lib/RT/Crypt/GnuPG/CRLFHandle.pm | 70 + rt/lib/RT/Crypt/Role.pm | 254 + rt/lib/RT/Crypt/SMIME.pm | 956 ++ rt/lib/RT/CurrentUser.pm | 45 +- rt/lib/RT/CustomField.pm | 780 +- rt/lib/RT/CustomFieldValue.pm | 61 +- rt/lib/RT/CustomFieldValues.pm | 61 +- rt/lib/RT/CustomFieldValues/External.pm | 12 +- rt/lib/RT/CustomFields.pm | 195 +- rt/lib/RT/Dashboard.pm | 43 +- rt/lib/RT/Dashboard/Mailer.pm | 68 +- rt/lib/RT/Dashboards.pm | 4 +- rt/lib/RT/Date.pm | 250 +- rt/lib/RT/DependencyWalker.pm | 305 + rt/lib/RT/DependencyWalker/FindDependencies.pm | 65 + rt/lib/RT/EmailParser.pm | 43 +- rt/lib/RT/Generated.pm.in | 4 + rt/lib/RT/Graph/Tickets.pm | 9 +- rt/lib/RT/Group.pm | 913 +- rt/lib/RT/GroupMember.pm | 217 +- rt/lib/RT/GroupMembers.pm | 32 +- rt/lib/RT/Groups.pm | 95 +- rt/lib/RT/Handle.pm | 683 +- rt/lib/RT/I18N.pm | 342 +- rt/lib/RT/I18N/cs.pm | 40 +- rt/lib/RT/I18N/fr.pm | 10 +- rt/lib/RT/I18N/ru.pm | 4 +- rt/lib/RT/Installer.pm | 10 +- rt/lib/RT/Interface/CLI.pm | 195 +- rt/lib/RT/Interface/Email.pm | 533 +- rt/lib/RT/Interface/Email.pm.orig | 81 +- rt/lib/RT/Interface/Email/Auth/Crypt.pm | 294 + rt/lib/RT/Interface/Email/Auth/GnuPG.pm | 257 - rt/lib/RT/Interface/REST.pm | 59 +- rt/lib/RT/Interface/Web.pm | 1358 ++- rt/lib/RT/Interface/Web.pm.orig | 3454 ------- rt/lib/RT/Interface/Web/Handler.pm | 96 +- rt/lib/RT/Interface/Web/Menu.pm | 14 +- .../RT/Interface/Web/Middleware/StaticHeaders.pm | 80 + rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm | 7 +- rt/lib/RT/Interface/Web/Request.pm | 3 - rt/lib/RT/Interface/Web/Session.pm | 30 +- rt/lib/RT/Lifecycle.pm | 232 +- rt/lib/RT/Lifecycle/Ticket.pm | 125 + rt/lib/RT/Link.pm | 205 +- rt/lib/RT/Links.pm | 33 +- rt/lib/RT/Migrate.pm | 193 + rt/lib/RT/Migrate/Importer.pm | 468 + rt/lib/RT/Migrate/Importer/File.pm | 208 + rt/lib/RT/Migrate/Incremental.pm | 657 ++ rt/lib/RT/Migrate/Serializer.pm | 492 + rt/lib/RT/Migrate/Serializer/File.pm | 171 + rt/lib/RT/Migrate/Serializer/IncrementalRecord.pm | 80 + rt/lib/RT/Migrate/Serializer/IncrementalRecords.pm | 69 + rt/lib/RT/ObjectClass.pm | 37 +- rt/lib/RT/ObjectClasses.pm | 12 +- rt/lib/RT/ObjectCustomField.pm | 269 +- rt/lib/RT/ObjectCustomFieldValue.pm | 49 +- rt/lib/RT/ObjectCustomFieldValues.pm | 30 +- rt/lib/RT/ObjectCustomFields.pm | 53 +- rt/lib/RT/ObjectScrip.pm | 277 + rt/lib/RT/ObjectScrips.pm | 92 + rt/lib/RT/ObjectTopic.pm | 44 +- rt/lib/RT/ObjectTopics.pm | 18 +- rt/lib/RT/PlackRunner.pm | 165 + rt/lib/RT/Plugin.pm | 10 +- rt/lib/RT/Pod/HTML.pm | 6 + rt/lib/RT/Principal.pm | 152 +- rt/lib/RT/Principals.pm | 15 +- rt/lib/RT/Queue.pm | 889 +- rt/lib/RT/Queues.pm | 22 +- rt/lib/RT/Record.pm | 994 +- rt/lib/RT/Record/AddAndSort.pm | 621 ++ rt/lib/RT/Record/Role.pm | 78 + rt/lib/RT/Record/Role/Lifecycle.pm | 219 + rt/lib/RT/Record/Role/Links.pm | 174 + rt/lib/RT/Record/Role/Rights.pm | 133 + rt/lib/RT/Record/Role/Roles.pm | 633 ++ rt/lib/RT/Record/Role/Status.pm | 314 + rt/lib/RT/Reminders.pm | 23 +- rt/lib/RT/Report/Tickets.pm | 1107 ++- rt/lib/RT/Report/Tickets/Entry.pm | 83 +- rt/lib/RT/Rule.pm | 3 +- rt/lib/RT/Ruleset.pm | 1 - rt/lib/RT/SQL.pm | 81 +- rt/lib/RT/SavedSearches.pm | 13 +- rt/lib/RT/Scrip.pm | 543 +- rt/lib/RT/ScripAction.pm | 246 +- rt/lib/RT/ScripActions.pm | 24 +- rt/lib/RT/ScripCondition.pm | 129 +- rt/lib/RT/ScripConditions.pm | 28 +- rt/lib/RT/Scrips.pm | 209 +- rt/lib/RT/Search/ActiveTicketsInQueue.pm | 5 +- rt/lib/RT/Search/Googleish.pm | 271 - rt/lib/RT/Search/Simple.pm | 289 + rt/lib/RT/SearchBuilder.pm | 777 +- rt/lib/RT/SearchBuilder/AddAndSort.pm | 219 + rt/lib/RT/SearchBuilder/Role.pm | 77 + rt/lib/RT/SearchBuilder/Role/Roles.pm | 399 + rt/lib/RT/SharedSetting.pm | 30 +- rt/lib/RT/SharedSettings.pm | 4 +- rt/lib/RT/Shredder.pm | 88 +- rt/lib/RT/Shredder/ACE.pm | 101 - rt/lib/RT/Shredder/Attachment.pm | 136 - rt/lib/RT/Shredder/CachedGroupMember.pm | 143 - rt/lib/RT/Shredder/Constants.pm | 44 +- rt/lib/RT/Shredder/CustomField.pm | 126 - rt/lib/RT/Shredder/CustomFieldValue.pm | 94 - rt/lib/RT/Shredder/Dependencies.pm | 2 +- rt/lib/RT/Shredder/Dependency.pm | 13 +- rt/lib/RT/Shredder/Exceptions.pm | 18 +- rt/lib/RT/Shredder/Group.pm | 185 - rt/lib/RT/Shredder/GroupMember.pm | 183 - rt/lib/RT/Shredder/Link.pm | 140 - rt/lib/RT/Shredder/ObjectCustomFieldValue.pm | 116 - rt/lib/RT/Shredder/POD.pm | 6 + rt/lib/RT/Shredder/Plugin.pm | 16 +- rt/lib/RT/Shredder/Plugin/Attachments.pm | 2 +- rt/lib/RT/Shredder/Plugin/Base.pm | 9 +- rt/lib/RT/Shredder/Plugin/Summary.pm | 11 +- rt/lib/RT/Shredder/Plugin/Users.pm | 91 +- rt/lib/RT/Shredder/Principal.pm | 127 - rt/lib/RT/Shredder/Queue.pm | 107 - rt/lib/RT/Shredder/Record.pm | 121 +- rt/lib/RT/Shredder/Scrip.pm | 130 - rt/lib/RT/Shredder/ScripAction.pm | 100 - rt/lib/RT/Shredder/ScripCondition.pm | 101 - rt/lib/RT/Shredder/Template.pm | 120 - rt/lib/RT/Shredder/Ticket.pm | 126 - rt/lib/RT/Shredder/Transaction.pm | 115 - rt/lib/RT/Shredder/User.pm | 191 - rt/lib/RT/Squish/CSS.pm | 23 +- rt/lib/RT/Squish/JS.pm | 14 +- rt/lib/RT/StyleGuide.pod | 347 +- rt/lib/RT/System.pm | 264 +- rt/lib/RT/Template.pm | 287 +- rt/lib/RT/Templates.pm | 16 +- rt/lib/RT/Test.pm | 548 +- rt/lib/RT/Test/Apache.pm | 30 +- rt/lib/RT/Test/GnuPG.pm | 15 +- rt/lib/RT/Test/SMIME.pm | 164 + rt/lib/RT/Test/Shredder.pm | 324 + rt/lib/RT/Test/Web.pm | 73 +- rt/lib/RT/Ticket.pm | 2281 ++--- rt/lib/RT/Tickets.pm | 1814 ++-- rt/lib/RT/Tickets_SQL.pm | 512 - rt/lib/RT/Topic.pm | 66 +- rt/lib/RT/Topics.pm | 12 - rt/lib/RT/Transaction.pm | 873 +- rt/lib/RT/Transactions.pm | 28 +- rt/lib/RT/URI.pm | 25 +- rt/lib/RT/URI/a.pm | 10 +- rt/lib/RT/URI/fsck_com_article.pm | 96 +- rt/lib/RT/URI/fsck_com_rt.pm | 18 +- rt/lib/RT/User.pm | 627 +- rt/lib/RT/Users.pm | 144 +- rt/lib/RT/Util.pm | 10 +- rt/sbin/rt-attributes-viewer.in | 31 +- rt/sbin/rt-clean-sessions.in | 19 +- rt/sbin/rt-dump-metadata.in | 53 +- rt/sbin/rt-email-dashboards.in | 21 +- rt/sbin/rt-email-digest.in | 35 +- rt/sbin/rt-email-group-admin.in | 18 +- rt/sbin/rt-fulltext-indexer.in | 508 +- rt/sbin/rt-importer.in | 283 + rt/sbin/rt-message-catalog | 270 - rt/sbin/rt-preferences-viewer.in | 29 +- rt/sbin/rt-serializer.in | 399 + rt/sbin/rt-server.fcgi.in | 150 +- rt/sbin/rt-server.in | 150 +- rt/sbin/rt-session-viewer.in | 31 +- rt/sbin/rt-setup-database.in | 277 +- rt/sbin/rt-setup-fulltext-index.in | 119 +- rt/sbin/rt-shredder.in | 175 +- rt/sbin/rt-test-dependencies.in | 315 +- rt/sbin/rt-validate-aliases.in | 32 +- rt/sbin/rt-validator.in | 460 +- rt/sbin/standalone_httpd.in | 150 +- rt/share/html/Admin/Articles/Classes/Modify.html | 66 +- rt/share/html/Admin/Articles/Classes/Objects.html | 11 +- rt/share/html/Admin/Articles/Classes/index.html | 5 +- rt/share/html/Admin/Articles/index.html | 2 +- rt/share/html/Admin/CustomFields/GroupRights.html | 2 +- rt/share/html/Admin/CustomFields/Modify.html | 35 +- rt/share/html/Admin/CustomFields/Objects.html | 27 +- rt/share/html/Admin/CustomFields/index.html | 47 +- .../html/Admin/Elements/ConfigureDashboardsInMenu | 76 + rt/share/html/Admin/Elements/CreateUserCalled | 50 - rt/share/html/Admin/Elements/EditCustomField | 15 +- .../Admin/Elements/EditCustomFieldValuesSource | 4 +- rt/share/html/Admin/Elements/EditCustomFields | 23 +- rt/share/html/Admin/Elements/EditQueueWatchers | 7 +- rt/share/html/Admin/Elements/EditRights | 39 +- .../html/Admin/Elements/EditRightsCategoryTabs | 15 +- rt/share/html/Admin/Elements/EditScrips | 171 +- rt/share/html/Admin/Elements/EditTemplates | 2 + rt/share/html/Admin/Elements/EditUserComments | 56 - .../html/Admin/Elements/ListGlobalCustomFields | 61 - rt/share/html/Admin/Elements/ListGlobalScrips | 68 - rt/share/html/Admin/Elements/LoggingSummary | 92 + rt/share/html/Admin/Elements/MembershipsPage | 152 + rt/share/html/Admin/Elements/ModifyTemplate | 11 +- rt/share/html/Admin/Elements/PickCustomFields | 98 - rt/share/html/Admin/Elements/PickObjects | 81 - rt/share/html/Admin/Elements/Portal | 2 +- rt/share/html/Admin/Elements/QueueRightsForUser | 64 - rt/share/html/Admin/Elements/SelectGroups | 2 +- rt/share/html/Admin/Elements/SelectModifyGroup | 57 - rt/share/html/Admin/Elements/SelectModifyQueue | 57 - rt/share/html/Admin/Elements/SelectModifyUser | 73 - rt/share/html/Admin/Elements/SelectNewGroupMembers | 42 +- rt/share/html/Admin/Elements/SelectRights | 120 - rt/share/html/Admin/Elements/SelectScrip | 72 - .../html/Admin/Elements/SelectSingleOrMultiple | 67 - rt/share/html/Admin/Elements/SelectStage | 18 +- rt/share/html/Admin/Elements/SelectStageForAdded | 54 + rt/share/html/Admin/Elements/SelectTemplate | 77 - rt/share/html/Admin/Elements/ShowKeyInfo | 49 +- rt/share/html/Admin/Elements/UpgradeHistory | 71 + rt/share/html/Admin/Elements/UpgradeHistoryRow | 98 + rt/share/html/Admin/Global/DashboardsInMenu.html | 113 + rt/share/html/Admin/Global/MyRT.html | 10 +- rt/share/html/Admin/Global/Scrip.html | 63 - rt/share/html/Admin/Global/Template.html | 56 +- rt/share/html/Admin/Global/index.html | 2 +- rt/share/html/Admin/Groups/History.html | 5 +- rt/share/html/Admin/Groups/Memberships.html | 48 + rt/share/html/Admin/Groups/Modify.html | 25 +- rt/share/html/Admin/Groups/index.html | 40 +- rt/share/html/Admin/Queues/History.html | 5 +- rt/share/html/Admin/Queues/Modify.html | 74 +- rt/share/html/Admin/Queues/People.html | 5 +- rt/share/html/Admin/Queues/Scrip.html | 77 - rt/share/html/Admin/Queues/Scrips.html | 15 +- rt/share/html/Admin/Queues/Template.html | 10 +- rt/share/html/Admin/Queues/index.html | 45 +- rt/share/html/Admin/Scrips/Create.html | 147 + rt/share/html/Admin/Scrips/Elements/EditBasics | 74 + rt/share/html/Admin/Scrips/Elements/EditCustomCode | 77 + rt/share/html/Admin/Scrips/Elements/SelectTemplate | 108 + rt/share/html/Admin/Scrips/Modify.html | 141 + rt/share/html/Admin/Scrips/Objects.html | 172 + rt/share/html/Admin/Scrips/index.html | 72 + rt/share/html/Admin/Tools/Configuration.html | 95 +- rt/share/html/Admin/Tools/Queries.html | 2 +- .../Admin/Tools/Shredder/Elements/ObjectCheckBox | 4 +- .../html/Admin/Tools/Shredder/Elements/PluginHelp | 4 +- rt/share/html/Admin/Tools/Shredder/autohandler | 4 +- rt/share/html/Admin/Tools/Theme.html | 219 +- rt/share/html/Admin/Tools/index.html | 2 +- rt/share/html/Admin/Users/DashboardsInMenu.html | 118 + rt/share/html/Admin/Users/GnuPG.html | 116 - rt/share/html/Admin/Users/History.html | 5 +- rt/share/html/Admin/Users/Keys.html | 131 + rt/share/html/Admin/Users/Memberships.html | 90 +- rt/share/html/Admin/Users/Modify.html | 287 +- rt/share/html/Admin/Users/MyRT.html | 11 +- rt/share/html/Admin/Users/index.html | 25 +- rt/share/html/Admin/index.html | 2 +- rt/share/html/Approvals/Display.html | 2 +- rt/share/html/Approvals/Elements/Approve | 4 +- rt/share/html/Approvals/Elements/PendingMyApproval | 41 +- rt/share/html/Approvals/Elements/ShowDependency | 26 +- rt/share/html/Articles/Article/Edit.html | 67 +- .../Articles/Article/Elements/EditCustomFields | 10 +- rt/share/html/Articles/Article/Elements/EditLinks | 12 +- .../html/Articles/Article/Elements/Preformatted | 15 +- .../html/Articles/Article/Elements/ShowHistory | 76 - rt/share/html/Articles/Article/Elements/ShowLinks | 8 +- .../Articles/Article/Elements/ShowSavedSearches | 7 +- .../Articles/Article/Elements/ShowSearchCriteria | 10 +- rt/share/html/Articles/Article/History.html | 20 +- rt/share/html/Articles/Article/PreCreate.html | 36 +- rt/share/html/Articles/Article/Search.html | 145 +- rt/share/html/Articles/Elements/CreateArticle | 4 +- rt/share/html/Articles/Elements/MaybeNeedsSetup | 55 + rt/share/html/Articles/Elements/NeedsSetup | 52 + rt/share/html/Articles/Elements/NewestArticles | 4 +- rt/share/html/Articles/Elements/QuickSearch | 4 +- rt/share/html/Articles/Elements/ShowTopicLink | 2 +- rt/share/html/Articles/Elements/SubjectOverride | 92 + rt/share/html/Articles/Elements/UpdatedArticles | 4 +- rt/share/html/Articles/index.html | 1 + .../html/Dashboards/Elements/DashboardsForObject | 6 +- rt/share/html/Dashboards/Elements/ListOfDashboards | 7 +- rt/share/html/Dashboards/Elements/SelectPrivacy | 6 +- rt/share/html/Dashboards/Elements/ShowDashboards | 1 + .../html/Dashboards/Elements/ShowPortlet/component | 12 +- .../html/Dashboards/Elements/ShowPortlet/dashboard | 1 - rt/share/html/Dashboards/Modify.html | 8 +- rt/share/html/Dashboards/Queries.html | 6 +- rt/share/html/Dashboards/Render.html | 1 - rt/share/html/Dashboards/Subscription.html | 37 +- rt/share/html/Download/CustomFieldValue/dhandler | 4 +- rt/share/html/Elements/AddLinks | 106 + rt/share/html/Elements/BevelBoxRaisedEnd | 50 - rt/share/html/Elements/BevelBoxRaisedStart | 50 - rt/share/html/Elements/BulkCustomFields | 105 + rt/share/html/Elements/BulkLinks | 197 + rt/share/html/Elements/Callback | 5 +- rt/share/html/Elements/CollectionAsTable/Header | 21 +- rt/share/html/Elements/CollectionAsTable/Row | 1 - rt/share/html/Elements/CollectionList | 31 +- rt/share/html/Elements/CollectionListPaging | 20 +- rt/share/html/Elements/ColumnMap | 110 +- rt/share/html/Elements/Crypt/KeyIssues | 94 + .../html/Elements/Crypt/SelectKeyForEncryption | 80 + rt/share/html/Elements/Crypt/SelectKeyForSigning | 67 + rt/share/html/Elements/Crypt/SignEncryptWidget | 188 + rt/share/html/Elements/CryptStatus | 195 + rt/share/html/Elements/EditCustomField | 50 +- rt/share/html/Elements/EditCustomFieldAutocomplete | 15 +- rt/share/html/Elements/EditCustomFieldBinary | 17 +- rt/share/html/Elements/EditCustomFieldCombobox | 13 +- .../html/Elements/EditCustomFieldCustomGroupings | 73 + rt/share/html/Elements/EditCustomFieldDate | 3 +- rt/share/html/Elements/EditCustomFieldDateTime | 3 +- rt/share/html/Elements/EditCustomFieldFreeform | 5 +- rt/share/html/Elements/EditCustomFieldImage | 17 +- rt/share/html/Elements/EditCustomFieldSelect | 31 +- rt/share/html/Elements/EditCustomFieldText | 6 +- rt/share/html/Elements/EditCustomFieldWikitext | 6 +- rt/share/html/Elements/EditCustomFields | 119 + rt/share/html/Elements/EditLinks | 94 +- rt/share/html/Elements/EditTimeValue | 12 +- rt/share/html/Elements/EmailInput | 4 +- rt/share/html/Elements/Error | 13 +- rt/share/html/Elements/FindUser | 50 + rt/share/html/Elements/FoldStanzaJS | 50 + rt/share/html/Elements/GnuPG/KeyIssues | 92 - .../html/Elements/GnuPG/SelectKeyForEncryption | 81 - rt/share/html/Elements/GnuPG/SelectKeyForSigning | 64 - rt/share/html/Elements/GnuPG/SignEncryptWidget | 181 - rt/share/html/Elements/GotoUser | 62 + rt/share/html/Elements/Header | 52 +- rt/share/html/Elements/HeaderJavascript | 20 +- rt/share/html/Elements/JavascriptConfig | 84 + rt/share/html/Elements/ListActions | 5 +- rt/share/html/Elements/ListMenu | 4 + rt/share/html/Elements/Login | 7 +- rt/share/html/Elements/LoginHelp | 54 + rt/share/html/Elements/Logo | 5 +- rt/share/html/Elements/MakeClicky | 18 +- rt/share/html/Elements/Menu | 36 +- rt/share/html/Elements/MessageBox | 26 +- rt/share/html/Elements/MyRT | 28 +- rt/share/html/Elements/MyReminders | 1 - rt/share/html/Elements/MyRequests | 49 - rt/share/html/Elements/MyTickets | 49 - rt/share/html/Elements/PageLayout | 11 + rt/share/html/Elements/QueryString | 3 +- rt/share/html/Elements/QueueSummaryByLifecycle | 13 +- rt/share/html/Elements/QueueSummaryByStatus | 4 +- rt/share/html/Elements/QuickCreate | 2 +- rt/share/html/Elements/RT__Article/ColumnMap | 13 +- rt/share/html/Elements/RT__Class/ColumnMap | 13 +- rt/share/html/Elements/RT__CustomField/ColumnMap | 39 +- rt/share/html/Elements/RT__Dashboard/ColumnMap | 9 +- rt/share/html/Elements/RT__Group/ColumnMap | 21 +- rt/share/html/Elements/RT__Queue/ColumnMap | 21 +- rt/share/html/Elements/RT__SavedSearch/ColumnMap | 9 +- rt/share/html/Elements/RT__Scrip/ColumnMap | 110 +- rt/share/html/Elements/RT__Template/ColumnMap | 35 +- rt/share/html/Elements/RT__Ticket/ColumnMap | 94 +- rt/share/html/Elements/RT__User/ColumnMap | 13 +- rt/share/html/Elements/Refresh | 2 +- rt/share/html/Elements/SelectBoolean | 4 +- rt/share/html/Elements/SelectCustomFieldValue | 17 +- rt/share/html/Elements/SelectDate | 18 +- rt/share/html/Elements/SelectDateRelation | 2 +- rt/share/html/Elements/SelectLang | 2 - rt/share/html/Elements/SelectLinkType | 57 - rt/share/html/Elements/SelectMatch | 10 +- rt/share/html/Elements/SelectObject | 141 + rt/share/html/Elements/SelectOwnerAutocomplete | 2 +- rt/share/html/Elements/SelectOwnerDropdown | 32 +- rt/share/html/Elements/SelectQueue | 92 +- rt/share/html/Elements/SelectSortOrder | 65 - rt/share/html/Elements/SelectStatus | 58 +- rt/share/html/Elements/SelectTicketSortBy | 62 - rt/share/html/Elements/SelectTicketTypes | 58 - rt/share/html/Elements/SelectTimeUnits | 6 +- .../html/Elements/ShowCustomFieldCustomGroupings | 78 + rt/share/html/Elements/ShowCustomFieldImage | 2 +- rt/share/html/Elements/ShowCustomFields | 20 +- rt/share/html/Elements/ShowHistory | 191 + rt/share/html/Elements/ShowLink | 25 +- rt/share/html/Elements/ShowLinks | 155 +- rt/share/html/Elements/ShowLinksOfType | 127 + rt/share/html/Elements/ShowMemberships | 4 +- rt/share/html/Elements/ShowMessageHeaders | 101 + rt/share/html/Elements/ShowMessageStanza | 176 + rt/share/html/Elements/ShowPrincipal | 72 + rt/share/html/Elements/ShowRecord | 100 + rt/share/html/Elements/ShowRelationLabel | 30 +- rt/share/html/Elements/ShowReminders | 8 +- rt/share/html/Elements/ShowSearch | 21 +- rt/share/html/Elements/ShowTransaction | 265 + rt/share/html/Elements/ShowTransactionAttachments | 293 + rt/share/html/Elements/ShowUser | 53 +- rt/share/html/Elements/ShowUserConcise | 67 - rt/share/html/Elements/ShowUserVerbose | 72 - rt/share/html/Elements/SimpleSearch | 5 +- rt/share/html/Elements/Submit | 4 +- rt/share/html/Elements/TSVExport | 131 + rt/share/html/Elements/Tabs | 270 +- rt/share/html/Elements/TicketList | 12 +- rt/share/html/Elements/TitleBox | 1 + rt/share/html/Elements/TitleBoxEnd | 1 + rt/share/html/Elements/TitleBoxStart | 1 + rt/share/html/Elements/ValidateCustomFields | 73 +- rt/share/html/Errors/WebRemoteUser/Deauthorized | 50 + rt/share/html/Errors/WebRemoteUser/NoInternalUser | 50 + rt/share/html/Errors/WebRemoteUser/NoRemoteUser | 50 + .../WebRemoteUser/UserAutocreateDefaultsOnLogin | 50 + rt/share/html/Errors/WebRemoteUser/Wrapper | 80 + .../html/Helpers/Autocomplete/CustomFieldValues | 27 +- rt/share/html/Helpers/Autocomplete/Groups | 12 +- rt/share/html/Helpers/Autocomplete/Owners | 33 +- rt/share/html/Helpers/Autocomplete/Tickets | 109 + rt/share/html/Helpers/Autocomplete/Users | 71 +- rt/share/html/Helpers/TicketHistory | 23 +- rt/share/html/Helpers/UserInfo | 77 + rt/share/html/Install/DatabaseDetails.html | 4 - rt/share/html/Install/DatabaseType.html | 2 +- rt/share/html/Install/Finish.html | 4 +- rt/share/html/Install/Global.html | 1 - rt/share/html/Install/Initialize.html | 1 + rt/share/html/Install/index.html | 2 +- rt/share/html/NoAuth/Logout.html | 2 +- rt/share/html/NoAuth/Reminder.html | 50 - .../html/NoAuth/RichText/ckeditor/LICENSE.html | 1327 --- .../NoAuth/RichText/ckeditor/adapters/jquery.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js | 153 - rt/share/html/NoAuth/RichText/ckeditor/config.js | 47 - .../html/NoAuth/RichText/ckeditor/contents.css | 25 - .../NoAuth/RichText/ckeditor/lang/_languages.js | 6 - .../RichText/ckeditor/lang/_translationstatus.txt | 65 - rt/share/html/NoAuth/RichText/ckeditor/lang/af.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ar.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/bg.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/bn.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/bs.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ca.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/cs.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/cy.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/da.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/de.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/el.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/en-au.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/en-ca.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/en-gb.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/en.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/eo.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/es.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/et.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/eu.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/fa.js | 822 -- rt/share/html/NoAuth/RichText/ckeditor/lang/fi.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/fo.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/fr-ca.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/fr.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/gl.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/gu.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/he.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/hi.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/hr.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/hu.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/id.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/is.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/it.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ja.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ka.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/km.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ko.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ku.js | 821 -- rt/share/html/NoAuth/RichText/ckeditor/lang/lt.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/lv.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/mk.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/mn.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ms.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/nb.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/nl.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/no.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/pl.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/pt-br.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/pt.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ro.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ru.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/sk.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/sl.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/sr-latn.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/sr.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/sv.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/th.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/tr.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/ug.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/uk.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/vi.js | 6 - .../html/NoAuth/RichText/ckeditor/lang/zh-cn.js | 6 - rt/share/html/NoAuth/RichText/ckeditor/lang/zh.js | 6 - .../ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js | 7 - .../plugins/a11yhelp/lang/_translationstatus.txt | 28 - .../RichText/ckeditor/plugins/a11yhelp/lang/cs.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/cy.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/da.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/de.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/el.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/en.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/eo.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/fa.js | 94 - .../RichText/ckeditor/plugins/a11yhelp/lang/fi.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/fr.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/gu.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/he.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/it.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/ku.js | 94 - .../RichText/ckeditor/plugins/a11yhelp/lang/lv.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/mk.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/nb.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/nl.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/no.js | 6 - .../ckeditor/plugins/a11yhelp/lang/pt-br.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/ro.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/sk.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/tr.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/ug.js | 6 - .../RichText/ckeditor/plugins/a11yhelp/lang/vi.js | 6 - .../ckeditor/plugins/a11yhelp/lang/zh-cn.js | 6 - .../ckeditor/plugins/about/dialogs/about.js | 6 - .../RichText/ckeditor/plugins/adobeair/plugin.js | 6 - .../RichText/ckeditor/plugins/ajax/plugin.js | 6 - .../RichText/ckeditor/plugins/autogrow/plugin.js | 6 - .../RichText/ckeditor/plugins/bbcode/plugin.js | 9 - .../ckeditor/plugins/clipboard/dialogs/paste.js | 7 - .../plugins/colordialog/dialogs/colordialog.js | 7 - .../plugins/devtools/lang/_translationstatus.txt | 31 - .../RichText/ckeditor/plugins/devtools/lang/bg.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/cs.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/cy.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/da.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/de.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/el.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/en.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/eo.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/et.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/fa.js | 21 - .../RichText/ckeditor/plugins/devtools/lang/fi.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/fr.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/gu.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/he.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/hr.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/it.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/ku.js | 21 - .../RichText/ckeditor/plugins/devtools/lang/lv.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/nb.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/nl.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/no.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/pl.js | 6 - .../ckeditor/plugins/devtools/lang/pt-br.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/sk.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/tr.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/ug.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/uk.js | 6 - .../RichText/ckeditor/plugins/devtools/lang/vi.js | 6 - .../ckeditor/plugins/devtools/lang/zh-cn.js | 6 - .../RichText/ckeditor/plugins/devtools/plugin.js | 6 - .../ckeditor/plugins/dialog/dialogDefinition.js | 4 - .../RichText/ckeditor/plugins/div/dialogs/div.js | 8 - .../ckeditor/plugins/docprops/dialogs/docprops.js | 10 - .../RichText/ckeditor/plugins/docprops/plugin.js | 6 - .../RichText/ckeditor/plugins/find/dialogs/find.js | 10 - .../ckeditor/plugins/flash/dialogs/flash.js | 9 - .../ckeditor/plugins/forms/dialogs/button.js | 6 - .../ckeditor/plugins/forms/dialogs/checkbox.js | 6 - .../ckeditor/plugins/forms/dialogs/form.js | 6 - .../ckeditor/plugins/forms/dialogs/hiddenfield.js | 6 - .../ckeditor/plugins/forms/dialogs/radio.js | 6 - .../ckeditor/plugins/forms/dialogs/select.js | 9 - .../ckeditor/plugins/forms/dialogs/textarea.js | 6 - .../ckeditor/plugins/forms/dialogs/textfield.js | 6 - .../ckeditor/plugins/iframe/dialogs/iframe.js | 7 - .../ckeditor/plugins/iframedialog/plugin.js | 6 - .../ckeditor/plugins/image/dialogs/image.js | 13 - .../ckeditor/plugins/link/dialogs/anchor.js | 6 - .../RichText/ckeditor/plugins/link/dialogs/link.js | 12 - .../plugins/liststyle/dialogs/liststyle.js | 7 - .../plugins/pastefromword/filter/default.js | 11 - .../plugins/pastetext/dialogs/pastetext.js | 6 - .../plugins/placeholder/dialogs/placeholder.js | 6 - .../placeholder/lang/_translationstatus.txt | 30 - .../ckeditor/plugins/placeholder/lang/bg.js | 6 - .../ckeditor/plugins/placeholder/lang/cs.js | 6 - .../ckeditor/plugins/placeholder/lang/cy.js | 6 - .../ckeditor/plugins/placeholder/lang/da.js | 6 - .../ckeditor/plugins/placeholder/lang/de.js | 6 - .../ckeditor/plugins/placeholder/lang/el.js | 6 - .../ckeditor/plugins/placeholder/lang/en.js | 6 - .../ckeditor/plugins/placeholder/lang/eo.js | 6 - .../ckeditor/plugins/placeholder/lang/et.js | 6 - .../ckeditor/plugins/placeholder/lang/fa.js | 21 - .../ckeditor/plugins/placeholder/lang/fi.js | 6 - .../ckeditor/plugins/placeholder/lang/fr.js | 6 - .../ckeditor/plugins/placeholder/lang/he.js | 6 - .../ckeditor/plugins/placeholder/lang/hr.js | 6 - .../ckeditor/plugins/placeholder/lang/it.js | 6 - .../ckeditor/plugins/placeholder/lang/ku.js | 21 - .../ckeditor/plugins/placeholder/lang/lv.js | 6 - .../ckeditor/plugins/placeholder/lang/nb.js | 6 - .../ckeditor/plugins/placeholder/lang/nl.js | 6 - .../ckeditor/plugins/placeholder/lang/no.js | 6 - .../ckeditor/plugins/placeholder/lang/pl.js | 6 - .../ckeditor/plugins/placeholder/lang/pt-br.js | 6 - .../ckeditor/plugins/placeholder/lang/sk.js | 6 - .../ckeditor/plugins/placeholder/lang/tr.js | 6 - .../ckeditor/plugins/placeholder/lang/ug.js | 6 - .../ckeditor/plugins/placeholder/lang/uk.js | 6 - .../ckeditor/plugins/placeholder/lang/vi.js | 6 - .../ckeditor/plugins/placeholder/lang/zh-cn.js | 6 - .../ckeditor/plugins/placeholder/plugin.js | 6 - .../RichText/ckeditor/plugins/preview/preview.html | 10 - .../ckeditor/plugins/scayt/dialogs/options.js | 8 - .../ckeditor/plugins/scayt/dialogs/toolbar.css | 6 - .../ckeditor/plugins/smiley/dialogs/smiley.js | 7 - .../plugins/specialchar/dialogs/specialchar.js | 7 - .../specialchar/lang/_translationstatus.txt | 25 - .../ckeditor/plugins/specialchar/lang/cs.js | 6 - .../ckeditor/plugins/specialchar/lang/cy.js | 6 - .../ckeditor/plugins/specialchar/lang/de.js | 6 - .../ckeditor/plugins/specialchar/lang/el.js | 6 - .../ckeditor/plugins/specialchar/lang/en.js | 6 - .../ckeditor/plugins/specialchar/lang/eo.js | 6 - .../ckeditor/plugins/specialchar/lang/et.js | 6 - .../ckeditor/plugins/specialchar/lang/fa.js | 131 - .../ckeditor/plugins/specialchar/lang/fi.js | 6 - .../ckeditor/plugins/specialchar/lang/fr.js | 6 - .../ckeditor/plugins/specialchar/lang/he.js | 6 - .../ckeditor/plugins/specialchar/lang/hr.js | 6 - .../ckeditor/plugins/specialchar/lang/it.js | 6 - .../ckeditor/plugins/specialchar/lang/ku.js | 131 - .../ckeditor/plugins/specialchar/lang/lv.js | 6 - .../ckeditor/plugins/specialchar/lang/nb.js | 6 - .../ckeditor/plugins/specialchar/lang/nl.js | 6 - .../ckeditor/plugins/specialchar/lang/no.js | 6 - .../ckeditor/plugins/specialchar/lang/pt-br.js | 6 - .../ckeditor/plugins/specialchar/lang/sk.js | 6 - .../ckeditor/plugins/specialchar/lang/tr.js | 6 - .../ckeditor/plugins/specialchar/lang/ug.js | 6 - .../ckeditor/plugins/specialchar/lang/zh-cn.js | 6 - .../ckeditor/plugins/styles/styles/default.js | 6 - .../ckeditor/plugins/stylesheetparser/plugin.js | 6 - .../ckeditor/plugins/table/dialogs/table.js | 9 - .../ckeditor/plugins/tableresize/plugin.js | 7 - .../plugins/tabletools/dialogs/tableCell.js | 8 - .../plugins/templates/dialogs/templates.js | 7 - .../plugins/templates/templates/default.js | 6 - .../ckeditor/plugins/uicolor/dialogs/uicolor.js | 7 - .../plugins/uicolor/lang/_translationstatus.txt | 31 - .../RichText/ckeditor/plugins/uicolor/lang/bg.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/cs.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/cy.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/da.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/de.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/el.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/en.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/eo.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/et.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/fa.js | 20 - .../RichText/ckeditor/plugins/uicolor/lang/fi.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/fr.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/he.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/hr.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/it.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/ku.js | 20 - .../RichText/ckeditor/plugins/uicolor/lang/lv.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/mk.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/nb.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/nl.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/no.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/pl.js | 6 - .../ckeditor/plugins/uicolor/lang/pt-br.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/sk.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/tr.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/ug.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/uk.js | 6 - .../RichText/ckeditor/plugins/uicolor/lang/vi.js | 6 - .../ckeditor/plugins/uicolor/lang/zh-cn.js | 6 - .../RichText/ckeditor/plugins/uicolor/plugin.js | 6 - .../ckeditor/plugins/uicolor/yui/assets/yui.css | 6 - .../RichText/ckeditor/plugins/uicolor/yui/yui.js | 76 - .../ckeditor/plugins/wsc/dialogs/ciframe.html | 49 - .../ckeditor/plugins/wsc/dialogs/tmpFrameset.html | 52 - .../RichText/ckeditor/plugins/wsc/dialogs/wsc.css | 6 - .../RichText/ckeditor/plugins/wsc/dialogs/wsc.js | 7 - .../NoAuth/RichText/ckeditor/plugins/xml/plugin.js | 6 - .../NoAuth/RichText/ckeditor/skins/kama/dialog.css | 10 - .../NoAuth/RichText/ckeditor/skins/kama/editor.css | 13 - .../NoAuth/RichText/ckeditor/skins/kama/skin.js | 7 - .../RichText/ckeditor/skins/kama/templates.css | 6 - .../RichText/ckeditor/skins/office2003/dialog.css | 10 - .../RichText/ckeditor/skins/office2003/editor.css | 14 - .../RichText/ckeditor/skins/office2003/skin.js | 6 - .../ckeditor/skins/office2003/templates.css | 6 - .../NoAuth/RichText/ckeditor/skins/v2/dialog.css | 9 - .../NoAuth/RichText/ckeditor/skins/v2/editor.css | 13 - .../html/NoAuth/RichText/ckeditor/skins/v2/skin.js | 6 - .../RichText/ckeditor/skins/v2/templates.css | 6 - .../RichText/ckeditor/themes/default/theme.js | 8 - rt/share/html/NoAuth/RichText/dhandler | 69 - rt/share/html/NoAuth/css/aileron/AfterMenus | 71 + rt/share/html/NoAuth/css/aileron/InHeader | 15 +- rt/share/html/NoAuth/css/aileron/base.css | 62 - rt/share/html/NoAuth/css/aileron/boxes.css | 180 - rt/share/html/NoAuth/css/aileron/forms.css | 80 - rt/share/html/NoAuth/css/aileron/images/dhandler | 55 - rt/share/html/NoAuth/css/aileron/layout.css | 174 - rt/share/html/NoAuth/css/aileron/login.css | 50 - rt/share/html/NoAuth/css/aileron/main.css | 63 - rt/share/html/NoAuth/css/aileron/misc.css | 58 - rt/share/html/NoAuth/css/aileron/msie.css | 180 - rt/share/html/NoAuth/css/aileron/msie6.css | 110 - rt/share/html/NoAuth/css/aileron/nav.css | 165 - rt/share/html/NoAuth/css/aileron/ticket-lists.css | 238 - rt/share/html/NoAuth/css/aileron/ticket-search.css | 242 - rt/share/html/NoAuth/css/aileron/ticket.css | 282 - rt/share/html/NoAuth/css/autohandler | 21 +- rt/share/html/NoAuth/css/ballard/InHeader | 4 +- rt/share/html/NoAuth/css/ballard/base.css | 62 - rt/share/html/NoAuth/css/ballard/boxes.css | 189 - rt/share/html/NoAuth/css/ballard/images/dhandler | 55 - rt/share/html/NoAuth/css/ballard/layout.css | 177 - rt/share/html/NoAuth/css/ballard/main.css | 62 - rt/share/html/NoAuth/css/ballard/misc.css | 58 - rt/share/html/NoAuth/css/ballard/msie.css | 234 - rt/share/html/NoAuth/css/ballard/msie6.css | 98 - rt/share/html/NoAuth/css/ballard/nav.css | 191 - rt/share/html/NoAuth/css/ballard/ticket-lists.css | 237 - rt/share/html/NoAuth/css/ballard/ticket-search.css | 244 - rt/share/html/NoAuth/css/ballard/ticket.css | 278 - rt/share/html/NoAuth/css/base/admin.css | 97 - rt/share/html/NoAuth/css/base/articles.css | 54 - rt/share/html/NoAuth/css/base/collection.css | 50 - rt/share/html/NoAuth/css/base/forms.css | 278 - rt/share/html/NoAuth/css/base/history-folding.css | 91 - .../NoAuth/css/base/jquery-ui-timepicker-addon.css | 19 - rt/share/html/NoAuth/css/base/jquery-ui.css | 48 - .../NoAuth/css/base/jquery-ui.custom.modified.css | 478 - rt/share/html/NoAuth/css/base/login.css | 114 - rt/share/html/NoAuth/css/base/main.css | 74 - rt/share/html/NoAuth/css/base/misc.css | 117 - rt/share/html/NoAuth/css/base/msie6.css | 67 - rt/share/html/NoAuth/css/base/nav.css | 64 - rt/share/html/NoAuth/css/base/portlets.css | 64 - rt/share/html/NoAuth/css/base/rights-editor.css | 177 - rt/share/html/NoAuth/css/base/superfish-navbar.css | 95 - .../html/NoAuth/css/base/superfish-vertical.css | 23 - rt/share/html/NoAuth/css/base/superfish.css | 138 - rt/share/html/NoAuth/css/base/tablesorter.css | 52 - rt/share/html/NoAuth/css/base/theme-editor.css | 111 - rt/share/html/NoAuth/css/base/ticket-form.css | 122 - rt/share/html/NoAuth/css/base/ticket.css | 149 - rt/share/html/NoAuth/css/base/tools.css | 54 - rt/share/html/NoAuth/css/base/yui-fonts.css | 7 - rt/share/html/NoAuth/css/dhandler | 2 +- rt/share/html/NoAuth/css/print.css | 218 - rt/share/html/NoAuth/css/rudder/AfterMenus | 71 + rt/share/html/NoAuth/css/rudder/InHeader | 50 + rt/share/html/NoAuth/css/web2/AfterMenus | 74 + rt/share/html/NoAuth/css/web2/InHeader | 25 +- rt/share/html/NoAuth/css/web2/base.css | 62 - rt/share/html/NoAuth/css/web2/boxes.css | 191 - rt/share/html/NoAuth/css/web2/images/dhandler | 55 - rt/share/html/NoAuth/css/web2/layout.css | 210 - rt/share/html/NoAuth/css/web2/main.css | 62 - rt/share/html/NoAuth/css/web2/misc.css | 58 - rt/share/html/NoAuth/css/web2/msie.css | 242 - rt/share/html/NoAuth/css/web2/msie6.css | 101 - rt/share/html/NoAuth/css/web2/nav.css | 292 - rt/share/html/NoAuth/css/web2/ticket-lists.css | 237 - rt/share/html/NoAuth/css/web2/ticket-search.css | 244 - rt/share/html/NoAuth/css/web2/ticket.css | 280 - rt/share/html/NoAuth/iCal/dhandler | 68 +- rt/share/html/NoAuth/images/autohandler | 55 - rt/share/html/NoAuth/images/test.png | 2 - rt/share/html/NoAuth/js/autohandler | 17 +- rt/share/html/NoAuth/js/cascaded.js | 152 - rt/share/html/NoAuth/js/class.js | 15 - rt/share/html/NoAuth/js/combobox.js | 262 - rt/share/html/NoAuth/js/dhandler | 4 - rt/share/html/NoAuth/js/farbtastic.js | 347 - rt/share/html/NoAuth/js/history-folding.js | 73 - rt/share/html/NoAuth/js/jquery-1.4.2.min.js | 154 - .../html/NoAuth/js/jquery-ui-1.8.4.custom.min.js | 274 - .../html/NoAuth/js/jquery-ui-patch-datepicker.js | 92 - .../html/NoAuth/js/jquery-ui-timepicker-addon.js | 1326 --- rt/share/html/NoAuth/js/jquery.cookie.js | 89 - rt/share/html/NoAuth/js/jquery.event.hover-1.0.js | 85 - rt/share/html/NoAuth/js/jquery.supposition.js | 83 - rt/share/html/NoAuth/js/jquery.tablesorter.min.js | 16 - rt/share/html/NoAuth/js/jquery_noconflict.js | 51 - rt/share/html/NoAuth/js/late.js | 49 - rt/share/html/NoAuth/js/list.js | 112 - rt/share/html/NoAuth/js/superfish.js | 121 - rt/share/html/NoAuth/js/supersubs.js | 90 - rt/share/html/NoAuth/js/titlebox-state.js | 83 - rt/share/html/NoAuth/js/userautocomplete.js | 126 - rt/share/html/NoAuth/js/util.js | 372 - rt/share/html/NoAuth/rss/dhandler | 35 +- rt/share/html/Prefs/DashboardsInMenu.html | 113 + rt/share/html/Prefs/MyRT.html | 12 +- rt/share/html/Prefs/Other.html | 6 +- rt/share/html/Prefs/Quicksearch.html | 13 +- rt/share/html/Prefs/Search.html | 4 +- rt/share/html/Prefs/SearchOptions.html | 4 +- rt/share/html/REST/1.0/Forms/group/default | 49 +- rt/share/html/REST/1.0/Forms/group/ns | 2 +- rt/share/html/REST/1.0/Forms/queue/default | 9 +- rt/share/html/REST/1.0/Forms/queue/ns | 2 +- rt/share/html/REST/1.0/Forms/ticket/attachments | 32 +- rt/share/html/REST/1.0/Forms/ticket/default | 105 +- rt/share/html/REST/1.0/Forms/ticket/history | 96 +- rt/share/html/REST/1.0/Forms/transaction/default | 109 +- rt/share/html/REST/1.0/Forms/user/default | 49 +- rt/share/html/REST/1.0/Forms/user/ns | 2 +- rt/share/html/REST/1.0/NoAuth/mail-gateway | 18 +- rt/share/html/REST/1.0/dhandler | 32 +- rt/share/html/REST/1.0/search/dhandler | 245 +- rt/share/html/REST/1.0/search/ticket | 165 - rt/share/html/Search/Build.html | 26 +- rt/share/html/Search/Bulk.html | 226 +- rt/share/html/Search/Chart | 463 +- rt/share/html/Search/Chart.html | 140 +- rt/share/html/Search/Elements/BuildFormatString | 13 +- rt/share/html/Search/Elements/Chart | 105 +- rt/share/html/Search/Elements/ChartTable | 119 + rt/share/html/Search/Elements/ConditionRow | 8 +- rt/share/html/Search/Elements/EditFormat | 13 +- rt/share/html/Search/Elements/EditSearches | 20 +- rt/share/html/Search/Elements/EditSort | 2 +- rt/share/html/Search/Elements/PickBasics | 26 +- rt/share/html/Search/Elements/PickCFs | 21 +- rt/share/html/Search/Elements/PickCriteria | 2 + rt/share/html/Search/Elements/PickObjectCFs | 76 + rt/share/html/Search/Elements/PickTicketCFs | 5 +- rt/share/html/Search/Elements/ResultsRSSView | 122 +- rt/share/html/Search/Elements/SearchPrivacy | 6 +- rt/share/html/Search/Elements/SearchesForObject | 4 +- rt/share/html/Search/Elements/SelectAndOr | 4 +- rt/share/html/Search/Elements/SelectChartFunction | 79 + rt/share/html/Search/Elements/SelectChartType | 3 +- rt/share/html/Search/Elements/SelectGroup | 2 +- rt/share/html/Search/Elements/SelectGroupBy | 26 +- rt/share/html/Search/Elements/SelectLinks | 19 +- rt/share/html/Search/Elements/SelectPersonType | 4 +- rt/share/html/Search/Graph.html | 50 - rt/share/html/Search/Results.html | 24 +- rt/share/html/Search/Results.tsv | 66 +- rt/share/html/Search/Simple.html | 4 +- rt/share/html/Search/index.html | 50 + rt/share/html/SelfService/Closed.html | 6 +- rt/share/html/SelfService/Create.html | 43 +- rt/share/html/SelfService/Display.html | 135 +- rt/share/html/SelfService/Elements/MyRequests | 21 +- rt/share/html/SelfService/Error.html | 71 - .../Helpers/Autocomplete/CustomFieldValues | 48 + .../html/SelfService/Helpers/Autocomplete/Users | 48 + rt/share/html/SelfService/Prefs.html | 6 +- rt/share/html/SelfService/Update.html | 10 +- rt/share/html/SelfService/index.html | 2 +- rt/share/html/Ticket/Attachment/dhandler | 87 +- rt/share/html/Ticket/Create.html | 138 +- rt/share/html/Ticket/Crypt.html | 100 + rt/share/html/Ticket/Display.html | 45 +- rt/share/html/Ticket/Elements/AddAttachments | 17 +- rt/share/html/Ticket/Elements/AddWatchers | 22 +- rt/share/html/Ticket/Elements/Bookmark | 44 +- rt/share/html/Ticket/Elements/ClickToShowHistory | 11 +- rt/share/html/Ticket/Elements/DelayShowHistory | 78 + rt/share/html/Ticket/Elements/EditBasics | 9 +- rt/share/html/Ticket/Elements/EditCustomFields | 63 +- rt/share/html/Ticket/Elements/EditDates | 1 + rt/share/html/Ticket/Elements/EditMerge | 79 + rt/share/html/Ticket/Elements/EditPeople | 30 +- .../Ticket/Elements/EditTransactionCustomFields | 11 +- rt/share/html/Ticket/Elements/EditWatchers | 2 +- rt/share/html/Ticket/Elements/FindAttachments | 95 - rt/share/html/Ticket/Elements/FindTransactions | 72 - rt/share/html/Ticket/Elements/FoldStanzaJS | 50 - rt/share/html/Ticket/Elements/LoadTextAttachments | 45 +- rt/share/html/Ticket/Elements/PreviewScrips | 28 +- rt/share/html/Ticket/Elements/Reminders | 72 +- rt/share/html/Ticket/Elements/SelectStatus | 83 + rt/share/html/Ticket/Elements/ShowAttachments | 32 +- rt/share/html/Ticket/Elements/ShowBasics | 7 + rt/share/html/Ticket/Elements/ShowCustomFields | 2 +- rt/share/html/Ticket/Elements/ShowDates | 31 +- rt/share/html/Ticket/Elements/ShowDependencies | 66 - rt/share/html/Ticket/Elements/ShowDependencyStatus | 78 + rt/share/html/Ticket/Elements/ShowGnuPGStatus | 177 - rt/share/html/Ticket/Elements/ShowGroupMembers | 24 +- rt/share/html/Ticket/Elements/ShowHistory | 161 - rt/share/html/Ticket/Elements/ShowMembers | 74 - rt/share/html/Ticket/Elements/ShowMessageHeaders | 96 - rt/share/html/Ticket/Elements/ShowMessageStanza | 188 - rt/share/html/Ticket/Elements/ShowPeople | 1 + rt/share/html/Ticket/Elements/ShowRequestor | 40 +- .../html/Ticket/Elements/ShowRequestorExtraInfo | 40 +- rt/share/html/Ticket/Elements/ShowRequestorTickets | 36 +- .../html/Ticket/Elements/ShowSimplifiedRecipients | 15 +- rt/share/html/Ticket/Elements/ShowSummary | 21 +- rt/share/html/Ticket/Elements/ShowTime | 4 +- rt/share/html/Ticket/Elements/ShowTransaction | 240 - .../Ticket/Elements/ShowTransactionAttachments | 301 - rt/share/html/Ticket/Elements/ShowUserEntry | 56 - rt/share/html/Ticket/Elements/UpdateCc | 11 +- rt/share/html/Ticket/Forward.html | 35 +- rt/share/html/Ticket/GnuPG.html | 100 - .../Ticket/Graphs/Elements/EditGraphProperties | 10 +- rt/share/html/Ticket/History.html | 13 +- rt/share/html/Ticket/Modify.html | 51 +- rt/share/html/Ticket/ModifyAll.html | 97 +- rt/share/html/Ticket/ModifyDates.html | 7 +- rt/share/html/Ticket/ModifyLinks.html | 18 +- rt/share/html/Ticket/ModifyPeople.html | 9 +- rt/share/html/Ticket/Reminders.html | 7 +- rt/share/html/Ticket/ShowEmailRecord.html | 59 +- rt/share/html/Ticket/Update.html | 62 +- rt/share/html/Tools/MyDay.html | 5 +- rt/share/html/Tools/Offline.html | 165 - rt/share/html/User/Elements/Portlets/ActiveTickets | 70 + rt/share/html/User/Elements/Portlets/CreateTicket | 58 + rt/share/html/User/Elements/Portlets/ExtraInfo | 56 + .../html/User/Elements/Portlets/InactiveTickets | 70 + rt/share/html/User/Elements/TicketList | 115 + rt/share/html/User/Elements/UserInfo | 64 + rt/share/html/User/History.html | 67 + rt/share/html/User/Prefs.html | 27 +- rt/share/html/User/Search.html | 101 + rt/share/html/User/Summary.html | 99 + rt/share/html/Widgets/ComboBox | 2 +- rt/share/html/Widgets/Form/Select | 4 +- rt/share/html/Widgets/SavedSearch | 7 +- rt/share/html/Widgets/SelectionBox | 121 +- rt/share/html/Widgets/TitleBoxStart | 4 +- rt/share/html/autohandler | 5 - rt/share/html/index.html | 49 +- rt/share/html/m/_elements/footer | 2 +- rt/share/html/m/_elements/header | 8 +- rt/share/html/m/_elements/login | 9 +- rt/share/html/m/_elements/raw_style | 500 - rt/share/html/m/_elements/ticket_list | 6 +- rt/share/html/m/style.css | 52 - rt/share/html/m/ticket/create | 82 +- rt/share/html/m/ticket/history | 2 +- rt/share/html/m/ticket/reply | 19 +- rt/share/html/m/ticket/show | 57 +- rt/share/html/m/tickets/search | 19 +- rt/share/po/ar.po | 5751 +++++++----- rt/share/po/bg.po | 6475 ++++++------- rt/share/po/ca.po | 6073 ++++++------ rt/share/po/cs.po | 6385 +++++++------ rt/share/po/da.po | 8576 +++++++---------- rt/share/po/de.po | 8525 ++++++++--------- rt/share/po/el.po | 8265 ++++++++-------- rt/share/po/en.po | 24 +- rt/share/po/en_GB.po | 7711 +-------------- rt/share/po/es.po | 8863 +++++++----------- rt/share/po/et.po | 6859 +++++++------- rt/share/po/eu.po | 9772 +++++++++++++++++++ rt/share/po/fa.po | 9770 +++++++++++++++++++ rt/share/po/fi.po | 7908 +++++++--------- rt/share/po/fr.po | 7301 +++++++-------- rt/share/po/he.po | 9429 ------------------- rt/share/po/hr.po | 8179 +++++++--------- rt/share/po/hu.po | 8169 ++++++++-------- rt/share/po/id.po | 6796 +++++++------- rt/share/po/is.po | 6695 +++++++------ rt/share/po/it.po | 8825 +++++++----------- rt/share/po/ja.po | 6600 ++++++------- rt/share/po/lt.po | 7489 ++++++++------- rt/share/po/lv.po | 6486 ++++++------- rt/share/po/mk.po | 8933 ------------------ rt/share/po/nb.po | 8695 +++++++---------- rt/share/po/nl.po | 7863 +++++++--------- rt/share/po/nn.po | 6522 +++++++------ rt/share/po/oc.po | 5725 +++++++----- rt/share/po/pl.po | 8434 +++++++---------- rt/share/po/pt.po | 7489 ++++++++------- rt/share/po/pt_BR.po | 8991 ++++++++---------- rt/share/po/pt_PT.po | 6423 +++++++------ rt/share/po/rt.pot | 5575 ++++++----- rt/share/po/ru.po | 7469 ++++++++------- rt/share/po/sk.po | 5737 +++++++----- rt/share/po/sl.po | 6505 ++++++------- rt/share/po/sr.po | 9770 +++++++++++++++++++ rt/share/po/sv.po | 7590 ++++++++------- rt/share/po/tr.po | 6958 +++++++------- rt/share/po/zh_CN.po | 9822 +++++++------------ rt/share/po/zh_TW.po | 9857 +++++++------------- rt/share/static/RichText/LICENSE.md | 1264 +++ rt/share/static/RichText/ckeditor.js | 871 ++ rt/share/static/RichText/config.js | 47 + rt/share/static/RichText/contents.css | 99 + rt/share/static/RichText/lang/af.js | 5 + rt/share/static/RichText/lang/ar.js | 5 + rt/share/static/RichText/lang/bg.js | 5 + rt/share/static/RichText/lang/bn.js | 5 + rt/share/static/RichText/lang/bs.js | 5 + rt/share/static/RichText/lang/ca.js | 5 + rt/share/static/RichText/lang/cs.js | 5 + rt/share/static/RichText/lang/cy.js | 5 + rt/share/static/RichText/lang/da.js | 5 + rt/share/static/RichText/lang/de.js | 5 + rt/share/static/RichText/lang/el.js | 5 + rt/share/static/RichText/lang/en-au.js | 5 + rt/share/static/RichText/lang/en-ca.js | 5 + rt/share/static/RichText/lang/en-gb.js | 5 + rt/share/static/RichText/lang/en.js | 5 + rt/share/static/RichText/lang/eo.js | 5 + rt/share/static/RichText/lang/es.js | 5 + rt/share/static/RichText/lang/et.js | 5 + rt/share/static/RichText/lang/eu.js | 5 + rt/share/static/RichText/lang/fa.js | 5 + rt/share/static/RichText/lang/fi.js | 5 + rt/share/static/RichText/lang/fo.js | 5 + rt/share/static/RichText/lang/fr-ca.js | 5 + rt/share/static/RichText/lang/fr.js | 5 + rt/share/static/RichText/lang/gl.js | 5 + rt/share/static/RichText/lang/gu.js | 5 + rt/share/static/RichText/lang/he.js | 5 + rt/share/static/RichText/lang/hi.js | 5 + rt/share/static/RichText/lang/hr.js | 5 + rt/share/static/RichText/lang/hu.js | 5 + rt/share/static/RichText/lang/is.js | 5 + rt/share/static/RichText/lang/it.js | 5 + rt/share/static/RichText/lang/ja.js | 5 + rt/share/static/RichText/lang/ka.js | 5 + rt/share/static/RichText/lang/km.js | 5 + rt/share/static/RichText/lang/ko.js | 5 + rt/share/static/RichText/lang/ku.js | 5 + rt/share/static/RichText/lang/lt.js | 5 + rt/share/static/RichText/lang/lv.js | 5 + rt/share/static/RichText/lang/mk.js | 5 + rt/share/static/RichText/lang/mn.js | 5 + rt/share/static/RichText/lang/ms.js | 5 + rt/share/static/RichText/lang/nb.js | 5 + rt/share/static/RichText/lang/nl.js | 5 + rt/share/static/RichText/lang/no.js | 5 + rt/share/static/RichText/lang/pl.js | 5 + rt/share/static/RichText/lang/pt-br.js | 5 + rt/share/static/RichText/lang/pt.js | 5 + rt/share/static/RichText/lang/ro.js | 5 + rt/share/static/RichText/lang/ru.js | 5 + rt/share/static/RichText/lang/sk.js | 5 + rt/share/static/RichText/lang/sl.js | 5 + rt/share/static/RichText/lang/sr-latn.js | 5 + rt/share/static/RichText/lang/sr.js | 5 + rt/share/static/RichText/lang/sv.js | 5 + rt/share/static/RichText/lang/th.js | 5 + rt/share/static/RichText/lang/tr.js | 5 + rt/share/static/RichText/lang/ug.js | 5 + rt/share/static/RichText/lang/uk.js | 5 + rt/share/static/RichText/lang/vi.js | 5 + rt/share/static/RichText/lang/zh-cn.js | 5 + rt/share/static/RichText/lang/zh.js | 5 + .../RichText/plugins/a11yhelp/dialogs/a11yhelp.js | 10 + .../a11yhelp/dialogs/lang/_translationstatus.txt | 25 + .../RichText/plugins/a11yhelp/dialogs/lang/ar.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/bg.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/ca.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/cs.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/cy.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/da.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/de.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/el.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/en.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/eo.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/es.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/et.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/fa.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/fi.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/fr.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/gu.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/he.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/hi.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/hr.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/hu.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/it.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/ja.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/ku.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/lt.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/lv.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/mk.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/mn.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/nb.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/nl.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/no.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/pl.js | 9 + .../plugins/a11yhelp/dialogs/lang/pt-br.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/pt.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/ro.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/ru.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/sk.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/sl.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/sv.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/tr.js | 10 + .../RichText/plugins/a11yhelp/dialogs/lang/ug.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/uk.js | 9 + .../RichText/plugins/a11yhelp/dialogs/lang/vi.js | 9 + .../plugins/a11yhelp/dialogs/lang/zh-cn.js | 7 + .../static/RichText/plugins/about/dialogs/about.js | 6 + .../RichText/plugins/clipboard/dialogs/paste.js | 11 + .../plugins/colordialog/dialogs/colordialog.js | 13 + .../RichText/plugins/dialog/dialogDefinition.js | 4 + .../static/RichText/plugins/div/dialogs/div.js | 9 + .../static/RichText/plugins/find/dialogs/find.js | 24 + .../static/RichText/plugins/flash/dialogs/flash.js | 23 + .../RichText/plugins/forms/dialogs/button.js | 8 + .../RichText/plugins/forms/dialogs/checkbox.js | 8 + .../static/RichText/plugins/forms/dialogs/form.js | 8 + .../RichText/plugins/forms/dialogs/hiddenfield.js | 8 + .../static/RichText/plugins/forms/dialogs/radio.js | 8 + .../RichText/plugins/forms/dialogs/select.js | 20 + .../RichText/plugins/forms/dialogs/textarea.js | 8 + .../RichText/plugins/forms/dialogs/textfield.js | 10 + .../RichText/plugins/iframe/dialogs/iframe.js | 10 + .../static/RichText/plugins/image/dialogs/image.js | 41 + .../static/RichText/plugins/link/dialogs/anchor.js | 8 + .../static/RichText/plugins/link/dialogs/link.js | 36 + .../plugins/liststyle/dialogs/liststyle.js | 10 + .../plugins/pastefromword/filter/default.js | 31 + .../static/RichText/plugins/preview/preview.html | 10 + rt/share/static/RichText/plugins/scayt/LICENSE.md | 28 + rt/share/static/RichText/plugins/scayt/README.md | 25 + .../RichText/plugins/scayt/dialogs/options.js | 19 + .../RichText/plugins/scayt/dialogs/toolbar.css | 71 + .../RichText/plugins/smiley/dialogs/smiley.js | 10 + .../dialogs/lang/_translationstatus.txt | 20 + .../plugins/specialchar/dialogs/lang/ca.js | 13 + .../plugins/specialchar/dialogs/lang/cs.js | 13 + .../plugins/specialchar/dialogs/lang/cy.js | 14 + .../plugins/specialchar/dialogs/lang/de.js | 13 + .../plugins/specialchar/dialogs/lang/el.js | 13 + .../plugins/specialchar/dialogs/lang/en.js | 13 + .../plugins/specialchar/dialogs/lang/eo.js | 12 + .../plugins/specialchar/dialogs/lang/et.js | 13 + .../plugins/specialchar/dialogs/lang/fa.js | 13 + .../plugins/specialchar/dialogs/lang/fi.js | 13 + .../plugins/specialchar/dialogs/lang/fr.js | 11 + .../plugins/specialchar/dialogs/lang/he.js | 13 + .../plugins/specialchar/dialogs/lang/hr.js | 13 + .../plugins/specialchar/dialogs/lang/it.js | 14 + .../plugins/specialchar/dialogs/lang/ku.js | 14 + .../plugins/specialchar/dialogs/lang/lv.js | 13 + .../plugins/specialchar/dialogs/lang/nb.js | 11 + .../plugins/specialchar/dialogs/lang/nl.js | 13 + .../plugins/specialchar/dialogs/lang/no.js | 11 + .../plugins/specialchar/dialogs/lang/pt-br.js | 11 + .../plugins/specialchar/dialogs/lang/sk.js | 13 + .../plugins/specialchar/dialogs/lang/sv.js | 11 + .../plugins/specialchar/dialogs/lang/tr.js | 12 + .../plugins/specialchar/dialogs/lang/ug.js | 13 + .../plugins/specialchar/dialogs/lang/zh-cn.js | 9 + .../plugins/specialchar/dialogs/specialchar.js | 14 + .../static/RichText/plugins/table/dialogs/table.js | 20 + .../plugins/tabletools/dialogs/tableCell.js | 16 + .../plugins/templates/dialogs/templates.css | 84 + .../plugins/templates/dialogs/templates.js | 10 + .../plugins/templates/templates/default.js | 6 + rt/share/static/RichText/plugins/wsc/LICENSE.md | 28 + rt/share/static/RichText/plugins/wsc/README.md | 25 + .../RichText/plugins/wsc/dialogs/ciframe.html | 49 + .../RichText/plugins/wsc/dialogs/tmpFrameset.html | 52 + .../static/RichText/plugins/wsc/dialogs/wsc.css | 82 + .../static/RichText/plugins/wsc/dialogs/wsc.js | 11 + rt/share/static/RichText/skins/kama/dialog.css | 5 + rt/share/static/RichText/skins/kama/dialog_ie.css | 5 + rt/share/static/RichText/skins/kama/dialog_ie7.css | 5 + rt/share/static/RichText/skins/kama/dialog_ie8.css | 5 + .../static/RichText/skins/kama/dialog_iequirks.css | 5 + .../static/RichText/skins/kama/dialog_opera.css | 5 + rt/share/static/RichText/skins/kama/editor.css | 5 + rt/share/static/RichText/skins/kama/editor_ie.css | 5 + rt/share/static/RichText/skins/kama/editor_ie7.css | 5 + rt/share/static/RichText/skins/kama/editor_ie8.css | 5 + .../static/RichText/skins/kama/editor_iequirks.css | 5 + rt/share/static/RichText/skins/kama/readme.md | 40 + rt/share/static/RichText/styles.js | 112 + rt/share/static/css/aileron/base.css | 15 + rt/share/static/css/aileron/boxes.css | 133 + rt/share/static/css/aileron/forms.css | 33 + rt/share/static/css/aileron/layout.css | 127 + rt/share/static/css/aileron/login.css | 3 + rt/share/static/css/aileron/main.css | 12 + rt/share/static/css/aileron/misc.css | 11 + rt/share/static/css/aileron/msie.css | 133 + rt/share/static/css/aileron/msie6.css | 62 + rt/share/static/css/aileron/nav.css | 170 + rt/share/static/css/aileron/ticket-lists.css | 195 + rt/share/static/css/aileron/ticket-search.css | 206 + rt/share/static/css/aileron/ticket.css | 9 + rt/share/static/css/ballard/base.css | 15 + rt/share/static/css/ballard/boxes.css | 156 + rt/share/static/css/ballard/layout.css | 130 + rt/share/static/css/ballard/main.css | 9 + rt/share/static/css/ballard/misc.css | 11 + rt/share/static/css/ballard/msie.css | 187 + rt/share/static/css/ballard/msie6.css | 50 + rt/share/static/css/ballard/nav.css | 144 + rt/share/static/css/ballard/ticket-lists.css | 191 + rt/share/static/css/ballard/ticket-search.css | 197 + rt/share/static/css/base/accordion.css | 53 + rt/share/static/css/base/admin.css | 84 + rt/share/static/css/base/articles.css | 11 + rt/share/static/css/base/charts.css | 28 + rt/share/static/css/base/collection.css | 16 + rt/share/static/css/base/farbtastic.css | 51 + rt/share/static/css/base/forms.css | 252 + rt/share/static/css/base/history-folding.css | 65 + rt/share/static/css/base/history.css | 165 + .../static/css/base/jquery-ui-timepicker-addon.css | 22 + rt/share/static/css/base/jquery-ui.css | 1 + .../static/css/base/jquery-ui.custom.modified.css | 854 ++ rt/share/static/css/base/jquery.modal.css | 66 + rt/share/static/css/base/login.css | 71 + rt/share/static/css/base/main.css | 28 + rt/share/static/css/base/misc.css | 81 + rt/share/static/css/base/msie6.css | 19 + rt/share/static/css/base/nav.css | 17 + rt/share/static/css/base/portlets.css | 17 + rt/share/static/css/base/print.css | 192 + rt/share/static/css/base/record.css | 10 + rt/share/static/css/base/rights-editor.css | 130 + rt/share/static/css/base/superfish-navbar.css | 95 + rt/share/static/css/base/superfish-vertical.css | 23 + rt/share/static/css/base/superfish.css | 138 + rt/share/static/css/base/tablesorter.css | 52 + rt/share/static/css/base/theme-editor.css | 69 + rt/share/static/css/base/ticket-form.css | 75 + rt/share/static/css/base/ticket.css | 127 + rt/share/static/css/base/tools.css | 7 + rt/share/static/css/base/yui-fonts.css | 7 + rt/share/static/css/freeside3/InHeader | 67 + rt/share/static/css/freeside3/base.css | 62 + rt/share/static/css/freeside3/boxes.css | 180 + rt/share/static/css/freeside3/forms.css | 79 + rt/share/static/css/freeside3/freeside.css | 7 + rt/share/static/css/freeside3/images/dhandler | 8 + rt/share/static/css/freeside3/layout.css | 181 + rt/share/static/css/freeside3/login.css | 50 + rt/share/static/css/freeside3/main.css | 64 + rt/share/static/css/freeside3/misc.css | 58 + rt/share/static/css/freeside3/msie-pie.css | 58 + rt/share/static/css/freeside3/msie.css | 188 + rt/share/static/css/freeside3/msie6.css | 86 + rt/share/static/css/freeside3/nav.css | 171 + rt/share/static/css/freeside3/ticket-lists.css | 236 + rt/share/static/css/freeside3/ticket-search.css | 242 + rt/share/static/css/freeside3/ticket.css | 289 + rt/share/static/css/freeside4/admin.css | 16 + rt/share/static/css/freeside4/base.css | 17 + rt/share/static/css/freeside4/boxes.css | 151 + rt/share/static/css/freeside4/dashboards.css | 7 + rt/share/static/css/freeside4/forms.css | 104 + rt/share/static/css/freeside4/history.css | 80 + rt/share/static/css/freeside4/layout.css | 116 + rt/share/static/css/freeside4/login.css | 7 + rt/share/static/css/freeside4/main.css | 16 + rt/share/static/css/freeside4/misc.css | 40 + rt/share/static/css/freeside4/msie.css | 109 + rt/share/static/css/freeside4/nav.css | 223 + rt/share/static/css/freeside4/ticket-forms.css | 10 + rt/share/static/css/freeside4/ticket-lists.css | 229 + rt/share/static/css/freeside4/ticket-search.css | 188 + rt/share/static/css/freeside4/ticket.css | 66 + rt/share/static/css/mobile.css | 459 + rt/share/static/css/rudder/admin.css | 16 + rt/share/static/css/rudder/base.css | 17 + rt/share/static/css/rudder/boxes.css | 151 + rt/share/static/css/rudder/dashboards.css | 7 + rt/share/static/css/rudder/forms.css | 104 + rt/share/static/css/rudder/history.css | 80 + rt/share/static/css/rudder/layout.css | 116 + rt/share/static/css/rudder/login.css | 7 + rt/share/static/css/rudder/main.css | 16 + rt/share/static/css/rudder/misc.css | 40 + rt/share/static/css/rudder/msie.css | 109 + rt/share/static/css/rudder/nav.css | 223 + rt/share/static/css/rudder/ticket-forms.css | 10 + rt/share/static/css/rudder/ticket-lists.css | 229 + rt/share/static/css/rudder/ticket-search.css | 188 + rt/share/static/css/rudder/ticket.css | 66 + rt/share/static/css/web2/base.css | 15 + rt/share/static/css/web2/boxes.css | 158 + rt/share/static/css/web2/layout.css | 163 + rt/share/static/css/web2/main.css | 9 + rt/share/static/css/web2/misc.css | 11 + rt/share/static/css/web2/msie.css | 195 + rt/share/static/css/web2/msie6.css | 54 + rt/share/static/css/web2/nav.css | 245 + rt/share/static/css/web2/ticket-lists.css | 191 + rt/share/static/css/web2/ticket-search.css | 197 + rt/share/static/images/test.png | 2 + rt/share/static/js/autocomplete.js | 89 + rt/share/static/js/cascaded.js | 107 + rt/share/static/js/combobox.js | 215 + rt/share/static/js/event-registration.js | 110 + rt/share/static/js/farbtastic.js | 347 + rt/share/static/js/forms.js | 18 + rt/share/static/js/history-folding.js | 26 + rt/share/static/js/i18n.js | 15 + rt/share/static/js/jquery-1.9.1.min.js | 5 + rt/share/static/js/jquery-ui-1.10.0.custom.min.js | 6 + rt/share/static/js/jquery-ui-patch-datepicker.js | 45 + rt/share/static/js/jquery-ui-timepicker-addon.js | 1919 ++++ rt/share/static/js/jquery.cookie.js | 92 + rt/share/static/js/jquery.event.hover-1.0.js | 85 + rt/share/static/js/jquery.modal-defaults.js | 2 + rt/share/static/js/jquery.modal.min.js | 26 + rt/share/static/js/jquery.supposition.js | 83 + rt/share/static/js/jquery.tablesorter.min.js | 16 + rt/share/static/js/jquery_noconflict.js | 4 + rt/share/static/js/late.js | 39 + rt/share/static/js/superfish.js | 126 + rt/share/static/js/supersubs.js | 90 + rt/share/static/js/titlebox-state.js | 36 + rt/share/static/js/util.js | 345 + rt/t/00-mason-syntax.t | 2 +- rt/t/99-policy.t | 20 +- rt/t/api/attachment_filename.t | 6 +- rt/t/api/cfsearch.t | 24 +- rt/t/api/config.t | 8 +- rt/t/api/cron.t | 26 +- rt/t/api/customfield.t | 423 +- rt/t/api/date.t | 98 +- rt/t/api/db_indexes.t | 165 + rt/t/api/group-rights.t | 2 +- rt/t/api/group.t | 2 +- rt/t/api/groups.t | 5 +- rt/t/api/i18n_guess.t | 4 +- rt/t/api/i18n_mime_encoding.t | 32 + rt/t/api/initialdata.t | 16 + rt/t/api/link.t | 6 +- rt/t/api/password-types.t | 16 +- rt/t/api/queue.t | 12 +- rt/t/api/record.t | 4 +- rt/t/api/reminder-permissions.t | 49 + rt/t/api/rights.t | 12 +- rt/t/api/rtname.t | 7 +- rt/t/api/savedsearch.t | 66 +- rt/t/api/scrip.t | 221 +- rt/t/api/scrip_order.t | 313 +- rt/t/api/searchbuilder.t | 2 +- rt/t/api/system-available-rights.t | 65 + rt/t/api/system.t | 54 +- rt/t/api/template.t | 179 +- rt/t/api/ticket.t | 72 +- rt/t/api/tickets.t | 35 +- rt/t/api/txn_content.t | 8 +- rt/t/api/user-prefs.t | 59 + rt/t/api/user.t | 31 +- rt/t/api/users.t | 2 +- rt/t/approval/admincc.t | 46 +- rt/t/approval/basic.t | 36 +- rt/t/articles/interface.t | 138 +- rt/t/articles/search-interface.t | 108 +- rt/t/articles/set-subject.t | 110 + rt/t/articles/upload-customfields.t | 8 +- rt/t/articles/uri-articles.t | 26 +- rt/t/charts/basics.t | 91 + rt/t/charts/compound-sql-function.t | 121 + rt/t/charts/group-by-cf.t | 71 + rt/t/crypt/gnupg/attachments-in-db.t | 49 + rt/t/crypt/no-signer-address.t | 42 + rt/t/crypt/smime/attachments-in-db.t | 45 + rt/t/crypt/smime/bad-recipients.t | 58 + rt/t/crypt/smime/status-string.t | 26 + rt/t/customfields/access_via_queue.t | 7 +- rt/t/customfields/api.t | 172 +- rt/t/customfields/date_search.t | 27 +- rt/t/customfields/datetime_search.t | 28 +- rt/t/customfields/external.t | 8 +- rt/t/customfields/ip.t | 10 +- rt/t/customfields/iprange.t | 6 +- rt/t/customfields/iprangev6.t | 2 +- rt/t/customfields/ipv6.t | 6 +- rt/t/customfields/sort_order.t | 2 +- rt/t/customfields/transaction.t | 17 +- rt/t/customfields/transaction_searching.t | 140 + rt/t/data/configs/apache2.2+fastcgi.conf.in | 1 - rt/t/data/initialdata/initialdata | 101 + rt/t/data/initialdata/transaction-cfs | 52 + .../lib/RT/Extension/PSGIWrap.pm | 16 + rt/t/data/smime/keys/demoCA/cacert.pem | 58 + rt/t/data/smime/keys/demoCA/private/cakey.pem | 18 + rt/t/data/smime/keys/demoCA/serial | 1 + rt/t/data/smime/keys/otherCA/cacert.pem | 80 + rt/t/data/smime/keys/otherCA/private/cakey.pem | 27 + rt/t/data/smime/keys/otherCA/serial | 1 + rt/t/data/smime/keys/root@example.com.crt | 43 + rt/t/data/smime/keys/root@example.com.csr | 9 + rt/t/data/smime/keys/root@example.com.key | 12 + rt/t/data/smime/keys/root@example.com.pem | 55 + rt/t/data/smime/keys/sender@example.com.crt | 43 + rt/t/data/smime/keys/sender@example.com.csr | 9 + rt/t/data/smime/keys/sender@example.com.key | 12 + rt/t/data/smime/keys/sender@example.com.pem | 55 + rt/t/data/smime/mails/1-signed.eml | 74 + rt/t/data/smime/mails/2-signed-attachment.eml | 90 + rt/t/data/smime/mails/3-signed-binary.eml | 95 + rt/t/data/smime/mails/4-encrypted-plain.eml | 32 + rt/t/data/smime/mails/5-encrypted-attachment.eml | 42 + rt/t/data/smime/mails/6-encrypted-binary.eml | 48 + rt/t/data/smime/mails/7-signed-encrypted-plain.eml | 97 + .../smime/mails/8-signed-encrypted-attachment.eml | 107 + .../data/smime/mails/9-signed-encrypted-binary.eml | 113 + rt/t/fts/indexed_mysql.t | 84 +- rt/t/fts/indexed_pg.t | 2 +- rt/t/fts/indexed_sphinx.t | 150 + rt/t/lifecycles/basics.t | 8 +- rt/t/lifecycles/dates.t | 67 +- rt/t/lifecycles/moving.t | 4 +- rt/t/lifecycles/types.t | 33 + rt/t/lifecycles/unresolved-deps.t | 4 +- rt/t/lifecycles/utils.pl | 7 +- rt/t/mail/autogenerated.t | 22 + rt/t/mail/charsets-outgoing-plaintext.t | 315 + rt/t/mail/charsets-outgoing.t | 6 +- rt/t/mail/crypt-gnupg.t | 94 +- rt/t/mail/dashboard-chart-with-utf8.t | 15 +- rt/t/mail/dashboards.t | 2 +- rt/t/mail/digest-attributes.t | 34 +- rt/t/mail/gateway.t | 38 +- rt/t/mail/gnupg-bad.t | 2 +- rt/t/mail/gnupg-incoming.t | 12 +- rt/t/mail/gnupg-outgoing-encrypted-plaintext.t | 27 + rt/t/mail/gnupg-outgoing-plain-plaintext.t | 25 + rt/t/mail/gnupg-outgoing-signed-plaintext.t | 27 + .../gnupg-outgoing-signed_encrypted-plaintext.t | 28 + rt/t/mail/gnupg-realmail.t | 2 +- rt/t/mail/gnupg-reverification.t | 9 +- rt/t/mail/header-characters.t | 40 +- rt/t/mail/html-outgoing.t | 187 + rt/t/mail/mime_decoding.t | 177 +- rt/t/mail/multipart.t | 4 +- rt/t/mail/one-time-recipients.t | 312 +- rt/t/mail/outlook.t | 32 +- rt/t/mail/sendmail-plaintext.t | 150 + rt/t/mail/sendmail.t | 41 +- rt/t/mail/smime/incoming.t | 202 + rt/t/mail/smime/other-signed.t | 135 + rt/t/mail/smime/outgoing.t | 80 + rt/t/mail/smime/realmail.t | 125 + rt/t/mail/smime/reject_on_unencrypted.t | 137 + rt/t/mail/specials-in-encodedwords.t | 2 +- rt/t/mail/wrong_mime_charset.t | 9 +- rt/t/pod.t | 9 +- rt/t/security/CVE-2011-2083-clickable-xss.t | 3 +- rt/t/security/CVE-2011-2084-cf-values.t | 2 +- .../CVE-2011-2084-modifyscrips-templates.t | 37 +- rt/t/security/CVE-2011-5092-graph-links.t | 4 +- rt/t/shredder/00load.t | 10 +- rt/t/shredder/00skeleton.t | 18 +- rt/t/shredder/01basics.t | 20 +- rt/t/shredder/01ticket.t | 55 +- rt/t/shredder/02group_member.t | 211 +- rt/t/shredder/02queue.t | 75 +- rt/t/shredder/02template.t | 45 +- rt/t/shredder/02user.t | 32 +- rt/t/shredder/03plugin.t | 10 +- rt/t/shredder/03plugin_summary.t | 11 +- rt/t/shredder/03plugin_tickets.t | 30 +- rt/t/shredder/03plugin_users.t | 24 +- rt/t/shredder/utils.pl | 394 - rt/t/ticket/action_linear_escalate.t | 2 +- rt/t/ticket/add-watchers.t | 22 +- rt/t/ticket/cfsort-freeform-single.t | 269 +- rt/t/ticket/circular_links.t | 45 + rt/t/ticket/deferred_owner.t | 21 +- rt/t/ticket/googleish_search.t | 42 - rt/t/ticket/linking.t | 36 +- rt/t/ticket/merge.t | 45 +- rt/t/ticket/scrips_batch.t | 41 +- rt/t/ticket/search.t | 31 + rt/t/ticket/search_by_cf_freeform_multiple.t | 225 +- rt/t/ticket/search_by_cf_freeform_single.t | 231 +- rt/t/ticket/search_by_watcher_group.t | 75 + rt/t/ticket/simple_search.t | 42 + rt/t/ticket/time-worked.t | 80 + rt/t/validator/group_members.t | 41 +- rt/t/web/admin_queue_lifecycle.t | 2 +- rt/t/web/admin_user.t | 6 +- rt/t/web/articles-links.t | 2 +- rt/t/web/attachment_dropping.t | 52 + rt/t/web/attachment_encoding.t | 2 +- rt/t/web/attachment_truncation.t | 53 + rt/t/web/attachments.t | 586 +- rt/t/web/basic.t | 12 +- rt/t/web/basic_auth.t | 34 + rt/t/web/case-sensitivity.t | 4 +- rt/t/web/cf_access.t | 10 +- rt/t/web/cf_date.t | 8 +- rt/t/web/cf_datetime.t | 6 +- rt/t/web/cf_groupings.t | 277 + rt/t/web/cf_groupings_user.t | 110 + rt/t/web/cf_image.t | 61 + rt/t/web/cf_onqueue.t | 2 +- rt/t/web/cf_pattern.t | 80 + rt/t/web/cf_render_type.t | 2 +- rt/t/web/cf_select_one.t | 37 +- rt/t/web/cf_textarea.t | 75 + rt/t/web/cf_values_class.t | 2 +- rt/t/web/charting.t | 51 +- rt/t/web/class_create.t | 2 +- rt/t/web/command_line.t | 121 +- rt/t/web/compilation_errors.t | 10 +- rt/t/web/config_tab_right.t | 6 +- rt/t/web/crypt-gnupg.t | 70 +- rt/t/web/csrf.t | 6 +- rt/t/web/custom_search.t | 2 +- rt/t/web/dashboards-basics.t | 30 +- rt/t/web/dashboards-groups.t | 10 +- rt/t/web/dashboards-in-menu.t | 85 + rt/t/web/dashboards-search-cache.t | 46 +- rt/t/web/gnupg-select-keys-on-create.t | 16 +- rt/t/web/gnupg-select-keys-on-update.t | 19 +- rt/t/web/googleish_search.t | 222 - rt/t/web/group_create.t | 2 +- rt/t/web/helpers-http-cache-headers.t | 8 +- .../Callbacks/logout.t/NoAuth/Logout.html/Default | 6 - .../NoAuth/Logout.html/ModifyLoginRedirect | 6 + rt/t/web/html/NoAuth/js/not-by-default.js | 3 - rt/t/web/html_template.t | 4 +- rt/t/web/install.t | 173 + rt/t/web/language_update.t | 22 + rt/t/web/login.t | 5 +- rt/t/web/mobile.t | 210 + rt/t/web/offline.t | 77 - rt/t/web/offline_messages_utf8.t | 64 - rt/t/web/offline_utf8.t | 53 - rt/t/web/owner_disabled_group_19221.t | 4 +- rt/t/web/path-traversal.t | 23 +- rt/t/web/psgi-wrap.t | 15 + rt/t/web/query_builder.t | 6 +- rt/t/web/query_builder_queue_limits.t | 30 +- rt/t/web/query_log.t | 3 +- rt/t/web/queue_create.t | 2 +- rt/t/web/redirect-after-login.t | 4 +- rt/t/web/reminder-permissions.t | 178 + rt/t/web/reminders.t | 2 +- rt/t/web/remote_user.t | 207 +- rt/t/web/rest-search-group.t | 102 + rt/t/web/rest-search-queue.t | 104 + rt/t/web/rest-search-user.t | 115 + rt/t/web/rest.t | 6 +- rt/t/web/rest_user_cf.t | 26 + rt/t/web/richtext-autohandler.t | 14 - rt/t/web/rights.t | 2 +- rt/t/web/rights1.t | 24 +- rt/t/web/saved_search_chart.t | 8 +- rt/t/web/saved_search_permissions.t | 2 +- rt/t/web/scrips.t | 219 +- rt/t/web/search_bulk_update_links.t | 4 +- rt/t/web/search_ical.t | 196 + rt/t/web/search_rss.t | 13 +- rt/t/web/search_simple.t | 4 +- rt/t/web/self_service.t | 5 +- rt/t/web/simple_search.t | 225 + rt/t/web/smime/outgoing.t | 384 + rt/t/web/squish.t | 16 +- rt/t/web/static/js/not-by-default.js | 3 + rt/t/web/template.t | 2 +- rt/t/web/ticket-create-utf8.t | 6 +- rt/t/web/ticket_forward.t | 72 +- rt/t/web/ticket_links.t | 6 +- rt/t/web/ticket_modify_all.t | 33 +- rt/t/web/ticket_modify_people.t | 14 +- rt/t/web/ticket_owner.t | 120 +- rt/t/web/ticket_preserve_basics.t | 110 + rt/t/web/ticket_txn_content.t | 4 +- rt/t/web/user_update.t | 10 +- rt/t/web/walk.t | 2 +- 1811 files changed, 229998 insertions(+), 215100 deletions(-) create mode 100644 rt/devel/tools/cmd-boilerplate create mode 100644 rt/devel/tools/css_tidy delete mode 100644 rt/devel/tools/factory delete mode 100644 rt/devel/tools/merge-rosetta.pl create mode 100644 rt/devel/tools/rt-message-catalog create mode 100644 rt/docs/UPGRADING-4.2 create mode 100644 rt/docs/authentication.pod create mode 100644 rt/docs/automating_rt.pod create mode 100644 rt/docs/charts.pod create mode 100644 rt/docs/dashboards.pod create mode 100644 rt/docs/extensions.pod create mode 100644 rt/docs/reminders.pod create mode 100644 rt/docs/rt_perl.pod create mode 100644 rt/docs/writing_extensions.pod delete mode 100644 rt/etc/upgrade/3.1.0/content delete mode 100644 rt/etc/upgrade/3.3.0/content delete mode 100644 rt/etc/upgrade/3.3.11/content create mode 100644 rt/etc/upgrade/4.0.18/content create mode 100644 rt/etc/upgrade/4.0.19/content create mode 100644 rt/etc/upgrade/4.0.19/schema.mysql create mode 100644 rt/etc/upgrade/4.1.0/content create mode 100644 rt/etc/upgrade/4.1.1/acl.Pg create mode 100644 rt/etc/upgrade/4.1.1/content create mode 100644 rt/etc/upgrade/4.1.1/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.1/schema.Pg create mode 100644 rt/etc/upgrade/4.1.1/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.1/schema.mysql create mode 100644 rt/etc/upgrade/4.1.10/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.10/schema.Pg create mode 100644 rt/etc/upgrade/4.1.10/schema.mysql create mode 100644 rt/etc/upgrade/4.1.11/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.11/schema.Pg create mode 100644 rt/etc/upgrade/4.1.11/schema.mysql create mode 100644 rt/etc/upgrade/4.1.12/content create mode 100644 rt/etc/upgrade/4.1.13/backcompat create mode 100644 rt/etc/upgrade/4.1.13/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.13/schema.Pg create mode 100644 rt/etc/upgrade/4.1.13/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.13/schema.mysql create mode 100644 rt/etc/upgrade/4.1.14/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.14/schema.Pg create mode 100644 rt/etc/upgrade/4.1.14/schema.mysql create mode 100644 rt/etc/upgrade/4.1.15/content create mode 100644 rt/etc/upgrade/4.1.16/content create mode 100644 rt/etc/upgrade/4.1.17/content create mode 100644 rt/etc/upgrade/4.1.18/content create mode 100644 rt/etc/upgrade/4.1.19/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.19/schema.Pg create mode 100644 rt/etc/upgrade/4.1.19/schema.mysql create mode 100644 rt/etc/upgrade/4.1.20/content create mode 100644 rt/etc/upgrade/4.1.21/content create mode 100644 rt/etc/upgrade/4.1.22/content create mode 100644 rt/etc/upgrade/4.1.22/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.22/schema.Pg create mode 100644 rt/etc/upgrade/4.1.22/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.22/schema.mysql create mode 100644 rt/etc/upgrade/4.1.23/indexes create mode 100644 rt/etc/upgrade/4.1.4/content create mode 100644 rt/etc/upgrade/4.1.4/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.4/schema.Pg create mode 100644 rt/etc/upgrade/4.1.4/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.4/schema.mysql create mode 100644 rt/etc/upgrade/4.1.5/content create mode 100644 rt/etc/upgrade/4.1.5/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.5/schema.Pg create mode 100644 rt/etc/upgrade/4.1.5/schema.mysql create mode 100644 rt/etc/upgrade/4.1.6/content create mode 100644 rt/etc/upgrade/4.1.7/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.7/schema.Pg create mode 100644 rt/etc/upgrade/4.1.7/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.7/schema.mysql create mode 100644 rt/etc/upgrade/4.1.8/schema.Oracle create mode 100644 rt/etc/upgrade/4.1.8/schema.Pg create mode 100644 rt/etc/upgrade/4.1.8/schema.SQLite create mode 100644 rt/etc/upgrade/4.1.8/schema.mysql create mode 100644 rt/etc/upgrade/4.1.9/content create mode 100644 rt/etc/upgrade/4.2.1/content create mode 100644 rt/etc/upgrade/4.2.10/content create mode 100644 rt/etc/upgrade/4.2.11/content create mode 100644 rt/etc/upgrade/4.2.2/content create mode 100644 rt/etc/upgrade/4.2.2/schema.mysql create mode 100644 rt/etc/upgrade/4.2.4/content create mode 100644 rt/etc/upgrade/4.2.6/content create mode 100644 rt/etc/upgrade/4.2.6/schema.mysql create mode 100644 rt/etc/upgrade/4.2.7/content create mode 100644 rt/etc/upgrade/4.2.8/content create mode 100644 rt/etc/upgrade/sanity-check-stylesheets.in delete mode 100644 rt/etc/upgrade/sanity-check-stylesheets.pl create mode 100644 rt/etc/upgrade/shrink-cgm-table.in create mode 100644 rt/etc/upgrade/shrink-transactions-table.in delete mode 100644 rt/etc/upgrade/shrink_cgm_table.pl delete mode 100644 rt/etc/upgrade/shrink_transactions_table.pl create mode 100644 rt/etc/upgrade/switch-templates-to.in create mode 100644 rt/etc/upgrade/time-worked-history.in create mode 100644 rt/lib/RT/Action/AutoOpenInactive.pm create mode 100644 rt/lib/RT/Action/NotifyOwnerOrAdminCc.pm create mode 100644 rt/lib/RT/Action/OpenOnStarted.pm create mode 100644 rt/lib/RT/Action/SendForward.pm create mode 100644 rt/lib/RT/Crypt.pm create mode 100644 rt/lib/RT/Crypt/GnuPG/CRLFHandle.pm create mode 100644 rt/lib/RT/Crypt/Role.pm create mode 100644 rt/lib/RT/Crypt/SMIME.pm create mode 100644 rt/lib/RT/DependencyWalker.pm create mode 100644 rt/lib/RT/DependencyWalker/FindDependencies.pm create mode 100644 rt/lib/RT/Interface/Email/Auth/Crypt.pm delete mode 100755 rt/lib/RT/Interface/Email/Auth/GnuPG.pm delete mode 100644 rt/lib/RT/Interface/Web.pm.orig create mode 100644 rt/lib/RT/Interface/Web/Middleware/StaticHeaders.pm create mode 100644 rt/lib/RT/Lifecycle/Ticket.pm create mode 100644 rt/lib/RT/Migrate.pm create mode 100644 rt/lib/RT/Migrate/Importer.pm create mode 100644 rt/lib/RT/Migrate/Importer/File.pm create mode 100644 rt/lib/RT/Migrate/Incremental.pm create mode 100644 rt/lib/RT/Migrate/Serializer.pm create mode 100644 rt/lib/RT/Migrate/Serializer/File.pm create mode 100644 rt/lib/RT/Migrate/Serializer/IncrementalRecord.pm create mode 100644 rt/lib/RT/Migrate/Serializer/IncrementalRecords.pm create mode 100644 rt/lib/RT/ObjectScrip.pm create mode 100644 rt/lib/RT/ObjectScrips.pm create mode 100644 rt/lib/RT/PlackRunner.pm create mode 100644 rt/lib/RT/Record/AddAndSort.pm create mode 100644 rt/lib/RT/Record/Role.pm create mode 100644 rt/lib/RT/Record/Role/Lifecycle.pm create mode 100644 rt/lib/RT/Record/Role/Links.pm create mode 100644 rt/lib/RT/Record/Role/Rights.pm create mode 100644 rt/lib/RT/Record/Role/Roles.pm create mode 100644 rt/lib/RT/Record/Role/Status.pm delete mode 100644 rt/lib/RT/Search/Googleish.pm create mode 100644 rt/lib/RT/Search/Simple.pm create mode 100644 rt/lib/RT/SearchBuilder/AddAndSort.pm create mode 100644 rt/lib/RT/SearchBuilder/Role.pm create mode 100644 rt/lib/RT/SearchBuilder/Role/Roles.pm delete mode 100644 rt/lib/RT/Shredder/ACE.pm delete mode 100644 rt/lib/RT/Shredder/Attachment.pm delete mode 100644 rt/lib/RT/Shredder/CachedGroupMember.pm delete mode 100644 rt/lib/RT/Shredder/CustomField.pm delete mode 100644 rt/lib/RT/Shredder/CustomFieldValue.pm delete mode 100644 rt/lib/RT/Shredder/Group.pm delete mode 100644 rt/lib/RT/Shredder/GroupMember.pm delete mode 100644 rt/lib/RT/Shredder/Link.pm delete mode 100644 rt/lib/RT/Shredder/ObjectCustomFieldValue.pm delete mode 100644 rt/lib/RT/Shredder/Principal.pm delete mode 100644 rt/lib/RT/Shredder/Queue.pm delete mode 100644 rt/lib/RT/Shredder/Scrip.pm delete mode 100644 rt/lib/RT/Shredder/ScripAction.pm delete mode 100644 rt/lib/RT/Shredder/ScripCondition.pm delete mode 100644 rt/lib/RT/Shredder/Template.pm delete mode 100644 rt/lib/RT/Shredder/Ticket.pm delete mode 100644 rt/lib/RT/Shredder/Transaction.pm delete mode 100644 rt/lib/RT/Shredder/User.pm create mode 100644 rt/lib/RT/Test/SMIME.pm create mode 100644 rt/lib/RT/Test/Shredder.pm delete mode 100644 rt/lib/RT/Tickets_SQL.pm create mode 100644 rt/sbin/rt-importer.in delete mode 100755 rt/sbin/rt-message-catalog create mode 100644 rt/sbin/rt-serializer.in create mode 100644 rt/share/html/Admin/Elements/ConfigureDashboardsInMenu delete mode 100755 rt/share/html/Admin/Elements/CreateUserCalled delete mode 100755 rt/share/html/Admin/Elements/EditUserComments delete mode 100755 rt/share/html/Admin/Elements/ListGlobalCustomFields delete mode 100755 rt/share/html/Admin/Elements/ListGlobalScrips create mode 100644 rt/share/html/Admin/Elements/LoggingSummary create mode 100644 rt/share/html/Admin/Elements/MembershipsPage delete mode 100644 rt/share/html/Admin/Elements/PickCustomFields delete mode 100644 rt/share/html/Admin/Elements/PickObjects delete mode 100755 rt/share/html/Admin/Elements/QueueRightsForUser delete mode 100755 rt/share/html/Admin/Elements/SelectModifyGroup delete mode 100755 rt/share/html/Admin/Elements/SelectModifyQueue delete mode 100755 rt/share/html/Admin/Elements/SelectModifyUser delete mode 100755 rt/share/html/Admin/Elements/SelectRights delete mode 100755 rt/share/html/Admin/Elements/SelectScrip delete mode 100755 rt/share/html/Admin/Elements/SelectSingleOrMultiple create mode 100644 rt/share/html/Admin/Elements/SelectStageForAdded delete mode 100755 rt/share/html/Admin/Elements/SelectTemplate create mode 100644 rt/share/html/Admin/Elements/UpgradeHistory create mode 100644 rt/share/html/Admin/Elements/UpgradeHistoryRow create mode 100644 rt/share/html/Admin/Global/DashboardsInMenu.html delete mode 100755 rt/share/html/Admin/Global/Scrip.html create mode 100644 rt/share/html/Admin/Groups/Memberships.html delete mode 100755 rt/share/html/Admin/Queues/Scrip.html create mode 100644 rt/share/html/Admin/Scrips/Create.html create mode 100644 rt/share/html/Admin/Scrips/Elements/EditBasics create mode 100644 rt/share/html/Admin/Scrips/Elements/EditCustomCode create mode 100644 rt/share/html/Admin/Scrips/Elements/SelectTemplate create mode 100644 rt/share/html/Admin/Scrips/Modify.html create mode 100644 rt/share/html/Admin/Scrips/Objects.html create mode 100644 rt/share/html/Admin/Scrips/index.html create mode 100644 rt/share/html/Admin/Users/DashboardsInMenu.html delete mode 100644 rt/share/html/Admin/Users/GnuPG.html create mode 100644 rt/share/html/Admin/Users/Keys.html delete mode 100644 rt/share/html/Articles/Article/Elements/ShowHistory create mode 100644 rt/share/html/Articles/Elements/MaybeNeedsSetup create mode 100644 rt/share/html/Articles/Elements/NeedsSetup create mode 100644 rt/share/html/Articles/Elements/SubjectOverride create mode 100644 rt/share/html/Elements/AddLinks delete mode 100755 rt/share/html/Elements/BevelBoxRaisedEnd delete mode 100755 rt/share/html/Elements/BevelBoxRaisedStart create mode 100644 rt/share/html/Elements/BulkCustomFields create mode 100644 rt/share/html/Elements/BulkLinks create mode 100644 rt/share/html/Elements/Crypt/KeyIssues create mode 100644 rt/share/html/Elements/Crypt/SelectKeyForEncryption create mode 100644 rt/share/html/Elements/Crypt/SelectKeyForSigning create mode 100644 rt/share/html/Elements/Crypt/SignEncryptWidget create mode 100644 rt/share/html/Elements/CryptStatus create mode 100644 rt/share/html/Elements/EditCustomFieldCustomGroupings create mode 100644 rt/share/html/Elements/EditCustomFields create mode 100644 rt/share/html/Elements/FindUser create mode 100644 rt/share/html/Elements/FoldStanzaJS delete mode 100644 rt/share/html/Elements/GnuPG/KeyIssues delete mode 100644 rt/share/html/Elements/GnuPG/SelectKeyForEncryption delete mode 100644 rt/share/html/Elements/GnuPG/SelectKeyForSigning delete mode 100644 rt/share/html/Elements/GnuPG/SignEncryptWidget create mode 100644 rt/share/html/Elements/GotoUser create mode 100644 rt/share/html/Elements/JavascriptConfig create mode 100644 rt/share/html/Elements/LoginHelp delete mode 100755 rt/share/html/Elements/MyRequests delete mode 100755 rt/share/html/Elements/MyTickets delete mode 100755 rt/share/html/Elements/SelectLinkType create mode 100644 rt/share/html/Elements/SelectObject delete mode 100755 rt/share/html/Elements/SelectSortOrder delete mode 100755 rt/share/html/Elements/SelectTicketSortBy delete mode 100755 rt/share/html/Elements/SelectTicketTypes create mode 100644 rt/share/html/Elements/ShowCustomFieldCustomGroupings create mode 100644 rt/share/html/Elements/ShowHistory create mode 100644 rt/share/html/Elements/ShowLinksOfType create mode 100644 rt/share/html/Elements/ShowMessageHeaders create mode 100644 rt/share/html/Elements/ShowMessageStanza create mode 100644 rt/share/html/Elements/ShowPrincipal create mode 100644 rt/share/html/Elements/ShowRecord create mode 100644 rt/share/html/Elements/ShowTransaction create mode 100644 rt/share/html/Elements/ShowTransactionAttachments delete mode 100644 rt/share/html/Elements/ShowUserConcise delete mode 100644 rt/share/html/Elements/ShowUserVerbose create mode 100644 rt/share/html/Elements/TSVExport create mode 100644 rt/share/html/Errors/WebRemoteUser/Deauthorized create mode 100644 rt/share/html/Errors/WebRemoteUser/NoInternalUser create mode 100644 rt/share/html/Errors/WebRemoteUser/NoRemoteUser create mode 100644 rt/share/html/Errors/WebRemoteUser/UserAutocreateDefaultsOnLogin create mode 100644 rt/share/html/Errors/WebRemoteUser/Wrapper create mode 100644 rt/share/html/Helpers/Autocomplete/Tickets create mode 100644 rt/share/html/Helpers/UserInfo delete mode 100755 rt/share/html/NoAuth/Reminder.html delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/config.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/contents.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/_languages.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/af.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ar.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bg.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/bs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ca.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-au.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-ca.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en-gb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/es.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/eu.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fr-ca.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/gl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/gu.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/hu.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/id.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/is.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ja.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ka.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/km.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ko.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/lt.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/mk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/mn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ms.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/pt.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ro.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ru.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sr-latn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/sv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/th.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/uk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/zh.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/gu.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/mk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ro.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/about/dialogs/about.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/adobeair/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/ajax/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/autogrow/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/bbcode/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/clipboard/dialogs/paste.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/colordialog/dialogs/colordialog.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/bg.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/gu.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/uk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/dialog/dialogDefinition.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/div/dialogs/div.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/docprops/dialogs/docprops.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/docprops/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/find/dialogs/find.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/flash/dialogs/flash.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/button.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/checkbox.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/form.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/hiddenfield.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/radio.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/select.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textarea.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/forms/dialogs/textfield.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/iframe/dialogs/iframe.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/iframedialog/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/image/dialogs/image.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/anchor.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/link/dialogs/link.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/liststyle/dialogs/liststyle.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/pastefromword/filter/default.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/pastetext/dialogs/pastetext.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/dialogs/placeholder.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/bg.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/uk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/preview/preview.html delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/options.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/scayt/dialogs/toolbar.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/smiley/dialogs/smiley.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/dialogs/specialchar.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/styles/styles/default.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/stylesheetparser/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/table/dialogs/table.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/tableresize/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/tabletools/dialogs/tableCell.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/templates/dialogs/templates.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/templates/templates/default.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/dialogs/uicolor.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/_translationstatus.txt delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/bg.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/cs.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/cy.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/da.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/de.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/el.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/en.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/eo.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/et.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fa.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/he.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/hr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/it.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/ku.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/lv.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/mk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/nb.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/nl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/no.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/pl.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/pt-br.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/sk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/tr.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/ug.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/uk.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/vi.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/zh-cn.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/assets/yui.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/yui/yui.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/ciframe.html delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/tmpFrameset.html delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/wsc/dialogs/wsc.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/xml/plugin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/editor.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/skin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/kama/templates.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/editor.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/skin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/office2003/templates.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/dialog.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/editor.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/skin.js delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/skins/v2/templates.css delete mode 100644 rt/share/html/NoAuth/RichText/ckeditor/themes/default/theme.js delete mode 100644 rt/share/html/NoAuth/RichText/dhandler create mode 100644 rt/share/html/NoAuth/css/aileron/AfterMenus delete mode 100644 rt/share/html/NoAuth/css/aileron/base.css delete mode 100644 rt/share/html/NoAuth/css/aileron/boxes.css delete mode 100644 rt/share/html/NoAuth/css/aileron/forms.css delete mode 100644 rt/share/html/NoAuth/css/aileron/images/dhandler delete mode 100644 rt/share/html/NoAuth/css/aileron/layout.css delete mode 100644 rt/share/html/NoAuth/css/aileron/login.css delete mode 100644 rt/share/html/NoAuth/css/aileron/main.css delete mode 100644 rt/share/html/NoAuth/css/aileron/misc.css delete mode 100644 rt/share/html/NoAuth/css/aileron/msie.css delete mode 100644 rt/share/html/NoAuth/css/aileron/msie6.css delete mode 100644 rt/share/html/NoAuth/css/aileron/nav.css delete mode 100644 rt/share/html/NoAuth/css/aileron/ticket-lists.css delete mode 100644 rt/share/html/NoAuth/css/aileron/ticket-search.css delete mode 100644 rt/share/html/NoAuth/css/aileron/ticket.css delete mode 100644 rt/share/html/NoAuth/css/ballard/base.css delete mode 100644 rt/share/html/NoAuth/css/ballard/boxes.css delete mode 100644 rt/share/html/NoAuth/css/ballard/images/dhandler delete mode 100644 rt/share/html/NoAuth/css/ballard/layout.css delete mode 100644 rt/share/html/NoAuth/css/ballard/main.css delete mode 100644 rt/share/html/NoAuth/css/ballard/misc.css delete mode 100644 rt/share/html/NoAuth/css/ballard/msie.css delete mode 100644 rt/share/html/NoAuth/css/ballard/msie6.css delete mode 100644 rt/share/html/NoAuth/css/ballard/nav.css delete mode 100644 rt/share/html/NoAuth/css/ballard/ticket-lists.css delete mode 100644 rt/share/html/NoAuth/css/ballard/ticket-search.css delete mode 100644 rt/share/html/NoAuth/css/ballard/ticket.css delete mode 100644 rt/share/html/NoAuth/css/base/admin.css delete mode 100644 rt/share/html/NoAuth/css/base/articles.css delete mode 100644 rt/share/html/NoAuth/css/base/collection.css delete mode 100644 rt/share/html/NoAuth/css/base/forms.css delete mode 100644 rt/share/html/NoAuth/css/base/history-folding.css delete mode 100644 rt/share/html/NoAuth/css/base/jquery-ui-timepicker-addon.css delete mode 100644 rt/share/html/NoAuth/css/base/jquery-ui.css delete mode 100644 rt/share/html/NoAuth/css/base/jquery-ui.custom.modified.css delete mode 100644 rt/share/html/NoAuth/css/base/login.css delete mode 100644 rt/share/html/NoAuth/css/base/main.css delete mode 100644 rt/share/html/NoAuth/css/base/misc.css delete mode 100644 rt/share/html/NoAuth/css/base/msie6.css delete mode 100644 rt/share/html/NoAuth/css/base/nav.css delete mode 100644 rt/share/html/NoAuth/css/base/portlets.css delete mode 100644 rt/share/html/NoAuth/css/base/rights-editor.css delete mode 100644 rt/share/html/NoAuth/css/base/superfish-navbar.css delete mode 100644 rt/share/html/NoAuth/css/base/superfish-vertical.css delete mode 100644 rt/share/html/NoAuth/css/base/superfish.css delete mode 100644 rt/share/html/NoAuth/css/base/tablesorter.css delete mode 100644 rt/share/html/NoAuth/css/base/theme-editor.css delete mode 100644 rt/share/html/NoAuth/css/base/ticket-form.css delete mode 100644 rt/share/html/NoAuth/css/base/ticket.css delete mode 100644 rt/share/html/NoAuth/css/base/tools.css delete mode 100644 rt/share/html/NoAuth/css/base/yui-fonts.css delete mode 100644 rt/share/html/NoAuth/css/print.css create mode 100644 rt/share/html/NoAuth/css/rudder/AfterMenus create mode 100644 rt/share/html/NoAuth/css/rudder/InHeader create mode 100644 rt/share/html/NoAuth/css/web2/AfterMenus delete mode 100644 rt/share/html/NoAuth/css/web2/base.css delete mode 100644 rt/share/html/NoAuth/css/web2/boxes.css delete mode 100644 rt/share/html/NoAuth/css/web2/images/dhandler delete mode 100644 rt/share/html/NoAuth/css/web2/layout.css delete mode 100644 rt/share/html/NoAuth/css/web2/main.css delete mode 100644 rt/share/html/NoAuth/css/web2/misc.css delete mode 100644 rt/share/html/NoAuth/css/web2/msie.css delete mode 100644 rt/share/html/NoAuth/css/web2/msie6.css delete mode 100644 rt/share/html/NoAuth/css/web2/nav.css delete mode 100644 rt/share/html/NoAuth/css/web2/ticket-lists.css delete mode 100644 rt/share/html/NoAuth/css/web2/ticket-search.css delete mode 100644 rt/share/html/NoAuth/css/web2/ticket.css delete mode 100644 rt/share/html/NoAuth/images/autohandler delete mode 100644 rt/share/html/NoAuth/images/test.png delete mode 100644 rt/share/html/NoAuth/js/cascaded.js delete mode 100644 rt/share/html/NoAuth/js/class.js delete mode 100644 rt/share/html/NoAuth/js/combobox.js delete mode 100644 rt/share/html/NoAuth/js/farbtastic.js delete mode 100644 rt/share/html/NoAuth/js/history-folding.js delete mode 100644 rt/share/html/NoAuth/js/jquery-1.4.2.min.js delete mode 100644 rt/share/html/NoAuth/js/jquery-ui-1.8.4.custom.min.js delete mode 100644 rt/share/html/NoAuth/js/jquery-ui-patch-datepicker.js delete mode 100644 rt/share/html/NoAuth/js/jquery-ui-timepicker-addon.js delete mode 100644 rt/share/html/NoAuth/js/jquery.cookie.js delete mode 100644 rt/share/html/NoAuth/js/jquery.event.hover-1.0.js delete mode 100644 rt/share/html/NoAuth/js/jquery.supposition.js delete mode 100644 rt/share/html/NoAuth/js/jquery.tablesorter.min.js delete mode 100644 rt/share/html/NoAuth/js/jquery_noconflict.js delete mode 100644 rt/share/html/NoAuth/js/late.js delete mode 100644 rt/share/html/NoAuth/js/list.js delete mode 100644 rt/share/html/NoAuth/js/superfish.js delete mode 100644 rt/share/html/NoAuth/js/supersubs.js delete mode 100644 rt/share/html/NoAuth/js/titlebox-state.js delete mode 100644 rt/share/html/NoAuth/js/userautocomplete.js delete mode 100644 rt/share/html/NoAuth/js/util.js create mode 100644 rt/share/html/Prefs/DashboardsInMenu.html delete mode 100755 rt/share/html/REST/1.0/search/ticket create mode 100644 rt/share/html/Search/Elements/ChartTable create mode 100644 rt/share/html/Search/Elements/PickObjectCFs create mode 100644 rt/share/html/Search/Elements/SelectChartFunction delete mode 100644 rt/share/html/Search/Graph.html create mode 100644 rt/share/html/Search/index.html delete mode 100755 rt/share/html/SelfService/Error.html create mode 100644 rt/share/html/SelfService/Helpers/Autocomplete/CustomFieldValues create mode 100644 rt/share/html/SelfService/Helpers/Autocomplete/Users create mode 100644 rt/share/html/Ticket/Crypt.html create mode 100644 rt/share/html/Ticket/Elements/DelayShowHistory create mode 100644 rt/share/html/Ticket/Elements/EditMerge delete mode 100644 rt/share/html/Ticket/Elements/FindAttachments delete mode 100644 rt/share/html/Ticket/Elements/FindTransactions delete mode 100644 rt/share/html/Ticket/Elements/FoldStanzaJS create mode 100644 rt/share/html/Ticket/Elements/SelectStatus delete mode 100755 rt/share/html/Ticket/Elements/ShowDependencies create mode 100644 rt/share/html/Ticket/Elements/ShowDependencyStatus delete mode 100644 rt/share/html/Ticket/Elements/ShowGnuPGStatus delete mode 100755 rt/share/html/Ticket/Elements/ShowHistory delete mode 100755 rt/share/html/Ticket/Elements/ShowMembers delete mode 100755 rt/share/html/Ticket/Elements/ShowMessageHeaders delete mode 100755 rt/share/html/Ticket/Elements/ShowMessageStanza delete mode 100755 rt/share/html/Ticket/Elements/ShowTransaction delete mode 100644 rt/share/html/Ticket/Elements/ShowTransactionAttachments delete mode 100644 rt/share/html/Ticket/Elements/ShowUserEntry delete mode 100644 rt/share/html/Ticket/GnuPG.html delete mode 100644 rt/share/html/Tools/Offline.html create mode 100644 rt/share/html/User/Elements/Portlets/ActiveTickets create mode 100644 rt/share/html/User/Elements/Portlets/CreateTicket create mode 100644 rt/share/html/User/Elements/Portlets/ExtraInfo create mode 100644 rt/share/html/User/Elements/Portlets/InactiveTickets create mode 100644 rt/share/html/User/Elements/TicketList create mode 100644 rt/share/html/User/Elements/UserInfo create mode 100644 rt/share/html/User/History.html create mode 100644 rt/share/html/User/Search.html create mode 100644 rt/share/html/User/Summary.html delete mode 100644 rt/share/html/m/_elements/raw_style delete mode 100644 rt/share/html/m/style.css create mode 100644 rt/share/po/eu.po create mode 100644 rt/share/po/fa.po delete mode 100644 rt/share/po/he.po delete mode 100644 rt/share/po/mk.po create mode 100644 rt/share/po/sr.po create mode 100644 rt/share/static/RichText/LICENSE.md create mode 100644 rt/share/static/RichText/ckeditor.js create mode 100644 rt/share/static/RichText/config.js create mode 100644 rt/share/static/RichText/contents.css create mode 100644 rt/share/static/RichText/lang/af.js create mode 100644 rt/share/static/RichText/lang/ar.js create mode 100644 rt/share/static/RichText/lang/bg.js create mode 100644 rt/share/static/RichText/lang/bn.js create mode 100644 rt/share/static/RichText/lang/bs.js create mode 100644 rt/share/static/RichText/lang/ca.js create mode 100644 rt/share/static/RichText/lang/cs.js create mode 100644 rt/share/static/RichText/lang/cy.js create mode 100644 rt/share/static/RichText/lang/da.js create mode 100644 rt/share/static/RichText/lang/de.js create mode 100644 rt/share/static/RichText/lang/el.js create mode 100644 rt/share/static/RichText/lang/en-au.js create mode 100644 rt/share/static/RichText/lang/en-ca.js create mode 100644 rt/share/static/RichText/lang/en-gb.js create mode 100644 rt/share/static/RichText/lang/en.js create mode 100644 rt/share/static/RichText/lang/eo.js create mode 100644 rt/share/static/RichText/lang/es.js create mode 100644 rt/share/static/RichText/lang/et.js create mode 100644 rt/share/static/RichText/lang/eu.js create mode 100644 rt/share/static/RichText/lang/fa.js create mode 100644 rt/share/static/RichText/lang/fi.js create mode 100644 rt/share/static/RichText/lang/fo.js create mode 100644 rt/share/static/RichText/lang/fr-ca.js create mode 100644 rt/share/static/RichText/lang/fr.js create mode 100644 rt/share/static/RichText/lang/gl.js create mode 100644 rt/share/static/RichText/lang/gu.js create mode 100644 rt/share/static/RichText/lang/he.js create mode 100644 rt/share/static/RichText/lang/hi.js create mode 100644 rt/share/static/RichText/lang/hr.js create mode 100644 rt/share/static/RichText/lang/hu.js create mode 100644 rt/share/static/RichText/lang/is.js create mode 100644 rt/share/static/RichText/lang/it.js create mode 100644 rt/share/static/RichText/lang/ja.js create mode 100644 rt/share/static/RichText/lang/ka.js create mode 100644 rt/share/static/RichText/lang/km.js create mode 100644 rt/share/static/RichText/lang/ko.js create mode 100644 rt/share/static/RichText/lang/ku.js create mode 100644 rt/share/static/RichText/lang/lt.js create mode 100644 rt/share/static/RichText/lang/lv.js create mode 100644 rt/share/static/RichText/lang/mk.js create mode 100644 rt/share/static/RichText/lang/mn.js create mode 100644 rt/share/static/RichText/lang/ms.js create mode 100644 rt/share/static/RichText/lang/nb.js create mode 100644 rt/share/static/RichText/lang/nl.js create mode 100644 rt/share/static/RichText/lang/no.js create mode 100644 rt/share/static/RichText/lang/pl.js create mode 100644 rt/share/static/RichText/lang/pt-br.js create mode 100644 rt/share/static/RichText/lang/pt.js create mode 100644 rt/share/static/RichText/lang/ro.js create mode 100644 rt/share/static/RichText/lang/ru.js create mode 100644 rt/share/static/RichText/lang/sk.js create mode 100644 rt/share/static/RichText/lang/sl.js create mode 100644 rt/share/static/RichText/lang/sr-latn.js create mode 100644 rt/share/static/RichText/lang/sr.js create mode 100644 rt/share/static/RichText/lang/sv.js create mode 100644 rt/share/static/RichText/lang/th.js create mode 100644 rt/share/static/RichText/lang/tr.js create mode 100644 rt/share/static/RichText/lang/ug.js create mode 100644 rt/share/static/RichText/lang/uk.js create mode 100644 rt/share/static/RichText/lang/vi.js create mode 100644 rt/share/static/RichText/lang/zh-cn.js create mode 100644 rt/share/static/RichText/lang/zh.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/a11yhelp.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/_translationstatus.txt create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ar.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/bg.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ca.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/cs.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/cy.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/da.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/de.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/el.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/en.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/eo.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/es.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/et.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/fa.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/fi.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/fr.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/gu.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/he.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/hi.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/hr.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/hu.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/it.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ja.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ku.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/lt.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/lv.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/mk.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/mn.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/nb.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/nl.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/no.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/pl.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt-br.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/pt.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ro.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ru.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/sk.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/sl.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/sv.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/tr.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/ug.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/uk.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/vi.js create mode 100644 rt/share/static/RichText/plugins/a11yhelp/dialogs/lang/zh-cn.js create mode 100644 rt/share/static/RichText/plugins/about/dialogs/about.js create mode 100644 rt/share/static/RichText/plugins/clipboard/dialogs/paste.js create mode 100644 rt/share/static/RichText/plugins/colordialog/dialogs/colordialog.js create mode 100644 rt/share/static/RichText/plugins/dialog/dialogDefinition.js create mode 100644 rt/share/static/RichText/plugins/div/dialogs/div.js create mode 100644 rt/share/static/RichText/plugins/find/dialogs/find.js create mode 100644 rt/share/static/RichText/plugins/flash/dialogs/flash.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/button.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/checkbox.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/form.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/hiddenfield.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/radio.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/select.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/textarea.js create mode 100644 rt/share/static/RichText/plugins/forms/dialogs/textfield.js create mode 100644 rt/share/static/RichText/plugins/iframe/dialogs/iframe.js create mode 100644 rt/share/static/RichText/plugins/image/dialogs/image.js create mode 100644 rt/share/static/RichText/plugins/link/dialogs/anchor.js create mode 100644 rt/share/static/RichText/plugins/link/dialogs/link.js create mode 100644 rt/share/static/RichText/plugins/liststyle/dialogs/liststyle.js create mode 100644 rt/share/static/RichText/plugins/pastefromword/filter/default.js create mode 100644 rt/share/static/RichText/plugins/preview/preview.html create mode 100644 rt/share/static/RichText/plugins/scayt/LICENSE.md create mode 100644 rt/share/static/RichText/plugins/scayt/README.md create mode 100644 rt/share/static/RichText/plugins/scayt/dialogs/options.js create mode 100644 rt/share/static/RichText/plugins/scayt/dialogs/toolbar.css create mode 100644 rt/share/static/RichText/plugins/smiley/dialogs/smiley.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/_translationstatus.txt create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/ca.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/cs.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/cy.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/de.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/el.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/en.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/eo.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/et.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/fa.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/fi.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/fr.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/he.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/hr.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/it.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/ku.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/lv.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/nb.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/nl.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/no.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/pt-br.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/sk.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/sv.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/tr.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/ug.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/lang/zh-cn.js create mode 100644 rt/share/static/RichText/plugins/specialchar/dialogs/specialchar.js create mode 100644 rt/share/static/RichText/plugins/table/dialogs/table.js create mode 100644 rt/share/static/RichText/plugins/tabletools/dialogs/tableCell.js create mode 100644 rt/share/static/RichText/plugins/templates/dialogs/templates.css create mode 100644 rt/share/static/RichText/plugins/templates/dialogs/templates.js create mode 100644 rt/share/static/RichText/plugins/templates/templates/default.js create mode 100644 rt/share/static/RichText/plugins/wsc/LICENSE.md create mode 100644 rt/share/static/RichText/plugins/wsc/README.md create mode 100644 rt/share/static/RichText/plugins/wsc/dialogs/ciframe.html create mode 100644 rt/share/static/RichText/plugins/wsc/dialogs/tmpFrameset.html create mode 100644 rt/share/static/RichText/plugins/wsc/dialogs/wsc.css create mode 100644 rt/share/static/RichText/plugins/wsc/dialogs/wsc.js create mode 100644 rt/share/static/RichText/skins/kama/dialog.css create mode 100644 rt/share/static/RichText/skins/kama/dialog_ie.css create mode 100644 rt/share/static/RichText/skins/kama/dialog_ie7.css create mode 100644 rt/share/static/RichText/skins/kama/dialog_ie8.css create mode 100644 rt/share/static/RichText/skins/kama/dialog_iequirks.css create mode 100644 rt/share/static/RichText/skins/kama/dialog_opera.css create mode 100644 rt/share/static/RichText/skins/kama/editor.css create mode 100644 rt/share/static/RichText/skins/kama/editor_ie.css create mode 100644 rt/share/static/RichText/skins/kama/editor_ie7.css create mode 100644 rt/share/static/RichText/skins/kama/editor_ie8.css create mode 100644 rt/share/static/RichText/skins/kama/editor_iequirks.css create mode 100644 rt/share/static/RichText/skins/kama/readme.md create mode 100644 rt/share/static/RichText/styles.js create mode 100644 rt/share/static/css/aileron/base.css create mode 100644 rt/share/static/css/aileron/boxes.css create mode 100644 rt/share/static/css/aileron/forms.css create mode 100644 rt/share/static/css/aileron/layout.css create mode 100644 rt/share/static/css/aileron/login.css create mode 100644 rt/share/static/css/aileron/main.css create mode 100644 rt/share/static/css/aileron/misc.css create mode 100644 rt/share/static/css/aileron/msie.css create mode 100644 rt/share/static/css/aileron/msie6.css create mode 100644 rt/share/static/css/aileron/nav.css create mode 100644 rt/share/static/css/aileron/ticket-lists.css create mode 100644 rt/share/static/css/aileron/ticket-search.css create mode 100644 rt/share/static/css/aileron/ticket.css create mode 100644 rt/share/static/css/ballard/base.css create mode 100644 rt/share/static/css/ballard/boxes.css create mode 100644 rt/share/static/css/ballard/layout.css create mode 100644 rt/share/static/css/ballard/main.css create mode 100644 rt/share/static/css/ballard/misc.css create mode 100644 rt/share/static/css/ballard/msie.css create mode 100644 rt/share/static/css/ballard/msie6.css create mode 100644 rt/share/static/css/ballard/nav.css create mode 100644 rt/share/static/css/ballard/ticket-lists.css create mode 100644 rt/share/static/css/ballard/ticket-search.css create mode 100644 rt/share/static/css/base/accordion.css create mode 100644 rt/share/static/css/base/admin.css create mode 100644 rt/share/static/css/base/articles.css create mode 100644 rt/share/static/css/base/charts.css create mode 100644 rt/share/static/css/base/collection.css create mode 100644 rt/share/static/css/base/farbtastic.css create mode 100644 rt/share/static/css/base/forms.css create mode 100644 rt/share/static/css/base/history-folding.css create mode 100644 rt/share/static/css/base/history.css create mode 100644 rt/share/static/css/base/jquery-ui-timepicker-addon.css create mode 100644 rt/share/static/css/base/jquery-ui.css create mode 100644 rt/share/static/css/base/jquery-ui.custom.modified.css create mode 100644 rt/share/static/css/base/jquery.modal.css create mode 100644 rt/share/static/css/base/login.css create mode 100644 rt/share/static/css/base/main.css create mode 100644 rt/share/static/css/base/misc.css create mode 100644 rt/share/static/css/base/msie6.css create mode 100644 rt/share/static/css/base/nav.css create mode 100644 rt/share/static/css/base/portlets.css create mode 100644 rt/share/static/css/base/print.css create mode 100644 rt/share/static/css/base/record.css create mode 100644 rt/share/static/css/base/rights-editor.css create mode 100644 rt/share/static/css/base/superfish-navbar.css create mode 100644 rt/share/static/css/base/superfish-vertical.css create mode 100644 rt/share/static/css/base/superfish.css create mode 100644 rt/share/static/css/base/tablesorter.css create mode 100644 rt/share/static/css/base/theme-editor.css create mode 100644 rt/share/static/css/base/ticket-form.css create mode 100644 rt/share/static/css/base/ticket.css create mode 100644 rt/share/static/css/base/tools.css create mode 100644 rt/share/static/css/base/yui-fonts.css create mode 100644 rt/share/static/css/freeside3/InHeader create mode 100644 rt/share/static/css/freeside3/base.css create mode 100644 rt/share/static/css/freeside3/boxes.css create mode 100644 rt/share/static/css/freeside3/forms.css create mode 100644 rt/share/static/css/freeside3/freeside.css create mode 100644 rt/share/static/css/freeside3/images/dhandler create mode 100644 rt/share/static/css/freeside3/layout.css create mode 100644 rt/share/static/css/freeside3/login.css create mode 100644 rt/share/static/css/freeside3/main.css create mode 100644 rt/share/static/css/freeside3/misc.css create mode 100644 rt/share/static/css/freeside3/msie-pie.css create mode 100644 rt/share/static/css/freeside3/msie.css create mode 100644 rt/share/static/css/freeside3/msie6.css create mode 100644 rt/share/static/css/freeside3/nav.css create mode 100644 rt/share/static/css/freeside3/ticket-lists.css create mode 100644 rt/share/static/css/freeside3/ticket-search.css create mode 100644 rt/share/static/css/freeside3/ticket.css create mode 100644 rt/share/static/css/freeside4/admin.css create mode 100644 rt/share/static/css/freeside4/base.css create mode 100644 rt/share/static/css/freeside4/boxes.css create mode 100644 rt/share/static/css/freeside4/dashboards.css create mode 100644 rt/share/static/css/freeside4/forms.css create mode 100644 rt/share/static/css/freeside4/history.css create mode 100644 rt/share/static/css/freeside4/layout.css create mode 100644 rt/share/static/css/freeside4/login.css create mode 100644 rt/share/static/css/freeside4/main.css create mode 100644 rt/share/static/css/freeside4/misc.css create mode 100644 rt/share/static/css/freeside4/msie.css create mode 100644 rt/share/static/css/freeside4/nav.css create mode 100644 rt/share/static/css/freeside4/ticket-forms.css create mode 100644 rt/share/static/css/freeside4/ticket-lists.css create mode 100644 rt/share/static/css/freeside4/ticket-search.css create mode 100644 rt/share/static/css/freeside4/ticket.css create mode 100644 rt/share/static/css/mobile.css create mode 100644 rt/share/static/css/rudder/admin.css create mode 100644 rt/share/static/css/rudder/base.css create mode 100644 rt/share/static/css/rudder/boxes.css create mode 100644 rt/share/static/css/rudder/dashboards.css create mode 100644 rt/share/static/css/rudder/forms.css create mode 100644 rt/share/static/css/rudder/history.css create mode 100644 rt/share/static/css/rudder/layout.css create mode 100644 rt/share/static/css/rudder/login.css create mode 100644 rt/share/static/css/rudder/main.css create mode 100644 rt/share/static/css/rudder/misc.css create mode 100644 rt/share/static/css/rudder/msie.css create mode 100644 rt/share/static/css/rudder/nav.css create mode 100644 rt/share/static/css/rudder/ticket-forms.css create mode 100644 rt/share/static/css/rudder/ticket-lists.css create mode 100644 rt/share/static/css/rudder/ticket-search.css create mode 100644 rt/share/static/css/rudder/ticket.css create mode 100644 rt/share/static/css/web2/base.css create mode 100644 rt/share/static/css/web2/boxes.css create mode 100644 rt/share/static/css/web2/layout.css create mode 100644 rt/share/static/css/web2/main.css create mode 100644 rt/share/static/css/web2/misc.css create mode 100644 rt/share/static/css/web2/msie.css create mode 100644 rt/share/static/css/web2/msie6.css create mode 100644 rt/share/static/css/web2/nav.css create mode 100644 rt/share/static/css/web2/ticket-lists.css create mode 100644 rt/share/static/css/web2/ticket-search.css create mode 100644 rt/share/static/images/test.png create mode 100644 rt/share/static/js/autocomplete.js create mode 100644 rt/share/static/js/cascaded.js create mode 100644 rt/share/static/js/combobox.js create mode 100644 rt/share/static/js/event-registration.js create mode 100644 rt/share/static/js/farbtastic.js create mode 100644 rt/share/static/js/forms.js create mode 100644 rt/share/static/js/history-folding.js create mode 100644 rt/share/static/js/i18n.js create mode 100644 rt/share/static/js/jquery-1.9.1.min.js create mode 100644 rt/share/static/js/jquery-ui-1.10.0.custom.min.js create mode 100644 rt/share/static/js/jquery-ui-patch-datepicker.js create mode 100644 rt/share/static/js/jquery-ui-timepicker-addon.js create mode 100644 rt/share/static/js/jquery.cookie.js create mode 100644 rt/share/static/js/jquery.event.hover-1.0.js create mode 100644 rt/share/static/js/jquery.modal-defaults.js create mode 100644 rt/share/static/js/jquery.modal.min.js create mode 100644 rt/share/static/js/jquery.supposition.js create mode 100644 rt/share/static/js/jquery.tablesorter.min.js create mode 100644 rt/share/static/js/jquery_noconflict.js create mode 100644 rt/share/static/js/late.js create mode 100644 rt/share/static/js/superfish.js create mode 100644 rt/share/static/js/supersubs.js create mode 100644 rt/share/static/js/titlebox-state.js create mode 100644 rt/share/static/js/util.js create mode 100644 rt/t/api/db_indexes.t create mode 100644 rt/t/api/i18n_mime_encoding.t create mode 100644 rt/t/api/initialdata.t create mode 100644 rt/t/api/reminder-permissions.t create mode 100644 rt/t/api/system-available-rights.t create mode 100644 rt/t/api/user-prefs.t create mode 100644 rt/t/articles/set-subject.t create mode 100644 rt/t/charts/basics.t create mode 100644 rt/t/charts/compound-sql-function.t create mode 100644 rt/t/charts/group-by-cf.t create mode 100644 rt/t/crypt/gnupg/attachments-in-db.t create mode 100644 rt/t/crypt/no-signer-address.t create mode 100644 rt/t/crypt/smime/attachments-in-db.t create mode 100644 rt/t/crypt/smime/bad-recipients.t create mode 100644 rt/t/crypt/smime/status-string.t create mode 100644 rt/t/customfields/transaction_searching.t create mode 100644 rt/t/data/initialdata/initialdata create mode 100644 rt/t/data/initialdata/transaction-cfs create mode 100644 rt/t/data/plugins/RT-Extension-PSGIWrap/lib/RT/Extension/PSGIWrap.pm create mode 100644 rt/t/data/smime/keys/demoCA/cacert.pem create mode 100644 rt/t/data/smime/keys/demoCA/private/cakey.pem create mode 100644 rt/t/data/smime/keys/demoCA/serial create mode 100644 rt/t/data/smime/keys/otherCA/cacert.pem create mode 100644 rt/t/data/smime/keys/otherCA/private/cakey.pem create mode 100644 rt/t/data/smime/keys/otherCA/serial create mode 100644 rt/t/data/smime/keys/root@example.com.crt create mode 100644 rt/t/data/smime/keys/root@example.com.csr create mode 100644 rt/t/data/smime/keys/root@example.com.key create mode 100644 rt/t/data/smime/keys/root@example.com.pem create mode 100644 rt/t/data/smime/keys/sender@example.com.crt create mode 100644 rt/t/data/smime/keys/sender@example.com.csr create mode 100644 rt/t/data/smime/keys/sender@example.com.key create mode 100644 rt/t/data/smime/keys/sender@example.com.pem create mode 100644 rt/t/data/smime/mails/1-signed.eml create mode 100644 rt/t/data/smime/mails/2-signed-attachment.eml create mode 100644 rt/t/data/smime/mails/3-signed-binary.eml create mode 100644 rt/t/data/smime/mails/4-encrypted-plain.eml create mode 100644 rt/t/data/smime/mails/5-encrypted-attachment.eml create mode 100644 rt/t/data/smime/mails/6-encrypted-binary.eml create mode 100644 rt/t/data/smime/mails/7-signed-encrypted-plain.eml create mode 100644 rt/t/data/smime/mails/8-signed-encrypted-attachment.eml create mode 100644 rt/t/data/smime/mails/9-signed-encrypted-binary.eml create mode 100644 rt/t/fts/indexed_sphinx.t create mode 100644 rt/t/lifecycles/types.t create mode 100644 rt/t/mail/autogenerated.t create mode 100644 rt/t/mail/charsets-outgoing-plaintext.t create mode 100644 rt/t/mail/gnupg-outgoing-encrypted-plaintext.t create mode 100644 rt/t/mail/gnupg-outgoing-plain-plaintext.t create mode 100644 rt/t/mail/gnupg-outgoing-signed-plaintext.t create mode 100644 rt/t/mail/gnupg-outgoing-signed_encrypted-plaintext.t create mode 100644 rt/t/mail/html-outgoing.t create mode 100644 rt/t/mail/sendmail-plaintext.t create mode 100644 rt/t/mail/smime/incoming.t create mode 100644 rt/t/mail/smime/other-signed.t create mode 100644 rt/t/mail/smime/outgoing.t create mode 100644 rt/t/mail/smime/realmail.t create mode 100644 rt/t/mail/smime/reject_on_unencrypted.t delete mode 100644 rt/t/shredder/utils.pl create mode 100644 rt/t/ticket/circular_links.t delete mode 100644 rt/t/ticket/googleish_search.t create mode 100644 rt/t/ticket/search_by_watcher_group.t create mode 100644 rt/t/ticket/simple_search.t create mode 100644 rt/t/ticket/time-worked.t create mode 100644 rt/t/web/attachment_dropping.t create mode 100644 rt/t/web/attachment_truncation.t create mode 100644 rt/t/web/basic_auth.t create mode 100644 rt/t/web/cf_groupings.t create mode 100644 rt/t/web/cf_groupings_user.t create mode 100644 rt/t/web/cf_image.t create mode 100644 rt/t/web/cf_pattern.t create mode 100644 rt/t/web/cf_textarea.t create mode 100644 rt/t/web/dashboards-in-menu.t delete mode 100644 rt/t/web/googleish_search.t delete mode 100644 rt/t/web/html/Callbacks/logout.t/NoAuth/Logout.html/Default create mode 100644 rt/t/web/html/Callbacks/logout.t/NoAuth/Logout.html/ModifyLoginRedirect delete mode 100644 rt/t/web/html/NoAuth/js/not-by-default.js create mode 100644 rt/t/web/install.t create mode 100644 rt/t/web/language_update.t create mode 100644 rt/t/web/mobile.t delete mode 100644 rt/t/web/offline.t delete mode 100644 rt/t/web/offline_messages_utf8.t delete mode 100644 rt/t/web/offline_utf8.t create mode 100644 rt/t/web/psgi-wrap.t create mode 100644 rt/t/web/reminder-permissions.t create mode 100644 rt/t/web/rest-search-group.t create mode 100644 rt/t/web/rest-search-queue.t create mode 100644 rt/t/web/rest-search-user.t create mode 100644 rt/t/web/rest_user_cf.t delete mode 100644 rt/t/web/richtext-autohandler.t create mode 100644 rt/t/web/search_ical.t create mode 100644 rt/t/web/simple_search.t create mode 100644 rt/t/web/smime/outgoing.t create mode 100644 rt/t/web/static/js/not-by-default.js create mode 100644 rt/t/web/ticket_preserve_basics.t diff --git a/rt/.perlcriticrc b/rt/.perlcriticrc index 9cf8f633f..14246309a 100644 --- a/rt/.perlcriticrc +++ b/rt/.perlcriticrc @@ -4,3 +4,23 @@ exclude = Subroutines::ProhibitExplicitReturnUndef Modules::RequireFilenameMatchesPackage TestingAndDebugging::ProhibitNoStrict color = 1 verbose = 7 + + +# we don't unpack @_ right away as we mostly use named vars with defaults: +# sub foo { +# my $self = shift; +# my %args = ( default => 'value', ..., @_ ); +# ... +[-Subroutines::RequireArgUnpacking] + +# Readonly superiority is not convincing, especially considering +# that 'use constant' participates in constants folding during +# compilation +[-ValuesAndExpressions::ProhibitConstantPragma] + +# brutal +[BuiltinFunctions::RequireBlockGrep] +severity = 1 + +[BuiltinFunctions::RequireBlockMap] +severity = 1 diff --git a/rt/Makefile.in b/rt/Makefile.in index 8d109f371..9034a9393 100644 --- a/rt/Makefile.in +++ b/rt/Makefile.in @@ -86,10 +86,6 @@ LIBS_GROUP = @LIBS_GROUP@ WEB_USER = @WEB_USER@ WEB_GROUP = @WEB_GROUP@ - -APACHECTL = @APACHECTL@ - - # DESTDIR allows you to specify that RT be installed somewhere other than # where it will eventually reside. DESTDIR _must_ have a trailing slash # if it's defined. @@ -108,11 +104,13 @@ RT_VAR_PATH = @RT_VAR_PATH_R@ RT_DOC_PATH = @RT_DOC_PATH_R@ RT_FONT_PATH = @RT_FONT_PATH_R@ RT_LEXICON_PATH = @RT_LEXICON_PATH_R@ +RT_STATIC_PATH = @RT_STATIC_PATH_R@ RT_LOCAL_PATH = @RT_LOCAL_PATH_R@ LOCAL_PLUGIN_PATH = @RT_LOCAL_PATH_R@/plugins LOCAL_ETC_PATH = @LOCAL_ETC_PATH_R@ LOCAL_LIB_PATH = @LOCAL_LIB_PATH_R@ LOCAL_LEXICON_PATH = @LOCAL_LEXICON_PATH_R@ +LOCAL_STATIC_PATH = @LOCAL_STATIC_PATH_R@ MASON_HTML_PATH = @MASON_HTML_PATH_R@ MASON_LOCAL_HTML_PATH = @MASON_LOCAL_HTML_PATH_R@ MASON_DATA_PATH = @MASON_DATA_PATH_R@ @@ -147,7 +145,9 @@ SYSTEM_BINARIES = rt-attributes-viewer \ rt-email-digest \ rt-email-group-admin \ rt-fulltext-indexer \ + rt-importer \ rt-preferences-viewer \ + rt-serializer \ rt-server \ rt-session-viewer \ rt-server.fcgi \ @@ -223,7 +223,7 @@ DB_RT_PASS = @DB_RT_PASS@ -TEST_FILES = t/*.t t/*/*.t +TEST_FILES = t/*.t t/*/*.t t/*/*/*.t TEST_VERBOSE = 0 RT_TEST_PARALLEL_NUM ?= 5 @@ -315,15 +315,21 @@ fixperms: chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) + $(DESTDIR)$(LOCAL_LEXICON_PATH) \ + $(DESTDIR)$(RT_STATIC_PATH) \ + $(DESTDIR)$(LOCAL_STATIC_PATH) chown -R $(LIBS_OWNER) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) + $(DESTDIR)$(LOCAL_LEXICON_PATH) \ + $(DESTDIR)$(RT_STATIC_PATH) \ + $(DESTDIR)$(LOCAL_STATIC_PATH) chgrp -R $(LIBS_GROUP) $(DESTDIR)$(MASON_HTML_PATH) \ $(DESTDIR)$(MASON_LOCAL_HTML_PATH) \ $(DESTDIR)$(RT_LEXICON_PATH) \ - $(DESTDIR)$(LOCAL_LEXICON_PATH) + $(DESTDIR)$(LOCAL_LEXICON_PATH) \ + $(DESTDIR)$(RT_STATIC_PATH) \ + $(DESTDIR)$(LOCAL_STATIC_PATH) # Make the web ui's data dir writable chmod 0770 $(DESTDIR)$(MASON_DATA_PATH) \ @@ -337,6 +343,7 @@ dirs: $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH) $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache $(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc @@ -348,10 +355,16 @@ dirs: $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH) $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH) + $(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_STATIC_PATH) + +clean-mason-cache: + rm -rf $(DESTDIR)$(MASON_DATA_PATH)/cache/* + rm -rf $(DESTDIR)$(MASON_DATA_PATH)/etc/* + rm -rf $(DESTDIR)$(MASON_DATA_PATH)/obj/* install: testdeps config-install dirs files-install fixperms instruct -files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install +files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install static-install config-install: @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH) @@ -404,6 +417,7 @@ html-install: @COMMENT_INPLACE_LAYOUT@ -( cd share/html && find . -type f -print ) | while read file ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done +@COMMENT_INPLACE_LAYOUT@ $(MAKE) clean-mason-cache font-install: @COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_FONT_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH) @@ -418,6 +432,14 @@ po-install: @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/po/$$file" "$(DESTDIR)$(RT_LEXICON_PATH)/$$file" ; \ @COMMENT_INPLACE_LAYOUT@ done +static-install: +@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_STATIC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_STATIC_PATH) +@COMMENT_INPLACE_LAYOUT@ -( cd share/static && find . -type d -print ) | while read dir ; do \ +@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_STATIC_PATH)/$$dir" ; \ +@COMMENT_INPLACE_LAYOUT@ done +@COMMENT_INPLACE_LAYOUT@ -( cd share/static && find . -type f -print ) | while read file ; do \ +@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "share/static/$$file" "$(DESTDIR)$(RT_STATIC_PATH)/$$file" ; \ +@COMMENT_INPLACE_LAYOUT@ done doc-install: @@ -469,20 +491,12 @@ regenerate-catalogs: license-tag: $(PERL) devel/tools/license_tag -factory: initialize-database - cd lib; $(PERL) ../devel/tools/factory $(DB_DATABASE) RT - start-httpd: $(PERL) sbin/standalone_httpd & start-server: $(PERL) sbin/rt-server & -apachectl: - $(APACHECTL) stop - sleep 10 - $(APACHECTL) start - sleep 5 SNAPSHOT=$(shell git describe --tags) THIRD_PARTY=devel/third-party/ @@ -504,7 +518,7 @@ build-snapshot: rm -fr "$(SNAPSHOT)/" clearsign-snapshot: - gpg --no-armor --detach-sign "$(SNAPSHOT).tar.gz" + gpg --armor --detach-sign "$(SNAPSHOT).tar.gz" build-third-party: git archive --prefix "$(SNAPSHOT)/$(THIRD_PARTY)" HEAD:$(THIRD_PARTY) \ @@ -512,7 +526,7 @@ build-third-party: rm -rf "$(SNAPSHOT)/$(THIRD_PARTY)" clearsign-third-party: - gpg --no-armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz" + gpg --armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz" snapshot-shasums: sha1sum $(SNAPSHOT)*.tar.gz* @@ -530,8 +544,8 @@ vessel-import: build-snapshot --skip cpan-capitalization,cpan-mod_perl,cpan-Encode,cpan-PPI,cpan-Test-Exception-LessClever,cpan-Test-Manifest,cpan-Test-Object,cpan-Test-Pod,cpan-Test-Requires,cpan-Test-SubCalls,cpan-Test-cpan-Tester,cpan-Test-Warn --skip-all-recommends mv $(VESSEL)/scripts/RT/build $(VESSEL)/scripts/RT/build.pl -JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2011-01-22.c -JSMIN_SHA = 8a6b3b980a52c028eb73aee4a82ebe060c1ee854 +JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2013-03-29.c +JSMIN_SHA = 67dc8d73a8878f88cdaeb1a86775872eae5c3077 jsmin: jsmin-checkcc jsmin-fetch jsmin-verify jsmin-confirm jsmin-build jsmin-install @echo "" diff --git a/rt/README b/rt/README index 5a4b92386..bdd8e0928 100755 --- a/rt/README +++ b/rt/README @@ -14,21 +14,21 @@ us at . REQUIRED PACKAGES ----------------- -o Perl 5.8.3 or later (http://www.perl.org). +o Perl 5.10.1 or later (http://www.perl.org). - Perl versions prior to 5.8.3 contain bugs that could result in - data corruption. RT won't start on older versions. + RT won't start on versions of Perl older than 5.10.1. o A supported SQL database - Currently supported: MySQL 4.1 or later with InnoDB support. - Postgres 8.1 or later. + Currently supported: MySQL 5.1 or later with InnoDB support. + Postgres 8.4 or later; 9.0 or later suggested Oracle 9iR2 or later. - SQLite 3.0. (Not recommended for production) + SQLite 3.0 or later; for testing only, no + upgrade path guaranteed o Apache version 1.3.x or 2.x (http://httpd.apache.org) with mod_perl -- (http://perl.apache.org) - or with FastCGI -- (www.fastcgi.com) + or with FastCGI -- (http://www.fastcgi.com) or other webserver with FastCGI support RT's FastCGI handler needs to access RT's configuration file. @@ -66,10 +66,10 @@ GENERAL INSTALLATION If you are upgrading from a previous version of RT, please review the upgrade notes for the appropriate versions, which can be found - in docs/UPGRADING-* If you are coming from 3.8.6 to 4.0.x you should - review both the UPGRADING-3.8 and UPGRADING-4.0 file. Similarly, if - you were coming from 3.6.7, you would want to review UPGRADING-3.6, - UPGRADING-3.8 and UPGRADING-4.0 + in docs/UPGRADING-* If you are coming from 4.0.x to 4.2.x you should + review both the UPGRADING-4.0 and UPGRADING-4.2 file. Similarly, if + you were coming from 3.8.x, you would want to review UPGRADING-3.8, + UPGRADING-4.0 and UPGRADING-4.2 Any upgrade steps given in version-specific UPGRADING files should be run after the rest of the steps below; however, please read the @@ -94,18 +94,9 @@ GENERAL INSTALLATION Some modules require user input or environment variables to install correctly, so it may be necessary to install them manually. - If you are installing with CPAN module older than 1.84, you will - need to start CPAN (by running perl -MCPAN -e shell) and upgrade the - CPAN shell with: - - install CPAN - - If you are unsure of your CPAN version, it will be printed when you - run the shell. - - If you are having trouble installing GD or Graphviz, you should - install gd-devel and the graphviz libraries using your - distribution's package manager. + If you are having trouble installing GD, refer to "Installing GD libraries" + in docs/charts.pod. Ticket relationship graphing requires the graphviz + library which you should install using your distribution's package manager. 5) Check to make sure everything was installed properly. @@ -168,13 +159,9 @@ GENERAL INSTALLATION You should back up your database before running this command. When you run it, you will be prompted for your previous version of - RT (such as 3.6.4) so that the appropriate set of database + RT (such as 3.8.1) so that the appropriate set of database upgrades can be applied. - Finally, clear the Mason cache dir: - - rm -fr /opt/rt4/var/mason_data/obj - If 'make upgrade-database' completes without error, your upgrade has been successful; you should now run any commands that were supplied in version-specific UPGRADING documentation. You should @@ -192,7 +179,7 @@ GENERAL INSTALLATION logout for inactive sessions. For more information about how to do that, run: - perldoc /path/to/rt/sbin/rt-clean-sessions + perldoc /opt/rt4/sbin/rt-clean-sessions 8) Set up users, groups, queues, scrips and access control. @@ -205,14 +192,12 @@ GENERAL INSTALLATION To generate email digest messages, you must arrange for the provided utility to be run once daily, and once weekly. You may also want to arrange for the rt-email-dashboards utility to be run hourly. For - example, if your task scheduler is cron, you can configure it as - follows: + example, if your task scheduler is cron, you can configure it by + adding the following lines as /etc/cron.d/rt: - crontab -e # as the RT administrator (probably root) - # insert the following lines: - 0 0 * * * /opt/rt4/sbin/rt-email-digest -m daily - 0 0 * * 0 /opt/rt4/sbin/rt-email-digest -m weekly - 0 * * * * /opt/rt4/sbin/rt-email-dashboards + 0 0 * * * root /opt/rt4/sbin/rt-email-digest -m daily + 0 0 * * 0 root /opt/rt4/sbin/rt-email-digest -m weekly + 0 * * * * root /opt/rt4/sbin/rt-email-dashboards 10) Configure the RT email gateway. To let email flow to your RT server, you need to add a few lines of configuration to your mail @@ -231,13 +216,6 @@ GENERAL INSTALLATION perldoc /opt/rt4/bin/rt-mailgate - If your webserver uses SSL, rt-mailgate will require several new - Perl libraries. RT can detect and install these for you automatically - if you include --enable-ssl-mailgate when running configure and then - run make fixdeps as described in step 4. It is safe to rerun configure - and make fixdeps after you have installed RT, you should be sure to include - all the arguments you used in step 2 plus --enable-ssl-mailgate. - GETTING HELP ------------ diff --git a/rt/aclocal.m4 b/rt/aclocal.m4 index d427e1356..793644f12 100644 --- a/rt/aclocal.m4 +++ b/rt/aclocal.m4 @@ -91,9 +91,9 @@ AC_DEFUN([RT_LAYOUT],[ changequote({,}) for var in prefix exec_prefix bindir sbindir \ sysconfdir mandir libdir datadir htmldir fontdir\ - lexdir localstatedir logfiledir masonstatedir \ + lexdir staticdir localstatedir logfiledir masonstatedir \ sessionstatedir customdir custometcdir customhtmldir \ - customlexdir customplugindir customlibdir manualdir; do + customlexdir customstaticdir customplugindir customlibdir manualdir; do eval "val=\"\$$var\"" val=`echo $val | sed -e 's:\(.\)/*$:\1:'` val=`echo $val | @@ -114,6 +114,7 @@ AC_DEFUN([RT_LAYOUT],[ RT_SUBST_EXPANDED_ARG(mandir) RT_SUBST_EXPANDED_ARG(libdir) RT_SUBST_EXPANDED_ARG(lexdir) + RT_SUBST_EXPANDED_ARG(staticdir) RT_SUBST_EXPANDED_ARG(datadir) RT_SUBST_EXPANDED_ARG(htmldir) RT_SUBST_EXPANDED_ARG(fontdir) @@ -128,6 +129,7 @@ AC_DEFUN([RT_LAYOUT],[ RT_SUBST_EXPANDED_ARG(customplugindir) RT_SUBST_EXPANDED_ARG(customhtmldir) RT_SUBST_EXPANDED_ARG(customlexdir) + RT_SUBST_EXPANDED_ARG(customstaticdir) RT_SUBST_EXPANDED_ARG(customlibdir) ])dnl diff --git a/rt/bin/rt b/rt/bin/rt index 6d46c346c..9c0ed8dc8 100755 --- a/rt/bin/rt +++ b/rt/bin/rt @@ -70,16 +70,6 @@ use Term::ReadLine; use Time::Local; # used in prettyshow use File::Temp; -# strong (GSSAPI based) authentication is supported if the server does provide -# it and the perl modules GSSAPI and LWP::Authen::Negotiate are installed -# it can be suppressed by setting externalauth=0 (default is undef) -eval { require GSSAPI }; -my $no_strong_auth = 'missing perl module GSSAPI'; -if ( ! $@ ) { - eval {require LWP::Authen::Negotiate}; - $no_strong_auth = $@ ? 'missing perl module LWP::Authen::Negotiate' : 0; -} - # We derive configuration information from hardwired defaults, dotfiles, # and the RT* environment variables (in increasing order of precedence). # Session information is stored in ~/.rt_sessions. @@ -99,18 +89,16 @@ my %config = ( queue => undef, # to protect against unlimited searches a better choice would be # queue => 'Unknown_Queue', -# setting externalauth => undef will try GSSAPI auth if the corresponding perl -# modules are installed, externalauth => 0 is the backward compatible choice - externalauth => 0, + auth => "rt", ), config_from_file($ENV{RTCONFIG} || ".rtrc"), config_from_env() ); + +$config{auth} = "basic" if delete $config{externalauth}; + my $session = Session->new("$HOME/.rt_sessions"); my $REST = "$config{server}/REST/1.0"; -$no_strong_auth = 'switched off by externalauth=0' - if defined $config{externalauth}; - my $prompt = 'rt> '; @@ -330,32 +318,53 @@ sub list { $data{orderby} =~ s/^\+?(.*)/-$1/; } - if (!defined $q) { - $q = $config{query}; + $type ||= "ticket"; + + if (!defined $q ) { + if ( $type eq 'ticket' ) { + $q = $config{query}; + } + else { + $q = ''; + } } - - $q =~ s/^#//; # get rid of leading hash - if ($q =~ /^\d+$/) { - # only digits, must be an id, formulate a correct query - $q = "id=$q" if $q =~ /^\d+$/; - } else { - # a string only, take it as an owner or requestor (quoting done later) - $q = "(Owner=$q or Requestor like $q) and $config{query}" - if $q =~ /^[\w\-]+$/; - # always add a query for a specific queue or (comma separated) queues - $queue =~ s/,/ or Queue=/g if $queue; - $q .= " and (Queue=$queue)" if $queue and $q and $q !~ /Queue\s*=/i - and $q !~ /id\s*=/i; + + if ( $type ne 'ticket' ) { + $rawprint = 1; } - # correctly quote strings in a query - $q =~ s/(=|like\s)\s*([^'\d\s]\S*)\b/$1\'$2\'/g; - $type ||= "ticket"; - unless ($type && defined $q) { + unless (defined $q) { my $item = $type ? "query string" : "object type"; whine "No $item specified."; $bad = 1; } + + $q =~ s/^#//; # get rid of leading hash + if ( $type eq 'ticket' ) { + if ( $q =~ /^\d+$/ ) { + + # only digits, must be an id, formulate a correct query + $q = "id=$q" if $q =~ /^\d+$/; + } + else { + + # a string only, take it as an owner or requestor (quoting done later) + $q = "(Owner=$q or Requestor like $q) and $config{query}" + if $q =~ /^[\w\-]+$/; + + # always add a query for a specific queue or (comma separated) queues + $queue =~ s/,/ or Queue=/g if $queue; + $q .= " and (Queue=$queue)" + if $queue + and $q + and $q !~ /Queue\s*=/i + and $q !~ /id\s*=/i; + } + + # correctly quote strings in a query + $q =~ s/(=|like\s)\s*([^'\d\s]\S*)\b/$1\'$2\'/g; + } + #return help("list", $type) if $bad; return suggest_help("list", $type, $bad) if $bad; @@ -772,6 +781,7 @@ sub comment { my ($action) = @_; my (%data, $id, @files, @bcc, @cc, $msg, $content_type, $wtime, $edit); my $bad = 0; + my $status = ''; while (@ARGV) { $_ = shift @ARGV; @@ -779,7 +789,7 @@ sub comment { if (/^-e$/) { $edit = 1; } - elsif (/^-(?:[abcmw]|ct)$/) { + elsif (/^-(?:[abcmws]|ct)$/) { unless (@ARGV) { whine "No argument specified with $_."; $bad = 1; last; @@ -795,6 +805,9 @@ sub comment { elsif (/-ct/) { $content_type = shift @ARGV; } + elsif (/-s/) { + $status = shift @ARGV; + } elsif (/-([bc])/) { my $a = $_ eq "-b" ? \@bcc : \@cc; @$a = split /\s*,\s*/, shift @ARGV; @@ -837,9 +850,12 @@ sub comment { TimeWorked => $wtime || '', 'Content-Type' => $content_type || 'text/plain', Text => $msg || '', - Status => '' + Status => $status } ]; + if ($status ne '') { + push(@{$form->[1]}, "Status"); + } my $text = Form::compose([ $form ]); @@ -1036,20 +1052,23 @@ sub submit { # Should we send authentication information to start a new session? my $how = $config{server} =~ /^https/ ? 'over SSL' : 'unencrypted'; my($server) = $config{server} =~ m{^.*//([^/]+)}; - if ($config{externalauth}) { + + if ($config{auth} eq "gssapi") { + die "GSSAPI support not available; failed to load perl module GSSAPI:\n$@\n" + unless eval { require GSSAPI; 1 }; + die "GSSAPI support not available; failed to load perl module LWP::Authen::Negotiate:\n$@\n" + unless eval { require LWP::Authen::Negotiate; 1 }; + } elsif ($config{auth} eq "basic") { + print " Password will be sent to $server $how\n", + " Press CTRL-C now if you do not want to continue\n" + if ! $config{passwd}; $h->authorization_basic($config{user}, $config{passwd} || read_passwd() ); + } elsif ( !defined $session->cookie ) { print " Password will be sent to $server $how\n", " Press CTRL-C now if you do not want to continue\n" if ! $config{passwd}; - } elsif ( $no_strong_auth ) { - if (!defined $session->cookie) { - print " Strong encryption not available, $no_strong_auth\n", - " Password will be sent to $server $how\n", - " Press CTRL-C now if you do not want to continue\n" - if ! $config{passwd}; - push @$data, ( user => $config{user} ); - push @$data, ( pass => $config{passwd} || read_passwd() ); - } + push @$data, ( user => $config{user} ); + push @$data, ( pass => $config{passwd} || read_passwd() ); } # Now, we construct the request. @@ -1060,9 +1079,7 @@ sub submit { $req = GET($uri); } $session->add_cookie_header($req); - if ($config{externalauth}) { - $req->header(%$h); - } + $req->header(%$h) if %$h; # Then we send the request and parse the response. DEBUG(3, $req->as_string); @@ -1400,7 +1417,7 @@ sub Form::compose { sub config_from_env { my %env; - foreach my $k (qw(EXTERNALAUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) { + foreach my $k (qw(EXTERNALAUTH AUTH DEBUG USER PASSWD SERVER QUERY ORDERBY)) { if (exists $ENV{"RT$k"}) { $env{lc $k} = $ENV{"RT$k"}; @@ -1454,7 +1471,7 @@ sub parse_config_file { chomp; next if (/^#/ || /^\s*$/); - if (/^(externalauth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) { + if (/^(externalauth|auth|user|passwd|server|query|orderby|queue)\s+(.*)\s?$/) { $cfg{$1} = $2; } else { @@ -1563,49 +1580,56 @@ sub vpush { } } +# WARNING: this code is duplicated in lib/RT/Interface/REST.pm +# If you change one, change both functions at once # "Normalise" a hash key that's known to be multi-valued. sub vsplit { - my ($val) = @_; - my ($word, @words); - my @values = ref $val eq 'ARRAY' ? @$val : $val; - - foreach my $line (map {split /\n/} @values) { - # XXX: This should become a real parser, à la Text::ParseWords. - $line =~ s/^\s+//; - $line =~ s/\s+$//; - my ( $a, $b ) = split /\s*,\s*/, $line, 2; - - while ($a) { - no warnings 'uninitialized'; - if ( $a =~ /^'/ ) { - my $s = $a; - while ( $a !~ /'$/ || ( $a !~ /(\\\\)+'$/ - && $a =~ /(\\)+'$/ )) { - ( $a, $b ) = split /\s*,\s*/, $b, 2; - $s .= ',' . $a; - } - push @words, $s; - } - elsif ( $a =~ /^q\{/ ) { - my $s = $a; - while ( $a !~ /\}$/ ) { - ( $a, $b ) = - split /\s*,\s*/, $b, 2; - $s .= ',' . $a; - } - $s =~ s/^q\{/'/; - $s =~ s/\}/'/; - push @words, $s; + my ($val, $strip) = @_; + my @words; + my @values = map {split /\n/} (ref $val eq 'ARRAY' ? @$val : $val); + + foreach my $line (@values) { + while ($line =~ /\S/) { + $line =~ s/^ + \s* # Trim leading whitespace + (?: + (") # Quoted string + ((?>[^\\"]*(?:\\.[^\\"]*)*))" + | + (') # Single-quoted string + ((?>[^\\']*(?:\\.[^\\']*)*))' + | + q\{(.*?)\} # A perl-ish q{} string; this does + # no paren balancing, however, and + # only exists for back-compat + | + (.*?) # Anything else, until the next comma + ) + \s* # Trim trailing whitespace + (?: + \Z # Finish at end-of-line + | + , # Or a comma + ) + //xs or last; # There should be no way this match + # fails, but add a failsafe to + # prevent infinite-looping if it + # somehow does. + my ($quote, $quoted) = ($1 ? ($1, $2) : $3 ? ($3, $4) : ('', $5 || $6)); + # Only unquote the quote character, or the backslash -- and + # only if we were originally quoted.. + if ($5) { + $quoted =~ s/([\\'])/\\$1/g; + $quote = "'"; } - else { - push @words, $a; + if ($strip) { + $quoted =~ s/\\([\\$quote])/$1/g if $quote; + push @words, $quoted; + } else { + push @words, "$quote$quoted$quote"; } - ( $a, $b ) = split /\s*,\s*/, $b, 2; } - - } - return \@words; } @@ -1892,15 +1916,17 @@ Text: The following directives may occur, one per line: - - server URL to RT server. - - user RT username. - - passwd RT user's password. - - query Default RT Query for list action - - orderby Default RT order for list action - - queue Default RT Queue for list action - - externalauth <0|1> Use HTTP Basic authentication - explicitely setting externalauth to 0 inhibits also GSSAPI based - authentication, if LWP::Authen::Negotiate (and GSSAPI) is installed + - server URL to RT server. + - user RT username. + - passwd RT user's password. + - query Default RT Query for list action + - orderby Default RT order for list action + - queue Default RT Queue for list action + - auth Method to authenticate via; "basic" + means HTTP Basic authentication, "gssapi" means + Kerberos credentials, if your RT is configured + with $WebRemoteUserAuth. For backwards + compatibility, "externalauth 1" means "auth basic" Blank and #-commented lines are ignored. @@ -1919,7 +1945,7 @@ Text: - RTUSER - RTPASSWD - - RTEXTERNALAUTH + - RTAUTH - RTSERVER - RTDEBUG Numeric debug level. (Set to 3 for full logs.) - RTCONFIG Specifies a name other than ".rtrc" for the @@ -2199,13 +2225,14 @@ Text: Displays a list of objects matching the specified conditions. ("ls", "list", and "search" are synonyms.) - Conditions are expressed in the SQL-like syntax used internally by - RT. (For more information, see "rt help query".) The query string - must be supplied as one argument. + The query string must be supplied as one argument. + + if on tickets, query is in the SQL-like syntax used internally by + RT. (For more information, see "rt help query".), otherwise, query + is plain string with format "FIELD OP VALUE", e.g. "Name = General". - (Right now, the server doesn't support listing anything but tickets. - Other types will be supported in future; this client will be able to - take advantage of that support without any changes.) + if query string is absent, we limit to privileged ones on users and + user defined ones on groups automatically. Options: @@ -2236,6 +2263,9 @@ Text: rt ls -t ticket "Subject like '[PATCH]%'" rt ls -q systems rt ls -f owner,subject + rt ls -t queue 'Name = General' + rt ls -t user 'EmailAddress like foo@bar.com' + rt ls -t group 'Name like foo' -- @@ -2378,6 +2408,8 @@ Text: than once to attach multiple files.) -c A comma-separated list of Cc addresses. -b A comma-separated list of Bcc addresses. + -s Set a new status for the ticket (default will + leave the status unchanged) -w