From 7588a4ac90a9b07c08a3107cd1107d773be1c991 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Tue, 4 Jun 2013 00:16:28 -0700 Subject: [PATCH] RT 4.0.13 --- httemplate/elements/header-minimal.html | 3 + httemplate/elements/header-popup.html | 3 + httemplate/elements/header.html | 3 + rt/Makefile.in | 20 +- rt/README | 8 +- rt/bin/rt | 47 +- rt/bin/rt-crontool.in | 21 +- rt/bin/rt-mailgate.in | 2 +- rt/bin/rt.in | 47 +- rt/configure | 20 +- rt/devel/tools/change-loc-msgstr | 2 +- rt/devel/tools/extract-message-catalog | 8 +- rt/devel/tools/factory | 3 +- rt/devel/tools/license_tag | 10 +- rt/devel/tools/merge-rosetta.pl | 4 +- rt/devel/tools/rt-attributes-editor | 2 +- rt/devel/tools/tweak-template-locstring | 3 +- rt/docs/UPGRADING-3.4 | 7 + rt/docs/UPGRADING-4.0 | 47 +- rt/docs/customizing/articles_introduction.pod | 86 +- rt/docs/extending/external_custom_fields.pod | 2 +- rt/docs/hacking.pod | 4 +- rt/docs/web_deployment.pod | 5 + rt/etc/RT_Config.pm.in | 44 +- rt/etc/initialdata | 60 +- rt/etc/upgrade/3.8-branded-queues-extension.in | 2 +- rt/etc/upgrade/3.8-ical-extension.in | 2 +- rt/etc/upgrade/3.9.8/content | 2 +- rt/etc/upgrade/4.0.12/schema.Oracle | 1 + rt/etc/upgrade/4.0.12/schema.Pg | 1 + rt/etc/upgrade/4.0.12/schema.mysql | 1 + rt/etc/upgrade/4.0.13/schema.Oracle | 2 + rt/etc/upgrade/4.0.13/schema.Pg | 2 + rt/etc/upgrade/4.0.13/schema.mysql | 2 + rt/etc/upgrade/4.0.9/content | 52 + rt/etc/upgrade/generate-rtaddressregexp.in | 2 +- rt/etc/upgrade/sanity-check-stylesheets.pl | 2 +- rt/etc/upgrade/shrink_cgm_table.pl | 4 +- rt/etc/upgrade/shrink_transactions_table.pl | 4 +- 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 | 63 +- rt/lib/RT/ACE.pm | 5 +- rt/lib/RT/ACL.pm | 2 +- rt/lib/RT/Action.pm | 2 +- rt/lib/RT/Action/AutoOpen.pm | 2 +- rt/lib/RT/Action/Autoreply.pm | 4 +- rt/lib/RT/Action/CreateTickets.pm | 173 +- rt/lib/RT/Action/EscalatePriority.pm | 3 +- rt/lib/RT/Action/ExtractSubjectTag.pm | 41 +- 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 | 3 +- rt/lib/RT/Action/RecordCorrespondence.pm | 5 +- rt/lib/RT/Action/SendEmail.pm | 2 +- rt/lib/RT/Action/SetPriority.pm | 3 +- rt/lib/RT/Action/SetStatus.pm | 2 +- rt/lib/RT/Action/UserDefined.pm | 3 +- 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 | 16 +- rt/lib/RT/Articles.pm | 2 +- rt/lib/RT/Attachment.pm | 8 +- rt/lib/RT/Attachments.pm | 2 +- 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 | 6 +- rt/lib/RT/Classes.pm | 2 +- rt/lib/RT/Condition.pm | 2 +- rt/lib/RT/Condition/AnyTransaction.pm | 3 +- rt/lib/RT/Condition/BeforeDue.pm | 3 +- rt/lib/RT/Condition/CloseTicket.pm | 2 +- rt/lib/RT/Condition/Overdue.pm | 3 +- rt/lib/RT/Condition/OwnerChange.pm | 3 +- rt/lib/RT/Condition/PriorityChange.pm | 3 +- rt/lib/RT/Condition/PriorityExceeds.pm | 3 +- rt/lib/RT/Condition/QueueChange.pm | 3 +- rt/lib/RT/Condition/ReopenTicket.pm | 2 +- rt/lib/RT/Condition/StatusChange.pm | 3 +- rt/lib/RT/Condition/UserDefined.pm | 3 +- rt/lib/RT/Config.pm | 30 +- rt/lib/RT/Crypt/GnuPG.pm | 22 +- rt/lib/RT/CurrentUser.pm | 11 +- rt/lib/RT/CustomField.pm | 17 +- rt/lib/RT/CustomFieldValue.pm | 2 +- rt/lib/RT/CustomFieldValues.pm | 2 +- rt/lib/RT/CustomFieldValues/External.pm | 4 +- rt/lib/RT/CustomFieldValues/Groups.pm | 2 +- rt/lib/RT/CustomFields.pm | 2 +- rt/lib/RT/Dashboard.pm | 4 +- rt/lib/RT/Dashboard/Mailer.pm | 45 +- rt/lib/RT/Dashboards.pm | 3 +- rt/lib/RT/Date.pm | 2 +- rt/lib/RT/EmailParser.pm | 112 +- rt/lib/RT/Generated.pm | 4 +- rt/lib/RT/Generated.pm.in | 2 +- rt/lib/RT/Graph/Tickets.pm | 2 +- rt/lib/RT/Group.pm | 9 +- rt/lib/RT/GroupMember.pm | 2 +- rt/lib/RT/GroupMembers.pm | 2 +- rt/lib/RT/Groups.pm | 6 +- rt/lib/RT/Handle.pm | 37 +- rt/lib/RT/I18N.pm | 58 +- rt/lib/RT/I18N/cs.pm | 2 +- rt/lib/RT/I18N/i_default.pm | 2 +- rt/lib/RT/I18N/ru.pm | 2 +- rt/lib/RT/Installer.pm | 9 +- rt/lib/RT/Interface/CLI.pm | 5 +- rt/lib/RT/Interface/Email.pm | 45 +- rt/lib/RT/Interface/Email/Auth/GnuPG.pm | 2 +- rt/lib/RT/Interface/Email/Auth/MailFrom.pm | 9 +- rt/lib/RT/Interface/REST.pm | 5 +- rt/lib/RT/Interface/Web.pm | 236 +- rt/lib/RT/Interface/Web/Handler.pm | 44 +- rt/lib/RT/Interface/Web/Menu.pm | 57 +- rt/lib/RT/Interface/Web/QueryBuilder.pm | 2 +- rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm | 2 +- rt/lib/RT/Interface/Web/Request.pm | 23 +- rt/lib/RT/Interface/Web/Session.pm | 10 +- rt/lib/RT/Lifecycle.pm | 142 +- rt/lib/RT/Link.pm | 45 +- 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 | 6 +- rt/lib/RT/ObjectCustomFields.pm | 2 +- rt/lib/RT/ObjectTopic.pm | 15 +- rt/lib/RT/ObjectTopics.pm | 2 +- rt/lib/RT/Plugin.pm | 2 +- rt/lib/RT/Pod/HTML.pm | 104 +- rt/lib/RT/Pod/HTMLBatch.pm | 48 + rt/lib/RT/Pod/Search.pm | 48 + rt/lib/RT/Principal.pm | 2 +- rt/lib/RT/Principals.pm | 2 +- rt/lib/RT/Queue.pm | 40 +- rt/lib/RT/Queues.pm | 2 +- rt/lib/RT/Record.pm | 65 +- rt/lib/RT/Reminders.pm | 12 +- rt/lib/RT/Report/Tickets.pm | 39 +- 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 | 4 +- rt/lib/RT/SavedSearch.pm | 26 +- rt/lib/RT/SavedSearches.pm | 3 +- rt/lib/RT/Scrip.pm | 10 +- rt/lib/RT/ScripAction.pm | 2 +- rt/lib/RT/ScripActions.pm | 2 +- rt/lib/RT/ScripCondition.pm | 6 +- rt/lib/RT/ScripConditions.pm | 2 +- rt/lib/RT/Scrips.pm | 2 +- rt/lib/RT/Search.pm | 2 +- rt/lib/RT/Search/ActiveTicketsInQueue.pm | 3 +- rt/lib/RT/Search/FromSQL.pm | 3 +- rt/lib/RT/Search/Googleish.pm | 4 +- rt/lib/RT/SearchBuilder.pm | 4 +- rt/lib/RT/SharedSetting.pm | 6 +- rt/lib/RT/SharedSettings.pm | 3 +- 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 | 3 +- rt/lib/RT/Shredder/Dependency.pm | 3 +- 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 | 2 +- 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 | 6 +- rt/lib/RT/Templates.pm | 2 +- rt/lib/RT/Test.pm | 110 +- rt/lib/RT/Test/Apache.pm | 2 +- rt/lib/RT/Test/Email.pm | 2 +- rt/lib/RT/Test/GnuPG.pm | 7 +- rt/lib/RT/Test/Web.pm | 2 +- rt/lib/RT/Ticket.pm | 119 +- rt/lib/RT/Tickets.pm | 93 +- rt/lib/RT/Tickets_SQL.pm | 11 +- rt/lib/RT/Topic.pm | 2 +- rt/lib/RT/Topics.pm | 3 +- rt/lib/RT/Transaction.pm | 75 +- rt/lib/RT/Transactions.pm | 2 +- rt/lib/RT/URI.pm | 2 +- rt/lib/RT/URI/a.pm | 2 +- rt/lib/RT/URI/base.pm | 3 +- 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 | 63 +- rt/lib/RT/Users.pm | 4 +- 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 | 3 +- 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 | 13 +- rt/sbin/rt-fulltext-indexer.in | 13 +- rt/sbin/rt-message-catalog | 2 +- rt/sbin/rt-preferences-viewer.in | 2 +- rt/sbin/rt-server.fcgi.in | 3 +- rt/sbin/rt-server.in | 3 +- rt/sbin/rt-session-viewer | 2 +- rt/sbin/rt-session-viewer.in | 2 +- rt/sbin/rt-setup-database.in | 17 +- rt/sbin/rt-setup-fulltext-index | 2 +- rt/sbin/rt-setup-fulltext-index.in | 2 +- rt/sbin/rt-shredder.in | 2 +- rt/sbin/rt-test-dependencies.in | 9 +- rt/sbin/rt-validate-aliases.in | 2 +- rt/sbin/rt-validator.in | 8 +- rt/sbin/standalone_httpd | 3 +- rt/sbin/standalone_httpd.in | 3 +- .../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 | 14 +- 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 | 44 +- .../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 | 12 +- 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 | 3 +- .../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 | 16 +- rt/share/html/Admin/Global/Scrip.html | 2 +- rt/share/html/Admin/Global/Scrips.html | 2 +- rt/share/html/Admin/Global/Template.html | 7 +- 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 | 5 +- 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 | 7 +- 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 | 2 +- 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 | 4 +- .../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 | 10 +- 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 | 3 +- rt/share/html/Articles/Article/Search.html | 4 +- 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 | 5 +- 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 | 47 + 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 | 17 +- 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 | 4 +- 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 | 4 +- rt/share/html/Elements/CollectionListPaging | 2 +- rt/share/html/Elements/ColumnMap | 30 +- 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 | 4 +- rt/share/html/Elements/EditCustomFieldCombobox | 2 +- rt/share/html/Elements/EditCustomFieldDate | 6 +- 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 | 5 +- 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 | 5 +- rt/share/html/Elements/ListMenu | 2 +- rt/share/html/Elements/Login | 2 +- rt/share/html/Elements/LoginRedirectWarning | 47 + rt/share/html/Elements/Logo | 2 +- rt/share/html/Elements/MakeClicky | 21 +- rt/share/html/Elements/Menu | 9 +- 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 | 35 +- rt/share/html/Elements/QueueSummaryByStatus | 36 +- rt/share/html/Elements/QuickCreate | 2 +- 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 | 6 +- rt/share/html/Elements/RT__Dashboard/ColumnMap | 2 +- rt/share/html/Elements/RT__Group/ColumnMap | 2 +- rt/share/html/Elements/RT__Queue/ColumnMap | 3 +- 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 | 62 +- 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 | 4 +- rt/share/html/Elements/ShowCustomFieldDate | 6 +- 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 | 3 +- rt/share/html/Elements/ShowSearch | 12 +- rt/share/html/Elements/ShowUser | 2 +- rt/share/html/Elements/ShowUserConcise | 2 +- rt/share/html/Elements/ShowUserEmailFrequency | 2 +- rt/share/html/Elements/ShowUserVerbose | 7 +- rt/share/html/Elements/SimpleSearch | 2 +- rt/share/html/Elements/Submit | 2 +- rt/share/html/Elements/Tabs | 382 +- 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 | 4 +- rt/share/html/Helpers/Autocomplete/Owners | 2 +- rt/share/html/Helpers/Autocomplete/Users | 22 +- rt/share/html/Helpers/Autocomplete/autohandler | 53 + 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 | 52 + 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 | 7 +- rt/share/html/NoAuth/Logout.html | 4 +- rt/share/html/NoAuth/Reminder.html | 2 +- rt/share/html/NoAuth/RichText/autohandler | 2 +- .../html/NoAuth/RichText/ckeditor/LICENSE.html | 13 +- .../NoAuth/RichText/ckeditor/adapters/jquery.js | 6 +- rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js | 282 +- rt/share/html/NoAuth/RichText/ckeditor/config.js | 2 +- .../html/NoAuth/RichText/ckeditor/contents.css | 24 +- .../NoAuth/RichText/ckeditor/lang/_languages.js | 6 +- .../RichText/ckeditor/lang/_translationstatus.txt | 121 +- 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 | 6 +- .../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 | 8 +- .../plugins/colordialog/dialogs/colordialog.js | 8 +- .../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 | 4 +- .../ckeditor/plugins/docprops/dialogs/docprops.js | 10 + .../RichText/ckeditor/plugins/docprops/plugin.js | 6 + .../RichText/ckeditor/plugins/find/dialogs/find.js | 13 +- .../ckeditor/plugins/flash/dialogs/flash.js | 12 +- .../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 | 10 +- .../ckeditor/plugins/forms/dialogs/textarea.js | 6 +- .../ckeditor/plugins/forms/dialogs/textfield.js | 7 +- .../ckeditor/plugins/iframe/dialogs/iframe.js | 7 + .../ckeditor/plugins/iframedialog/plugin.js | 6 +- .../ckeditor/plugins/image/dialogs/image.js | 20 +- .../ckeditor/plugins/link/dialogs/anchor.js | 6 +- .../RichText/ckeditor/plugins/link/dialogs/link.js | 17 +- .../plugins/liststyle/dialogs/liststyle.js | 8 +- .../plugins/pastefromword/filter/default.js | 15 +- .../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 | 10 +- .../ckeditor/plugins/scayt/dialogs/toolbar.css | 2 +- .../ckeditor/plugins/smiley/dialogs/smiley.js | 8 +- .../plugins/specialchar/dialogs/specialchar.js | 8 +- .../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 | 4 +- .../ckeditor/plugins/stylesheetparser/plugin.js | 6 + .../ckeditor/plugins/table/dialogs/table.js | 12 +- .../ckeditor/plugins/tableresize/plugin.js | 8 +- .../plugins/tabletools/dialogs/tableCell.js | 10 +- .../plugins/templates/dialogs/templates.js | 8 +- .../plugins/templates/templates/default.js | 4 +- .../ckeditor/plugins/uicolor/dialogs/uicolor.js | 4 +- .../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 | 4 +- .../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 | 2 +- .../RichText/ckeditor/plugins/uicolor/yui/yui.js | 4 +- .../ckeditor/plugins/wsc/dialogs/ciframe.html | 2 +- .../ckeditor/plugins/wsc/dialogs/tmpFrameset.html | 2 +- .../RichText/ckeditor/plugins/wsc/dialogs/wsc.css | 2 +- .../RichText/ckeditor/plugins/wsc/dialogs/wsc.js | 8 +- .../NoAuth/RichText/ckeditor/plugins/xml/plugin.js | 6 + .../NoAuth/RichText/ckeditor/skins/kama/dialog.css | 11 +- .../NoAuth/RichText/ckeditor/skins/kama/editor.css | 17 +- .../NoAuth/RichText/ckeditor/skins/kama/skin.js | 8 +- .../RichText/ckeditor/skins/kama/templates.css | 2 +- .../RichText/ckeditor/skins/office2003/dialog.css | 11 +- .../RichText/ckeditor/skins/office2003/editor.css | 19 +- .../RichText/ckeditor/skins/office2003/skin.js | 6 +- .../ckeditor/skins/office2003/templates.css | 2 +- .../NoAuth/RichText/ckeditor/skins/v2/dialog.css | 9 +- .../NoAuth/RichText/ckeditor/skins/v2/editor.css | 17 +- .../html/NoAuth/RichText/ckeditor/skins/v2/skin.js | 6 +- .../RichText/ckeditor/skins/v2/templates.css | 2 +- .../RichText/ckeditor/themes/default/theme.js | 10 +- 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 | 5 +- rt/share/html/NoAuth/css/aileron/images/dhandler | 47 + 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 | 10 +- rt/share/html/NoAuth/css/aileron/msie6.css | 2 +- rt/share/html/NoAuth/css/aileron/nav.css | 5 +- 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 | 47 + 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 | 10 +- 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 | 9 +- rt/share/html/NoAuth/css/base/history-folding.css | 2 +- .../NoAuth/css/base/jquery-ui-timepicker-addon.css | 12 + rt/share/html/NoAuth/css/base/jquery-ui.css | 2 +- rt/share/html/NoAuth/css/base/login.css | 6 +- rt/share/html/NoAuth/css/base/main.css | 2 +- rt/share/html/NoAuth/css/base/misc.css | 7 +- 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 | 10 +- 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 | 47 + 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 | 10 +- 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 | 47 + 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.cookie.js | 89 + 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 | 11 +- rt/share/html/Prefs/Other.html | 2 +- rt/share/html/Prefs/Quicksearch.html | 24 +- rt/share/html/Prefs/Search.html | 4 +- rt/share/html/Prefs/SearchOptions.html | 2 +- rt/share/html/REST/1.0/Forms/attachment/default | 6 +- 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 | 11 +- rt/share/html/REST/1.0/Forms/ticket/default | 20 +- 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 | 6 +- rt/share/html/REST/1.0/logout | 7 +- 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 | 11 +- 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 | 4 +- rt/share/html/Search/Bulk.html | 40 +- 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 | 5 +- 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/ResultsRSSView | 2 +- rt/share/html/Search/Elements/SearchPrivacy | 2 +- rt/share/html/Search/Elements/SearchesForObject | 8 +- 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 | 4 +- 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 | 7 +- rt/share/html/Search/Results.rdf | 2 +- rt/share/html/Search/Results.tsv | 2 +- 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 | 17 +- rt/share/html/SelfService/CreateTicketInQueue.html | 2 +- rt/share/html/SelfService/Display.html | 33 +- 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 | 44 +- rt/share/html/SelfService/Update.html | 30 +- rt/share/html/SelfService/index.html | 2 +- .../html/Ticket/Attachment/WithHeaders/dhandler | 2 +- rt/share/html/Ticket/Attachment/dhandler | 4 +- rt/share/html/Ticket/Create.html | 29 +- rt/share/html/Ticket/Display.html | 10 +- 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 | 10 +- rt/share/html/Ticket/Elements/Reminders | 7 +- rt/share/html/Ticket/Elements/ShowAttachments | 4 +- 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 | 34 +- 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 | 4 +- .../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 | 8 +- rt/share/html/Ticket/Elements/ShowSummary | 5 +- rt/share/html/Ticket/Elements/ShowTime | 2 +- rt/share/html/Ticket/Elements/ShowTransaction | 2 +- .../Ticket/Elements/ShowTransactionAttachments | 7 +- 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 | 11 +- rt/share/html/Ticket/ModifyAll.html | 45 +- rt/share/html/Ticket/ModifyDates.html | 2 +- rt/share/html/Ticket/ModifyLinks.html | 2 +- rt/share/html/Ticket/ModifyPeople.html | 2 +- rt/share/html/Ticket/Reminders.html | 5 +- rt/share/html/Ticket/ShowEmailRecord.html | 2 +- rt/share/html/Ticket/Update.html | 36 +- rt/share/html/Ticket/autohandler | 47 + 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 | 59 +- 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 | 4 +- 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 | 2 +- rt/share/html/l | 2 +- rt/share/html/l_unsafe | 2 +- rt/share/html/m/_elements/footer | 56 +- rt/share/html/m/_elements/full_site_link | 47 + rt/share/html/m/_elements/header | 70 +- rt/share/html/m/_elements/login | 112 + rt/share/html/m/_elements/menu | 57 +- rt/share/html/m/_elements/raw_style | 113 +- rt/share/html/m/_elements/ticket_list | 58 +- rt/share/html/m/_elements/ticket_menu | 47 + rt/share/html/m/_elements/wrapper | 50 +- rt/share/html/m/dhandler | 47 + rt/share/html/m/index.html | 47 + rt/share/html/m/login | 84 - rt/share/html/m/logout | 47 + rt/share/html/m/style.css | 47 + rt/share/html/m/ticket/autohandler | 47 + rt/share/html/m/ticket/create | 104 +- rt/share/html/m/ticket/history | 49 +- rt/share/html/m/ticket/reply | 134 +- rt/share/html/m/ticket/select_create_queue | 47 + rt/share/html/m/ticket/show | 88 +- rt/share/html/m/tickets/search | 47 + rt/share/po/ar.po | 8889 +++++++++++++++++++ rt/share/po/bg.po | 1770 ++-- rt/share/po/ca.po | 8901 ++++++++++++++++++++ rt/share/po/cs.po | 3342 +++----- rt/share/po/da.po | 1770 ++-- rt/share/po/de.po | 1770 ++-- rt/share/po/el.po | 1780 ++-- rt/share/po/en.po | 2 +- rt/share/po/en_GB.po | 1251 ++- rt/share/po/es.po | 1768 ++-- rt/share/po/et.po | 1786 ++-- rt/share/po/fi.po | 1770 ++-- rt/share/po/fr.po | 1772 ++-- rt/share/po/he.po | 1778 ++-- rt/share/po/hr.po | 1768 ++-- rt/share/po/hu.po | 1778 ++-- rt/share/po/id.po | 1774 ++-- rt/share/po/is.po | 1784 ++-- rt/share/po/it.po | 1768 ++-- rt/share/po/ja.po | 1788 ++-- rt/share/po/lt.po | 1776 ++-- rt/share/po/lv.po | 1776 ++-- rt/share/po/mk.po | 1790 ++-- rt/share/po/nb.po | 1768 ++-- rt/share/po/nl.po | 1770 ++-- rt/share/po/nn.po | 1770 ++-- rt/share/po/oc.po | 8893 +++++++++++++++++++ rt/share/po/pl.po | 1768 ++-- rt/share/po/pt.po | 1774 ++-- rt/share/po/pt_BR.po | 1768 ++-- rt/share/po/pt_PT.po | 1788 ++-- rt/share/po/rt.pot | 1784 ++-- rt/share/po/ru.po | 1770 ++-- rt/share/po/sk.po | 8889 +++++++++++++++++++ rt/share/po/sl.po | 1771 ++-- rt/share/po/sv.po | 1782 ++-- rt/share/po/tr.po | 1778 ++-- rt/share/po/zh_CN.po | 1772 ++-- rt/share/po/zh_TW.po | 1772 ++-- rt/t/00-mason-syntax.t | 2 - rt/t/api/attachment_filename.t | 2 + rt/t/api/cf_rights.t | 1 - rt/t/api/cron.t | 3 +- rt/t/api/date.t | 4 +- rt/t/api/group.t | 17 +- rt/t/api/i18n_guess.t | 1 - rt/t/api/password-types.t | 1 - rt/t/api/rights.t | 49 - rt/t/api/rights_show_ticket.t | 1 - rt/t/api/rtname.t | 1 - rt/t/api/safe-run-child-util.t | 2 - rt/t/api/scrip_order.t | 2 +- rt/t/api/squish.t | 11 +- rt/t/api/ticket.t | 31 +- rt/t/api/versions_sorter.t | 1 - rt/t/articles/article.t | 1 - rt/t/articles/articles.t | 1 - rt/t/articles/basic-api.t | 1 - rt/t/articles/cfsearch.t | 1 - rt/t/articles/class.t | 17 +- rt/t/articles/interface.t | 5 +- rt/t/articles/queue-specific-class.t | 3 +- rt/t/articles/search-interface.t | 3 +- rt/t/articles/upload-customfields.t | 1 - rt/t/articles/uri-a.t | 1 - rt/t/articles/uri-articles.t | 1 - rt/t/customfields/access_via_queue.t | 30 +- rt/t/customfields/api.t | 28 +- rt/t/customfields/combo_cascade.t | 1 - rt/t/customfields/date_search.t | 75 +- rt/t/customfields/datetime_search.t | 106 +- rt/t/customfields/external.t | 9 +- rt/t/customfields/ip.t | 11 +- rt/t/customfields/iprange.t | 1 - rt/t/customfields/iprangev6.t | 1 - rt/t/customfields/ipv6.t | 10 +- rt/t/customfields/pattern.t | 1 - rt/t/customfields/single_values.t | 1 - rt/t/customfields/sort_order.t | 1 - rt/t/customfields/transaction.t | 1 - rt/t/fts/indexed_mysql.t | 1 - rt/t/fts/indexed_oracle.t | 1 - rt/t/fts/indexed_pg.t | 1 - rt/t/fts/not_indexed.t | 1 - rt/t/i18n/caching.t | 1 - rt/t/i18n/default.t | 1 - rt/t/i18n/footer.t | 1 - rt/t/lifecycles/basics.t | 1 - rt/t/lifecycles/dates.t | 1 - rt/t/lifecycles/moving.t | 1 - rt/t/lifecycles/unresolved-deps.t | 4 +- rt/t/lifecycles/utils.pl | 1 - rt/t/mail/charsets-outgoing.t | 1 - rt/t/mail/crypt-gnupg.t | 1 - rt/t/mail/dashboards.t | 1 - rt/t/mail/digest-attributes.t | 1 - rt/t/mail/extractsubjecttag.t | 24 +- rt/t/mail/gateway.t | 55 - rt/t/mail/gnupg-bad.t | 1 - rt/t/mail/gnupg-incoming.t | 32 +- rt/t/mail/gnupg-outgoing-encrypted.t | 1 - rt/t/mail/gnupg-outgoing-plain.t | 1 - rt/t/mail/gnupg-outgoing-signed.t | 1 - rt/t/mail/gnupg-outgoing-signed_encrypted.t | 1 - rt/t/mail/gnupg-realmail.t | 1 - rt/t/mail/gnupg-reverification.t | 1 - rt/t/mail/gnupg-special.t | 1 - rt/t/mail/mime_decoding.t | 45 +- rt/t/mail/multipart.t | 48 - rt/t/mail/one-time-recipients.t | 1 - rt/t/mail/outlook.t | 250 +- rt/t/mail/sendmail.t | 3 +- rt/t/mail/threading.t | 1 - rt/t/mail/verp.t | 3 +- rt/t/mail/wrong_mime_charset.t | 1 - rt/t/shredder/00load.t | 2 +- rt/t/shredder/00skeleton.t | 3 +- rt/t/shredder/01basics.t | 3 +- rt/t/shredder/01ticket.t | 3 +- rt/t/shredder/02group_member.t | 3 +- rt/t/shredder/02queue.t | 3 +- rt/t/shredder/02template.t | 3 +- rt/t/shredder/02user.t | 3 +- rt/t/shredder/03plugin.t | 3 +- rt/t/shredder/03plugin_summary.t | 3 +- rt/t/shredder/03plugin_tickets.t | 3 +- rt/t/shredder/03plugin_users.t | 3 +- rt/t/shredder/utils.pl | 1 - rt/t/ticket/action_linear_escalate.t | 1 - rt/t/ticket/add-watchers.t | 47 - rt/t/ticket/badlinks.t | 1 - rt/t/ticket/batch-upload-csv.t | 4 +- rt/t/ticket/cfsort-freeform-multiple.t | 1 - rt/t/ticket/cfsort-freeform-single.t | 1 - rt/t/ticket/clicky.t | 1 - rt/t/ticket/googleish_search.t | 1 - rt/t/ticket/link_search.t | 3 +- rt/t/ticket/merge.t | 1 - rt/t/ticket/requestor-order.t | 4 +- rt/t/ticket/search.t | 12 +- rt/t/ticket/search_by_cf_freeform_multiple.t | 1 - rt/t/ticket/search_by_cf_freeform_single.t | 1 - rt/t/ticket/search_by_links.t | 1 - rt/t/ticket/search_by_txn.t | 1 - rt/t/ticket/search_by_watcher.t | 1 - rt/t/ticket/search_long_cf_values.t | 1 - rt/t/ticket/sort-by-custom-ownership.t | 1 - rt/t/ticket/sort-by-queue.t | 1 - rt/t/ticket/sort-by-user.t | 1 - rt/t/ticket/sort_by_cf.t | 1 - rt/t/validator/group_members.t | 1 - rt/t/web/admin_groups.t | 1 - rt/t/web/admin_user.t | 63 +- rt/t/web/attachment_encoding.t | 1 - rt/t/web/attachments.t | 2 +- rt/t/web/basic.t | 1 - rt/t/web/case-sensitivity.t | 2 - rt/t/web/cf_access.t | 2 +- rt/t/web/cf_date.t | 1 - rt/t/web/cf_datetime.t | 1 - rt/t/web/cf_onqueue.t | 2 +- rt/t/web/cf_select_one.t | 1 - rt/t/web/class_create.t | 2 - rt/t/web/clickjacking-preventions.t | 1 - rt/t/web/command_line.t | 18 +- rt/t/web/command_line_with_unknown_field.t | 14 +- rt/t/web/compilation_errors.t | 5 +- rt/t/web/config_tab_right.t | 1 - rt/t/web/crypt-gnupg.t | 2 +- rt/t/web/csrf-rest.t | 1 - rt/t/web/csrf.t | 1 - rt/t/web/custom_frontpage.t | 23 +- rt/t/web/custom_search.t | 2 +- rt/t/web/dashboards-basics.t | 2 +- rt/t/web/dashboards-deleted-saved-search.t | 1 - rt/t/web/dashboards-groups.t | 2 +- rt/t/web/dashboards-permissions.t | 1 - rt/t/web/dashboards-search-cache.t | 2 +- rt/t/web/gnupg-headers.t | 2 +- rt/t/web/gnupg-select-keys-on-create.t | 1 - rt/t/web/gnupg-select-keys-on-update.t | 1 - rt/t/web/gnupg-tickyboxes.t | 1 - rt/t/web/googleish_search.t | 1 - rt/t/web/group_create.t | 2 - rt/t/web/html_template.t | 3 +- rt/t/web/installer.t | 11 +- rt/t/web/logout.t | 1 - rt/t/web/offline.t | 1 - rt/t/web/offline_messages_utf8.t | 1 - rt/t/web/offline_utf8.t | 1 - rt/t/web/owner_disabled_group_19221.t | 1 - rt/t/web/passthrough-jsmin | 1 - rt/t/web/private-components.t | 1 + rt/t/web/query_builder.t | 3 +- rt/t/web/query_builder_queue_limits.t | 16 +- rt/t/web/query_log.t | 1 - rt/t/web/queue_caching.t | 30 +- rt/t/web/queue_create.t | 2 - rt/t/web/quickcreate.t | 1 - rt/t/web/quicksearch.t | 1 - rt/t/web/redirect-after-login.t | 1 - rt/t/web/redirect.t | 2 - rt/t/web/reminders.t | 26 +- rt/t/web/requestor_groups_edit_link.t | 1 - rt/t/web/requestor_groups_limit.t | 1 - rt/t/web/rest-non-ascii-subject.t | 1 - rt/t/web/rest-sort.t | 1 - rt/t/web/rest.t | 181 +- rt/t/web/richtext-autohandler.t | 1 + rt/t/web/rights.t | 1 - rt/t/web/rights1.t | 2 +- rt/t/web/saved_search_chart.t | 1 - rt/t/web/saved_search_context.t | 1 - rt/t/web/saved_search_permissions.t | 1 - rt/t/web/saved_search_update.t | 1 - rt/t/web/scrips.t | 2 - rt/t/web/scrub.t | 1 - rt/t/web/search_bulk_update_links.t | 1 - rt/t/web/search_rss.t | 3 +- rt/t/web/search_tabs.t | 4 +- rt/t/web/template.t | 35 +- rt/t/web/ticket-create-utf8.t | 1 - rt/t/web/ticket_display.t | 14 +- rt/t/web/ticket_forward.t | 1 - rt/t/web/ticket_modify_all.t | 4 +- rt/t/web/ticket_owner.t | 1 - rt/t/web/ticket_owner_autocomplete.t | 1 - rt/t/web/ticket_owner_issues_16656.t | 1 - rt/t/web/ticket_seen.t | 1 - rt/t/web/ticket_txn_content.t | 2 +- rt/t/web/ticket_update_without_content.t | 1 - rt/t/web/unlimited_search.t | 3 +- rt/t/web/user_update.t | 31 +- rt/t/web/walk.t | 1 - 1373 files changed, 79578 insertions(+), 31011 deletions(-) create mode 100644 rt/etc/upgrade/4.0.12/schema.Oracle create mode 100644 rt/etc/upgrade/4.0.12/schema.Pg create mode 100644 rt/etc/upgrade/4.0.12/schema.mysql create mode 100644 rt/etc/upgrade/4.0.13/schema.Oracle create mode 100644 rt/etc/upgrade/4.0.13/schema.Pg create mode 100644 rt/etc/upgrade/4.0.13/schema.mysql create mode 100644 rt/etc/upgrade/4.0.9/content create mode 100644 rt/share/html/Helpers/Autocomplete/autohandler create mode 100644 rt/share/html/Helpers/autohandler create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/id.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ka.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/mk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/da.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/gu.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/mk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ro.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/vi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/a11yhelp/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/adobeair/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/ajax/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/bbcode/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/bg.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/da.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/et.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/gu.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/hr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/pl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/uk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/vi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/devtools/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/docprops/dialogs/docprops.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/docprops/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/iframe/dialogs/iframe.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/dialogs/placeholder.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/bg.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/da.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/et.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/hr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/pl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/uk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/vi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/placeholder/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/preview/preview.html create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/en.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/et.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/hr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/specialchar/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/stylesheetparser/plugin.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/_translationstatus.txt create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/bg.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/cs.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/cy.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/da.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/de.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/el.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/eo.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/et.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fa.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/fr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/he.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/hr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/it.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/ku.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/lv.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/mk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/nb.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/nl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/no.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/pl.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/pt-br.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/sk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/tr.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/ug.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/uk.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/vi.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/uicolor/lang/zh-cn.js create mode 100644 rt/share/html/NoAuth/RichText/ckeditor/plugins/xml/plugin.js create mode 100644 rt/share/html/NoAuth/js/jquery.cookie.js create mode 100644 rt/share/html/m/_elements/login delete mode 100644 rt/share/html/m/login create mode 100644 rt/share/po/ar.po create mode 100644 rt/share/po/ca.po create mode 100644 rt/share/po/oc.po create mode 100644 rt/share/po/sk.po diff --git a/httemplate/elements/header-minimal.html b/httemplate/elements/header-minimal.html index a36457b25..a959fa9fe 100644 --- a/httemplate/elements/header-minimal.html +++ b/httemplate/elements/header-minimal.html @@ -11,6 +11,9 @@ <% $title |h %> + + + diff --git a/httemplate/elements/header-popup.html b/httemplate/elements/header-popup.html index 472a7325e..01a7ba87f 100644 --- a/httemplate/elements/header-popup.html +++ b/httemplate/elements/header-popup.html @@ -22,6 +22,9 @@ Example: <% $title |h %> + + + diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html index 7a7dc088d..4e0c74b8a 100644 --- a/httemplate/elements/header.html +++ b/httemplate/elements/header.html @@ -25,6 +25,9 @@ Example: <% $title |h %> + + + diff --git a/rt/Makefile.in b/rt/Makefile.in index fbe3fae9f..2823d5474 100644 --- a/rt/Makefile.in +++ b/rt/Makefile.in @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -226,6 +226,8 @@ DB_RT_PASS = @DB_RT_PASS@ TEST_FILES = t/*.t t/*/*.t TEST_VERBOSE = 0 +RT_TEST_PARALLEL_NUM ?= 5 + #################################################################### @@ -301,6 +303,13 @@ fixperms: # Make the system binaries executable also cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES); chgrp $(RTGROUP) $(SYSTEM_BINARIES)) + # Make upgrade scripts executable if they are in the source. + # + # Note that we use the deprecated (by GNU/POSIX find) -perm +0NNN syntax + # instead of -perm /0NNN since BSD find doesn't support the latter. + ( cd etc/upgrade && find . -type f -not -name '*.in' -perm +0111 -print ) | while read file ; do \ + chmod a+x "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ + done # Make the web ui readable by all. chmod -R u+rwX,go-w,go+rX $(DESTDIR)$(MASON_HTML_PATH) \ @@ -356,7 +365,7 @@ test: parallel-test: test-parallel test-parallel: - RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj5","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )' + RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj$(RT_TEST_PARALLEL_NUM)","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )' regression-reset-db: force-dropdb $(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba-password '' @@ -429,6 +438,13 @@ etc-install: @COMMENT_INPLACE_LAYOUT@ for file in $(ETC_FILES) ; do \ @COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \ @COMMENT_INPLACE_LAYOUT@ done +@COMMENT_INPLACE_LAYOUT@ [ -d $(DESTDIR)$(RT_ETC_PATH)/upgrade ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)/upgrade +@COMMENT_INPLACE_LAYOUT@ -( cd etc/upgrade && find . -type d -print ) | while read dir ; do \ +@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$dir" ; \ +@COMMENT_INPLACE_LAYOUT@ done +@COMMENT_INPLACE_LAYOUT@ -( cd etc/upgrade && find . -type f -not -name '*.in' -print ) | while read file ; do \ +@COMMENT_INPLACE_LAYOUT@ $(INSTALL) -m 0644 "etc/upgrade/$$file" "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \ +@COMMENT_INPLACE_LAYOUT@ done sbin-install: diff --git a/rt/README b/rt/README index 37a6aff67..4cb3918f1 100755 --- a/rt/README +++ b/rt/README @@ -10,10 +10,6 @@ RT is commercially-supported software. To purchase support, training, custom development, or professional services, please get in touch with us at . - Jesse Vincent - Best Practical Solutions, LLC - March, 2011 - REQUIRED PACKAGES ----------------- @@ -25,7 +21,7 @@ o Perl 5.8.3 or later (http://www.perl.org). o A supported SQL database - Currently supported: Mysql 4.1 or later with InnoDB support. + Currently supported: MySQL 4.1 or later with InnoDB support. Postgres 8.1 or later. Oracle 9iR2 or later. SQLite 3.0. (Not recommended for production) @@ -299,7 +295,7 @@ fix them. To report a bug, send email to . # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/bin/rt b/rt/bin/rt index 89873f5d6..ed87f84cf 100755 --- a/rt/bin/rt +++ b/rt/bin/rt @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,6 +50,7 @@ # Abhijit Menon-Sen use strict; +use warnings; if ( $ARGV[0] && $ARGV[0] =~ /^(?:--help|-h)$/ ) { require Pod::Usage; @@ -67,6 +68,7 @@ use HTTP::Request::Common; use HTTP::Headers; 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 @@ -119,9 +121,9 @@ sub DEBUG { warn @_ if $config{debug} >= shift } # (XXX: Ask Autrijus how i18n changes these definitions.) my $name = '[\w.-]+'; -my $CF_name = '[\sa-z0-9_ :()/-]+'; +my $CF_name = '[^,]+?'; my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})'; -my $label = '[a-zA-Z0-9@_.+-]+'; +my $label = '[^,\\/]+'; my $labels = "(?:$label,)*$label"; my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+'; @@ -967,12 +969,8 @@ sub take { sub grant { my ($cmd) = @_; - my $revoke = 0; - while (@ARGV) { - } - - $revoke = 1 if $cmd->{action} eq 'revoke'; - return 0; + whine "$cmd is unimplemented."; + return 1; } # Client <-> Server communication. @@ -1470,23 +1468,20 @@ sub read_passwd { sub vi { my ($text) = @_; - my $file = "/tmp/rt.form.$$"; my $editor = $ENV{EDITOR} || $ENV{VISUAL} || "vi"; local $/ = undef; - open( my $handle, '>', $file ) or die "$file: $!\n"; + my $handle = File::Temp->new; print $handle $text; close($handle); - system($editor, $file) && die "Couldn't run $editor.\n"; + system($editor, $handle->filename) && die "Couldn't run $editor.\n"; - open( $handle, '<', $file ) or die "$file: $!\n"; + open( $handle, '<', $handle->filename ) or die "$handle: $!\n"; $text = <$handle>; close($handle); - unlink($file); - return $text; } @@ -1909,8 +1904,6 @@ Text: ticket/1-3,5-7/history user/ams - user/ams/rights - user/ams,rai,1/rights For more information: @@ -2028,20 +2021,6 @@ Text: - edit - create - In addition, the following type-specific actions exist: - - - grant - - revoke - - Attributes: - - The following attributes can be used with "rt show" or "rt edit" - to retrieve or edit other information associated with users and - groups: - - rights Global rights granted to this user. - rights/ Queue rights for this user. - -- Title: queue @@ -2384,12 +2363,6 @@ Text: -- -Title: grant -Title: revoke -Text: - --- - Title: query Text: diff --git a/rt/bin/rt-crontool.in b/rt/bin/rt-crontool.in index 86251a39f..5498da751 100644 --- a/rt/bin/rt-crontool.in +++ b/rt/bin/rt-crontool.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -47,6 +47,7 @@ # # END BPS TAGGED BLOCK }}} use strict; +use warnings; use Carp; # fix lib paths, some may be relative @@ -153,17 +154,13 @@ my $void_scrip_action = RT::ScripAction->new( $CurrentUser ); #find a bunch of tickets my $tickets = RT::Tickets->new($CurrentUser); -my $search = $search->new( +$search = $search->new( TicketsObj => $tickets, Argument => $search_arg, CurrentUser => $CurrentUser ); - $search->Prepare(); -# TicketsFound is an RT::Tickets object -my $tickets = $search->TicketsObj; - #for each ticket we've found while ( my $ticket = $tickets->Next() ) { print $ticket->Id() . ":\n" if ($verbose); @@ -310,18 +307,6 @@ sub load_module { } - -# =head2 loc LIST -# -# Localize this string, with the current user's currentuser object -# -# =cut - -sub loc { - $CurrentUser->loc(@_); -} - - sub help { print loc( "[_1] is a tool to act on tickets from an external scheduling tool, such as cron.", $0 ) diff --git a/rt/bin/rt-mailgate.in b/rt/bin/rt-mailgate.in index 72cada613..be1c03224 100644 --- a/rt/bin/rt-mailgate.in +++ b/rt/bin/rt-mailgate.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 2a9f643c8..4a3eadadf 100644 --- a/rt/bin/rt.in +++ b/rt/bin/rt.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,6 +50,7 @@ # Abhijit Menon-Sen use strict; +use warnings; if ( $ARGV[0] && $ARGV[0] =~ /^(?:--help|-h)$/ ) { require Pod::Usage; @@ -67,6 +68,7 @@ use HTTP::Request::Common; use HTTP::Headers; 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 @@ -119,9 +121,9 @@ sub DEBUG { warn @_ if $config{debug} >= shift } # (XXX: Ask Autrijus how i18n changes these definitions.) my $name = '[\w.-]+'; -my $CF_name = '[\sa-z0-9_ :()/-]+'; +my $CF_name = '[^,]+?'; my $field = '(?i:[a-z][a-z0-9_-]*|C(?:ustom)?F(?:ield)?-'.$CF_name.'|CF\.\{'.$CF_name.'\})'; -my $label = '[a-zA-Z0-9@_.+-]+'; +my $label = '[^,\\/]+'; my $labels = "(?:$label,)*$label"; my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+'; @@ -967,12 +969,8 @@ sub take { sub grant { my ($cmd) = @_; - my $revoke = 0; - while (@ARGV) { - } - - $revoke = 1 if $cmd->{action} eq 'revoke'; - return 0; + whine "$cmd is unimplemented."; + return 1; } # Client <-> Server communication. @@ -1470,23 +1468,20 @@ sub read_passwd { sub vi { my ($text) = @_; - my $file = "/tmp/rt.form.$$"; my $editor = $ENV{EDITOR} || $ENV{VISUAL} || "vi"; local $/ = undef; - open( my $handle, '>', $file ) or die "$file: $!\n"; + my $handle = File::Temp->new; print $handle $text; close($handle); - system($editor, $file) && die "Couldn't run $editor.\n"; + system($editor, $handle->filename) && die "Couldn't run $editor.\n"; - open( $handle, '<', $file ) or die "$file: $!\n"; + open( $handle, '<', $handle->filename ) or die "$handle: $!\n"; $text = <$handle>; close($handle); - unlink($file); - return $text; } @@ -1909,8 +1904,6 @@ Text: ticket/1-3,5-7/history user/ams - user/ams/rights - user/ams,rai,1/rights For more information: @@ -2028,20 +2021,6 @@ Text: - edit - create - In addition, the following type-specific actions exist: - - - grant - - revoke - - Attributes: - - The following attributes can be used with "rt show" or "rt edit" - to retrieve or edit other information associated with users and - groups: - - rights Global rights granted to this user. - rights/ Queue rights for this user. - -- Title: queue @@ -2384,12 +2363,6 @@ Text: -- -Title: grant -Title: revoke -Text: - --- - Title: query Text: diff --git a/rt/configure b/rt/configure index caf3967a2..d37616745 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.68 for RT rt-4.0.8. +# Generated by GNU Autoconf 2.68 for RT rt-4.0.13. # # Report bugs to . # @@ -560,8 +560,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='RT' PACKAGE_TARNAME='rt' -PACKAGE_VERSION='rt-4.0.8' -PACKAGE_STRING='RT rt-4.0.8' +PACKAGE_VERSION='rt-4.0.13' +PACKAGE_STRING='RT rt-4.0.13' PACKAGE_BUGREPORT='rt-bugs@bestpractical.com' PACKAGE_URL='' @@ -1311,7 +1311,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.8 to adapt to many kinds of systems. +\`configure' configures RT rt-4.0.13 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1372,7 +1372,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of RT rt-4.0.8:";; + short | recursive ) echo "Configuration of RT rt-4.0.13:";; esac cat <<\_ACEOF @@ -1496,7 +1496,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -RT configure rt-4.0.8 +RT configure rt-4.0.13 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1597,7 +1597,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.8, which was +It was created by RT $as_me rt-4.0.13, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -1954,7 +1954,7 @@ rt_version_major=4 rt_version_minor=0 -rt_version_patch=8 +rt_version_patch=13 test "x$rt_version_major" = 'x' && rt_version_major=0 test "x$rt_version_minor" = 'x' && rt_version_minor=0 @@ -4482,7 +4482,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.8, which was +This file was extended by RT $as_me rt-4.0.13, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -4535,7 +4535,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.8 +RT config.status rt-4.0.13 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff --git a/rt/devel/tools/change-loc-msgstr b/rt/devel/tools/change-loc-msgstr index 75fc72df7..9eb9ac697 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 1533cfa61..b95c99047 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -148,9 +148,9 @@ sub extract_strings_from_code { $_ = <_>; - # Mason filter: <&|/l>... + # Mason filter: <&|/l>... and <&|/l_unsafe>... my $line = 1; - while (m!\G(.*?<&\|/l(.*?)&>(.*?))!sg) { + while (m!\G(.*?<&\|/l(?:_unsafe)?(.*?)&>(.*?))!sg) { my ( $all, $vars, $str ) = ( $1, $2, $3 ); $vars =~ s/[\n\r]//g; $line += ( $all =~ tr/\n/\n/ ); @@ -201,7 +201,7 @@ sub extract_strings_from_code { # Comment-based qw mark: "qw(...)" # loc_qw $line = 1; pos($_) = 0; - while (m/\G(.*?(?:qw\(([^)]+)\)[\}\)\],;]*)?$re_loc_qw_suffix)/smgo) { + while (m/\G(.*?(?:qw\(([^)]+)\)\s*[\{\}\)\],; ]*)?$re_loc_qw_suffix)/smgo) { my ( $all, $str ) = ( $1, $2 ); $line += ( $all =~ tr/\n/\n/ ); unless ( defined $str ) { diff --git a/rt/devel/tools/factory b/rt/devel/tools/factory index 099d2db8c..5f9c49b46 100644 --- a/rt/devel/tools/factory +++ b/rt/devel/tools/factory @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -47,6 +47,7 @@ # # END BPS TAGGED BLOCK }}} use strict; +use warnings; use DBI; die "Usage: $0 database namespace" if @ARGV != 2; diff --git a/rt/devel/tools/license_tag b/rt/devel/tools/license_tag index de3bd3bc3..05bcf83e9 100644 --- a/rt/devel/tools/license_tag +++ b/rt/devel/tools/license_tag @@ -5,7 +5,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -48,11 +48,13 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} +use strict; +use warnings; my $LICENSE = <<'EOL'; COPYRIGHT: -This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC (Except where explicitly superseded by other copyright notices) @@ -113,7 +115,7 @@ tag_makefile ('README'); sub tag_mason { my $pm = $_; return unless (-f $pm); - return if $pm =~ /images/ || $pm =~ /\.(?:png|jpe?g|gif)$/; + return if $pm =~ /\.(?:png|jpe?g|gif)$/; open( FILE, '<', $pm ) or die "Failed to open $pm"; my $file = (join "", ); close (FILE); @@ -252,7 +254,7 @@ sub another_license { my $name = shift; my $file = shift; - return 1 if ($name =~ /(?:FCKEditor|scriptaculous|superfish|tablesorter|farbtastic)/i); + return 1 if ($name =~ /(?:ckeditor|scriptaculous|superfish|tablesorter|farbtastic)/i); return 0 if $file =~ /Copyright\s+\(c\)\s+\d\d\d\d-\d\d\d\d Best Practical Solutions/i; return 1 if $file =~ /\b(copyright|GPL|Public Domain)\b/i; # common diff --git a/rt/devel/tools/merge-rosetta.pl b/rt/devel/tools/merge-rosetta.pl index e3b45a1ac..a0ef3e2a7 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -46,4 +46,6 @@ # those contributions and any derivatives thereof. # # END BPS TAGGED BLOCK }}} +use strict; +use warnings; exec('sbin/rt-message-catalog', 'rosetta', @ARGV); diff --git a/rt/devel/tools/rt-attributes-editor b/rt/devel/tools/rt-attributes-editor index 92caeaf12..d3443177a 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 7f8a8808f..d77ef9e94 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -47,6 +47,7 @@ # # END BPS TAGGED BLOCK }}} use strict; +use warnings; # run this script with: # perl -0pi sbin/tweak-template-locstring `ack -f share/html -G 'html$'` s!\<\&\|\/l([^&]*)\&\>[\n\s]+(.*?)[\n\s]*\<\/\&\>!;my ($arg, $x) = ($1, $2); $x =~ s/\s*\n\s*/ /g;"<&|/l$arg&>$x"!smge; diff --git a/rt/docs/UPGRADING-3.4 b/rt/docs/UPGRADING-3.4 index 89454bdef..20435829d 100644 --- a/rt/docs/UPGRADING-3.4 +++ b/rt/docs/UPGRADING-3.4 @@ -9,3 +9,10 @@ changed to "ModifyCustomField" Custom Fields now have an additional right, "ModifyCustomField". This right governs whether a user can modify an object's custom field values for a particular custom field. This includes adding, deleting and changing values. + +=head1 UPGRADING FROM 3.3.2 AND EARLIER + +Viewing custom fields now requires the "SeeCustomField" right either globally +or on a per-queue basis. Global CFs are no longer visible to everyone and +SeeQueue is no longer sufficient to view queue-level CFs. You must grant the +"SeeCustomField" right manually after upgrade. diff --git a/rt/docs/UPGRADING-4.0 b/rt/docs/UPGRADING-4.0 index ad8d87b5f..687dfbc61 100644 --- a/rt/docs/UPGRADING-4.0 +++ b/rt/docs/UPGRADING-4.0 @@ -24,9 +24,13 @@ following to remove the _Overlay files: find /opt/rt3/lib/ -type f -name '*_Overlay*' -delete RT has also changed how web deployment works; you will need to review -docs/web_deployment.pod for current instructions. The old `fastcgi_server`, -`webmux.pl`, and `mason_handler.*` files will not work with RT 4.0, and should -be removed to reduce confusion. +F for current instructions. The old +`fastcgi_server`, `webmux.pl`, and `mason_handler.*` files will not +work with RT 4.0, and should be removed to reduce confusion. + +If you deploy RT with mod_perl, Apache will no longer start with C +set to `perl-script`. F contains the +new configuration. =head2 RT_SiteConfig.pm @@ -148,3 +152,40 @@ the following Mason templates, this feature will not function correctly: share/html/Search/Elements/BuildFormatString share/html/Search/Elements/PickCFs share/html/Search/Elements/PickCriteria + +=head1 UPGRADING FROM 4.0.8 AND EARLIER + +=head2 Data upgrades + +Previously, the default lifecycle was stored in Queues.Lifecycle as +NULL. To simplify code, RT now stores the string 'default' to match the +name of the Lifecycle. + +The 3.9.2 upgrade step removed all enabled Personal Groups, but missed +any disabled groups. We catch and clean up the disabled Personal groups +during the 4.0.9 upgrade step. + +=head2 Javascript Changes + +If you have set a custom @JSFiles in RT_SiteConfig.pm, you will need to +amend this to include the new jquery.cookie.js file added to +RT_Config.pm. If you are using an extension that requires manually +tweaking @JSFiles, please contact the developer and ask them to use +RT->AddJavaScript in their extension to avoid these upgrade problems. + +If you have @JSFiles set in your RT_SiteConfig.pm but it appears to be +the same as RT_Config.pm (no local js files added) you can safely remove +the whole setting from RT_SiteConfig.pm and allow our default to be +used. + +=head1 UPGRADING FROM 4.0.11 AND EARLIER + +=head2 Data Upgrades + +Previous versions of RT allowed you to create Tickets with a Type of +'Ticket', 'Approval' or 'Reminder' instead of the correct 'ticket'. +Existing Types are updated in the database and the RT API now corrects +these types before insertion. + +Site-specific custom types (anything but ticket, reminder or approval) +are not affected by these changes. diff --git a/rt/docs/customizing/articles_introduction.pod b/rt/docs/customizing/articles_introduction.pod index ea49b05de..73b5c334d 100644 --- a/rt/docs/customizing/articles_introduction.pod +++ b/rt/docs/customizing/articles_introduction.pod @@ -11,7 +11,7 @@ RT. They are organized into classes and topics. The user interface to Articles is available from the Tools -> Articles menu. Admin functionality can be found under Tools -> Configuration -> Articles. Once configured, articles will become available for searching -on the Reply/Comment page on tickets. There are configuration variables +on the Reply/Comment page on tickets. There are L to make Articles available on ticket creation. =head2 Basics @@ -30,20 +30,24 @@ Classes are equivalent to RT's queues. They can be created by going to Tools -> Configuration -> Articles -> Classes -> New Class. Articles are assigned to one Class. When you create Custom Fields for use with Articles, they will be applied Globally or to a Class, like Custom -Fields are applied to a Queue in RT. Each class also controls what -information is included into a reply (such as the Class header and -footer) and the Article. +Fields are applied to a Queue in RT. -Classes need to be Applied, just like a Custom Field by using the -Applied To link. You can apply them globally or on a queue-by-queue -basis. +A common use for Articles is to store frequently +used replies for requestors, like troubleshooting steps or how to sign +up for a new account. When you insert Article text, you may or may not +want to include the Article name and summary, in addition to the content, +when inserting the Article in a reply. You can control this behavior on +the Class configuration page. -hotlist. +Classes need to be Applied, just like a Custom Field, by using the +Applies To link on the Modify Class page (Tools -> Configuration -> +Articles -> Classes, select the class to modify). You can apply +them globally or on a queue-by-queue basis. =head3 Topics You can also use Topics to organize your Articles. While editing a -Class, there is a Topic tab for Class specific Topics. You can create +Class, there is a Topics tab for Class-specific Topics. You can create global Topics from the Global tab under Tools -> Configuration. When editing Topics, type the name (and optionally description) of the @@ -53,9 +57,9 @@ tree of Topics should show up when creating or modifying articles in the class. These can be arbitrarily nested. Global Topics will be available for all Articles, regardless of their -Class. Articles can belong to both global and class-specific Topics. +Class. Articles can belong to both global and Class-specific Topics. -Articles topics can be set from the 'Modify' screen for the article -- +Article topics can be set from the Modify screen for the article -- simply select as many topics as you desire from the list at the bottom of the screen. @@ -63,18 +67,20 @@ of the screen. Articles don't have a single "body" section for each article. Everything is a custom field (except for name, summary and -some other basic metadata). So, you need to create some custom -fields to hold the Article body and other data. These Custom Fields -should have "Applies To" be "RTFM Articles". +some other basic metadata). So to put information on an +Article, you need to create some custom fields to hold the Article +body and other data. When you create these new Custom Fields, set +the Applies To field to Articles. -Once you've created your custom fields, go into your classes and click -on "Custom Fields" and add the Custom Fields you want to each class. +Once you've created your Custom Fields, go into your Classes, click +on Custom Fields, and add the Custom Fields you want to each Class. Alternatively, use the Applies To link from each Custom Field. =head2 Creating Articles -You can create an article from scratch by going to Tools -> Articles -> +You can create an Article from scratch by going to Tools -> Articles -> New Article and then picking which Class to create the Article under. +You must have a Class to assign the new Article to. The Summary, Description and Custom Fields will all be searchable when including an Article and you can control what Custom Fields end up in your Ticket from the Class configuration page. @@ -84,11 +90,11 @@ your Ticket from the Class configuration page. You can extract the body of a ticket into an article. Within RT, you should now see an "Extract to article" button in the upper right hand corner of RT's UI when working with tickets. When you click that -button, RT will ask you which Class to create your new article in. -Once you click on a class name, the Ticket's transactions will be +button, RT will ask you which Class to create your new Article in. +Once you click on a Class name, the Ticket's transactions will be displayed, along with a set of select boxes. For each transaction, you can pick which Custom Field that transaction should be extracted to. -From there on in, it's just regular article creation. +From there on in, it's just regular Article creation. =head2 Including an Article @@ -97,14 +103,14 @@ is a UI widget that lets you search for and include Articles in your reply. (They're editable, of course). Articles can be included by searching for them, knowing the Id of the -article, using the Article Hotlist and using the Queue specific +article, using the Article Hotlist and using the Queue-specific dropdown. -=head2 Queue Specific List of Articles +=head2 Queue-Specific List of Articles -You can use Topics to organize a set of Queue specific Articles. +You can use Topics to organize a set of Queue-specific Articles. Simply create a global Topic called 'Queues' and then create Topics -under Queues named after each of your Queues. Within each Queue named +under Queues named after each of your Queues. Within each Queue-named Topic, create some Topics and then assign Articles to those sub-topics. This creates a hierarchy like this: @@ -118,38 +124,44 @@ offered a choice of Topic 1 and Topic 2 along with the searching. After choosing Topic 1 or Topic 2, you will be given a list of relevant articles to choose. -Alternately, you can now implement this by applying a single class to -your queue and using the L
feature described below. +Alternately, you can now implement this by applying a single Class to +your Queue and using the L feature described below. =head2 Article Hotlist -If you enable "All articles in this class are on dropdown on ticket -reply page" option, there will be a dropdown on the Create or Update -page which allows users to quickly include Articles. +The Modify Class page has a checkbox labelled "All Articles in this +class should be listed in a dropdown of the ticket reply page". +If you select this for a Class, a dropdown will be available on the +Ticket Create or Update page which allows users to quickly include +Articles in this Class. + +The Class needs to be set up and Applied for the dropdown to appear +(see L). =head2 SelfService Interface If you grant the Unprivileged user group the right ShowArticle, they will get a Search box at the top of their interface. This allows users -to look for answer to questions before creating a Ticket. +to look through your Articles for answers to questions before creating +a Ticket. -=head1 Configuration options +=head1 Configuration Options =head2 ArticleOnTicketCreate Set this to a true value to display the Article include interface on the Ticket Create page in addition to the Reply/Comment page (Create.html -in addition to Update.html) +in addition to Update.html). =head2 HideArticleSearchOnReplyCreate On Ticket Reply (and Create if you set the above config var) -RTFM normally displays a search box and an include box (for -inputting an article id) and configurable dropdowns -of articles. These can be configured using Global Topics or +RT's Article system normally displays a search box and an include box +(for inputting an article id) and configurable dropdowns +of Articles. These can be configured using Global Topics or on the Class page. -If you set this to a true value, RTFM will only display -dropdowns and hide the search boxes +If you set this to a true value, RT will only display +dropdowns and hide the search boxes. =cut diff --git a/rt/docs/extending/external_custom_fields.pod b/rt/docs/extending/external_custom_fields.pod index c6730ae4e..f32bda769 100644 --- a/rt/docs/extending/external_custom_fields.pod +++ b/rt/docs/extending/external_custom_fields.pod @@ -13,7 +13,7 @@ For each type of data source that you want, you'll need to put a file in F (or equivalent if you installed RT into someplace other than F). To get a sense of the code that you'll need to write, take a look at the code in -L for a simple example +F for a simple example which just uses RT's API to pull in a list of RT's groups. Running C will diff --git a/rt/docs/hacking.pod b/rt/docs/hacking.pod index 396c5623d..7c50ee901 100644 --- a/rt/docs/hacking.pod +++ b/rt/docs/hacking.pod @@ -38,7 +38,9 @@ For example, a bugfix branched from C<4.0-trunk> might be named C<4.0/fail-taint-mode-early>. A feature branched from C when there exists a C<4.0-trunk> but no C<4.2-trunk> might be named C<4.2/rename-LogToScreen>. For consistency, branches should use dashes, -not underscores, to separate words. +not underscores, to separate words. Branches which are destined for +4.2, but which are branched from 4.0 (to provide for easy extraction as +a 4.0 extension) should be named 4.2-on-4.0/branch-name. Branches should be reviewed by another developer before being merged. Reviewers should make sure that the branch accomplishes what it claims diff --git a/rt/docs/web_deployment.pod b/rt/docs/web_deployment.pod index 5d2cd4c00..5a9bd93a8 100644 --- a/rt/docs/web_deployment.pod +++ b/rt/docs/web_deployment.pod @@ -113,6 +113,11 @@ preference are ignored. We suggest the C MPM or FastCGI deployment if your privileged users are in a different timezone than the one the server is configured for. +B: RT 3.8 and below suggested use of C; +this is incorrect for RT 4, and (starting in RT 4.0.11) RT will refuse +to start, to prevent difficulties sending mail from RT. Change to +C, as the example below uses. + ### Optional apache logs for RT # ErrorLog /opt/rt4/var/log/apache2.error diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in index 5edb54c26..36a4c3014 100644 --- a/rt/etc/RT_Config.pm.in +++ b/rt/etc/RT_Config.pm.in @@ -479,11 +479,28 @@ accordingly. =cut -Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/); +Set($ExtractSubjectTagMatch, qr/\[[^\]]+? #\d+\]/); Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex} ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/ : qr/\[\Q$RT::rtname\E #\d+\]/)); +=item C<$CheckMoreMSMailHeaders> + +Some email clients create a plain text version of HTML-formatted +email to help other clients that read only plain text. +Unfortunately, the plain text parts sometimes end up with +doubled newlines and these can then end up in RT. This +is most often seen in MS Outlook. + +Enable this option to have RT check for additional mail headers +and attempt to identify email from MS Outlook. When detected, +RT will then clean up double newlines. Note that it may +clean up intentional double newlines as well. + +=cut + +Set( $CheckMoreMSMailHeaders, 0); + =back @@ -520,6 +537,8 @@ Correspond mail address of the ticket's queue. Warning: If you use this setting, bounced mails will appear to be incoming mail to the system, thus creating new tickets. +This option only works if C<$MailCommand> is set to 'sendmailpipe'. + =cut Set($SetOutgoingMailFrom, 0); @@ -535,7 +554,8 @@ The option is a hash reference of queue name to email address. If there is no ticket involved, then the value of the C key will be used. -This option is irrelevant unless C<$SetOutgoingMailFrom> is set. +This option only works if C<$SetOutgoingMailFrom> is enabled and +C<$MailCommand> is set to 'sendmailpipe'. =cut @@ -903,6 +923,7 @@ Set(@JSFiles, qw/ jquery-ui-1.8.4.custom.min.js jquery-ui-timepicker-addon.js jquery-ui-patch-datepicker.js + jquery.cookie.js titlebox-state.js util.js userautocomplete.js @@ -1127,7 +1148,12 @@ user's customized homepage ("RT at a glance"). =cut -Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards SavedSearches)]); +Set( + $HomepageComponents, + [ + qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards SavedSearches ) # loc_qw + ] +); =back @@ -1236,6 +1262,18 @@ Set(%FullTextSearch, Indexed => 0, ); +=item C<$DontSearchFileAttachments> + +If C<$DontSearchFileAttachments> is set to 1, then uploaded files +(attachments with file names) are not searched during content +search. + +Note that if you use indexed FTS then named attachments are still +indexed by default regardless of this option. + +=cut + +Set($DontSearchFileAttachments, undef); =item C<$OnlySearchActiveTicketsInSimpleSearch> diff --git a/rt/etc/initialdata b/rt/etc/initialdata index 7ab746db1..8b9890550 100644 --- a/rt/etc/initialdata +++ b/rt/etc/initialdata @@ -662,23 +662,49 @@ Hour: { $SubscriptionObj->SubValue('Hour') } OrderBy => 'LastUpdated', Order => 'DESC' }, }, - { Name => 'HomepageSettings', - Description => 'HomepageSettings', - Content => - { 'body' => # loc - [ { type => 'system', name => 'My Tickets' }, - { type => 'system', name => 'Unowned Tickets' }, - { type => 'system', name => 'Bookmarked Tickets' }, - { type => 'component', name => 'QuickCreate' }, - ], - 'summary' => # loc - [ - { type => 'component', name => 'MyReminders' }, - { type => 'component', name => 'Quicksearch' }, - { type => 'component', name => 'Dashboards' }, - { type => 'component', name => 'RefreshHomepage' }, - ], - }, + { + Name => 'HomepageSettings', + Description => 'HomepageSettings', + Content => { + 'body' => # loc + [ + { + type => 'system', + name => 'My Tickets', # loc + }, + { + type => 'system', + name => 'Unowned Tickets' # loc + }, + { + type => 'system', + name => 'Bookmarked Tickets' # loc + }, + { + type => 'component', + name => 'QuickCreate' # loc + }, + ], + 'summary' => # loc + [ + { + type => 'component', + name => 'MyReminders' # loc + }, + { + type => 'component', + name => 'Quicksearch' # loc + }, + { + type => 'component', + name => 'Dashboards' # loc + }, + { + type => 'component', + name => 'RefreshHomepage' # loc + }, + ], + }, }, ); diff --git a/rt/etc/upgrade/3.8-branded-queues-extension.in b/rt/etc/upgrade/3.8-branded-queues-extension.in index 8c9f58ded..7fb28c56c 100755 --- a/rt/etc/upgrade/3.8-branded-queues-extension.in +++ b/rt/etc/upgrade/3.8-branded-queues-extension.in @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/3.8-ical-extension.in b/rt/etc/upgrade/3.8-ical-extension.in index af95a96d9..0bbba7b2d 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/etc/upgrade/3.9.8/content b/rt/etc/upgrade/3.9.8/content index d759db9cd..db717cd95 100644 --- a/rt/etc/upgrade/3.9.8/content +++ b/rt/etc/upgrade/3.9.8/content @@ -19,6 +19,6 @@ my $result = $dbh->selectall_arrayref("SELECT count(*) AS articlecount FROM FM_Articles", { Slice => {} } ); if ($result->[0]{articlecount} > 0) { - $RT::Logger->error("You appear to have RTFM Articles. You can upgrade using the etc/upgrade/upgrade-articles script. Read more about it in UPGRADING"); + $RT::Logger->error("You appear to have RTFM Articles. You can upgrade using the etc/upgrade/upgrade-articles script. Read more about it in docs/UPGRADING-4.0"); } }; diff --git a/rt/etc/upgrade/4.0.12/schema.Oracle b/rt/etc/upgrade/4.0.12/schema.Oracle new file mode 100644 index 000000000..4d2c375bb --- /dev/null +++ b/rt/etc/upgrade/4.0.12/schema.Oracle @@ -0,0 +1 @@ +UPDATE Tickets SET Type = LOWER(Type) WHERE LOWER(Type) IN ('ticket', 'approval', 'reminder'); diff --git a/rt/etc/upgrade/4.0.12/schema.Pg b/rt/etc/upgrade/4.0.12/schema.Pg new file mode 100644 index 000000000..4d2c375bb --- /dev/null +++ b/rt/etc/upgrade/4.0.12/schema.Pg @@ -0,0 +1 @@ +UPDATE Tickets SET Type = LOWER(Type) WHERE LOWER(Type) IN ('ticket', 'approval', 'reminder'); diff --git a/rt/etc/upgrade/4.0.12/schema.mysql b/rt/etc/upgrade/4.0.12/schema.mysql new file mode 100644 index 000000000..4d2c375bb --- /dev/null +++ b/rt/etc/upgrade/4.0.12/schema.mysql @@ -0,0 +1 @@ +UPDATE Tickets SET Type = LOWER(Type) WHERE LOWER(Type) IN ('ticket', 'approval', 'reminder'); diff --git a/rt/etc/upgrade/4.0.13/schema.Oracle b/rt/etc/upgrade/4.0.13/schema.Oracle new file mode 100644 index 000000000..6ab70204e --- /dev/null +++ b/rt/etc/upgrade/4.0.13/schema.Oracle @@ -0,0 +1,2 @@ +UPDATE Tickets SET Subject = REPLACE(Subject,CHR(10),''), Status = LOWER(Status); +UPDATE Transactions SET OldValue = LOWER(OldValue), NewValue = LOWER(NewValue) WHERE Type = 'Status' AND Field = 'Status'; diff --git a/rt/etc/upgrade/4.0.13/schema.Pg b/rt/etc/upgrade/4.0.13/schema.Pg new file mode 100644 index 000000000..8283f5259 --- /dev/null +++ b/rt/etc/upgrade/4.0.13/schema.Pg @@ -0,0 +1,2 @@ +UPDATE Tickets SET Subject = REPLACE(Subject,E'\n',''), Status = LOWER(Status); +UPDATE Transactions SET OldValue = LOWER(OldValue), NewValue = LOWER(NewValue) WHERE Type = 'Status' AND Field = 'Status'; diff --git a/rt/etc/upgrade/4.0.13/schema.mysql b/rt/etc/upgrade/4.0.13/schema.mysql new file mode 100644 index 000000000..03b54b569 --- /dev/null +++ b/rt/etc/upgrade/4.0.13/schema.mysql @@ -0,0 +1,2 @@ +UPDATE Tickets SET Subject = REPLACE(Subject,'\n',''), Status = LOWER(Status); +UPDATE Transactions SET OldValue = LOWER(OldValue), NewValue = LOWER(NewValue) WHERE Type = 'Status' AND Field = 'Status'; diff --git a/rt/etc/upgrade/4.0.9/content b/rt/etc/upgrade/4.0.9/content new file mode 100644 index 000000000..f2abf623b --- /dev/null +++ b/rt/etc/upgrade/4.0.9/content @@ -0,0 +1,52 @@ +@Initial = ( + sub { + $RT::Logger->debug( + 'Going to update empty Queue Lifecycle column to "default"'); + + my $queues = RT::Queues->new( RT->SystemUser ); + $queues->FindAllRows; + $queues->Limit( + FIELD => 'Lifecycle', + OPERATOR => 'IS', + VALUE => 'NULL', + ); + + $queues->Limit( + FIELD => 'Lifecycle', + VALUE => '', + ENTRYAGGREGATOR => 'OR', + ); + + $queues->Limit( + FIELD => 'Lifecycle', + VALUE => 0, + ENTRYAGGREGATOR => 'OR', + ); + + while ( my $q = $queues->Next ) { + $q->SetLifecycle('default'); + } + }, + sub { + use strict; + my $groups = RT::Groups->new(RT->SystemUser); + $groups->Limit( FIELD => 'Domain', + OPERATOR => '=', + VALUE => 'Personal' + ); + $groups->LimitToDeleted; + while ( my $group = $groups->Next ) { + my $members = $group->MembersObj(); + while ( my $member = $members->Next ) { + my ( $ok, $msg ) = $group->DeleteMember( $member->MemberId ); + if ( !$ok ) { + $RT::Logger->warn( "Unable to remove group member " + . $member->id . ": " + . $msg ); + } + } + $group->PrincipalObj->Delete; + $group->RT::Record::Delete(); + } + }, +); diff --git a/rt/etc/upgrade/generate-rtaddressregexp.in b/rt/etc/upgrade/generate-rtaddressregexp.in index 68259ff94..751122a99 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 eff469fd6..6ae1cc61c 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 cf39d04d7..bb6c8d487 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -106,7 +106,7 @@ while ( my $rec = FetchNext( $cgms ) ) { $RT::Handle->Commit; } -use constant PAGE_SIZE => 1000; +use constant PAGE_SIZE => 10000; sub FetchNext { my ($objs, $init) = @_; if ( $init ) { diff --git a/rt/etc/upgrade/shrink_transactions_table.pl b/rt/etc/upgrade/shrink_transactions_table.pl index c23d09188..b4f07f090 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -106,7 +106,7 @@ while ( my $rec = FetchNext( $txns ) ) { $RT::Handle->Commit; } -use constant PAGE_SIZE => 1000; +use constant PAGE_SIZE => 10000; sub FetchNext { my ($objs, $init) = @_; if ( $init ) { diff --git a/rt/etc/upgrade/split-out-cf-categories.in b/rt/etc/upgrade/split-out-cf-categories.in index 28ea309de..dcb56d08d 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 eef00aa67..0b4663213 100755 --- a/rt/etc/upgrade/upgrade-articles +++ b/rt/etc/upgrade/upgrade-articles @@ -3,7 +3,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 b0f13d674..6e8d1d7c8 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 310a6a826..98eb7b4e3 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 a3d719c31..22c56fd23 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 4372a564d..da60ef77d 100644 --- a/rt/lib/RT.pm +++ b/rt/lib/RT.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -83,12 +83,56 @@ RT - Request Tracker =head1 SYNOPSIS -A fully featured request tracker package +A fully featured request tracker package. + +This documentation describes the point-of-entry for RT's Perl API. To learn +more about what RT is and what it can do for you, visit +L. =head1 DESCRIPTION =head2 INITIALIZATION +If you're using RT's Perl libraries, you need to initialize RT before using any +of the modules. + +You have the option of handling the timing of config loading and the actual +init sequence yourself with: + + use RT; + BEGIN { + RT->LoadConfig; + RT->Init; + } + +or you can let RT do it all: + + use RT -init; + +This second method is particular useful when writing one-liners to interact with RT: + + perl -MRT=-init -e '...' + +The first method is necessary if you need to delay or conditionalize +initialization or if you want to fiddle with C<< RT->Config >> between loading +the config files and initializing the RT environment. + +=cut + +{ + my $DID_IMPORT_INIT; + sub import { + my $class = shift; + my $action = shift || ''; + + if ($action eq "-init" and not $DID_IMPORT_INIT) { + $class->LoadConfig; + $class->Init; + $DID_IMPORT_INIT = 1; + } + } +} + =head2 LoadConfig Load RT's config file. First, the site configuration file @@ -316,6 +360,16 @@ sub InitLogging { InitSignalHandlers(%arg); } +{ # Work around bug in Log::Dispatch < 2.30, wherein the short forms + # of ->warn, ->err, and ->crit do not usefully propagate out, unlike + # ->warning, ->error, and ->critical + package Log::Dispatch; + no warnings 'redefine'; + sub warn { shift->warning(@_) } + sub err { shift->error(@_) } + sub crit { shift->critical(@_) } +} + sub InitSignalHandlers { my %arg = @_; @@ -336,6 +390,11 @@ sub InitSignalHandlers { unshift @_, $RT::Logger, qw(level warning message); goto &Log::Dispatch::log; } + # Return value is used only by RT::Test to filter warnings from + # reaching the Test::NoWarnings catcher. If Log::Dispatch::log() ever + # starts returning 'IGNORE', we'll need to switch to something more + # clever. I don't expect that to happen. + return 'IGNORE'; }; #When we call die, trap it and log->crit with the value of the die. diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm index ae3eda42b..c752aa2dc 100755 --- a/rt/lib/RT/ACE.pm +++ b/rt/lib/RT/ACE.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -285,7 +285,8 @@ sub Create { ObjectId => $args{'ObjectId'}, ); if ( $self->Id ) { - return ( 0, $self->loc('That principal already has that right') ); + return ( 0, $self->loc('[_1] already has that right', + $princ_obj->Object->Name) ); } my $id = $self->SUPER::Create( PrincipalId => $princ_obj->id, diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm index 49a7f1d64..d1e0df5ad 100755 --- a/rt/lib/RT/ACL.pm +++ b/rt/lib/RT/ACL.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action.pm b/rt/lib/RT/Action.pm index 23ff82dec..dc10d0da6 100755 --- a/rt/lib/RT/Action.pm +++ b/rt/lib/RT/Action.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 5f96e0649..8566c62d5 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 cde874e45..89b7536fa 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -87,7 +87,7 @@ sub SetRecipients { =head2 SetReturnAddress -Set this message\'s return address to the apropriate queue address +Set this message's return address to the apropriate queue address =cut diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm index efd2bdaf6..80308020f 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -56,14 +56,11 @@ use MIME::Entity; =head1 NAME - RT::Action::CreateTickets - -Create one or more tickets according to an externally supplied template. - +RT::Action::CreateTickets - Create one or more tickets according to an externally supplied template =head1 SYNOPSIS - ===Create-Ticket codereview + ===Create-Ticket: codereview Subject: Code review for {$Tickets{'TOP'}->Subject} Depended-On-By: TOP Content: Someone has created a ticket. you should review and approve it, @@ -72,18 +69,14 @@ Create one or more tickets according to an externally supplied template. =head1 DESCRIPTION +The CreateTickets ScripAction allows you to create automated workflows in RT, +creating new tickets in response to actions and conditions from other +tickets. -Using the "CreateTickets" ScripAction and mandatory dependencies, RT now has -the ability to model complex workflow. When a ticket is created in a queue -that has a "CreateTickets" scripaction, that ScripAction parses its "Template" - - - -=head2 FORMAT - -CreateTickets uses the template as a template for an ordered set of tickets -to create. The basic format is as follows: +=head2 Format +CreateTickets uses the RT template configured in the scrip as a template +for an ordered set of tickets to create. The basic format is as follows: ===Create-Ticket: identifier Param: Value @@ -98,19 +91,24 @@ to create. The basic format is as follows: Content: Blah ENDOFCONTENT - -Each ===Create-Ticket: section is evaluated as its own -Text::Template object, which means that you can embed snippets -of perl inside the Text::Template using {} delimiters, but that -such sections absolutely can not span a ===Create-Ticket boundary. - -After each ticket is created, it's stuffed into a hash called %Tickets -so as to be available during the creation of other tickets during the -same ScripAction, using the key 'create-identifier', where -C is the id you put after C<===Create-Ticket:>. The hash +As shown, you can put one or more C<===Create-Ticket:> sections in +a template. Each C<===Create-Ticket:> section is evaluated as its own +L object, which means that you can embed snippets +of Perl inside the L using C<{}> delimiters, but that +such sections absolutely can not span a C<===Create-Ticket:> boundary. + +Note that each C must come right after the C on the same +line. The C param can extend over multiple lines, but the text +of the first line must start right after C. Don't try to start +your C section with a newline. + +After each ticket is created, it's stuffed into a hash called C<%Tickets> +making it available during the creation of other tickets during the +same ScripAction. The hash key for each ticket is C, +where C<[identifier]> is the value you put after C<===Create-Ticket:>. The hash is prepopulated with the ticket which triggered the ScripAction as -$Tickets{'TOP'}; you can also access that ticket using the shorthand -TOP. +C<$Tickets{'TOP'}>. You can also access that ticket using the shorthand +C. A simple example: @@ -121,22 +119,20 @@ A simple example: so they can finish their work ENDOFCONTENT - - -A convoluted example +A convoluted example: ===Create-Ticket: approval { # Find out who the administrators of the group called "HR" # of which the creator of this ticket is a member my $name = "HR"; - + my $groups = RT::Groups->new(RT->SystemUser); $groups->LimitToUserDefinedGroups(); $groups->Limit(FIELD => "Name", OPERATOR => "=", VALUE => "$name"); $groups->WithMember($TransactionObj->CreatorObj->Id); - + my $groupid = $groups->First->Id; - + my $adminccs = RT::Users->new(RT->SystemUser); $adminccs->WhoHaveRight( Right => "AdminGroup", @@ -145,10 +141,10 @@ A convoluted example IncludeSuperusers => 0, IncludeSubgroupMembers => 0, ); - - my @admins; + + our @admins; while (my $admin = $adminccs->Next) { - push (@admins, $admin->EmailAddress); + push (@admins, $admin->EmailAddress); } } Queue: ___Approvals @@ -170,50 +166,51 @@ A convoluted example Refers-To: {$Tickets{"create-approval"}->Id} Queue: ___Approvals Content-Type: text/plain - Content: - Your approval is requred for this ticket, too. + Content: Your approval is requred for this ticket, too. ENDOFCONTENT - -=head2 Acceptable fields -A complete list of acceptable fields for this beastie: +As shown above, you can include a block with Perl code to set up some +values for the new tickets. If you want to access a variable in the +template section after the block, you must scope it with C rather +than C. Just as with other RT templates, you can also include +Perl code in the template sections using C<{}>. +=head2 Acceptable Fields + +A complete list of acceptable fields: * Queue => Name or id# of a queue Subject => A text string - ! Status => A valid status. defaults to 'new' + ! Status => A valid status. Defaults to 'new' Due => Dates can be specified in seconds since the epoch to be handled literally or in a semi-free textual format which RT will attempt to parse. - - - - Starts => - Started => - Resolved => - Owner => Username or id of an RT user who can and should own + Starts => + Started => + Resolved => + Owner => Username or id of an RT user who can and should own this ticket; forces the owner if necessary + Requestor => Email address - + Cc => Email address - + AdminCc => Email address + + Cc => Email address + + AdminCc => Email address + RequestorGroup => Group name + CcGroup => Group name + AdminCcGroup => Group name - TimeWorked => - TimeEstimated => - TimeLeft => - InitialPriority => - FinalPriority => - Type => - +! DependsOn => + TimeWorked => + TimeEstimated => + TimeLeft => + InitialPriority => + FinalPriority => + Type => + +! DependsOn => +! DependedOnBy => +! RefersTo => - +! ReferredToBy => + +! ReferredToBy => +! Members => - +! MemberOf => - Content => content. Can extend to multiple lines. Everything + +! MemberOf => + Content => Content. Can extend to multiple lines. Everything within a template after a Content: header is treated - as content until we hit a line containing only + as content until we hit a line containing only ENDOFCONTENT ContentType => the content-type of the Content field. Defaults to 'text/plain' @@ -225,31 +222,22 @@ A complete list of acceptable fields for this beastie: CF-name => custom field value CustomField-name => custom field value -Fields marked with an * are required. +Fields marked with an C<*> are required. -Fields marked with a + may have multiple values, simply +Fields marked with a C<+> may have multiple values, simply by repeating the fieldname on a new line with an additional value. -Fields marked with a ! are postponed to be processed after all -tickets in the same actions are created. Except for 'Status', those -field can also take a ticket name within the same action (i.e. -the identifiers after ===Create-Ticket), instead of raw Ticket ID +Fields marked with a C have processing postponed until after all +tickets in the same actions are created. Except for C, those +fields can also take a ticket name within the same action (i.e. +the identifiers after C<===Create-Ticket:>), instead of raw ticket ID numbers. -When parsed, field names are converted to lowercase and have -s stripped. -Refers-To, RefersTo, refersto, refers-to and r-e-f-er-s-tO will all -be treated as the same thing. - - +When parsed, field names are converted to lowercase and have hyphens stripped. +C, C, C, C and C will +all be treated as the same thing. - -=head1 AUTHOR - -Jesse Vincent - -=head1 SEE ALSO - -perl(1). +=head1 METHODS =cut @@ -537,12 +525,16 @@ sub UpdateByTemplate { return @results; } -=head2 Parse TEMPLATE_CONTENT, DEFAULT_QUEUE, DEFAULT_REQEUESTOR ACTIVE +=head2 Parse + +Takes (in order) template content, a default queue, a default requestor, and +active (a boolean flag). -Parse a template from TEMPLATE_CONTENT +Parses a template in the template content, defaulting queue and requestor if +unspecified in the template to the values provided as arguments. -If $active is set to true, then we'll use Text::Template to parse the templates, -allowing you to embed active perl in your templates. +If the active flag is true, then we'll use L to parse the +templates, allowing you to embed active Perl in your templates. =cut @@ -576,9 +568,9 @@ sub Parse { Parses mulitline templates. Things like: - ===Create-Ticket ... + ===Create-Ticket: ... -Takes the same arguments as Parse +Takes the same arguments as L. =cut @@ -834,9 +826,10 @@ sub ParseLines { } -=head2 _ParseXSVTemplate +=head2 _ParseXSVTemplate -Parses a tab or comma delimited template. Should only ever be called by Parse +Parses a tab or comma delimited template. Should only ever be called by +L. =cut diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm index cb19b4f41..1300b4fe3 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -78,6 +78,7 @@ package RT::Action::EscalatePriority; use base 'RT::Action'; use strict; +use warnings; #Do what we need to do and send it out. diff --git a/rt/lib/RT/Action/ExtractSubjectTag.pm b/rt/lib/RT/Action/ExtractSubjectTag.pm index a4d6458cb..6a3898e74 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -46,9 +46,48 @@ # # END BPS TAGGED BLOCK }}} +=head1 NAME + + RT::Action::ExtractSubjectTag + +=head1 DESCRIPTION + +ExtractSubjectTag is a ScripAction which allows ticket bonding between +two RT instances or between RT and other Ticket systems like Siebel +or Remedy. + +By default this ScripAction is set up to run on every transaction on +every Correspondence. + +One can configure this ScripActions behaviour by changing the +global C<$ExtractSubjectTagMatch> in C. + +If a transaction's subject matches this regexp, we append the match +tag to the ticket's current subject. This helps ensure that +further communication on the ticket will include the remote +system's subject tag. + +If you modify this code, be careful not to remove the code where it +ensures that it only examines remote systems' tags. + +=head1 EXAMPLE + +As an example, Siebel will set their subject tag to something +like: + + B<[SR ID:1-554]> + +To record this tag in the local ticket's subject, we need to change +ExtractSubjectTagMatch to something like: + + Set($ExtractSubjectTagMatch, qr/\[[^\]]+[#:][0-9-]+\]/); + +=cut + package RT::Action::ExtractSubjectTag; use base 'RT::Action'; use strict; +use warnings; sub Describe { my $self = shift; diff --git a/rt/lib/RT/Action/LinearEscalate.pm b/rt/lib/RT/Action/LinearEscalate.pm index 0a0825e82..13913e6cd 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 f1aef4092..3553cbc39 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 b62f55599..0016a364a 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 5e7076f39..1dece60a3 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 151189033..cf6952aff 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 62832a5f4..a384af347 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Action::RecordComment; use base 'RT::Action'; use strict; +use warnings; =head1 NAME diff --git a/rt/lib/RT/Action/RecordCorrespondence.pm b/rt/lib/RT/Action/RecordCorrespondence.pm index 2faa56019..cc21503de 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,12 +49,13 @@ package RT::Action::RecordCorrespondence; use base 'RT::Action'; use strict; +use warnings; =head1 NAME RT::Action::RecordCorrespondence - An Action which can be used from an external tool, or in any situation where a ticket transaction has not -been started, to make a comment on the ticket. +been started, to create a correspondence on the ticket. =head1 SYNOPSIS diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm index 1e6607eb4..0a52904dd 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Action/SetPriority.pm b/rt/lib/RT/Action/SetPriority.pm index 783d57dd8..2043532f7 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,6 +50,7 @@ package RT::Action::SetPriority; use base 'RT::Action'; use strict; +use warnings; #Do what we need to do and send it out. diff --git a/rt/lib/RT/Action/SetStatus.pm b/rt/lib/RT/Action/SetStatus.pm index f52d401cc..be00396ce 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 1bad2bedd..b259323d7 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,6 +50,7 @@ package RT::Action::UserDefined; use base 'RT::Action'; use strict; +use warnings; =head2 Prepare diff --git a/rt/lib/RT/Approval.pm b/rt/lib/RT/Approval.pm index 6a519c1f7..dc60222a8 100644 --- a/rt/lib/RT/Approval.pm +++ b/rt/lib/RT/Approval.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 85526c1d8..6892f41ec 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 cd4519c2e..8fcaeb273 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 d2ba3ac4e..97d3cfbb5 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 000a8dc62..acc49161f 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 b22df5c2d..0a025684f 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 678aa1177..ec1ae3cae 100644 --- a/rt/lib/RT/Article.pm +++ b/rt/lib/RT/Article.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -399,9 +399,8 @@ sub AddLink { # Check that we're actually getting a valid URI my $uri_obj = RT::URI->new( $self->CurrentUser ); - $uri_obj->FromURI( $args{'Target'}||$args{'Base'} ); - unless ( $uri_obj->Resolver && $uri_obj->Scheme ) { - my $msg = $self->loc( "Couldn't resolve '[_1]' into a Link.", $args{'Target'} ); + unless ( $uri_obj->FromURI( $args{'Target'}||$args{'Base'} )) { + my $msg = $self->loc( "Couldn't resolve '[_1]' into a Link.", $args{'Target'} || $args{'Base'} ); $RT::Logger->warning( $msg ); return( 0, $msg ); } @@ -611,15 +610,6 @@ sub CustomFieldLookupType { "RT::Class-RT::Article"; } -# _LookupId is the id of the toplevel type object the customfield is joined to -# in this case, that's an RT::Class. - -sub _LookupId { - my $self = shift; - return $self->ClassObj->id; - -} - =head2 LoadByInclude Field Value Takes the name of a form field from "Include Article" diff --git a/rt/lib/RT/Articles.pm b/rt/lib/RT/Articles.pm index 47d0ebea2..d69eabf82 100644 --- a/rt/lib/RT/Articles.pm +++ b/rt/lib/RT/Articles.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm index f1d9a6342..54217b32b 100755 --- a/rt/lib/RT/Attachment.pm +++ b/rt/lib/RT/Attachment.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -266,7 +266,7 @@ sub ParentObj { =head2 Children Returns an L object which is preloaded with -all attachments objects with this attachment\'s Id as their +all attachments objects with this attachment's Id as their C. =cut @@ -499,12 +499,14 @@ L objects. =cut +our @ADDRESS_HEADERS = qw(From To Cc Bcc RT-Send-Cc RT-Send-Bcc); + sub Addresses { my $self = shift; my %data = (); my $current_user_address = lc $self->CurrentUser->EmailAddress; - foreach my $hdr (qw(From To Cc Bcc RT-Send-Cc RT-Send-Bcc)) { + foreach my $hdr (@ADDRESS_HEADERS) { my @Addresses; my $line = $self->GetHeader($hdr); diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm index 2bdbc244c..5b087a493 100755 --- a/rt/lib/RT/Attachments.pm +++ b/rt/lib/RT/Attachments.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Attribute.pm b/rt/lib/RT/Attribute.pm index cd0b54e33..10971a279 100644 --- a/rt/lib/RT/Attribute.pm +++ b/rt/lib/RT/Attribute.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 fcbd0b1b4..9c18c1a0f 100644 --- a/rt/lib/RT/Attributes.pm +++ b/rt/lib/RT/Attributes.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 2aae60e9e..403c318b4 100644 --- a/rt/lib/RT/Base.pm +++ b/rt/lib/RT/Base.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 4c05852de..b334d4d6c 100644 --- a/rt/lib/RT/CachedGroupMember.pm +++ b/rt/lib/RT/CachedGroupMember.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 f76fc5dac..4d8f356fb 100644 --- a/rt/lib/RT/CachedGroupMembers.pm +++ b/rt/lib/RT/CachedGroupMembers.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 3906b9fed..dfe8eb386 100644 --- a/rt/lib/RT/Class.pm +++ b/rt/lib/RT/Class.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -94,7 +94,7 @@ $RIGHTS = { AdminClass => 'Modify metadata and custom fields for this class', #loc_pair AdminTopics => 'Modify topic hierarchy associated with this class', #loc_pair ShowACL => 'Display Access Control List', #loc_pair - ModifyACL => 'Modify Access Control List', #loc_pair + ModifyACL => 'Create, modify and delete Access Control List entries', #loc_pair DeleteArticle => 'Delete articles in this class', #loc_pair }; @@ -218,7 +218,7 @@ sub ValidateName { return undef unless ($newval); my $obj = RT::Class->new($RT::SystemUser); $obj->Load($newval); - return undef if ( $obj->Id ); + return undef if $obj->id && ( !$self->id || $self->id != $obj->id ); return $self->SUPER::ValidateName($newval); } diff --git a/rt/lib/RT/Classes.pm b/rt/lib/RT/Classes.pm index 37dc411e8..60122c7eb 100644 --- a/rt/lib/RT/Classes.pm +++ b/rt/lib/RT/Classes.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Condition.pm b/rt/lib/RT/Condition.pm index f50d64d51..07518151f 100755 --- a/rt/lib/RT/Condition.pm +++ b/rt/lib/RT/Condition.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 73eea2b9e..2c9129c0f 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -50,6 +50,7 @@ package RT::Condition::AnyTransaction; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm index 11c40e6f5..8df73cacd 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -52,6 +52,7 @@ use base 'RT::Condition'; use RT::Date; use strict; +use warnings; sub IsApplicable { my $self = shift; diff --git a/rt/lib/RT/Condition/CloseTicket.pm b/rt/lib/RT/Condition/CloseTicket.pm index 60d5bbe26..bdeaf2d5d 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 3bf79a117..547aea25b 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -59,6 +59,7 @@ Returns true if the ticket we're operating on is overdue package RT::Condition::Overdue; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm index 4643791e3..85005482c 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::OwnerChange; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/PriorityChange.pm b/rt/lib/RT/Condition/PriorityChange.pm index aa00e609d..a600453a3 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::PriorityChange; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm index 17943cf51..a28d6df15 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::PriorityExceeds; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm index 69eea18d8..ba7a8a495 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::QueueChange; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Condition/ReopenTicket.pm b/rt/lib/RT/Condition/ReopenTicket.pm index 70722218f..a057e401d 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 10d882e8f..e84915d19 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::StatusChange; use base 'RT::Condition'; use strict; +use warnings; =head2 DESCRIPTION diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm index 8ed5e5c15..1abee67f2 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,7 @@ package RT::Condition::UserDefined; use base 'RT::Condition'; use strict; +use warnings; =head2 IsApplicable diff --git a/rt/lib/RT/Config.pm b/rt/lib/RT/Config.pm index 014c76468..0c04b9191 100644 --- a/rt/lib/RT/Config.pm +++ b/rt/lib/RT/Config.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -303,15 +303,6 @@ our %META = ( }, # User overridable options for RT at a glance - DefaultSummaryRows => { - Section => 'RT at a glance', #loc - Overridable => 1, - SortOrder => 1, - Widget => '/Widgets/Form/Integer', - WidgetArguments => { - Description => 'Number of search results', #loc - }, - }, HomePageRefreshInterval => { Section => 'RT at a glance', #loc Overridable => 1, @@ -446,10 +437,13 @@ our %META = ( Description => 'Date format', #loc Callback => sub { my $ret = { Values => [], ValuesLabel => {}}; my $date = RT::Date->new($HTML::Mason::Commands::session{'CurrentUser'}); - $date->Set; + $date->SetToNow; foreach my $value ($date->Formatters) { push @{$ret->{Values}}, $value; - $ret->{ValuesLabel}{$value} = $date->$value(); + $ret->{ValuesLabel}{$value} = $date->Get( + Format => $value, + Timezone => 'user', + ); } return $ret; }, @@ -1215,7 +1209,7 @@ sub SetFromConfig { # if the entry has a trailing '::' then # it is a link to another name space if ( substr( $k, -2 ) eq '::') { - $name = $self->__GetNameByRef( $ref, $k ); + $name = $self->__GetNameByRef( $ref, $pack eq 'main::'? $k : $pack.$k ); return $name if $name; } @@ -1230,13 +1224,19 @@ sub SetFromConfig { # Otherwie 5.10 goes boom. maybe we should skip any # reference next if ref($entry) eq 'SCALAR' || ref($entry) eq 'REF'; - my $entry_ref = *{$entry}{ ref($ref) }; + + my $ref_type = ref($ref); + + # regex/arrayref/hashref/coderef are stored in SCALAR glob + $ref_type = 'SCALAR' if $ref_type eq 'REF'; + + my $entry_ref = *{$entry}{ $ref_type }; next unless $entry_ref; # if references are equal then we've found if ( $entry_ref == $ref ) { $last_pack = $pack; - return ( $REF_SYMBOLS{ ref($ref) } || '*' ) . $pack . $k; + return ( $REF_SYMBOLS{ $ref_type } || '*' ) . $pack . $k; } } return ''; diff --git a/rt/lib/RT/Crypt/GnuPG.pm b/rt/lib/RT/Crypt/GnuPG.pm index 233047820..6164a4241 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -905,11 +905,25 @@ sub FindProtectedParts { # sense) unnecessarily applies a base64 transfer encoding to PGP # mail (whose content is already base64-encoded). if ( $entity->bodyhandle->is_encoded and $entity->head->mime_encoding ) { - pipe( my ($read_decoded, $write_decoded) ); my $decoder = MIME::Decoder->new( $entity->head->mime_encoding ); if ($decoder) { - eval { $decoder->decode($io, $write_decoded) }; - $io = $read_decoded; + local $@; + eval { + my $buf = ''; + open my $fh, '>', \$buf + or die "Couldn't open scalar for writing: $!"; + binmode $fh, ":raw"; + $decoder->decode($io, $fh); + close $fh or die "Couldn't close scalar: $!"; + + open $fh, '<', \$buf + or die "Couldn't re-open scalar for reading: $!"; + binmode $fh, ":raw"; + $io = $fh; + 1; + } or do { + $RT::Logger->error("Couldn't decode body: $@"); + } } } diff --git a/rt/lib/RT/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm index 7d24779bf..fa0d4ca7a 100755 --- a/rt/lib/RT/CurrentUser.pm +++ b/rt/lib/RT/CurrentUser.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -240,9 +240,12 @@ sub loc { my $handle = $self->LanguageHandle; if (@_ == 1) { - # pre-scan the lexicon hashes to return _AUTO keys verbatim, - # to keep locstrings containing '[' and '~' from tripping over Maketext - return $_[0] unless grep exists $_->{$_[0]}, @{ $handle->_lex_refs }; + # If we have no [_1] replacements, and the key does not appear + # in the lexicon, unescape (using ~) and return it verbatim, as + # an optimization. + my $unescaped = $_[0]; + $unescaped =~ s!~(.)!$1!g; + return $unescaped unless grep exists $_->{$_[0]}, @{ $handle->_lex_refs }; } return $handle->maketext(@_); diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm index 8d16c1fe1..01b4970c4 100644 --- a/rt/lib/RT/CustomField.pm +++ b/rt/lib/RT/CustomField.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -710,7 +710,7 @@ sub ValidateValuesClass { my $self = shift; my $class = shift; - return 1 if !defined $class || $class eq 'RT::CustomFieldValues'; + return 1 if !$class || $class eq 'RT::CustomFieldValues'; return 1 if grep $class eq $_, RT->Config->Get('CustomFieldValuesSources'); return undef; } @@ -1556,9 +1556,8 @@ sub _CanonicalizeValueDate { my $DateObj = RT::Date->new( $self->CurrentUser ); $DateObj->Set( Format => 'unknown', Value => $args->{'Content'}, - Timezone => 'UTC', ); - $args->{'Content'} = $DateObj->Date( Timezone => 'UTC' ); + $args->{'Content'} = $DateObj->Date( Timezone => 'user' ); } =head2 MatchPattern STRING @@ -1666,14 +1665,13 @@ sub ValuesForObject { my $object = shift; my $values = RT::ObjectCustomFieldValues->new($self->CurrentUser); - unless ($self->CurrentUserHasRight('SeeCustomField')) { + unless ($self->id and $self->CurrentUserHasRight('SeeCustomField')) { # Return an empty object if they have no rights to see + $values->Limit( FIELD => "id", VALUE => 0, SUBCLAUSE => "ACL" ); return ($values); } - - + $values->LimitToCustomField($self->Id); - $values->LimitToEnabled(); $values->LimitToObject($object); return ($values); @@ -1690,6 +1688,7 @@ Examples: 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", # loc 'RT::User' => "Users", # loc 'RT::Group' => "Groups", # loc + 'RT::Queue' => "Queues", # loc This is a class method. @@ -2103,6 +2102,8 @@ sub _CoreAccessible { {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, Repeated => {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, + ValuesClass => + {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, BasedOn => {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Description => diff --git a/rt/lib/RT/CustomFieldValue.pm b/rt/lib/RT/CustomFieldValue.pm index 26df55ae4..6dffc3455 100644 --- a/rt/lib/RT/CustomFieldValue.pm +++ b/rt/lib/RT/CustomFieldValue.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 90a163702..e3380b7e5 100644 --- a/rt/lib/RT/CustomFieldValues.pm +++ b/rt/lib/RT/CustomFieldValues.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 61125146f..e6bf2f87d 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -82,7 +82,7 @@ C. =head1 SEE ALSO -L +F =cut diff --git a/rt/lib/RT/CustomFieldValues/Groups.pm b/rt/lib/RT/CustomFieldValues/Groups.pm index 2519e2917..feeeadbd7 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 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 d4a5bc740..017018ef4 100644 --- a/rt/lib/RT/CustomFields.pm +++ b/rt/lib/RT/CustomFields.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) diff --git a/rt/lib/RT/Dashboard.pm b/rt/lib/RT/Dashboard.pm index 2e2bbc489..349864e12 100644 --- a/rt/lib/RT/Dashboard.pm +++ b/rt/lib/RT/Dashboard.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -109,7 +109,7 @@ An object of this class is called "dashboard" =cut -sub ObjectName { "dashboard" } +sub ObjectName { "dashboard" } # loc sub SaveAttribute { my $self = shift; diff --git a/rt/lib/RT/Dashboard/Mailer.pm b/rt/lib/RT/Dashboard/Mailer.pm index 40b53b111..9d28c4942 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-2012 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -59,6 +59,7 @@ use RT::Dashboard; use RT::Interface::Web::Handler; use RT::Interface::Web; use File::Temp 'tempdir'; +use HTML::Scrubber; sub MailDashboards { my $self = shift; @@ -248,6 +249,8 @@ SUMMARY } } + $content = ScrubContent($content); + $RT::Logger->debug("Got ".length($content)." characters of output."); $content = HTML::RewriteAttributes::Links->rewrite( @@ -393,7 +396,7 @@ sub BuildEmail { Type => $mimetype, Encoding => $encoding, Disposition => 'inline', - Name => $filename, + Name => RT::Interface::Email::EncodeToMIME( String => $filename ), 'Content-Id' => $cid_of{$uri}, ); @@ -408,9 +411,9 @@ sub BuildEmail { ); my $entity = MIME::Entity->build( - From => $args{From}, - To => $args{To}, - Subject => $args{Subject}, + From => Encode::encode_utf8($args{From}), + To => Encode::encode_utf8($args{To}), + Subject => RT::Interface::Email::EncodeToMIME( String => $args{Subject} ), Type => "multipart/mixed", ); @@ -463,6 +466,33 @@ sub BuildEmail { } { + my $scrubber; + + sub _scrubber { + unless ($scrubber) { + $scrubber = HTML::Scrubber->new; + # Allow everything by default, except JS attributes ... + $scrubber->default( + 1 => { + '*' => 1, + map { ("on$_" => 0) } + qw(blur change click dblclick error focus keydown keypress keyup load + mousedown mousemove mouseout mouseover mouseup reset select submit unload) + } + ); + # ... and
+ +
    <%perl> for my $category (@$Principals) { @@ -93,8 +125,7 @@ for my $category (@$Principals) { <%perl> while ( my $obj = $collection->Next ) { my $display = ref $col eq 'CODE' ? $col->($obj) : $obj->$col; - my $id = "acl-$name-" . $obj->PrincipalId; - $id =~ s/[^a-zA-Z0-9\-]/_/g; + my $id = "acl-" . $obj->PrincipalId;
  • <% $loc ? loc($display) : $display %>
  • <%perl> @@ -136,8 +167,7 @@ for my $category (@$Principals) { my ($name, $collection, $col, $loc) = @$category; while ( my $obj = $collection->Next ) { my $display = ref $col eq 'CODE' ? $col->($obj) : $obj->$col; - my $id = "acl-$name-" . $obj->PrincipalId; - $id =~ s/[^a-zA-Z0-9\-]/_/g; + my $id = "acl-" . $obj->PrincipalId;
    diff --git a/rt/share/html/Admin/Elements/EditRightsCategoryTabs b/rt/share/html/Admin/Elements/EditRightsCategoryTabs index 786cafdd8..60d0a4412 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 858ab9d9b..be475076e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2fdcae670..b09eca910 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2f681aca3..28fc59c49 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 28563c6a4..1a163d0d8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 afb745e0d..7169bda94 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1d1cd392d..ccec9986f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 701ffbfa7..042628c1c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ebe7c73bc..f5bb866de 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -63,13 +63,17 @@ <&|/l&>Content: - + <%INIT> -$Type = 'Perl' if !$Type; +unless ($Type) { + $Type = $session{'CurrentUser'}->HasRight(Right => 'ExecuteCode', Object => $RT::System) ? + 'Perl' : 'Simple'; +} @@ -77,5 +81,5 @@ $Type = 'Perl' if !$Type; $Name => '' $Description => '' $Content => '' -$Type => 'Perl' +$Type => '' diff --git a/rt/share/html/Admin/Elements/PickCustomFields b/rt/share/html/Admin/Elements/PickCustomFields index 1c58b6ab4..7ed29993c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 24a9e69a4..6fccd49fa 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 821ed5728..52257aebe 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b8ef1b1d8..a00f84ff7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7f4e45eb5..70b7be61f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 514264b2e..7caa4eaef 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5034c4dfb..6484def34 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 50175cab9..bf4cce1cb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e839f754a..2661a02fc 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8e51fa6b7..8e8c7c9af 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e0f7d22b3..08fd8e901 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f170b824f..7365f5a6e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8778daec0..a3a649291 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 73f5bced3..161c09122 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f0adab10a..e13726d13 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 750815b07..a3f4431b5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1023df6e0..a962e6eeb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 bf2824397..ae2639f6c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 369dee9af..78624eea3 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8d45c7de1..5da3baace 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1851f23f8..7089362ff 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2ec319a63..71b58cfed 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -80,7 +80,6 @@ $EmailAddress $Type => 'public' <%INIT> -return if ($m->cache_self( key => join("||",$EmailAddress,$Type, $$), expires_in => '2 minutes')); require RT::Crypt::GnuPG; my %res = RT::Crypt::GnuPG::GetKeyInfo( $EmailAddress, $Type ); diff --git a/rt/share/html/Admin/Global/CustomFields/Class-Article.html b/rt/share/html/Admin/Global/CustomFields/Class-Article.html index 771e9efac..3f8a52c65 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3356a21d4..8466ff21e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 371b3d6ea..4bdf702fc 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ce642935f..45c8de050 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6eda3840f..6581bd3ed 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a1046d1da..bb065db62 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e27e93a1d..1a1406a0c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 702a2e933..cccd894b1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3dca78fad..9b3cb96ee 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -60,21 +60,21 @@ <%init> my @actions; -my @items = map { [ "component-$_", $_ ] } sort @{ RT->Config->Get('HomepageComponents') }; +my @items = map { [ "component-$_", loc($_) ] } sort @{ RT->Config->Get('HomepageComponents') }; my $sys = RT::System->new( $session{'CurrentUser'} ); # XXX: put this in savedsearches_to_portlet_items for ( $m->comp( "/Search/Elements/SearchesForObject", Object => $sys )) { - my ( $desc, $search ) = @$_; + my ( $desc, $loc_desc, $search ) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; if ( $SearchType eq 'Ticket' ) { - push @items, [ "system-$desc", $desc ]; + push @items, [ "system-$desc", $loc_desc ]; } else { my $oid = ref($sys) . '-' . $sys->Id . '-SavedSearch-' . $search->Id; - my $type = - ( $SearchType eq 'Ticket' ) - ? 'Saved Search' : $SearchType; # loc - push @items, [ "saved-$oid", loc($type) . ": $desc" ]; + my $type = ( $SearchType eq 'Ticket' ) + ? 'Saved Search' # loc + : $SearchType; + push @items, [ "saved-$oid", loc($type) . ": $loc_desc" ]; } } diff --git a/rt/share/html/Admin/Global/Scrip.html b/rt/share/html/Admin/Global/Scrip.html index 3a6ed107d..a730b8d0e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 808913ba2..b9fd279ff 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 70b69053b..27b2a96c2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -80,7 +80,7 @@ if ($Create) { else { if (defined ($Template) && $Template eq 'new') { - my ($val, $msg) = $TemplateObj->Create(Queue => $Queue, Name => $Name); + my ($val, $msg) = $TemplateObj->Create(Queue => $Queue, Name => $Name, Type => $Type); Abort(loc("Could not create template: [_1]", $msg)) unless ($val); push @results, $msg; } @@ -92,7 +92,7 @@ else { } if ($TemplateObj->Id()) { - my @attribs = qw( Description Content Queue Name Type ); + my @attribs = qw( Name Description Queue Type Content ); my @aresults = UpdateRecordObject( AttributesRef => \@attribs, Object => $TemplateObj, ARGSRef => \%ARGS); @@ -108,4 +108,5 @@ $Queue => '' $Template => '' $Create => '' $Name => '' +$Type => '' diff --git a/rt/share/html/Admin/Global/Templates.html b/rt/share/html/Admin/Global/Templates.html index 2ff1393cf..9ef9f835e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b1a1d9796..9ad584b50 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f0d094dd4..55babf0b0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0f245f069..e382203fc 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4d9c1187f..b3f0426f7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 9a8ca015a..91a4fcce1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3ba5b657b..24d575e7a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4491a71c8..b3bc13faa 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8e6b09164..e2c4b9c91 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ef7395f3e..b86571f1a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5b9cfd24a..3524c5b45 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 88d7b7148..7d1e60198 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4c5ca071b..72c0f2eff 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 49a16fe35..3a725b09a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c2cf09422..49736a45a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -199,10 +199,9 @@ if ( $QueueObj->Id ) { ARGSRef => \%ARGS, ); - $ARGS{'Lifecycle'} = undef if defined $ARGS{'Lifecycle'} and $ARGS{'Lifecycle'} eq "default"; push @results, UpdateRecordObject( AttributesRef => \@attribs, - Object => $QueueObj, + Object => $QueueObj, ARGSRef => \%ARGS ); diff --git a/rt/share/html/Admin/Queues/People.html b/rt/share/html/Admin/Queues/People.html index 729749c33..e7cdd47e1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ac0a783a7..fd487a157 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 56e44664a..326d23fe0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3dd99e1d7..50c29dc24 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -79,7 +79,7 @@ my @results; if ( !$Create ) { if ( $Template eq 'new' ) { my ( $val, $msg ) - = $TemplateObj->Create( Queue => $Queue, Name => $Name ); + = $TemplateObj->Create( Queue => $Queue, Name => $Name, Type => $Type ); Abort( loc( "Could not create template: [_1]", $msg ) ) unless ($val); push @results, $msg; } else { @@ -92,7 +92,7 @@ if ( $TemplateObj->Id() ) { $Queue = $TemplateObj->Queue; $QueueObj = $TemplateObj->QueueObj; - my @attribs = qw( Description Content Queue Name Type ); + my @attribs = qw( Name Description Queue Type Content ); my @aresults = UpdateRecordObject( AttributesRef => \@attribs, Object => $TemplateObj, ARGSRef => \%ARGS @@ -121,4 +121,5 @@ $Queue => '' $Template => '' $Create => undef $Name => undef +$Type => undef diff --git a/rt/share/html/Admin/Queues/Templates.html b/rt/share/html/Admin/Queues/Templates.html index 7df0ed2e0..1d1f19dc7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a7980dcbf..ec908672f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c7a4701b2..7f267021b 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ed7d4651b..bedbba54b 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Admin/Tools/Queries.html b/rt/share/html/Admin/Tools/Queries.html index dbc6fc5fe..6304ffbf5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0d24fa0af..a070c2342 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5690377cd..c43e81048 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 429313755..93319c491 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ae3b96e9b..6197d395d 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0da910d77..cc6dd7dab 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -49,6 +49,6 @@ $Object => undef % my $name = (defined $Object->Filename and length $Object->Filename) ? $Object->Filename : loc("(no value)"); - + <% loc('Attachment') %>(<% loc('id') %>:<% $Object->id %>, <% loc('Filename') %>: <% $name %>) 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 35f1aa8d8..1786959b2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d7627eb14..e8808e5cd 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3c2e1e7b6..fa7165dc6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d9926af9c..8456a8dd7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7719ec027..3f064b0f6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7bae913ae..0521075c0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e55f60eb0..b9d6fe6d6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 955206420..49c42340c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 81b99ec19..01e4d167f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 11888cac5..a3f910edb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 88612704a..c14847ebd 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 bebb163eb..cca0606a8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ee58c4485..fbf1a3cca 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 fb51038ee..2b91b6631 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 443e189a9..cff33fa1c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 05dde17f2..d66955660 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0fcd63b60..f9055d3ad 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -83,7 +83,7 @@ my $portlets = $UserObj->Preferences('HomepageSettings', $default_portlets ? $d my %allowed_components = map {$_ => 1} @{ RT->Config->Get('HomepageComponents') }; my @items; -push @items, map {["component-$_", $_]} sort keys %allowed_components; +push @items, map {["component-$_", loc($_)]} sort keys %allowed_components; my $sys = RT::System->new( RT::CurrentUser->new($UserObj) ); my @objs = ($sys); @@ -92,16 +92,16 @@ push @objs, RT::SavedSearch->new( RT::CurrentUser->new( $UserObj ) )->ObjectsFor for my $object (@objs) { for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) { - my ($desc, $search) = @$_; + my ($desc, $loc_desc, $search) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; if ($object eq $sys && $SearchType eq 'Ticket') { - push @items, ["system-$desc", $desc]; + push @items, ["system-$desc", $loc_desc]; } else { my $oid = ref($object).'-'.$object->Id.'-SavedSearch-'.$search->Id; my $type = ($SearchType eq 'Ticket') ? 'Saved Search' : $SearchType; # loc - push @items, ["saved-$oid", loc($type).": $desc"]; + push @items, ["saved-$oid", loc($type).": $loc_desc"]; } } } diff --git a/rt/share/html/Admin/Users/index.html b/rt/share/html/Admin/Users/index.html index adcfeb5b9..de9a55d36 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6559bec2f..faf7237c4 100644 --- a/rt/share/html/Admin/autohandler +++ b/rt/share/html/Admin/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3dd8ab4f9..09d0908db 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f98998650..562487357 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4111680a4..4df5ff1b7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 169c25cb6..475cb428b 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 26dd070f2..70d22eb94 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3e0f2c6db..8a6df139a 100644 --- a/rt/share/html/Approvals/autohandler +++ b/rt/share/html/Approvals/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c72e9afe2..09392c910 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7abd824d5..fc695c6cb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b80dc1c5e..1b455b9b3 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d14c33076..2d27b03f8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 256d81610..ab12b394a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 db719eb2e..1eee87c1a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 03b99c8d3..1d86eb5be 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 82e907135..e5f9fade3 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c2fd1efed..8e6cc4eb5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2f0e7869e..d4ab9f949 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2a9d14506..b86698660 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c42fae1b5..8bf070adb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 674a0ffa7..01bd592ec 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6ca74bf61..a419f2a72 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2e48ac949..f90289022 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8ced74b1c..b9485e27d 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 377cdb1f0..6430691c6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 31aae36eb..2c805a7c0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5d9eba2fc..a7b15d6fc 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f3618feda..b64a5a9fb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 72fd32464..51c1fa12e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1c2873f18..449fd4d28 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 49507d4a8..d1060e68a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -59,4 +59,5 @@
% unless ( $have_classes ) { <&|/l&>Permission Denied +

<&|/l&>To create an Article, you must first create a Class and have access to that Class.

% } diff --git a/rt/share/html/Articles/Article/Search.html b/rt/share/html/Articles/Article/Search.html index f995d41a7..a8c7d8034 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -75,7 +75,7 @@ % } <& /Elements/ListActions, actions => \@results &> - + % if ($articles->BuildSelectCountQuery =~ /WHERE/i) {

<&|/l&>Search results

diff --git a/rt/share/html/Articles/Elements/BeforeMessageBox b/rt/share/html/Articles/Elements/BeforeMessageBox index 8ed04513f..751f9d60e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6524f2615..32b7dfab5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 effd50315..fd9a546a2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c8e5e5847..d15d48943 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -47,7 +47,7 @@ %# END BPS TAGGED BLOCK }}}
- + % if ($class or $topic) { % } - 
<%args> $topic => "" diff --git a/rt/share/html/Articles/Elements/IncludeArticle b/rt/share/html/Articles/Elements/IncludeArticle index f19815f58..25b68e724 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 444b2d89d..a379063b8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f0c0d1c89..f531f67c2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0ce90609e..3bc970059 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 da7c5f213..2ed578cd7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7b6d550be..decaa902e 100644 --- a/rt/share/html/Articles/Elements/ShowTopicLink +++ b/rt/share/html/Articles/Elements/ShowTopicLink @@ -1,3 +1,50 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2013 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 }}} <%args> $Topic $Class => 0 diff --git a/rt/share/html/Articles/Elements/UpdatedArticles b/rt/share/html/Articles/Elements/UpdatedArticles index f2c5226be..777bc48c7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5187315f7..da731abff 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c4a1eab4e..958c286e6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e96afbd6a..966a03f18 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8a54754af..09480b9a1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4d0d9e5e2..d5c041634 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a7398bccc..eba8d502a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 523790bba..1c59937d0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 56c757bf0..a1d41bb24 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 dbdfe320e..6d3112910 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 92f2488bb..f0af23a9f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ce2c24cd2..8fc42eefb 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 95cf318aa..e680cd10c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c00503143..2b0a73e15 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -93,8 +93,8 @@ my @components = @{ RT->Config->Get('HomepageComponents') }; for my $desc (@components) { my $name = "component-$desc"; - push @items, [$name, $desc]; - $desc_of{$name} = $desc; + push @items, [$name, loc($desc)]; + $desc_of{$name} = loc($desc); $still_exists{$name} = 1; } @@ -106,7 +106,8 @@ for my $dashboard (@dashboards) { next if $dashboard->Id == $Dashboard->Id; my $name = 'dashboard-' . $dashboard->Id . '-' . $dashboard->Privacy; - my $desc = "Dashboard: " . $dashboard->Name; + my $type = loc('Dashboard'); # loc + my $desc = "$type: " . $dashboard->Name; push @items, [$name, $desc]; $desc_of{$name} = $desc; $still_exists{$name} = 1; @@ -121,10 +122,12 @@ push @objs, RT::SavedSearch->new( $session{CurrentUser} )->ObjectsForLoading for my $object (@objs) { for ($m->comp("/Search/Elements/SearchesForObject", Object => $object)) { - my ($desc, $search) = @$_; + my ($desc, $loc_desc, $search) = @$_; my $SearchType = $search->Content->{'SearchType'} || 'Ticket'; - my $type = ($SearchType eq 'Ticket') ? 'Saved Search' : $SearchType; # loc - $desc = "$type: $desc"; + my $type = ( $SearchType eq 'Ticket' ) + ? 'Saved Search' # loc + : $SearchType; + $desc = loc($type) . ": $loc_desc"; my $privacy = $Dashboard->_build_privacy($object); my $name = 'search-' . $search->Id . '-' . $privacy; push @items, [$name, $desc]; diff --git a/rt/share/html/Dashboards/Render.html b/rt/share/html/Dashboards/Render.html index 59861ebbe..a99bf7485 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3a57102c7..02800d82f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f4d0c6a96..97a1ad16d 100644 --- a/rt/share/html/Dashboards/dhandler +++ b/rt/share/html/Dashboards/dhandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f6a352ef7..6930277c7 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6db45ed88..a9190491f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -64,7 +64,7 @@ unless ($OCFV->id) { my $content_type = $OCFV->ContentType || 'text/plain'; if (RT->Config->Get('AlwaysDownloadAttachments')) { - $r->headers_out->{'Content-Disposition'} = "attachment; filename=" . $OCFV->Content; + $r->headers_out->{'Content-Disposition'} = "attachment"; } elsif (!RT->Config->Get('TrustHTMLAttachments')) { $content_type = 'text/plain' if ($content_type =~ /^text\/html/i); diff --git a/rt/share/html/Elements/BevelBoxRaisedEnd b/rt/share/html/Elements/BevelBoxRaisedEnd index 369dc9560..eb97f32fb 100755 --- a/rt/share/html/Elements/BevelBoxRaisedEnd +++ b/rt/share/html/Elements/BevelBoxRaisedEnd @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 51038b89b..e87c84af5 100755 --- a/rt/share/html/Elements/BevelBoxRaisedStart +++ b/rt/share/html/Elements/BevelBoxRaisedStart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a3c19430e..b62b321d9 100644 --- a/rt/share/html/Elements/CSRF +++ b/rt/share/html/Elements/CSRF @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 bd48bc5cd..f9508abea 100755 --- a/rt/share/html/Elements/Callback +++ b/rt/share/html/Elements/Callback @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c72b40126..dd82a245b 100755 --- a/rt/share/html/Elements/Checkbox +++ b/rt/share/html/Elements/Checkbox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 20586f9c3..ffb7441f0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c2c1c5364..e00370487 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 f91520952..bbcfd2227 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 402a272b4..b47c7aabd 100644 --- a/rt/share/html/Elements/CollectionList +++ b/rt/share/html/Elements/CollectionList @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -111,7 +111,7 @@ if ($Class =~ /::/) { # older passed in value $Class =~ s/:/_/g; } -$m->out(''); if ( $ShowHeader ) { diff --git a/rt/share/html/Elements/CollectionListPaging b/rt/share/html/Elements/CollectionListPaging index 26c082348..8e6aebde7 100644 --- a/rt/share/html/Elements/CollectionListPaging +++ b/rt/share/html/Elements/CollectionListPaging @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 878950bff..7b127e90e 100644 --- a/rt/share/html/Elements/ColumnMap +++ b/rt/share/html/Elements/ColumnMap @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -96,24 +96,34 @@ my $COLUMN_MAP = { attribute => sub { return shift @_ }, title => sub { return pop @_ }, value => sub { + # Cache the CF object on a per-request basis, to avoid + # having to load it for every row + my $key = join("-","CF", + $_[0]->CustomFieldLookupType, + $_[0]->CustomFieldLookupId, + $_[-1]); + + my $cf = $m->notes($key); + unless ($cf) { + $cf = $_[0]->LoadCustomFieldByIdentifier($_[-1]); + $m->notes($key, $cf); + } + # Display custom field contents, separated by newlines. # For Image custom fields we also show a thumbnail here. - my $object = shift; - my $cfname = pop; - my $values = $object->CustomFieldValues( $cfname ); + my $values = $cf->ValuesForObject( $_[0] ); return if $values->Count == 0; my @values; # it is guaranteed to be the same type for all fields, right? my $v = $values->First; - my $cftype = $v->CustomFieldObj->Type; do { - if ($cftype eq 'Image') { + if ($v->Type eq 'Image') { push @values, \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $v )); - } elsif ( $cftype eq 'Date' or $cftype eq 'DateTime' ) { + } elsif ( $v->Type eq 'Date' or $v->Type eq 'DateTime' ) { # then actually return the date object; # ProcessColumnMapValue will stringify it my $DateObj = RT::Date->new( $session{'CurrentUser'} ); @@ -186,8 +196,10 @@ $m->callback( COLUMN_MAP => $COLUMN_MAP, CallbackName => 'Once', CallbackOnce => $m->callback( COLUMN_MAP => $COLUMN_MAP ); # first deal with class specific things -my $class_map = $m->comp("/Elements/$Class/ColumnMap", Attr => $Attr, Name => $Name ); -return $class_map if defined $class_map; +if (RT::Interface::Web->ComponentPathIsSafe($Class) and $m->comp_exists("/Elements/$Class/ColumnMap")) { + my $class_map = $m->comp("/Elements/$Class/ColumnMap", Attr => $Attr, Name => $Name ); + return $class_map if defined $class_map; +} return GetColumnMapEntry( Map => $COLUMN_MAP, Name => $Name, Attribute => $Attr ); diff --git a/rt/share/html/Elements/CreateTicket b/rt/share/html/Elements/CreateTicket index 6702abcbf..ed15cd76b 100755 --- a/rt/share/html/Elements/CreateTicket +++ b/rt/share/html/Elements/CreateTicket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4867a75a0..e271bf1c8 100644 --- a/rt/share/html/Elements/Dashboards +++ b/rt/share/html/Elements/Dashboards @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8b87fd425..e8de7afb1 100644 --- a/rt/share/html/Elements/EditCustomField +++ b/rt/share/html/Elements/EditCustomField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 911e60707..32a3b9fa0 100644 --- a/rt/share/html/Elements/EditCustomFieldAutocomplete +++ b/rt/share/html/Elements/EditCustomFieldAutocomplete @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0a2098556..c74bfd0bc 100644 --- a/rt/share/html/Elements/EditCustomFieldBinary +++ b/rt/share/html/Elements/EditCustomFieldBinary @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -47,7 +47,7 @@ %# END BPS TAGGED BLOCK }}} % while ( $Values and my $value = $Values->Next ) { %# XXX - let user download the file(s) here? -<% $value->Content %>
+<% $value->Content %>
% } % if (!$MaxValues || !$Values || $Values->Count < $MaxValues) { diff --git a/rt/share/html/Elements/EditCustomFieldCombobox b/rt/share/html/Elements/EditCustomFieldCombobox index 6d8f74376..f382a4084 100644 --- a/rt/share/html/Elements/EditCustomFieldCombobox +++ b/rt/share/html/Elements/EditCustomFieldCombobox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c66640fab..9e190be5d 100644 --- a/rt/share/html/Elements/EditCustomFieldDate +++ b/rt/share/html/Elements/EditCustomFieldDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -46,11 +46,11 @@ %# %# END BPS TAGGED BLOCK }}} % my $name = $NamePrefix.$CustomField->Id.'-Values'; -<& /Elements/SelectDate, Name => "$name", current => 0, ShowTime => 0 &> (<%$DateObj->AsString(Time => 0)%>) +<& /Elements/SelectDate, Name => "$name", current => 0, ShowTime => 0 &> (<%$DateObj->AsString(Time => 0, Timezone => 'utc')%>) <%INIT> my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); -$DateObj->Set( Format => 'unknown', Value => $Default ); +$DateObj->Set( Format => 'unknown', Value => $Default, Timezone => 'utc' ); <%ARGS> $Object => undef diff --git a/rt/share/html/Elements/EditCustomFieldDateTime b/rt/share/html/Elements/EditCustomFieldDateTime index a558884b0..3d94855f7 100644 --- a/rt/share/html/Elements/EditCustomFieldDateTime +++ b/rt/share/html/Elements/EditCustomFieldDateTime @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 7a5a458bb..b6810b6ec 100644 --- a/rt/share/html/Elements/EditCustomFieldFreeform +++ b/rt/share/html/Elements/EditCustomFieldFreeform @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ae57fce87..9fcc264ef 100644 --- a/rt/share/html/Elements/EditCustomFieldIPAddress +++ b/rt/share/html/Elements/EditCustomFieldIPAddress @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ae57fce87..9fcc264ef 100644 --- a/rt/share/html/Elements/EditCustomFieldIPAddressRange +++ b/rt/share/html/Elements/EditCustomFieldIPAddressRange @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 09cbf85f3..9316fbc71 100644 --- a/rt/share/html/Elements/EditCustomFieldImage +++ b/rt/share/html/Elements/EditCustomFieldImage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ed6bb146f..8668bc427 100644 --- a/rt/share/html/Elements/EditCustomFieldSelect +++ b/rt/share/html/Elements/EditCustomFieldSelect @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 65a5e3bcf..c169740d5 100644 --- a/rt/share/html/Elements/EditCustomFieldText +++ b/rt/share/html/Elements/EditCustomFieldText @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a07317e2f..ac2de26a7 100644 --- a/rt/share/html/Elements/EditCustomFieldWikitext +++ b/rt/share/html/Elements/EditCustomFieldWikitext @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 40667a869..6a3f4b6b5 100755 --- a/rt/share/html/Elements/EditLinks +++ b/rt/share/html/Elements/EditLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 06e816d9e..d7f48bf40 100644 --- a/rt/share/html/Elements/EditPassword +++ b/rt/share/html/Elements/EditPassword @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 40e3b677a..fc8781322 100644 --- a/rt/share/html/Elements/EditTimeValue +++ b/rt/share/html/Elements/EditTimeValue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 67eb57c2c..2830a721d 100644 --- a/rt/share/html/Elements/EmailInput +++ b/rt/share/html/Elements/EmailInput @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 87dfd0245..838432069 100755 --- a/rt/share/html/Elements/Error +++ b/rt/share/html/Elements/Error @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -52,6 +52,8 @@ <& /Elements/Tabs &> % } +<& /Elements/ListActions, actions => $Actions &> +
<%$Why%>
@@ -64,6 +66,7 @@ $m->abort(); <%args> +$Actions => [] $Code => undef $Details => '' $Title => loc("RT Error") diff --git a/rt/share/html/Elements/Footer b/rt/share/html/Elements/Footer index 76819747c..15e96c9b2 100755 --- a/rt/share/html/Elements/Footer +++ b/rt/share/html/Elements/Footer @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3b54da192..8d04b7f30 100644 --- a/rt/share/html/Elements/Framekiller +++ b/rt/share/html/Elements/Framekiller @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 23276c251..f19e02684 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d61cde513..6d287176c 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 244b46464..a930a3ecd 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2f3f1035d..7e0aa2d1b 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 52db37532..a602d8843 100755 --- a/rt/share/html/Elements/GotoTicket +++ b/rt/share/html/Elements/GotoTicket @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 65d06f879..d97e626a1 100755 --- a/rt/share/html/Elements/Header +++ b/rt/share/html/Elements/Header @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d5741f4e6..bfb4a8cbb 100644 --- a/rt/share/html/Elements/HeaderJavascript +++ b/rt/share/html/Elements/HeaderJavascript @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8929ff731..805bd2ef2 100755 --- a/rt/share/html/Elements/ListActions +++ b/rt/share/html/Elements/ListActions @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -59,16 +59,19 @@ # backward compatibility, don't use array in new code, but use keyed hash if ( ref( $session{'Actions'} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'} }; + $session{'i'}++; } if ( ref( $session{'Actions'}{''} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'}{''} }; + $session{'i'}++; } my $actions_pointer = $DECODED_ARGS->{'results'}; if ($actions_pointer && ref( $session{'Actions'}->{$actions_pointer} ) eq 'ARRAY' ) { unshift @actions, @{ delete $session{'Actions'}->{$actions_pointer} }; + $session{'i'}++; } # XXX: run callbacks per row really crazy idea diff --git a/rt/share/html/Elements/ListMenu b/rt/share/html/Elements/ListMenu index 7c9af5c5d..34ef1c705 100644 --- a/rt/share/html/Elements/ListMenu +++ b/rt/share/html/Elements/ListMenu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b3f1a24ab..c1b358880 100755 --- a/rt/share/html/Elements/Login +++ b/rt/share/html/Elements/Login @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 891e38114..d6156894c 100644 --- a/rt/share/html/Elements/LoginRedirectWarning +++ b/rt/share/html/Elements/LoginRedirectWarning @@ -1,3 +1,50 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2013 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 }}} <%args> $next => undef diff --git a/rt/share/html/Elements/Logo b/rt/share/html/Elements/Logo index 8b4be4c81..a00f6bdfa 100644 --- a/rt/share/html/Elements/Logo +++ b/rt/share/html/Elements/Logo @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 57964f7a9..dabe3bb33 100644 --- a/rt/share/html/Elements/MakeClicky +++ b/rt/share/html/Elements/MakeClicky @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -48,20 +48,27 @@ <%ONCE> use Regexp::Common qw(URI); +my $escaper = sub { + my $content = shift; + RT::Interface::Web::EscapeUTF8( \$content ); + return $content; +}; + my %actions = ( default => sub { my %args = @_; - return $args{value}; + return $escaper->($args{value}); }, url => sub { my %args = @_; + $args{value} = $escaper->($args{value}); my $result = qq{[}. loc('Open URL') .qq{]}; return $args{value} . qq{ $result}; }, url_overwrite => sub { my %args = @_; - my $result = qq{}; - $result .= qq{$args{'value'}}; + $args{value} = $escaper->($args{value}); + my $result = qq{$args{value}}; return qq{$result}; }, ); @@ -89,12 +96,6 @@ my $handle = sub { } }; -my $escaper = sub { - my $content = shift; - RT::Interface::Web::EscapeUTF8( \$content ); - return $content; -}; - # Hook to add more Clicky types # XXX Have to have Page argument, as Mason gets caller wrong in Callback? # This happens as we are in <%ONCE> block diff --git a/rt/share/html/Elements/Menu b/rt/share/html/Elements/Menu index b56bacda8..b2a2fb638 100755 --- a/rt/share/html/Elements/Menu +++ b/rt/share/html/Elements/Menu @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -61,8 +61,8 @@ % if ($child->raw_html) { <% $child->raw_html |n %> % } else { -% my $url = (not $child->path or $child->path =~ m{^\w+:/}) ? $child->path : RT->Config->Get('WebPath').$child->path; -path ? ' href="'.$url.'"' : '' |n%><% $child->target ? ' target="'.$child->target.'"' : '' |n %>>\ +% my $url = $m->interp->apply_escapes((not $child->path or $child->path =~ m{^\w+:/}) ? $child->path : RT->Config->Get('WebPath').$child->path, 'h'); +path ? ' href="'.$url.'"' : '' |n%><% $child->target ? ' target="'.$m->interp->apply_escapes($child->target, 'h').'"' : '' |n %>>\ <% $child->escape_title ? $m->interp->apply_escapes($child->title, 'h') : $child->title |n %>\ \ % } @@ -82,3 +82,6 @@ $toplevel => 1 $parent_id => '' $depth => 0 +<%init> +$id = $m->interp->apply_escapes($id, 'h'); + diff --git a/rt/share/html/Elements/MessageBox b/rt/share/html/Elements/MessageBox index 69227bfa9..6f55b2704 100755 --- a/rt/share/html/Elements/MessageBox +++ b/rt/share/html/Elements/MessageBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 92c87b53a..880ef3c8c 100644 --- a/rt/share/html/Elements/MyAdminQueues +++ b/rt/share/html/Elements/MyAdminQueues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2447fed04..9abfe955c 100644 --- a/rt/share/html/Elements/MyRT +++ b/rt/share/html/Elements/MyRT @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2de4b530f..62eae563b 100755 --- a/rt/share/html/Elements/MyReminders +++ b/rt/share/html/Elements/MyReminders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2ceb7f5b8..4c0445437 100755 --- a/rt/share/html/Elements/MyRequests +++ b/rt/share/html/Elements/MyRequests @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 a098d5e8e..6537ea12e 100644 --- a/rt/share/html/Elements/MySupportQueues +++ b/rt/share/html/Elements/MySupportQueues @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2b9423299..e27450be5 100755 --- a/rt/share/html/Elements/MyTickets +++ b/rt/share/html/Elements/MyTickets @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5956a3bed..c8ca0905e 100755 --- a/rt/share/html/Elements/PageLayout +++ b/rt/share/html/Elements/PageLayout @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d9b152879..feab1fe1a 100644 --- a/rt/share/html/Elements/PersonalQuickbar +++ b/rt/share/html/Elements/PersonalQuickbar @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2658cc444..f8f67044b 100644 --- a/rt/share/html/Elements/QueriesAsComment +++ b/rt/share/html/Elements/QueriesAsComment @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 35a579c1a..bb5cf9102 100644 --- a/rt/share/html/Elements/QueryString +++ b/rt/share/html/Elements/QueryString @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1410e82ef..44d6b5a8f 100644 --- a/rt/share/html/Elements/QueueSummaryByLifecycle +++ b/rt/share/html/Elements/QueueSummaryByLifecycle @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -66,20 +66,16 @@ for my $queue (@queues) { next if lc($queue->{Lifecycle} || '') ne lc $lifecycle->Name; $i++; - my $name = $queue->{Name}; - $name =~ s/(['\\])/\\$1/g; - my $queue_cond = "Queue = '$name' AND "; - my $all_q = $queue_cond . '(' . join( " OR ", map "Status = '$_'", @cur_statuses ) . ')';
% for my $status (@cur_statuses) { % } @@ -87,6 +83,31 @@ for my $queue (@queues) {
- <% $queue->{Name} %> + <% $queue->{Name} %> - "><% $data->{$queue->{id}}->{$status } || '-' %> + <% $data->{$queue->{id}}->{$status } || '-' %>
% } <%INIT> +my $build_search_link = sub { + my ($queue_name, $extra_query) = @_; + $queue_name =~ s/(['\\])/\\$1/g; #' + + return RT->Config->Get('WebPath') + . "/Search/Results.html?Query=" + . $m->interp->apply_escapes("Queue = '$queue_name' AND $extra_query", 'u'); +}; + +my $link_all = sub { + my ($queue, $all_statuses) = @_; + return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @$all_statuses).")"); +}; + +my $link_status = sub { + my ($queue, $status) = @_; + return $build_search_link->($queue->{Name}, "Status = '$status'"); +}; + +$m->callback( + CallbackName => 'LinkBuilders', + build_search_link => \$build_search_link, + link_all => \$link_all, + link_status => \$link_status, +); my $Queues = RT::Queues->new( $session{'CurrentUser'} ); $Queues->UnLimit(); diff --git a/rt/share/html/Elements/QueueSummaryByStatus b/rt/share/html/Elements/QueueSummaryByStatus index f649d2850..2a8dc5396 100644 --- a/rt/share/html/Elements/QueueSummaryByStatus +++ b/rt/share/html/Elements/QueueSummaryByStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -58,16 +58,13 @@ my $i = 0; for my $queue (@queues) { $i++; - my $name = $queue->{Name}; - $name =~ s/(['\\])/\\$1/g; - my $queue_cond = "Queue = '$name' AND "; my $lifecycle = $lifecycle{ lc $queue->{'Lifecycle'} }; - my $all_q = $queue_cond . '(' . join( " OR ", map "Status = '$_'", grep $lifecycle->IsValid($_), @statuses ) . ')'; + my @queue_statuses = grep { $lifecycle->IsValid($_) } @statuses; - <% $queue->{Name} %> + <% $queue->{Name} %> <%perl> @@ -75,7 +72,7 @@ for my $queue (@queues) { if ( $lifecycle->IsValid( $status ) ) { - "><% $data->{$queue->{id}}->{$status } || '-' %> + <% $data->{$queue->{id}}->{$status } || '-' %> % } else { - @@ -85,6 +82,31 @@ for my $queue (@queues) { % } <%INIT> +my $build_search_link = sub { + my ($queue_name, $extra_query) = @_; + $queue_name =~ s/(['\\])/\\$1/g; #' + + return RT->Config->Get('WebPath') + . "/Search/Results.html?Query=" + . $m->interp->apply_escapes("Queue = '$queue_name' AND $extra_query", 'u'); +}; + +my $link_all = sub { + my ($queue, $all_statuses) = @_; + return $build_search_link->($queue->{Name}, "(".join(" OR ", map "Status = '$_'", @$all_statuses).")"); +}; + +my $link_status = sub { + my ($queue, $status) = @_; + return $build_search_link->($queue->{Name}, "Status = '$status'"); +}; + +$m->callback( + CallbackName => 'LinkBuilders', + build_search_link => \$build_search_link, + link_all => \$link_all, + link_status => \$link_status, +); my $Queues = RT::Queues->new( $session{'CurrentUser'} ); $Queues->UnLimit(); diff --git a/rt/share/html/Elements/QuickCreate b/rt/share/html/Elements/QuickCreate index 94be7eb9c..4925168c1 100644 --- a/rt/share/html/Elements/QuickCreate +++ b/rt/share/html/Elements/QuickCreate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/Elements/Quicksearch b/rt/share/html/Elements/Quicksearch index abc859b7d..77814edbc 100755 --- a/rt/share/html/Elements/Quicksearch +++ b/rt/share/html/Elements/Quicksearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 133f3d463..e900e1975 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3875d96e8..114e333a5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b04398434..9df091d01 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -162,10 +162,10 @@ my $COLUMN_MAP = { my @res = ( \' $id ), - \'">', loc('[Up]'), \'', + \'">', loc('~[Up~]'), \'', \' $id ), - \'">', loc('[Down]'), \'' + \'">', loc('~[Down~]'), \'' ); return @res; diff --git a/rt/share/html/Elements/RT__Dashboard/ColumnMap b/rt/share/html/Elements/RT__Dashboard/ColumnMap index 6c366ec78..2d971635a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 bfc520b0f..3c22debf8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e08dd7c91..47a673e66 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -74,6 +74,7 @@ my $COLUMN_MAP = { # SubjectTag is special as we can not sort SubjectTag => { title => 'SubjectTag', # loc + attribute => 'SubjectTag', value => sub { return $_[0]->SubjectTag }, }, Sign => { diff --git a/rt/share/html/Elements/RT__SavedSearch/ColumnMap b/rt/share/html/Elements/RT__SavedSearch/ColumnMap index 381e120f7..296787bb1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 776a2d8a3..976d76205 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5a8c6f2c7..5da71b146 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 239e58183..202a11a5e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1f8fc20cb..7a6eb25d1 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ee51fb3af..432bc8041 100755 --- a/rt/share/html/Elements/Refresh +++ b/rt/share/html/Elements/Refresh @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2cdaf4af9..5729f4042 100644 --- a/rt/share/html/Elements/RefreshHomepage +++ b/rt/share/html/Elements/RefreshHomepage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b18d86c52..20e9903b5 100644 --- a/rt/share/html/Elements/SavedSearches +++ b/rt/share/html/Elements/SavedSearches @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 47d125d89..ecc3fbb5f 100644 --- a/rt/share/html/Elements/ScrubHTML +++ b/rt/share/html/Elements/ScrubHTML @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 8929d9e0e..4655f78ee 100755 --- a/rt/share/html/Elements/Section +++ b/rt/share/html/Elements/Section @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 41477427e..a74a46a76 100755 --- a/rt/share/html/Elements/SelectAttachmentField +++ b/rt/share/html/Elements/SelectAttachmentField @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2de10246f..c328ae23c 100755 --- a/rt/share/html/Elements/SelectBoolean +++ b/rt/share/html/Elements/SelectBoolean @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 73243dae4..48538adaa 100755 --- a/rt/share/html/Elements/SelectCustomFieldOperator +++ b/rt/share/html/Elements/SelectCustomFieldOperator @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5c2e2ceb7..3e1bdbe60 100755 --- a/rt/share/html/Elements/SelectCustomFieldValue +++ b/rt/share/html/Elements/SelectCustomFieldValue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 46178b059..ed8c9e46a 100755 --- a/rt/share/html/Elements/SelectDate +++ b/rt/share/html/Elements/SelectDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 654806e99..1fe424a3d 100755 --- a/rt/share/html/Elements/SelectDateRelation +++ b/rt/share/html/Elements/SelectDateRelation @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 68f6ffe66..59a7b1543 100755 --- a/rt/share/html/Elements/SelectDateType +++ b/rt/share/html/Elements/SelectDateType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1295b3951..4cb56ca57 100755 --- a/rt/share/html/Elements/SelectEqualityOperator +++ b/rt/share/html/Elements/SelectEqualityOperator @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 302f73e77..f9910a205 100755 --- a/rt/share/html/Elements/SelectGroups +++ b/rt/share/html/Elements/SelectGroups @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ec9f58d13..19c9a1f69 100644 --- a/rt/share/html/Elements/SelectIPRelation +++ b/rt/share/html/Elements/SelectIPRelation @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 df98a1309..41e56e651 100755 --- a/rt/share/html/Elements/SelectLang +++ b/rt/share/html/Elements/SelectLang @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 cc6f852dc..240a5d61d 100755 --- a/rt/share/html/Elements/SelectLinkType +++ b/rt/share/html/Elements/SelectLinkType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 692b0efca..edabefb56 100755 --- a/rt/share/html/Elements/SelectMatch +++ b/rt/share/html/Elements/SelectMatch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 03644187b..2afe34ba1 100755 --- a/rt/share/html/Elements/SelectNewTicketQueue +++ b/rt/share/html/Elements/SelectNewTicketQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 37a5971ac..9a351dfee 100755 --- a/rt/share/html/Elements/SelectOwner +++ b/rt/share/html/Elements/SelectOwner @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 81b38386c..d5aad4d25 100644 --- a/rt/share/html/Elements/SelectOwnerAutocomplete +++ b/rt/share/html/Elements/SelectOwnerAutocomplete @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 5dd642960..a051d57f2 100644 --- a/rt/share/html/Elements/SelectOwnerDropdown +++ b/rt/share/html/Elements/SelectOwnerDropdown @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1b4dac148..c49182816 100644 --- a/rt/share/html/Elements/SelectPriority +++ b/rt/share/html/Elements/SelectPriority @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b0a191a7e..e5b053b05 100755 --- a/rt/share/html/Elements/SelectQueue +++ b/rt/share/html/Elements/SelectQueue @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 eababedd9..c39ea37f3 100755 --- a/rt/share/html/Elements/SelectResultsPerPage +++ b/rt/share/html/Elements/SelectResultsPerPage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0515ab18e..33d03b6f5 100755 --- a/rt/share/html/Elements/SelectSortOrder +++ b/rt/share/html/Elements/SelectSortOrder @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 af1ff615f..7e3e0cc67 100755 --- a/rt/share/html/Elements/SelectStatus +++ b/rt/share/html/Elements/SelectStatus @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -50,21 +50,29 @@ % if ( $DefaultValue ) { % } -% foreach my $status (@status) { -% next if ($SkipDeleted && $status eq 'deleted'); -% my $selected = defined $Default && $status eq $Default ? 'selected="selected"' : ''; +% for my $lifecycle (sort keys %statuses_by_lifecycle) { +% if ($group_by_lifecycle) { + +% } +% foreach my $status (@{$statuses_by_lifecycle{$lifecycle}}) { +% next if ($SkipDeleted && $status eq 'deleted'); +% my $selected = defined $Default && $status eq $Default ? 'selected="selected"' : ''; +% } +% if ($group_by_lifecycle) { + +% } % } <%INIT> ### XXX: no cover for Tools/MyDay.html - -my @status; +my %statuses_by_lifecycle; if ( @Statuses ) { - @status = @Statuses; + $statuses_by_lifecycle{''} = \@Statuses; } elsif ( $TicketObj ) { + my @status; my $current = $TicketObj->Status; push @status, $current; @@ -77,20 +85,50 @@ elsif ( $TicketObj ) { unless exists $has{ $check }; push @status, $next if $has{ $check }; } + $statuses_by_lifecycle{$lifecycle->Name} = \@status; } elsif ( $QueueObj ) { - @status = $QueueObj->Lifecycle->Transitions(''); + my $lifecycle = $QueueObj->Lifecycle; + $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Transitions('') ]; } elsif ( %Queues ) { for my $id (keys %Queues) { my $queue = RT::Queue->new($session{'CurrentUser'}); $queue->Load($id); - push @status, $queue->Lifecycle->Valid if $queue->id; + if ($queue->id) { + my $lifecycle = $queue->Lifecycle; + $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ]; + } } - my %seen; - @status = grep { not $seen{$_}++ } @status; } else { - @status = RT::Queue->Lifecycle->Valid; + for my $lifecycle (map { RT::Lifecycle->Load($_) } RT::Lifecycle->List) { + $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ]; + } +} + +if (keys %statuses_by_lifecycle) { + my %simplified; + my $key = sub { + join "\0", sort @{$_[0]}; + }; + for my $name (sort keys %statuses_by_lifecycle) { + my $matched; + my $statuses = $statuses_by_lifecycle{$name}; + for my $simple (sort keys %simplified) { + if ($key->($statuses) eq $key->($simplified{$simple})) { + # Statuses are the same, join 'em! + $simplified{"$simple, $name"} = delete $simplified{$simple}; + $matched++; + last; + } + } + unless ($matched) { + $simplified{$name} = $statuses; + } + } + %statuses_by_lifecycle = %simplified; } + +my $group_by_lifecycle = keys %statuses_by_lifecycle > 1; <%ARGS> $Name => undef diff --git a/rt/share/html/Elements/SelectTicketSortBy b/rt/share/html/Elements/SelectTicketSortBy index 29db77f84..7fc294099 100755 --- a/rt/share/html/Elements/SelectTicketSortBy +++ b/rt/share/html/Elements/SelectTicketSortBy @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d83c6c93f..4f4cf2c01 100755 --- a/rt/share/html/Elements/SelectTicketTypes +++ b/rt/share/html/Elements/SelectTicketTypes @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3ac6a12dc..f6e7c9bd0 100755 --- a/rt/share/html/Elements/SelectTimeUnits +++ b/rt/share/html/Elements/SelectTimeUnits @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c77311e8f..5f5bd5a38 100644 --- a/rt/share/html/Elements/SelectTimezone +++ b/rt/share/html/Elements/SelectTimezone @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2522a92ed..311e3e1b9 100755 --- a/rt/share/html/Elements/SelectUsers +++ b/rt/share/html/Elements/SelectUsers @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4f1df60b2..dc9f02015 100755 --- a/rt/share/html/Elements/SelectWatcherType +++ b/rt/share/html/Elements/SelectWatcherType @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6c024c248..7cfcf9557 100755 --- a/rt/share/html/Elements/SetupSessionCookie +++ b/rt/share/html/Elements/SetupSessionCookie @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 04e6877dc..306f46314 100644 --- a/rt/share/html/Elements/ShowCustomFieldBinary +++ b/rt/share/html/Elements/ShowCustomFieldBinary @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -45,7 +45,7 @@ %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} -<% $Object->Content %> +<% $Object->Content %> <%ARGS> $Object => undef diff --git a/rt/share/html/Elements/ShowCustomFieldDate b/rt/share/html/Elements/ShowCustomFieldDate index 8c94c131c..4cfb96596 100644 --- a/rt/share/html/Elements/ShowCustomFieldDate +++ b/rt/share/html/Elements/ShowCustomFieldDate @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -48,8 +48,8 @@ <%INIT> my $content = $Object->Content; my $DateObj = RT::Date->new ( $session{'CurrentUser'} ); - $DateObj->Set( Format => 'unknown', Value => $content ); - $content = $DateObj->AsString(Time => 0); + $DateObj->Set( Format => 'unknown', Value => $content, Timezone => 'utc' ); + $content = $DateObj->AsString(Time => 0, Timezone => 'utc'); <%$content|n%> <%ARGS> diff --git a/rt/share/html/Elements/ShowCustomFieldDateTime b/rt/share/html/Elements/ShowCustomFieldDateTime index e7a9a2bdc..61a430d7d 100644 --- a/rt/share/html/Elements/ShowCustomFieldDateTime +++ b/rt/share/html/Elements/ShowCustomFieldDateTime @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0272b409d..07796966c 100644 --- a/rt/share/html/Elements/ShowCustomFieldImage +++ b/rt/share/html/Elements/ShowCustomFieldImage @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 2b0fd3e14..0e061ee6d 100644 --- a/rt/share/html/Elements/ShowCustomFieldText +++ b/rt/share/html/Elements/ShowCustomFieldText @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 337606139..31391ee5c 100644 --- a/rt/share/html/Elements/ShowCustomFieldWikitext +++ b/rt/share/html/Elements/ShowCustomFieldWikitext @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 6059f4ee7..6a6fb9c79 100644 --- a/rt/share/html/Elements/ShowCustomFields +++ b/rt/share/html/Elements/ShowCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 1727fa397..1f8568ae9 100644 --- a/rt/share/html/Elements/ShowLink +++ b/rt/share/html/Elements/ShowLink @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 61628de4d..c06c6f7ef 100755 --- a/rt/share/html/Elements/ShowLinks +++ b/rt/share/html/Elements/ShowLinks @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 07fcdc67b..0dbe67c80 100644 --- a/rt/share/html/Elements/ShowMemberships +++ b/rt/share/html/Elements/ShowMemberships @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 9e6ea97a3..b486b7fed 100644 --- a/rt/share/html/Elements/ShowRelationLabel +++ b/rt/share/html/Elements/ShowRelationLabel @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 34cde464a..ca5b33835 100644 --- a/rt/share/html/Elements/ShowReminders +++ b/rt/share/html/Elements/ShowReminders @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -60,6 +60,7 @@ my $dueobj = $reminder->DueObj; my $overdue = $dueobj->Unix > 0 && $dueobj->Diff < 0 ? 1 : 0; my $targets = RT::Tickets->new($session{'CurrentUser'}); +$targets->{'allow_deleted_search'} = 1; $targets->FromSQL( "ReferredToBy = " . $reminder->id ); if ( my $ticket= $targets->First ) { diff --git a/rt/share/html/Elements/ShowSearch b/rt/share/html/Elements/ShowSearch index 4b96bbfda..8bdbd8aae 100644 --- a/rt/share/html/Elements/ShowSearch +++ b/rt/share/html/Elements/ShowSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -46,7 +46,7 @@ %# %# END BPS TAGGED BLOCK }}} <&|/Widgets/TitleBox, - title => loc($desc, $ProcessedSearchArg->{'Rows'}), + title => loc(RT::SavedSearch->EscapeDescription($search->Description), $ProcessedSearchArg->{'Rows'}), title_href => $query_link_url.$QueryString, titleright => $customize ? loc('Edit') : '', titleright_href => $customize, @@ -141,14 +141,6 @@ foreach ( $SearchArg, $ProcessedSearchArg ) { } my $QueryString = '?' . $m->comp( '/Elements/QueryString', %$SearchArg ); - -my $desc = $search->Description; - -# we only use [_1] here, let's escape other "[" and "]" unless they are -# escaped already -$desc =~ s/(? <%ARGS> $Name => undef diff --git a/rt/share/html/Elements/ShowUser b/rt/share/html/Elements/ShowUser index 365497765..678a45cd8 100644 --- a/rt/share/html/Elements/ShowUser +++ b/rt/share/html/Elements/ShowUser @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b56ba8372..a68ba4fee 100644 --- a/rt/share/html/Elements/ShowUserConcise +++ b/rt/share/html/Elements/ShowUserConcise @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 4a02e124c..b18961dd4 100644 --- a/rt/share/html/Elements/ShowUserEmailFrequency +++ b/rt/share/html/Elements/ShowUserEmailFrequency @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 9ff8cbbc8..f805b575a 100644 --- a/rt/share/html/Elements/ShowUserVerbose +++ b/rt/share/html/Elements/ShowUserVerbose @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -54,8 +54,9 @@ my $comment = ''; if ($User) { $address = $User->EmailAddress; - $phrase = $User->RealName if $User->RealName && lc $User->RealName ne lc $address; - $comment = $User->Name if lc $User->Name ne lc $address; + $phrase = $User->RealName + if $User->RealName && ( !$address || lc $User->RealName ne lc $address ); + $comment = $User->Name if !$address || lc $User->Name ne lc $address; } else { $address = $Address; } diff --git a/rt/share/html/Elements/SimpleSearch b/rt/share/html/Elements/SimpleSearch index 533698d67..6d9bce84c 100755 --- a/rt/share/html/Elements/SimpleSearch +++ b/rt/share/html/Elements/SimpleSearch @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 b7840d34b..d1bf0a53b 100755 --- a/rt/share/html/Elements/Submit +++ b/rt/share/html/Elements/Submit @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 d899071fa..a82cdd1be 100755 --- a/rt/share/html/Elements/Tabs +++ b/rt/share/html/Elements/Tabs @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -270,29 +270,31 @@ my $build_admin_menu = sub { my $queue_obj = RT::Queue->new( $session{'CurrentUser'} ); $queue_obj->Load($id); - my $queue = PageMenu(); - $queue->child( basics => title => loc('Basics'), path => "/Admin/Queues/Modify.html?id=" . $id ); - $queue->child( people => title => loc('Watchers'), path => "/Admin/Queues/People.html?id=" . $id ); + if ( $queue_obj and $queue_obj->id ) { + my $queue = PageMenu(); + $queue->child( basics => title => loc('Basics'), path => "/Admin/Queues/Modify.html?id=" . $id ); + $queue->child( people => title => loc('Watchers'), path => "/Admin/Queues/People.html?id=" . $id ); - my $templates = $queue->child(templates => title => loc('Templates'), path => "/Admin/Queues/Templates.html?id=" . $id); - $templates->child( select => title => loc('Select'), path => "/Admin/Queues/Templates.html?id=".$id); - $templates->child( create => title => loc('Create'), path => "/Admin/Queues/Template.html?Create=1;Queue=".$id); + my $templates = $queue->child(templates => title => loc('Templates'), path => "/Admin/Queues/Templates.html?id=" . $id); + $templates->child( select => title => loc('Select'), path => "/Admin/Queues/Templates.html?id=".$id); + $templates->child( create => title => loc('Create'), path => "/Admin/Queues/Template.html?Create=1;Queue=".$id); - my $scrips = $queue->child( scrips => title => loc('Scrips'), path => "/Admin/Queues/Scrips.html?id=" . $id); - $scrips->child( select => title => loc('Select'), path => "/Admin/Queues/Scrips.html?id=" . $id ); - $scrips->child( create => title => loc('Create'), path => "/Admin/Queues/Scrip.html?Create=1;Queue=" . $id); + my $scrips = $queue->child( scrips => title => loc('Scrips'), path => "/Admin/Queues/Scrips.html?id=" . $id); + $scrips->child( select => title => loc('Select'), path => "/Admin/Queues/Scrips.html?id=" . $id ); + $scrips->child( create => title => loc('Create'), path => "/Admin/Queues/Scrip.html?Create=1;Queue=" . $id); - my $ticket_cfs = $queue->child( 'ticket-custom-fields' => title => loc('Ticket Custom Fields'), - path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket&id=' . $id ); + my $ticket_cfs = $queue->child( 'ticket-custom-fields' => title => loc('Ticket Custom Fields'), + path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket&id=' . $id ); - my $txn_cfs = $queue->child( 'transaction-custom-fields' => title => loc('Transaction Custom Fields'), - path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id ); + my $txn_cfs = $queue->child( 'transaction-custom-fields' => title => loc('Transaction Custom Fields'), + path => '/Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id ); - $queue->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Queues/GroupRights.html?id=".$id ); - $queue->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Queues/UserRights.html?id=" . $id ); + $queue->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Queues/GroupRights.html?id=".$id ); + $queue->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Queues/UserRights.html?id=" . $id ); + $queue->child( 'history' => title => loc('History'), path => "/Admin/Queues/History.html?id=" . $id ); - - $m->callback( CallbackName => 'PrivilegedQueue', queue_id => $id, page_menu => $queue); + $m->callback( CallbackName => 'PrivilegedQueue', queue_id => $id, page_menu => $queue); + } } } if ( $request_path =~ m{^/Admin/Users} ) { @@ -301,13 +303,15 @@ my $build_admin_menu = sub { my $obj = RT::User->new( $session{'CurrentUser'} ); $obj->Load($id); - my $tabs = PageMenu(); - $tabs->child( basics => title => loc('Basics'), path => "/Admin/Users/Modify.html?id=" . $id ); - $tabs->child( memberships => title => loc('Memberships'), path => "/Admin/Users/Memberships.html?id=" . $id ); - $tabs->child( history => title => loc('History'), path => "/Admin/Users/History.html?id=" . $id ); - $tabs->child( 'my-rt' => title => loc('RT at a glance'), path => "/Admin/Users/MyRT.html?id=" . $id ); - if ( RT->Config->Get('GnuPG')->{'Enable'} ) { - $tabs->child( pgp => title => loc('GnuPG'), path => "/Admin/Users/GnuPG.html?id=" . $id ); + if ( $obj and $obj->id ) { + my $tabs = PageMenu(); + $tabs->child( basics => title => loc('Basics'), path => "/Admin/Users/Modify.html?id=" . $id ); + $tabs->child( memberships => title => loc('Memberships'), path => "/Admin/Users/Memberships.html?id=" . $id ); + $tabs->child( history => title => loc('History'), path => "/Admin/Users/History.html?id=" . $id ); + $tabs->child( 'my-rt' => title => loc('RT at a glance'), path => "/Admin/Users/MyRT.html?id=" . $id ); + if ( RT->Config->Get('GnuPG')->{'Enable'} ) { + $tabs->child( pgp => title => loc('GnuPG'), path => "/Admin/Users/GnuPG.html?id=" . $id ); + } } } @@ -319,12 +323,14 @@ my $build_admin_menu = sub { my $obj = RT::Group->new( $session{'CurrentUser'} ); $obj->Load($id); - my $tabs = PageMenu(); - $tabs->child( basics => title => loc('Basics'), path => "/Admin/Groups/Modify.html?id=" . $obj->id ); - $tabs->child( members => title => loc('Members'), path => "/Admin/Groups/Members.html?id=" . $obj->id ); - $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Groups/GroupRights.html?id=" . $obj->id ); - $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Groups/UserRights.html?id=" . $obj->id ); - $tabs->child( history => title => loc('History'), path => "/Admin/Groups/History.html?id=" . $obj->id ); + if ( $obj and $obj->id ) { + my $tabs = PageMenu(); + $tabs->child( basics => title => loc('Basics'), path => "/Admin/Groups/Modify.html?id=" . $obj->id ); + $tabs->child( members => title => loc('Members'), path => "/Admin/Groups/Members.html?id=" . $obj->id ); + $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Groups/GroupRights.html?id=" . $obj->id ); + $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Groups/UserRights.html?id=" . $obj->id ); + $tabs->child( history => title => loc('History'), path => "/Admin/Groups/History.html?id=" . $obj->id ); + } } } @@ -334,11 +340,13 @@ my $build_admin_menu = sub { my $obj = RT::CustomField->new( $session{'CurrentUser'} ); $obj->Load($id); - my $tabs = PageMenu(); - $tabs->child( basics => title => loc('Basics'), path => "/Admin/CustomFields/Modify.html?id=".$id ); - $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/CustomFields/GroupRights.html?id=" . $id ); - $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/CustomFields/UserRights.html?id=" . $id ); - $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/CustomFields/Objects.html?id=" . $id ); + if ( $obj and $obj->id ) { + my $tabs = PageMenu(); + $tabs->child( basics => title => loc('Basics'), path => "/Admin/CustomFields/Modify.html?id=".$id ); + $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/CustomFields/GroupRights.html?id=" . $id ); + $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/CustomFields/UserRights.html?id=" . $id ); + $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/CustomFields/Objects.html?id=" . $id ); + } } } @@ -356,19 +364,21 @@ my $build_admin_menu = sub { if ( $request_path =~ m{^/Admin/Articles/Classes/} ) { my $tabs = PageMenu(); if ( my $id = $DECODED_ARGS->{'id'} ) { - my $obj = RT::CustomField->new( $session{'CurrentUser'} ); + my $obj = RT::Class->new( $session{'CurrentUser'} ); $obj->Load($id); - my $section = $tabs->child( select => title => loc("Classes"), path => "/Admin/Articles/Classes/" ); - $section->child( select => title => loc('Select'), path => "/Admin/Articles/Classes/" ); - $section->child( create => title => loc('Create'), path => "/Admin/Articles/Classes/Modify.html?Create=1" ); - - $tabs->child( basics => title => loc('Basics'), path => "/Admin/Articles/Classes/Modify.html?id=".$id ); - $tabs->child( topics => title => loc('Topics'), path => "/Admin/Articles/Classes/Topics.html?id=".$id ); - $tabs->child( 'custom-fields' => title => loc('Custom Fields'), path => "/Admin/Articles/Classes/CustomFields.html?id=".$id ); - $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Articles/Classes/GroupRights.html?id=".$id ); - $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Articles/Classes/UserRights.html?id=".$id ); - $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/Articles/Classes/Objects.html?id=$id" ); + if ( $obj and $obj->id ) { + my $section = $tabs->child( select => title => loc("Classes"), path => "/Admin/Articles/Classes/" ); + $section->child( select => title => loc('Select'), path => "/Admin/Articles/Classes/" ); + $section->child( create => title => loc('Create'), path => "/Admin/Articles/Classes/Modify.html?Create=1" ); + + $tabs->child( basics => title => loc('Basics'), path => "/Admin/Articles/Classes/Modify.html?id=".$id ); + $tabs->child( topics => title => loc('Topics'), path => "/Admin/Articles/Classes/Topics.html?id=".$id ); + $tabs->child( 'custom-fields' => title => loc('Custom Fields'), path => "/Admin/Articles/Classes/CustomFields.html?id=".$id ); + $tabs->child( 'group-rights' => title => loc('Group Rights'), path => "/Admin/Articles/Classes/GroupRights.html?id=".$id ); + $tabs->child( 'user-rights' => title => loc('User Rights'), path => "/Admin/Articles/Classes/UserRights.html?id=".$id ); + $tabs->child( 'applies-to' => title => loc('Applies to'), path => "/Admin/Articles/Classes/Objects.html?id=$id" ); + } } else { $tabs->child( select => title => loc('Select'), path => "/Admin/Articles/Classes/" ); $tabs->child( create => title => loc('Create'), path => "/Admin/Articles/Classes/Modify.html?Create=1" ); @@ -379,6 +389,9 @@ my $build_admin_menu = sub { my $build_main_nav = sub { + PageWidgets()->child( simple_search => raw_html => $m->scomp('SimpleSearch') ); + PageWidgets()->child( create_ticket => raw_html => $m->scomp('CreateTicket') ); + my $home = Menu->child( home => title => loc('Homepage'), path => '/' ); # We explicitly exclude superusers; otherwise the dashboards for # groups you're not in (but can see the dashboards of by dint of @@ -479,9 +492,9 @@ my $build_main_nav = sub { for my $search (@$searches) { $search_menu->child( "search-" . $i++ => - title => $search->[0], + title => $search->[1], path => "/Prefs/Search.html?" - . $query_string->( name => ref( $search->[1] ) . '-' . $search->[1]->Id ), + . $query_string->( name => ref( $search->[2] ) . '-' . $search->[2]->Id ), ); } @@ -513,141 +526,143 @@ my $build_main_nav = sub { my $obj = RT::Ticket->new( $session{'CurrentUser'} ); $obj->Load($id); - my $actions = PageMenu()->child( actions => title => loc('Actions'), sort_order => 95 ); - my $tabs = PageMenu(); - $tabs->child( bookmark => raw_html => $m->scomp( '/Ticket/Elements/Bookmark', id => $id ), sort_order => 99 ); - $tabs->child( display => title => loc('Display'), path => "/Ticket/Display.html?id=" . $id ); - $tabs->child( history => title => loc('History'), path => "/Ticket/History.html?id=" . $id ); - - my %can = %{ $obj->CurrentUser->PrincipalObj->HasRights( Object => $obj ) }; - $can{'_ModifyOwner'} = $can{'OwnTicket'} || $can{'TakeTicket'} || $can{'StealTicket'}; - my $can = sub { - unless ($_[0] eq 'ExecuteCode') { - return $can{$_[0]} || $can{'SuperUser'}; - } else { - return !RT->Config->Get('DisallowExecuteCode') - && ( $can{'ExecuteCode'} || $can{'SuperUser'} ); + if ( $obj and $obj->id ) { + my $actions = PageMenu()->child( actions => title => loc('Actions'), sort_order => 95 ); + my $tabs = PageMenu(); + $tabs->child( bookmark => raw_html => $m->scomp( '/Ticket/Elements/Bookmark', id => $id ), sort_order => 99 ); + $tabs->child( display => title => loc('Display'), path => "/Ticket/Display.html?id=" . $id ); + $tabs->child( history => title => loc('History'), path => "/Ticket/History.html?id=" . $id ); + + my %can = %{ $obj->CurrentUser->PrincipalObj->HasRights( Object => $obj ) }; + $can{'_ModifyOwner'} = $can{'OwnTicket'} || $can{'TakeTicket'} || $can{'StealTicket'}; + my $can = sub { + unless ($_[0] eq 'ExecuteCode') { + return $can{$_[0]} || $can{'SuperUser'}; + } else { + return !RT->Config->Get('DisallowExecuteCode') + && ( $can{'ExecuteCode'} || $can{'SuperUser'} ); + } + }; + + # comment out until we can do it for an individual custom field + #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') ) { + $tabs->child( basics => title => loc('Basics'), path => "/Ticket/Modify.html?id=" . $id ); + + #} + + #ACL? + $tabs->child( customers => title => loc('Customers'), path => "/Ticket/ModifyCustomers.html?id=" . $id ); + + if ( $can->('ModifyTicket') || $can->('_ModifyOwner') || $can->('Watch') || $can->('WatchAsAdminCc') ) { + $tabs->child( people => title => loc('People'), path => "/Ticket/ModifyPeople.html?id=" . $id ); } - }; - - # comment out until we can do it for an individual custom field - #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') ) { - $tabs->child( basics => title => loc('Basics'), path => "/Ticket/Modify.html?id=" . $id ); - - #} - - #ACL? - $tabs->child( customers => title => loc('Customers'), path => "/Ticket/ModifyCustomers.html?id=" . $id ); - - if ( $can->('ModifyTicket') || $can->('_ModifyOwner') || $can->('Watch') || $can->('WatchAsAdminCc') ) { - $tabs->child( people => title => loc('People'), path => "/Ticket/ModifyPeople.html?id=" . $id ); - } - - if ( $can->('ModifyTicket') ) { - $tabs->child( dates => title => loc('Dates'), path => "/Ticket/ModifyDates.html?id=" . $id ); - $tabs->child( links => title => loc('Links'), path => "/Ticket/ModifyLinks.html?id=" . $id ); - } - #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') || $can->('_ModifyOwner') ) { - $tabs->child( jumbo => title => loc('Jumbo'), path => "/Ticket/ModifyAll.html?id=" . $id ); - #} - - if ( RT->Config->Get('EnableReminders') ) { - $tabs->child( reminders => title => loc('Reminders'), path => "/Ticket/Reminders.html?id=" . $id ); - } - - if ( $can->('ModifyTicket') or $can->('ReplyToTicket') ) { - $actions->child( reply => title => loc('Reply'), path => "/Ticket/Update.html?Action=Respond;id=" . $id ); - } + if ( $can->('ModifyTicket') ) { + $tabs->child( dates => title => loc('Dates'), path => "/Ticket/ModifyDates.html?id=" . $id ); + $tabs->child( links => title => loc('Links'), path => "/Ticket/ModifyLinks.html?id=" . $id ); + } - if ( $can->('ModifyTicket') or $can->('CommentOnTicket') ) { - $actions->child( comment => title => loc('Comment'), path => "/Ticket/Update.html?Action=Comment;id=" . $id ); - } + #if ( $can->('ModifyTicket') || $can->('ModifyCustomField') || $can->('_ModifyOwner') ) { + $tabs->child( jumbo => title => loc('Jumbo'), path => "/Ticket/ModifyAll.html?id=" . $id ); + #} - if ( $can->('ForwardMessage') ) { - $actions->child( forward => title => loc('Forward'), path => "/Ticket/Forward.html?id=" . $id ); - } - - my $hide_resolve_with_deps = RT->Config->Get('HideResolveActionsWithDependencies') - && $obj->HasUnresolvedDependencies; - - my $current = $obj->Status; - my $lifecycle = $obj->QueueObj->Lifecycle; - my $i = 1; - foreach my $info ( $lifecycle->Actions($current) ) { - my $next = $info->{'to'}; - next unless $lifecycle->IsTransition( $current => $next ); - - my $check = $lifecycle->CheckRight( $current => $next ); - next unless $can->($check); - - next if $hide_resolve_with_deps - && $lifecycle->IsInactive($next) - && !$lifecycle->IsInactive($current); - - my $action = $info->{'update'} || ''; - my $url = '/Ticket/'; - if ($action) { - $url .= "Update.html?" - . $query_string->( - Action => $action, - DefaultStatus => $next, - id => $id, - ); - } else { - $url .= "Display.html?" - . $query_string->( - Status => $next, - id => $id, - ); + if ( RT->Config->Get('EnableReminders') ) { + $tabs->child( reminders => title => loc('Reminders'), path => "/Ticket/Reminders.html?id=" . $id ); } - my $key = $info->{'label'} || ucfirst($next); - $actions->child( $key => title => loc( $key ), path => $url); - } - if ( $can->('OwnTicket') ) { - if ( $obj->OwnerObj->Id == RT->Nobody->id - && ( $can->('ModifyTicket') or $can->('TakeTicket') ) ) { - $actions->child( take => title => loc('Take'), path => "/Ticket/Display.html?Action=Take;id=" . $id ); + if ( $can->('ModifyTicket') or $can->('ReplyToTicket') ) { + $actions->child( reply => title => loc('Reply'), path => "/Ticket/Update.html?Action=Respond;id=" . $id ); } - elsif ( $obj->OwnerObj->id != RT->Nobody->id - && $obj->OwnerObj->id != $session{CurrentUser}->id - && ( $can->('ModifyTicket') or $can->('StealTicket') ) ) { - $actions->child( steal => title => loc('Steal'), path => "/Ticket/Display.html?Action=Steal;id=" . $id ); + if ( $can->('ModifyTicket') or $can->('CommentOnTicket') ) { + $actions->child( comment => title => loc('Comment'), path => "/Ticket/Update.html?Action=Comment;id=" . $id ); } - } - - # TODO needs a "Can extract article into a class applied to this queue" check - $actions->child( 'extract-article' => - title => loc('Extract Article'), - path => "/Articles/Article/ExtractIntoClass.html?Ticket=".$obj->id, - ); - - if ( defined $session{"tickets"} ) { - # we have to update session data if we get new ItemMap - my $updatesession = 1 unless ( $session{"tickets"}->{'item_map'} ); - my $item_map = $session{"tickets"}->ItemMap; + if ( $can->('ForwardMessage') ) { + $actions->child( forward => title => loc('Forward'), path => "/Ticket/Forward.html?id=" . $id ); + } - if ($updatesession) { - $session{"tickets"}->PrepForSerialization(); + my $hide_resolve_with_deps = RT->Config->Get('HideResolveActionsWithDependencies') + && $obj->HasUnresolvedDependencies; + + my $current = $obj->Status; + my $lifecycle = $obj->QueueObj->Lifecycle; + my $i = 1; + foreach my $info ( $lifecycle->Actions($current) ) { + my $next = $info->{'to'}; + next unless $lifecycle->IsTransition( $current => $next ); + + my $check = $lifecycle->CheckRight( $current => $next ); + next unless $can->($check); + + next if $hide_resolve_with_deps + && $lifecycle->IsInactive($next) + && !$lifecycle->IsInactive($current); + + my $action = $info->{'update'} || ''; + my $url = '/Ticket/'; + if ($action) { + $url .= "Update.html?" + . $query_string->( + Action => $action, + DefaultStatus => $next, + id => $id, + ); + } else { + $url .= "Display.html?" + . $query_string->( + Status => $next, + id => $id, + ); + } + my $key = $info->{'label'} || ucfirst($next); + $actions->child( $key => title => loc( $key ), path => $url); } - my $search = Menu()->child('search'); - # Don't display prev links if we're on the first ticket - if ( $item_map->{$id}->{prev} ) { - $search->child( first => - title => '<< ' . loc('First'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{first}); - $search->child( prev => - title => '< ' . loc('Prev'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{prev}); + if ( $can->('OwnTicket') ) { + if ( $obj->OwnerObj->Id == RT->Nobody->id + && ( $can->('ModifyTicket') or $can->('TakeTicket') ) ) { + $actions->child( take => title => loc('Take'), path => "/Ticket/Display.html?Action=Take;id=" . $id ); + } + + elsif ( $obj->OwnerObj->id != RT->Nobody->id + && $obj->OwnerObj->id != $session{CurrentUser}->id + && ( $can->('ModifyTicket') or $can->('StealTicket') ) ) { + $actions->child( steal => title => loc('Steal'), path => "/Ticket/Display.html?Action=Steal;id=" . $id ); + } } - # Don't display next links if we're on the last ticket - if ( $item_map->{$id}->{next} ) { - $search->child( next => - title => loc('Next') . ' >', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{next}); - $search->child( last => - title => loc('Last') . ' >>', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{last}); + + # TODO needs a "Can extract article into a class applied to this queue" check + $actions->child( 'extract-article' => + title => loc('Extract Article'), + path => "/Articles/Article/ExtractIntoClass.html?Ticket=".$obj->id, + ); + + if ( defined $session{"tickets"} ) { + # we have to update session data if we get new ItemMap + my $updatesession = 1 unless ( $session{"tickets"}->{'item_map'} ); + + my $item_map = $session{"tickets"}->ItemMap; + + if ($updatesession) { + $session{"tickets"}->PrepForSerialization(); + } + + my $search = Menu()->child('search'); + # Don't display prev links if we're on the first ticket + if ( $item_map->{$id}->{prev} ) { + $search->child( first => + title => '<< ' . loc('First'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{first}); + $search->child( prev => + title => '< ' . loc('Prev'), class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{prev}); + } + # Don't display next links if we're on the last ticket + if ( $item_map->{$id}->{next} ) { + $search->child( next => + title => loc('Next') . ' >', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{$id}->{next}); + $search->child( last => + title => loc('Last') . ' >>', class => "nav", path => "/Ticket/Display.html?id=" . $item_map->{last}); + } } } } @@ -770,8 +785,8 @@ my $build_main_nav = sub { && #XXX TODO better abstraction $session{'CurrentUser'}->HasRight( Right => 'SuperUser', Object => RT->System )) { my $shred_args = $query_string->( - search => 1, - plugin => 'Tickets', + Search => 1, + Plugin => 'Tickets', 'Tickets:query' => $rss_data{'Query'}, 'Tickets:limit' => $QueryArgs->{'Rows'}, ); @@ -795,6 +810,10 @@ my $build_main_nav = sub { } if ( $request_path =~ m{^/Articles/} ) { + PageWidgets()->child( article_search => raw_html => $m->scomp('/Articles/Elements/GotoArticle') ); + PageWidgets()->delete('create_ticket'); + PageWidgets()->delete('simple_search'); + my $tabs = PageMenu(); $tabs->child( search => title => loc("Search"), path => "/Articles/Article/Search.html" ); $tabs->child( create => title => loc("New Article" ), path => "/Articles/Article/PreCreate.html" ); @@ -803,14 +822,16 @@ my $build_main_nav = sub { my $obj = RT::Article->new( $session{'CurrentUser'} ); $obj->Load($id); - $tabs->child( display => title => loc("Display"), path => "/Articles/Article/Display.html?id=" . $id ); - $tabs->child( history => title => loc('History'), path => '/Articles/Article/History.html?id=' . $id ); + if ( $obj and $obj->id ) { + $tabs->child( display => title => loc("Display"), path => "/Articles/Article/Display.html?id=" . $id ); + $tabs->child( history => title => loc('History'), path => '/Articles/Article/History.html?id=' . $id ); - if ( $obj->CurrentUserHasRight('ModifyArticle') ) { - $tabs->child(modify => title => loc('Modify'), path => '/Articles/Article/Edit.html?id=' . $id ); - } - if ( $obj->CurrentUserHasRight('DeleteArticle') ) { - $tabs->child(delete => title => loc('Delete'), path => '/Articles/Article/Delete.html?id=' . $id ); + if ( $obj->CurrentUserHasRight('ModifyArticle') ) { + $tabs->child(modify => title => loc('Modify'), path => '/Articles/Article/Edit.html?id=' . $id ); + } + if ( $obj->CurrentUserHasRight('DeleteArticle') ) { + $tabs->child(delete => title => loc('Delete'), path => '/Articles/Article/Delete.html?id=' . $id ); + } } } @@ -820,9 +841,6 @@ my $build_main_nav = sub { PageMenu()->child( edit => title => loc('Edit'), path => '/Prefs/MyRT.html' ); } - PageWidgets()->child( simple_search => raw_html => $m->scomp('SimpleSearch') ); - PageWidgets()->child( create_ticket => raw_html => $m->scomp('CreateTicket') ); - $m->callback( CallbackName => 'Privileged' ); }; diff --git a/rt/share/html/Elements/TicketList b/rt/share/html/Elements/TicketList index 66253ae7d..498759572 100644 --- a/rt/share/html/Elements/TicketList +++ b/rt/share/html/Elements/TicketList @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 fa81a32f4..bbb55ebcd 100644 --- a/rt/share/html/Elements/TitleBox +++ b/rt/share/html/Elements/TitleBox @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 96d2076e1..f1ac68250 100644 --- a/rt/share/html/Elements/TitleBoxEnd +++ b/rt/share/html/Elements/TitleBoxEnd @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 cc1a55f68..cb746c491 100644 --- a/rt/share/html/Elements/TitleBoxStart +++ b/rt/share/html/Elements/TitleBoxStart @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 922b885f2..7b0469bde 100644 --- a/rt/share/html/Elements/ValidateCustomFields +++ b/rt/share/html/Elements/ValidateCustomFields @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 35e7fe215..cf59bfc78 100644 --- a/rt/share/html/Elements/WidgetBar +++ b/rt/share/html/Elements/WidgetBar @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 887302f0c..5bb0c90b2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 e8baf5397..b6a6f1af5 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -77,7 +77,7 @@ $groups->Limit( # Exclude groups we don't want foreach (split /\s*,\s*/, $exclude) { - $groups->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!='); + $groups->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!=', ENTRYAGGREGATOR => 'AND'); } my @suggestions; diff --git a/rt/share/html/Helpers/Autocomplete/Owners b/rt/share/html/Helpers/Autocomplete/Owners index 1d065f2a2..93a571c82 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 c2b92c1bf..349442a4f 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -111,13 +111,27 @@ while (my ($name, $op) = each %fields) { # Exclude users we don't want foreach (split /\s*,\s*/, $exclude) { - $users->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!='); + $users->Limit(FIELD => 'id', VALUE => $_, OPERATOR => '!=', ENTRYAGGREGATOR => 'AND'); } my @suggestions; -$users->Limit( FIELD => $return, OPERATOR => '!=', VALUE => '' ); -$users->Limit( FIELD => $return, OPERATOR => 'IS NOT', VALUE => 'NULL', ENTRYAGGREGATOR => 'AND' ); +if ( RT->Config->Get('DatabaseType') eq 'Oracle' ) { + $users->Limit( + FIELD => $return, + OPERATOR => 'IS NOT', + VALUE => 'NULL', + ); +} +else { + $users->Limit( FIELD => $return, OPERATOR => '!=', VALUE => '' ); + $users->Limit( + FIELD => $return, + OPERATOR => 'IS NOT', + VALUE => 'NULL', + ENTRYAGGREGATOR => 'AND' + ); +} while ( my $user = $users->Next ) { next if $user->id == RT->SystemUser->id diff --git a/rt/share/html/Helpers/Autocomplete/autohandler b/rt/share/html/Helpers/Autocomplete/autohandler new file mode 100644 index 000000000..73d99669d --- /dev/null +++ b/rt/share/html/Helpers/Autocomplete/autohandler @@ -0,0 +1,53 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2012 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 }}} +<%init> + RT::Interface::Web::CacheControlExpiresHeaders( Time => 2 * 60 ); + + $m->call_next; + + diff --git a/rt/share/html/Helpers/TicketHistory b/rt/share/html/Helpers/TicketHistory index 357ee8f96..92c0f85c0 100644 --- a/rt/share/html/Helpers/TicketHistory +++ b/rt/share/html/Helpers/TicketHistory @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 68e8a0517..c708e9948 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 3833f27fa..741bbcfe0 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 new file mode 100644 index 000000000..fd683a449 --- /dev/null +++ b/rt/share/html/Helpers/autohandler @@ -0,0 +1,52 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2012 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 }}} +<%init> + RT::Interface::Web::CacheControlExpiresHeaders( Time => 'no-cache' ); + + $m->call_next; + diff --git a/rt/share/html/Install/Basics.html b/rt/share/html/Install/Basics.html index 6b5522431..8fe1a582d 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ff7aa9e7f..30a495dc2 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 68f8a67ed..1a6e5e009 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ceb120221..0a171b729 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 66271d7bf..e1cbd9f5e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 24ac0ff71..9d53152dc 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 ea0114983..9ef4f695a 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 0cc39aff6..468662b1e 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 132433da0..24749e210 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 da7bd0ba8..436303e16 100644 --- a/rt/share/html/Install/autohandler +++ b/rt/share/html/Install/autohandler @@ -2,7 +2,7 @@ %# %# COPYRIGHT: %# -%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 78069afe3..da3b7e423 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 86e48e2e5..3575451d8 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 086e1122e..7c649bbb6 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -49,4 +49,9 @@ my ($good, $msg) = RT::Interface::Web::AttemptPasswordAuthentication(\%ARGS); $ARGS{'actions'} = [$msg] if not $good and $msg; + +% if ( RT::Interface::Web::MobileClient() || $ARGS{mobile} ) { +<& /m/_elements/login, %ARGS &> +% } else { <& /Elements/Login, %ARGS &> +% } diff --git a/rt/share/html/NoAuth/Logout.html b/rt/share/html/NoAuth/Logout.html index 20024ccec..7c9e0cb76 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) @@ -76,7 +76,7 @@ $m->callback( %ARGS, URL => \$URL ); $m->callback( %ARGS, CallbackName => 'BeforeSessionDelete' ); if (keys %session) { - tied(%session)->delete; + RT::Interface::Web::InstantiateNewSession(); $session{'CurrentUser'} = RT::CurrentUser->new; } diff --git a/rt/share/html/NoAuth/Reminder.html b/rt/share/html/NoAuth/Reminder.html index 15760883a..a54e0fbb3 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 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 54ef682dd..c1ffaf451 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-2012 Best Practical Solutions, LLC +%# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) diff --git a/rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html b/rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html index f7ba06793..649ca3dd4 100644 --- a/rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html +++ b/rt/share/html/NoAuth/RichText/ckeditor/LICENSE.html @@ -7,7 +7,7 @@ Software License Agreement ========================== CKEditor - The text editor for Internet - http://ckeditor.com -Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. Licensed under the terms of any of the following licenses at your choice: @@ -28,9 +28,7 @@ You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your -license choice. In any case, your choice will not restrict any -recipient of your version of this software to use, reproduce, modify -and distribute this software under any of the above licenses. +license choice. Sources of Intellectual Property Included in CKEditor ===================================================== @@ -40,11 +38,6 @@ CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission. -YUI Test: At _source/tests/yuitest.js can be found part of the source -code of YUI, which is licensed under the terms of the BSD License -(http://developer.yahoo.com/yui/license.txt). YUI is Copyright (C) -2008, Yahoo! Inc. - Trademarks ========== @@ -1286,7 +1279,7 @@ EXHIBIT A -Mozilla Public License.

CKEditor™ - The text editor for Internet™ - http://ckeditor.com
- Copyright © 2003-2010, CKSource - Frederico Knabben. All rights reserved. + Copyright © 2003-2013, CKSource - Frederico Knabben. All rights reserved.

Licensed under the terms of any of the following licenses at your choice: diff --git a/rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js b/rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js index f60345978..ae923ec82 100644 --- a/rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js +++ b/rt/share/html/NoAuth/RichText/ckeditor/adapters/jquery.js @@ -1,6 +1,6 @@ -/* -Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ -(function(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})(); +(function(){CKEDITOR.config.jqueryOverrideVal=typeof CKEDITOR.config.jqueryOverrideVal=='undefined'?true:CKEDITOR.config.jqueryOverrideVal;var a=window.jQuery;if(typeof a=='undefined')return;a.extend(a.fn,{ckeditorGet:function(){var b=this.eq(0).data('ckeditorInstance');if(!b)throw 'CKEditor not yet initialized, use ckeditor() with callback.';return b;},ckeditor:function(b,c){if(!CKEDITOR.env.isCompatible)return this;if(!a.isFunction(b)){var d=c;c=b;b=d;}c=c||{};this.filter('textarea, div, p').each(function(){var e=a(this),f=e.data('ckeditorInstance'),g=e.data('_ckeditorInstanceLock'),h=this;if(f&&!g){if(b)b.apply(f,[this]);}else if(!g){if(c.autoUpdateElement||typeof c.autoUpdateElement=='undefined'&&CKEDITOR.config.autoUpdateElement)c.autoUpdateElementJquery=true;c.autoUpdateElement=false;e.data('_ckeditorInstanceLock',true);f=CKEDITOR.replace(h,c);e.data('ckeditorInstance',f);f.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}i.removeListener('instanceReady',this.callee);j.on('dataReady',function(){e.trigger('setData.ckeditor',[j]);});j.on('getData',function(l){e.trigger('getData.ckeditor',[j,l.data]);},999);j.on('destroy',function(){e.trigger('destroy.ckeditor',[j]);});if(j.config.autoUpdateElementJquery&&e.is('textarea')&&e.parents('form').length){var k=function(){e.ckeditor(function(){j.updateElement();});};e.parents('form').submit(k);e.parents('form').bind('form-pre-serialize',k);e.bind('destroy.ckeditor',function(){e.parents('form').unbind('submit',k);e.parents('form').unbind('form-pre-serialize',k);});}j.on('destroy',function(){e.data('ckeditorInstance',null);});e.data('_ckeditorInstanceLock',null);e.trigger('instanceReady.ckeditor',[j]);if(b)b.apply(j,[h]);},0);},null,null,9999);}else CKEDITOR.on('instanceReady',function(i){var j=i.editor;setTimeout(function(){if(!j.element){setTimeout(arguments.callee,100);return;}if(j.element.$==h)if(b)b.apply(j,[h]);},0);},null,null,9999);});return this;}});if(CKEDITOR.config.jqueryOverrideVal)a.fn.val=CKEDITOR.tools.override(a.fn.val,function(b){return function(c,d){var e=typeof c!='undefined',f;this.each(function(){var g=a(this),h=g.data('ckeditorInstance');if(!d&&g.is('textarea')&&h){if(e)h.setData(c);else{f=h.getData();return null;}}else if(e)b.call(g,c);else{f=b.call(g);return null;}return true;});return e?this:f;};});})(); diff --git a/rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js b/rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js index 77b165e03..cd0359b1c 100644 --- a/rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js +++ b/rt/share/html/NoAuth/RichText/ckeditor/ckeditor.js @@ -1,135 +1,153 @@ -/* -Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ -(function(){if(!window.CKEDITOR)window.CKEDITOR=(function(){var a={timestamp:'A8LE4JO',version:'3.4.1',revision:'5892',_:{},status:'unloaded',basePath:(function(){var d=window.CKEDITOR_BASEPATH||'';if(!d){var e=document.getElementsByTagName('script');for(var f=0;f=0?'&':'?')+'t='+this.timestamp;return d;}},b=window.CKEDITOR_GETURL;if(b){var c=a.getUrl;a.getUrl=function(d){return b.call(a,d)||c.call(a,d);};}return a;})();var a=CKEDITOR;if(!a.event){a.event=function(){};a.event.implementOn=function(b,c){var d=a.event.prototype;for(var e in d){if(b[e]==undefined)b[e]=d[e];}};a.event.prototype=(function(){var b=function(d){var e=d.getPrivate&&d.getPrivate()||d._||(d._={});return e.events||(e.events={});},c=function(d){this.name=d;this.listeners=[];};c.prototype={getListenerIndex:function(d){for(var e=0,f=this.listeners;e=0;n--){if(k[n].priority<=h){k.splice(n+1,0,m);return;}}k.unshift(m);}},fire:(function(){var d=false,e=function(){d=true;},f=false,g=function(){f=true;};return function(h,i,j){var k=b(this)[h],l=d,m=f;d=f=false;if(k){var n=k.listeners;if(n.length){n=n.slice(0);for(var o=0;o=0)f.listeners.splice(g,1);}},hasListeners:function(d){var e=b(this)[d]; -return e&&e.listeners.length>0;}};})();}if(!a.editor){a.ELEMENT_MODE_NONE=0;a.ELEMENT_MODE_REPLACE=1;a.ELEMENT_MODE_APPENDTO=2;a.editor=function(b,c,d,e){var f=this;f._={instanceConfig:b,element:c,data:e};f.elementMode=d||0;a.event.call(f);f._init();};a.editor.replace=function(b,c){var d=b;if(typeof d!='object'){d=document.getElementById(b);if(!d){var e=0,f=document.getElementsByName(b);while((d=f[e++])&&d.tagName.toLowerCase()!='textarea'){}}if(!d)throw '[CKEDITOR.editor.replace] The element with id or name "'+b+'" was not found.';}d.style.visibility='hidden';return new a.editor(c,d,1);};a.editor.appendTo=function(b,c,d){var e=b;if(typeof e!='object'){e=document.getElementById(b);if(!e)throw '[CKEDITOR.editor.appendTo] The element with id "'+b+'" was not found.';}return new a.editor(c,e,2,d);};a.editor.prototype={_init:function(){var b=a.editor._pending||(a.editor._pending=[]);b.push(this);},fire:function(b,c){return a.event.prototype.fire.call(this,b,c,this);},fireOnce:function(b,c){return a.event.prototype.fireOnce.call(this,b,c,this);}};a.event.implementOn(a.editor.prototype,true);}if(!a.env)a.env=(function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,d={ie:/*@cc_on!@*/false,opera:!!c&&c.version,webkit:b.indexOf(' applewebkit/')>-1,air:b.indexOf(' adobeair/')>-1,mac:b.indexOf('macintosh')>-1,quirks:document.compatMode=='BackCompat',mobile:b.indexOf('mobile')>-1,isCustomDomain:function(){if(!this.ie)return false;var g=document.domain,h=window.location.hostname;return g!=h&&g!='['+h+']';}};d.gecko=navigator.product=='Gecko'&&!d.webkit&&!d.opera;var e=0;if(d.ie){e=parseFloat(b.match(/msie (\d+)/)[1]);d.ie8=!!document.documentMode;d.ie8Compat=document.documentMode==8;d.ie7Compat=e==7&&!document.documentMode||document.documentMode==7;d.ie6Compat=e<7||d.quirks;}if(d.gecko){var f=b.match(/rv:([\d\.]+)/);if(f){f=f[1].split('.');e=f[0]*10000+(f[1]||0)*100+ +(f[2]||0);}}if(d.opera)e=parseFloat(c.version());if(d.air)e=parseFloat(b.match(/ adobeair\/(\d+)/)[1]);if(d.webkit)e=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]);d.version=e;d.isCompatible=!d.mobile&&(d.ie&&e>=6||d.gecko&&e>=10801||d.opera&&e>=9.5||d.air&&e>=1||d.webkit&&e>=522||false);d.cssClass='cke_browser_'+(d.ie?'ie':d.gecko?'gecko':d.opera?'opera':d.air?'air':d.webkit?'webkit':'unknown');if(d.quirks)d.cssClass+=' cke_browser_quirks';if(d.ie){d.cssClass+=' cke_browser_ie'+(d.version<7?'6':d.version>=8?'8':'7');if(d.quirks)d.cssClass+=' cke_browser_iequirks';}if(d.gecko&&e<10900)d.cssClass+=' cke_browser_gecko18'; -return d;})();var b=a.env;var c=b.ie;if(a.status=='unloaded')(function(){a.event.implementOn(a);a.loadFullCore=function(){if(a.status!='basic_ready'){a.loadFullCore._load=true;return;}delete a.loadFullCore;var e=document.createElement('script');e.type='text/javascript';e.src=a.basePath+'ckeditor.js';document.getElementsByTagName('head')[0].appendChild(e);};a.loadFullCoreTimeout=0;a.replaceClass='ckeditor';a.replaceByClassEnabled=true;var d=function(e,f,g,h){if(b.isCompatible){if(a.loadFullCore)a.loadFullCore();var i=g(e,f,h);a.add(i);return i;}return null;};a.replace=function(e,f){return d(e,f,a.editor.replace);};a.appendTo=function(e,f,g){return d(e,f,a.editor.appendTo,g);};a.add=function(e){var f=this._.pending||(this._.pending=[]);f.push(e);};a.replaceAll=function(){var e=document.getElementsByTagName('textarea');for(var f=0;f'+g+'');else h.push('');}return h.join('');},htmlEncode:function(f){var g=function(k){var l=new d.element('span');l.setText(k);return l.getHtml();},h=g('\n').toLowerCase()=='
'?function(k){return g(k).replace(/
/gi,'\n');}:g,i=g('>')=='>'?function(k){return h(k).replace(/>/g,'>');}:h,j=g(' ')=='  '?function(k){return i(k).replace(/ /g,' ');}:i;this.htmlEncode=j;return this.htmlEncode(f);},htmlEncodeAttr:function(f){return f.replace(/"/g,'"').replace(//g,'>');},escapeCssSelector:function(f){return f.replace(/[\s#:.,$*^\[\]()~=+>]/g,'\\$&');},getNextNumber:(function(){var f=0;return function(){return++f;};})(),getNextId:function(){return 'cke_'+this.getNextNumber();},override:function(f,g){return g(f);},setTimeout:function(f,g,h,i,j){if(!j)j=window;if(!h)h=j;return j.setTimeout(function(){if(i)f.apply(h,[].concat(i));else f.apply(h);},g||0);},trim:(function(){var f=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(g){return g.replace(f,'');};})(),ltrim:(function(){var f=/^[ \t\n\r]+/g;return function(g){return g.replace(f,'');};})(),rtrim:(function(){var f=/[ \t\n\r]+$/g;return function(g){return g.replace(f,'');};})(),indexOf:Array.prototype.indexOf?function(f,g){return f.indexOf(g);}:function(f,g){for(var h=0,i=f.length;h]*>/g,''):i;},getOuterHtml:function(){var j=this;if(j.$.outerHTML)return j.$.outerHTML.replace(/<\?[^>]*>/,'');var i=j.$.ownerDocument.createElement('div');i.appendChild(j.$.cloneNode(true));return i.innerHTML;},setHtml:function(i){return this.$.innerHTML=i;},setText:function(i){h.prototype.setText=this.$.innerText!=undefined?function(j){return this.$.innerText=j;}:function(j){return this.$.textContent=j;};return this.setText(i);},getAttribute:(function(){var i=function(j){return this.$.getAttribute(j,2);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){var n=this;switch(j){case 'class':j='className';break;case 'tabindex':var k=i.call(n,j);if(k!==0&&n.$.tabIndex===0)k=null;return k;break;case 'checked':var l=n.$.attributes.getNamedItem(j),m=l.specified?l.nodeValue:n.$.checked;return m?'checked':null;case 'hspace':return n.$.hspace;case 'style':return n.$.style.cssText;}return i.call(n,j);};else return i;})(),getChildren:function(){return new d.nodeList(this.$.childNodes);},getComputedStyle:c?function(i){return this.$.currentStyle[e.cssStyleToDomStyle(i)];}:function(i){return this.getWindow().$.getComputedStyle(this.$,'').getPropertyValue(i);},getDtd:function(){var i=f[this.getName()];this.getDtd=function(){return i;};return i;},getElementsByTag:g.prototype.getElementsByTag,getTabIndex:c?function(){var i=this.$.tabIndex;if(i===0&&!f.$tabIndex[this.getName()]&&parseInt(this.getAttribute('tabindex'),10)!==0)i=-1;return i;}:b.webkit?function(){var i=this.$.tabIndex;if(i==undefined){i=parseInt(this.getAttribute('tabindex'),10);if(isNaN(i))i=-1;}return i;}:function(){return this.$.tabIndex;},getText:function(){return this.$.textContent||this.$.innerText||'';},getWindow:function(){return this.getDocument().getWindow();},getId:function(){return this.$.id||null;},getNameAtt:function(){return this.$.name||null;},getName:function(){var i=this.$.nodeName.toLowerCase();if(c){var j=this.$.scopeName;if(j!='HTML')i=j.toLowerCase()+':'+i;}return(this.getName=function(){return i;})();},getValue:function(){return this.$.value;},getFirst:function(i){var j=this.$.firstChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getNext(i);return k;},getLast:function(i){var j=this.$.lastChild,k=j&&new d.node(j);if(k&&i&&!i(k))k=k.getPrevious(i);return k;},getStyle:function(i){return this.$.style[e.cssStyleToDomStyle(i)]; -},is:function(){var i=this.getName();for(var j=0;j0&&(j>2||!k[i[0].nodeName]||j==2&&!k[i[1].nodeName]);},hasAttribute:function(i){var j=this.$.attributes.getNamedItem(i);return!!(j&&j.specified);},hide:function(){this.setStyle('display','none');},moveChildren:function(i,j){var k=this.$;i=i.$;if(k==i)return;var l;if(j)while(l=k.lastChild)i.insertBefore(k.removeChild(l),i.firstChild);else while(l=k.firstChild)i.appendChild(k.removeChild(l));},mergeSiblings:(function(){function i(j,k,l){if(k&&k.type==1){var m=[];while(k.getAttribute('_cke_bookmark')||k.isEmptyInlineRemoveable()){m.push(k);k=l?k.getNext():k.getPrevious();if(!k||k.type!=1)return;}if(j.isIdentical(k)){var n=l?j.getLast():j.getFirst();while(m.length)m.shift().move(j,!l);k.moveChildren(j,!l);k.remove();if(n&&n.type==1)n.mergeSiblings();}}};return function(){var j=this;if(!(f.$removeEmpty[j.getName()]||j.is('a')))return;i(j,j.getNext(),true);i(j,j.getPrevious());};})(),show:function(){this.setStyles({display:'',visibility:''}); -},setAttribute:(function(){var i=function(j,k){this.$.setAttribute(j,k);return this;};if(c&&(b.ie7Compat||b.ie6Compat))return function(j,k){var l=this;if(j=='class')l.$.className=k;else if(j=='style')l.$.style.cssText=k;else if(j=='tabindex')l.$.tabIndex=k;else if(j=='checked')l.$.checked=k;else i.apply(l,arguments);return l;};else return i;})(),setAttributes:function(i){for(var j in i)this.setAttribute(j,i[j]);return this;},setValue:function(i){this.$.value=i;return this;},removeAttribute:(function(){var i=function(j){this.$.removeAttribute(j);};if(c&&(b.ie7Compat||b.ie6Compat))return function(j){if(j=='class')j='className';else if(j=='tabindex')j='tabIndex';i.call(this,j);};else return i;})(),removeAttributes:function(i){if(e.isArray(i))for(var j=0;j=100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+i+')');}else this.setStyle('opacity',i);},unselectable:b.gecko?function(){this.$.style.MozUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:b.webkit?function(){this.$.style.KhtmlUserSelect='none';this.on('dragstart',function(i){i.data.preventDefault();});}:function(){if(c||b.opera){var i=this.$,j,k=0;i.unselectable='on';while(j=i.all[k++])switch(j.tagName.toLowerCase()){case 'iframe':case 'textarea':case 'input':case 'select':break;default:j.unselectable='on';}}},getPositionedAncestor:function(){var i=this;while(i.getName()!='html'){if(i.getComputedStyle('position')!='static')return i;i=i.getParent();}return null;},getDocumentPosition:function(i){var D=this;var j=0,k=0,l=D.getDocument().getBody(),m=D.getDocument().$.compatMode=='BackCompat',n=D.getDocument();if(document.documentElement.getBoundingClientRect){var o=D.$.getBoundingClientRect(),p=n.$,q=p.documentElement,r=q.clientTop||l.$.clientTop||0,s=q.clientLeft||l.$.clientLeft||0,t=true;if(c){var u=n.getDocumentElement().contains(D),v=n.getBody().contains(D);t=m&&v||!m&&u;}if(t){j=o.left+(!m&&q.scrollLeft||l.$.scrollLeft);j-=s;k=o.top+(!m&&q.scrollTop||l.$.scrollTop); -k-=r;}}else{var w=D,x=null,y;while(w&&!(w.getName()=='body'||w.getName()=='html')){j+=w.$.offsetLeft-w.$.scrollLeft;k+=w.$.offsetTop-w.$.scrollTop;if(!w.equals(D)){j+=w.$.clientLeft||0;k+=w.$.clientTop||0;}var z=x;while(z&&!z.equals(w)){j-=z.$.scrollLeft;k-=z.$.scrollTop;z=z.getParent();}x=w;w=(y=w.$.offsetParent)?new h(y):null;}}if(i){var A=D.getWindow(),B=i.getWindow();if(!A.equals(B)&&A.$.frameElement){var C=new h(A.$.frameElement).getDocumentPosition(i);j+=C.x;k+=C.y;}}if(!document.documentElement.getBoundingClientRect)if(b.gecko&&!m){j+=D.$.clientLeft?1:0;k+=D.$.clientTop?1:0;}return{x:j,y:k};},scrollIntoView:function(i){var o=this;var j=o.getWindow(),k=j.getViewPaneSize().height,l=k*-1;if(i)l+=k;else{l+=o.$.offsetHeight||0;l+=parseInt(o.getComputedStyle('marginBottom')||0,10)||0;}var m=o.getDocumentPosition();l+=m.y;l=l<0?0:l;var n=j.getScrollPosition().y;if(l>n||lwindow.setTimeout(function(){window.close();},50);")');}return i&&new g(i.contentWindow.document);},copyAttributes:function(i,j){var p=this;var k=p.$.attributes;j=j||{};for(var l=0;l0&&j)j=j.childNodes[i.shift()];return j?new d.node(j):null;},getChildCount:function(){return this.$.childNodes.length;},disableContextMenu:function(){this.on('contextmenu',function(i){if(!i.data.getTarget().hasClass('cke_enable_context_menu'))i.data.preventDefault();});},setSize:(function(){var i={width:['border-left-width','border-right-width','padding-left','padding-right'],height:['border-top-width','border-bottom-width','padding-top','padding-bottom']}; -return function(j,k,l){if(typeof k=='number'){if(l&&!(c&&b.quirks)){var m=0;for(var n=0,o=i[j].length;n',bodyId:'',bodyClass:'',fullPage:false,height:200,plugins:'about,a11yhelp,basicstyles,bidi,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,dialogadvtab,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,liststyle,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',extraPlugins:'',removePlugins:'',protectedSource:[],tabIndex:0,theme:'default',skin:'kama',width:'',baseFloatZIndex:10000};var i=a.config;a.focusManager=function(j){if(j.focusManager)return j.focusManager;this.hasFocus=false;this._={editor:j};return this;};a.focusManager.prototype={focus:function(){var k=this;if(k._.timer)clearTimeout(k._.timer);if(!k.hasFocus){if(a.currentInstance)a.currentInstance.focusManager.forceBlur();var j=k._.editor;j.container.getChild(1).addClass('cke_focus');k.hasFocus=true;j.fire('focus');}},blur:function(){var j=this;if(j._.timer)clearTimeout(j._.timer);j._.timer=setTimeout(function(){delete j._.timer; -j.forceBlur();},100);},forceBlur:function(){if(this.hasFocus){var j=this._.editor;j.container.getChild(1).removeClass('cke_focus');this.hasFocus=false;j.fire('blur');}}};(function(){var j={};a.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,'en-au':1,'en-ca':1,'en-gb':1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,'fr-ca':1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,km:1,ko:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,'pt-br':1,pt:1,ro:1,ru:1,sk:1,sl:1,'sr-latn':1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,'zh-cn':1,zh:1},load:function(k,l,m){if(!k||!a.lang.languages[k])k=this.detect(l,k);if(!this[k])a.scriptLoader.load(a.getUrl('lang/'+k+'.js'),function(){m(k,this[k]);},this);else m(k,this[k]);},detect:function(k,l){var m=this.languages;l=l||navigator.userLanguage||navigator.language;var n=l.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),o=n[1],p=n[2];if(m[o+'-'+p])o=o+'-'+p;else if(!m[o])o=null;a.lang.detect=o?function(){return o;}:function(q){return q;};return o||k;}};})();a.scriptLoader=(function(){var j={},k={};return{load:function(l,m,n,o,p){var q=typeof l=='string';if(q)l=[l];if(!n)n=a;var r=l.length,s=[],t=[],u=function(z){if(m)if(q)m.call(n,z);else m.call(n,s,t);};if(r===0){u(true);return;}var v=function(z,A){(A?s:t).push(z);if(--r<=0){p&&a.document.getDocumentElement().removeStyle('cursor');u(A);}},w=function(z,A){j[z]=1;var B=k[z];delete k[z];for(var C=0;C1)return;var B=new h('script');B.setAttributes({type:'text/javascript',src:z});if(m)if(c)B.$.onreadystatechange=function(){if(B.$.readyState=='loaded'||B.$.readyState=='complete'){B.$.onreadystatechange=null;w(z,true);}};else{B.$.onload=function(){setTimeout(function(){w(z,true);},0);};B.$.onerror=function(){w(z,false);};}B.appendTo(a.document.getHead());};p&&a.document.getDocumentElement().setStyle('cursor','wait');for(var y=0;y0){t(v);a.imageCacher.load(v,function(){l[p]=1;n(o,p,q,r);});return;}l[p]=1;}q=s[q];var w=!q||!!q._isLoaded;if(w)r&&r();else{var x=q._pending||(q._pending=[]);x.push(r);if(x.length>1)return;var y=!q.css||!q.css.length,z=!q.js||!q.js.length,A=function(){if(y&&z){q._isLoaded=1;for(var D=0;D=0?x.langCode:J[0];if(!I.lang[L])G.push(a.getUrl(K+'lang/'+L+'.js'));else{e.extend(x.lang,I.lang[L]);L=null;}}F.push(L);E.push(I);}a.scriptLoader.load(G,function(){var M=['beforeInit','init','afterInit'];for(var N=0;N]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:[^\"'>]+)|(?:\"[^\"]*\")|(?:'[^']*'))*)\\/?>))",'g')};};(function(){var l=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,m={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};a.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(n){var A=this;var o,p,q=0,r;while(o=A._.htmlPartsRegex.exec(n)){var s=o.index;if(s>q){var t=n.substring(q,s);if(r)r.push(t);else A.onText(t);}q=A._.htmlPartsRegex.lastIndex;if(p=o[1]){p=p.toLowerCase();if(r&&f.$cdata[p]){A.onCDATA(r.join(''));r=null;}if(!r){A.onTagClose(p);continue;}}if(r){r.push(o[0]);continue;}if(p=o[3]){p=p.toLowerCase();if(/="/.test(p))continue;var u={},v,w=o[4],x=!!(w&&w.charAt(w.length-1)=='/');if(w)while(v=l.exec(w)){var y=v[1].toLowerCase(),z=v[2]||v[3]||v[4]||''; -if(!z&&m[y])u[y]=y;else u[y]=z;}A.onTagOpen(p,u,x);if(!r&&f.$cdata[p])r=[];continue;}if(p=o[2])A.onComment(p);}if(n.length>q)A.onText(n.substring(q,n.length));}};})();a.htmlParser.comment=function(l){this.value=l;this._={isBlockLike:false};};a.htmlParser.comment.prototype={type:8,writeHtml:function(l,m){var n=this.value;if(m){if(!(n=m.onComment(n,this)))return;if(typeof n!='string'){n.parent=this.parent;n.writeHtml(l,m);return;}}l.comment(n);}};(function(){var l=/[\t\r\n ]{2,}|[\t\r\n]/g;a.htmlParser.text=function(m){this.value=m;this._={isBlockLike:false};};a.htmlParser.text.prototype={type:3,writeHtml:function(m,n){var o=this.value;if(n&&!(o=n.onText(o,this)))return;m.text(o);}};})();(function(){a.htmlParser.cdata=function(l){this.value=l;};a.htmlParser.cdata.prototype={type:3,writeHtml:function(l){l.write(this.value);}};})();a.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false};};(function(){var l={colgroup:1,dd:1,dt:1,li:1,option:1,p:1,td:1,tfoot:1,th:1,thead:1,tr:1},m=e.extend({table:1,ul:1,ol:1,dl:1},f.table,f.ul,f.ol,f.dl),n=f.$list,o=f.$listItem;a.htmlParser.fragment.fromHtml=function(p,q){var r=new a.htmlParser(),s=[],t=new a.htmlParser.fragment(),u=[],v=[],w=t,x=false,y;function z(E){var F;if(u.length>0)for(var G=0;G0)w.add(v.shift());};function B(E,F,G){F=F||w||t;if(q&&!F.type){var H,I;if(E.attributes&&(I=E.attributes._cke_real_element_type))H=I;else H=E.name;if(H&&!(H in f.$body)&&!(H in f.$nonBodyContent)){var J=w;w=F;r.onTagOpen(q,{});F=w;if(G)w=J;}}if(E._.isBlockLike&&E.name!='pre'){var K=E.children.length,L=E.children[K-1],M;if(L&&L.type==3)if(!(M=e.rtrim(L.value)))E.children.length=K-1;else L.value=M;}F.add(E);if(E.returnPoint){w=E.returnPoint;delete E.returnPoint;}};r.onTagOpen=function(E,F,G){var H=new a.htmlParser.element(E,F);if(H.isUnknown&&G)H.isEmpty=true;if(f.$removeEmpty[E]){u.push(H);return;}else if(E=='pre')x=true;else if(E=='br'&&x){w.add(new a.htmlParser.text('\n'));return;}if(E=='br'){v.push(H);return;}var I=w.name,J=I&&(f[I]||(w._.isBlockLike?f.div:f.span));if(J&&!H.isUnknown&&!w.isUnknown&&!J[E]){var K=false,L;if(E in n&&I in n){var M=w.children,N=M[M.length-1];if(!(N&&N.name in o))B(N=new a.htmlParser.element('li'),w);y=w,L=N;}else if(E==I)B(w,w.parent);else{if(m[I]){if(!y)y=w; -}else{B(w,w.parent,true);if(!l[I])u.unshift(w);}K=true;}if(L)w=L;else w=w.returnPoint||w.parent;if(K){r.onTagOpen.apply(this,arguments);return;}}z(E);A();H.parent=w;H.returnPoint=y;y=0;if(H.isEmpty)B(H);else w=H;};r.onTagClose=function(E){for(var F=u.length-1;F>=0;F--){if(E==u[F].name){u.splice(F,1);return;}}var G=[],H=[],I=w;while(I.type&&I.name!=E){if(!I._.isBlockLike)H.unshift(I);G.push(I);I=I.parent;}if(I.type){for(F=0;F0&&s.children[q-1]||null;if(r){if(p._.isBlockLike&&r.type==3){r.value=e.rtrim(r.value);if(r.value.length===0){s.children.pop();s.add(p);return;}}r.next=p;}p.previous=r;p.parent=s;s.children.push(p);s._.hasInlineStarted=p.type==3||p.type==1&&!p._.isBlockLike;},writeHtml:function(p,q){var r;this.filterChildren=function(){var s=new a.htmlParser.basicWriter();this.writeChildrenHtml.call(this,s,q,true);var t=s.getHtml();this.children=new a.htmlParser.fragment.fromHtml(t).children;r=1;};!this.name&&q&&q.onFragment(this);this.writeChildrenHtml(p,r?null:q);},writeChildrenHtml:function(p,q){for(var r=0;rn?1:0;};a.htmlParser.element.prototype={type:1,add:a.htmlParser.fragment.prototype.add,clone:function(){return new a.htmlParser.element(this.name,this.attributes);},writeHtml:function(m,n){var o=this.attributes,p=this,q=p.name,r,s,t,u;p.filterChildren=function(){if(!u){var z=new a.htmlParser.basicWriter(); -a.htmlParser.fragment.prototype.writeChildrenHtml.call(p,z,n);p.children=new a.htmlParser.fragment.fromHtml(z.getHtml()).children;u=1;}};if(n){for(;;){if(!(q=n.onElementName(q)))return;p.name=q;if(!(p=n.onElement(p)))return;p.parent=this.parent;if(p.name==q)break;if(p.type!=1){p.writeHtml(m,n);return;}q=p.name;if(!q){this.writeChildrenHtml.call(p,m,u?null:n);return;}}o=p.attributes;}m.openTag(q,o);var v=[];for(var w=0;w<2;w++)for(r in o){s=r;t=o[r];if(w==1)v.push([r,t]);else if(n){for(;;){if(!(s=n.onAttributeName(r))){delete o[r];break;}else if(s!=r){delete o[r];r=s;continue;}else break;}if(s)if((t=n.onAttribute(p,s,t))===false)delete o[s];else o[s]=t;}}if(m.sortAttributes)v.sort(l);var x=v.length;for(w=0;w=0;u--){var x=r[u];if(x){x.pri=s;q.splice(t,0,x);}}}};function n(q,r,s){if(r)for(var t in r){var u=q[t];q[t]=o(u,r[t],s);if(!u)q.$length++;}};function o(q,r,s){if(r){r.pri=s;if(q){if(!q.splice){if(q.pri>s)q=[r,q];else q=[q,r];q.filter=p;}else m(q,r,s);return q;}else{r.filter=r;return r;}}};function p(q){var r=q.type||q instanceof a.htmlParser.fragment;for(var s=0;s');else this._.output.push('>');},attribute:function(l,m){if(typeof m=='string')m=e.htmlEncodeAttr(m);this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){this._.output.push('');},text:function(l){this._.output.push(l);},comment:function(l){this._.output.push('');},write:function(l){this._.output.push(l);},reset:function(){this._.output=[];this._.indent=false;},getHtml:function(l){var m=this._.output.join('');if(l)this.reset();return m;}}});delete a.loadFullCore;a.instances={};a.document=new g(document);a.add=function(l){a.instances[l.name]=l;l.on('focus',function(){if(a.currentInstance!=l){a.currentInstance=l;a.fire('currentInstance');}});l.on('blur',function(){if(a.currentInstance==l){a.currentInstance=null;a.fire('currentInstance');}});};a.remove=function(l){delete a.instances[l.name];};a.on('instanceDestroyed',function(){if(e.isEmpty(this.instances))a.fire('reset');});a.TRISTATE_ON=1;a.TRISTATE_OFF=2;a.TRISTATE_DISABLED=0;d.comment=e.createClass({base:d.node,$:function(l,m){if(typeof l=='string')l=(m?m.$:document).createComment(l);this.base(l);},proto:{type:8,getOuterHtml:function(){return '';}}});(function(){var l={address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1},m={body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1},n=function(o){var p=o.getChildren();for(var q=0,r=p.count();q0&&D.getChild(w.startOffset-1);this._.guardRTL=function(G,H){return(!H||!D.equals(G))&&(!E||!G.equals(E))&&(G.type!=1||!H||G.getName()!='body');};}var F=t?this._.guardRTL:this._.guardLTR;if(y)x=function(G,H){if(F(G,H)===false)return false;return y(G,H);};else x=F;if(this.current)v=this.current[A](false,z,x);else if(t){v=w.endContainer;if(w.endOffset>0){v=v.getChild(w.endOffset-1);if(x(v)===false)v=null;}else v=x(v,true)===false?null:v.getPreviousSourceNode(true,z,x);}else{v=w.startContainer; -v=v.getChild(w.startOffset);if(v){if(x(v)===false)v=null;}else v=x(w.startContainer,true)===false?null:w.startContainer.getNextSourceNode(true,z,x);}while(v&&!this._.end){this.current=v;if(!this.evaluator||this.evaluator(v)!==false){if(!u)return v;}else if(u&&this.evaluator)return false;v=v[A](false,z,x);}this.end();return this.current=null;};function m(t){var u,v=null;while(u=l.call(this,t))v=u;return v;};d.walker=e.createClass({$:function(t){this.range=t;this._={};},proto:{end:function(){this._.end=1;},next:function(){return l.call(this);},previous:function(){return l.call(this,true);},checkForward:function(){return l.call(this,false,true)!==false;},checkBackward:function(){return l.call(this,true,true)!==false;},lastForward:function(){return m.call(this);},lastBackward:function(){return m.call(this,true);},reset:function(){delete this.current;this._={};}}});var n={block:1,'list-item':1,table:1,'table-row-group':1,'table-header-group':1,'table-footer-group':1,'table-row':1,'table-column-group':1,'table-column':1,'table-cell':1,'table-caption':1},o={hr:1};h.prototype.isBlockBoundary=function(t){var u=e.extend({},o,t||{});return n[this.getComputedStyle('display')]||u[this.getName()];};d.walker.blockBoundary=function(t){return function(u,v){return!(u.type==1&&u.isBlockBoundary(t));};};d.walker.listItemBoundary=function(){return this.blockBoundary({br:1});};d.walker.bookmark=function(t,u){function v(w){return w&&w.getName&&w.getName()=='span'&&w.hasAttribute('_cke_bookmark');};return function(w){var x,y;x=w&&!w.getName&&(y=w.getParent())&&v(y);x=t?x:x||v(w);return u^x;};};d.walker.whitespaces=function(t){return function(u){var v=u&&u.type==3&&!e.trim(u.getText());return t^v;};};d.walker.invisible=function(t){var u=d.walker.whitespaces();return function(v){var w=u(v)||v.is&&!v.$.offsetHeight;return t^w;};};var p=/^[\t\r\n ]*(?: |\xa0)$/,q=d.walker.whitespaces(true),r=d.walker.bookmark(false,true),s=function(t){return r(t)&&q(t);};h.prototype.getBogus=function(){var t=this.getLast(s);if(t&&(!c?t.is&&t.is('br'):t.getText&&p.test(t.getText())))return t;return false;};})();d.range=function(l){var m=this;m.startContainer=null;m.startOffset=null;m.endContainer=null;m.endOffset=null;m.collapsed=true;m.document=l;};(function(){var l=function(t){t.collapsed=t.startContainer&&t.endContainer&&t.startContainer.equals(t.endContainer)&&t.startOffset==t.endOffset;},m=function(t,u,v){t.optimizeBookmark();var w=t.startContainer,x=t.endContainer,y=t.startOffset,z=t.endOffset,A,B; -if(x.type==3)x=x.split(z);else if(x.getChildCount()>0)if(z>=x.getChildCount()){x=x.append(t.document.createText(''));B=true;}else x=x.getChild(z);if(w.type==3){w.split(y);if(w.equals(x))x=w.getNext();}else if(!y){w=w.getFirst().insertBeforeMe(t.document.createText(''));A=true;}else if(y>=w.getChildCount()){w=w.append(t.document.createText(''));A=true;}else w=w.getChild(y).getPrevious();var C=w.getParents(),D=x.getParents(),E,F,G;for(E=0;E0&&!I.equals(x))J=H.append(I.clone());if(!C[N]||I.$.parentNode!=C[N].$.parentNode){K=I.getPrevious();while(K){if(K.equals(C[N])||K.equals(w))break;L=K.getPrevious();if(u==2)H.$.insertBefore(K.$.cloneNode(true),H.$.firstChild);else{K.remove();if(u==1)H.$.insertBefore(K.$,H.$.firstChild);}K=L;}}if(H)H=J;}if(u==2){var O=t.startContainer;if(O.type==3){O.$.data+=O.$.nextSibling.data;O.$.parentNode.removeChild(O.$.nextSibling);}var P=t.endContainer;if(P.type==3&&P.$.nextSibling){P.$.data+=P.$.nextSibling.data;P.$.parentNode.removeChild(P.$.nextSibling);}}else{if(F&&G&&(w.$.parentNode!=F.$.parentNode||x.$.parentNode!=G.$.parentNode)){var Q=G.getIndex();if(A&&G.$.parentNode==w.$.parentNode)Q--;t.setStart(G.getParent(),Q);}t.collapse(true);}if(A)w.remove();if(B&&x.$.parentNode)x.remove();},n={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1};function o(t){var u=false,v=d.walker.bookmark(true);return function(w){if(v(w))return true;if(w.type==3){if(e.trim(w.getText()).length)return false;}else if(w.type==1)if(!n[w.getName()])if(!t&&!c&&w.getName()=='br'&&!u)u=true;else return false;return true;};};function p(t){return t.type!=3&&t.getName() in f.$removeEmpty||!e.trim(t.getText())||t.getParent().hasAttribute('_cke_bookmark');};var q=new d.walker.whitespaces(),r=new d.walker.bookmark();function s(t){return!q(t)&&!r(t);};d.range.prototype={clone:function(){var u=this;var t=new d.range(u.document);t.startContainer=u.startContainer;t.startOffset=u.startOffset;t.endContainer=u.endContainer;t.endOffset=u.endOffset;t.collapsed=u.collapsed;return t;},collapse:function(t){var u=this;if(t){u.endContainer=u.startContainer; -u.endOffset=u.startOffset;}else{u.startContainer=u.endContainer;u.startOffset=u.endOffset;}u.collapsed=true;},cloneContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,2,t);return t;},deleteContents:function(){if(this.collapsed)return;m(this,0);},extractContents:function(){var t=new d.documentFragment(this.document);if(!this.collapsed)m(this,1,t);return t;},createBookmark:function(t){var z=this;var u,v,w,x,y=z.collapsed;u=z.document.createElement('span');u.setAttribute('_cke_bookmark',1);u.setStyle('display','none');u.setHtml(' ');if(t){w='cke_bm_'+e.getNextNumber();u.setAttribute('id',w+'S');}if(!y){v=u.clone();v.setHtml(' ');if(t)v.setAttribute('id',w+'E');x=z.clone();x.collapse();x.insertNode(v);}x=z.clone();x.collapse(true);x.insertNode(u);if(v){z.setStartAfter(u);z.setEndBefore(v);}else z.moveToPosition(u,4);return{startNode:t?w+'S':u,endNode:t?w+'E':v,serializable:t,collapsed:y};},createBookmark2:function(t){var B=this;var u=B.startContainer,v=B.endContainer,w=B.startOffset,x=B.endOffset,y=B.collapsed,z,A;if(!u||!v)return{start:0,end:0};if(t){if(u.type==1){z=u.getChild(w);if(z&&z.type==3&&w>0&&z.getPrevious().type==3){u=z;w=0;}}while(u.type==3&&(A=u.getPrevious())&&A.type==3){u=A;w+=A.getLength();}if(!y){if(v.type==1){z=v.getChild(x);if(z&&z.type==3&&x>0&&z.getPrevious().type==3){v=z;x=0;}}while(v.type==3&&(A=v.getPrevious())&&A.type==3){v=A;x+=A.getLength();}}}return{start:u.getAddress(t),end:y?null:v.getAddress(t),startOffset:w,endOffset:x,normalized:t,collapsed:y,is2:true};},moveToBookmark:function(t){var B=this;if(t.is2){var u=B.document.getByAddress(t.start,t.normalized),v=t.startOffset,w=t.end&&B.document.getByAddress(t.end,t.normalized),x=t.endOffset;B.setStart(u,v);if(w)B.setEnd(w,x);else B.collapse(true);}else{var y=t.serializable,z=y?B.document.getById(t.startNode):t.startNode,A=y?B.document.getById(t.endNode):t.endNode;B.setStartBefore(z);z.remove();if(A){B.setEndBefore(A);A.remove();}else B.collapse(true);}},getBoundaryNodes:function(){var y=this;var t=y.startContainer,u=y.endContainer,v=y.startOffset,w=y.endOffset,x;if(t.type==1){x=t.getChildCount();if(x>v)t=t.getChild(v);else if(x<1)t=t.getPreviousSourceNode();else{t=t.$;while(t.lastChild)t=t.lastChild;t=new d.node(t);t=t.getNextSourceNode()||t;}}if(u.type==1){x=u.getChildCount();if(x>w)u=u.getChild(w).getPreviousSourceNode(true);else if(x<1)u=u.getPreviousSourceNode();else{u=u.$;while(u.lastChild)u=u.lastChild;u=new d.node(u);}}if(t.getPosition(u)&2)t=u; -return{startNode:t,endNode:u};},getCommonAncestor:function(t,u){var y=this;var v=y.startContainer,w=y.endContainer,x;if(v.equals(w)){if(t&&v.type==1&&y.startOffset==y.endOffset-1)x=v.getChild(y.startOffset);else x=v;}else x=v.getCommonAncestor(w);return u&&!x.is?x.getParent():x;},optimize:function(){var v=this;var t=v.startContainer,u=v.startOffset;if(t.type!=1)if(!u)v.setStartBefore(t);else if(u>=t.getLength())v.setStartAfter(t);t=v.endContainer;u=v.endOffset;if(t.type!=1)if(!u)v.setEndBefore(t);else if(u>=t.getLength())v.setEndAfter(t);},optimizeBookmark:function(){var v=this;var t=v.startContainer,u=v.endContainer;if(t.is&&t.is('span')&&t.hasAttribute('_cke_bookmark'))v.setStartAt(t,3);if(u&&u.is&&u.is('span')&&u.hasAttribute('_cke_bookmark'))v.setEndAt(u,4);},trim:function(t,u){var B=this;var v=B.startContainer,w=B.startOffset,x=B.collapsed;if((!t||x)&&v&&v.type==3){if(!w){w=v.getIndex();v=v.getParent();}else if(w>=v.getLength()){w=v.getIndex()+1;v=v.getParent();}else{var y=v.split(w);w=v.getIndex()+1;v=v.getParent();if(B.startContainer.equals(B.endContainer))B.setEnd(y,B.endOffset-B.startOffset);else if(v.equals(B.endContainer))B.endOffset+=1;}B.setStart(v,w);if(x){B.collapse(true);return;}}var z=B.endContainer,A=B.endOffset;if(!(u||x)&&z&&z.type==3){if(!A){A=z.getIndex();z=z.getParent();}else if(A>=z.getLength()){A=z.getIndex()+1;z=z.getParent();}else{z.split(A);A=z.getIndex()+1;z=z.getParent();}B.setEnd(z,A);}},enlarge:function(t){switch(t){case 1:if(this.collapsed)return;var u=this.getCommonAncestor(),v=this.document.getBody(),w,x,y,z,A,B=false,C,D,E=this.startContainer,F=this.startOffset;if(E.type==3){if(F){E=!e.trim(E.substring(0,F)).length&&E;B=!!E;}if(E)if(!(z=E.getPrevious()))y=E.getParent();}else{if(F)z=E.getChild(F-1)||E.getLast();if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)w=y;else this.setStartBefore(y);}z=y.getPrevious();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/[\s\ufeff]$/.test(D);}else if(z.$.offsetWidth>0&&!z.getAttribute('_cke_bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;else{var G=z.$.all||z.$.getElementsByTagName('*');for(var H=0,I;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B){if(A)w=y;else if(y)this.setStartBefore(y);}else B=true;if(z){var J=z.getPrevious();if(!y&&!J){y=z;z=null;break; -}z=J;}else y=null;}if(y)y=y.getParent();}E=this.endContainer;F=this.endOffset;y=z=null;A=B=false;if(E.type==3){E=!e.trim(E.substring(F)).length&&E;B=!(E&&E.getLength());if(E)if(!(z=E.getNext()))y=E.getParent();}else{z=E.getChild(F);if(!z)y=E;}while(y||z){if(y&&!z){if(!A&&y.equals(u))A=true;if(!v.contains(y))break;if(!B||y.getComputedStyle('display')!='inline'){B=false;if(A)x=y;else if(y)this.setEndAfter(y);}z=y.getNext();}while(z){C=false;if(z.type==3){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;C=/^[\s\ufeff]/.test(D);}else if(z.$.offsetWidth>0&&!z.getAttribute('_cke_bookmark'))if(B&&f.$removeEmpty[z.getName()]){D=z.getText();if(/[^\s\ufeff]/.test(D))z=null;else{G=z.$.all||z.$.getElementsByTagName('*');for(H=0;I=G[H++];){if(!f.$removeEmpty[I.nodeName.toLowerCase()]){z=null;break;}}}if(z)C=!!D.length;}else z=null;if(C)if(B)if(A)x=y;else this.setEndAfter(y);if(z){J=z.getNext();if(!y&&!J){y=z;z=null;break;}z=J;}else y=null;}if(y)y=y.getParent();}if(w&&x){u=w.contains(x)?x:w;this.setStartBefore(u);this.setEndAfter(u);}break;case 2:case 3:var K=new d.range(this.document);v=this.document.getBody();K.setStartAt(v,1);K.setEnd(this.startContainer,this.startOffset);var L=new d.walker(K),M,N,O=d.walker.blockBoundary(t==3?{br:1}:null),P=function(R){var S=O(R);if(!S)M=R;return S;},Q=function(R){var S=P(R);if(!S&&R.is&&R.is('br'))N=R;return S;};L.guard=P;y=L.lastBackward();M=M||v;this.setStartAt(M,!M.is('br')&&(!y&&this.checkStartOfBlock()||y&&M.contains(y))?1:4);K=this.clone();K.collapse();K.setEndAt(v,2);L=new d.walker(K);L.guard=t==3?Q:P;M=null;y=L.lastForward();M=M||v;this.setEndAt(M,!y&&this.checkEndOfBlock()||y&&M.contains(y)?2:3);if(N)this.setEndAfter(N);}},shrink:function(t,u){if(!this.collapsed){t=t||2;var v=this.clone(),w=this.startContainer,x=this.endContainer,y=this.startOffset,z=this.endOffset,A=this.collapsed,B=1,C=1;if(w&&w.type==3)if(!y)v.setStartBefore(w);else if(y>=w.getLength())v.setStartAfter(w);else{v.setStartBefore(w);B=0;}if(x&&x.type==3)if(!z)v.setEndBefore(x);else if(z>=x.getLength())v.setEndAfter(x);else{v.setEndAfter(x);C=0;}var D=new d.walker(v);D.evaluator=function(H){return H.type==(t==1?1:3);};var E;D.guard=function(H,I){if(t==1&&H.type==3)return false;if(I&&H.equals(E))return false;if(!I&&H.type==1)E=H;return true;};if(B){var F=D[t==1?'lastForward':'next']();F&&this.setStartAt(F,u?1:3);}if(C){D.reset();var G=D[t==1?'lastBackward':'previous']();G&&this.setEndAt(G,u?2:4);}return!!(B||C);}},insertNode:function(t){var x=this;x.optimizeBookmark(); -x.trim(false,true);var u=x.startContainer,v=x.startOffset,w=u.getChild(v);if(w)t.insertBefore(w);else u.append(t);if(t.getParent().equals(x.endContainer))x.endOffset++;x.setStartBefore(t);},moveToPosition:function(t,u){this.setStartAt(t,u);this.collapse(true);},selectNodeContents:function(t){this.setStart(t,0);this.setEnd(t,t.type==3?t.getLength():t.getChildCount());},setStart:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])t=t.getParent(),u=t.getIndex();v.startContainer=t;v.startOffset=u;if(!v.endContainer){v.endContainer=t;v.endOffset=u;}l(v);},setEnd:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])t=t.getParent(),u=t.getIndex()+1;v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength());else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);z=null;}else if(B){A=new d.elementPath(D.startContainer);D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2); -var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this;var t=z.endContainer,u=z.endOffset;if(t.type==3){var v=e.rtrim(t.substring(u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.endContainer),x=z.clone();x.collapse(false);x.setEndAt(w.block||w.blockLimit,2);var y=new d.walker(x);y.evaluator=o(false);return y.checkForward();},moveToElementEditablePosition:function(t,u){var v;if(f.$empty[t.getName()])return false;while(t&&t.type==1){v=t.isEditable();if(v)this.moveToPosition(t,u?2:1);else if(f.$inline[t.getName()]){this.moveToPosition(t,u?4:3);return true;}if(f.$empty[t.getName()])t=t[u?'getPrevious':'getNext'](s);else t=t[u?'getLast':'getFirst'](s);if(t&&t.type==3){this.moveToPosition(t,u?4:3);return true;}}return v;},moveToElementEditStart:function(t){return this.moveToElementEditablePosition(t);},moveToElementEditEnd:function(t){return this.moveToElementEditablePosition(t,true);},getEnclosedNode:function(){var t=this.clone();t.optimize();if(t.startContainer.type!=1||t.endContainer.type!=1)return null;var u=new d.walker(t),v=d.walker.bookmark(true),w=d.walker.whitespaces(true),x=function(z){return w(z)&&v(z);};t.evaluator=x;var y=u.next();u.reset();return y&&y.equals(u.previous())?y:null;},getTouchedStartNode:function(){var t=this.startContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.startOffset)||t;},getTouchedEndNode:function(){var t=this.endContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.endOffset-1)||t;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;a.SHRINK_ELEMENT=1;a.SHRINK_TEXT=2;(function(){d.rangeList=function(n){if(n instanceof d.rangeList)return n;if(!n)n=[];else if(n instanceof d.range)n=[n];return e.extend(n,l); -};var l={createIterator:function(){var n=this,o=[],p;return{getNextRange:function(){p=p==undefined?0:p+1;var q=n[p];if(q&&n.length>1)if(!p)for(var r=n.length-1;r>0;r--)o.unshift(n[r].createBookmark(true));else q.moveToBookmark(o.shift());return q;}};},createBookmarks:function(n){var s=this;var o=[],p;for(var q=0;q

',a.document);o.appendTo(a.document.getHead());try{b.hc=o.getComputedStyle('background-image')=='none';}catch(p){b.hc=false;}if(b.hc)b.cssClass+=' cke_hc';o.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m=0;A--){var B=[],C=new d.walker(v[A]);C.evaluator=function(G){return G.type==1&&G.getName() in l&&!(G.getName()==(u==1)?'p':'div'&&G.getParent().type==1&&G.getParent().getName()=='blockquote');};while(z=C.next()){o(z,r,s);B.push(z);}y=v[A].createIterator();y.enlargeBr=u!=2;while(z=y.getNextParagraph(u==1?'p':'div')){if(z.isReadOnly())continue;var D=0;for(var E=0;E0){y=z.shift();while(!y.getParent().equals(C))y=y.getParent(); -if(!y.equals(G))D.push(y);G=y;}while(D.length>0){y=D.shift();if(y.getName()=='blockquote'){var H=new d.documentFragment(p.document);while(y.getFirst()){H.append(y.getFirst().remove());z.push(H.getLast());}H.replace(y);}else z.push(y);}var I=p.document.createElement('blockquote');I.insertBefore(z[0]);while(z.length>0){y=z.shift();I.append(y);}}else if(q==1){var J=[],K={};while(y=x.getNextParagraph()){var L=null,M=null;while(y.getParent()){if(y.getParent().getName()=='blockquote'){L=y.getParent();M=y;break;}y=y.getParent();}if(L&&M&&!M.getCustomData('blockquote_moveout')){J.push(M);h.setMarker(K,M,'blockquote_moveout',true);}}h.clearAllMarkers(K);var N=[],O=[];K={};while(J.length>0){var P=J.shift();I=P.getParent();if(!P.getPrevious())P.remove().insertBefore(I);else if(!P.getNext())P.remove().insertAfter(I);else{P.breakParent(P.getParent());O.push(P.getNext());}if(!I.getCustomData('blockquote_processed')){O.push(I);h.setMarker(K,I,'blockquote_processed',true);}N.push(P);}h.clearAllMarkers(K);for(E=O.length-1;E>=0;E--){I=O[E];if(n(I))I.remove();}if(p.config.enterMode==2){var Q=true;while(N.length){P=N.shift();if(P.getName()=='div'){H=new d.documentFragment(p.document);var R=Q&&P.getPrevious()&&!(P.getPrevious().type==1&&P.getPrevious().isBlockBoundary());if(R)H.append(p.document.createElement('br'));var S=P.getNext()&&!(P.getNext().type==1&&P.getNext().isBlockBoundary());while(P.getFirst())P.getFirst().remove().appendTo(H);if(S)H.append(p.document.createElement('br'));H.replace(P);Q=false;}}}}r.selectBookmarks(t);p.focus();}};j.add('blockquote',{init:function(p){p.addCommand('blockquote',o);p.ui.addButton('Blockquote',{label:p.lang.blockquote,command:'blockquote'});p.on('selectionChange',m);},requires:['domiterator']});})();j.add('button',{beforeInit:function(l){l.ui.addHandler(1,k.button.handler);}});a.UI_BUTTON=1;k.button=function(l){e.extend(this,l,{title:l.label,className:l.className||l.command&&'cke_button_'+l.command||'',click:l.click||(function(m){m.execCommand(l.command);})});this._={};};k.button.handler={create:function(l){return new k.button(l);}};k.button.prototype={canGroup:true,render:function(l,m){var n=b,o=this._.id='cke_'+e.getNextNumber(),p='',q=this.command,r,s;this._.editor=l;var t={id:o,button:this,editor:l,focus:function(){var v=a.document.getById(o);v.focus();},execute:function(){this.button.click(l);}};t.clickFn=r=e.addFunction(t.execute,t);t.index=s=k.button._.instances.push(t)-1;if(this.modes)l.on('mode',function(){this.setState(this.modes[l.mode]?2:0); -},this);else if(q){q=l.getCommand(q);if(q){q.on('state',function(){this.setState(q.state);},this);p+='cke_'+(q.state==1?'on':q.state==0?'disabled':'off');}}if(!q)p+='cke_off';if(this.className)p+=' '+this.className;m.push('','=10900&&!n.hc?'':'" href="javascript:void(\''+(this.title||'').replace("'",'')+"')\"",' title="',this.title,'" tabindex="-1" hidefocus="true" role="button" aria-labelledby="'+o+'_label"'+(this.hasArrow?' aria-haspopup="true"':''));if(n.opera||n.gecko&&n.mac)m.push(' onkeypress="return false;"');if(n.gecko)m.push(' onblur="this.style.cssText = this.style.cssText;"');m.push(' onkeydown="return CKEDITOR.ui.button._.keydown(',s,', event);" onfocus="return CKEDITOR.ui.button._.focus(',s,', event);" onclick="CKEDITOR.tools.callFunction(',r,', this); return false;"> ',this.label,'');if(this.hasArrow)m.push(''+(b.hc?'▼':' ')+'');m.push('','');if(this.onRender)this.onRender();return t;},setState:function(l){if(this._.state==l)return false;this._.state=l;var m=a.document.getById(this._.id);if(m){m.setState(l);l==0?m.setAttribute('aria-disabled',true):m.removeAttribute('aria-disabled');l==1?m.setAttribute('aria-pressed',true):m.removeAttribute('aria-pressed');return true;}else return false;}};k.button._={instances:[],keydown:function(l,m){var n=k.button._.instances[l];if(n.onkey){m=new d.event(m);return n.onkey(n,m.getKeystroke())!==false;}},focus:function(l,m){var n=k.button._.instances[l],o;if(n.onfocus)o=n.onfocus(n,new d.event(m))!==false;if(b.gecko&&b.version<10900)m.preventBubble();return o;}};k.prototype.addButton=function(l,m){this.add(l,1,m);};a.on('reset',function(){k.button._.instances=[];});(function(){var l=function(s,t){var u=s.document,v=u.getBody(),w=false,x=function(){w=true;};v.on(t,x);(b.version>7?u.$:u.$.selection.createRange()).execCommand(t);v.removeListener(t,x);return w;},m=c?function(s,t){return l(s,t);}:function(s,t){try{return s.document.$.execCommand(t);}catch(u){return false;}},n=function(s){this.type=s;this.canUndo=this.type=='cut';};n.prototype={exec:function(s,t){this.type=='cut'&&r(s);var u=m(s,this.type);if(!u)alert(s.lang.clipboard[this.type+'Error']); -return u;}};var o={canUndo:false,exec:c?function(s){s.focus();if(!s.document.getBody().fire('beforepaste')&&!l(s,'paste')){s.fire('pasteDialog');return false;}}:function(s){try{if(!s.document.getBody().fire('beforepaste')&&!s.document.$.execCommand('Paste',false,null))throw 0;}catch(t){setTimeout(function(){s.fire('pasteDialog');},0);return false;}}},p=function(s){if(this.mode!='wysiwyg')return;switch(s.data.keyCode){case 1000+86:case 2000+45:var t=this.document.getBody();if(!c&&t.fire('beforepaste'))s.cancel();else if(b.opera||b.gecko&&b.version<10900)t.fire('paste');return;case 1000+88:case 2000+46:var u=this;this.fire('saveSnapshot');setTimeout(function(){u.fire('saveSnapshot');},0);}};function q(s,t,u){var v=this.document;if(c&&v.getById('cke_pastebin'))return;if(t=='text'&&s.data&&s.data.$.clipboardData){var w=s.data.$.clipboardData.getData('text/plain');if(w){s.data.preventDefault();u(w);return;}}var x=this.getSelection(),y=new d.range(v),z=new h(t=='text'?'textarea':b.webkit?'body':'div',v);z.setAttribute('id','cke_pastebin');b.webkit&&z.append(v.createText('\xa0'));v.getBody().append(z);z.setStyles({position:'absolute',top:x.getStartElement().getDocumentPosition().y+'px',width:'1px',height:'1px',overflow:'hidden'});z.setStyle(this.config.contentsLangDirection=='ltr'?'left':'right','-1000px');var A=x.createBookmarks();if(t=='text'){if(c){var B=v.getBody().$.createTextRange();B.moveToElementText(z.$);B.execCommand('Paste');s.data.preventDefault();}else{v.$.designMode='off';z.$.focus();}}else{y.setStartAt(z,1);y.setEndAt(z,2);y.select(true);}window.setTimeout(function(){t=='text'&&!c&&(v.$.designMode='on');z.remove();var C;z=b.webkit&&(C=z.getFirst())&&C.is&&C.hasClass('Apple-style-span')?C:z;x.selectBookmarks(A);u(z['get'+(t=='text'?'Value':'Html')]());},0);};function r(s){if(!c||s.document.$.compatMode=='BackCompat')return;var t=s.getSelection(),u;if(t.getType()==3&&(u=t.getSelectedElement())){var v=t.getRanges()[0],w=s.document.createText('');w.insertBefore(u);v.setStartBefore(w);v.setEndAfter(u);t.selectRanges([v]);setTimeout(function(){if(u.getParent()){w.remove();t.selectElement(u);}},0);}};j.add('clipboard',{requires:['dialog','htmldataprocessor'],init:function(s){s.on('paste',function(x){var y=x.data;if(y.html)s.insertHtml(y.html);else if(y.text)s.insertText(y.text);},null,null,1000);s.on('pasteDialog',function(x){setTimeout(function(){s.openDialog('paste');},0);});function t(x,y,z,A){var B=s.lang[y];s.addCommand(y,z);s.ui.addButton(x,{label:B,command:y}); -if(s.addMenuItems)s.addMenuItem(y,{label:B,command:y,group:'clipboard',order:A});};t('Cut','cut',new n('cut'),1);t('Copy','copy',new n('copy'),4);t('Paste','paste',o,8);a.dialog.add('paste',a.getUrl(this.path+'dialogs/paste.js'));s.on('key',p,s);var u=s.config.forcePasteAsPlainText?'text':'html';s.on('contentDom',function(){var x=s.document.getBody();x.on(u=='text'&&c||b.webkit?'paste':'beforepaste',function(y){if(v)return;q.call(s,y,u,function(z){if(!z)return;var A={};A[u]=z;s.fire('paste',A);});});x.on('beforecut',function(){!v&&r(s);});});if(s.contextMenu){var v;function w(x){c&&(v=1);var y=s.document.$.queryCommandEnabled(x)?2:0;v=0;return y;};s.contextMenu.addListener(function(x,y){var z=y.getCommonAncestor().isReadOnly();return{cut:!z&&w('Cut'),copy:w('Copy'),paste:!z&&(b.webkit?2:w('Paste'))};});}}});})();j.add('colorbutton',{requires:['panelbutton','floatpanel','styles'],init:function(l){var m=l.config,n=l.lang.colorButton,o;if(!b.hc){p('TextColor','fore',n.textColorTitle);p('BGColor','back',n.bgColorTitle);}function p(r,s,t){l.ui.add(r,4,{label:t,title:t,className:'cke_button_'+r.toLowerCase(),modes:{wysiwyg:1},panel:{css:l.skin.editor.css,attributes:{role:'listbox','aria-label':n.panelTitle}},onBlock:function(u,v){v.autoSize=true;v.element.addClass('cke_colorblock');v.element.setHtml(q(u,s));v.element.getDocument().getBody().setStyle('overflow','hidden');var w=v.keys,x=l.lang.dir=='rtl';w[x?37:39]='next';w[40]='next';w[9]='next';w[x?39:37]='prev';w[38]='prev';w[2000+9]='prev';w[32]='click';}});};function q(r,s){var t=[],u=m.colorButton_colors.split(','),v=u.length+(m.colorButton_enableMore?2:1),w=e.addFunction(function(C,D){if(C=='?'){var E=arguments.callee;function F(H){this.removeListener('ok',F);this.removeListener('cancel',F);H.name=='ok'&&E(this.getContentElement('picker','selectedColor').getValue(),D);};l.openDialog('colordialog',function(){this.on('ok',F);this.on('cancel',F);});return;}l.focus();r.hide();l.fire('saveSnapshot');new a.style(m['colorButton_'+D+'Style'],{color:'inherit'}).remove(l.document);if(C){var G=m['colorButton_'+D+'Style'];G.childRule=D=='back'?function(){return false;}:function(H){return H.getName()!='a';};new a.style(G,{color:C}).apply(l.document);}l.fire('saveSnapshot');});t.push('
',n.auto,'
'); -for(var x=0;x');var y=u[x].split('/'),z=y[0],A=y[1]||z;if(!y[1])z='#'+z.replace(/^(.)(.)(.)$/,'$1$1$2$2$3$3');var B=l.lang.colors[A]||A;t.push('');}if(m.colorButton_enableMore)t.push('');t.push('
',n.more,'
');return t.join('');};}});i.colorButton_enableMore=true;i.colorButton_colors='000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';i.colorButton_foreStyle={element:'span',styles:{color:'#(color)'},overrides:[{element:'font',attributes:{color:null}}]};i.colorButton_backStyle={element:'span',styles:{'background-color':'#(color)'}};(function(){j.colordialog={init:function(l){l.addCommand('colordialog',new a.dialogCommand('colordialog'));a.dialog.add('colordialog',this.path+'dialogs/colordialog.js');}};j.add('colordialog',j.colordialog);})();j.add('contextmenu',{requires:['menu'],beforeInit:function(l){l.contextMenu=new j.contextMenu(l);l.addCommand('contextMenu',{exec:function(){l.contextMenu.show(l.document.getBody());}});}});j.contextMenu=e.createClass({$:function(l){this.id='cke_'+e.getNextNumber();this.editor=l;this._.listeners=[];this._.functionId=e.addFunction(function(m){this._.panel.hide();l.focus();l.execCommand(m);},this);this.definition={panel:{className:l.skinClass+' cke_contextmenu',attributes:{'aria-label':l.lang.contextmenu.options}}};},_:{onMenu:function(l,m,n,o){var p=this._.menu,q=this.editor;if(p){p.hide();p.removeAll();}else{p=this._.menu=new a.menu(q,this.definition);p.onClick=e.bind(function(z){p.hide();if(z.onClick)z.onClick();else if(z.command)q.execCommand(z.command);},this);p.onEscape=function(z){var A=this.parent;if(A){A._.panel.hideChild();var B=A._.panel._.panel._.currentBlock,C=B._.focusIndex; -B._.markItem(C);}else if(z==27){this.hide();q.focus();}return false;};}var r=this._.listeners,s=[],t=this.editor.getSelection(),u=t&&t.getStartElement();p.onHide=e.bind(function(){p.onHide=null;if(c){var z=q.getSelection();z&&z.unlock();}this.onHide&&this.onHide();},this);for(var v=0;v ';j.add('elementspath',{requires:['selection'],init:function(n){var o='cke_path_'+n.name,p,q=function(){if(!p)p=a.document.getById(o);return p;},r='cke_elementspath_'+e.getNextNumber()+'_';n._.elementsPath={idBase:r,filters:[]};n.on('themeSpace',function(s){if(s.data.space=='bottom')s.data.html+=''+n.lang.elementsPath.eleLabel+''+'
'+m+'
'; -});n.on('selectionChange',function(s){var t=b,u=s.data.selection,v=u.getStartElement(),w=[],x=s.editor,y=x._.elementsPath.list=[],z=x._.elementsPath.filters;while(v){var A=0;for(var B=0;B',D,''+F+'','');}if(D=='body')break;v=v.getParent();}q().setHtml(w.join('')+m);});n.on('contentDomUnload',function(){p&&p.setHtml(m);});n.addCommand('elementsPathFocus',l.toolbarFocus);}});})();a._.elementsPath={click:function(l,m){var n=a.instances[l];n.focus();var o=n._.elementsPath.list[m];n.getSelection().selectElement(o);return false;},keydown:function(l,m,n){var o=k.button._.instances[m],p=a.instances[l],q=p._.elementsPath.idBase,r;n=new d.event(n);var s=p.lang.dir=='rtl';switch(n.getKeystroke()){case s?39:37:case 9:r=a.document.getById(q+(m+1));if(!r)r=a.document.getById(q+'0');r.focus();return false;case s?37:39:case 2000+9:r=a.document.getById(q+(m-1));if(!r)r=a.document.getById(q+(p._.elementsPath.list.length-1));r.focus();return false;case 27:p.focus();return false;case 13:case 32:this.click(l,m);return false;}return true;}};(function(){j.add('enterkey',{requires:['keystrokes','indent'],init:function(s){var t=s.specialKeys;t[13]=q;t[2000+13]=p;}});j.enterkey={enterBlock:function(s,t,u,v){u=u||r(s);if(!u)return;var w=u.document;if(u.checkStartOfBlock()&&u.checkEndOfBlock()){var x=new d.elementPath(u.startContainer),y=x.block;if(y&&(y.is('li')||y.getParent().is('li'))){s.execCommand('outdent');return;}}var z=t==3?'div':'p',A=u.splitBlock(z);if(!A)return;var B=A.previousBlock,C=A.nextBlock,D=A.wasStartOfBlock,E=A.wasEndOfBlock,F;if(C){F=C.getParent();if(F.is('li')){C.breakParent(F);C.move(C.getNext(),true);}}else if(B&&(F=B.getParent())&&F.is('li')){B.breakParent(F);u.moveToElementEditStart(B.getNext()); -B.move(B.getPrevious());}if(!D&&!E){if(C.is('li')&&(F=C.getFirst(d.walker.invisible(true)))&&F.is&&F.is('ul','ol'))(c?w.createText('\xa0'):w.createElement('br')).insertBefore(F);if(C)u.moveToElementEditStart(C);}else{var G;if(B){if(B.is('li')||!o.test(B.getName()))G=B.clone();}else if(C)G=C.clone();if(!G)G=w.createElement(z);else if(v&&!G.is('li'))G.renameNode(z);var H=A.elementPath;if(H)for(var I=0,J=H.elements.length;I0;u--)t[u].deleteContents();return t[0];};})();(function(){var l='nbsp,gt,lt,quot',m='iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro',n='Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml',o='Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv'; -function p(q,r){var s={},t=[],u={nbsp:'\xa0',shy:'­',gt:'>',lt:'<'};q=q.replace(/\b(nbsp|shy|gt|lt|amp)(?:,|$)/g,function(z,A){var B=r?'&'+A+';':u[A],C=r?u[A]:'&'+A+';';s[B]=C;t.push(B);return '';});if(!r){q=q.split(',');var v=document.createElement('div'),w;v.innerHTML='&'+q.join(';&')+';';w=v.innerHTML;v=null;for(var x=0;x'+t+'',t);}},onClick:function(s){l.focus();l.fire('saveSnapshot');p[s].apply(l.document);setTimeout(function(){l.fire('saveSnapshot');},0);},onRender:function(){l.on('selectionChange',function(s){var t=this.getValue(),u=s.data.path;for(var v in p){if(p[v].checkActive(u)){if(v!=t)this.setValue(v,l.lang.format['tag_'+v]);return;}}this.setValue('');},this);}});}});i.format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div';i.format_p={element:'p'};i.format_div={element:'div'};i.format_pre={element:'pre'};i.format_address={element:'address'};i.format_h1={element:'h1'};i.format_h2={element:'h2'};i.format_h3={element:'h3'};i.format_h4={element:'h4'};i.format_h5={element:'h5'};i.format_h6={element:'h6'};j.add('forms',{init:function(l){var m=l.lang;l.addCss('form{border: 1px dotted #FF0000;padding: 2px;}\n');l.addCss('img.cke_hidden{background-image: url('+a.getUrl(this.path+'images/hiddenfield.gif')+');'+'background-position: center center;'+'background-repeat: no-repeat;'+'border: 1px solid #a9a9a9;'+'width: 16px !important;'+'height: 16px !important;'+'}'); -var n=function(p,q,r){l.addCommand(q,new a.dialogCommand(q));l.ui.addButton(p,{label:m.common[p.charAt(0).toLowerCase()+p.slice(1)],command:q});a.dialog.add(q,r);},o=this.path+'dialogs/';n('Form','form',o+'form.js');n('Checkbox','checkbox',o+'checkbox.js');n('Radio','radio',o+'radio.js');n('TextField','textfield',o+'textfield.js');n('Textarea','textarea',o+'textarea.js');n('Select','select',o+'select.js');n('Button','button',o+'button.js');n('ImageButton','imagebutton',j.getPath('image')+'dialogs/image.js');n('HiddenField','hiddenfield',o+'hiddenfield.js');if(l.addMenuItems)l.addMenuItems({form:{label:m.form.menu,command:'form',group:'form'},checkbox:{label:m.checkboxAndRadio.checkboxTitle,command:'checkbox',group:'checkbox'},radio:{label:m.checkboxAndRadio.radioTitle,command:'radio',group:'radio'},textfield:{label:m.textfield.title,command:'textfield',group:'textfield'},hiddenfield:{label:m.hidden.title,command:'hiddenfield',group:'hiddenfield'},imagebutton:{label:m.image.titleButton,command:'imagebutton',group:'imagebutton'},button:{label:m.button.title,command:'button',group:'button'},select:{label:m.select.title,command:'select',group:'select'},textarea:{label:m.textarea.title,command:'textarea',group:'textarea'}});if(l.contextMenu){l.contextMenu.addListener(function(p){if(p&&p.hasAscendant('form',true)&&!p.isReadOnly())return{form:2};});l.contextMenu.addListener(function(p){if(p&&!p.isReadOnly()){var q=p.getName();if(q=='select')return{select:2};if(q=='textarea')return{textarea:2};if(q=='input'){var r=p.getAttribute('type');if(r=='text'||r=='password')return{textfield:2};if(r=='button'||r=='submit'||r=='reset')return{button:2};if(r=='checkbox')return{checkbox:2};if(r=='radio')return{radio:2};if(r=='image')return{imagebutton:2};}if(q=='img'&&p.getAttribute('_cke_real_element_type')=='hiddenfield')return{hiddenfield:2};}});}l.on('doubleclick',function(p){var q=p.data.element;if(q.is('form'))p.data.dialog='form';else if(q.is('select'))p.data.dialog='select';else if(q.is('textarea'))p.data.dialog='textarea';else if(q.is('img')&&q.getAttribute('_cke_real_element_type')=='hiddenfield')p.data.dialog='hiddenfield';else if(q.is('input')){var r=q.getAttribute('type');switch(r){case 'text':case 'password':p.data.dialog='textfield';break;case 'button':case 'submit':case 'reset':p.data.dialog='button';break;case 'checkbox':p.data.dialog='checkbox';break;case 'radio':p.data.dialog='radio';break;case 'image':p.data.dialog='imagebutton';break;}}});},afterInit:function(l){var m=l.dataProcessor,n=m&&m.htmlFilter,o=m&&m.dataFilter; -if(c)n&&n.addRules({elements:{input:function(p){var q=p.attributes,r=q.type;if(r=='checkbox'||r=='radio')q.value=='on'&&delete q.value;}}});if(o)o.addRules({elements:{input:function(p){if(p.attributes.type=='hidden')return l.createFakeParserElement(p,'cke_hidden','hiddenfield');}}});},requires:['image','fakeobjects']});if(c)h.prototype.hasAttribute=function(l){var o=this;var m=o.$.attributes.getNamedItem(l);if(o.getName()=='input')switch(l){case 'class':return o.$.className.length>0;case 'checked':return!!o.$.checked;case 'value':var n=o.getAttribute('type');if(n=='checkbox'||n=='radio')return o.$.value!='on';break;default:}return!!(m&&m.specified);};(function(){var l={canUndo:false,exec:function(n){n.insertElement(n.document.createElement('hr'));}},m='horizontalrule';j.add(m,{init:function(n){n.addCommand(m,l);n.ui.addButton('HorizontalRule',{label:n.lang.horizontalrule,command:m});}});})();(function(){var l=/^[\t\r\n ]*(?: |\xa0)$/,m='{cke_protected}';function n(R){var S=R.children.length,T=R.children[S-1];while(T&&T.type==3&&!e.trim(T.value))T=R.children[--S];return T;};function o(R,S){var T=R.children,U=n(R);if(U){if((S||!c)&&U.type==1&&U.name=='br')T.pop();if(U.type==3&&l.test(U.value))T.pop();}};function p(R){var S=n(R);return!S||S.type==1&&S.name=='br'||R.name=='form'&&S.name=='input';};function q(R){o(R,true);if(p(R))if(c)R.add(new a.htmlParser.text('\xa0'));else R.add(new a.htmlParser.element('br',{}));};function r(R){o(R);if(p(R))R.add(new a.htmlParser.text('\xa0'));};var s=f,t=e.extend({},s.$block,s.$listItem,s.$tableContent);for(var u in t){if(!('br' in s[u]))delete t[u];}delete t.pre;var v={elements:{},attributeNames:[[/^on/,'_cke_pa_on']]},w={elements:{}};for(u in t)w.elements[u]=q;var x={elementNames:[[/^cke:/,''],[/^\?xml:namespace$/,'']],attributeNames:[[/^_cke_(saved|pa)_/,''],[/^_cke.*/,''],['hidefocus','']],elements:{$:function(R){var S=R.attributes;if(S){if(S.cke_temp)return false;var T=['name','href','src'],U;for(var V=0;V]+)))([^>]*)>/gi,C=/\s_cke_saved_src\s*=/,D=/(?:])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,E=/([^<]*)<\/cke:encoded>/gi,F=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,G=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,H=/]*?)\/?>(?!\s*<\/cke:\1)/gi;function I(R){return R.replace(B,function(S,T,U,V,W){if(V=='src'&&C.test(S))return S;else return '<'+T+U+' _cke_saved_'+U+W+'>';});};function J(R){return R.replace(D,function(S){return ''+encodeURIComponent(S)+'';});};function K(R){return R.replace(E,function(S,T){return decodeURIComponent(T);});};function L(R){return R.replace(F,'$1cke:$2');};function M(R){return R.replace(G,'$1$2');};function N(R){return R.replace(H,'');};function O(R){return R.replace(//g,function(S){return '';});};function P(R){return R.replace(//g,function(S,T){return decodeURIComponent(T);});};function Q(R,S){var T=[],U=/<\!--\{cke_temp(comment)?\}(\d*?)-->/g,V=[//gi,//gi].concat(S);R=R.replace(//g,function(X){return '';});for(var W=0;W';});R=R.replace(U,function(X,Y,Z){return ''; -});return R;};j.add('htmldataprocessor',{requires:['htmlwriter'],init:function(R){var S=R.dataProcessor=new a.htmlDataProcessor(R);S.writer.forceSimpleAmpersand=R.config.forceSimpleAmpersand;S.dataFilter.addRules(v);S.dataFilter.addRules(w);S.htmlFilter.addRules(x);S.htmlFilter.addRules(y);}});a.htmlDataProcessor=function(R){var S=this;S.editor=R;S.writer=new a.htmlWriter();S.dataFilter=new a.htmlParser.filter();S.htmlFilter=new a.htmlParser.filter();};a.htmlDataProcessor.prototype={toHtml:function(R,S){R=Q(R,this.editor.config.protectedSource);R=I(R);R=J(R);R=L(R);R=N(R);var T=new h('div');T.setHtml('a'+R);R=T.getHtml().substr(1);R=M(R);R=K(R);R=P(R);var U=a.htmlParser.fragment.fromHtml(R,S),V=new a.htmlParser.basicWriter();U.writeHtml(V,this.dataFilter);R=V.getHtml(true);R=O(R);return R;},toDataFormat:function(R,S){var T=this.writer,U=a.htmlParser.fragment.fromHtml(R,S);T.reset();U.writeHtml(T,this.htmlFilter);return T.getHtml(true);}};})();i.forceSimpleAmpersand=false;j.add('image',{init:function(l){var m='image';a.dialog.add(m,this.path+'dialogs/image.js');l.addCommand(m,new a.dialogCommand(m));l.ui.addButton('Image',{label:l.lang.common.image,command:m});l.on('doubleclick',function(n){var o=n.data.element;if(o.is('img')&&!o.getAttribute('_cke_realelement'))n.data.dialog='image';});if(l.addMenuItems)l.addMenuItems({image:{label:l.lang.image.menu,command:'image',group:'image'}});if(l.contextMenu)l.contextMenu.addListener(function(n,o){if(!n||!n.is('img')||n.getAttribute('_cke_realelement')||n.isReadOnly())return null;return{image:2};});}});i.image_removeLinkByEmptyURL=true;(function(){var l={ol:1,ul:1},m=d.walker.whitespaces(true),n=d.walker.bookmark(false,true);function o(t,u){t.getCommand(this.name).setState(u);};function p(t){var C=this;var u=t.editor,v=t.data.path,w=v&&v.contains(l);if(w)return o.call(C,u,2);if(!C.useIndentClasses&&C.name=='indent')return o.call(C,u,2);var x=t.data.path,y=x.block||x.blockLimit;if(!y)return o.call(C,u,0);if(C.useIndentClasses){var z=y.$.className.match(C.classNameRegex),A=0;if(z){z=z[1];A=C.indentClassMap[z];}if(C.name=='outdent'&&!A||C.name=='indent'&&A==u.config.indentClasses.length)return o.call(C,u,0);return o.call(C,u,2);}else{var B=parseInt(y.getStyle(r(y)),10);if(isNaN(B))B=0;if(B<=0)return o.call(C,u,0);return o.call(C,u,2);}};function q(t,u){var w=this;w.name=u;w.useIndentClasses=t.config.indentClasses&&t.config.indentClasses.length>0;if(w.useIndentClasses){w.classNameRegex=new RegExp('(?:^|\\s+)('+t.config.indentClasses.join('|')+')(?=$|\\s)'); -w.indentClassMap={};for(var v=0;vZ;U++)Y[U].indent+=V;var ab=N.getAttribute('dir')||N.getStyle('direction'),ac=j.list.arrayToList(Y,v,null,t.config.enterMode,ab);if(u.name=='outdent'){var ad;if((ad=N.getParent())&&ad.is('li')){var ae=ac.listNode.getChildren(),af=[],ag=ae.count(),ah;for(U=ag-1;U>=0;U--){if((ah=ae.getItem(U))&&ah.is&&ah.is('li'))af.push(ah);}}}if(ac)ac.listNode.replace(N);if(af&&af.length)for(U=0;U=0;y--){v=t[y].createIterator();v.enlargeBr=r!=2;while(w=v.getNextParagraph()){w.removeAttribute('align');w.removeStyle('text-align');var z=u&&(w.$.className=e.ltrim(w.$.className.replace(B.cssClassRegex,''))),A=B.state==2&&(!x||m(w,true)!=B.value);if(u){if(A)w.addClass(u);else if(!z)w.removeAttribute('class');}else if(A)w.setStyle('text-align',B.value);}}p.focus();p.forceNextSelectionCheck();q.selectBookmarks(s);}};j.add('justify',{init:function(p){var q=new o(p,'justifyleft','left'),r=new o(p,'justifycenter','center'),s=new o(p,'justifyright','right'),t=new o(p,'justifyblock','justify');p.addCommand('justifyleft',q);p.addCommand('justifycenter',r);p.addCommand('justifyright',s);p.addCommand('justifyblock',t);p.ui.addButton('JustifyLeft',{label:p.lang.justify.left,command:'justifyleft'});p.ui.addButton('JustifyCenter',{label:p.lang.justify.center,command:'justifycenter'});p.ui.addButton('JustifyRight',{label:p.lang.justify.right,command:'justifyright'});p.ui.addButton('JustifyBlock',{label:p.lang.justify.block,command:'justifyblock'});p.on('selectionChange',e.bind(n,q));p.on('selectionChange',e.bind(n,s));p.on('selectionChange',e.bind(n,r));p.on('selectionChange',e.bind(n,t));},requires:['domiterator']});})();e.extend(i,{justifyClasses:null});j.add('keystrokes',{beforeInit:function(l){l.keystrokeHandler=new a.keystrokeHandler(l);l.specialKeys={};},init:function(l){var m=l.config.keystrokes,n=l.config.blockedKeystrokes,o=l.keystrokeHandler.keystrokes,p=l.keystrokeHandler.blockedKeystrokes;for(var q=0;qE[G-1].indent+1){var K=E[G-1].indent+1-E[G].indent,L=E[G].indent;while(E[G]&&E[G].indent>=L){E[G].indent+=K;G++;}G--;}}var M=j.list.arrayToList(E,D,null,B.config.enterMode,C.root.getAttribute('dir')),N=M.listNode,O,P;function Q(R){if((O=N[R?'getFirst':'getLast']())&&!(O.is&&O.isBlockBoundary())&&(P=C.root[R?'getPrevious':'getNext'](d.walker.whitespaces(true)))&&!(P.is&&P.isBlockBoundary({br:1})))B.document.createElement('br')[R?'insertBefore':'insertAfter'](O); -};Q(true);Q();N.replace(C.root);};function t(B,C){this.name=B;this.type=C;};t.prototype={exec:function(B){B.focus();var C=B.document,D=B.getSelection(),E=D&&D.getRanges(true);if(!E||E.length<1)return;if(this.state==2){var F=C.getBody();F.trim();if(!F.getFirst()){var G=C.createElement(B.config.enterMode==1?'p':B.config.enterMode==3?'div':'br');G.appendTo(F);E=new d.rangeList([new d.range(C)]);if(G.is('br')){E[0].setStartBefore(G);E[0].setEndAfter(G);}else E[0].selectNodeContents(G);D.selectRanges(E);}else{var H=E.length==1&&E[0],I=H&&H.getEnclosedNode();if(I&&I.is&&this.type==I.getName())n.call(this,B,1);}}var J=D.createBookmarks(true),K=[],L={},M=E.createIterator(),N=0;while((H=M.getNextRange())&&++N){var O=H.getBoundaryNodes(),P=O.startNode,Q=O.endNode;if(P.type==1&&P.getName()=='td')H.setStartAt(O.startNode,1);if(Q.type==1&&Q.getName()=='td')H.setEndAt(O.endNode,2);var R=H.createIterator(),S;R.forceBrBreak=this.state==2;while(S=R.getNextParagraph()){if(S.getCustomData('list_block'))continue;else h.setMarker(L,S,'list_block',1);var T=new d.elementPath(S),U=T.elements,V=U.length,W=null,X=false,Y=T.blockLimit,Z;for(var aa=V-1;aa>=0&&(Z=U[aa]);aa--){if(l[Z.getName()]&&Y.contains(Z)){Y.removeCustomData('list_group_object_'+N);var ab=Z.getCustomData('list_group_object');if(ab)ab.contents.push(S);else{ab={root:Z,contents:[S]};K.push(ab);h.setMarker(L,Z,'list_group_object',ab);}X=true;break;}}if(X)continue;var ac=Y;if(ac.getCustomData('list_group_object_'+N))ac.getCustomData('list_group_object_'+N).contents.push(S);else{ab={root:ac,contents:[S]};h.setMarker(L,ac,'list_group_object_'+N,ab);K.push(ab);}}}var ad=[];while(K.length>0){ab=K.shift();if(this.state==2){if(l[ab.root.getName()])p.call(this,B,ab,L,ad);else r.call(this,B,ab,ad);}else if(this.state==1&&l[ab.root.getName()])s.call(this,B,ab,L);}for(aa=0;aa0)for(var t=s.length-1;t>=0;t--){var u=s[t][0],v=s[t][1];if(v)u.insertBefore(v);else u.appendTo(r);}};function n(r,s){var t=l(r),u={},v=r.$;if(!s){u['class']=v.className||'';v.className='';}u.inline=v.style.cssText||'';if(!s)v.style.cssText='position: static; overflow: visible';m(t);return u;};function o(r,s){var t=l(r),u=r.$;if('class' in s)u.className=s['class'];if('inline' in s)u.style.cssText=s.inline;m(t);};function p(r){var s=a.instances;for(var t in s){var u=s[t];if(u.mode=='wysiwyg'){var v=u.document.getBody();v.setAttribute('contentEditable',false);v.setAttribute('contentEditable',true);}}if(r.focusManager.hasFocus){r.toolbox.focus(); -r.focus();}};function q(r){if(!c||b.version>6)return null;var s=h.createFromHtml('');return r.append(s,true);};j.add('maximize',{init:function(r){var s=r.lang,t=a.document,u=t.getWindow(),v,w,x,y;function z(){var B=u.getViewPaneSize();y&&y.setStyles({width:B.width+'px',height:B.height+'px'});r.resize(B.width,B.height,null,true);};var A=2;r.addCommand('maximize',{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(){var B=r.container.getChild(1),C=r.getThemeSpace('contents');if(r.mode=='wysiwyg'){var D=r.getSelection();v=D&&D.getRanges();w=u.getScrollPosition();}else{var E=r.textarea.$;v=!c&&[E.selectionStart,E.selectionEnd];w=[E.scrollLeft,E.scrollTop];}if(this.state==2){u.on('resize',z);x=u.getScrollPosition();var F=r.container;while(F=F.getParent()){F.setCustomData('maximize_saved_styles',n(F));F.setStyle('z-index',r.config.baseFloatZIndex-1);}C.setCustomData('maximize_saved_styles',n(C,true));B.setCustomData('maximize_saved_styles',n(B,true));if(c)t.$.documentElement.style.overflow=t.getBody().$.style.overflow='hidden';else t.getBody().setStyles({overflow:'hidden',width:'0px',height:'0px'});c?setTimeout(function(){u.$.scrollTo(0,0);},0):u.$.scrollTo(0,0);var G=u.getViewPaneSize();B.setStyle('position','absolute');B.$.offsetLeft;B.setStyles({'z-index':r.config.baseFloatZIndex-1,left:'0px',top:'0px'});y=q(B);B.addClass('cke_maximized');z();var H=B.getDocumentPosition();B.setStyles({left:-1*H.x+'px',top:-1*H.y+'px'});b.gecko&&p(r);}else if(this.state==1){u.removeListener('resize',z);var I=[C,B];for(var J=0;J ');n=l.createFakeElement(n,'cke_pagebreak','div');n.setAttribute('alt',m);n.setAttribute('aria-label',m);var o=l.getSelection().getRanges(true);l.fire('saveSnapshot');for(var p,q=o.length-1;q>=0;q--){p=o[q];if(q1&&m.substr(m.length-1,1)=='%')m=parseInt(window.screen.width*parseInt(m,10)/100,10);if(typeof n=='string'&&n.length>1&&n.substr(n.length-1,1)=='%')n=parseInt(window.screen.height*parseInt(n,10)/100,10);if(m<640)m=640;if(n<420)n=420;var p=parseInt((window.screen.height-n)/2,10),q=parseInt((window.screen.width-m)/2,10);o=(o||'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes')+',width='+m+',height='+n+',top='+p+',left='+q; -var r=window.open('',null,o,true);if(!r)return false;try{r.moveTo(q,p);r.resizeTo(m,n);r.focus();r.location.href=l;}catch(s){r=window.open(l,null,o,true);}return true;}});(function(){var l={modes:{wysiwyg:1,source:1},canUndo:false,exec:function(n){var o,p=n.config,q=p.baseHref?'':'',r=b.isCustomDomain();if(p.fullPage)o=n.getData().replace(//,'$&'+q).replace(/[^>]*(?=<\/title>)/,n.lang.preview);else{var s=''+''+q+''+n.lang.preview+''+e.buildStyleHtml(n.config.contentsCss)+''+s+n.getData()+'';}var u=640,v=420,w=80;try{var x=window.screen;u=Math.round(x.width*0.8);v=Math.round(x.height*0.7);w=Math.round(x.width*0.1);}catch(A){}var y='';if(r){window._cke_htmlToLoad=o;y='javascript:void( (function(){document.open();document.domain="'+document.domain+'";'+'document.write( window.opener._cke_htmlToLoad );'+'document.close();'+'window.opener._cke_htmlToLoad = null;'+'})() )';}var z=window.open(y,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+u+',height='+v+',left='+w);if(!r){z.document.open();z.document.write(o);z.document.close();}}},m='preview';j.add(m,{init:function(n){n.addCommand(m,l);n.ui.addButton('Preview',{label:n.lang.preview,command:m});}});})();j.add('print',{init:function(l){var m='print',n=l.addCommand(m,j.print);l.ui.addButton('Print',{label:l.lang.print,command:m});}});j.print={exec:function(l){if(b.opera)return;else if(b.gecko)l.window.$.print();else l.document.$.execCommand('Print');},canUndo:false,modes:{wysiwyg:!b.opera}};j.add('removeformat',{requires:['selection'],init:function(l){l.addCommand('removeFormat',j.removeformat.commands.removeformat);l.ui.addButton('RemoveFormat',{label:l.lang.removeFormat,command:'removeFormat'});l._.removeFormat={filters:[]};}});j.removeformat={commands:{removeformat:{exec:function(l){var m=l._.removeFormatRegex||(l._.removeFormatRegex=new RegExp('^(?:'+l.config.removeFormatTags.replace(/,/g,'|')+')$','i')),n=l._.removeAttributes||(l._.removeAttributes=l.config.removeFormatAttributes.split(',')),o=j.removeformat.filter,p=l.getSelection().getRanges(true),q=p.createIterator(),r;while(r=q.getNextRange()){if(r.collapsed)continue;r.enlarge(1);var s=r.createBookmark(),t=s.startNode,u=s.endNode,v=function(y){var z=new d.elementPath(y),A=z.elements; -for(var B=1,C;C=A[B];B++){if(C.equals(z.block)||C.equals(z.blockLimit))break;if(m.test(C.getName())&&o(l,C))y.breakParent(C);}};v(t);v(u);var w=t.getNextSourceNode(true,1);while(w){if(w.equals(u))break;var x=w.getNextSourceNode(false,1);if(!(w.getName()=='img'&&w.getAttribute('_cke_realelement'))&&o(l,w))if(m.test(w.getName()))w.remove(true);else{w.removeAttributes(n);l.fire('removeFormatCleanup',w);}w=x;}r.moveToBookmark(s);}l.getSelection().selectRanges(p);}}},filter:function(l,m){var n=l._.removeFormat.filters;for(var o=0;op.width&&(m.resize_minWidth=p.width);m.resize_minHeight>p.height&&(m.resize_minHeight=p.height);a.document.on('mousemove',s);a.document.on('mouseup',t);if(l.document){l.document.on('mousemove',s);l.document.on('mouseup',t);}});l.on('destroy',function(){e.removeFunction(u);});l.on('themeSpace',function(v){if(v.data.space=='bottom'){var w='';if(q&&!r)w=' cke_resizer_horizontal';if(!q&&r)w=' cke_resizer_vertical';v.data.html+='
'; -}},l,null,100);}}});(function(){var l={modes:{wysiwyg:1,source:1},exec:function(n){var o=n.element.$.form;if(o)try{o.submit();}catch(p){if(o.submit.click)o.submit.click();}}},m='save';j.add(m,{init:function(n){var o=n.addCommand(m,l);o.modes={wysiwyg:!!n.element.$.form};n.ui.addButton('Save',{label:n.lang.save,command:m});}});})();(function(){var l='scaytcheck',m='';function n(s,t){var u=false,v;for(v in t){if(t[v]===s||t[v]==s){u=true;break;}}return u;};var o=function(){var s=this,t=function(){var x={};x.srcNodeRef=s.document.getWindow().$.frameElement;x.assocApp='CKEDITOR.'+a.version+'@'+a.revision;x.customerid=s.config.scayt_customerid||'1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';x.customDictionaryIds=s.config.scayt_customDictionaryIds||'';x.userDictionaryName=s.config.scayt_userDictionaryName||'';x.sLang=s.config.scayt_sLang||'en_US';x.onLoad=function(){if(!(c&&b.version<8))this.addStyle(this.selectorCss(),'padding-bottom: 2px !important;');if(s.focusManager.hasFocus&&!p.isControlRestored(s))this.focus();};x.onBeforeChange=function(){if(p.getScayt(s)&&!s.checkDirty())setTimeout(function(){s.resetDirty();},0);};var y=window.scayt_custom_params;if(typeof y=='object')for(var z in y)x[z]=y[z];if(p.getControlId(s))x.id=p.getControlId(s);var A=new window.scayt(x);A.afterMarkupRemove.push(function(H){new h(H,A.document).mergeSiblings();});var B=p.instances[s.name];if(B){A.sLang=B.sLang;A.option(B.option());A.paused=B.paused;}p.instances[s.name]=A;var C='scaytButton',D=window.scayt.uiTags,E=[];for(var F=0,G=4;F=0){this.setState(0);p.loadEngine(s);}}};j.add('scayt',{requires:['menubutton'],beforeInit:function(s){var t=s.config.scayt_contextMenuItemsOrder||'suggest|moresuggest|control',u='';t=t.split('|');if(t&&t.length)for(var v in t)u+='scayt_'+t[v]+(t.length!=parseInt(v,10)+1?',':'');s.config.menu_groups=u+','+s.config.menu_groups;},init:function(s){var t={},u={},v=s.addCommand(l,r);a.dialog.add(l,a.getUrl(this.path+'dialogs/options.js'));var w=s.config.scayt_uiTabs||'1,1,1',x=[];w=w.split(',');for(var y=0,z=3;y tr > td, .%1 table.%2 > tr > th,','.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,','.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,','.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th','{','border : #d3d3d3 1px dotted','}']).join('');m=n.replace(/%2/g,l).replace(/%1/g,'cke_show_borders ');var o={preserveState:true,editorFocus:false,exec:function(p){this.toggleState();this.refresh(p);},refresh:function(p){var q=this.state==1?'addClass':'removeClass'; -p.document.getBody()[q]('cke_show_borders');}};j.add('showborders',{requires:['wysiwygarea'],modes:{wysiwyg:1},init:function(p){var q=p.addCommand('showborders',o);q.canUndo=false;if(p.config.startupShowBorders!==false)q.setState(1);p.addCss(m);p.on('mode',function(){if(q.state!=0)q.refresh(p);},null,null,100);p.on('contentDom',function(){if(q.state!=0)q.refresh(p);});p.on('removeFormatCleanup',function(r){var s=r.data;if(p.getCommand('showborders').state==1&&s.is('table')&&(!s.hasAttribute('border')||parseInt(s.getAttribute('border'),10)<=0))s.addClass(l);});},afterInit:function(p){var q=p.dataProcessor,r=q&&q.dataFilter,s=q&&q.htmlFilter;if(r)r.addRules({elements:{table:function(t){var u=t.attributes,v=u['class'],w=parseInt(u.border,10);if(!w||w<=0)u['class']=(v||'')+' '+l;}}});if(s)s.addRules({elements:{table:function(t){var u=t.attributes,v=u['class'];v&&(u['class']=v.replace(l,'').replace(/\s{2}/,' ').replace(/^\s+|\s+$/,''));}}});}});a.on('dialogDefinition',function(p){var q=p.data.name;if(q=='table'||q=='tableProperties'){var r=p.data.definition,s=r.getContents('info'),t=s.get('txtBorder'),u=t.commit;t.commit=e.override(u,function(x){return function(y,z){x.apply(this,arguments);var A=parseInt(this.getValue(),10);z[!A||A<=0?'addClass':'removeClass'](l);};});var v=r.getContents('advanced'),w=v&&v.get('advCSSClasses');if(w){w.setup=e.override(w.setup,function(x){return function(){x.apply(this,arguments);this.setValue(this.getValue().replace(/cke_show_border/,''));};});w.commit=e.override(w.commit,function(x){return function(y,z){x.apply(this,arguments);if(!parseInt(z.getAttribute('border'),10))z.addClass('cke_show_border');};});}}});})();j.add('sourcearea',{requires:['editingblock'],init:function(l){var m=j.sourcearea,n=a.document.getWindow();l.on('editingBlockReady',function(){var o,p;l.addMode('source',{load:function(q,r){if(c&&b.version<8)q.setStyle('position','relative');l.textarea=o=new h('textarea');o.setAttributes({dir:'ltr',tabIndex:b.webkit?-1:l.tabIndex,role:'textbox','aria-label':l.lang.editorTitle.replace('%1',l.name)});o.addClass('cke_source');o.addClass('cke_enable_context_menu');var s={width:b.ie7Compat?'99%':'100%',height:'100%',resize:'none',outline:'none','text-align':'left'};if(c){p=function(){o.hide();o.setStyle('height',q.$.clientHeight+'px');o.setStyle('width',q.$.clientWidth+'px');o.show();};l.on('resize',p);n.on('resize',p);setTimeout(p,0);}else o.on('mousedown',function(u){u.data.stopPropagation();});q.setHtml('');q.append(o);o.setStyles(s); -l.fire('ariaWidget',o);o.on('blur',function(){l.focusManager.blur();});o.on('focus',function(){l.focusManager.focus();});l.mayBeDirty=true;this.loadData(r);var t=l.keystrokeHandler;if(t)t.attach(o);setTimeout(function(){l.mode='source';l.fire('mode');},b.gecko||b.webkit?100:0);},loadData:function(q){o.setValue(q);l.fire('dataReady');},getData:function(){return o.getValue();},getSnapshotData:function(){return o.getValue();},unload:function(q){o.clearCustomData();l.textarea=o=null;if(p){l.removeListener('resize',p);n.removeListener('resize',p);}if(c&&b.version<8)q.removeStyle('position');},focus:function(){o.focus();}});});l.addCommand('source',m.commands.source);if(l.ui.addButton)l.ui.addButton('Source',{label:l.lang.source,command:'source'});l.on('mode',function(){l.getCommand('source').setState(l.mode=='source'?1:2);});}});j.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:false,exec:function(l){if(l.mode=='wysiwyg')l.fire('saveSnapshot');l.getCommand('source').setState(0);l.setMode(l.mode=='source'?'wysiwyg':'source');},canUndo:false}}};(function(){j.add('stylescombo',{requires:['richcombo','styles'],init:function(m){var n=m.config,o=m.lang.stylesCombo,p={},q=[];function r(s){m.getStylesSet(function(t){if(!q.length){var u,v;for(var w=0;w0)return;if(S.type==1&&m.test(S.getName())&&!S.getCustomData('selected_cell')){h.setMarker(J,S,'selected_cell',true);I.push(S);}};for(var L=0;L0&&P.$.rows[K]||P.$.parentNode);for(M=I.length;M>=0;M--){if(I[M])r(I[M]);}return J;}else if(F instanceof h){P=F.getAscendant('table');if(P.$.rows.length==1)P.remove();else F.remove();}return 0;};function s(F,G){var H=F.getStartElement(),I=H.getAscendant('td',true)||H.getAscendant('th',true);if(!I)return;var J=I.getAscendant('table'),K=I.$.cellIndex;for(var L=0;L1){K=G[I-1]+1;break;}}if(!K)K=G[0]>0?G[0]-1:G[G.length-1]+1;var M=H.$.rows;for(I=0,J=M.length;I=0;I--){if(G[I])u(G[I]);}return H;}else if(F instanceof h){var J=F.getAscendant('table');if(!J)return null;var K=F.$.cellIndex;for(I=J.$.rows.length-1;I>=0;I--){var L=new h(J.$.rows[I]);if(!K&&L.$.cells.length==1){r(L);continue;}if(L.$.cells[K])L.$.removeChild(L.$.cells[K]);}}return null;};function v(F,G){var H=F.getStartElement(),I=H.getAscendant('td',true)||H.getAscendant('th',true);if(!I)return;var J=I.clone();if(!c)J.appendBogus();if(G)J.insertBefore(I);else J.insertAfter(I);};function w(F){if(F instanceof d.selection){var G=n(F),H=G[0]&&G[0].getAscendant('table'),I=o(G);for(var J=G.length-1;J>=0;J--)w(G[J]);if(I)y(I,true);else if(H)H.remove();}else if(F instanceof h){var K=F.getParent();if(K.getChildCount()==1)K.remove();else F.remove();}};function x(F){var G=F.getBogus();G&&G.remove();F.trim();};function y(F,G){var H=new d.range(F.getDocument());if(!H['moveToElementEdit'+(G?'End':'Start')](F)){H.selectNodeContents(F);H.collapse(G?false:true);}H.select(true);};function z(F,G,H){var I=F[G];if(typeof H=='undefined')return I;for(var J=0;I&&J=P)L.removeAttribute('rowSpan');else L.$.rowSpan=V;if(V>=O)L.removeAttribute('colSpan');else L.$.colSpan=W;var ah=new d.nodeList(M.$.rows),ai=ah.count();for(Z=ai-1;Z>=0;Z--){var aj=ah.getItem(Z);if(!aj.$.cells.length){aj.remove();ai++;continue;}}return L;}else return V*W==Y;};function C(F,G){var H=n(F);if(H.length>1)return false;else if(G)return true;var I=H[0],J=I.getParent(),K=J.getAscendant('table'),L=e.buildTableMap(K),M=J.$.rowIndex,N=z(L,M,I),O=I.$.rowSpan,P,Q,R,S;if(O>1){Q=Math.ceil(O/2);R=Math.floor(O/2);S=M+Q;var T=new h(K.$.rows[S]),U=z(L,S),V;P=I.clone();for(var W=0;WN){P.insertBefore(new h(V));break;}else V=null;}if(!V)T.append(P,true);}else{R=Q=1;T=J.clone();T.insertAfter(J);T.append(P=I.clone());var X=z(L,M);for(var Y=0;Y1)return false;else if(G)return true;var I=H[0],J=I.getParent(),K=J.getAscendant('table'),L=e.buildTableMap(K),M=J.$.rowIndex,N=z(L,M,I),O=I.$.colSpan,P,Q,R;if(O>1){Q=Math.ceil(O/2);R=Math.floor(O/2);}else{R=Q=1;var S=A(L,N);for(var T=0;T0?2:0};}},tablecell_insertBefore:{label:G.cell.insertBefore,group:'tablecell',command:'cellInsertBefore',order:5},tablecell_insertAfter:{label:G.cell.insertAfter,group:'tablecell',command:'cellInsertAfter',order:10},tablecell_delete:{label:G.cell.deleteCell,group:'tablecell',command:'cellDelete',order:15},tablecell_merge:{label:G.cell.merge,group:'tablecell',command:'cellMerge',order:16},tablecell_merge_right:{label:G.cell.mergeRight,group:'tablecell',command:'cellMergeRight',order:17},tablecell_merge_down:{label:G.cell.mergeDown,group:'tablecell',command:'cellMergeDown',order:18},tablecell_split_horizontal:{label:G.cell.splitHorizontal,group:'tablecell',command:'cellHorizontalSplit',order:19},tablecell_split_vertical:{label:G.cell.splitVertical,group:'tablecell',command:'cellVerticalSplit',order:20},tablecell_properties:{label:G.cell.title,group:'tablecellproperties',command:'cellProperties',order:21},tablerow:{label:G.row.menu,group:'tablerow',order:1,getItems:function(){return{tablerow_insertBefore:2,tablerow_insertAfter:2,tablerow_delete:2}; -}},tablerow_insertBefore:{label:G.row.insertBefore,group:'tablerow',command:'rowInsertBefore',order:5},tablerow_insertAfter:{label:G.row.insertAfter,group:'tablerow',command:'rowInsertAfter',order:10},tablerow_delete:{label:G.row.deleteRow,group:'tablerow',command:'rowDelete',order:15},tablecolumn:{label:G.column.menu,group:'tablecolumn',order:1,getItems:function(){return{tablecolumn_insertBefore:2,tablecolumn_insertAfter:2,tablecolumn_delete:2};}},tablecolumn_insertBefore:{label:G.column.insertBefore,group:'tablecolumn',command:'columnInsertBefore',order:5},tablecolumn_insertAfter:{label:G.column.insertAfter,group:'tablecolumn',command:'columnInsertAfter',order:10},tablecolumn_delete:{label:G.column.deleteColumn,group:'tablecolumn',command:'columnDelete',order:15}});if(F.contextMenu)F.contextMenu.addListener(function(H,I){if(!H||H.isReadOnly())return null;while(H){if(H.getName() in E)return{tablecell:2,tablerow:2,tablecolumn:2};H=H.getParent();}return null;});},getSelectedCells:n};j.add('tabletools',j.tabletools);})();e.buildTableMap=function(l){var m=l.$.rows,n=-1,o=[];for(var p=0;po&&(!r||!s||us){r=u;s=t;}}else{if(p&&t==o){r=u;break;}if(ts)){r=u;s=t;}}}if(r)r.focus();};(function(){j.add('templates',{requires:['dialog'],init:function(n){a.dialog.add('templates',a.getUrl(this.path+'dialogs/templates.js'));n.addCommand('templates',new a.dialogCommand('templates'));n.ui.addButton('Templates',{label:n.lang.templates.button,command:'templates'});}});var l={},m={};a.addTemplates=function(n,o){l[n]=o;};a.getTemplates=function(n){return l[n];};a.loadTemplates=function(n,o){var p=[];for(var q=0;q0)a.scriptLoader.load(p,o); -else setTimeout(o,0);};})();i.templates='default';i.templates_files=[a.getUrl('plugins/templates/templates/default.js')];i.templates_replaceContent=true;(function(){var l=function(){this.toolbars=[];this.focusCommandExecuted=false;};l.prototype.focus=function(){for(var n=0,o;o=this.toolbars[n++];)for(var p=0,q;q=o.items[p++];){if(q.focus){q.focus();return;}}};var m={toolbarFocus:{modes:{wysiwyg:1,source:1},exec:function(n){if(n.toolbox){n.toolbox.focusCommandExecuted=true;if(c)setTimeout(function(){n.toolbox.focus();},100);else n.toolbox.focus();}}}};j.add('toolbar',{init:function(n){var o=function(p,q){var r,s,t,u=n.lang.dir=='rtl';switch(q){case u?37:39:case 9:do{r=p.next;if(!r){s=p.toolbar.next;t=s&&s.items.length;while(t===0){s=s.next;t=s&&s.items.length;}if(s)r=s.items[0];}p=r;}while(p&&!p.focus)if(p)p.focus();else n.toolbox.focus();return false;case u?39:37:case 2000+9:do{r=p.previous;if(!r){s=p.toolbar.previous;t=s&&s.items.length;while(t===0){s=s.previous;t=s&&s.items.length;}if(s)r=s.items[t-1];}p=r;}while(p&&!p.focus)if(p)p.focus();else{var v=n.toolbox.toolbars[n.toolbox.toolbars.length-1].items;v[v.length-1].focus();}return false;case 27:n.focus();return false;case 13:case 32:p.execute();return false;}return true;};n.on('themeSpace',function(p){if(p.data.space==n.config.toolbarLocation){n.toolbox=new l();var q='cke_'+e.getNextNumber(),r=['');if(n.config.toolbarCanCollapse){var F=e.addFunction(function(){n.execCommand('toolbarCollapse');});n.on('destroy',function(){e.removeFunction(F);});var G='cke_'+e.getNextNumber();n.addCommand('toolbarCollapse',{exec:function(H){var I=a.document.getById(G),J=I.getPrevious(),K=H.getThemeSpace('contents'),L=J.getParent(),M=parseInt(K.$.style.height,10),N=L.$.offsetHeight,O=!J.isVisible();if(!O){J.hide();I.addClass('cke_toolbox_collapser_min');I.setAttribute('title',H.lang.toolbarExpand);}else{J.show();I.removeClass('cke_toolbox_collapser_min');I.setAttribute('title',H.lang.toolbarCollapse);}I.getFirst().setText(O?'▲':'◀');var P=L.$.offsetHeight-N;K.setStyle('height',M-P+'px');H.fire('resize');},modes:{wysiwyg:1,source:1}});r.push('','','');}p.data.html+=r.join('');}});n.addCommand('toolbarFocus',m.toolbarFocus);}});})();k.separator={render:function(l,m){m.push('');return{};}};i.toolbarLocation='top';i.toolbar_Basic=[['Bold','Italic','-','NumberedList','BulletedList','-','Link','Unlink','-','About']];i.toolbar_Full=[['Source','-','Save','NewPage','Preview','-','Templates'],['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker','Scayt'],['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],'/',['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],['BidiLtr','BidiRtl'],['Link','Unlink','Anchor'],['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],'/',['Styles','Format','Font','FontSize'],['TextColor','BGColor'],['Maximize','ShowBlocks','-','About']];i.toolbar='Full';i.toolbarCanCollapse=true;(function(){j.add('undo',{requires:['selection','wysiwygarea'],init:function(r){var s=new n(r),t=r.addCommand('undo',{exec:function(){if(s.undo()){r.selectionChange();this.fire('afterUndo');}},state:0,canUndo:false}),u=r.addCommand('redo',{exec:function(){if(s.redo()){r.selectionChange();this.fire('afterRedo'); -}},state:0,canUndo:false});s.onChange=function(){t.setState(s.undoable()?2:0);u.setState(s.redoable()?2:0);};function v(w){if(s.enabled&&w.data.command.canUndo!==false)s.save();};r.on('beforeCommandExec',v);r.on('afterCommandExec',v);r.on('saveSnapshot',function(){s.save();});r.on('contentDom',function(){r.document.on('keydown',function(w){if(!w.data.$.ctrlKey&&!w.data.$.metaKey)s.type(w);});});r.on('beforeModeUnload',function(){r.mode=='wysiwyg'&&s.save(true);});r.on('mode',function(){s.enabled=r.mode=='wysiwyg';s.onChange();});r.ui.addButton('Undo',{label:r.lang.undo,command:'undo'});r.ui.addButton('Redo',{label:r.lang.redo,command:'redo'});r.resetUndo=function(){s.reset();r.fire('saveSnapshot');};r.on('updateSnapshot',function(){if(s.currentImage&&new l(r).equals(s.currentImage))setTimeout(function(){s.update();},0);});}});j.undo={};var l=j.undo.Image=function(r){this.editor=r;var s=r.getSnapshot(),t=s&&r.getSelection();c&&s&&(s=s.replace(/\s+_cke_expando=".*?"/g,''));this.contents=s;this.bookmarks=t&&t.createBookmarks2(true);},m=/\b(?:href|src|name)="[^"]*?"/gi;l.prototype={equals:function(r,s){var t=this.contents,u=r.contents;if(c&&(b.ie7Compat||b.ie6Compat)){t=t.replace(m,'');u=u.replace(m,'');}if(t!=u)return false;if(s)return true;var v=this.bookmarks,w=r.bookmarks;if(v||w){if(!v||!w||v.length!=w.length)return false;for(var x=0;x25){this.save(false,null,false);this.modifiersCount=1;}}else if(!x){this.modifiersCount=0;this.typesCount++;if(this.typesCount>25){this.save(false,null,false);this.typesCount=1;}}},reset:function(){var r=this; -r.lastKeystroke=0;r.snapshots=[];r.index=-1;r.limit=r.editor.config.undoStackSize;r.currentImage=null;r.hasUndo=false;r.hasRedo=false;r.resetType();},resetType:function(){var r=this;r.typing=false;delete r.lastKeystroke;r.typesCount=0;r.modifiersCount=0;},fireChange:function(){var r=this;r.hasUndo=!!r.getNextImage(true);r.hasRedo=!!r.getNextImage(false);r.resetType();r.onChange();},save:function(r,s,t){var v=this;var u=v.snapshots;if(!s)s=new l(v.editor);if(s.contents===false)return false;if(v.currentImage&&s.equals(v.currentImage,r))return false;u.splice(v.index+1,u.length-v.index-1);if(u.length==v.limit)u.shift();v.index=u.push(s)-1;v.currentImage=s;if(t!==false)v.fireChange();return true;},restoreImage:function(r){var t=this;t.editor.loadSnapshot(r.contents);if(r.bookmarks)t.editor.getSelection().selectBookmarks(r.bookmarks);else if(c){var s=t.editor.document.getBody().$.createTextRange();s.collapse(true);s.select();}t.index=r.index;t.update();t.fireChange();},getNextImage:function(r){var w=this;var s=w.snapshots,t=w.currentImage,u,v;if(t)if(r)for(v=w.index-1;v>=0;v--){u=s[v];if(!t.equals(u,true)){u.index=v;return u;}}else for(v=w.index+1;v]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\1>)?(?=\s*$|<\/body>)/gi,n=d.walker.whitespaces(true);function o(A){if(A.getType()==3)return A.getSelectedElement().isReadOnly();else return A.getCommonAncestor().isReadOnly();};function p(A){if(this.mode=='wysiwyg'){this.focus();var B=this.getSelection();if(o(B))return;var C=A.data;this.fire('saveSnapshot');if(this.dataProcessor)C=this.dataProcessor.toHtml(C);if(c){var D=B.isLocked;if(D)B.unlock();var E=B.getNative();if(E.type=='Control')E.clear();else if(B.getType()==2){var F=B.getRanges()[0],G=F&&F.endContainer;if(G&&G.type==1&&G.getAttribute('contenteditable')=='false'&&F.checkBoundaryOfElement(G,2)){F.setEndAfter(F.endContainer); -F.deleteContents();}}try{E.createRange().pasteHTML(C);}catch(I){}if(D)this.getSelection().lock();}else this.document.$.execCommand('inserthtml',false,C);if(b.webkit){this.document.$.execCommand('inserthtml',false,'');var H=this.document.getById('cke_paste_marker');H.scrollIntoView();H.remove();}e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function q(A){if(this.mode=='wysiwyg'){this.focus();var B=this.getSelection();if(o(B))return;this.fire('saveSnapshot');var C=B.getRanges(),D=A.data,E=D.getName(),F=f.$block[E],G=B.isLocked;if(G)B.unlock();var H,I,J,K;for(var L=C.length-1;L>=0;L--){H=C[L];H.deleteContents();I=!L&&D||D.clone(true);var M,N;if(F)while((M=H.getCommonAncestor(false,true))&&(N=f[M.getName()])&&!(N&&N[E])){if(M.getName() in f.span)H.splitElement(M);else if(H.checkStartOfBlock()&&H.checkEndOfBlock()){H.setStartBefore(M);H.collapse(true);M.remove();}else H.splitBlock();}H.insertNode(I);if(!J)J=I;}H.moveToPosition(J,4);if(F){var O=J.getNext(n),P=O&&O.type==1&&O.getName();if(P&&f.$block[P]&&f[P]['#'])H.moveToElementEditStart(O);}B.selectRanges([H]);if(G)this.getSelection().lock();e.setTimeout(function(){this.fire('saveSnapshot');},0,this);}};function r(A){if(!A.checkDirty())setTimeout(function(){A.resetDirty();},0);};var s=d.walker.whitespaces(true),t=d.walker.bookmark(false,true);function u(A){return s(A)&&t(A);};function v(A){return A.type==3&&e.trim(A.getText()).match(/^(?: |\xa0)$/);};function w(A){if(A.isLocked){A.unlock();setTimeout(function(){A.lock();},0);}};function x(A){return A.getOuterHtml().match(m);};s=d.walker.whitespaces(true);function y(A){var B=A.window,C=A.document,D=A.document.getBody(),E=D.getChildren().count();if(!E||E==1&&D.getFirst().hasAttribute('_moz_editor_bogus_node')){r(A);var F=A.element.getDocument(),G=F.getDocumentElement(),H=G.$.scrollTop,I=G.$.scrollLeft,J=C.$.createEvent('KeyEvents');J.initKeyEvent('keypress',true,true,B.$,false,false,false,false,0,32);C.$.dispatchEvent(J);if(H!=G.$.scrollTop||I!=G.$.scrollLeft)F.getWindow().$.scrollTo(I,H);E&&D.getFirst().remove();C.getBody().appendBogus();var K=new d.range(C);K.setStartAt(D,1);K.select();}};function z(A){var B=A.editor,C=A.data.path,D=C.blockLimit,E=A.data.selection,F=E.getRanges()[0],G=B.document.getBody(),H=B.config.enterMode;b.gecko&&y(B);if(H!=2&&F.collapsed&&D.getName()=='body'&&!C.block){B.fire('updateSnapshot');r(B);c&&w(E);var I=F.fixBlock(true,B.config.enterMode==3?'div':'p');if(c){var J=I.getFirst(u); -J&&v(J)&&J.remove();}if(x(I)){var K=I.getNext(s);if(K&&K.type==1&&!l[K.getName()]){F.moveToElementEditStart(K);I.remove();}else{K=I.getPrevious(s);if(K&&K.type==1&&!l[K.getName()]){F.moveToElementEditEnd(K);I.remove();}}}F.select();if(!c)B.selectionChange();}var L=new d.range(B.document),M=new d.walker(L);L.selectNodeContents(G);M.evaluator=function(O){return O.type==1&&O.getName() in l;};M.guard=function(O,P){return!(O.type==3&&s(O)||P);};if(M.previous()){B.fire('updateSnapshot');r(B);c&&w(E);var N;if(H!=2)N=G.append(new h(H==1?'p':'div'));else N=G;if(!c)N.appendBogus();}};j.add('wysiwygarea',{requires:['editingblock'],init:function(A){var B=A.config.enterMode!=2?A.config.enterMode==3?'div':'p':false,C=A.lang.editorTitle.replace('%1',A.name),D;A.on('editingBlockReady',function(){var J,K,L,M,N,O,P=b.isCustomDomain(),Q=function(T){if(K)K.remove();var U='document.open();'+(P?'document.domain="'+document.domain+'";':'')+'document.close();';K=h.createFromHtml('');if(document.location.protocol=='chrome:')a.event.useCapture=true;K.on('load',function(Y){N=1;Y.removeListener();var Z=K.getFrameDocument().$;Z.open('text/html','replace');Z.write(T);Z.close();});if(document.location.protocol=='chrome:')a.event.useCapture=false;var V=A.element,W=b.gecko&&!V.isVisible(),X={};if(W){V.show();X={position:V.getStyle('position'),top:V.getStyle('top')};V.setStyles({position:'absolute',top:'-3000px'});}J.append(K);if(W)setTimeout(function(){V.hide();V.setStyles(X);},1000);};D=e.addFunction(S);var R='';function S(T){if(!N)return;N=0;A.fire('ariaWidget',K);var U=T.document,V=U.body,W=U.getElementById('cke_actscrpt');W.parentNode.removeChild(W);V.spellcheck=!A.config.disableNativeSpellChecker;if(c){V.hideFocus=true;V.disabled=true;V.contentEditable=true;V.removeAttribute('disabled');}else setTimeout(function(){if(b.gecko&&b.version>=10900||b.opera)U.$.body.contentEditable=true;else if(b.webkit)U.$.body.parentNode.contentEditable=true;else U.$.designMode='on';},0);b.gecko&&e.setTimeout(y,0,null,A);T=A.window=new d.window(T);U=A.document=new g(U);U.on('dblclick',function(aa){var ab=aa.data.getTarget(),ac={element:ab,dialog:''}; -A.fire('doubleclick',ac);ac.dialog&&A.openDialog(ac.dialog);});if(!(c||b.opera))U.on('mousedown',function(aa){var ab=aa.data.getTarget();if(ab.is('img','hr','input','textarea','select'))A.getSelection().selectElement(ab);});if(b.gecko)U.on('mouseup',function(aa){if(aa.data.$.button==2){var ab=aa.data.getTarget();if(!ab.getOuterHtml().replace(m,'')){var ac=new d.range(U);ac.moveToElementEditStart(ab);ac.select(true);}}});U.on('click',function(aa){aa=aa.data;if(aa.getTarget().is('a')&&aa.$.button!=2)aa.preventDefault();});if(b.webkit){U.on('click',function(aa){if(aa.data.getTarget().is('input','select'))aa.data.preventDefault();});U.on('mouseup',function(aa){if(aa.data.getTarget().is('input','textarea'))aa.data.preventDefault();});}if(c&&U.$.compatMode=='CSS1Compat'||b.gecko||b.opera){var X=U.getDocumentElement();X.on('mousedown',function(aa){if(aa.data.getTarget().equals(X)){if(b.gecko&&b.version>=10900)H();I.focus();}});}T.on('blur',function(){A.focusManager.blur();});T.on('focus',function(){var aa=A.document;if(b.gecko&&b.version>=10900)H();else if(b.opera)aa.getBody().focus();A.focusManager.focus();});var Y=A.keystrokeHandler;if(Y)Y.attach(U);if(c){U.getDocumentElement().addClass(U.$.compatMode);U.on('keydown',function(aa){var ab=aa.data.getKeystroke();if(ab in {8:1,46:1}){var ac=A.getSelection(),ad=ac.getSelectedElement();if(ad){A.fire('saveSnapshot');var ae=ac.getRanges()[0].createBookmark();ad.remove();ac.selectBookmarks([ae]);A.fire('saveSnapshot');aa.data.preventDefault();}}});if(U.$.compatMode=='CSS1Compat'){var Z={33:1,34:1};U.on('keydown',function(aa){if(aa.data.getKeystroke() in Z)setTimeout(function(){A.getSelection().scrollIntoView();},0);});}}if(A.contextMenu)A.contextMenu.addTarget(U,A.config.browserContextMenuOnCtrl!==false);setTimeout(function(){A.fire('contentDom');if(O){A.mode='wysiwyg';A.fire('mode');O=false;}L=false;if(M){A.focus();M=false;}setTimeout(function(){A.fire('dataReady');},0);try{A.document.$.execCommand('enableObjectResizing',false,!A.config.disableObjectResizing);}catch(aa){}try{A.document.$.execCommand('enableInlineTableEditing',false,!A.config.disableNativeTableHandles);}catch(ab){}if(c)setTimeout(function(){if(A.document){var ac=A.document.$.body;ac.runtimeStyle.marginBottom='0px';ac.runtimeStyle.marginBottom='';}},1000);},0);};A.addMode('wysiwyg',{load:function(T,U,V){J=T;if(c&&b.quirks)T.setStyle('position','relative');A.mayBeDirty=true;O=true;if(V)this.loadSnapshotData(U);else this.loadData(U);},loadData:function(T){L=true; -var U=A.config,V=U.fullPage,W=U.docType,X='';!V&&(X=e.buildStyleHtml(A.config.contentsCss)+X);var Y=U.baseHref?'':'';if(V)T=T.replace(/]*>/i,function(Z){A.docType=W=Z;return '';});if(A.dataProcessor)T=A.dataProcessor.toHtml(T,B);if(V){if(!/]/.test(T))T=''+T;if(!/]/.test(T))T=''+T+'';if(!/]/.test(T))T=T.replace(/]*>/,'$&');else if(!/]/.test(T))T=T.replace(/]*>/,'$&');Y&&(T=T.replace(//,'$&'+Y));T=T.replace(/<\/head\s*>/,X+'$&');T=W+T;}else T=U.docType+''+''+''+C+''+Y+X+''+''+T+'';T+=R;this.onDispose();Q(T);},getData:function(){var T=A.config,U=T.fullPage,V=U&&A.docType,W=K.getFrameDocument(),X=U?W.getDocumentElement().getOuterHtml():W.getBody().getHtml();if(A.dataProcessor)X=A.dataProcessor.toDataFormat(X,B);if(T.ignoreEmptyParagraph)X=X.replace(m,'');if(V)X=V+'\n'+X;return X;},getSnapshotData:function(){return K.getFrameDocument().getBody().getHtml();},loadSnapshotData:function(T){K.getFrameDocument().getBody().setHtml(T);},onDispose:function(){if(!A.document)return;A.document.getDocumentElement().clearCustomData();A.document.getBody().clearCustomData();A.window.clearCustomData();A.document.clearCustomData();K.clearCustomData();K.remove();},unload:function(T){this.onDispose();A.window=A.document=K=J=M=null;A.fire('contentDomUnload');},focus:function(){if(L)M=true;else if(b.opera&&A.document){A.document.getBody().focus();A.selectionChange();}else if(!b.opera&&A.window){A.window.focus();A.selectionChange();}}});A.on('insertHtml',p,null,null,20);A.on('insertElement',q,null,null,20);A.on('selectionChange',z,null,null,1);});var E;A.on('contentDom',function(){var J=A.document.getElementsByTag('title').getItem(0);J.setAttribute('_cke_title',A.document.$.title);A.document.$.title=C;});if(b.ie8Compat){A.addCss('html.CSS1Compat [contenteditable=false]{ min-height:0 !important;}');var F=[];for(var G in f.$removeEmpty)F.push('html.CSS1Compat '+G+'[contenteditable=false]');A.addCss(F.join(',')+'{ display:inline-block;}');}function H(J){e.tryThese(function(){A.document.$.designMode='on';setTimeout(function(){A.document.$.designMode='off'; -A.document.getBody().focus();},50);},function(){A.document.$.designMode='off';var K=A.document.getBody();K.setAttribute('contentEditable',false);K.setAttribute('contentEditable',true);!J&&H(1);});};if(b.gecko||c||b.opera){var I;A.on('uiReady',function(){I=A.container.append(h.createFromHtml(''));I.on('focus',function(){A.focus();});});A.on('destroy',function(){e.removeFunction(D);I.clearCustomData();});}A.on('insertElement',function(J){var K=J.data;if(K.type==1&&(K.is('input')||K.is('textarea')))if(!K.isReadOnly()){K.setAttribute('contentEditable',false);K.setCustomData('_cke_notReadOnly',1);}});}});if(b.gecko)(function(){var A=document.body;if(!A)window.addEventListener('load',arguments.callee,false);else{var B=A.getAttribute('onpageshow');A.setAttribute('onpageshow',(B?B+';':'')+'event.persisted && (function(){'+'var allInstances = CKEDITOR.instances, editor, doc;'+'for ( var i in allInstances )'+'{'+'\teditor = allInstances[ i ];'+'\tdoc = editor.document;'+'\tif ( doc )'+'\t{'+'\t\tdoc.$.designMode = "off";'+'\t\tdoc.$.designMode = "on";'+'\t}'+'}'+'})();');}})();})();i.disableObjectResizing=false;i.disableNativeTableHandles=true;i.disableNativeSpellChecker=true;i.ignoreEmptyParagraph=true;j.add('wsc',{requires:['dialog'],init:function(l){var m='checkspell',n=l.addCommand(m,new a.dialogCommand(m));n.modes={wysiwyg:!b.opera&&document.domain==window.location.hostname};l.ui.addButton('SpellChecker',{label:l.lang.spellCheck.toolbar,command:m});a.dialog.add(m,this.path+'dialogs/wsc.js');}});i.wsc_customerId=i.wsc_customerId||'1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk';i.wsc_customLoaderScript=i.wsc_customLoaderScript||null;a.DIALOG_RESIZE_NONE=0;a.DIALOG_RESIZE_WIDTH=1;a.DIALOG_RESIZE_HEIGHT=2;a.DIALOG_RESIZE_BOTH=3;(function(){function l(N){return!!this._.tabs[N][0].$.offsetHeight;};function m(){var R=this;var N=R._.currentTabId,O=R._.tabIdList.length,P=e.indexOf(R._.tabIdList,N)+O;for(var Q=P-1;Q>P-O;Q--){if(l.call(R,R._.tabIdList[Q%O]))return R._.tabIdList[Q%O];}return null;};function n(){var R=this;var N=R._.currentTabId,O=R._.tabIdList.length,P=e.indexOf(R._.tabIdList,N);for(var Q=P+1;Q1){S._.tabBarMode=true;S._.tabs[S._.currentTabId][0].focus();W=1;}else if((af==37||af==39)&&S._.tabBarMode){ai=af==(ag?39:37)?m.call(S):n.call(S);S.selectPage(ai);S._.tabs[ai][0].focus();W=1;}else if((af==13||af==32)&&S._.tabBarMode){aj.selectPage(aj._.currentTabId);aj._.tabBarMode=false;aj._.currentFocusIndex=-1;V(true);W=1;}if(W){ae.stop();ae.data.preventDefault();}};function Y(ae){W&&ae.data.preventDefault();};var Z=this._.element;this.on('show',function(){Z.on('keydown',X,this,null,0);if(b.opera||b.gecko&&b.mac)Z.on('keypress',Y,this);});this.on('hide',function(){Z.removeListener('keydown',X);if(b.opera||b.gecko&&b.mac)Z.removeListener('keypress',Y);});this.on('iframeAdded',function(ae){var af=new g(ae.data.iframe.$.contentWindow.document);af.on('keydown',X,this,null,0);});this.on('show',function(){var ai=this;U();if(N.config.dialog_startupFocusTab&&S._.pageCount>1){S._.tabBarMode=true;S._.tabs[S._.currentTabId][0].focus();}else if(!ai._.hasFocus){ai._.currentFocusIndex=-1;if(P.onFocus){var ae=P.onFocus.call(ai);ae&&ae.focus();}else V(true);if(ai._.editor.mode=='wysiwyg'&&c){var af=N.document.$.selection,ag=af.createRange();if(ag)if(ag.parentElement&&ag.parentElement().ownerDocument==N.document.$||ag.item&&ag.item(0).ownerDocument==N.document.$){var ah=document.body.createTextRange();ah.moveToElementText(ai.getElement().getFirst().$);ah.collapse(true);ah.select();}}}},this,null,4294967295);if(b.ie6Compat)this.on('load',function(ae){var af=this.getElement(),ag=af.getFirst();ag.remove();ag.appendTo(af);},this);w(this);x(this);new d.text(P.title,a.document).appendTo(this.parts.title);for(var aa=0;aa0?O:0)+'px',top:(P>0?P:0)+'px'});};})(),getPosition:function(){return e.extend({},this._.position);},show:function(){var N=this._.editor;if(N.mode=='wysiwyg'&&c){var O=N.getSelection();O&&O.lock();}var P=this._.element,Q=this.definition;if(!(P.getParent()&&P.getParent().equals(a.document.getBody())))P.appendTo(a.document.getBody());else P.setStyle('display','block');if(b.gecko&&b.version<10900){var R=this.parts.dialog;R.setStyle('position','absolute');setTimeout(function(){R.setStyle('position','fixed');},0);}this.resize(Q.minWidth,Q.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);if(a.dialog._.currentZIndex===null)a.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex;this._.element.getFirst().setStyle('z-index',a.dialog._.currentZIndex+=10);if(a.dialog._.currentTop===null){a.dialog._.currentTop=this;this._.parentDialog=null;B(this._.editor);P.on('keydown',F);P.on(b.opera?'keypress':'keyup',G);for(var S in {keyup:1,keydown:1,keypress:1})P.on(S,M);}else{this._.parentDialog=a.dialog._.currentTop;var T=this._.parentDialog.getElement().getFirst();T.$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2);a.dialog._.currentTop=this;}H(this,this,'\x1b',null,function(){this.getButton('cancel')&&this.getButton('cancel').click(); -});this._.hasFocus=false;e.setTimeout(function(){var U=a.document.getWindow().getViewPaneSize(),V=this.getSize();this.move((U.width-Q.minWidth)/2,(U.height-V.height)/2);this.parts.dialog.setStyle('visibility','');this.fireOnce('load',{});this.fire('show',{});this._.editor.fire('dialogShow',this);this.foreach(function(W){W.setInitValue&&W.setInitValue();});},100,this);},foreach:function(N){var Q=this;for(var O in Q._.contents)for(var P in Q._.contents[O])N(Q._.contents[O][P]);return Q;},reset:(function(){var N=function(O){if(O.reset)O.reset(1);};return function(){this.foreach(N);return this;};})(),setupContent:function(){var N=arguments;this.foreach(function(O){if(O.setup)O.setup.apply(O,N);});},commitContent:function(){var N=arguments;this.foreach(function(O){if(O.commit)O.commit.apply(O,N);});},hide:function(){if(!this.parts.dialog.isVisible())return;this.fire('hide',{});this._.editor.fire('dialogHide',this);var N=this._.element;N.setStyle('display','none');this.parts.dialog.setStyle('visibility','hidden');I(this);while(a.dialog._.currentTop!=this)a.dialog._.currentTop.hide();if(!this._.parentDialog)C();else{var O=this._.parentDialog.getElement().getFirst();O.setStyle('z-index',parseInt(O.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2));}a.dialog._.currentTop=this._.parentDialog;if(!this._.parentDialog){a.dialog._.currentZIndex=null;N.removeListener('keydown',F);N.removeListener(b.opera?'keypress':'keyup',G);for(var P in {keyup:1,keydown:1,keypress:1})N.removeListener(P,M);var Q=this._.editor;Q.focus();if(Q.mode=='wysiwyg'&&c){var R=Q.getSelection();R&&R.unlock(true);}}else a.dialog._.currentZIndex-=10;delete this._.parentDialog;this.foreach(function(S){S.resetInitValue&&S.resetInitValue();});},addPage:function(N){var Z=this;var O=[],P=N.label?' title="'+e.htmlEncode(N.label)+'"':'',Q=N.elements,R=a.dialog._.uiElementBuilders.vbox.build(Z,{type:'vbox',className:'cke_dialog_page_contents',children:N.elements,expand:!!N.expand,padding:N.padding,style:N.style||'width: 100%; height: 100%;'},O),S=h.createFromHtml(O.join(''));S.setAttribute('role','tabpanel');var T=b,U='cke_'+N.id+'_'+e.getNextNumber(),V=h.createFromHtml(['0?' cke_last':'cke_first',P,!!N.hidden?' style="display:none"':'',' id="',U,'"',T.gecko&&T.version>=10900&&!T.hc?'':' href="javascript:void(0)"',' tabIndex="-1"',' hidefocus="true"',' role="tab">',N.label,''].join(''));S.setAttribute('aria-labelledby',U);Z._.tabs[N.id]=[V,S];Z._.tabIdList.push(N.id); -!N.hidden&&Z._.pageCount++;Z._.lastTab=V;Z.updateStyle();var W=Z._.contents[N.id]={},X,Y=R.getChild();while(X=Y.shift()){W[X.id]=X;if(typeof X.getChild=='function')Y.push.apply(Y,X.getChild());}S.setAttribute('name',N.id);S.appendTo(Z.parts.contents);V.unselectable();Z.parts.tabs.append(V);if(N.accessKey){H(Z,Z,'CTRL+'+N.accessKey,K,J);Z._.accessKeyMap['CTRL+'+N.accessKey]=N.id;}},selectPage:function(N){if(this._.currentTabId==N)return;if(this.fire('selectPage',{page:N,currentPage:this._.currentTabId})===true)return;for(var O in this._.tabs){var P=this._.tabs[O][0],Q=this._.tabs[O][1];if(O!=N){P.removeClass('cke_dialog_tab_selected');Q.hide();}Q.setAttribute('aria-hidden',O!=N);}var R=this._.tabs[N];R[0].addClass('cke_dialog_tab_selected');if(b.ie6Compat||b.ie7Compat){o(R[1]);R[1].show();setTimeout(function(){o(R[1],true);},0);}else R[1].show();this._.currentTabId=N;this._.currentTabIndex=e.indexOf(this._.tabIdList,N);},updateStyle:function(){this.parts.dialog[(this._.pageCount===1?'add':'remove')+'Class']('cke_single_page');},hidePage:function(N){var P=this;var O=P._.tabs[N]&&P._.tabs[N][0];if(!O||P._.pageCount==1)return;else if(N==P._.currentTabId)P.selectPage(m.call(P));O.hide();P._.pageCount--;P.updateStyle();},showPage:function(N){var P=this;var O=P._.tabs[N]&&P._.tabs[N][0];if(!O)return;O.show();P._.pageCount++;P.updateStyle();},getElement:function(){return this._.element;},getName:function(){return this._.name;},getContentElement:function(N,O){var P=this._.contents[N];return P&&P[O];},getValueOf:function(N,O){return this.getContentElement(N,O).getValue();},setValueOf:function(N,O,P){return this.getContentElement(N,O).setValue(P);},getButton:function(N){return this._.buttons[N];},click:function(N){return this._.buttons[N].click();},disableButton:function(N){return this._.buttons[N].disable();},enableButton:function(N){return this._.buttons[N].enable();},getPageCount:function(){return this._.pageCount;},getParentEditor:function(){return this._.editor;},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement();},addFocusable:function(N,O){var Q=this;if(typeof O=='undefined'){O=Q._.focusList.length;Q._.focusList.push(new p(Q,N,O));}else{Q._.focusList.splice(O,0,new p(Q,N,O));for(var P=O+1;PY.width-X.width-S)ad=Y.width-X.width+T[1];else ad=P.x;if(P.y+T[0]Y.height-X.height-S)ae=Y.height-X.height+T[2];else ae=P.y;N.move(ad,ae);W.data.preventDefault();};function V(W){a.document.removeListener('mousemove',U);a.document.removeListener('mouseup',V);if(b.ie6Compat){var X=A.getChild(0).getFrameDocument();X.removeListener('mousemove',U);X.removeListener('mouseup',V);}};N.parts.title.on('mousedown',function(W){N._.updateSize=true;O={x:W.data.$.screenX,y:W.data.$.screenY};a.document.on('mousemove',U);a.document.on('mouseup',V);P=N.getPosition();if(b.ie6Compat){var X=A.getChild(0).getFrameDocument();X.on('mousemove',U);X.on('mouseup',V);}W.data.preventDefault();},N);};function x(N){var O=N.definition,P=O.minWidth||0,Q=O.minHeight||0,R=O.resizable,S=N.getParentEditor().skin.margins||[0,0,0,0];function T(ae,af){ae.y+=af;};function U(ae,af){ae.x2+=af;};function V(ae,af){ae.y2+=af;};function W(ae,af){ae.x+=af;};var X=null,Y=null,Z=N._.editor.config.magnetDistance,aa=['tl','t','tr','l','r','bl','b','br'];function ab(ae){var af=ae.listenerData.part,ag=N.getSize();Y=N.getPosition();e.extend(Y,{x2:Y.x+ag.width,y2:Y.y+ag.height});X={x:ae.data.$.screenX,y:ae.data.$.screenY};a.document.on('mousemove',ac,N,{part:af});a.document.on('mouseup',ad,N,{part:af});if(b.ie6Compat){var ah=A.getChild(0).getFrameDocument();ah.on('mousemove',ac,N,{part:af});ah.on('mouseup',ad,N,{part:af});}ae.data.preventDefault();};function ac(ae){var af=ae.data.$.screenX,ag=ae.data.$.screenY,ah=af-X.x,ai=ag-X.y,aj=a.document.getWindow().getViewPaneSize(),ak=ae.listenerData.part;if(ak.search('t')!=-1)T(Y,ai);if(ak.search('l')!=-1)W(Y,ah);if(ak.search('b')!=-1)V(Y,ai);if(ak.search('r')!=-1)U(Y,ah);X={x:af,y:ag};var al,am,an,ao;if(Y.x+S[3]aj.width-Z)an=aj.width+S[1];else if(ak.search('r')!=-1&&Y.x2-Y.xaj.height-Z)ao=aj.height+S[2];else if(ak.search('b')!=-1&&Y.y2-Y.y'];if(b.ie6Compat){var V=b.isCustomDomain(),W="";U.push('');}U.push('');T=h.createFromHtml(U.join(''));T.setOpacity(Q!=undefined?Q:0.5);T.appendTo(a.document.getBody());z[S]=T;}else T.show();A=T;var X=function(){var aa=O.getViewPaneSize();T.setStyles({width:aa.width+'px',height:aa.height+'px'});},Y=function(){var aa=O.getScrollPosition(),ab=a.dialog._.currentTop;T.setStyles({left:aa.x+'px',top:aa.y+'px'});do{var ac=ab.getPosition();ab.move(ac.x,ac.y);}while(ab=ab._.parentDialog)};y=X;O.on('resize',X);X();if(b.ie6Compat){var Z=function(){Y();arguments.callee.prevScrollHandler.apply(this,arguments);};O.$.setTimeout(function(){Z.prevScrollHandler=window.onscroll||(function(){});window.onscroll=Z;},0);Y();}};function C(){if(!A)return;var N=a.document.getWindow();A.hide();N.removeListener('resize',y);if(b.ie6Compat)N.$.setTimeout(function(){var O=window.onscroll&&window.onscroll.prevScrollHandler;window.onscroll=O||null;},0);y=null;};function D(){for(var N in z)z[N].remove();z={};};var E={},F=function(N){var O=N.data.$.ctrlKey||N.data.$.metaKey,P=N.data.$.altKey,Q=N.data.$.shiftKey,R=String.fromCharCode(N.data.$.keyCode),S=E[(O?'CTRL+':'')+(P?'ALT+':'')+(Q?'SHIFT+':'')+R];if(!S||!S.length)return;S=S[S.length-1];S.keydown&&S.keydown.call(S.uiElement,S.dialog,S.key);N.data.preventDefault();},G=function(N){var O=N.data.$.ctrlKey||N.data.$.metaKey,P=N.data.$.altKey,Q=N.data.$.shiftKey,R=String.fromCharCode(N.data.$.keyCode),S=E[(O?'CTRL+':'')+(P?'ALT+':'')+(Q?'SHIFT+':'')+R];if(!S||!S.length)return;S=S[S.length-1];if(S.keyup){S.keyup.call(S.uiElement,S.dialog,S.key);N.data.preventDefault();}},H=function(N,O,P,Q,R){var S=E[P]||(E[P]=[]);S.push({uiElement:N,dialog:O,key:P,keyup:R||N.accessKeyUp,keydown:Q||N.accessKeyDown});},I=function(N){for(var O in E){var P=E[O];for(var Q=P.length-1;Q>=0;Q--){if(P[Q].dialog==N||P[Q].uiElement==N)P.splice(Q,1); -}if(P.length===0)delete E[O];}},J=function(N,O){if(N._.accessKeyMap[O])N.selectPage(N._.accessKeyMap[O]);},K=function(N,O){},L={27:1,13:1},M=function(N){if(N.data.getKeystroke() in L)N.data.stopPropagation();};(function(){k.dialog={uiElement:function(N,O,P,Q,R,S,T){if(arguments.length<4)return;var U=(Q.call?Q(O):Q)||'div',V=['<',U,' '],W=(R&&R.call?R(O):R)||{},X=(S&&S.call?S(O):S)||{},Y=(T&&T.call?T.call(this,N,O):T)||'',Z=this.domId=X.id||e.getNextId()+'_uiElement',aa=this.id=O.id,ab;X.id=Z;var ac={};if(O.type)ac['cke_dialog_ui_'+O.type]=1;if(O.className)ac[O.className]=1;var ad=X['class']&&X['class'].split?X['class'].split(' '):[];for(ab=0;ab=0;ab--){if(af[ab]==='')af.splice(ab,1);}if(af.length>0)X.style=(X.style?X.style+'; ':'')+af.join('; ');for(ab in X)V.push(ab+'="'+e.htmlEncode(X[ab])+'" ');V.push('>',Y,'');P.push(V.join(''));(this._||(this._={})).dialog=N;if(typeof O.isChanged=='boolean')this.isChanged=function(){return O.isChanged;};if(typeof O.isChanged=='function')this.isChanged=O.isChanged;a.event.implementOn(this);this.registerEvents(O);if(this.accessKeyUp&&this.accessKeyDown&&O.accessKey)H(this,N,'CTRL+'+O.accessKey);var ag=this;N.on('load',function(){if(ag.getInputElement())ag.getInputElement().on('focus',function(){N._.tabBarMode=false;N._.hasFocus=true;ag.fire('focus');},ag);});if(this.keyboardFocusable){this.tabIndex=O.tabIndex||0;this.focusIndex=N._.focusList.push(this)-1;this.on('focus',function(){N._.currentFocusIndex=ag.focusIndex;});}e.extend(this,O);},hbox:function(N,O,P,Q,R){if(arguments.length<4)return;this._||(this._={});var S=this._.children=O,T=R&&R.widths||null,U=R&&R.height||null,V={},W,X=function(){var Z=[''];for(W=0;W0)Z.push('style="'+ab.join('; ')+'" ');Z.push('>',P[W],'');}Z.push('');return Z.join('');},Y={role:'presentation'}; -R&&R.align&&(Y.align=R.align);k.dialog.uiElement.call(this,N,R||{type:'hbox'},Q,'table',V,Y,X);},vbox:function(N,O,P,Q,R){if(arguments.length<3)return;this._||(this._={});var S=this._.children=O,T=R&&R.width||null,U=R&&R.heights||null,V=function(){var W=['');for(var X=0;X');}W.push('
0)W.push('style="',Y.join('; '),'" ');W.push(' class="cke_dialog_ui_vbox_child">',P[X],'
');return W.join('');};k.dialog.uiElement.call(this,N,R||{type:'vbox'},Q,'div',null,{role:'presentation'},V);}};})();k.dialog.uiElement.prototype={getElement:function(){return a.document.getById(this.domId);},getInputElement:function(){return this.getElement();},getDialog:function(){return this._.dialog;},setValue:function(N,O){this.getInputElement().setValue(N);!O&&this.fire('change',{value:N});return this;},getValue:function(){return this.getInputElement().getValue();},isChanged:function(){return false;},selectParentTab:function(){var Q=this;var N=Q.getInputElement(),O=N,P;while((O=O.getParent())&&O.$.className.search('cke_dialog_page_contents')==-1){}if(!O)return Q;P=O.getAttribute('name');if(Q._.dialog._.currentTabId!=P)Q._.dialog.selectPage(P);return Q;},focus:function(){this.selectParentTab().getInputElement().focus();return this;},registerEvents:function(N){var O=/^on([A-Z]\w+)/,P,Q=function(S,T,U,V){T.on('load',function(){S.getInputElement().on(U,V,S);});};for(var R in N){if(!(P=R.match(O)))continue;if(this.eventProcessors[R])this.eventProcessors[R].call(this,this._.dialog,N[R]);else Q(this,this._.dialog,P[1].toLowerCase(),N[R]);}return this;},eventProcessors:{onLoad:function(N,O){N.on('load',O,this);},onShow:function(N,O){N.on('show',O,this);},onHide:function(N,O){N.on('hide',O,this);}},accessKeyDown:function(N,O){this.focus();},accessKeyUp:function(N,O){},disable:function(){var N=this.getInputElement();N.setAttribute('disabled','true');N.addClass('cke_disabled');},enable:function(){var N=this.getInputElement(); -N.removeAttribute('disabled');N.removeClass('cke_disabled');},isEnabled:function(){return!this.getInputElement().getAttribute('disabled');},isVisible:function(){return this.getInputElement().isVisible();},isFocusable:function(){if(!this.isEnabled()||!this.isVisible())return false;return true;}};k.dialog.hbox.prototype=e.extend(new k.dialog.uiElement(),{getChild:function(N){var O=this;if(arguments.length<1)return O._.children.concat();if(!N.splice)N=[N];if(N.length<2)return O._.children[N[0]];else return O._.children[N[0]]&&O._.children[N[0]].getChild?O._.children[N[0]].getChild(N.slice(1,N.length)):null;}},true);k.dialog.vbox.prototype=new k.dialog.hbox();(function(){var N={build:function(O,P,Q){var R=P.children,S,T=[],U=[];for(var V=0;V',P.name,'');return Q.join('');}};a.style.getStyleText=function(P){var Q=P._ST;if(Q)return Q;Q=P.styles;var R=P.attributes&&P.attributes.style||'',S='';if(R.length)R=R.replace(n,';');for(var T in Q){var U=Q[T],V=(T+':'+U).replace(n,';');if(U=='inherit')S+=V;else R+=V;}if(R.length)R=L(R);R+=S;return P._ST=R;};function o(P){var al=this;var Q=P.document;if(P.collapsed){var R=E(al,Q);P.insertNode(R);P.moveToPosition(R,2);return;}var S=al.element,T=al._.definition,U,V=f[S]||(U=true,f.span);P.enlarge(1);P.trim();var W=P.createBookmark(),X=W.startNode,Y=W.endNode,Z=X,aa;while(Z){var ab=false;if(Z.equals(Y)){Z=null;ab=true;}else{var ac=Z.type,ad=ac==1?Z.getName():null;if(ad&&Z.getAttribute('_cke_bookmark')){Z=Z.getNextSourceNode(true);continue;}if(!ad||V[ad]&&(Z.getPosition(Y)|4|0|8)==4+0+8&&(!T.childRule||T.childRule(Z))){var ae=Z.getParent();if(ae&&((ae.getDtd()||f.span)[S]||U)&&(!T.parentRule||T.parentRule(ae))){if(!aa&&(!ad||!f.$removeEmpty[ad]||(Z.getPosition(Y)|4|0|8)==4+0+8)){aa=new d.range(Q);aa.setStartBefore(Z);}if(ac==3||ac==1&&!Z.getChildCount()){var af=Z,ag;while(!af.$.nextSibling&&(ag=af.getParent(),V[ag.getName()])&&(ag.getPosition(X)|2|0|8)==2+0+8&&(!T.childRule||T.childRule(ag)))af=ag;aa.setEndAfter(af);if(!af.$.nextSibling)ab=true;}}else ab=true;}else ab=true;Z=Z.getNextSourceNode();}if(ab&&aa&&!aa.collapsed){var ah=E(al,Q),ai=aa.getCommonAncestor();while(ah&&ai){if(ai.getName()==S){for(var aj in T.attributes){if(ah.getAttribute(aj)==ai.getAttribute(aj))ah.removeAttribute(aj);}for(var ak in T.styles){if(ah.getStyle(ak)==ai.getStyle(ak))ah.removeStyle(ak);}if(!ah.hasAttributes()){ah=null;break;}}ai=ai.getParent();}if(ah){aa.extractContents().appendTo(ah);B(al,ah);aa.insertNode(ah);ah.mergeSiblings();if(!c)ah.$.normalize();}aa=null;}}P.moveToBookmark(W);P.shrink(2);};function p(P){P.enlarge(1); -var Q=P.createBookmark(),R=Q.startNode;if(P.collapsed){var S=new d.elementPath(R.getParent()),T;for(var U=0,V;U'+R+'';else P.setHtml(R);Q.remove();};function w(P){var Q=/(\S\s*)\n(?:\s|(]+_cke_bookmark.*?\/span>))*\n(?!$)/gi,R=P.getName(),S=x(P.getOuterHtml(),Q,function(U,V,W){return V+''+W+'
';
-}),T=[];S.replace(/([\s\S]*?)<\/pre>/gi,function(U,V){T.push(V);});return T;};function x(P,Q,R){var S='',T='';P=P.replace(/(^]+_cke_bookmark.*?\/span>)|(]+_cke_bookmark.*?\/span>$)/gi,function(U,V,W){V&&(S=V);W&&(T=W);return '';});return S+P.replace(Q,R)+T;};function y(P,Q){var R=new d.documentFragment(Q.getDocument());for(var S=0;S');T=T.replace(/[ \t]{2,}/g,function(V){return e.repeat(' ',V.length-1)+' ';});var U=Q.clone();U.setHtml(T);R.append(U);}return R;};function z(P,Q){var R=P.getHtml();R=x(R,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');R=R.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'$1');R=R.replace(/([ \t\n\r]+| )/g,' ');R=R.replace(/]*>/gi,'\n');if(c){var S=P.getDocument().createElement('div');S.append(Q);Q.$.outerHTML='
'+R+'
';Q=S.getFirst().remove();}else Q.setHtml(R);return Q;};function A(P,Q){var R=P._.definition,S=e.extend({},R.attributes,J(P)[Q.getName()]),T=R.styles,U=e.isEmpty(S)&&e.isEmpty(T);for(var V in S){if((V=='class'||P._.definition.fullMatch)&&Q.getAttribute(V)!=K(V,S[V]))continue;U=Q.hasAttribute(V);Q.removeAttribute(V);}for(var W in T){if(P._.definition.fullMatch&&Q.getStyle(W)!=K(W,T[W],true))continue;U=U||!!Q.getStyle(W);Q.removeStyle(W);}U&&D(Q);};function B(P,Q){var R=P._.definition,S=R.attributes,T=R.styles,U=J(P),V=Q.getElementsByTag(P.element);for(var W=V.count();--W>=0;)A(P,V.getItem(W));for(var X in U){if(X!=P.element){V=Q.getElementsByTag(X);for(W=V.count()-1;W>=0;W--){var Y=V.getItem(W);C(Y,U[X]);}}}};function C(P,Q){var R=Q&&Q.attributes;if(R)for(var S=0;S0)G+=(E.$.offsetWidth||0)-(E.$.clientWidth||0);G+=4;E.setStyle('width',G+'px');u.element.addClass('cke_frameLoaded');var H=u.element.$.scrollHeight;if(c&&b.quirks&&H>0)H+=(E.$.offsetHeight||0)-(E.$.clientHeight||0);E.setStyle('height',H+'px');t._.currentBlock.element.setStyle('display','none').removeStyle('display');}else E.removeStyle('height');var I=t.element,J=I.getWindow(),K=J.getScrollPosition(),L=J.getViewPaneSize(),M={height:I.$.offsetHeight,width:I.$.offsetWidth};if(z?A<0:A+M.width>L.width+K.x)A+=M.width*(z?1:-1);if(B+M.height>L.height+K.y)B-=M.height;if(c){var N=new h(v.$.offsetParent),O=N;if(O.getName()=='html')O=O.getDocument().getBody();if(O.getComputedStyle('direction')=='rtl')if(b.ie8Compat)A-=v.getDocument().getDocumentElement().$.scrollLeft*2;else A-=N.$.scrollWidth-N.$.clientWidth;}v.setStyles({top:B+'px',left:A+'px'});v.setOpacity(1);},this);t.isLoaded?D():t.onLoad=D;e.setTimeout(function(){w.$.contentWindow.focus();this.allowBlur(true);},0,this);},0,this);this.visible=1;if(this.onShow)this.onShow.call(this);m=false;},hide:function(){var o=this;if(o.visible&&(!o.onHide||o.onHide.call(o)!==true)){o.hideChild(); -o.element.setStyle('display','none');o.visible=0;}},allowBlur:function(o){var p=this._.panel;if(o!=undefined)p.allowBlur=o;return p.allowBlur;},showAsChild:function(o,p,q,r,s,t){if(this._.activeChild==o&&o._.panel._.offsetParentId==q.getId())return;this.hideChild();o.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=o;this._.focused=false;o.showBlock(p,q,r,s,t);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){o.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var o=this._.activeChild;if(o){delete o.onHide;delete this._.activeChild;o.hide();}}}});a.on('instanceDestroyed',function(){var o=e.isEmpty(a.instances);for(var p in l){var q=l[p];if(o)q.destroy();else q.element.hide();}o&&(l={});});})();j.add('menu',{beforeInit:function(l){var m=l.config.menu_groups.split(','),n=l._.menuGroups={},o=l._.menuItems={};for(var p=0;p'],A=q.length,B=A&&q[0].group;for(var C=0;C');B=D.group;}D.render(this,C,z);}z.push('');t.setHtml(z.join(''));if(this.parent)this.parent._.panel.showAsChild(s,this.id,m,n,o,p);else s.showBlock(this.id,m,n,o,p);r.fire('menuShow',[s]);},hide:function(){this._.panel&&this._.panel.hide();}}});function l(m){m.sort(function(n,o){if(n.groupo.group)return 1;return n.ordero.order?1:0;});};})();a.menuItem=e.createClass({$:function(l,m,n){var o=this;e.extend(o,n,{order:0,className:'cke_button_'+m});o.group=l._.menuGroups[o.group];o.editor=l;o.name=m;},proto:{render:function(l,m,n){var u=this;var o=l.id+String(m),p=typeof u.state=='undefined'?2:u.state,q=' cke_'+(p==1?'on':p==0?'disabled':'off'),r=u.label;if(u.className)q+=' '+u.className;var s=u.getItems;n.push(''+''); -if(s)n.push('','&#',u.editor.lang.dir=='rtl'?'9668':'9658',';','');n.push(r,'');}}});i.menu_subMenuDelay=400;i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';(function(){var l=function(n,o){return n._.modes&&n._.modes[o||n.mode];},m;j.add('editingblock',{init:function(n){if(!n.config.editingBlock)return;n.on('themeSpace',function(o){if(o.data.space=='contents')o.data.html+='
';});n.on('themeLoaded',function(){n.fireOnce('editingBlockReady');});n.on('uiReady',function(){n.setMode(n.config.startupMode);});n.on('afterSetData',function(){if(!m){function o(){m=true;l(n).loadData(n.getData());m=false;};if(n.mode)o();else n.on('mode',function(){o();n.removeListener('mode',arguments.callee);});}});n.on('beforeGetData',function(){if(!m&&n.mode){m=true;n.setData(l(n).getData());m=false;}});n.on('getSnapshot',function(o){if(n.mode)o.data=l(n).getSnapshotData();});n.on('loadSnapshot',function(o){if(n.mode)l(n).loadSnapshotData(o.data);});n.on('mode',function(o){o.removeListener();b.webkit&&n.container.on('focus',function(){n.focus();});if(n.config.startupFocus)n.focus();setTimeout(function(){n.fireOnce('instanceReady');a.fire('instanceReady',null,n);},0);});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(n,o){o.name=n;(this._.modes||(this._.modes={}))[n]=o;};a.editor.prototype.setMode=function(n){var o,p=this.getThemeSpace('contents'),q=this.checkDirty();if(this.mode){if(n==this.mode)return;this.fire('beforeModeUnload');var r=l(this);o=r.getData();r.unload(p);this.mode='';}p.setHtml('');var s=l(this,n);if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".';if(!q)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});s.load(p,typeof o!='string'?this.getData():o);};a.editor.prototype.focus=function(){var n=l(this);if(n)n.focus();};})();i.startupMode='wysiwyg';i.startupFocus=false;i.editingBlock=true;(function(){function l(){var v=this;try{var s=v.getSelection();if(!s||!s.document.getWindow().$)return;var t=s.getStartElement(),u=new d.elementPath(t);if(!u.compare(v._.selectionPreviousPath)){v._.selectionPreviousPath=u;v.fire('selectionChange',{selection:s,path:u,element:t});}}catch(w){}};var m,n;function o(){n=true;if(m)return;p.call(this);m=e.setTimeout(p,200,this);};function p(){m=null;if(n){e.setTimeout(l,0,this); -n=false;}};var q={modes:{wysiwyg:1,source:1},exec:function(s){switch(s.mode){case 'wysiwyg':s.document.$.execCommand('SelectAll',false,null);break;case 'source':var t=s.textarea.$;if(c)t.createTextRange().execCommand('SelectAll');else{t.selectionStart=0;t.selectionEnd=t.value.length;}t.focus();}},canUndo:false};j.add('selection',{init:function(s){s.on('contentDom',function(){var t=s.document,u=t.getBody(),v=t.getDocumentElement();if(c){var w,x,y=1;u.on('focusin',function(C){if(C.data.$.srcElement.nodeName!='BODY')return;if(w){if(y)try{w.select();}catch(D){}w=null;}});u.on('focus',function(){x=true;B();});u.on('beforedeactivate',function(C){if(C.data.$.toElement)return;x=false;y=1;});if(c&&b.version<8)s.on('blur',function(C){s.document&&s.document.$.selection.empty();});v.on('mousedown',function(){y=0;});v.on('mouseup',function(){y=1;});if(c&&(b.ie7Compat||b.version<8||b.quirks))v.on('click',function(C){if(C.data.getTarget().getName()=='html')s.getSelection().getRanges()[0].select();});var z;u.on('mousedown',function(C){if(C.data.$.button==2){var D=s.document.$.selection;if(D.type=='None')z=s.window.getScrollPosition();}A();});u.on('mouseup',function(C){if(C.data.$.button==2&&z){s.document.$.documentElement.scrollLeft=z.x;s.document.$.documentElement.scrollTop=z.y;}z=null;x=true;setTimeout(function(){B(true);},0);});u.on('keydown',A);u.on('keyup',function(){x=true;B();});t.on('selectionchange',B);function A(){x=false;};function B(C){if(x){var D=s.document,E=s.getSelection(),F=E&&E.getNative();if(C&&F&&F.type=='None')if(!D.$.queryCommandEnabled('InsertImage')){e.setTimeout(B,50,this,true);return;}var G;if(F&&F.type&&F.type!='Control'&&(G=F.createRange())&&(G=G.parentElement())&&(G=G.nodeName)&&G.toLowerCase() in {input:1,textarea:1})return;w=F&&E.getRanges()[0];o.call(s);}};}else{t.on('mouseup',o,s);t.on('keyup',o,s);}});s.addCommand('selectAll',q);s.ui.addButton('SelectAll',{label:s.lang.selectAll,command:'selectAll'});s.selectionChange=o;}});a.editor.prototype.getSelection=function(){return this.document&&this.document.getSelection();};a.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath;};g.prototype.getSelection=function(){var s=new d.selection(this);return!s||s.isInvalid?null:s;};a.SELECTION_NONE=1;a.SELECTION_TEXT=2;a.SELECTION_ELEMENT=3;d.selection=function(s){var v=this;var t=s.getCustomData('cke_locked_selection');if(t)return t;v.document=s;v.isLocked=false;v._={cache:{}};if(c){var u=v.getNative().createRange();if(!u||u.item&&u.item(0).ownerDocument!=v.document.$||u.parentElement&&u.parentElement().ownerDocument!=v.document.$)v.isInvalid=true; -}return v;};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,th:1,thead:1,tfoot:1};d.selection.prototype={getNative:c?function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.$.selection);}:function(){return this._.cache.nativeSel||(this._.cache.nativeSel=this.document.getWindow().$.getSelection());},getType:c?function(){var s=this._.cache;if(s.type)return s.type;var t=1;try{var u=this.getNative(),v=u.type;if(v=='Text')t=2;if(v=='Control')t=3;if(u.createRange().parentElement)t=2;}catch(w){}return s.type=t;}:function(){var s=this._.cache;if(s.type)return s.type;var t=2,u=this.getNative();if(!u)t=1;else if(u.rangeCount==1){var v=u.getRangeAt(0),w=v.startContainer;if(w==v.endContainer&&w.nodeType==1&&v.endOffset-v.startOffset==1&&r[w.childNodes[v.startOffset].nodeName.toLowerCase()])t=3;}return s.type=t;},getRanges:(function(){var s=c?(function(){var t=function(u,v){u=u.duplicate();u.collapse(v);var w=u.parentElement(),x=w.childNodes,y;for(var z=0;z0)break;else if(!B||C==1&&B==-1)return{container:w,offset:z};else if(!C)return{container:w,offset:z+1};y=null;}}if(!y){y=u.duplicate();y.moveToElementText(w);y.collapse(false);}y.setEndPoint('StartToStart',u);var D=y.text.replace(/(\r\n|\r)/g,'\n').length;try{while(D>0)D-=x[--z].nodeValue.length;}catch(E){D=0;}if(D===0)return{container:w,offset:z};else return{container:x[z],offset:-D};};return function(){var E=this;var u=E.getNative(),v=u&&u.createRange(),w=E.getType(),x;if(!u)return[];if(w==2){x=new d.range(E.document);var y=t(v,true);x.setStart(new d.node(y.container),y.offset);y=t(v);x.setEnd(new d.node(y.container),y.offset);return[x];}else if(w==3){var z=[];for(var A=0;A=z.getLength())D.setStartAfter(z);else D.setStartBefore(z);if(A&&A.type==3)if(!C)D.setEndBefore(A);else D.setEndAfter(A);var F=new d.walker(D);F.evaluator=function(G){if(G.type==1&&G.getAttribute('contenteditable')=='false'){var H=x.clone();x.setEndBefore(G);if(x.collapsed)v.splice(w--,1);if(!(G.getPosition(D.endContainer)&16)){H.setStartAfter(G);if(!H.collapsed)v.splice(w+1,0,H);}return true;}return false;};F.next();}}return u.ranges;};})(),getStartElement:function(){var z=this;var s=z._.cache;if(s.startElement!==undefined)return s.startElement;var t,u=z.getNative();switch(z.getType()){case 3:return z.getSelectedElement();case 2:var v=z.getRanges()[0];if(v)if(!v.collapsed){v.optimize();for(;;){var w=v.startContainer,x=v.startOffset;if(x==(w.getChildCount?w.getChildCount():w.getLength())&&!w.isBlockBoundary())v.setStartAfter(w);else break;}t=v.startContainer;if(t.type!=1)return t.getParent();t=t.getChild(v.startOffset);if(!t||t.type!=1)return v.startContainer;var y=t.getFirst();while(y&&y.type==1){t=y;y=y.getFirst();}return t;}if(c){v=u.createRange();v.collapse(true);t=v.parentElement();}else{t=u.anchorNode;if(t&&t.nodeType!=1)t=t.parentNode;}}return s.startElement=t?new h(t):null;},getSelectedElement:function(){var s=this._.cache;if(s.selectedElement!==undefined)return s.selectedElement;var t=this,u=e.tryThese(function(){return t.getNative().createRange().item(0);},function(){var v=t.getRanges()[0],w,x;for(var y=2;y&&!((w=v.getEnclosedNode())&&w.type==1&&r[w.getName()]&&(x=w));y--)v.shrink(1);return x.$;});return s.selectedElement=u?new h(u):null;},lock:function(){var s=this;s.getRanges();s.getStartElement();s.getSelectedElement();s._.cache.nativeSel={};s.isLocked=true;s.document.setCustomData('cke_locked_selection',s);},unlock:function(s){var x=this;var t=x.document,u=t.getCustomData('cke_locked_selection');if(u){t.setCustomData('cke_locked_selection',null);if(s){var v=u.getSelectedElement(),w=!v&&u.getRanges();x.isLocked=false;x.reset();t.getBody().focus();if(v)x.selectElement(v);else x.selectRanges(w);}}if(!u||!s){x.isLocked=false;x.reset();}},reset:function(){this._.cache={}; -},selectElement:function(s){var v=this;if(v.isLocked){var t=new d.range(v.document);t.setStartBefore(s);t.setEndAfter(s);v._.cache.selectedElement=s;v._.cache.startElement=s;v._.cache.ranges=new d.rangeList(t);v._.cache.type=3;return;}if(c){v.getNative().empty();try{t=v.document.$.body.createControlRange();t.addElement(s.$);t.select();}catch(w){t=v.document.$.body.createTextRange();t.moveToElementText(s.$);t.select();}finally{v.document.fire('selectionchange');}v.reset();}else{t=v.document.$.createRange();t.selectNode(s.$);var u=v.getNative();u.removeAllRanges();u.addRange(t);v.reset();}},selectRanges:function(s){var C=this;if(C.isLocked){C._.cache.selectedElement=null;C._.cache.startElement=s[0]&&s[0].getTouchedStartNode();C._.cache.ranges=new d.rangeList(s);C._.cache.type=2;return;}if(c){if(s.length>1){var t=s[s.length-1];s[0].setEnd(t.endContainer,t.endOffset);s.length=1;}if(s[0])s[0].select();C.reset();}else{var u=C.getNative();if(s.length)u.removeAllRanges();for(var v=0;v=0){r.collapse(true);p.setEnd(r.endContainer.$,r.endOffset);}else throw s;}var q=r.document.getSelection().getNative();q.removeAllRanges();q.addRange(p);};})();(function(){var l={elements:{$:function(m){var n=m.attributes,o=n&&n._cke_realelement,p=o&&new a.htmlParser.fragment.fromHtml(decodeURIComponent(o)),q=p&&p.children[0];if(q&&m.attributes._cke_resizable){var r=m.attributes.style;if(r){var s=/(?:^|\s)width\s*:\s*(\d+)/i.exec(r),t=s&&s[1];s=/(?:^|\s)height\s*:\s*(\d+)/i.exec(r);var u=s&&s[1];if(t)q.attributes.width=t;if(u)q.attributes.height=u;}}return q;}}};j.add('fakeobjects',{requires:['htmlwriter'],afterInit:function(m){var n=m.dataProcessor,o=n&&n.htmlFilter;if(o)o.addRules(l);}});})();a.editor.prototype.createFakeElement=function(l,m,n,o){var p=this.lang.fakeobjects,q={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(l.getOuterHtml()),_cke_real_node_type:l.type,alt:p[n]||p.unknown,align:l.getAttribute('align')||''};if(n)q._cke_real_element_type=n;if(o)q._cke_resizable=o;return this.document.createElement('img',{attributes:q});};a.editor.prototype.createFakeParserElement=function(l,m,n,o){var p=this.lang.fakeobjects,q,r=new a.htmlParser.basicWriter();l.writeHtml(r);q=r.getHtml();var s={'class':m,src:a.getUrl('images/spacer.gif'),_cke_realelement:encodeURIComponent(q),_cke_real_node_type:l.type,alt:p[n]||p.unknown,align:l.attributes.align||''};if(n)s._cke_real_element_type=n;if(o)s._cke_resizable=o;return new a.htmlParser.element('img',s);};a.editor.prototype.restoreRealElement=function(l){if(l.getAttribute('_cke_real_node_type')!=1)return null; -return h.createFromHtml(decodeURIComponent(l.getAttribute('_cke_realelement')),this.document);};j.add('richcombo',{requires:['floatpanel','listblock','button'],beforeInit:function(l){l.ui.addHandler(3,k.richCombo.handler);}});a.UI_RICHCOMBO=3;k.richCombo=e.createClass({$:function(l){var n=this;e.extend(n,l,{title:l.label,modes:{wysiwyg:1}});var m=n.panel||{};delete n.panel;n.id=e.getNextNumber();n.document=m&&m.parent&&m.parent.getDocument()||a.document;m.className=(m.className||'')+' cke_rcombopanel';m.block={multiSelect:m.multiSelect,attributes:m.attributes};n._={panelDefinition:m,items:{},state:2};},statics:{handler:{create:function(l){return new k.richCombo(l);}}},proto:{renderHtml:function(l){var m=[];this.render(l,m);return m.join('');},render:function(l,m){var n=b,o='cke_'+this.id,p=e.addFunction(function(s){var v=this;var t=v._;if(t.state==0)return;v.createPanel(l);if(t.on){t.panel.hide();return;}if(!t.committed){t.list.commit();t.committed=1;}var u=v.getValue();if(u)t.list.mark(u);else t.list.unmarkAll();t.panel.showBlock(v.id,new h(s),4);},this),q={id:o,combo:this,focus:function(){var s=a.document.getById(o).getChild(1);s.focus();},clickFn:p};l.on('mode',function(){this.setState(this.modes[l.mode]?2:0);},this);var r=e.addFunction(function(s,t){s=new d.event(s);var u=s.getKeystroke();switch(u){case 13:case 32:case 40:e.callFunction(p,t);break;default:q.onkey(q,u);}s.preventDefault();});q.keyDownFn=r;m.push('','','',this.label,'','=10900&&!n.hc?'':" href=\"javascript:void('"+this.label+"')\"",' role="button" aria-labelledby="',o,'_label" aria-describedby="',o,'_text" aria-haspopup="true"');if(b.opera||b.gecko&&b.mac)m.push(' onkeypress="return false;"');if(b.gecko)m.push(' onblur="this.style.cssText = this.style.cssText;"');m.push(' onkeydown="CKEDITOR.tools.callFunction( ',r,', event, this );" onclick="CKEDITOR.tools.callFunction(',p,', this); return false;">'+this.label+''+''+''+(b.hc?'':'')+''+''+''+'');if(this.onRender)this.onRender();return q;},createPanel:function(l){if(this._.panel)return;var m=this._.panelDefinition,n=this._.panelDefinition.block,o=m.parent||a.document.getBody(),p=new k.floatPanel(l,o,m),q=p.addListBlock(this.id,n),r=this; -p.onShow=function(){if(r.className)this.element.getFirst().addClass(r.className+'_panel');r.setState(1);q.focus(!r.multiSelect&&r.getValue());r._.on=1;if(r.onOpen)r.onOpen();};p.onHide=function(){if(r.className)this.element.getFirst().removeClass(r.className+'_panel');r.setState(2);r._.on=0;if(r.onClose)r.onClose();};p.onEscape=function(){p.hide();r.document.getById('cke_'+r.id).getFirst().getNext().focus();};q.onClick=function(s,t){r.document.getWindow().focus();if(r.onClick)r.onClick.call(r,s,t);if(t)r.setValue(s,r._.items[s]);else r.setValue('');p.hide();};this._.panel=p;this._.list=q;p.getBlock(this.id).onHide=function(){r._.on=0;r.setState(2);};if(this.init)this.init();},setValue:function(l,m){var o=this;o._.value=l;var n=o.document.getById('cke_'+o.id+'_text');if(!(l||m)){m=o.label;n.addClass('cke_inline_label');}else n.removeClass('cke_inline_label');n.setHtml(typeof m!='undefined'?m:l);},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(l){this._.list.mark(l);},hideItem:function(l){this._.list.hideItem(l);},hideGroup:function(l){this._.list.hideGroup(l);},showAll:function(){this._.list.showAll();},add:function(l,m,n){this._.items[l]=n||l;this._.list.add(l,m,n);},startGroup:function(l){this._.list.startGroup(l);},commit:function(){this._.list.commit();},setState:function(l){var m=this;if(m._.state==l)return;m.document.getById('cke_'+m.id).setState(l);m._.state=l;}}});k.prototype.addRichCombo=function(l,m){this.add(l,3,m);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var n=this;n.base();n.indentationChars='\t';n.selfClosingEnd=' />';n.lineBreakChars='\n';n.forceSimpleAmpersand=false;n.sortAttributes=true;n._.indent=false;n._.indentation='';n._.rules={};var l=f;for(var m in e.extend({},l.$nonBodyContent,l.$block,l.$listItem,l.$tableContent))n.setRules(m,{indent:true,breakBeforeOpen:true,breakAfterOpen:true,breakBeforeClose:!l[m]['#'],breakAfterClose:true});n.setRules('br',{breakAfterOpen:true});n.setRules('title',{indent:false,breakAfterOpen:false});n.setRules('style',{indent:false,breakBeforeClose:true});n.setRules('pre',{indent:false});},proto:{openTag:function(l,m){var o=this;var n=o._.rules[l];if(o._.indent)o.indentation();else if(n&&n.breakBeforeOpen){o.lineBreak();o.indentation();}o._.output.push('<',l);},openTagClose:function(l,m){var o=this;var n=o._.rules[l];if(m)o._.output.push(o.selfClosingEnd);else{o._.output.push('>');if(n&&n.indent)o._.indentation+=o.indentationChars; -}if(n&&n.breakAfterOpen)o.lineBreak();},attribute:function(l,m){if(typeof m=='string'){this.forceSimpleAmpersand&&(m=m.replace(/&/g,'&'));m=e.htmlEncodeAttr(m);}this._.output.push(' ',l,'="',m,'"');},closeTag:function(l){var n=this;var m=n._.rules[l];if(m&&m.indent)n._.indentation=n._.indentation.substr(n.indentationChars.length);if(n._.indent)n.indentation();else if(m&&m.breakBeforeClose){n.lineBreak();n.indentation();}n._.output.push('');if(m&&m.breakAfterClose)n.lineBreak();},text:function(l){if(this._.indent){this.indentation();l=e.ltrim(l);}this._.output.push(l);},comment:function(l){if(this._.indent)this.indentation();this._.output.push('');},lineBreak:function(){var l=this;if(l._.output.length>0)l._.output.push(l.lineBreakChars);l._.indent=true;},indentation:function(){this._.output.push(this._.indentation);this._.indent=false;},setRules:function(l,m){var n=this._.rules[l];if(n)e.extend(n,m,true);else this._.rules[l]=m;}}});j.add('menubutton',{requires:['button','contextmenu'],beforeInit:function(l){l.ui.addHandler(5,k.menuButton.handler);}});a.UI_MENUBUTTON=5;(function(){var l=function(m){var n=this._;if(n.state===0)return;n.previousState=n.state;var o=n.menu;if(!o){o=n.menu=new j.contextMenu(m);o.definition.panel.attributes['aria-label']=m.lang.common.options;o.onHide=e.bind(function(){this.setState(n.previousState);},this);if(this.onMenu)o.addListener(this.onMenu);}if(n.on){o.hide();return;}this.setState(1);o.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(m){var n=m.panel;delete m.panel;this.base(m);this.hasArrow=true;this.click=l;},statics:{handler:{create:function(m){return new k.menuButton(m);}}}});})();j.add('dialogui');(function(){var l=function(t){var w=this;w._||(w._={});w._['default']=w._.initValue=t['default']||'';w._.required=t.required||false;var u=[w._];for(var v=1;v',u.label,'','');else{var C={type:'hbox',widths:u.widths,padding:0,children:[{type:'html',html:'
';else T.setHtml(V);U.remove();};function B(T){var U=/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,V=T.getName(),W=C(T.getOuterHtml(),U,function(Y,Z,aa){return Z+''+aa+'
';}),X=[];W.replace(/([\s\S]*?)<\/pre>/gi,function(Y,Z){X.push(Z);});return X;};function C(T,U,V){var W='',X='';T=T.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(Y,Z,aa){Z&&(W=Z);aa&&(X=aa);return '';});return W+T.replace(U,V)+X;};function D(T,U){var V;if(T.length>1)V=new d.documentFragment(U.getDocument());for(var W=0;W');X=X.replace(/[ \t]{2,}/g,function(Z){return e.repeat(' ',Z.length-1)+' ';});if(V){var Y=U.clone();Y.setHtml(X);V.append(Y);}else U.setHtml(X);}return V||U;};function E(T,U){var V=T.getBogus();V&&V.remove();var W=T.getHtml();W=C(W,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,'');W=W.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'$1');W=W.replace(/([ \t\n\r]+| )/g,' ');W=W.replace(/]*>/gi,'\n');if(c){var X=T.getDocument().createElement('div');X.append(U);U.$.outerHTML='
'+W+'
';U.copyAttributes(X.getFirst());U=X.getFirst().remove();}else U.setHtml(W);return U;};function F(T,U){var V=T._.definition,W=V.attributes,X=V.styles,Y=N(T)[U.getName()],Z=e.isEmpty(W)&&e.isEmpty(X);for(var aa in W){if((aa=='class'||T._.definition.fullMatch)&&U.getAttribute(aa)!=O(aa,W[aa]))continue;Z=U.hasAttribute(aa);U.removeAttribute(aa);}for(var ab in X){if(T._.definition.fullMatch&&U.getStyle(ab)!=O(ab,X[ab],true))continue;Z=Z||!!U.getStyle(ab);U.removeStyle(ab);}H(U,Y,m[U.getName()]);if(Z)!f.$block[U.getName()]||T._.enterMode==2&&!U.hasAttributes()?I(U):U.renameNode(T._.enterMode==1?'p':'div');};function G(T,U){var V=T._.definition,W=V.attributes,X=V.styles,Y=N(T),Z=U.getElementsByTag(T.element);for(var aa=Z.count();--aa>=0;)F(T,Z.getItem(aa));for(var ab in Y){if(ab!=T.element){Z=U.getElementsByTag(ab);for(aa=Z.count()-1;aa>=0;aa--){var ac=Z.getItem(aa);H(ac,Y[ab]);}}}};function H(T,U,V){var W=U&&U.attributes;if(W)for(var X=0;X0)H+=(F.$.offsetWidth||0)-(F.$.clientWidth||0)+3;H+=4;F.setStyle('width',H+'px');v.element.addClass('cke_frameLoaded');var I=v.element.$.scrollHeight;if(c&&b.quirks&&I>0)I+=(F.$.offsetHeight||0)-(F.$.clientHeight||0)+3;F.setStyle('height',I+'px');u._.currentBlock.element.setStyle('display','none').removeStyle('display');}else F.removeStyle('height');if(A)B-=w.$.offsetWidth;w.setStyle('left',B+'px');var J=u.element,K=J.getWindow(),L=w.$.getBoundingClientRect(),M=K.getViewPaneSize(),N=L.width||L.right-L.left,O=L.height||L.bottom-L.top,P=A?L.right:M.width-L.left,Q=A?M.width-L.right:L.left;if(A){if(PN)B+=N;else if(M.width>N)B-=L.left;else B=B-L.right+M.width;}else if(PN)B-=N;else if(M.width>N)B=B-L.right+M.width;else B-=L.left;var R=M.height-L.top,S=L.top; +if(RO)C-=O;else if(M.height>O)C=C-L.bottom+M.height;else C-=L.top;if(c){var T=new h(w.$.offsetParent),U=T;if(U.getName()=='html')U=U.getDocument().getBody();if(U.getComputedStyle('direction')=='rtl')if(b.ie8Compat)B-=w.getDocument().getDocumentElement().$.scrollLeft*2;else B-=T.$.scrollWidth-T.$.clientWidth;}var V=w.getFirst(),W;if(W=V.getCustomData('activePanel'))W.onHide&&W.onHide.call(this,1);V.setCustomData('activePanel',this);w.setStyles({top:C+'px',left:B+'px'});w.setOpacity(1);},this);u.isLoaded?E():u.onLoad=E;e.setTimeout(function(){x.$.contentWindow.focus();this.allowBlur(true);},0,this);},b.air?200:0,this);this.visible=1;if(this.onShow)this.onShow.call(this);n=0;},hide:function(p){var r=this;if(r.visible&&(!r.onHide||r.onHide.call(r)!==true)){r.hideChild();b.gecko&&r._.iframe.getFrameDocument().$.activeElement.blur();r.element.setStyle('display','none');r.visible=0;r.element.getFirst().removeCustomData('activePanel');var q=p!==false&&r._.returnFocus;if(q){if(b.webkit&&q.type)q.getWindow().$.focus();q.focus();}}},allowBlur:function(p){var q=this._.panel;if(p!=undefined)q.allowBlur=p;return q.allowBlur;},showAsChild:function(p,q,r,s,t,u){if(this._.activeChild==p&&p._.panel._.offsetParentId==r.getId())return;this.hideChild();p.onHide=e.bind(function(){e.setTimeout(function(){if(!this._.focused)this.hide();},0,this);},this);this._.activeChild=p;this._.focused=false;p.showBlock(q,r,s,t,u);if(b.ie7Compat||b.ie8&&b.ie6Compat)setTimeout(function(){p.element.getChild(0).$.style.cssText+='';},100);},hideChild:function(){var p=this._.activeChild;if(p){delete p.onHide;delete p._.returnFocus;delete this._.activeChild;p.hide();}}}});a.on('instanceDestroyed',function(){var p=e.isEmpty(a.instances);for(var q in m){var r=m[q];if(p)r.destroy();else r.element.hide();}p&&(m={});});})();j.add('menu',{beforeInit:function(m){var n=m.config.menu_groups.split(','),o=m._.menuGroups={},p=m._.menuItems={};for(var q=0;q'],B=r.length,C=B&&r[0].group;for(var D=0;D');C=E.group;}E.render(this,D,A);}A.push('');u.setHtml(A.join(''));k.fire('ready',this);if(this.parent)this.parent._.panel.showAsChild(t,this.id,n,o,p,q);else t.showBlock(this.id,n,o,p,q);s.fire('menuShow',[t]);},addListener:function(n){this._.listeners.push(n);},hide:function(n){var o=this;o._.onHide&&o._.onHide();o._.panel&&o._.panel.hide(n);}}});function m(n){n.sort(function(o,p){if(o.groupp.group)return 1;return o.orderp.order?1:0;});};a.menuItem=e.createClass({$:function(n,o,p){var q=this;e.extend(q,p,{order:0,className:'cke_button_'+o});q.group=n._.menuGroups[q.group];q.editor=n;q.name=o;},proto:{render:function(n,o,p){var w=this;var q=n.id+String(o),r=typeof w.state=='undefined'?2:w.state,s=' cke_'+(r==1?'on':r==0?'disabled':'off'),t=w.label;if(w.className)s+=' '+w.className;var u=w.getItems;p.push(''+''+'');if(u)p.push('','&#',w.editor.lang.dir=='rtl'?'9668':'9658',';',''); +p.push(t,'');}}});})();i.menu_groups='clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';(function(){var m;j.add('editingblock',{init:function(n){if(!n.config.editingBlock)return;n.on('themeSpace',function(o){if(o.data.space=='contents')o.data.html+='
';});n.on('themeLoaded',function(){n.fireOnce('editingBlockReady');});n.on('uiReady',function(){n.setMode(n.config.startupMode);});n.on('afterSetData',function(){if(!m){function o(){m=true;n.getMode().loadData(n.getData());m=false;};if(n.mode)o();else n.on('mode',function(){if(n.mode){o();n.removeListener('mode',arguments.callee);}});}});n.on('beforeGetData',function(){if(!m&&n.mode){m=true;n.setData(n.getMode().getData(),null,1);m=false;}});n.on('getSnapshot',function(o){if(n.mode)o.data=n.getMode().getSnapshotData();});n.on('loadSnapshot',function(o){if(n.mode)n.getMode().loadSnapshotData(o.data);});n.on('mode',function(o){o.removeListener();b.webkit&&n.container.on('focus',function(){n.focus();});if(n.config.startupFocus)n.focus();setTimeout(function(){n.fireOnce('instanceReady');a.fire('instanceReady',null,n);},0);});n.on('destroy',function(){var o=this;if(o.mode)o._.modes[o.mode].unload(o.getThemeSpace('contents'));});}});a.editor.prototype.mode='';a.editor.prototype.addMode=function(n,o){o.name=n;(this._.modes||(this._.modes={}))[n]=o;};a.editor.prototype.setMode=function(n){this.fire('beforeSetMode',{newMode:n});var o,p=this.getThemeSpace('contents'),q=this.checkDirty();if(this.mode){if(n==this.mode)return;this._.previousMode=this.mode;this.fire('beforeModeUnload');var r=this.getMode();o=r.getData();r.unload(p);this.mode='';}p.setHtml('');var s=this.getMode(n);if(!s)throw '[CKEDITOR.editor.setMode] Unknown mode "'+n+'".';if(!q)this.on('mode',function(){this.resetDirty();this.removeListener('mode',arguments.callee);});s.load(p,typeof o!='string'?this.getData():o);};a.editor.prototype.getMode=function(n){return this._.modes&&this._.modes[n||this.mode];};a.editor.prototype.focus=function(){this.forceNextSelectionCheck();var n=this.getMode();if(n)n.focus();};})();i.startupMode='wysiwyg';i.editingBlock=true;(function(){function m(){var G=this;try{var D=G.getSelection();if(!D||!D.document.getWindow().$)return;var E=D.getStartElement(),F=new d.elementPath(E);if(!F.compare(G._.selectionPreviousPath)){G._.selectionPreviousPath=F;G.fire('selectionChange',{selection:D,path:F,element:E}); +}}catch(H){}};var n,o;function p(){o=true;if(n)return;q.call(this);n=e.setTimeout(q,200,this);};function q(){n=null;if(o){e.setTimeout(m,0,this);o=false;}};function r(D){function E(I,J){if(!I||I.type==3)return false;var K=D.clone();return K['moveToElementEdit'+(J?'End':'Start')](I);};var F=D.startContainer,G=D.getPreviousNode(A,null,F),H=D.getNextNode(A,null,F);if(E(G)||E(H,1))return true;if(!(G||H)&&!(F.type==1&&F.isBlockBoundary()&&F.getBogus()))return true;return false;};var s={modes:{wysiwyg:1,source:1},readOnly:c||b.webkit,exec:function(D){switch(D.mode){case 'wysiwyg':D.document.$.execCommand('SelectAll',false,null);D.forceNextSelectionCheck();D.selectionChange();break;case 'source':var E=D.textarea.$;if(c)E.createTextRange().execCommand('SelectAll');else{E.selectionStart=0;E.selectionEnd=E.value.length;}E.focus();}},canUndo:false};function t(D){w(D);var E=D.createText('​');D.setCustomData('cke-fillingChar',E);return E;};function u(D){return D&&D.getCustomData('cke-fillingChar');};function v(D){var E=D&&u(D);if(E)if(E.getCustomData('ready'))w(D);else E.setCustomData('ready',1);};function w(D){var E=D&&D.removeCustomData('cke-fillingChar');if(E){var F,G=D.getSelection().getNative(),H=G&&G.type!='None'&&G.getRangeAt(0);if(E.getLength()>1&&H&&H.intersectsNode(E.$)){F=[G.anchorOffset,G.focusOffset];var I=G.anchorNode==E.$&&G.anchorOffset>0,J=G.focusNode==E.$&&G.focusOffset>0;I&&F[0]--;J&&F[1]--;x(G)&&F.unshift(F.pop());}E.setText(E.getText().replace(/\u200B/g,''));if(F){var K=G.getRangeAt(0);K.setStart(K.startContainer,F[0]);K.setEnd(K.startContainer,F[1]);G.removeAllRanges();G.addRange(K);}}};function x(D){if(!D.isCollapsed){var E=D.getRangeAt(0);E.setStart(D.anchorNode,D.anchorOffset);E.setEnd(D.focusNode,D.focusOffset);return E.collapsed;}};j.add('selection',{init:function(D){if(b.webkit){D.on('selectionChange',function(){v(D.document);});D.on('beforeSetMode',function(){w(D.document);});var E,F;function G(){var I=D.document,J=u(I);if(J){var K=I.$.defaultView.getSelection();if(K.type=='Caret'&&K.anchorNode==J.$)F=1;E=J.getText();J.setText(E.replace(/\u200B/g,''));}};function H(){var I=D.document,J=u(I);if(J){J.setText(E);if(F){I.$.defaultView.getSelection().setPosition(J.$,J.getLength());F=0;}}};D.on('beforeUndoImage',G);D.on('afterUndoImage',H);D.on('beforeGetData',G,null,null,0);D.on('getData',H);}D.on('contentDom',function(){var I=D.document,J=a.document,K=I.getBody(),L=I.getDocumentElement();if(c){var M,N,O=1;K.on('focusin',function(V){if(V.data.$.srcElement.nodeName!='BODY')return; +var W=I.getCustomData('cke_locked_selection');if(W){W.unlock(1);W.lock();}else if(M&&O){try{M.select();}catch(X){}M=null;}});K.on('focus',function(){N=1;U();});K.on('beforedeactivate',function(V){if(V.data.$.toElement)return;N=0;O=1;});c&&D.on('blur',function(){try{I.$.selection.empty();}catch(V){}});L.on('mousedown',function(){O=0;});L.on('mouseup',function(){O=1;});var P;K.on('mousedown',function(V){if(V.data.$.button==2){var W=D.document.$.selection;if(W.type=='None')P=D.window.getScrollPosition();}T();});K.on('mouseup',function(V){if(V.data.$.button==2&&P){D.document.$.documentElement.scrollLeft=P.x;D.document.$.documentElement.scrollTop=P.y;}P=null;N=1;setTimeout(function(){U(true);},0);});K.on('keydown',T);K.on('keyup',function(){N=1;U();});if(I.$.compatMode!='BackCompat'){if(b.ie7Compat||b.ie6Compat){function Q(V,W,X){try{V.moveToPoint(W,X);}catch(Y){}};L.on('mousedown',function(V){function W(ab){ab=ab.data.$;if(Z){var ac=K.$.createTextRange();Q(ac,ab.x,ab.y);Z.setEndPoint(aa.compareEndPoints('StartToStart',ac)<0?'EndToEnd':'StartToStart',ac);Z.select();}};function X(){J.removeListener('mouseup',Y);L.removeListener('mouseup',Y);};function Y(){L.removeListener('mousemove',W);X();Z.select();};V=V.data;if(V.getTarget().is('html')&&V.$.x0)P=Q-1;else if(R<0)O=Q+1;else if(b.ie9Compat&&L.tagName=='BR'){var U=J.defaultView.getSelection();return{container:U[H?'anchorNode':'focusNode'],offset:U[H?'anchorOffset':'focusOffset']};}else return{container:I,offset:E(L)};}if(Q==-1||Q==K.length-1&&R<0){N.moveToElementText(I); +N.setEndPoint('StartToStart',G);S=N.text.replace(/(\r\n|\r)/g,'\n').length;K=I.childNodes;if(!S){L=K[K.length-1];if(L.nodeType!=3)return{container:I,offset:K.length};else return{container:L,offset:L.nodeValue.length};}var V=K.length;while(S>0&&V>0){M=K[--V];if(M.nodeType==3){T=M;S-=M.nodeValue.length;}}return{container:T,offset:-S};}else{N.collapse(R>0?true:false);N.setEndPoint(R>0?'StartToStart':'EndToStart',G);S=N.text.replace(/(\r\n|\r)/g,'\n').length;if(!S)return{container:I,offset:E(L)+(R>0?0:1)};while(S>0)try{M=L[R>0?'previousSibling':'nextSibling'];if(M.nodeType==3){S-=M.nodeValue.length;T=M;}L=M;}catch(W){return{container:I,offset:E(L)};}return{container:T,offset:R>0?-S:T.nodeValue.length+S};}};return function(){var Q=this;var G=Q.getNative(),H=G&&G.createRange(),I=Q.getType(),J;if(!G)return[];if(I==2){J=new d.range(Q.document);var K=F(H,true);J.setStart(new d.node(K.container),K.offset);K=F(H);J.setEnd(new d.node(K.container),K.offset);if(J.endContainer.getPosition(J.startContainer)&4&&J.endOffset<=J.startContainer.getIndex())J.collapse();return[J];}else if(I==3){var L=[];for(var M=0;M=L.getLength())P.setStartAfter(L);else P.setStartBefore(L);if(M&&M.type==3)if(!O)P.setEndBefore(M);else P.setEndAfter(M);var Q=new d.walker(P);Q.evaluator=function(R){if(R.type==1&&R.isReadOnly()){var S=I.clone();I.setEndBefore(R);if(I.collapsed)G.splice(H--,1); +if(!(R.getPosition(P.endContainer)&16)){S.setStartAfter(R);if(!S.collapsed)G.splice(H+1,0,S);}return true;}return false;};Q.next();}}return F.ranges;};})(),getStartElement:function(){var K=this;var D=K._.cache;if(D.startElement!==undefined)return D.startElement;var E,F=K.getNative();switch(K.getType()){case 3:return K.getSelectedElement();case 2:var G=K.getRanges()[0];if(G){if(!G.collapsed){G.optimize();while(1){var H=G.startContainer,I=G.startOffset;if(I==(H.getChildCount?H.getChildCount():H.getLength())&&!H.isBlockBoundary())G.setStartAfter(H);else break;}E=G.startContainer;if(E.type!=1)return E.getParent();E=E.getChild(G.startOffset);if(!E||E.type!=1)E=G.startContainer;else{var J=E.getFirst();while(J&&J.type==1){E=J;J=J.getFirst();}}}else{E=G.startContainer;if(E.type!=1)E=E.getParent();}E=E.$;}}return D.startElement=E?new h(E):null;},getSelectedElement:function(){var D=this._.cache;if(D.selectedElement!==undefined)return D.selectedElement;var E=this,F=e.tryThese(function(){return E.getNative().createRange().item(0);},function(){var G,H,I=E.getRanges()[0],J=I.getCommonAncestor(1,1),K={table:1,ul:1,ol:1,dl:1};for(var L in K){if(G=J.getAscendant(L,1))break;}if(G){var M=new d.range(this.document);M.setStartAt(G,1);M.setEnd(I.startContainer,I.startOffset);var N=e.extend(K,f.$listItem,f.$tableContent),O=new d.walker(M),P=function(Q,R){return function(S,T){if(S.type==3&&(!e.trim(S.getText())||S.getParent().data('cke-bookmark')))return true;var U;if(S.type==1){U=S.getName();if(U=='br'&&R&&S.equals(S.getParent().getBogus()))return true;if(T&&U in N||U in f.$removeEmpty)return true;}Q.halted=1;return false;};};O.guard=P(O);if(O.checkBackward()&&!O.halted){O=new d.walker(M);M.setStart(I.endContainer,I.endOffset);M.setEndAt(G,2);O.guard=P(O,1);if(O.checkForward()&&!O.halted)H=G.$;}}if(!H)throw 0;return H;},function(){var G=E.getRanges()[0],H,I;for(var J=2;J&&!((H=G.getEnclosedNode())&&H.type==1&&y[H.getName()]&&(I=H));J--)G.shrink(1);return I.$;});return D.selectedElement=F?new h(F):null;},getSelectedText:function(){var D=this._.cache;if(D.selectedText!==undefined)return D.selectedText;var E='',F=this.getNative();if(this.getType()==2)E=c?F.createRange().text:F.toString();return D.selectedText=E;},lock:function(){var D=this;D.getRanges();D.getStartElement();D.getSelectedElement();D.getSelectedText();D._.cache.nativeSel={};D.isLocked=1;D.document.setCustomData('cke_locked_selection',D);},unlock:function(D){var I=this;var E=I.document,F=E.getCustomData('cke_locked_selection'); +if(F){E.setCustomData('cke_locked_selection',null);if(D){var G=F.getSelectedElement(),H=!G&&F.getRanges();I.isLocked=0;I.reset();if(G)I.selectElement(G);else I.selectRanges(H);}}if(!F||!D){I.isLocked=0;I.reset();}},reset:function(){this._.cache={};},selectElement:function(D){var F=this;if(F.isLocked){var E=new d.range(F.document);E.setStartBefore(D);E.setEndAfter(D);F._.cache.selectedElement=D;F._.cache.startElement=D;F._.cache.ranges=new d.rangeList(E);F._.cache.type=3;return;}E=new d.range(D.getDocument());E.setStartBefore(D);E.setEndAfter(D);E.select();F.document.fire('selectionchange');F.reset();},selectRanges:function(D){var R=this;if(R.isLocked){R._.cache.selectedElement=null;R._.cache.startElement=D[0]&&D[0].getTouchedStartNode();R._.cache.ranges=new d.rangeList(D);R._.cache.type=2;return;}if(c){if(D.length>1){var E=D[D.length-1];D[0].setEnd(E.endContainer,E.endOffset);D.length=1;}if(D[0])D[0].select();R.reset();}else{var F=R.getNative();if(!F)return;if(D.length){F.removeAllRanges();b.webkit&&w(R.document);}for(var G=0;G=0){M.collapse(1);N.setEnd(M.endContainer.$,M.endOffset);}else throw S;}F.addRange(N);}R.document.fire('selectionchange');R.reset();}},createBookmarks:function(D){return this.getRanges().createBookmarks(D);},createBookmarks2:function(D){return this.getRanges().createBookmarks2(D);},selectBookmarks:function(D){var E=[];for(var F=0;F','','',this.label,'','=10900&&!o.hc?'':" href=\"javascript:void('"+this.label+"')\"",' role="button" aria-labelledby="',p,'_label" aria-describedby="',p,'_text" aria-haspopup="true"');if(b.opera||b.gecko&&b.mac)n.push(' onkeypress="return false;"');if(b.gecko)n.push(' onblur="this.style.cssText = this.style.cssText;"');n.push(' onkeydown="CKEDITOR.tools.callFunction( ',t,', event, this );" onfocus="return CKEDITOR.tools.callFunction(',u,', event);" '+(c?'onclick="return false;" onmouseup':'onclick')+'="CKEDITOR.tools.callFunction(',q,', this); return false;">'+this.label+''+''+''+(b.hc?'▼':b.air?' ':'')+''+''+''+'');if(this.onRender)this.onRender();return r;},createPanel:function(m){if(this._.panel)return;var n=this._.panelDefinition,o=this._.panelDefinition.block,p=n.parent||a.document.getBody(),q=new k.floatPanel(m,p,n),r=q.addListBlock(this.id,o),s=this;q.onShow=function(){if(s.className)this.element.getFirst().addClass(s.className+'_panel');s.setState(1);r.focus(!s.multiSelect&&s.getValue());s._.on=1;if(s.onOpen)s.onOpen();};q.onHide=function(t){if(s.className)this.element.getFirst().removeClass(s.className+'_panel');s.setState(s.modes&&s.modes[m.mode]?2:0);s._.on=0;if(!t&&s.onClose)s.onClose();};q.onEscape=function(){q.hide();};r.onClick=function(t,u){s.document.getWindow().focus();if(s.onClick)s.onClick.call(s,t,u);if(u)s.setValue(t,s._.items[t]);else s.setValue('');q.hide(false);};this._.panel=q;this._.list=r;q.getBlock(this.id).onHide=function(){s._.on=0;s.setState(2);};if(this.init)this.init();},setValue:function(m,n){var p=this;p._.value=m;var o=p.document.getById('cke_'+p.id+'_text');if(o){if(!(m||n)){n=p.label;o.addClass('cke_inline_label');}else o.removeClass('cke_inline_label');o.setHtml(typeof n!='undefined'?n:m);}},getValue:function(){return this._.value||'';},unmarkAll:function(){this._.list.unmarkAll();},mark:function(m){this._.list.mark(m);},hideItem:function(m){this._.list.hideItem(m);},hideGroup:function(m){this._.list.hideGroup(m);},showAll:function(){this._.list.showAll();},add:function(m,n,o){this._.items[m]=o||m;this._.list.add(m,n,o);},startGroup:function(m){this._.list.startGroup(m); +},commit:function(){var m=this;if(!m._.committed){m._.list.commit();m._.committed=1;k.fire('ready',m);}m._.committed=1;},setState:function(m){var n=this;if(n._.state==m)return;n.document.getById('cke_'+n.id).setState(m);n._.state=m;}}});k.prototype.addRichCombo=function(m,n){this.add(m,'richcombo',n);};j.add('htmlwriter');a.htmlWriter=e.createClass({base:a.htmlParser.basicWriter,$:function(){var o=this;o.base();o.indentationChars='\t';o.selfClosingEnd=' />';o.lineBreakChars='\n';o.forceSimpleAmpersand=0;o.sortAttributes=1;o._.indent=0;o._.indentation='';o._.inPre=0;o._.rules={};var m=f;for(var n in e.extend({},m.$nonBodyContent,m.$block,m.$listItem,m.$tableContent))o.setRules(n,{indent:1,breakBeforeOpen:1,breakAfterOpen:1,breakBeforeClose:!m[n]['#'],breakAfterClose:1});o.setRules('br',{breakAfterOpen:1});o.setRules('title',{indent:0,breakAfterOpen:0});o.setRules('style',{indent:0,breakBeforeClose:1});o.setRules('pre',{indent:0});},proto:{openTag:function(m,n){var p=this;var o=p._.rules[m];if(p._.indent)p.indentation();else if(o&&o.breakBeforeOpen){p.lineBreak();p.indentation();}p._.output.push('<',m);},openTagClose:function(m,n){var p=this;var o=p._.rules[m];if(n)p._.output.push(p.selfClosingEnd);else{p._.output.push('>');if(o&&o.indent)p._.indentation+=p.indentationChars;}if(o&&o.breakAfterOpen)p.lineBreak();m=='pre'&&(p._.inPre=1);},attribute:function(m,n){if(typeof n=='string'){this.forceSimpleAmpersand&&(n=n.replace(/&/g,'&'));n=e.htmlEncodeAttr(n);}this._.output.push(' ',m,'="',n,'"');},closeTag:function(m){var o=this;var n=o._.rules[m];if(n&&n.indent)o._.indentation=o._.indentation.substr(o.indentationChars.length);if(o._.indent)o.indentation();else if(n&&n.breakBeforeClose){o.lineBreak();o.indentation();}o._.output.push('');m=='pre'&&(o._.inPre=0);if(n&&n.breakAfterClose)o.lineBreak();},text:function(m){var n=this;if(n._.indent){n.indentation();!n._.inPre&&(m=e.ltrim(m));}n._.output.push(m);},comment:function(m){if(this._.indent)this.indentation();this._.output.push('');},lineBreak:function(){var m=this;if(!m._.inPre&&m._.output.length>0)m._.output.push(m.lineBreakChars);m._.indent=1;},indentation:function(){var m=this;if(!m._.inPre)m._.output.push(m._.indentation);m._.indent=0;},setRules:function(m,n){var o=this._.rules[m];if(o)e.extend(o,n,true);else this._.rules[m]=n;}}});j.add('menubutton',{requires:['button','menu'],beforeInit:function(m){m.ui.addHandler('menubutton',k.menuButton.handler);}});a.UI_MENUBUTTON='menubutton'; +(function(){var m=function(n){var o=this._;if(o.state===0)return;o.previousState=o.state;var p=o.menu;if(!p){p=o.menu=new a.menu(n,{panel:{className:n.skinClass+' cke_contextmenu',attributes:{'aria-label':n.lang.common.options}}});p.onHide=e.bind(function(){this.setState(this.modes&&this.modes[n.mode]?o.previousState:0);},this);if(this.onMenu)p.addListener(this.onMenu);}if(o.on){p.hide();return;}this.setState(1);p.show(a.document.getById(this._.id),4);};k.menuButton=e.createClass({base:k.button,$:function(n){var o=n.panel;delete n.panel;this.base(n);this.hasArrow=true;this.click=m;},statics:{handler:{create:function(n){return new k.menuButton(n);}}}});})();j.add('dialogui');(function(){var m=function(u){var x=this;x._||(x._={});x._['default']=x._.initValue=u['default']||'';x._.required=u.required||false;var v=[x._];for(var w=1;w',v.label,'',''); +else{var D={type:'hbox',widths:v.widths,padding:0,children:[{type:'html',html:'